[josm] 01/06: New upstream version 0.0.svn13170+dfsg

Bas Couwenberg sebastic at debian.org
Sun Nov 26 17:12:35 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 c4ec665bb5e258108874f2f3e3628905546baafb
Author: Bas Couwenberg <sebastic at xs4all.nl>
Date:   Sun Nov 26 17:33:43 2017 +0100

    New upstream version 0.0.svn13170+dfsg
---
 .classpath                                         |    5 +-
 REVISION                                           |    8 +-
 build.xml                                          |   18 +-
 data/defaultpresets.xml                            |   48 +-
 data/validator/combinations.mapcss                 |   26 +-
 data/validator/geometry.mapcss                     |    9 +-
 data/validator/unnecessary.mapcss                  |    7 +
 eclipse/JOSM (Java 8).launch                       |    3 +-
 i18n/build.xml                                     |    4 +-
 i18n/convmaps.pl                                   |    2 +-
 i18n/convpreset.pl                                 |   11 +-
 i18n/convwiki.pl                                   |   14 +-
 i18n/po/af.po                                      |  358 ++--
 i18n/po/am.po                                      |  358 ++--
 i18n/po/ar.po                                      |  374 ++--
 i18n/po/ast.po                                     |  484 +++--
 i18n/po/az.po                                      |  358 ++--
 i18n/po/be.po                                      |  426 ++--
 i18n/po/bg.po                                      |  402 ++--
 i18n/po/bn.po                                      |  358 ++--
 i18n/po/br.po                                      |  358 ++--
 i18n/po/bs.po                                      |  358 ++--
 i18n/po/ca.po                                      |  426 ++--
 i18n/po/ca at valencia.po                             |  424 ++--
 i18n/po/cs.po                                      |  442 ++--
 i18n/po/cy.po                                      |  358 ++--
 i18n/po/da.po                                      |  442 ++--
 i18n/po/de.po                                      |  460 ++--
 i18n/po/de_DE.po                                   |  358 ++--
 i18n/po/el.po                                      |  404 ++--
 i18n/po/en_AU.po                                   |  392 ++--
 i18n/po/en_CA.po                                   |  358 ++--
 i18n/po/en_GB.po                                   |  474 +++--
 i18n/po/eo.po                                      |  358 ++--
 i18n/po/es.po                                      |  510 +++--
 i18n/po/et.po                                      |  402 ++--
 i18n/po/eu.po                                      |  377 ++--
 i18n/po/fa.po                                      |  360 ++--
 i18n/po/fi.po                                      |  394 ++--
 i18n/po/fil.po                                     |  358 ++--
 i18n/po/fo.po                                      |  358 ++--
 i18n/po/fr.po                                      | 1789 ++++++++++------
 i18n/po/ga.po                                      |  358 ++--
 i18n/po/gl.po                                      |  810 ++++----
 i18n/po/he.po                                      |  366 ++--
 i18n/po/hi.po                                      |  358 ++--
 i18n/po/hr.po                                      |  396 ++--
 i18n/po/ht.po                                      |  358 ++--
 i18n/po/hu.po                                      |  494 +++--
 i18n/po/hy.po                                      |  358 ++--
 i18n/po/ia.po                                      |  358 ++--
 i18n/po/id.po                                      | 2198 +++++++++++---------
 i18n/po/is.po                                      |  372 ++--
 i18n/po/it.po                                      |  431 ++--
 i18n/po/ja.po                                      |  417 ++--
 i18n/po/ka.po                                      |  358 ++--
 i18n/po/km.po                                      |  368 ++--
 i18n/po/ko.po                                      |  364 ++--
 i18n/po/ku.po                                      |  358 ++--
 i18n/po/ky.po                                      |  358 ++--
 i18n/po/lb.po                                      |  358 ++--
 i18n/po/lo.po                                      |  358 ++--
 i18n/po/lt.po                                      |  430 ++--
 i18n/po/lv.po                                      |  358 ++--
 i18n/po/mk.po                                      |  358 ++--
 i18n/po/mr.po                                      |  358 ++--
 i18n/po/ms.po                                      |  358 ++--
 i18n/po/nb.po                                      |  378 ++--
 i18n/po/nds.po                                     |  358 ++--
 i18n/po/nl.po                                      |  444 ++--
 i18n/po/nn.po                                      |  358 ++--
 i18n/po/oc.po                                      |  362 ++--
 i18n/po/pa.po                                      |  358 ++--
 i18n/po/pl.po                                      | 1560 ++++++++------
 i18n/po/pt.po                                      |  542 +++--
 i18n/po/pt_BR.po                                   |  432 ++--
 i18n/po/rm.po                                      |  358 ++--
 i18n/po/ro.po                                      |  362 ++--
 i18n/po/ru.po                                      |  460 ++--
 i18n/po/sk.po                                      |  416 ++--
 i18n/po/sl.po                                      |  362 ++--
 i18n/po/sq.po                                      |  358 ++--
 i18n/po/sr.po                                      |  358 ++--
 i18n/po/sv.po                                      |  396 ++--
 i18n/po/ta.po                                      |  364 ++--
 i18n/po/te.po                                      |  358 ++--
 i18n/po/th.po                                      |  358 ++--
 i18n/po/tr.po                                      |  392 ++--
 i18n/po/ug.po                                      |  358 ++--
 i18n/po/uk.po                                      |  463 +++--
 i18n/po/ur.po                                      |  358 ++--
 i18n/po/vi.po                                      |  422 ++--
 i18n/po/wae.po                                     |  358 ++--
 i18n/po/zh_CN.po                                   |  422 ++--
 i18n/po/zh_TW.po                                   |  414 ++--
 images/presets/barrier/kerb_pattern.svg            |   79 +
 netbeans/nbproject/project.properties              |   13 +-
 src/com/drew/imaging/ImageProcessingException.java |    2 +-
 src/com/drew/imaging/PhotographicConversions.java  |    2 +-
 src/com/drew/imaging/jpeg/JpegMetadataReader.java  |   10 +-
 .../drew/imaging/jpeg/JpegProcessingException.java |    2 +-
 src/com/drew/imaging/jpeg/JpegSegmentData.java     |    5 +-
 .../imaging/jpeg/JpegSegmentMetadataReader.java    |    4 +-
 src/com/drew/imaging/jpeg/JpegSegmentReader.java   |    2 +-
 src/com/drew/imaging/jpeg/JpegSegmentType.java     |   49 +-
 src/com/drew/imaging/jpeg/package-info.java        |    4 +
 src/com/drew/imaging/jpeg/package.html             |   33 -
 src/com/drew/imaging/package-info.java             |    5 +
 src/com/drew/imaging/package.html                  |   33 -
 src/com/drew/imaging/tiff/TiffDataFormat.java      |    2 +-
 src/com/drew/imaging/tiff/TiffHandler.java         |    7 +-
 .../drew/imaging/tiff/TiffProcessingException.java |    2 +-
 src/com/drew/imaging/tiff/TiffReader.java          |    6 +-
 src/com/drew/imaging/tiff/package-info.java        |    4 +
 src/com/drew/imaging/tiff/package.html             |   33 -
 src/com/drew/lang/BufferBoundsException.java       |    2 +-
 src/com/drew/lang/ByteArrayReader.java             |   38 +-
 .../Charsets.java}                                 |   22 +-
 src/com/drew/lang/CompoundException.java           |    2 +-
 src/com/drew/lang/GeoLocation.java                 |    2 +-
 src/com/drew/lang/RandomAccessReader.java          |   97 +-
 src/com/drew/lang/Rational.java                    |  119 +-
 src/com/drew/lang/SequentialByteArrayReader.java   |   27 +-
 src/com/drew/lang/SequentialReader.java            |   95 +-
 src/com/drew/lang/StreamReader.java                |   41 +-
 src/com/drew/lang/StringUtil.java                  |    4 +-
 src/com/drew/lang/annotations/NotNull.java         |    2 +-
 src/com/drew/lang/annotations/Nullable.java        |    2 +-
 .../{NotNull.java => SuppressWarnings.java}        |   19 +-
 src/com/drew/lang/annotations/package-info.java    |    5 +
 src/com/drew/lang/annotations/package.html         |   34 -
 src/com/drew/lang/package-info.java                |    4 +
 src/com/drew/lang/package.html                     |   33 -
 src/com/drew/metadata/Age.java                     |    7 +-
 src/com/drew/metadata/Directory.java               |  124 +-
 .../ExifIFD0Directory.java => ErrorDirectory.java} |   50 +-
 src/com/drew/metadata/Face.java                    |    2 +-
 src/com/drew/metadata/Metadata.java                |    4 +-
 src/com/drew/metadata/MetadataException.java       |    2 +-
 ...ileMetadataDescriptor.java => StringValue.java} |   58 +-
 src/com/drew/metadata/Tag.java                     |    4 +-
 src/com/drew/metadata/TagDescriptor.java           |  131 +-
 src/com/drew/metadata/exif/ExifDescriptorBase.java |  248 ++-
 src/com/drew/metadata/exif/ExifDirectoryBase.java  |   32 +-
 src/com/drew/metadata/exif/ExifIFD0Descriptor.java |    3 +-
 src/com/drew/metadata/exif/ExifIFD0Directory.java  |    3 +-
 ...IFDDescriptor.java => ExifImageDescriptor.java} |    9 +-
 ...teropDirectory.java => ExifImageDirectory.java} |   16 +-
 .../drew/metadata/exif/ExifInteropDescriptor.java  |    3 +-
 .../drew/metadata/exif/ExifInteropDirectory.java   |    3 +-
 src/com/drew/metadata/exif/ExifReader.java         |   23 +-
 .../drew/metadata/exif/ExifSubIFDDescriptor.java   |    3 +-
 .../drew/metadata/exif/ExifSubIFDDirectory.java    |   13 +-
 .../metadata/exif/ExifThumbnailDescriptor.java     |    3 +-
 .../drew/metadata/exif/ExifThumbnailDirectory.java |  242 +--
 src/com/drew/metadata/exif/ExifTiffHandler.java    |  548 ++++-
 src/com/drew/metadata/exif/GpsDescriptor.java      |    3 +-
 src/com/drew/metadata/exif/GpsDirectory.java       |    3 +-
 .../exif/PanasonicRawDistortionDescriptor.java     |  159 ++
 .../exif/PanasonicRawDistortionDirectory.java      |   86 +
 ...riptor.java => PanasonicRawIFD0Descriptor.java} |   29 +-
 .../metadata/exif/PanasonicRawIFD0Directory.java   |  153 ++
 ...tor.java => PanasonicRawWbInfo2Descriptor.java} |   32 +-
 .../exif/PanasonicRawWbInfo2Directory.java         |  103 +
 ...ptor.java => PanasonicRawWbInfoDescriptor.java} |   32 +-
 .../metadata/exif/PanasonicRawWbInfoDirectory.java |  102 +
 ...rnoteDescriptor.java => PrintIMDescriptor.java} |   29 +-
 ...xifIFD0Directory.java => PrintIMDirectory.java} |   34 +-
 ...scriptor.java => AppleMakernoteDescriptor.java} |   22 +-
 ...Directory.java => AppleMakernoteDirectory.java} |   25 +-
 .../exif/makernotes/CanonMakernoteDescriptor.java  |  445 +++-
 .../exif/makernotes/CanonMakernoteDirectory.java   |  106 +-
 .../makernotes/CasioType1MakernoteDescriptor.java  |    3 +-
 .../makernotes/CasioType1MakernoteDirectory.java   |    3 +-
 .../makernotes/CasioType2MakernoteDescriptor.java  |   12 +-
 .../makernotes/CasioType2MakernoteDirectory.java   |    3 +-
 .../makernotes/FujifilmMakernoteDescriptor.java    |    3 +-
 .../makernotes/FujifilmMakernoteDirectory.java     |    3 +-
 .../exif/makernotes/KodakMakernoteDescriptor.java  |    3 +-
 .../exif/makernotes/KodakMakernoteDirectory.java   |    3 +-
 .../makernotes/KyoceraMakernoteDescriptor.java     |   11 +-
 .../exif/makernotes/KyoceraMakernoteDirectory.java |    3 +-
 .../exif/makernotes/LeicaMakernoteDescriptor.java  |    3 +-
 .../exif/makernotes/LeicaMakernoteDirectory.java   |    3 +-
 .../makernotes/LeicaType5MakernoteDescriptor.java  |   79 +
 ...tory.java => LeicaType5MakernoteDirectory.java} |   39 +-
 .../makernotes/NikonType1MakernoteDescriptor.java  |    3 +-
 .../makernotes/NikonType1MakernoteDirectory.java   |    3 +-
 .../makernotes/NikonType2MakernoteDescriptor.java  |    3 +-
 .../makernotes/NikonType2MakernoteDirectory.java   |    7 +-
 .../OlympusCameraSettingsMakernoteDescriptor.java  |   77 +-
 .../OlympusCameraSettingsMakernoteDirectory.java   |    3 +
 .../OlympusEquipmentMakernoteDescriptor.java       |   64 +-
 .../OlympusEquipmentMakernoteDirectory.java        |    1 +
 .../OlympusFocusInfoMakernoteDescriptor.java       |  217 ++
 .../OlympusFocusInfoMakernoteDirectory.java        |  110 +
 .../OlympusImageProcessingMakernoteDescriptor.java |  240 +++
 .../OlympusImageProcessingMakernoteDirectory.java  |  212 ++
 .../makernotes/OlympusMakernoteDescriptor.java     |  242 ++-
 .../exif/makernotes/OlympusMakernoteDirectory.java |  439 +++-
 .../OlympusRawDevelopment2MakernoteDescriptor.java |  230 ++
 .../OlympusRawDevelopment2MakernoteDirectory.java  |  111 +
 .../OlympusRawDevelopmentMakernoteDescriptor.java  |  155 ++
 .../OlympusRawDevelopmentMakernoteDirectory.java   |   91 +
 .../OlympusRawInfoMakernoteDescriptor.java         |  141 ++
 .../OlympusRawInfoMakernoteDirectory.java          |  142 ++
 .../makernotes/PanasonicMakernoteDescriptor.java   |  305 ++-
 .../makernotes/PanasonicMakernoteDirectory.java    |  123 +-
 .../exif/makernotes/PentaxMakernoteDescriptor.java |    3 +-
 .../exif/makernotes/PentaxMakernoteDirectory.java  |    3 +-
 .../ReconyxHyperFireMakernoteDescriptor.java       |  105 +
 .../ReconyxHyperFireMakernoteDirectory.java        |  105 +
 .../ReconyxUltraFireMakernoteDescriptor.java       |  110 +
 .../ReconyxUltraFireMakernoteDirectory.java        |  116 ++
 .../exif/makernotes/RicohMakernoteDescriptor.java  |   13 +-
 .../exif/makernotes/RicohMakernoteDirectory.java   |    3 +-
 .../SamsungType2MakernoteDescriptor.java           |  213 ++
 .../makernotes/SamsungType2MakernoteDirectory.java |   89 +
 .../exif/makernotes/SanyoMakernoteDescriptor.java  |    3 +-
 .../exif/makernotes/SanyoMakernoteDirectory.java   |    7 +-
 .../exif/makernotes/SigmaMakernoteDescriptor.java  |    3 +-
 .../exif/makernotes/SigmaMakernoteDirectory.java   |    3 +-
 .../makernotes/SonyType1MakernoteDescriptor.java   |   33 +-
 .../makernotes/SonyType1MakernoteDirectory.java    |    5 +-
 .../makernotes/SonyType6MakernoteDescriptor.java   |    3 +-
 .../makernotes/SonyType6MakernoteDirectory.java    |    3 +-
 .../metadata/exif/makernotes/package-info.java     |    5 +
 src/com/drew/metadata/exif/makernotes/package.html |   33 -
 src/com/drew/metadata/exif/package-info.java       |    4 +
 src/com/drew/metadata/exif/package.html            |   33 -
 .../drew/metadata/file/FileMetadataDescriptor.java |    3 +-
 .../drew/metadata/file/FileMetadataDirectory.java  |    3 +-
 src/com/drew/metadata/file/FileMetadataReader.java |    2 +-
 src/com/drew/metadata/file/package-info.java       |    6 +
 src/com/drew/metadata/file/package.html            |   34 -
 src/com/drew/metadata/iptc/IptcDescriptor.java     |    3 +-
 src/com/drew/metadata/iptc/IptcDirectory.java      |    3 +-
 src/com/drew/metadata/iptc/IptcReader.java         |   60 +-
 src/com/drew/metadata/iptc/Iso2022Converter.java   |   15 +-
 src/com/drew/metadata/iptc/package-info.java       |    4 +
 src/com/drew/metadata/iptc/package.html            |   33 -
 .../HuffmanTablesDescriptor.java}                  |   35 +-
 .../drew/metadata/jpeg/HuffmanTablesDirectory.java |  360 ++++
 .../drew/metadata/jpeg/JpegCommentDescriptor.java  |    3 +-
 .../drew/metadata/jpeg/JpegCommentDirectory.java   |    3 +-
 src/com/drew/metadata/jpeg/JpegCommentReader.java  |    5 +-
 src/com/drew/metadata/jpeg/JpegComponent.java      |   13 +-
 src/com/drew/metadata/jpeg/JpegDescriptor.java     |    7 +-
 src/com/drew/metadata/jpeg/JpegDhtReader.java      |  101 +
 src/com/drew/metadata/jpeg/JpegDirectory.java      |    3 +-
 src/com/drew/metadata/jpeg/JpegDnlReader.java      |   77 +
 src/com/drew/metadata/jpeg/JpegReader.java         |    4 +-
 src/com/drew/metadata/jpeg/package-info.java       |    4 +
 src/com/drew/metadata/jpeg/package.html            |   33 -
 src/com/drew/metadata/package-info.java            |    6 +
 src/com/drew/metadata/package.html                 |   33 -
 .../drew/metadata/tiff/DirectoryTiffHandler.java   |   54 +-
 src/com/drew/metadata/tiff/package-info.java       |    6 +
 src/com/drew/metadata/tiff/package.html            |   34 -
 .../josm/actions/AbstractMergeAction.java          |    2 +-
 .../josm/actions/AbstractPasteAction.java          |   14 +-
 .../josm/actions/AlignInCircleAction.java          |   78 +-
 .../josm/actions/AlignInLineAction.java            |   17 +-
 .../josm/actions/CopyCoordinatesAction.java        |    3 +
 .../josm/actions/CreateCircleAction.java           |    4 +-
 .../josm/actions/CreateMultipolygonAction.java     |    9 +-
 .../josm/actions/DialogsToggleAction.java          |    2 +-
 .../josm/actions/DownloadPrimitiveAction.java      |    5 +-
 .../josm/actions/ExpertToggleAction.java           |    7 +-
 .../josm/actions/JoinAreasAction.java              |    2 +-
 .../josm/actions/MapRectifierWMSmenuAction.java    |    1 +
 .../josm/actions/OrthogonalizeAction.java          |   21 +-
 .../openstreetmap/josm/actions/PurgeAction.java    |    2 +-
 .../josm/actions/RenameLayerAction.java            |    3 +-
 .../josm/actions/ReverseWayAction.java             |    1 +
 .../openstreetmap/josm/actions/SaveActionBase.java |    6 +-
 .../openstreetmap/josm/actions/SplitWayAction.java |   11 +-
 .../ToggleUploadDiscouragedLayerAction.java        |    5 +-
 .../openstreetmap/josm/actions/UploadAction.java   |   41 +-
 .../josm/actions/mapmode/DrawAction.java           |    1 +
 .../josm/actions/mapmode/ExtrudeAction.java        |    6 +-
 .../josm/actions/mapmode/SelectAction.java         |   12 +-
 .../actions/relation/AddSelectionToRelations.java  |    2 +-
 .../actions/relation/DownloadMembersAction.java    |    2 +-
 .../DownloadSelectedIncompleteMembersAction.java   |    2 +-
 .../relation/SelectInRelationListAction.java       |    2 +-
 .../josm/actions/relation/SelectMembersAction.java |    2 +-
 .../josm/actions/search/SearchAction.java          |   14 +
 src/org/openstreetmap/josm/command/Command.java    |    2 +-
 .../josm/command/SplitWayCommand.java              |   18 +-
 .../conflict/WayNodesConflictResolverCommand.java  |    1 +
 .../josm/corrector/ReverseWayTagCorrector.java     |   11 +
 .../openstreetmap/josm/corrector/TagCorrector.java |   10 +-
 src/org/openstreetmap/josm/data/APIDataSet.java    |   44 +-
 src/org/openstreetmap/josm/data/Preferences.java   |   24 +-
 .../openstreetmap/josm/data/coor/Coordinate.java   |    6 +-
 .../openstreetmap/josm/data/coor/PolarCoor.java    |  107 +
 src/org/openstreetmap/josm/data/gpx/GpxData.java   |   62 +-
 .../josm/data/imagery/TMSCachedTileLoader.java     |    5 +
 .../josm/data/imagery/WMTSTileSource.java          |    3 +-
 src/org/openstreetmap/josm/data/osm/BBox.java      |   15 +-
 src/org/openstreetmap/josm/data/osm/DataSet.java   |   14 +
 .../josm/data/osm/DefaultNameFormatter.java        |    6 +-
 .../openstreetmap/josm/data/osm/FilterModel.java   |    6 +-
 .../openstreetmap/josm/data/osm/IPrimitive.java    |    4 +-
 .../openstreetmap/josm/data/osm/OsmPrimitive.java  |    1 +
 src/org/openstreetmap/josm/data/osm/User.java      |   10 +-
 .../data/osm/visitor/paint/StyledMapRenderer.java  |    1 +
 .../visitor/paint/relations/MultipolygonCache.java |   16 +-
 .../data/projection/proj/TransverseMercator.java   |   21 +
 .../josm/data/tagging/ac/AutoCompletionItem.java   |    6 +-
 .../josm/data/tagging/ac/AutoCompletionSet.java    |   51 +-
 .../data/validation/tests/OpeningHourTest.java     |   71 +-
 .../data/validation/tests/OverlappingWays.java     |    4 +-
 .../josm/data/validation/tests/UnclosedWays.java   |    2 +-
 src/org/openstreetmap/josm/gui/ExtendedDialog.java |    2 +-
 src/org/openstreetmap/josm/gui/MainMenu.java       |   12 +-
 src/org/openstreetmap/josm/gui/MapStatus.java      |   97 +-
 src/org/openstreetmap/josm/gui/MapView.java        |   13 +-
 .../josm/gui/bbox/TileSelectionBBoxChooser.java    |    2 +-
 .../josm/gui/bugreport/JosmUpdatePanel.java        |    5 +-
 .../josm/gui/conflict/pair/AbstractListMerger.java |   28 +-
 .../conflict/pair/properties/PropertiesMerger.java |   12 +-
 .../josm/gui/conflict/pair/tags/TagMerger.java     |   14 +-
 .../josm/gui/dialogs/FilterDialog.java             |    6 +-
 .../josm/gui/dialogs/InspectPrimitiveDataText.java |   11 +-
 .../josm/gui/dialogs/LayerListPopup.java           |    3 +-
 .../josm/gui/dialogs/MenuItemSearchDialog.java     |   11 +-
 .../josm/gui/dialogs/SelectionListDialog.java      |   23 +-
 .../josm/gui/dialogs/ValidatorDialog.java          |   24 +-
 .../dialogs/changeset/ChangesetContentPanel.java   |    2 +-
 .../josm/gui/dialogs/layer/DuplicateAction.java    |    2 +-
 .../gui/dialogs/layer/ShowHideLayerAction.java     |    2 +-
 .../gui/dialogs/properties/PropertiesDialog.java   |    4 +-
 .../josm/gui/dialogs/properties/TagEditHelper.java |   12 +-
 .../gui/dialogs/relation/ChildRelationBrowser.java |    7 +-
 .../actions/AddSelectedAfterSelection.java         |    2 +-
 .../relation/actions/AddSelectedAtEndAction.java   |    2 +-
 .../relation/actions/AddSelectedAtStartAction.java |    2 +-
 .../actions/AddSelectedBeforeSelection.java        |    2 +-
 .../gui/dialogs/relation/actions/ApplyAction.java  |    2 +-
 .../actions/DeleteCurrentRelationAction.java       |    2 +-
 .../actions/DownloadIncompleteMembersAction.java   |    2 +-
 .../DownloadSelectedIncompleteMembersAction.java   |    2 +-
 .../relation/actions/DuplicateRelationAction.java  |    2 +-
 .../gui/dialogs/relation/actions/EditAction.java   |    2 +-
 .../dialogs/relation/actions/MoveDownAction.java   |    2 +-
 .../gui/dialogs/relation/actions/MoveUpAction.java |    2 +-
 .../dialogs/relation/actions/RefreshAction.java    |    2 +-
 .../gui/dialogs/relation/actions/RemoveAction.java |    2 +-
 .../relation/actions/RemoveSelectedAction.java     |    2 +-
 .../dialogs/relation/actions/ReverseAction.java    |    2 +-
 .../SelectPrimitivesForSelectedMembersAction.java  |    2 +-
 .../actions/SelectedMembersForSelectionAction.java |    2 +-
 .../gui/dialogs/relation/actions/SortAction.java   |    2 +-
 .../dialogs/relation/actions/SortBelowAction.java  |    2 +-
 .../josm/gui/download/BookmarkSelection.java       |    8 +-
 .../josm/gui/download/OverpassDownloadSource.java  |    8 +-
 .../josm/gui/download/PlaceSelection.java          |    2 +-
 .../openstreetmap/josm/gui/help/HelpBrowser.java   |   12 +-
 .../josm/gui/history/NodeListViewer.java           |    4 +-
 .../josm/gui/history/VersionInfoPanel.java         |    4 +-
 .../josm/gui/history/VersionTable.java             |    4 +-
 .../gui/io/AsynchronousUploadPrimitivesTask.java   |  153 ++
 .../josm/gui/io/ChangesetCommentModel.java         |   12 +
 .../josm/gui/io/ChangesetManagementPanel.java      |    4 +-
 .../josm/gui/io/CloseChangesetDialog.java          |    4 +-
 .../josm/gui/io/LayerNameAndFilePathTableCell.java |    6 +-
 .../josm/gui/io/SaveLayersDialog.java              |   10 +-
 .../josm/gui/io/TagSettingsPanel.java              |   18 +-
 .../openstreetmap/josm/gui/io/UploadDialog.java    |   23 +-
 .../josm/gui/io/UploadSelectionDialog.java         |   10 +-
 .../josm/gui/io/importexport/NoteImporter.java     |    6 +-
 .../josm/gui/layer/AbstractMapViewPaintable.java   |    3 +-
 .../josm/gui/layer/AbstractTileSourceLayer.java    |    2 +-
 .../openstreetmap/josm/gui/layer/AutosaveTask.java |  125 +-
 .../josm/gui/layer/CustomizeColor.java             |    3 +-
 src/org/openstreetmap/josm/gui/layer/Layer.java    |    6 +-
 .../josm/gui/layer/MainLayerManager.java           |   86 +-
 .../openstreetmap/josm/gui/layer/NoteLayer.java    |  261 ++-
 .../openstreetmap/josm/gui/layer/OsmDataLayer.java |   39 +-
 .../gui/layer/geoimage/CorrelateGpxWithImages.java |   16 +-
 .../josm/gui/layer/geoimage/ImageDisplay.java      |  509 +++--
 .../josm/gui/layer/geoimage/ImageEntry.java        |    1 +
 .../josm/gui/layer/geoimage/ImageViewerDialog.java |   23 +-
 .../gui/layer/geoimage/ShowThumbnailAction.java    |    3 +-
 .../josm/gui/layer/geoimage/ThumbsLoader.java      |    3 +-
 .../gui/layer/gpx/ChooseTrackVisibilityAction.java |    3 +-
 .../gui/layer/gpx/ConvertToDataLayerAction.java    |    3 +-
 .../josm/gui/layer/gpx/CustomizeDrawingAction.java |    3 +-
 .../gui/layer/gpx/DownloadWmsAlongTrackAction.java |    3 +-
 .../josm/gui/layer/gpx/ImportAudioAction.java      |    3 +-
 .../josm/gui/layer/gpx/ImportImagesAction.java     |    3 +-
 .../layer/gpx/MarkersFromNamedPointsAction.java    |    3 +-
 .../josm/gui/layer/markerlayer/MarkerLayer.java    |    9 +-
 .../josm/gui/mappaint/ElemStyles.java              |   16 +-
 .../gui/mappaint/mapcss/ExpressionFactory.java     |   12 +
 .../josm/gui/oauth/OAuthAuthorizationWizard.java   |   14 +-
 .../josm/gui/preferences/PreferenceTabbedPane.java |    9 +-
 .../josm/gui/preferences/SourceEditor.java         |    2 +-
 .../advanced/AbstractTableListEditor.java          |    4 +-
 .../gui/preferences/display/LafPreference.java     |    7 +
 .../gui/preferences/imagery/ImageryPreference.java |   16 +-
 .../gui/preferences/plugin/PluginListPanel.java    |    8 +-
 .../plugin/PluginUpdatePolicyPanel.java            |   20 +-
 .../projection/UTMProjectionChoice.java            |    9 +-
 .../preferences/server/OsmApiUrlInputPanel.java    |    2 +-
 .../preferences/server/ProxyPreferencesPanel.java  |   18 +-
 .../gui/tagging/ac/AutoCompletingComboBox.java     |    4 +-
 .../gui/tagging/ac/AutoCompletingTextField.java    |   10 +-
 .../gui/tagging/ac/AutoCompletionListItem.java     |    2 +-
 .../josm/gui/tagging/ac/AutoCompletionManager.java |    2 +-
 .../josm/gui/tagging/presets/TaggingPreset.java    |    3 +-
 .../gui/tagging/presets/TaggingPresetReader.java   |   16 +-
 .../tagging/presets/TaggingPresetSearchDialog.java |    2 +-
 .../TaggingPresetSearchPrimitiveDialog.java        |    2 +-
 .../openstreetmap/josm/gui/widgets/HtmlPanel.java  |   22 +
 .../josm/gui/widgets/JMultilineLabel.java          |   17 +-
 .../josm/gui/widgets/PopupMenuButton.java          |   23 +-
 src/org/openstreetmap/josm/io/Capabilities.java    |    2 +-
 src/org/openstreetmap/josm/io/UploadStrategy.java  |   24 +-
 .../openstreetmap/josm/io/imagery/WMSImagery.java  |    4 +-
 .../remotecontrol/handler/LoadAndZoomHandler.java  |   18 +-
 src/org/openstreetmap/josm/tools/HttpClient.java   |    4 +
 .../openstreetmap/josm/tools/ImageProvider.java    |   55 +-
 .../tools/JosmDecimalFormatSymbolsProvider.java    |   12 +-
 .../josm/tools/template_engine/Condition.java      |    9 +
 styles/standard/elemstyles.mapcss                  |   82 +-
 .../josm/data/imagery/ImageryCompareTestIT.java    |    2 +-
 .../openstreetmap/josm/data/osm/TaginfoTestIT.java |    2 +-
 test/unit/org/openstreetmap/josm/TestUtils.java    |   30 +
 .../josm/actions/AlignInLineActionTest.java        |   86 +-
 .../josm/actions/CombineWayActionTest.java         |    1 +
 .../josm/actions/ExtensionFileFilterTest.java      |    1 +
 .../openstreetmap/josm/command/AddCommandTest.java |    2 +
 .../josm/command/AddPrimitivesCommandTest.java     |    2 +
 .../josm/command/ChangeCommandTest.java            |    2 +
 .../josm/command/ChangeNodesCommandTest.java       |    2 +
 .../josm/command/ChangePropertyCommandTest.java    |    2 +
 .../josm/command/ChangePropertyKeyCommandTest.java |    2 +
 .../ChangeRelationMemberRoleCommandTest.java       |    2 +
 .../openstreetmap/josm/command/CommandTest.java    |    2 +
 .../josm/command/DeleteCommandTest.java            |    2 +
 .../josm/command/MoveCommandTest.java              |    2 +
 .../josm/command/PurgeCommandTest.java             |    2 +
 .../josm/command/RemoveNodesCommandTest.java       |    2 +
 .../josm/command/RotateCommandTest.java            |    2 +
 .../josm/command/ScaleCommandTest.java             |    2 +
 .../josm/command/SelectCommandTest.java            |    2 +
 .../josm/command/SequenceCommandTest.java          |    2 +
 .../josm/command/TransformNodesCommandTest.java    |    2 +
 .../command/conflict/ConflictAddCommandTest.java   |    2 +
 .../conflict/ConflictResolveCommandTest.java       |    2 +
 .../CoordinateConflictResolveCommandTest.java      |    2 +
 .../DeletedStateConflictResolveCommandTest.java    |    2 +
 .../ModifiedConflictResolveCommandTest.java        |    2 +
 .../RelationMemberConflictResolverCommandTest.java |    2 +
 .../conflict/TagConflictResolveCommandTest.java    |    2 +
 .../VersionConflictResolveCommandTest.java         |    2 +
 .../WayNodesConflictResolverCommandTest.java       |    2 +
 .../josm/data/coor/CachedLatLonTest.java           |    2 +
 .../openstreetmap/josm/data/coor/LatLonTest.java   |    2 +
 .../josm/data/coor/PolarCoorTest.java              |   67 +
 .../josm/data/correction/TagCorrectionTest.java    |    2 +
 .../openstreetmap/josm/data/gpx/GpxDataTest.java   |    2 +
 .../openstreetmap/josm/data/gpx/GpxRouteTest.java  |    2 +
 .../data/gpx/ImmutableGpxTrackSegmentTest.java     |    2 +
 .../josm/data/gpx/ImmutableGpxTrackTest.java       |    2 +
 .../openstreetmap/josm/data/gpx/WayPointTest.java  |    2 +
 .../josm/data/gpx/WithAttributesTest.java          |    2 +
 .../openstreetmap/josm/data/notes/NoteTest.java    |    2 +
 .../josm/data/oauth/OAuthParametersTest.java       |    2 +
 .../josm/data/oauth/OAuthTokenTest.java            |    2 +
 .../org/openstreetmap/josm/data/osm/BBoxTest.java  |    2 +
 .../openstreetmap/josm/data/osm/FilterTest.java    |    2 +
 .../openstreetmap/josm/data/osm/StorageTest.java   |    2 +
 .../tagging/ac/AutoCompletionPriorityTest.java     |    2 +
 .../data/validation/tests/OpeningHourTestTest.java |   46 +-
 .../org/openstreetmap/josm/gui/MapStatusTest.java  |    2 +
 .../gui/dialogs/InspectPrimitiveDialogTest.java    |    3 +-
 .../josm/gui/dialogs/MinimapDialogTest.java        |  193 +-
 .../io/AsynchronousUploadPrimitivesTaskTest.java   |   74 +
 .../josm/gui/io/ChangesetCommentModelTest.java     |   47 +
 .../josm/gui/layer/AutosaveTaskTest.java           |    2 +-
 .../josm/gui/layer/NoteLayerTest.java              |   62 +-
 .../josm/gui/layer/geoimage/ImageDisplayTest.java  |   13 +-
 .../layer/gpx/DownloadWmsAlongTrackActionTest.java |    2 +-
 .../gui/preferences/advanced/PrefEntryTest.java    |    2 +
 .../gui/tagging/ac/AutoCompletionManagerTest.java  |    2 +
 .../josm/gui/util/WindowGeometryTest.java          |    2 +
 .../josm/plugins/PluginHandlerTest.java            |    2 +
 .../josm/spi/preferences/ListListSettingTest.java  |    2 +
 .../josm/spi/preferences/ListSettingTest.java      |    2 +
 .../josm/spi/preferences/MapListSettingTest.java   |    2 +
 .../josm/spi/preferences/StringSettingTest.java    |    2 +
 .../josm/testutils/JOSMTestRules.java              |   54 +
 .../josm/testutils/TileSourceRule.java             |  313 +++
 .../JosmDecimalFormatSymbolsProviderTest.java      |   43 +
 .../org/openstreetmap/josm/tools/MultiMapTest.java |    5 +-
 .../org/openstreetmap/josm/tools/PairTest.java     |    2 +
 500 files changed, 32727 insertions(+), 17292 deletions(-)

diff --git a/.classpath b/.classpath
index f46a34b..05943dc 100644
--- a/.classpath
+++ b/.classpath
@@ -14,14 +14,15 @@
 	<classpathentry kind="lib" path="test/lib/fest/jcip-annotations-1.0.jar"/>
 	<classpathentry kind="lib" path="test/lib/fest/MRJToolkitStubs-1.0.jar"/>
 	<classpathentry kind="lib" path="test/lib/jfcunit.jar"/>
-	<classpathentry exported="true" kind="lib" path="test/lib/equalsverifier-2.3.3.jar"/>
+	<classpathentry exported="true" kind="lib" path="test/lib/equalsverifier-2.4.jar"/>
 	<classpathentry kind="lib" path="test/lib/reflections/reflections-0.9.10.jar"/>
 	<classpathentry kind="lib" path="test/lib/reflections/guava-21.0.jar"/>
 	<classpathentry kind="lib" path="test/lib/reflections/javassist-3.21.0-GA.jar"/>
 	<classpathentry kind="lib" path="test/lib/system-rules-1.16.1.jar"/>
 	<classpathentry kind="lib" path="test/lib/unitils-core/unitils-core-3.4.6.jar"/>
 	<classpathentry kind="lib" path="test/lib/commons-testing/commons-testing-2.1.0.jar"/>
-	<classpathentry kind="lib" path="test/lib/wiremock-standalone-2.7.1.jar"/>
+	<classpathentry exported="true" kind="lib" path="test/lib/wiremock-standalone-2.10.1.jar"/>
+	<classpathentry exported="true" kind="lib" path="test/lib/awaitility-3.0.0.jar"/>
 	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
 	<classpathentry exported="true" kind="con" path="GROOVY_SUPPORT"/>
 	<classpathentry kind="lib" path="test/lib/unitils-core/commons-collections-3.2.2.jar"/>
diff --git a/REVISION b/REVISION
index a1a2ac4..c7484ec 100644
--- a/REVISION
+++ b/REVISION
@@ -1,9 +1,9 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <info>
 <entry
-   kind="dir"
    path="trunk"
-   revision="13053">
+   revision="13170"
+   kind="dir">
 <url>https://josm.openstreetmap.de/svn/trunk</url>
 <relative-url>^/trunk</relative-url>
 <repository>
@@ -11,9 +11,9 @@
 <uuid>0c6e7542-c601-0410-84e7-c038aed88b3b</uuid>
 </repository>
 <commit
-   revision="13053">
+   revision="13170">
 <author>Don-vip</author>
-<date>2017-10-29T18:52:48.335778Z</date>
+<date>2017-11-26T13:31:59.499887Z</date>
 </commit>
 </entry>
 </info>
diff --git a/build.xml b/build.xml
index bad63a9..aac6f32 100644
--- a/build.xml
+++ b/build.xml
@@ -31,6 +31,9 @@
         <property name="dist-optimized.jar" location="${dist.dir}/josm-custom-optimized.jar"/>
         <property name="javac.compiler" value="com.google.errorprone.ErrorProneAntCompilerAdapter" />
         <property name="java.lang.version" value="1.8" />
+        <property name="jacoco.includes" value="org.openstreetmap.josm.*" />
+        <property name="jacoco.inclbootstrapclasses" value="false" />
+        <property name="jacoco.inclnolocationclasses" value="false" />
         <!-- build parameter: compression level (ant -Dclevel=N)
                  N ranges from 0 (no compression) to 9 (maximum compression)
                  default: 9 -->
@@ -39,7 +42,7 @@
         </condition>
         <!-- For Java9-specific stuff -->
         <condition property="isJava9">
-            <matches string="${ant.java.version}" pattern="(1.)?9" />
+            <matches string="${ant.java.version}" pattern="(1.)?(9|1[0-9])" />
         </condition>
         <path id="test.classpath">
             <fileset dir="${test.dir}/lib">
@@ -337,7 +340,7 @@ Build-Date: ${build.tstamp}
             <compilerarg value="-Xep:FutureReturnValueIgnored:OFF" compiler="com.google.errorprone.ErrorProneAntCompilerAdapter"/>
             <compilerarg value="-Xep:FloatingPointLiteralPrecision:OFF" compiler="com.google.errorprone.ErrorProneAntCompilerAdapter"/>
             <compilerarg value="-Xep:ShortCircuitBoolean:OFF" compiler="com.google.errorprone.ErrorProneAntCompilerAdapter"/>
-            <compilerarg value="-Xep:LiteralClassName:OFF" compiler="com.google.errorprone.ErrorProneAntCompilerAdapter"/>
+            <compilerarg value="-Xep:JdkObsolete:OFF" compiler="com.google.errorprone.ErrorProneAntCompilerAdapter"/>
             <compilerarg line="-Xmaxwarns 1000"/>
             <exclude name="org/openstreetmap/josm/io/audio/JavaFxMediaPlayer.java" if:set="noJavaFX"/>
         </javac>
@@ -454,7 +457,8 @@ Build-Date: ${build.tstamp}
         <attribute name="coverage" default="true"/>
         <sequential>
             <echo message="Running @{testfamily}@{testITsuffix} tests with JUnit"/>
-            <jacoco:coverage destfile="${test.dir}/jacoco@{testITsuffix}.exec" enabled="@{coverage}" includes="org.openstreetmap.josm.*">
+            <jacoco:coverage destfile="${test.dir}/jacoco@{testITsuffix}.exec" enabled="@{coverage}" includes="${jacoco.includes}"
+                inclbootstrapclasses="${jacoco.inclbootstrapclasses}" inclnolocationclasses="${jacoco.inclnolocationclasses}">
                 <junit printsummary="yes" fork="true" forkmode="once">
                     <jvmarg value="-Dfile.encoding=UTF-8"/>
                     <jvmarg value="--add-modules" if:set="isJava9" />
@@ -538,16 +542,13 @@ Build-Date: ${build.tstamp}
             <html destdir="${test.dir}/report/jacoco"/>
         </jacoco:report>
     </target>
-    <!-- Proguard does not support Java 9 : http://sourceforge.net/p/proguard/bugs/551/ -->
-    <target name="dist-optimized" depends="dist" unless="isJava9">
+    <target name="dist-optimized" depends="dist">
         <taskdef resource="proguard/ant/task.properties" classpath="tools/proguard.jar"/>
         <proguard>
         -injars ${dist.jar}
         -outjars ${dist-optimized.jar}
 
-        -libraryjars ${java.home}/lib/rt.jar
-        -libraryjars ${java.home}/lib/jce.jar
-        -libraryjars ${java.home}/lib/ext/jfxrt.jar
+        -libraryjars ${java.home}/lib
 
         -dontoptimize
         -dontobfuscate
@@ -725,6 +726,7 @@ Build-Date: ${build.tstamp}
             <ignore classname="org.slf4j.*"/>
             <ignore classname="org.springframework.*"/>
             <ignore classname="org.testng.*"/>
+            <ignore classname="org.w3c.*"/>
             <ignore classname="org.zeromq.*"/>
             <!-- plugins used by another ones -->
             <ignore classname="org.openstreetmap.josm.plugins.geotools.*"/>
diff --git a/data/defaultpresets.xml b/data/defaultpresets.xml
index 0a6fb7b..a0864b6 100644
--- a/data/defaultpresets.xml
+++ b/data/defaultpresets.xml
@@ -84,8 +84,8 @@
     </chunk>
     <chunk id="barrier_5">
         <optional text="Allowed traffic:">
-            <check key="foot" text="Foot" default="on"/>
-            <check key="bicycle" text="Bicycle" default="on"/>
+            <check key="foot" text="Foot"/>
+            <check key="bicycle" text="Bicycle"/>
             <check key="horse" text="Horse" />
             <check key="motorcycle" text="Motorcycle" />
             <check key="motorcar" text="Motorcar" />
@@ -93,15 +93,15 @@
     </chunk>
     <chunk id="barrier_4">
         <optional text="Allowed traffic:">
-            <check key="foot" text="Foot" default="on"/>
-            <check key="bicycle" text="Bicycle" default="on"/>
+            <check key="foot" text="Foot"/>
+            <check key="bicycle" text="Bicycle"/>
             <check key="horse" text="Horse" />
             <check key="motorcycle" text="Motorcycle" />
         </optional>
     </chunk>
     <chunk id="barrier_2">
         <optional text="Allowed traffic:">
-            <check key="foot" text="Foot" default="on"/>
+            <check key="foot" text="Foot"/>
             <check key="bicycle" text="Bicycle"/>
         </optional>
     </chunk>
@@ -161,7 +161,7 @@
         <reference ref="oh_wheelchair" />
     </chunk>
     <chunk id="cuisine">
-    <multiselect key="cuisine" text="Cuisine" values="italian;chinese;pizza;burger;greek;german;indian;regional;kebab;turkish;asian;thai;mexican;japanese;french;sandwich;coffee_shop;sushi;steak_house;fish_and_chips;chicken;american;ice_cream;international;seafood;spanish;vietnamese;fish;noodle;barbecue;vegetarian;korean" values_searchable="true" />
+    <multiselect key="cuisine" text="Cuisine" values="italian;chinese;pizza;burger;greek;german;indian;regional;kebab;turkish;asian;thai;mexican;japanese;french;sandwich;coffee_shop;sushi;steak_house;fish_and_chips;chicken;american;ice_cream;international;seafood;spanish;vietnamese;fish;noodle;barbecue;vegetarian;korean;donut;mediterranean;friture;crepe" values_searchable="true" />
     </chunk>
     <chunk id="internet">
         <combo key="internet_access" text="Internet access" values="yes,wlan,wired,terminal,no" />
@@ -1229,7 +1229,8 @@
                   pl.href="http://wiki.openstreetmap.org/wiki/Pl:Tag:highway=footway"
                   pt.href="http://wiki.openstreetmap.org/wiki/Pt:Tag:highway=footway"
                   ru.href="http://wiki.openstreetmap.org/wiki/RU:Tag:highway=footway"
-                  uk.href="http://wiki.openstreetmap.org/wiki/Uk:Tag:highway=footway" />
+                  uk.href="http://wiki.openstreetmap.org/wiki/Uk:Tag:highway=footway"
+                  zh_CN.href="http://wiki.openstreetmap.org/wiki/Zh-hans:Tag:highway=footway" />
             <key key="highway" value="footway" />
             <optional>
                 <combo key="footway" text="Type" values="sidewalk,crossing" values_context="footway" />
@@ -1639,6 +1640,7 @@
         <item name="Highway milestone" icon="presets/vehicle/milestone.svg" type="node" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:highway=milestone"
                   cs.href="http://wiki.openstreetmap.org/wiki/Cs:Tag:highway=milestone"
+                  es.href="http://wiki.openstreetmap.org/wiki/ES:Tag:highway=milestone"
                   fr.href="http://wiki.openstreetmap.org/wiki/FR:Tag:highway=milestone"
                   ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:highway=milestone"
                   pl.href="http://wiki.openstreetmap.org/wiki/Pl:Tag:highway=milestone"
@@ -1915,6 +1917,7 @@
         <item name="Entrance (Barrier Opening)" icon="presets/barrier/entrance.svg" type="node" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:barrier=entrance"
                   cs.href="http://wiki.openstreetmap.org/wiki/Cs:Tag:barrier=entrance"
+                  de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:barrier=entrance"
                   es.href="http://wiki.openstreetmap.org/wiki/ES:Tag:barrier=entrance"
                   ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:barrier=entrance"
                   pl.href="http://wiki.openstreetmap.org/wiki/Pl:Tag:barrier=entrance"
@@ -4098,7 +4101,7 @@
             <space />
             <key key="tourism" value="caravan_site" />
             <reference ref="name_operator" />
-            <combo key="stars" text="Stars" values="1,2,3,4,5,6,7" />
+            <combo key="stars" text="Stars" values="1,2,3,4,5" />
             <reference ref="wheelchair" />
             <space />
             <text key="capacity" text="Number of places" />
@@ -4111,7 +4114,7 @@
             <space />
             <reference ref="link_contact_address_payment" />
         </item> <!-- Caravan Site/RV Park -->
-        <item name="Camping Site" icon="presets/accommodation/camping.svg" type="node,closedway,multipolygon" preset_name_label="true">
+        <item name="Campsite" icon="presets/accommodation/camping.svg" type="node,closedway,multipolygon" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:tourism=camp_site"
                   cs.href="http://wiki.openstreetmap.org/wiki/Cs:Tag:tourism=camp_site"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:tourism=camp_site"
@@ -4124,14 +4127,21 @@
             <space />
             <key key="tourism" value="camp_site" />
             <reference ref="name_operator" />
-            <combo key="stars" text="Stars" values="1,2,3,4,5,6,7" />
-            <reference ref="wheelchair" />
+            <combo key="stars" text="Stars" values="1,2,3,4,5" />
+            <checkgroup columns="2">
+                <check key="tents" text="Tents allowed" />
+                <check key="caravans" text="Caravans allowed" />
+            </checkgroup>
+            <checkgroup columns="2">
+                <check key="backcountry" text="Backcountry" />
+                <check key="group_only" text="Group only access" />
+            </checkgroup>
             <combo key="sanitary_dump_station" text="Dump Station" values="yes,public,customers,no" />
-            <space />
-            <reference ref="internet_smoking" />
+            <reference ref="wheelchair" />
+            <reference ref="internet" />
             <space />
             <reference ref="link_contact_address_payment" />
-        </item> <!-- Camping Site -->
+        </item> <!-- Campsite -->
     </group> <!-- Accommodation -->
     <group name="Food+Drinks" icon="presets/food/restaurant.svg">
         <item name="Restaurant" icon="presets/food/restaurant.svg" type="node,closedway,multipolygon" preset_name_label="true">
@@ -4350,6 +4360,7 @@
             <space />
             <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" />
             <!--<check key="man_made" value="tower" text="Look-Out Tower" />-->
         </item> <!-- Viewpoint -->
         <separator/>
@@ -4817,6 +4828,7 @@
             <link href="http://wiki.openstreetmap.org/wiki/Tag:tourism=museum"
                   cs.href="http://wiki.openstreetmap.org/wiki/Cs:Tag:tourism=museum"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:tourism=museum"
+                  es.href="http://wiki.openstreetmap.org/wiki/ES:Tag:tourism=museum"
                   fr.href="http://wiki.openstreetmap.org/wiki/FR:Tag:tourism=museum"
                   it.href="http://wiki.openstreetmap.org/wiki/IT:Tag:tourism=museum"
                   ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:tourism=museum"
@@ -6174,6 +6186,7 @@
             <link href="http://wiki.openstreetmap.org/wiki/Tag:leisure=track"
                   cs.href="http://wiki.openstreetmap.org/wiki/Cs:Tag:leisure=track"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:leisure=track"
+                  es.href="http://wiki.openstreetmap.org/wiki/ES:Tag:leisure=track"
                   fr.href="http://wiki.openstreetmap.org/wiki/FR:Tag:leisure=track"
                   it.href="http://wiki.openstreetmap.org/wiki/IT:Tag:leisure=track"
                   ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:leisure=track"
@@ -6374,7 +6387,8 @@
         </item> <!-- Archery -->
         <item name="Track and Field Athletics" icon="presets/sport/athletics.svg" type="node,closedway,multipolygon" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:sports=athletics"
-                  cs.href="http://wiki.openstreetmap.org/wiki/Cs:Tag:sport=athletics" />
+                  cs.href="http://wiki.openstreetmap.org/wiki/Cs:Tag:sport=athletics"
+                  de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:sport=athletics" />
             <space />
             <key key="sport" value="athletics" />
             <text key="name" text="Name" />
@@ -8019,6 +8033,7 @@
             <link href="http://wiki.openstreetmap.org/wiki/Tag:historic=boundary_stone"
                   cs.href="http://wiki.openstreetmap.org/wiki/Cs:Tag:historic=boundary_stone"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:historic=boundary_stone"
+                  es.href="http://wiki.openstreetmap.org/wiki/ES:Tag:historic=boundary_stone"
                   fr.href="http://wiki.openstreetmap.org/wiki/FR:Tag:historic=boundary_stone"
                   ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:historic=boundary_stone"
                   pt.href="http://wiki.openstreetmap.org/wiki/Pt:Tag:historic=boundary_stone"
@@ -9336,6 +9351,7 @@
         <link href="http://wiki.openstreetmap.org/wiki/Tag:office=administrative"
                   cs.href="http://wiki.openstreetmap.org/wiki/Cs:Tag:office=administrative"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:office=administrative"
+                  es.href="http://wiki.openstreetmap.org/wiki/ES:Tag:office=administrative"
                   ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:office=administrative"
                   pt.href="http://wiki.openstreetmap.org/wiki/Pt:Tag:office=administrative"
                   ru.href="http://wiki.openstreetmap.org/wiki/RU:Tag:office=administrative" />
@@ -9445,6 +9461,7 @@
                   cs.href="http://wiki.openstreetmap.org/wiki/Cs:Tag:office=government"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:office=government"
                   es.href="http://wiki.openstreetmap.org/wiki/ES:Tag:office=government"
+                  fr.href="http://wiki.openstreetmap.org/wiki/FR:Tag:office=government"
                   ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:office=government"
                   pl.href="http://wiki.openstreetmap.org/wiki/Pl:Tag:office=government"
                   pt.href="http://wiki.openstreetmap.org/wiki/Pt:Tag:office=government"
@@ -11331,6 +11348,7 @@
                 <link href="http://wiki.openstreetmap.org/wiki/Tag:route=bicycle"
                   cs.href="http://wiki.openstreetmap.org/wiki/Cs:Tag:route=bicycle"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:route=bicycle"
+                  fr.href="http://wiki.openstreetmap.org/wiki/FR:Tag:route=bicycle"
                   ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:route=bicycle" />
                 <space/>
                 <key key="type" value="route"/>
diff --git a/data/validator/combinations.mapcss b/data/validator/combinations.mapcss
index 2cfefaa..8c8c8b4 100644
--- a/data/validator/combinations.mapcss
+++ b/data/validator/combinations.mapcss
@@ -14,7 +14,7 @@ way[sac_scale                  ][!highway],
 way[sidewalk                   ][!highway],
 way[step_count                 ][!highway],
 way[tracktype                  ][!highway],
-way[trail_visibility           ][!highway],
+way[trail_visibility           ][!highway], /* #15029 */
 way[trolley_wire               ][!highway],
 way[zip_left                   ][!highway],
 way[zip_right                  ][!highway],
@@ -115,6 +115,8 @@ way[cutline                    ][man_made!=cutline],
 }
 
 /* {0.tag} without {1.key} (warning level) */
+way[boundary=administrative][!admin_level],
+relation[boundary=administrative][!admin_level],
 relation[route=bicycle][!network][type=route],
 relation[route=hiking][!network][type=route],
 relation[route=foot][!network][type=route],
@@ -252,12 +254,22 @@ way[waterway=weir][bridge=yes][highway] {
   throwWarning: tr("incomplete object: only {0}", "{0.key}");
   group: tr("missing tag");
 }
-/* only {0.key} and {1.key}, see #11104 */
+/* only {0.key} and {1.key} */
 *[name][area][eval(number_of_tags()) = 2],
 *[name][ref][eval(number_of_tags()) = 2] {
   throwWarning: tr("incomplete object: only {0} and {1}", "{0.key}", "{1.key}");
   group: tr("missing tag");
 }
+/* only {0.tag}, #15269 */
+*[tourism=attraction][eval(number_of_tags()) = 1] {
+  throwWarning: tr("incomplete object: only {0}", "{0.tag}");
+  group: tr("missing tag");
+}
+/* only {0.key} and {1.tag} */
+*[name][tourism=attraction][eval(number_of_tags()) = 2] {
+  throwWarning: tr("incomplete object: only {0} and {1}", "{0.key}", "{1.tag}");
+  group: tr("missing tag");
+}
 
 /* #9811, #11491, #12865, #14310 */
 *[place][place!=farm][/^(addr:housenumber|addr:housename|addr:flats|addr:conscriptionnumber|addr:street|addr:place|addr:city|addr:country|addr:full|addr:hamlet|addr:suburb|addr:subdistrict|addr:district|addr:province|addr:state|addr:interpolation|addr:interpolation|addr:inclusion)$/],
@@ -414,19 +426,19 @@ way[waterway][layer][layer=~/^(-1|-2|-3|-4|-5)$/][!tunnel][culvert!=yes][covered
   group: tr("suspicious tag combination");
 }
 
-/* #13144 */
-*[unisex=yes][female=yes][male!=yes],
-*[unisex=yes][male=yes][female!=yes] {
+/* #13144, #15536 */
+*[unisex=yes][female=yes][male!=yes][shop=hairdresser],
+*[unisex=yes][male=yes][female!=yes][shop=hairdresser] {
   throwWarning: tr("{0} together with {1}", "{0.tag}", "{1.tag}");
   group: tr("suspicious tag combination");
 }
-*[unisex=yes][female=yes][male=yes] {
+*[unisex=yes][female=yes][male=yes][shop=hairdresser] {
   throwWarning: tr("{0} together with {1} and {2}. Remove {1} and {2}", "{0.tag}", "{1.tag}", "{2.tag}");
   group: tr("suspicious tag combination");
   fixRemove: "female";
   fixRemove: "male";
 }
-*[female=yes][male=yes][!unisex][shop=hairdresser] { /* for toilets male=yes female=yes unisex=no combination is valid */
+*[female=yes][male=yes][!unisex][shop=hairdresser] {
   throwWarning: tr("{0} together with {1}", "{0.tag}", "{1.tag}");
   suggestAlternative: "unisex=yes";
   group: tr("suspicious tag combination");
diff --git a/data/validator/geometry.mapcss b/data/validator/geometry.mapcss
index d2328b5..f667b1c 100644
--- a/data/validator/geometry.mapcss
+++ b/data/validator/geometry.mapcss
@@ -47,6 +47,11 @@ node[natural=tree_row] {
   assertMatch: "node bridge=viaduct";
 }
 
+/* {0} on a node, should be a way or relation */
+node[boundary=administrative] {
+  throwWarning: tr("{0} on a node. Should be used on a way or relation.", "{0.tag}");
+}
+
 /* {0} on a node, should be an area; see ticket #10679 */
 node[area=yes],
 node[landuse],
@@ -204,7 +209,7 @@ node[tag("power") = parent_tag("power")] ∈ *[power] {
   group: tr("{0} inside {1}", "power", "power");
 }
 
-/* isolated nodes which should be part of a way, see #10825 */
+/* isolated nodes which should be part of a way, see #10825, #15478 */
 node:unconnected:in-downloaded-area[entrance],
 node:unconnected:in-downloaded-area[traffic_calming],
 node:unconnected:in-downloaded-area[highway=passing_place],
@@ -217,6 +222,8 @@ node:unconnected:in-downloaded-area[highway=give_way],
 node:unconnected:in-downloaded-area[highway=traffic_signals],
 node:unconnected:in-downloaded-area[highway=crossing],
 node:unconnected:in-downloaded-area[crossing],
+node:unconnected:in-downloaded-area[highway=milestone],
+node:unconnected:in-downloaded-area[railway=milestone],
 node:unconnected:in-downloaded-area[railway=crossing],
 node:unconnected:in-downloaded-area[railway=level_crossing],
 node:unconnected:in-downloaded-area[railway=buffer_stop],
diff --git a/data/validator/unnecessary.mapcss b/data/validator/unnecessary.mapcss
index 257c608..529bd6a 100644
--- a/data/validator/unnecessary.mapcss
+++ b/data/validator/unnecessary.mapcss
@@ -44,3 +44,10 @@ area:closed[aeroway=helipad][area?] {
 way >:sameTags node:tagged {
   throwWarning: tr("Nodes duplicating parent way tags");
 }
+
+/* #15477 */
+*[payment:cash][payment:coins][payment:notes] {
+  throwWarning: tr("{0} together with {1} and {2}. Remove {0}.", "{0.key}", "{1.key}", "{2.key}");
+  group: tr("unnecessary tag");
+  fixRemove: "payment:cash";
+}
\ No newline at end of file
diff --git a/eclipse/JOSM (Java 8).launch b/eclipse/JOSM (Java 8).launch
index b5d7433..370e40d 100644
--- a/eclipse/JOSM (Java 8).launch	
+++ b/eclipse/JOSM (Java 8).launch	
@@ -7,9 +7,10 @@
 <listEntry value="1"/>
 </listAttribute>
 <stringAttribute key="org.eclipse.debug.core.source_locator_id" value="org.eclipse.jdt.launching.sourceLocator.JavaSourceLookupDirector"/>
-<stringAttribute key="org.eclipse.debug.core.source_locator_memento" value="<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<sourceLookupDirector>
<sourceContainers duplicates="false">
<container memento="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;javaProject name=&quot;JOSM-DXFImpo [...]
+<stringAttribute key="org.eclipse.debug.core.source_locator_memento" value="<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<sourceLookupDirector>
<sourceContainers duplicates="false">
<container memento="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;javaProject name=&quot;JOSM-DXFImpo [...]
 <stringAttribute key="org.eclipse.jdt.launching.JRE_CONTAINER" value="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
 <stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="org.openstreetmap.josm.gui.MainApplication"/>
 <stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="--debug"/>
 <stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="JOSM"/>
+<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-ea -Xverify:none"/>
 </launchConfiguration>
diff --git a/i18n/build.xml b/i18n/build.xml
index e0f0187..7def4d5 100644
--- a/i18n/build.xml
+++ b/i18n/build.xml
@@ -4,8 +4,8 @@
     <property name="josm.build.dir" value="../core"/>
     <property name="josm.presets" value="${josm.build.dir}/data/defaultpresets.xml"/>
     <property name="plugin.dir" value="../plugins"/>
-    <property name="maps.srcfile" value="http://josm.openstreetmap.de/maps"/>
-    <property name="wiki.srcfile" value="http://josm.openstreetmap.de/josmfile?mode=en"/>
+    <property name="maps.srcfile" value="https://josm.openstreetmap.de/maps"/>
+    <property name="wiki.srcfile" value="https://josm.openstreetmap.de/josmfile?mode=en"/>
     <property name="surveyor.srcfile" value="${plugin.dir}/surveyor/resources/surveyor.xml"/>
     <property name="tag2link.srcfile" value="${plugin.dir}/tag2link/resources/tag2link_sources.xml"/>
     <property name="i18n.build.dir" value="build"/>
diff --git a/i18n/convmaps.pl b/i18n/convmaps.pl
index 2ce5fb4..40075b6 100644
--- a/i18n/convmaps.pl
+++ b/i18n/convmaps.pl
@@ -18,7 +18,7 @@ my $comment = 0;
 print "class trans_maps { void tr(String s){} void f() {";
 
 my @lines;
-if($ARGV[0] && $ARGV[0] =~ /^http:\/\//)
+if($ARGV[0] && $ARGV[0] =~ /^https?:\/\//)
 {
   my $content = get($ARGV[0]);
   die "Couldn't get $ARGV[0]" unless defined $content;
diff --git a/i18n/convpreset.pl b/i18n/convpreset.pl
index 22aea44..40a2294 100644
--- a/i18n/convpreset.pl
+++ b/i18n/convpreset.pl
@@ -37,6 +37,7 @@ sub infoblock
   $r .= " item $item" if $item;
   $r .= " chunk $chunk" if $chunk;
   $r .= " group $group" if $group;
+  $r .= " combo $combo_type $combo_n" if $combo_type;
   $r .= " $_[0]" if $_[0];
   return $r ? "/* $r */ " : "";
 }
@@ -47,7 +48,7 @@ while(my $line = <>)
   ++$linenr;
   chomp($line);
   print "tr(\"---DUMMY-MARKER---\"); ";
-  if($line =~ /<item\s+name=(".*?")/)
+  if($line =~ /<item\s+name=(".*?")/ || $line =~ /<item.* name=(".*?")/)
   {
     my $val = fix($1);
     $item = $group ? "$group$val" : $val;
@@ -172,20 +173,20 @@ while(my $line = <>)
   {
     my $vctxi = ($line =~ /value_context=(".*?")/) ? $1 : $vctx;
     my $value = ($line =~ /value=(".*?")/) ? $1 : undef;
-    if($line =~ /display_value=(".*?")/)
+    if($line =~ /[^.]display_value=(".*?")/)
     {
       my $val = fix($1);
-      print infoblock("$combo_type $combo_n entry $value display value") . ($vctxi ? " trc($vctxi, $val);" : " tr($val);");
+      print infoblock("entry $value display value") . ($vctxi ? " trc($vctxi, $val);" : " tr($val);");
     }
     else
     {
       my $val = fix($value);
-      print infoblock("$combo_type $combo_n entry $value display value") . ($vctxi ? " trc($vctxi, $val);" : " tr($val);");
+      print infoblock("entry $value display value") . ($vctxi ? " trc($vctxi, $val);" : " tr($val);");
     }
     if($line =~ /short_description=(".*?")/)
     {
       my $val = fix($1);
-      print infoblock("$combo_type $combo_n entry $value short description") . "tr($val);";
+      print infoblock("entry $value short description") . "tr($val);";
     }
     print "\n";
   }
diff --git a/i18n/convwiki.pl b/i18n/convwiki.pl
index cd2f25b..db350d9 100644
--- a/i18n/convwiki.pl
+++ b/i18n/convwiki.pl
@@ -10,7 +10,7 @@ use open qw/:std :encoding(utf8)/;
 my $filename;
 my $dir = $ARGV[1] || "build/josmfiles";
 print "$ARGV[0]\n";
-if($ARGV[0] && $ARGV[0] =~ /^http:\/\//)
+if($ARGV[0] && $ARGV[0] =~ /^https?:\/\//)
 {
   $filename = $ARGV[2] || "build/josmfiles.zip";
   my $content = get($ARGV[0]);
@@ -31,24 +31,24 @@ foreach my $name (glob "$dir/*")
 {
   if($name =~ /^(.*?)([^\/]+-preset\.xml)$/)
   {
-    system "mv $name $name.orig";
+    system "mv \"$name\" \"$name.orig\"";
     my ($path, $xmlname) = ($1, $2);
-    my $res = `xmllint --format --schema ../core/data/tagging-preset.xsd $name.orig --encode utf-8 --output $name 2>&1`;
+    my $res = `xmllint --format --schema ../core/data/tagging-preset.xsd \"$name.orig\" --encode utf-8 --output \"$name\" 2>&1`;
     print $res if $res !~ /\.orig validates/;
-    system "perl convpreset.pl $name >${path}trans_$xmlname";
+    system "perl convpreset.pl \"$name\" >\"${path}trans_$xmlname\"";
     unlink "$name.orig";
   }
   elsif($name =~ /^(.*?)([^\/]+-style\.xml$)/)
   {
-    system "perl convstyle.pl $name >${1}trans_$2";
+    system "perl convstyle.pl \"$name\" >${1}trans_$2";
   }
   elsif($name =~ /^(.*?)([^\/]+\.mapcss)$/)
   {
-    system "perl convcss.pl $name >${1}trans_$2";
+    system "perl convcss.pl \"$name\" >${1}trans_$2";
   }
   else
   {
-    die "Unknown file type $name.";
+    die "Unknown file type \"$name\".";
   }
   unlink $name;
 }
diff --git a/i18n/po/af.po b/i18n/po/af.po
index 79fb877..7e4bfef 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-10-30 03:38+0100\n"
+"POT-Creation-Date: 2017-11-26 00:06+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-10-30 04:33+0000\n"
-"X-Generator: Launchpad (build 18493)\n"
+"X-Launchpad-Export-Date: 2017-11-26 04:33+0000\n"
+"X-Generator: Launchpad (build 18509)\n"
 "Language: af\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -421,12 +421,15 @@ msgstr ""
 msgid "Delete the active layer. Does not delete the associated file."
 msgstr ""
 
-msgid "Toggle dialogs panel"
+msgid "Dialogs panel"
 msgstr ""
 
 msgid "Toggle dialogs panel, maximize mapview"
 msgstr ""
 
+msgid "Toggle dialogs panel"
+msgstr ""
+
 msgid "Distribute Nodes"
 msgstr ""
 
@@ -6488,6 +6491,9 @@ msgstr ""
 msgid "Coordinates (projected): "
 msgstr ""
 
+msgid "UTM Zone"
+msgstr ""
+
 msgid "Part of: "
 msgstr ""
 
@@ -8786,6 +8792,11 @@ msgstr ""
 msgid "Check \"Save\" to save the layer to the file specified on the left."
 msgstr ""
 
+msgid ""
+"A background upload is already in progress. Kindly wait for it to finish "
+"before uploading new changes"
+msgstr ""
+
 msgid "I would like someone to review my edits."
 msgstr ""
 
@@ -9894,6 +9905,9 @@ msgstr ""
 msgid "Save Layer"
 msgstr ""
 
+msgid "Trying to set a read only data layer as edit layer"
+msgstr ""
+
 msgid "{0} note"
 msgid_plural "{0} notes"
 msgstr[0] ""
@@ -10724,11 +10738,6 @@ msgstr ""
 msgid "Failed to parse Mappaint styles from ''{0}''. Error was: {1}"
 msgstr ""
 
-msgid ""
-"Detected deprecated ''{0}'' in ''{1}'' which will be removed shortly. Use "
-"''{2}'' instead."
-msgstr ""
-
 msgid "Failed to locate image ''{0}''"
 msgstr ""
 
@@ -11893,6 +11902,9 @@ msgstr ""
 msgid "Show object ID in selection lists"
 msgstr ""
 
+msgid "Show node coordinates in selection lists"
+msgstr ""
+
 msgid "Show localized name in selection lists"
 msgstr ""
 
@@ -12649,9 +12661,6 @@ msgstr ""
 msgid "UTM"
 msgstr ""
 
-msgid "UTM Zone"
-msgstr ""
-
 msgid "North"
 msgstr ""
 
@@ -13119,9 +13128,6 @@ msgstr ""
 msgid "Error parsing {0}: "
 msgstr ""
 
-msgid "Presets"
-msgstr ""
-
 msgid "Search for objects by preset..."
 msgstr ""
 
@@ -15663,6 +15669,18 @@ msgstr ""
 msgid "korean"
 msgstr ""
 
+msgid "donut"
+msgstr ""
+
+msgid "mediterranean"
+msgstr ""
+
+msgid "friture"
+msgstr ""
+
+msgid "crepe"
+msgstr ""
+
 msgid "Internet access"
 msgstr ""
 
@@ -18505,7 +18523,16 @@ msgstr ""
 msgid "Tents allowed"
 msgstr ""
 
-msgid "Camping Site"
+msgid "Campsite"
+msgstr ""
+
+msgid "Caravans allowed"
+msgstr ""
+
+msgid "Backcountry"
+msgstr ""
+
+msgid "Group only access"
 msgstr ""
 
 msgid "Food+Drinks"
@@ -23334,6 +23361,14 @@ msgid ""
 "resolution or better, and refreshed more frequently with ongoing updates."
 msgstr ""
 
+msgid "DigitalGlobe Premium Imagery Vintage"
+msgstr ""
+
+msgid ""
+"Imagery boundaries and capture dates. Labels appear at zoom level 14 and "
+"higher."
+msgstr ""
+
 msgid "DigitalGlobe Standard Imagery"
 msgstr ""
 
@@ -23343,6 +23378,9 @@ msgid ""
 "Landsat. Average age is 2.31 years, with some areas updated 2x per year."
 msgstr ""
 
+msgid "DigitalGlobe Standard Imagery Vintage"
+msgstr ""
+
 msgid "Esri World Imagery"
 msgstr ""
 
@@ -23406,6 +23444,12 @@ msgstr ""
 msgid "Strava cycling and running heatmap"
 msgstr ""
 
+msgid "Strava water sports heatmap"
+msgstr ""
+
+msgid "Strava winter sports heatmap"
+msgstr ""
+
 msgid "Locator Overlay"
 msgstr ""
 
@@ -23810,6 +23854,9 @@ msgstr ""
 msgid "SPW(allonie) most recent aerial imagery"
 msgstr ""
 
+msgid "SPW(allonie) 2016 aerial imagery"
+msgstr ""
+
 msgid "SPW(allonie) 2015 aerial imagery"
 msgstr ""
 
@@ -23855,6 +23902,14 @@ msgstr ""
 msgid "Addresses data from IBGE"
 msgstr ""
 
+msgid "Street names IBGE Salvador-BA"
+msgstr ""
+
+msgid ""
+"Streets geometry and names of Salvador, Bahia. Source: Faces de Logradouro - "
+"IBGE."
+msgstr ""
+
 msgid "Rio Mosaic 2013"
 msgstr ""
 
@@ -24585,6 +24640,9 @@ msgstr ""
 msgid "Japan GSI ortho Imagery"
 msgstr ""
 
+msgid "Japan GSI Standard Map"
+msgstr ""
+
 msgid "imagico.de OSM images for mapping: Aral Sea (low water level)"
 msgstr ""
 
@@ -24614,7 +24672,7 @@ msgstr ""
 msgid "20cm ortho - Latvia - Coastline"
 msgstr ""
 
-msgid "1.cikla ortofotokarte - Latvia"
+msgid "Orthophoto 1st cycle (1994-1999) - Latvia"
 msgstr ""
 
 msgid "ORT10LT (Lithuania)"
@@ -24623,6 +24681,9 @@ msgstr ""
 msgid "geoportail.lu all layers"
 msgstr ""
 
+msgid "geoportail.lu ortho latest"
+msgstr ""
+
 msgid "geoportail.lu ortho 2016"
 msgstr ""
 
@@ -26113,6 +26174,9 @@ msgstr ""
 msgid "{0} on a node. Should be used on a way."
 msgstr ""
 
+msgid "{0} on a node. Should be used on a way or relation."
+msgstr ""
+
 msgid "{0} on a node. Should be drawn as an area."
 msgstr ""
 
@@ -26340,6 +26404,9 @@ msgstr ""
 msgid "Nodes duplicating parent way tags"
 msgstr ""
 
+msgid "{0} together with {1} and {2}. Remove {0}."
+msgstr ""
+
 msgid ""
 "wikipedia tag has no language given, use ''wikipedia''=''language:page "
 "title''"
@@ -27104,6 +27171,21 @@ msgstr ""
 msgid "Importing..."
 msgstr ""
 
+msgid "Shape is started incorrectly"
+msgstr ""
+
+msgid "Can''t load SVG diagram"
+msgstr ""
+
+msgid "Can''t find root SVG element"
+msgstr ""
+
+msgid "Import primitives"
+msgstr ""
+
+msgid "Cannot find configuration file!"
+msgstr ""
+
 msgid "DXF files [ImportDxf plugin] (*.dxf)"
 msgstr ""
 
@@ -27743,6 +27825,9 @@ msgstr ""
 msgid "Download mode"
 msgstr ""
 
+msgid "Number of images to be pre-fetched (forwards and backwards)"
+msgstr ""
+
 msgid "You are logged in as ''{0}''."
 msgstr ""
 
@@ -27953,8 +28038,17 @@ msgid "only when manually requested"
 msgstr ""
 
 msgid ""
-"The downloaded OSM area is too big. Download mode has been changed to OSM "
-"area until the layer is restarted."
+"The Mapillary layer has stopped downloading images, because the requested "
+"area is too big!"
+msgstr ""
+
+msgid ""
+"To solve this problem, you could zoom in and load a smaller area of the map."
+msgstr ""
+
+msgid ""
+"To solve this problem, you could switch to download mode ''{0}'' and load "
+"Mapillary images for a smaller portion of the map."
 msgstr ""
 
 msgid "Downloading"
@@ -31266,19 +31360,6 @@ msgstr ""
 msgid "Merge Overlap (combine)"
 msgstr ""
 
-msgid ""
-"<html>A role based relation membership was copied to all new ways.<br>You "
-"should verify this and correct it when necessary.</html>"
-msgstr ""
-
-msgid ""
-"<html>A relation membership was copied to all new ways.<br>You should verify "
-"this and correct it when necessary.</html>"
-msgstr ""
-
-msgid "Split way"
-msgstr ""
-
 msgid "Michigan Left"
 msgstr ""
 
@@ -32733,254 +32814,254 @@ msgstr ""
 msgid "PT: Route passes a oneway road in the wrong direction"
 msgstr ""
 
-msgid "moved"
+msgid "Create Stops from GTFS ..."
 msgstr ""
 
-msgid "rail"
+msgid "Create Stops from a GTFS file"
 msgstr ""
 
-msgid "Can''t parse a time from this string."
+msgid "Select GTFS file (stops.txt)"
 msgstr ""
 
-msgid "Invalid value"
+msgid "File \"{0}\" does not exist"
 msgstr ""
 
-msgid "added"
+msgid "IOException \"{0}\" occurred"
 msgstr ""
 
-msgid "Public Transport: Enable GTFSStops"
+msgid ""
+"There exists no dataset. Try to download data from the server or open an OSM "
+"file."
 msgstr ""
 
-msgid "Public Transport: Catch GTFS stops"
+msgid "No data found"
 msgstr ""
 
-msgid "skipped"
+msgid "The GTFS file was empty."
 msgstr ""
 
-msgid "Public Transport: Disable GTFS"
+msgid "[ID] {0}"
 msgstr ""
 
-msgid "Create Stops from GTFS ..."
+msgid "Route patterns ..."
 msgstr ""
 
-msgid "Create Stops from a GTFS file"
+msgid "Edit Route patterns for public transport"
 msgstr ""
 
-msgid "Select GTFS file (stops.txt)"
+msgid "Route Patterns"
 msgstr ""
 
-msgid "File \"{0}\" does not exist"
+msgid "Overview"
 msgstr ""
 
-msgid "IOException \"{0}\" occurred"
+msgid "Itinerary"
 msgstr ""
 
-msgid ""
-"There exists no dataset. Try to download data from the server or open an OSM "
-"file."
+msgid "Stops"
 msgstr ""
 
-msgid "No data found"
+msgid "Meta"
 msgstr ""
 
-msgid "The GTFS file was empty."
+msgid "Existing route patterns:"
 msgstr ""
 
-msgid "Create Stops from GTFS"
+msgid "Reflect"
 msgstr ""
 
-msgid "GTFS-Stops"
+msgid "Required tags:"
 msgstr ""
 
-msgid "Type of stops to add"
+msgid "Common tags:"
 msgstr ""
 
-msgid "Time on your GPS device"
+msgid "Additional tags:"
 msgstr ""
 
-msgid "HH:MM:SS.sss"
+msgid "Add a new Tag"
 msgstr ""
 
-msgid "Time on your stopwatch"
+msgid "Name/Id"
 msgstr ""
 
-msgid "Time window"
+msgid "Find"
 msgstr ""
 
-msgid "seconds"
+msgid "Show"
 msgstr ""
 
-msgid "Move Threshold"
+msgid "Mark"
 msgstr ""
 
-msgid "Suggest Stops"
+msgid "Ref"
 msgstr ""
 
-msgid "Find"
+msgid "Stops are possible on the"
 msgstr ""
 
-msgid "Show"
+msgid "right hand side"
 msgstr ""
 
-msgid "Mark"
+msgid "left hand side"
 msgstr ""
 
-msgid "Catch"
+msgid "Maximum distance from route"
 msgstr ""
 
-msgid "Join"
+msgid "Suggest Stops"
 msgstr ""
 
-msgid "Public Transport: Join GTFS stops"
+msgid "Create Stops from GPX ..."
 msgstr ""
 
-msgid "State"
+msgid "Create Stops from a GPX file"
 msgstr ""
 
-msgid "[incomplete]"
+msgid "Select GPX file"
 msgstr ""
 
-msgid "[empty way]"
+msgid "The GPX file contained no tracks or waypoints."
 msgstr ""
 
-msgid "[ID] {0}"
+msgid "moved"
 msgstr ""
 
-msgid "[gap]"
+msgid "added"
 msgstr ""
 
-msgid "Route patterns ..."
+msgid "Public Transport: Enable GTFSStops"
 msgstr ""
 
-msgid "Edit Route patterns for public transport"
+msgid "Public Transport: Catch GTFS stops"
 msgstr ""
 
-msgid "Route Patterns"
+msgid "skipped"
 msgstr ""
 
-msgid "Overview"
+msgid "Public Transport: Disable GTFS"
 msgstr ""
 
-msgid "Itinerary"
+msgid "Public Transport: Join GTFS stops"
 msgstr ""
 
-msgid "Stops"
+msgid "Public Transport: Change stop type"
 msgstr ""
 
-msgid "Meta"
+msgid "Public Transport: Add track stop"
 msgstr ""
 
-msgid "Existing route patterns:"
+msgid "Public Transport: Delete track stop"
 msgstr ""
 
-msgid "Reflect"
+msgid "Public Transport: Detach track stop list"
 msgstr ""
 
-msgid "Required tags:"
+msgid "Public Transport: Edit track stop list"
 msgstr ""
 
-msgid "Common tags:"
+msgid "Public Transport: Relocate nodes in track stoplist"
 msgstr ""
 
-msgid "Additional tags:"
+msgid "Public Transport: sort track stop list"
 msgstr ""
 
-msgid "Add a new Tag"
+msgid "Public Transport: Suggest stops"
 msgstr ""
 
-msgid "Name/Id"
+msgid "Public Transport: Detach waypoints"
 msgstr ""
 
-msgid "Ref"
+msgid "Public Transport: Disable waypoints"
 msgstr ""
 
-msgid "Stops are possible on the"
+msgid "Public Transport: Enable waypoints"
 msgstr ""
 
-msgid "right hand side"
+msgid "Public Transport: Edit waypoint name"
 msgstr ""
 
-msgid "left hand side"
+msgid "rail"
 msgstr ""
 
-msgid "Maximum distance from route"
+msgid "Can''t parse a time from this string."
 msgstr ""
 
-msgid " [ID] {0}"
+msgid "Invalid value"
 msgstr ""
 
-msgid "Public Transport: Change stop type"
+msgid "Create Stops from GTFS"
 msgstr ""
 
-msgid "Create Stops from GPX ..."
+msgid "GTFS-Stops"
 msgstr ""
 
-msgid "Create Stops from a GPX file"
+msgid "Type of stops to add"
 msgstr ""
 
-msgid "Select GPX file"
+msgid "Time on your GPS device"
 msgstr ""
 
-msgid "The GPX file contained no tracks or waypoints."
+msgid "HH:MM:SS.sss"
 msgstr ""
 
-msgid "Create Stops from GPX"
+msgid "Time on your stopwatch"
 msgstr ""
 
-msgid "Tracks in this GPX file:"
+msgid "Time window"
 msgstr ""
 
-msgid "Detach"
+msgid "seconds"
 msgstr ""
 
-msgid "implicit"
+msgid "Move Threshold"
 msgstr ""
 
-msgid ""
-"The GPX file doesn''t contain valid trackpoints. Please use a GPX file that "
-"has trackpoints."
+msgid "Catch"
 msgstr ""
 
-msgid "GPX File Trouble"
+msgid "Join"
 msgstr ""
 
-msgid "unnamed"
+msgid "Create Stops from GPX"
 msgstr ""
 
-msgid "Public Transport: Add track stop"
+msgid "Tracks in this GPX file:"
 msgstr ""
 
-msgid "Public Transport: Delete track stop"
+msgid "Detach"
 msgstr ""
 
-msgid "Public Transport: Detach track stop list"
+msgid "implicit"
 msgstr ""
 
-msgid "Public Transport: Edit track stop list"
+msgid "State"
 msgstr ""
 
-msgid "Public Transport: Relocate nodes in track stoplist"
+msgid "[incomplete]"
 msgstr ""
 
-msgid "Public Transport: sort track stop list"
+msgid "[empty way]"
 msgstr ""
 
-msgid "Public Transport: Suggest stops"
+msgid "[gap]"
 msgstr ""
 
 msgid "Stopname"
 msgstr ""
 
-msgid "Public Transport: Detach waypoints"
+msgid " [ID] {0}"
 msgstr ""
 
-msgid "Public Transport: Disable waypoints"
+msgid ""
+"The GPX file doesn''t contain valid trackpoints. Please use a GPX file that "
+"has trackpoints."
 msgstr ""
 
-msgid "Public Transport: Enable waypoints"
+msgid "GPX File Trouble"
 msgstr ""
 
-msgid "Public Transport: Edit waypoint name"
+msgid "unnamed"
 msgstr ""
 
 msgid "Distance between stops"
@@ -33709,6 +33790,9 @@ msgstr ""
 msgid "JOSM Tag Editor Plugin"
 msgstr ""
 
+msgid "Presets"
+msgstr ""
+
 msgid "Abort tag editing and close dialog"
 msgstr ""
 
@@ -35634,6 +35718,26 @@ msgid_plural "Overwrite ''{0}'' tags {1} from {2} with new value ''{3}''?"
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Download from Sophox API"
+msgstr ""
+
+msgid ""
+"Find places of education at least 2km, and at most 3km from the center of "
+"the selection"
+msgstr ""
+
+msgid "Show/hide Sophox snippet list"
+msgstr ""
+
+msgid "help"
+msgstr ""
+
+msgid "Server: "
+msgstr ""
+
+msgid "Wikidata+OSM server"
+msgstr ""
+
 msgid "Search Wikidata items"
 msgstr ""
 
@@ -35707,26 +35811,6 @@ msgid ""
 "objects"
 msgstr ""
 
-msgid "Download from Wikosm API"
-msgstr ""
-
-msgid ""
-"Find places of education at least 2km, and at most 3km from the center of "
-"the selection"
-msgstr ""
-
-msgid "Show/hide Wikosm snippet list"
-msgstr ""
-
-msgid "help"
-msgstr ""
-
-msgid "Server: "
-msgstr ""
-
-msgid "Wikidata+OSM server"
-msgstr ""
-
 msgid "The Ultimate WMS Super-speed Turbo Challenge II"
 msgstr ""
 
diff --git a/i18n/po/am.po b/i18n/po/am.po
index 1c613f5..9dfacc3 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-10-30 03:38+0100\n"
+"POT-Creation-Date: 2017-11-26 00:06+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-10-30 04:34+0000\n"
-"X-Generator: Launchpad (build 18493)\n"
+"X-Launchpad-Export-Date: 2017-11-26 04:34+0000\n"
+"X-Generator: Launchpad (build 18509)\n"
 "Language: am\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -421,12 +421,15 @@ msgstr ""
 msgid "Delete the active layer. Does not delete the associated file."
 msgstr ""
 
-msgid "Toggle dialogs panel"
+msgid "Dialogs panel"
 msgstr ""
 
 msgid "Toggle dialogs panel, maximize mapview"
 msgstr ""
 
+msgid "Toggle dialogs panel"
+msgstr ""
+
 msgid "Distribute Nodes"
 msgstr ""
 
@@ -6488,6 +6491,9 @@ msgstr ""
 msgid "Coordinates (projected): "
 msgstr ""
 
+msgid "UTM Zone"
+msgstr ""
+
 msgid "Part of: "
 msgstr ""
 
@@ -8786,6 +8792,11 @@ msgstr ""
 msgid "Check \"Save\" to save the layer to the file specified on the left."
 msgstr ""
 
+msgid ""
+"A background upload is already in progress. Kindly wait for it to finish "
+"before uploading new changes"
+msgstr ""
+
 msgid "I would like someone to review my edits."
 msgstr ""
 
@@ -9894,6 +9905,9 @@ msgstr ""
 msgid "Save Layer"
 msgstr ""
 
+msgid "Trying to set a read only data layer as edit layer"
+msgstr ""
+
 msgid "{0} note"
 msgid_plural "{0} notes"
 msgstr[0] ""
@@ -10724,11 +10738,6 @@ msgstr ""
 msgid "Failed to parse Mappaint styles from ''{0}''. Error was: {1}"
 msgstr ""
 
-msgid ""
-"Detected deprecated ''{0}'' in ''{1}'' which will be removed shortly. Use "
-"''{2}'' instead."
-msgstr ""
-
 msgid "Failed to locate image ''{0}''"
 msgstr ""
 
@@ -11893,6 +11902,9 @@ msgstr ""
 msgid "Show object ID in selection lists"
 msgstr ""
 
+msgid "Show node coordinates in selection lists"
+msgstr ""
+
 msgid "Show localized name in selection lists"
 msgstr ""
 
@@ -12649,9 +12661,6 @@ msgstr ""
 msgid "UTM"
 msgstr ""
 
-msgid "UTM Zone"
-msgstr ""
-
 msgid "North"
 msgstr ""
 
@@ -13119,9 +13128,6 @@ msgstr ""
 msgid "Error parsing {0}: "
 msgstr ""
 
-msgid "Presets"
-msgstr ""
-
 msgid "Search for objects by preset..."
 msgstr ""
 
@@ -15663,6 +15669,18 @@ msgstr ""
 msgid "korean"
 msgstr ""
 
+msgid "donut"
+msgstr ""
+
+msgid "mediterranean"
+msgstr ""
+
+msgid "friture"
+msgstr ""
+
+msgid "crepe"
+msgstr ""
+
 msgid "Internet access"
 msgstr ""
 
@@ -18505,7 +18523,16 @@ msgstr ""
 msgid "Tents allowed"
 msgstr ""
 
-msgid "Camping Site"
+msgid "Campsite"
+msgstr ""
+
+msgid "Caravans allowed"
+msgstr ""
+
+msgid "Backcountry"
+msgstr ""
+
+msgid "Group only access"
 msgstr ""
 
 msgid "Food+Drinks"
@@ -23334,6 +23361,14 @@ msgid ""
 "resolution or better, and refreshed more frequently with ongoing updates."
 msgstr ""
 
+msgid "DigitalGlobe Premium Imagery Vintage"
+msgstr ""
+
+msgid ""
+"Imagery boundaries and capture dates. Labels appear at zoom level 14 and "
+"higher."
+msgstr ""
+
 msgid "DigitalGlobe Standard Imagery"
 msgstr ""
 
@@ -23343,6 +23378,9 @@ msgid ""
 "Landsat. Average age is 2.31 years, with some areas updated 2x per year."
 msgstr ""
 
+msgid "DigitalGlobe Standard Imagery Vintage"
+msgstr ""
+
 msgid "Esri World Imagery"
 msgstr ""
 
@@ -23406,6 +23444,12 @@ msgstr ""
 msgid "Strava cycling and running heatmap"
 msgstr ""
 
+msgid "Strava water sports heatmap"
+msgstr ""
+
+msgid "Strava winter sports heatmap"
+msgstr ""
+
 msgid "Locator Overlay"
 msgstr ""
 
@@ -23810,6 +23854,9 @@ msgstr ""
 msgid "SPW(allonie) most recent aerial imagery"
 msgstr ""
 
+msgid "SPW(allonie) 2016 aerial imagery"
+msgstr ""
+
 msgid "SPW(allonie) 2015 aerial imagery"
 msgstr ""
 
@@ -23855,6 +23902,14 @@ msgstr ""
 msgid "Addresses data from IBGE"
 msgstr ""
 
+msgid "Street names IBGE Salvador-BA"
+msgstr ""
+
+msgid ""
+"Streets geometry and names of Salvador, Bahia. Source: Faces de Logradouro - "
+"IBGE."
+msgstr ""
+
 msgid "Rio Mosaic 2013"
 msgstr ""
 
@@ -24585,6 +24640,9 @@ msgstr ""
 msgid "Japan GSI ortho Imagery"
 msgstr ""
 
+msgid "Japan GSI Standard Map"
+msgstr ""
+
 msgid "imagico.de OSM images for mapping: Aral Sea (low water level)"
 msgstr ""
 
@@ -24614,7 +24672,7 @@ msgstr ""
 msgid "20cm ortho - Latvia - Coastline"
 msgstr ""
 
-msgid "1.cikla ortofotokarte - Latvia"
+msgid "Orthophoto 1st cycle (1994-1999) - Latvia"
 msgstr ""
 
 msgid "ORT10LT (Lithuania)"
@@ -24623,6 +24681,9 @@ msgstr ""
 msgid "geoportail.lu all layers"
 msgstr ""
 
+msgid "geoportail.lu ortho latest"
+msgstr ""
+
 msgid "geoportail.lu ortho 2016"
 msgstr ""
 
@@ -26113,6 +26174,9 @@ msgstr ""
 msgid "{0} on a node. Should be used on a way."
 msgstr ""
 
+msgid "{0} on a node. Should be used on a way or relation."
+msgstr ""
+
 msgid "{0} on a node. Should be drawn as an area."
 msgstr ""
 
@@ -26340,6 +26404,9 @@ msgstr ""
 msgid "Nodes duplicating parent way tags"
 msgstr ""
 
+msgid "{0} together with {1} and {2}. Remove {0}."
+msgstr ""
+
 msgid ""
 "wikipedia tag has no language given, use ''wikipedia''=''language:page "
 "title''"
@@ -27104,6 +27171,21 @@ msgstr ""
 msgid "Importing..."
 msgstr ""
 
+msgid "Shape is started incorrectly"
+msgstr ""
+
+msgid "Can''t load SVG diagram"
+msgstr ""
+
+msgid "Can''t find root SVG element"
+msgstr ""
+
+msgid "Import primitives"
+msgstr ""
+
+msgid "Cannot find configuration file!"
+msgstr ""
+
 msgid "DXF files [ImportDxf plugin] (*.dxf)"
 msgstr ""
 
@@ -27743,6 +27825,9 @@ msgstr ""
 msgid "Download mode"
 msgstr ""
 
+msgid "Number of images to be pre-fetched (forwards and backwards)"
+msgstr ""
+
 msgid "You are logged in as ''{0}''."
 msgstr ""
 
@@ -27953,8 +28038,17 @@ msgid "only when manually requested"
 msgstr ""
 
 msgid ""
-"The downloaded OSM area is too big. Download mode has been changed to OSM "
-"area until the layer is restarted."
+"The Mapillary layer has stopped downloading images, because the requested "
+"area is too big!"
+msgstr ""
+
+msgid ""
+"To solve this problem, you could zoom in and load a smaller area of the map."
+msgstr ""
+
+msgid ""
+"To solve this problem, you could switch to download mode ''{0}'' and load "
+"Mapillary images for a smaller portion of the map."
 msgstr ""
 
 msgid "Downloading"
@@ -31266,19 +31360,6 @@ msgstr ""
 msgid "Merge Overlap (combine)"
 msgstr ""
 
-msgid ""
-"<html>A role based relation membership was copied to all new ways.<br>You "
-"should verify this and correct it when necessary.</html>"
-msgstr ""
-
-msgid ""
-"<html>A relation membership was copied to all new ways.<br>You should verify "
-"this and correct it when necessary.</html>"
-msgstr ""
-
-msgid "Split way"
-msgstr ""
-
 msgid "Michigan Left"
 msgstr ""
 
@@ -32733,254 +32814,254 @@ msgstr ""
 msgid "PT: Route passes a oneway road in the wrong direction"
 msgstr ""
 
-msgid "moved"
+msgid "Create Stops from GTFS ..."
 msgstr ""
 
-msgid "rail"
+msgid "Create Stops from a GTFS file"
 msgstr ""
 
-msgid "Can''t parse a time from this string."
+msgid "Select GTFS file (stops.txt)"
 msgstr ""
 
-msgid "Invalid value"
+msgid "File \"{0}\" does not exist"
 msgstr ""
 
-msgid "added"
+msgid "IOException \"{0}\" occurred"
 msgstr ""
 
-msgid "Public Transport: Enable GTFSStops"
+msgid ""
+"There exists no dataset. Try to download data from the server or open an OSM "
+"file."
 msgstr ""
 
-msgid "Public Transport: Catch GTFS stops"
+msgid "No data found"
 msgstr ""
 
-msgid "skipped"
+msgid "The GTFS file was empty."
 msgstr ""
 
-msgid "Public Transport: Disable GTFS"
+msgid "[ID] {0}"
 msgstr ""
 
-msgid "Create Stops from GTFS ..."
+msgid "Route patterns ..."
 msgstr ""
 
-msgid "Create Stops from a GTFS file"
+msgid "Edit Route patterns for public transport"
 msgstr ""
 
-msgid "Select GTFS file (stops.txt)"
+msgid "Route Patterns"
 msgstr ""
 
-msgid "File \"{0}\" does not exist"
+msgid "Overview"
 msgstr ""
 
-msgid "IOException \"{0}\" occurred"
+msgid "Itinerary"
 msgstr ""
 
-msgid ""
-"There exists no dataset. Try to download data from the server or open an OSM "
-"file."
+msgid "Stops"
 msgstr ""
 
-msgid "No data found"
+msgid "Meta"
 msgstr ""
 
-msgid "The GTFS file was empty."
+msgid "Existing route patterns:"
 msgstr ""
 
-msgid "Create Stops from GTFS"
+msgid "Reflect"
 msgstr ""
 
-msgid "GTFS-Stops"
+msgid "Required tags:"
 msgstr ""
 
-msgid "Type of stops to add"
+msgid "Common tags:"
 msgstr ""
 
-msgid "Time on your GPS device"
+msgid "Additional tags:"
 msgstr ""
 
-msgid "HH:MM:SS.sss"
+msgid "Add a new Tag"
 msgstr ""
 
-msgid "Time on your stopwatch"
+msgid "Name/Id"
 msgstr ""
 
-msgid "Time window"
+msgid "Find"
 msgstr ""
 
-msgid "seconds"
+msgid "Show"
 msgstr ""
 
-msgid "Move Threshold"
+msgid "Mark"
 msgstr ""
 
-msgid "Suggest Stops"
+msgid "Ref"
 msgstr ""
 
-msgid "Find"
+msgid "Stops are possible on the"
 msgstr ""
 
-msgid "Show"
+msgid "right hand side"
 msgstr ""
 
-msgid "Mark"
+msgid "left hand side"
 msgstr ""
 
-msgid "Catch"
+msgid "Maximum distance from route"
 msgstr ""
 
-msgid "Join"
+msgid "Suggest Stops"
 msgstr ""
 
-msgid "Public Transport: Join GTFS stops"
+msgid "Create Stops from GPX ..."
 msgstr ""
 
-msgid "State"
+msgid "Create Stops from a GPX file"
 msgstr ""
 
-msgid "[incomplete]"
+msgid "Select GPX file"
 msgstr ""
 
-msgid "[empty way]"
+msgid "The GPX file contained no tracks or waypoints."
 msgstr ""
 
-msgid "[ID] {0}"
+msgid "moved"
 msgstr ""
 
-msgid "[gap]"
+msgid "added"
 msgstr ""
 
-msgid "Route patterns ..."
+msgid "Public Transport: Enable GTFSStops"
 msgstr ""
 
-msgid "Edit Route patterns for public transport"
+msgid "Public Transport: Catch GTFS stops"
 msgstr ""
 
-msgid "Route Patterns"
+msgid "skipped"
 msgstr ""
 
-msgid "Overview"
+msgid "Public Transport: Disable GTFS"
 msgstr ""
 
-msgid "Itinerary"
+msgid "Public Transport: Join GTFS stops"
 msgstr ""
 
-msgid "Stops"
+msgid "Public Transport: Change stop type"
 msgstr ""
 
-msgid "Meta"
+msgid "Public Transport: Add track stop"
 msgstr ""
 
-msgid "Existing route patterns:"
+msgid "Public Transport: Delete track stop"
 msgstr ""
 
-msgid "Reflect"
+msgid "Public Transport: Detach track stop list"
 msgstr ""
 
-msgid "Required tags:"
+msgid "Public Transport: Edit track stop list"
 msgstr ""
 
-msgid "Common tags:"
+msgid "Public Transport: Relocate nodes in track stoplist"
 msgstr ""
 
-msgid "Additional tags:"
+msgid "Public Transport: sort track stop list"
 msgstr ""
 
-msgid "Add a new Tag"
+msgid "Public Transport: Suggest stops"
 msgstr ""
 
-msgid "Name/Id"
+msgid "Public Transport: Detach waypoints"
 msgstr ""
 
-msgid "Ref"
+msgid "Public Transport: Disable waypoints"
 msgstr ""
 
-msgid "Stops are possible on the"
+msgid "Public Transport: Enable waypoints"
 msgstr ""
 
-msgid "right hand side"
+msgid "Public Transport: Edit waypoint name"
 msgstr ""
 
-msgid "left hand side"
+msgid "rail"
 msgstr ""
 
-msgid "Maximum distance from route"
+msgid "Can''t parse a time from this string."
 msgstr ""
 
-msgid " [ID] {0}"
+msgid "Invalid value"
 msgstr ""
 
-msgid "Public Transport: Change stop type"
+msgid "Create Stops from GTFS"
 msgstr ""
 
-msgid "Create Stops from GPX ..."
+msgid "GTFS-Stops"
 msgstr ""
 
-msgid "Create Stops from a GPX file"
+msgid "Type of stops to add"
 msgstr ""
 
-msgid "Select GPX file"
+msgid "Time on your GPS device"
 msgstr ""
 
-msgid "The GPX file contained no tracks or waypoints."
+msgid "HH:MM:SS.sss"
 msgstr ""
 
-msgid "Create Stops from GPX"
+msgid "Time on your stopwatch"
 msgstr ""
 
-msgid "Tracks in this GPX file:"
+msgid "Time window"
 msgstr ""
 
-msgid "Detach"
+msgid "seconds"
 msgstr ""
 
-msgid "implicit"
+msgid "Move Threshold"
 msgstr ""
 
-msgid ""
-"The GPX file doesn''t contain valid trackpoints. Please use a GPX file that "
-"has trackpoints."
+msgid "Catch"
 msgstr ""
 
-msgid "GPX File Trouble"
+msgid "Join"
 msgstr ""
 
-msgid "unnamed"
+msgid "Create Stops from GPX"
 msgstr ""
 
-msgid "Public Transport: Add track stop"
+msgid "Tracks in this GPX file:"
 msgstr ""
 
-msgid "Public Transport: Delete track stop"
+msgid "Detach"
 msgstr ""
 
-msgid "Public Transport: Detach track stop list"
+msgid "implicit"
 msgstr ""
 
-msgid "Public Transport: Edit track stop list"
+msgid "State"
 msgstr ""
 
-msgid "Public Transport: Relocate nodes in track stoplist"
+msgid "[incomplete]"
 msgstr ""
 
-msgid "Public Transport: sort track stop list"
+msgid "[empty way]"
 msgstr ""
 
-msgid "Public Transport: Suggest stops"
+msgid "[gap]"
 msgstr ""
 
 msgid "Stopname"
 msgstr ""
 
-msgid "Public Transport: Detach waypoints"
+msgid " [ID] {0}"
 msgstr ""
 
-msgid "Public Transport: Disable waypoints"
+msgid ""
+"The GPX file doesn''t contain valid trackpoints. Please use a GPX file that "
+"has trackpoints."
 msgstr ""
 
-msgid "Public Transport: Enable waypoints"
+msgid "GPX File Trouble"
 msgstr ""
 
-msgid "Public Transport: Edit waypoint name"
+msgid "unnamed"
 msgstr ""
 
 msgid "Distance between stops"
@@ -33709,6 +33790,9 @@ msgstr ""
 msgid "JOSM Tag Editor Plugin"
 msgstr ""
 
+msgid "Presets"
+msgstr ""
+
 msgid "Abort tag editing and close dialog"
 msgstr ""
 
@@ -35634,6 +35718,26 @@ msgid_plural "Overwrite ''{0}'' tags {1} from {2} with new value ''{3}''?"
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Download from Sophox API"
+msgstr ""
+
+msgid ""
+"Find places of education at least 2km, and at most 3km from the center of "
+"the selection"
+msgstr ""
+
+msgid "Show/hide Sophox snippet list"
+msgstr ""
+
+msgid "help"
+msgstr ""
+
+msgid "Server: "
+msgstr ""
+
+msgid "Wikidata+OSM server"
+msgstr ""
+
 msgid "Search Wikidata items"
 msgstr ""
 
@@ -35707,26 +35811,6 @@ msgid ""
 "objects"
 msgstr ""
 
-msgid "Download from Wikosm API"
-msgstr ""
-
-msgid ""
-"Find places of education at least 2km, and at most 3km from the center of "
-"the selection"
-msgstr ""
-
-msgid "Show/hide Wikosm snippet list"
-msgstr ""
-
-msgid "help"
-msgstr ""
-
-msgid "Server: "
-msgstr ""
-
-msgid "Wikidata+OSM server"
-msgstr ""
-
 msgid "The Ultimate WMS Super-speed Turbo Challenge II"
 msgstr ""
 
diff --git a/i18n/po/ar.po b/i18n/po/ar.po
index 18029eb..caf7f7b 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-10-30 03:38+0100\n"
+"POT-Creation-Date: 2017-11-26 00:06+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-10-30 04:34+0000\n"
-"X-Generator: Launchpad (build 18493)\n"
+"X-Launchpad-Export-Date: 2017-11-26 04:34+0000\n"
+"X-Generator: Launchpad (build 18509)\n"
 "Language: ar\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -426,12 +426,15 @@ msgstr ""
 msgid "Delete the active layer. Does not delete the associated file."
 msgstr ""
 
-msgid "Toggle dialogs panel"
-msgstr "تبديل لوحة الحوارات"
+msgid "Dialogs panel"
+msgstr ""
 
 msgid "Toggle dialogs panel, maximize mapview"
 msgstr "تبديل لوحة الحوارات، وتكبير عرض الخريطة"
 
+msgid "Toggle dialogs panel"
+msgstr "تبديل لوحة الحوارات"
+
 msgid "Distribute Nodes"
 msgstr "توزيع العقد"
 
@@ -6526,6 +6529,9 @@ msgstr ""
 msgid "Coordinates (projected): "
 msgstr ""
 
+msgid "UTM Zone"
+msgstr ""
+
 msgid "Part of: "
 msgstr ""
 
@@ -8824,6 +8830,11 @@ msgstr ""
 msgid "Check \"Save\" to save the layer to the file specified on the left."
 msgstr ""
 
+msgid ""
+"A background upload is already in progress. Kindly wait for it to finish "
+"before uploading new changes"
+msgstr ""
+
 msgid "I would like someone to review my edits."
 msgstr ""
 
@@ -9935,6 +9946,9 @@ msgstr ""
 msgid "Save Layer"
 msgstr "إحفظ الطبقة"
 
+msgid "Trying to set a read only data layer as edit layer"
+msgstr ""
+
 msgid "{0} note"
 msgid_plural "{0} notes"
 msgstr[0] ""
@@ -10769,11 +10783,6 @@ msgstr ""
 msgid "Failed to parse Mappaint styles from ''{0}''. Error was: {1}"
 msgstr ""
 
-msgid ""
-"Detected deprecated ''{0}'' in ''{1}'' which will be removed shortly. Use "
-"''{2}'' instead."
-msgstr ""
-
 msgid "Failed to locate image ''{0}''"
 msgstr ""
 
@@ -11940,6 +11949,9 @@ msgstr "اعرض شاشة اللطخ عند بدء التشغيل"
 msgid "Show object ID in selection lists"
 msgstr "أظهر معرف ID الغرض في لوائح الإختيار"
 
+msgid "Show node coordinates in selection lists"
+msgstr ""
+
 msgid "Show localized name in selection lists"
 msgstr ""
 
@@ -12696,9 +12708,6 @@ msgstr ""
 msgid "UTM"
 msgstr ""
 
-msgid "UTM Zone"
-msgstr ""
-
 msgid "North"
 msgstr ""
 
@@ -13170,9 +13179,6 @@ msgstr ""
 msgid "Error parsing {0}: "
 msgstr "خطأ في التحليل النحوي  {0}: "
 
-msgid "Presets"
-msgstr "التعيينات المسبقة"
-
 msgid "Search for objects by preset..."
 msgstr ""
 
@@ -15714,6 +15720,18 @@ msgstr ""
 msgid "korean"
 msgstr ""
 
+msgid "donut"
+msgstr ""
+
+msgid "mediterranean"
+msgstr ""
+
+msgid "friture"
+msgstr ""
+
+msgid "crepe"
+msgstr ""
+
 msgid "Internet access"
 msgstr ""
 
@@ -18556,8 +18574,17 @@ msgstr ""
 msgid "Tents allowed"
 msgstr ""
 
-msgid "Camping Site"
-msgstr "موقع تخييم"
+msgid "Campsite"
+msgstr ""
+
+msgid "Caravans allowed"
+msgstr ""
+
+msgid "Backcountry"
+msgstr ""
+
+msgid "Group only access"
+msgstr ""
 
 msgid "Food+Drinks"
 msgstr "طعام و شراب"
@@ -23385,6 +23412,14 @@ msgid ""
 "resolution or better, and refreshed more frequently with ongoing updates."
 msgstr ""
 
+msgid "DigitalGlobe Premium Imagery Vintage"
+msgstr ""
+
+msgid ""
+"Imagery boundaries and capture dates. Labels appear at zoom level 14 and "
+"higher."
+msgstr ""
+
 msgid "DigitalGlobe Standard Imagery"
 msgstr ""
 
@@ -23394,6 +23429,9 @@ msgid ""
 "Landsat. Average age is 2.31 years, with some areas updated 2x per year."
 msgstr ""
 
+msgid "DigitalGlobe Standard Imagery Vintage"
+msgstr ""
+
 msgid "Esri World Imagery"
 msgstr ""
 
@@ -23457,6 +23495,12 @@ msgstr ""
 msgid "Strava cycling and running heatmap"
 msgstr ""
 
+msgid "Strava water sports heatmap"
+msgstr ""
+
+msgid "Strava winter sports heatmap"
+msgstr ""
+
 msgid "Locator Overlay"
 msgstr ""
 
@@ -23861,6 +23905,9 @@ msgstr ""
 msgid "SPW(allonie) most recent aerial imagery"
 msgstr ""
 
+msgid "SPW(allonie) 2016 aerial imagery"
+msgstr ""
+
 msgid "SPW(allonie) 2015 aerial imagery"
 msgstr ""
 
@@ -23906,6 +23953,14 @@ msgstr ""
 msgid "Addresses data from IBGE"
 msgstr ""
 
+msgid "Street names IBGE Salvador-BA"
+msgstr ""
+
+msgid ""
+"Streets geometry and names of Salvador, Bahia. Source: Faces de Logradouro - "
+"IBGE."
+msgstr ""
+
 msgid "Rio Mosaic 2013"
 msgstr ""
 
@@ -24636,6 +24691,9 @@ msgstr ""
 msgid "Japan GSI ortho Imagery"
 msgstr ""
 
+msgid "Japan GSI Standard Map"
+msgstr ""
+
 msgid "imagico.de OSM images for mapping: Aral Sea (low water level)"
 msgstr ""
 
@@ -24665,7 +24723,7 @@ msgstr ""
 msgid "20cm ortho - Latvia - Coastline"
 msgstr ""
 
-msgid "1.cikla ortofotokarte - Latvia"
+msgid "Orthophoto 1st cycle (1994-1999) - Latvia"
 msgstr ""
 
 msgid "ORT10LT (Lithuania)"
@@ -24674,6 +24732,9 @@ msgstr ""
 msgid "geoportail.lu all layers"
 msgstr ""
 
+msgid "geoportail.lu ortho latest"
+msgstr ""
+
 msgid "geoportail.lu ortho 2016"
 msgstr ""
 
@@ -26164,6 +26225,9 @@ msgstr ""
 msgid "{0} on a node. Should be used on a way."
 msgstr ""
 
+msgid "{0} on a node. Should be used on a way or relation."
+msgstr ""
+
 msgid "{0} on a node. Should be drawn as an area."
 msgstr ""
 
@@ -26391,6 +26455,9 @@ msgstr ""
 msgid "Nodes duplicating parent way tags"
 msgstr ""
 
+msgid "{0} together with {1} and {2}. Remove {0}."
+msgstr ""
+
 msgid ""
 "wikipedia tag has no language given, use ''wikipedia''=''language:page "
 "title''"
@@ -27155,6 +27222,21 @@ msgstr ""
 msgid "Importing..."
 msgstr ""
 
+msgid "Shape is started incorrectly"
+msgstr ""
+
+msgid "Can''t load SVG diagram"
+msgstr ""
+
+msgid "Can''t find root SVG element"
+msgstr ""
+
+msgid "Import primitives"
+msgstr ""
+
+msgid "Cannot find configuration file!"
+msgstr ""
+
 msgid "DXF files [ImportDxf plugin] (*.dxf)"
 msgstr ""
 
@@ -27794,6 +27876,9 @@ msgstr ""
 msgid "Download mode"
 msgstr ""
 
+msgid "Number of images to be pre-fetched (forwards and backwards)"
+msgstr ""
+
 msgid "You are logged in as ''{0}''."
 msgstr ""
 
@@ -28004,8 +28089,17 @@ msgid "only when manually requested"
 msgstr ""
 
 msgid ""
-"The downloaded OSM area is too big. Download mode has been changed to OSM "
-"area until the layer is restarted."
+"The Mapillary layer has stopped downloading images, because the requested "
+"area is too big!"
+msgstr ""
+
+msgid ""
+"To solve this problem, you could zoom in and load a smaller area of the map."
+msgstr ""
+
+msgid ""
+"To solve this problem, you could switch to download mode ''{0}'' and load "
+"Mapillary images for a smaller portion of the map."
 msgstr ""
 
 msgid "Downloading"
@@ -31317,19 +31411,6 @@ msgstr ""
 msgid "Merge Overlap (combine)"
 msgstr ""
 
-msgid ""
-"<html>A role based relation membership was copied to all new ways.<br>You "
-"should verify this and correct it when necessary.</html>"
-msgstr ""
-
-msgid ""
-"<html>A relation membership was copied to all new ways.<br>You should verify "
-"this and correct it when necessary.</html>"
-msgstr ""
-
-msgid "Split way"
-msgstr ""
-
 msgid "Michigan Left"
 msgstr ""
 
@@ -32784,255 +32865,255 @@ msgstr ""
 msgid "PT: Route passes a oneway road in the wrong direction"
 msgstr ""
 
-msgid "moved"
+msgid "Create Stops from GTFS ..."
 msgstr ""
 
-msgid "rail"
-msgstr "سكة حديد"
-
-msgid "Can''t parse a time from this string."
+msgid "Create Stops from a GTFS file"
 msgstr ""
 
-msgid "Invalid value"
+msgid "Select GTFS file (stops.txt)"
 msgstr ""
 
-msgid "added"
+msgid "File \"{0}\" does not exist"
 msgstr ""
 
-msgid "Public Transport: Enable GTFSStops"
+msgid "IOException \"{0}\" occurred"
 msgstr ""
 
-msgid "Public Transport: Catch GTFS stops"
+msgid ""
+"There exists no dataset. Try to download data from the server or open an OSM "
+"file."
 msgstr ""
 
-msgid "skipped"
+msgid "No data found"
 msgstr ""
 
-msgid "Public Transport: Disable GTFS"
+msgid "The GTFS file was empty."
 msgstr ""
 
-msgid "Create Stops from GTFS ..."
+msgid "[ID] {0}"
 msgstr ""
 
-msgid "Create Stops from a GTFS file"
+msgid "Route patterns ..."
 msgstr ""
 
-msgid "Select GTFS file (stops.txt)"
+msgid "Edit Route patterns for public transport"
 msgstr ""
 
-msgid "File \"{0}\" does not exist"
+msgid "Route Patterns"
 msgstr ""
 
-msgid "IOException \"{0}\" occurred"
+msgid "Overview"
 msgstr ""
 
-msgid ""
-"There exists no dataset. Try to download data from the server or open an OSM "
-"file."
+msgid "Itinerary"
 msgstr ""
 
-msgid "No data found"
+msgid "Stops"
 msgstr ""
 
-msgid "The GTFS file was empty."
+msgid "Meta"
 msgstr ""
 
-msgid "Create Stops from GTFS"
+msgid "Existing route patterns:"
 msgstr ""
 
-msgid "GTFS-Stops"
+msgid "Reflect"
 msgstr ""
 
-msgid "Type of stops to add"
+msgid "Required tags:"
 msgstr ""
 
-msgid "Time on your GPS device"
+msgid "Common tags:"
 msgstr ""
 
-msgid "HH:MM:SS.sss"
+msgid "Additional tags:"
 msgstr ""
 
-msgid "Time on your stopwatch"
+msgid "Add a new Tag"
 msgstr ""
 
-msgid "Time window"
+msgid "Name/Id"
 msgstr ""
 
-msgid "seconds"
+msgid "Find"
 msgstr ""
 
-msgid "Move Threshold"
+msgid "Show"
 msgstr ""
 
-msgid "Suggest Stops"
+msgid "Mark"
 msgstr ""
 
-msgid "Find"
+msgid "Ref"
 msgstr ""
 
-msgid "Show"
+msgid "Stops are possible on the"
 msgstr ""
 
-msgid "Mark"
+msgid "right hand side"
 msgstr ""
 
-msgid "Catch"
+msgid "left hand side"
 msgstr ""
 
-msgid "Join"
+msgid "Maximum distance from route"
 msgstr ""
 
-msgid "Public Transport: Join GTFS stops"
+msgid "Suggest Stops"
 msgstr ""
 
-msgid "State"
-msgstr "دولة/ولاية"
-
-msgid "[incomplete]"
+msgid "Create Stops from GPX ..."
 msgstr ""
 
-msgid "[empty way]"
+msgid "Create Stops from a GPX file"
 msgstr ""
 
-msgid "[ID] {0}"
+msgid "Select GPX file"
 msgstr ""
 
-msgid "[gap]"
+msgid "The GPX file contained no tracks or waypoints."
 msgstr ""
 
-msgid "Route patterns ..."
+msgid "moved"
 msgstr ""
 
-msgid "Edit Route patterns for public transport"
+msgid "added"
 msgstr ""
 
-msgid "Route Patterns"
+msgid "Public Transport: Enable GTFSStops"
 msgstr ""
 
-msgid "Overview"
+msgid "Public Transport: Catch GTFS stops"
 msgstr ""
 
-msgid "Itinerary"
+msgid "skipped"
 msgstr ""
 
-msgid "Stops"
+msgid "Public Transport: Disable GTFS"
 msgstr ""
 
-msgid "Meta"
+msgid "Public Transport: Join GTFS stops"
 msgstr ""
 
-msgid "Existing route patterns:"
+msgid "Public Transport: Change stop type"
 msgstr ""
 
-msgid "Reflect"
+msgid "Public Transport: Add track stop"
 msgstr ""
 
-msgid "Required tags:"
+msgid "Public Transport: Delete track stop"
 msgstr ""
 
-msgid "Common tags:"
+msgid "Public Transport: Detach track stop list"
 msgstr ""
 
-msgid "Additional tags:"
+msgid "Public Transport: Edit track stop list"
 msgstr ""
 
-msgid "Add a new Tag"
+msgid "Public Transport: Relocate nodes in track stoplist"
 msgstr ""
 
-msgid "Name/Id"
+msgid "Public Transport: sort track stop list"
 msgstr ""
 
-msgid "Ref"
+msgid "Public Transport: Suggest stops"
 msgstr ""
 
-msgid "Stops are possible on the"
+msgid "Public Transport: Detach waypoints"
 msgstr ""
 
-msgid "right hand side"
+msgid "Public Transport: Disable waypoints"
 msgstr ""
 
-msgid "left hand side"
+msgid "Public Transport: Enable waypoints"
 msgstr ""
 
-msgid "Maximum distance from route"
+msgid "Public Transport: Edit waypoint name"
 msgstr ""
 
-msgid " [ID] {0}"
+msgid "rail"
+msgstr "سكة حديد"
+
+msgid "Can''t parse a time from this string."
 msgstr ""
 
-msgid "Public Transport: Change stop type"
+msgid "Invalid value"
 msgstr ""
 
-msgid "Create Stops from GPX ..."
+msgid "Create Stops from GTFS"
 msgstr ""
 
-msgid "Create Stops from a GPX file"
+msgid "GTFS-Stops"
 msgstr ""
 
-msgid "Select GPX file"
+msgid "Type of stops to add"
 msgstr ""
 
-msgid "The GPX file contained no tracks or waypoints."
+msgid "Time on your GPS device"
 msgstr ""
 
-msgid "Create Stops from GPX"
+msgid "HH:MM:SS.sss"
 msgstr ""
 
-msgid "Tracks in this GPX file:"
+msgid "Time on your stopwatch"
 msgstr ""
 
-msgid "Detach"
+msgid "Time window"
 msgstr ""
 
-msgid "implicit"
+msgid "seconds"
 msgstr ""
 
-msgid ""
-"The GPX file doesn''t contain valid trackpoints. Please use a GPX file that "
-"has trackpoints."
+msgid "Move Threshold"
 msgstr ""
 
-msgid "GPX File Trouble"
+msgid "Catch"
 msgstr ""
 
-msgid "unnamed"
-msgstr "غيرمسمى"
+msgid "Join"
+msgstr ""
 
-msgid "Public Transport: Add track stop"
+msgid "Create Stops from GPX"
 msgstr ""
 
-msgid "Public Transport: Delete track stop"
+msgid "Tracks in this GPX file:"
 msgstr ""
 
-msgid "Public Transport: Detach track stop list"
+msgid "Detach"
 msgstr ""
 
-msgid "Public Transport: Edit track stop list"
+msgid "implicit"
 msgstr ""
 
-msgid "Public Transport: Relocate nodes in track stoplist"
+msgid "State"
+msgstr "دولة/ولاية"
+
+msgid "[incomplete]"
 msgstr ""
 
-msgid "Public Transport: sort track stop list"
+msgid "[empty way]"
 msgstr ""
 
-msgid "Public Transport: Suggest stops"
+msgid "[gap]"
 msgstr ""
 
 msgid "Stopname"
 msgstr ""
 
-msgid "Public Transport: Detach waypoints"
+msgid " [ID] {0}"
 msgstr ""
 
-msgid "Public Transport: Disable waypoints"
+msgid ""
+"The GPX file doesn''t contain valid trackpoints. Please use a GPX file that "
+"has trackpoints."
 msgstr ""
 
-msgid "Public Transport: Enable waypoints"
+msgid "GPX File Trouble"
 msgstr ""
 
-msgid "Public Transport: Edit waypoint name"
-msgstr ""
+msgid "unnamed"
+msgstr "غيرمسمى"
 
 msgid "Distance between stops"
 msgstr ""
@@ -33760,6 +33841,9 @@ msgstr ""
 msgid "JOSM Tag Editor Plugin"
 msgstr ""
 
+msgid "Presets"
+msgstr "التعيينات المسبقة"
+
 msgid "Abort tag editing and close dialog"
 msgstr ""
 
@@ -35685,6 +35769,26 @@ msgid_plural "Overwrite ''{0}'' tags {1} from {2} with new value ''{3}''?"
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Download from Sophox API"
+msgstr ""
+
+msgid ""
+"Find places of education at least 2km, and at most 3km from the center of "
+"the selection"
+msgstr ""
+
+msgid "Show/hide Sophox snippet list"
+msgstr ""
+
+msgid "help"
+msgstr ""
+
+msgid "Server: "
+msgstr ""
+
+msgid "Wikidata+OSM server"
+msgstr ""
+
 msgid "Search Wikidata items"
 msgstr ""
 
@@ -35758,26 +35862,6 @@ msgid ""
 "objects"
 msgstr ""
 
-msgid "Download from Wikosm API"
-msgstr ""
-
-msgid ""
-"Find places of education at least 2km, and at most 3km from the center of "
-"the selection"
-msgstr ""
-
-msgid "Show/hide Wikosm snippet list"
-msgstr ""
-
-msgid "help"
-msgstr ""
-
-msgid "Server: "
-msgstr ""
-
-msgid "Wikidata+OSM server"
-msgstr ""
-
 msgid "The Ultimate WMS Super-speed Turbo Challenge II"
 msgstr ""
 
diff --git a/i18n/po/ast.po b/i18n/po/ast.po
index 55a2dec..38d122e 100644
--- a/i18n/po/ast.po
+++ b/i18n/po/ast.po
@@ -7,16 +7,16 @@ msgid ""
 msgstr ""
 "Project-Id-Version: josm\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2017-10-30 03:38+0100\n"
-"PO-Revision-Date: 2017-07-04 07:51+0000\n"
-"Last-Translator: Dirk Stöcker <launchpad at dstoecker.de>\n"
+"POT-Creation-Date: 2017-11-26 00:06+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"
 "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-10-30 04:35+0000\n"
-"X-Generator: Launchpad (build 18493)\n"
+"X-Launchpad-Export-Date: 2017-11-26 04:35+0000\n"
+"X-Generator: Launchpad (build 18509)\n"
 "Language: ast\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -445,12 +445,15 @@ msgstr "Desaniciar capa"
 msgid "Delete the active layer. Does not delete the associated file."
 msgstr "Desanicia la capa activa. Nun desanicia''l ficheru asociáu."
 
-msgid "Toggle dialogs panel"
-msgstr "Activar panel de diálogos"
+msgid "Dialogs panel"
+msgstr "Panel de diálogos"
 
 msgid "Toggle dialogs panel, maximize mapview"
 msgstr "Conmuta el panel de diálogos, maximiza la vista del mapa"
 
+msgid "Toggle dialogs panel"
+msgstr "Activar panel de diálogos"
+
 msgid "Distribute Nodes"
 msgstr "Distribuir los nudos"
 
@@ -476,7 +479,7 @@ msgid "Download data"
 msgstr "Descargar datos"
 
 msgid "Download map data from a server of your choice"
-msgstr ""
+msgstr "Descargar los datos del mapa d''un sirvidor preferíu"
 
 msgid ""
 "<html>This action will require {0} individual<br>download requests. Do you "
@@ -2526,7 +2529,7 @@ msgid "Invalid search expression"
 msgstr "Espresión de gueta non válida"
 
 msgid "Search by preset"
-msgstr ""
+msgstr "Buscar por predefiníu"
 
 msgid "Filter"
 msgstr "Peñera"
@@ -2633,10 +2636,11 @@ msgid "object without useful tags"
 msgstr "oxetos ensin etiquetes útiles"
 
 msgid "all objects that use the address preset"
-msgstr ""
+msgstr "tolos oxetos qu''usen el predefiníu de direiciones"
 
 msgid "all objects that use any preset under the Geography/Nature group"
 msgstr ""
+"tolos oxetos qu''usen cualquier predefiníu baxo''l grupu Xeografía/Natura"
 
 msgid "metadata"
 msgstr "metadatu"
@@ -3331,7 +3335,7 @@ msgid "E"
 msgstr "E"
 
 msgid "Unable to parse as coordinate value: ''{0}''"
-msgstr ""
+msgstr "Nun pudo analizase como valor de coordenada: ''{0}''"
 
 msgid "Date of imagery: {0}"
 msgstr "Data de les imaxes: {0}"
@@ -3340,19 +3344,19 @@ msgid "This imagery is marked as best in this region in other editors."
 msgstr "Esta imaxen ta marcada como la meyor d’esta rexón notros editores."
 
 msgid "{0} mirror server {1}"
-msgstr ""
+msgstr "{0} sirvidor espeyu {1}"
 
 msgid "{0} mirror server"
-msgstr ""
+msgstr "{0} sirvidor espeyu"
 
 msgid "Update default entries"
 msgstr "Anovar les entraes predeterminaes"
 
 msgid "Update imagery ''{0}''"
-msgstr ""
+msgstr "Anovar imaxen ''{0}''"
 
 msgid "Drop old imagery ''{0}''"
-msgstr ""
+msgstr "Desaniciar imáxenes antigües \"{0}\""
 
 msgid "Projection ''{0}'' is not found, bookmark ''{1}'' is not usable"
 msgstr ""
@@ -3701,7 +3705,7 @@ msgid "Range of numbers expected"
 msgstr "S''esperaba un rangu de númberos"
 
 msgid "Unknown preset name: "
-msgstr ""
+msgstr "Nome de predefiníu desconocíu: "
 
 msgid "Failed to parse MapCSS selector"
 msgstr "Nun pudo analizase’l selector de MapCSS"
@@ -3946,10 +3950,10 @@ msgid "Checks for errors on relations"
 msgstr "Verifica que nun haya erros nes relaciones"
 
 msgid "Territories"
-msgstr ""
+msgstr "Territorios"
 
 msgid "Checks for territories-specific features"
-msgstr ""
+msgstr "Comprueba carauterístiques específiques de territorios"
 
 msgid "Unnecessary tags"
 msgstr "Etiquetes innecesaries"
@@ -4048,39 +4052,45 @@ msgid "Error: {0}"
 msgstr ""
 
 msgid "JOSM projection command line interface"
-msgstr ""
+msgstr "Interfaz de llinia de comandu de proyecciones de JOSM"
 
 msgid "Description"
 msgstr "Descripción"
 
 msgid "Converts coordinates from one coordinate reference system to another."
 msgstr ""
+"Convierte coordenaes d''un sistema de referencia de coordenaes a otru."
 
 msgid "Options"
-msgstr ""
+msgstr "Opciones"
 
 msgid "Show this help"
 msgstr "Amuesa esta axuda"
 
 msgid "Switch input and output crs"
-msgstr ""
+msgstr "Intercambiar entrada y salida del src"
 
 msgid "Switch order of input coordinates (east/north, lon/lat)"
 msgstr ""
+"Intercambiar l''orde de les coordenaes d''entrada (este/norte, "
+"llonxitú/llatitú)"
 
 msgid "Switch order of output coordinates (east/north, lon/lat)"
 msgstr ""
+"Intercambiar l''orde de les coordenaes de salida (este/norte, llon/llat)"
 
 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 ""
+"El formatu pal sistema de referencia de coordenaes d''entrada y de salida "
+"aseméyase al del software PROJ.4."
 
 msgid "[file]"
-msgstr ""
+msgstr "[ficheru]"
 
 msgid ""
 "Reads input data from one or more files listed as positional arguments. When "
@@ -4576,10 +4586,10 @@ msgid "Non-Way in multipolygon"
 msgstr "Non hai vía dientro del multipolígonu"
 
 msgid "Multipolygon member(s) repeated with different role"
-msgstr ""
+msgstr "Miembru(os) de un multipolígonu repetíu(os) con un rol distintu"
 
 msgid "Multipolygon member(s) repeated with same role"
-msgstr ""
+msgstr "Miembru(os) de un multipolígonu repetíu(os) col mesmu rol"
 
 msgid "Missing name:* translation"
 msgstr "Nome que falta:* traducción"
@@ -4684,10 +4694,10 @@ msgid "Route relation contains a ''{0}'' role"
 msgstr ""
 
 msgid "Route relation contains a gap"
-msgstr ""
+msgstr "La rellación de la ruta tien un saltu"
 
 msgid "Stop position not part of route"
-msgstr ""
+msgstr "La posición de parada nun ye parte de la ruta"
 
 msgid "Role verification problem"
 msgstr "Problema de verificación de rol"
@@ -4805,13 +4815,13 @@ msgid "Property values start or end with white space"
 msgstr "Los valores de la propiedá entamen y finen con un espaciu''n blancu"
 
 msgid "Property values contain multiple white spaces"
-msgstr ""
+msgstr "Los valores de la propiedá contienen dellos espacios en blancu"
 
 msgid "Property values contain HTML entity"
 msgstr "Los valores de propiedá contienen entidá de HTML"
 
 msgid "Misspelled property key"
-msgstr ""
+msgstr "Clave de propiedá mal escrita"
 
 msgid "Key ''{0}'' looks like ''{1}''."
 msgstr ""
@@ -4920,7 +4930,7 @@ msgid "No \"to\" way found"
 msgstr "Non s''atopó una vía \"a\""
 
 msgid "\"from\" way equals \"to\" way"
-msgstr ""
+msgstr "La vía «from» ye igual que la vía «to»"
 
 msgid "No \"via\" node or way found"
 msgstr "Nun s’alcontró un nudu o vía \"vía\""
@@ -5187,7 +5197,7 @@ msgstr "Desplazamientu d''imaxes"
 
 msgctxt "menu"
 msgid "Imagery"
-msgstr ""
+msgstr "Imáxenes"
 
 msgctxt "layer"
 msgid "Offset"
@@ -5264,7 +5274,7 @@ msgid "usage"
 msgstr "usu"
 
 msgid "commands"
-msgstr ""
+msgstr "comandos"
 
 msgid "launch JOSM (default, performed when no command is specified)"
 msgstr ""
@@ -5274,6 +5284,7 @@ msgstr ""
 
 msgid "convert coordinates from one coordinate reference system to another"
 msgstr ""
+"convertir coordenaes d''un sistema de referencia de coordenaes a otru"
 
 msgid ""
 "For details on the {0} and {1} commands, run them with the {2} option."
@@ -7023,6 +7034,9 @@ msgstr "Coordenaes: "
 msgid "Coordinates (projected): "
 msgstr "Coordenaes (proyectaes): "
 
+msgid "UTM Zone"
+msgstr "Zona UTM"
+
 msgid "Part of: "
 msgstr "Parte de: "
 
@@ -9529,6 +9543,11 @@ msgstr ""
 msgid "Check \"Save\" to save the layer to the file specified on the left."
 msgstr ""
 
+msgid ""
+"A background upload is already in progress. Kindly wait for it to finish "
+"before uploading new changes"
+msgstr ""
+
 msgid "I would like someone to review my edits."
 msgstr ""
 
@@ -10768,6 +10787,9 @@ msgstr ""
 msgid "Save Layer"
 msgstr "Guardar capa"
 
+msgid "Trying to set a read only data layer as edit layer"
+msgstr ""
+
 msgid "{0} note"
 msgid_plural "{0} notes"
 msgstr[0] ""
@@ -11662,11 +11684,6 @@ msgstr ""
 msgid "Failed to parse Mappaint styles from ''{0}''. Error was: {1}"
 msgstr "Erru al analizar los estilos Mappaint dende ''{0}''. L´erru foi: {1}"
 
-msgid ""
-"Detected deprecated ''{0}'' in ''{1}'' which will be removed shortly. Use "
-"''{2}'' instead."
-msgstr ""
-
 msgid "Failed to locate image ''{0}''"
 msgstr "Non pudo alcontrase la imaxe ''{0}''"
 
@@ -12998,6 +13015,9 @@ msgstr "Amosar pantalla de bienvenida al entamu"
 msgid "Show object ID in selection lists"
 msgstr "Amosar el ID del oxetu nes llistes de selección"
 
+msgid "Show node coordinates in selection lists"
+msgstr ""
+
 msgid "Show localized name in selection lists"
 msgstr "Amosar nome alcontráu en llistes de selección"
 
@@ -13816,9 +13836,6 @@ msgstr "Sistema xeodésicu UTM"
 msgid "UTM"
 msgstr "UTM"
 
-msgid "UTM Zone"
-msgstr "Zona UTM"
-
 msgid "North"
 msgstr "Norte"
 
@@ -14338,9 +14355,6 @@ msgstr "Subelementu preestablecíu ensin padre"
 msgid "Error parsing {0}: "
 msgstr "Erru analizando {0}: "
 
-msgid "Presets"
-msgstr "Axustes Predefiníos"
-
 msgid "Search for objects by preset..."
 msgstr ""
 
@@ -17228,6 +17242,18 @@ msgstr ""
 msgid "korean"
 msgstr ""
 
+msgid "donut"
+msgstr ""
+
+msgid "mediterranean"
+msgstr ""
+
+msgid "friture"
+msgstr ""
+
+msgid "crepe"
+msgstr ""
+
 msgid "Internet access"
 msgstr "Accesu a Internet"
 
@@ -20094,8 +20120,17 @@ msgstr "Fonte d''alimentación"
 msgid "Tents allowed"
 msgstr "Permítense tiendes de campaña"
 
-msgid "Camping Site"
-msgstr "Llugar d''acampada"
+msgid "Campsite"
+msgstr ""
+
+msgid "Caravans allowed"
+msgstr ""
+
+msgid "Backcountry"
+msgstr ""
+
+msgid "Group only access"
+msgstr ""
 
 msgid "Food+Drinks"
 msgstr "Comida+Bebíes"
@@ -24951,6 +24986,14 @@ msgid ""
 "resolution or better, and refreshed more frequently with ongoing updates."
 msgstr ""
 
+msgid "DigitalGlobe Premium Imagery Vintage"
+msgstr ""
+
+msgid ""
+"Imagery boundaries and capture dates. Labels appear at zoom level 14 and "
+"higher."
+msgstr ""
+
 msgid "DigitalGlobe Standard Imagery"
 msgstr ""
 
@@ -24960,6 +25003,9 @@ msgid ""
 "Landsat. Average age is 2.31 years, with some areas updated 2x per year."
 msgstr ""
 
+msgid "DigitalGlobe Standard Imagery Vintage"
+msgstr ""
+
 msgid "Esri World Imagery"
 msgstr ""
 
@@ -25023,6 +25069,12 @@ msgstr "Strava running heatmap"
 msgid "Strava cycling and running heatmap"
 msgstr ""
 
+msgid "Strava water sports heatmap"
+msgstr ""
+
+msgid "Strava winter sports heatmap"
+msgstr ""
+
 msgid "Locator Overlay"
 msgstr ""
 
@@ -25427,6 +25479,9 @@ msgstr ""
 msgid "SPW(allonie) most recent aerial imagery"
 msgstr ""
 
+msgid "SPW(allonie) 2016 aerial imagery"
+msgstr ""
+
 msgid "SPW(allonie) 2015 aerial imagery"
 msgstr ""
 
@@ -25472,6 +25527,14 @@ msgstr ""
 msgid "Addresses data from IBGE"
 msgstr ""
 
+msgid "Street names IBGE Salvador-BA"
+msgstr ""
+
+msgid ""
+"Streets geometry and names of Salvador, Bahia. Source: Faces de Logradouro - "
+"IBGE."
+msgstr ""
+
 msgid "Rio Mosaic 2013"
 msgstr ""
 
@@ -26205,6 +26268,9 @@ msgstr ""
 msgid "Japan GSI ortho Imagery"
 msgstr ""
 
+msgid "Japan GSI Standard Map"
+msgstr ""
+
 msgid "imagico.de OSM images for mapping: Aral Sea (low water level)"
 msgstr ""
 
@@ -26234,7 +26300,7 @@ msgstr "50cm ortho - Latvia"
 msgid "20cm ortho - Latvia - Coastline"
 msgstr "20cm ortho - Latvia - Coastline"
 
-msgid "1.cikla ortofotokarte - Latvia"
+msgid "Orthophoto 1st cycle (1994-1999) - Latvia"
 msgstr ""
 
 msgid "ORT10LT (Lithuania)"
@@ -26243,6 +26309,9 @@ msgstr "ORT10LT (Lithuania)"
 msgid "geoportail.lu all layers"
 msgstr ""
 
+msgid "geoportail.lu ortho latest"
+msgstr ""
+
 msgid "geoportail.lu ortho 2016"
 msgstr ""
 
@@ -27737,6 +27806,9 @@ msgstr ""
 msgid "{0} on a node. Should be used on a way."
 msgstr ""
 
+msgid "{0} on a node. Should be used on a way or relation."
+msgstr ""
+
 msgid "{0} on a node. Should be drawn as an area."
 msgstr ""
 
@@ -27967,6 +28039,9 @@ msgstr ""
 msgid "Nodes duplicating parent way tags"
 msgstr "Nodos que doblen les etiquetes de les víes padre"
 
+msgid "{0} together with {1} and {2}. Remove {0}."
+msgstr ""
+
 msgid ""
 "wikipedia tag has no language given, use ''wikipedia''=''language:page "
 "title''"
@@ -28860,6 +28935,21 @@ msgstr "Traces xubíes a openstreetmap.org"
 msgid "Importing..."
 msgstr "Importando..."
 
+msgid "Shape is started incorrectly"
+msgstr ""
+
+msgid "Can''t load SVG diagram"
+msgstr ""
+
+msgid "Can''t find root SVG element"
+msgstr ""
+
+msgid "Import primitives"
+msgstr ""
+
+msgid "Cannot find configuration file!"
+msgstr ""
+
 msgid "DXF files [ImportDxf plugin] (*.dxf)"
 msgstr ""
 
@@ -29517,6 +29607,9 @@ msgstr ""
 msgid "Download mode"
 msgstr ""
 
+msgid "Number of images to be pre-fetched (forwards and backwards)"
+msgstr ""
+
 msgid "You are logged in as ''{0}''."
 msgstr ""
 
@@ -29727,8 +29820,17 @@ msgid "only when manually requested"
 msgstr ""
 
 msgid ""
-"The downloaded OSM area is too big. Download mode has been changed to OSM "
-"area until the layer is restarted."
+"The Mapillary layer has stopped downloading images, because the requested "
+"area is too big!"
+msgstr ""
+
+msgid ""
+"To solve this problem, you could zoom in and load a smaller area of the map."
+msgstr ""
+
+msgid ""
+"To solve this problem, you could switch to download mode ''{0}'' and load "
+"Mapillary images for a smaller portion of the map."
 msgstr ""
 
 msgid "Downloading"
@@ -33330,23 +33432,6 @@ msgstr "Combinar superposición de víes"
 msgid "Merge Overlap (combine)"
 msgstr "Combinar superposición"
 
-msgid ""
-"<html>A role based relation membership was copied to all new ways.<br>You "
-"should verify this and correct it when necessary.</html>"
-msgstr ""
-"<html>La pertenencia a una rellación basada en roles se copió a toles víes "
-"nueves.<br>Deberíes comprobales y correxilo cuando faiga falta.</html>"
-
-msgid ""
-"<html>A relation membership was copied to all new ways.<br>You should verify "
-"this and correct it when necessary.</html>"
-msgstr ""
-"<html>La pertenencia a una rellación se copió a toles víes "
-"nueves.<br>Deberíes comprobales y correxilo cuando faiga falta.</html>"
-
-msgid "Split way"
-msgstr "Estremar la vía"
-
 msgid "Michigan Left"
 msgstr "Michigan Left"
 
@@ -34892,33 +34977,6 @@ msgstr ""
 msgid "PT: Route passes a oneway road in the wrong direction"
 msgstr ""
 
-msgid "moved"
-msgstr "Movíu"
-
-msgid "rail"
-msgstr "fierrocarril"
-
-msgid "Can''t parse a time from this string."
-msgstr "Non puede interpretase una hora con esta cadena de calteres."
-
-msgid "Invalid value"
-msgstr "Valor non válidu"
-
-msgid "added"
-msgstr "añedíu"
-
-msgid "Public Transport: Enable GTFSStops"
-msgstr "Tresporte públicu: activar paraes GFTS"
-
-msgid "Public Transport: Catch GTFS stops"
-msgstr "Tresporte públicu: capturar paraes GTFS"
-
-msgid "skipped"
-msgstr "omitíu"
-
-msgid "Public Transport: Disable GTFS"
-msgstr "Tresporte públicu: desactivar GTFS"
-
 msgid "Create Stops from GTFS ..."
 msgstr "Crear paraes dende GTFS..."
 
@@ -34947,69 +35005,9 @@ msgstr "Non s''atoparon datos"
 msgid "The GTFS file was empty."
 msgstr "L''arquivu GRFS taba valeru."
 
-msgid "Create Stops from GTFS"
-msgstr "Crear paraes dende GTFS"
-
-msgid "GTFS-Stops"
-msgstr "Paraes-GTFS"
-
-msgid "Type of stops to add"
-msgstr "Tipu de parada a añedir"
-
-msgid "Time on your GPS device"
-msgstr "Tiempu nel so dispositivu GPS"
-
-msgid "HH:MM:SS.sss"
-msgstr "HH:MM:SS.sss"
-
-msgid "Time on your stopwatch"
-msgstr "Tiempu nel so cronómetru"
-
-msgid "Time window"
-msgstr "Períodu de tiempu"
-
-msgid "seconds"
-msgstr "segundos"
-
-msgid "Move Threshold"
-msgstr "Estragal de desplazamientu"
-
-msgid "Suggest Stops"
-msgstr "Paraes suxuríes"
-
-msgid "Find"
-msgstr "Atopar"
-
-msgid "Show"
-msgstr "Amosar"
-
-msgid "Mark"
-msgstr "Marca"
-
-msgid "Catch"
-msgstr "Prindar"
-
-msgid "Join"
-msgstr "Xunir"
-
-msgid "Public Transport: Join GTFS stops"
-msgstr "Tresporte públicu: xunir paraes GTFS"
-
-msgid "State"
-msgstr "Estáu/Provincia"
-
-msgid "[incomplete]"
-msgstr "[incompletu]"
-
-msgid "[empty way]"
-msgstr "[vía valera]"
-
 msgid "[ID] {0}"
 msgstr "[ID] {0}"
 
-msgid "[gap]"
-msgstr "[interrupción]"
-
 msgid "Route patterns ..."
 msgstr "Patrones de ruta..."
 
@@ -35052,6 +35050,15 @@ msgstr "Añedir una nueva etiqueta"
 msgid "Name/Id"
 msgstr "Nome/ID"
 
+msgid "Find"
+msgstr "Atopar"
+
+msgid "Show"
+msgstr "Amosar"
+
+msgid "Mark"
+msgstr "Marca"
+
 msgid "Ref"
 msgstr "Referencia"
 
@@ -35067,11 +35074,8 @@ msgstr "llau de la manzorga"
 msgid "Maximum distance from route"
 msgstr "Distancia máxima dende l''itinerariu"
 
-msgid " [ID] {0}"
-msgstr " [ID] {0}"
-
-msgid "Public Transport: Change stop type"
-msgstr "Tresporte públicu: camudar tipu de parada"
+msgid "Suggest Stops"
+msgstr "Paraes suxuríes"
 
 msgid "Create Stops from GPX ..."
 msgstr "Crear paraes dende GPX..."
@@ -35085,30 +35089,29 @@ msgstr "Escoyer l''arquivu GPX"
 msgid "The GPX file contained no tracks or waypoints."
 msgstr "L''arquivu GPX nun contenía traces nin puntos d''interés."
 
-msgid "Create Stops from GPX"
-msgstr "Crear paraes dende GPX"
+msgid "moved"
+msgstr "Movíu"
 
-msgid "Tracks in this GPX file:"
-msgstr "Traces n''esti arquivu GPX:"
+msgid "added"
+msgstr "añedíu"
 
-msgid "Detach"
-msgstr "Dixebrar"
+msgid "Public Transport: Enable GTFSStops"
+msgstr "Tresporte públicu: activar paraes GFTS"
 
-msgid "implicit"
-msgstr "implícitu"
+msgid "Public Transport: Catch GTFS stops"
+msgstr "Tresporte públicu: capturar paraes GTFS"
 
-msgid ""
-"The GPX file doesn''t contain valid trackpoints. Please use a GPX file that "
-"has trackpoints."
-msgstr ""
-"L''arquivu GPX nun contien puntos de traza válidos. Por favor utilice un "
-"arquivu GPX que contenga puntos de traza."
+msgid "skipped"
+msgstr "omitíu"
 
-msgid "GPX File Trouble"
-msgstr "Problema con Arquivu GPX"
+msgid "Public Transport: Disable GTFS"
+msgstr "Tresporte públicu: desactivar GTFS"
 
-msgid "unnamed"
-msgstr "ensin nome"
+msgid "Public Transport: Join GTFS stops"
+msgstr "Tresporte públicu: xunir paraes GTFS"
+
+msgid "Public Transport: Change stop type"
+msgstr "Tresporte públicu: camudar tipu de parada"
 
 msgid "Public Transport: Add track stop"
 msgstr "Tresporte públicu: añedir pista de parada"
@@ -35131,9 +35134,6 @@ msgstr "Tresporte públicu: ordenar llista de paraes de ruta"
 msgid "Public Transport: Suggest stops"
 msgstr "Tresporte públicu: paraes suxuríes"
 
-msgid "Stopname"
-msgstr "Nome de parada"
-
 msgid "Public Transport: Detach waypoints"
 msgstr "Tresporte públicu: dixebrar puntu de ruta"
 
@@ -35146,6 +35146,91 @@ msgstr "Tresporte públicu: activar puntos de ruta"
 msgid "Public Transport: Edit waypoint name"
 msgstr "Tresporte públicu: editar nome del puntu de ruta"
 
+msgid "rail"
+msgstr "fierrocarril"
+
+msgid "Can''t parse a time from this string."
+msgstr "Non puede interpretase una hora con esta cadena de calteres."
+
+msgid "Invalid value"
+msgstr "Valor non válidu"
+
+msgid "Create Stops from GTFS"
+msgstr "Crear paraes dende GTFS"
+
+msgid "GTFS-Stops"
+msgstr "Paraes-GTFS"
+
+msgid "Type of stops to add"
+msgstr "Tipu de parada a añedir"
+
+msgid "Time on your GPS device"
+msgstr "Tiempu nel so dispositivu GPS"
+
+msgid "HH:MM:SS.sss"
+msgstr "HH:MM:SS.sss"
+
+msgid "Time on your stopwatch"
+msgstr "Tiempu nel so cronómetru"
+
+msgid "Time window"
+msgstr "Períodu de tiempu"
+
+msgid "seconds"
+msgstr "segundos"
+
+msgid "Move Threshold"
+msgstr "Estragal de desplazamientu"
+
+msgid "Catch"
+msgstr "Prindar"
+
+msgid "Join"
+msgstr "Xunir"
+
+msgid "Create Stops from GPX"
+msgstr "Crear paraes dende GPX"
+
+msgid "Tracks in this GPX file:"
+msgstr "Traces n''esti arquivu GPX:"
+
+msgid "Detach"
+msgstr "Dixebrar"
+
+msgid "implicit"
+msgstr "implícitu"
+
+msgid "State"
+msgstr "Estáu/Provincia"
+
+msgid "[incomplete]"
+msgstr "[incompletu]"
+
+msgid "[empty way]"
+msgstr "[vía valera]"
+
+msgid "[gap]"
+msgstr "[interrupción]"
+
+msgid "Stopname"
+msgstr "Nome de parada"
+
+msgid " [ID] {0}"
+msgstr " [ID] {0}"
+
+msgid ""
+"The GPX file doesn''t contain valid trackpoints. Please use a GPX file that "
+"has trackpoints."
+msgstr ""
+"L''arquivu GPX nun contien puntos de traza válidos. Por favor utilice un "
+"arquivu GPX que contenga puntos de traza."
+
+msgid "GPX File Trouble"
+msgstr "Problema con Arquivu GPX"
+
+msgid "unnamed"
+msgstr "ensin nome"
+
 msgid "Distance between stops"
 msgstr ""
 
@@ -35911,6 +35996,9 @@ msgstr "Llanza la ventana de dialogo del editor d''etiquetes"
 msgid "JOSM Tag Editor Plugin"
 msgstr "Componente JOSM Tag Editor"
 
+msgid "Presets"
+msgstr "Axustes Predefiníos"
+
 msgid "Abort tag editing and close dialog"
 msgstr "Dexar la edición d''etiquetes y pesllar el diálogu"
 
@@ -38043,6 +38131,26 @@ msgid_plural "Overwrite ''{0}'' tags {1} from {2} with new value ''{3}''?"
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Download from Sophox API"
+msgstr ""
+
+msgid ""
+"Find places of education at least 2km, and at most 3km from the center of "
+"the selection"
+msgstr ""
+
+msgid "Show/hide Sophox snippet list"
+msgstr ""
+
+msgid "help"
+msgstr ""
+
+msgid "Server: "
+msgstr ""
+
+msgid "Wikidata+OSM server"
+msgstr ""
+
 msgid "Search Wikidata items"
 msgstr ""
 
@@ -38120,26 +38228,6 @@ msgstr ""
 "Añede una etiqueta ''wikipedia'' correspondiente a esti artículu pa los "
 "oxetos escoyíos"
 
-msgid "Download from Wikosm API"
-msgstr ""
-
-msgid ""
-"Find places of education at least 2km, and at most 3km from the center of "
-"the selection"
-msgstr ""
-
-msgid "Show/hide Wikosm snippet list"
-msgstr ""
-
-msgid "help"
-msgstr ""
-
-msgid "Server: "
-msgstr ""
-
-msgid "Wikidata+OSM server"
-msgstr ""
-
 msgid "The Ultimate WMS Super-speed Turbo Challenge II"
 msgstr "The Ultimate WMS Super-speed Turbo Challenge II"
 
diff --git a/i18n/po/az.po b/i18n/po/az.po
index 7185644..c1ecde3 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-10-30 03:38+0100\n"
+"POT-Creation-Date: 2017-11-26 00:06+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-10-30 04:36+0000\n"
-"X-Generator: Launchpad (build 18493)\n"
+"X-Launchpad-Export-Date: 2017-11-26 04:36+0000\n"
+"X-Generator: Launchpad (build 18509)\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
 msgstr ""
@@ -420,12 +420,15 @@ msgstr ""
 msgid "Delete the active layer. Does not delete the associated file."
 msgstr ""
 
-msgid "Toggle dialogs panel"
+msgid "Dialogs panel"
 msgstr ""
 
 msgid "Toggle dialogs panel, maximize mapview"
 msgstr ""
 
+msgid "Toggle dialogs panel"
+msgstr ""
+
 msgid "Distribute Nodes"
 msgstr ""
 
@@ -6487,6 +6490,9 @@ msgstr ""
 msgid "Coordinates (projected): "
 msgstr ""
 
+msgid "UTM Zone"
+msgstr ""
+
 msgid "Part of: "
 msgstr ""
 
@@ -8785,6 +8791,11 @@ msgstr ""
 msgid "Check \"Save\" to save the layer to the file specified on the left."
 msgstr ""
 
+msgid ""
+"A background upload is already in progress. Kindly wait for it to finish "
+"before uploading new changes"
+msgstr ""
+
 msgid "I would like someone to review my edits."
 msgstr ""
 
@@ -9893,6 +9904,9 @@ msgstr ""
 msgid "Save Layer"
 msgstr ""
 
+msgid "Trying to set a read only data layer as edit layer"
+msgstr ""
+
 msgid "{0} note"
 msgid_plural "{0} notes"
 msgstr[0] ""
@@ -10723,11 +10737,6 @@ msgstr ""
 msgid "Failed to parse Mappaint styles from ''{0}''. Error was: {1}"
 msgstr ""
 
-msgid ""
-"Detected deprecated ''{0}'' in ''{1}'' which will be removed shortly. Use "
-"''{2}'' instead."
-msgstr ""
-
 msgid "Failed to locate image ''{0}''"
 msgstr ""
 
@@ -11892,6 +11901,9 @@ msgstr ""
 msgid "Show object ID in selection lists"
 msgstr ""
 
+msgid "Show node coordinates in selection lists"
+msgstr ""
+
 msgid "Show localized name in selection lists"
 msgstr ""
 
@@ -12648,9 +12660,6 @@ msgstr ""
 msgid "UTM"
 msgstr ""
 
-msgid "UTM Zone"
-msgstr ""
-
 msgid "North"
 msgstr ""
 
@@ -13118,9 +13127,6 @@ msgstr ""
 msgid "Error parsing {0}: "
 msgstr ""
 
-msgid "Presets"
-msgstr ""
-
 msgid "Search for objects by preset..."
 msgstr ""
 
@@ -15662,6 +15668,18 @@ msgstr ""
 msgid "korean"
 msgstr ""
 
+msgid "donut"
+msgstr ""
+
+msgid "mediterranean"
+msgstr ""
+
+msgid "friture"
+msgstr ""
+
+msgid "crepe"
+msgstr ""
+
 msgid "Internet access"
 msgstr ""
 
@@ -18504,7 +18522,16 @@ msgstr ""
 msgid "Tents allowed"
 msgstr ""
 
-msgid "Camping Site"
+msgid "Campsite"
+msgstr ""
+
+msgid "Caravans allowed"
+msgstr ""
+
+msgid "Backcountry"
+msgstr ""
+
+msgid "Group only access"
 msgstr ""
 
 msgid "Food+Drinks"
@@ -23333,6 +23360,14 @@ msgid ""
 "resolution or better, and refreshed more frequently with ongoing updates."
 msgstr ""
 
+msgid "DigitalGlobe Premium Imagery Vintage"
+msgstr ""
+
+msgid ""
+"Imagery boundaries and capture dates. Labels appear at zoom level 14 and "
+"higher."
+msgstr ""
+
 msgid "DigitalGlobe Standard Imagery"
 msgstr ""
 
@@ -23342,6 +23377,9 @@ msgid ""
 "Landsat. Average age is 2.31 years, with some areas updated 2x per year."
 msgstr ""
 
+msgid "DigitalGlobe Standard Imagery Vintage"
+msgstr ""
+
 msgid "Esri World Imagery"
 msgstr ""
 
@@ -23405,6 +23443,12 @@ msgstr ""
 msgid "Strava cycling and running heatmap"
 msgstr ""
 
+msgid "Strava water sports heatmap"
+msgstr ""
+
+msgid "Strava winter sports heatmap"
+msgstr ""
+
 msgid "Locator Overlay"
 msgstr ""
 
@@ -23809,6 +23853,9 @@ msgstr ""
 msgid "SPW(allonie) most recent aerial imagery"
 msgstr ""
 
+msgid "SPW(allonie) 2016 aerial imagery"
+msgstr ""
+
 msgid "SPW(allonie) 2015 aerial imagery"
 msgstr ""
 
@@ -23854,6 +23901,14 @@ msgstr ""
 msgid "Addresses data from IBGE"
 msgstr ""
 
+msgid "Street names IBGE Salvador-BA"
+msgstr ""
+
+msgid ""
+"Streets geometry and names of Salvador, Bahia. Source: Faces de Logradouro - "
+"IBGE."
+msgstr ""
+
 msgid "Rio Mosaic 2013"
 msgstr ""
 
@@ -24584,6 +24639,9 @@ msgstr ""
 msgid "Japan GSI ortho Imagery"
 msgstr ""
 
+msgid "Japan GSI Standard Map"
+msgstr ""
+
 msgid "imagico.de OSM images for mapping: Aral Sea (low water level)"
 msgstr ""
 
@@ -24613,7 +24671,7 @@ msgstr ""
 msgid "20cm ortho - Latvia - Coastline"
 msgstr ""
 
-msgid "1.cikla ortofotokarte - Latvia"
+msgid "Orthophoto 1st cycle (1994-1999) - Latvia"
 msgstr ""
 
 msgid "ORT10LT (Lithuania)"
@@ -24622,6 +24680,9 @@ msgstr ""
 msgid "geoportail.lu all layers"
 msgstr ""
 
+msgid "geoportail.lu ortho latest"
+msgstr ""
+
 msgid "geoportail.lu ortho 2016"
 msgstr ""
 
@@ -26112,6 +26173,9 @@ msgstr ""
 msgid "{0} on a node. Should be used on a way."
 msgstr ""
 
+msgid "{0} on a node. Should be used on a way or relation."
+msgstr ""
+
 msgid "{0} on a node. Should be drawn as an area."
 msgstr ""
 
@@ -26339,6 +26403,9 @@ msgstr ""
 msgid "Nodes duplicating parent way tags"
 msgstr ""
 
+msgid "{0} together with {1} and {2}. Remove {0}."
+msgstr ""
+
 msgid ""
 "wikipedia tag has no language given, use ''wikipedia''=''language:page "
 "title''"
@@ -27103,6 +27170,21 @@ msgstr ""
 msgid "Importing..."
 msgstr ""
 
+msgid "Shape is started incorrectly"
+msgstr ""
+
+msgid "Can''t load SVG diagram"
+msgstr ""
+
+msgid "Can''t find root SVG element"
+msgstr ""
+
+msgid "Import primitives"
+msgstr ""
+
+msgid "Cannot find configuration file!"
+msgstr ""
+
 msgid "DXF files [ImportDxf plugin] (*.dxf)"
 msgstr ""
 
@@ -27742,6 +27824,9 @@ msgstr ""
 msgid "Download mode"
 msgstr ""
 
+msgid "Number of images to be pre-fetched (forwards and backwards)"
+msgstr ""
+
 msgid "You are logged in as ''{0}''."
 msgstr ""
 
@@ -27952,8 +28037,17 @@ msgid "only when manually requested"
 msgstr ""
 
 msgid ""
-"The downloaded OSM area is too big. Download mode has been changed to OSM "
-"area until the layer is restarted."
+"The Mapillary layer has stopped downloading images, because the requested "
+"area is too big!"
+msgstr ""
+
+msgid ""
+"To solve this problem, you could zoom in and load a smaller area of the map."
+msgstr ""
+
+msgid ""
+"To solve this problem, you could switch to download mode ''{0}'' and load "
+"Mapillary images for a smaller portion of the map."
 msgstr ""
 
 msgid "Downloading"
@@ -31265,19 +31359,6 @@ msgstr ""
 msgid "Merge Overlap (combine)"
 msgstr ""
 
-msgid ""
-"<html>A role based relation membership was copied to all new ways.<br>You "
-"should verify this and correct it when necessary.</html>"
-msgstr ""
-
-msgid ""
-"<html>A relation membership was copied to all new ways.<br>You should verify "
-"this and correct it when necessary.</html>"
-msgstr ""
-
-msgid "Split way"
-msgstr ""
-
 msgid "Michigan Left"
 msgstr ""
 
@@ -32732,254 +32813,254 @@ msgstr ""
 msgid "PT: Route passes a oneway road in the wrong direction"
 msgstr ""
 
-msgid "moved"
+msgid "Create Stops from GTFS ..."
 msgstr ""
 
-msgid "rail"
+msgid "Create Stops from a GTFS file"
 msgstr ""
 
-msgid "Can''t parse a time from this string."
+msgid "Select GTFS file (stops.txt)"
 msgstr ""
 
-msgid "Invalid value"
+msgid "File \"{0}\" does not exist"
 msgstr ""
 
-msgid "added"
+msgid "IOException \"{0}\" occurred"
 msgstr ""
 
-msgid "Public Transport: Enable GTFSStops"
+msgid ""
+"There exists no dataset. Try to download data from the server or open an OSM "
+"file."
 msgstr ""
 
-msgid "Public Transport: Catch GTFS stops"
+msgid "No data found"
 msgstr ""
 
-msgid "skipped"
+msgid "The GTFS file was empty."
 msgstr ""
 
-msgid "Public Transport: Disable GTFS"
+msgid "[ID] {0}"
 msgstr ""
 
-msgid "Create Stops from GTFS ..."
+msgid "Route patterns ..."
 msgstr ""
 
-msgid "Create Stops from a GTFS file"
+msgid "Edit Route patterns for public transport"
 msgstr ""
 
-msgid "Select GTFS file (stops.txt)"
+msgid "Route Patterns"
 msgstr ""
 
-msgid "File \"{0}\" does not exist"
+msgid "Overview"
 msgstr ""
 
-msgid "IOException \"{0}\" occurred"
+msgid "Itinerary"
 msgstr ""
 
-msgid ""
-"There exists no dataset. Try to download data from the server or open an OSM "
-"file."
+msgid "Stops"
 msgstr ""
 
-msgid "No data found"
+msgid "Meta"
 msgstr ""
 
-msgid "The GTFS file was empty."
+msgid "Existing route patterns:"
 msgstr ""
 
-msgid "Create Stops from GTFS"
+msgid "Reflect"
 msgstr ""
 
-msgid "GTFS-Stops"
+msgid "Required tags:"
 msgstr ""
 
-msgid "Type of stops to add"
+msgid "Common tags:"
 msgstr ""
 
-msgid "Time on your GPS device"
+msgid "Additional tags:"
 msgstr ""
 
-msgid "HH:MM:SS.sss"
+msgid "Add a new Tag"
 msgstr ""
 
-msgid "Time on your stopwatch"
+msgid "Name/Id"
 msgstr ""
 
-msgid "Time window"
+msgid "Find"
 msgstr ""
 
-msgid "seconds"
+msgid "Show"
 msgstr ""
 
-msgid "Move Threshold"
+msgid "Mark"
 msgstr ""
 
-msgid "Suggest Stops"
+msgid "Ref"
 msgstr ""
 
-msgid "Find"
+msgid "Stops are possible on the"
 msgstr ""
 
-msgid "Show"
+msgid "right hand side"
 msgstr ""
 
-msgid "Mark"
+msgid "left hand side"
 msgstr ""
 
-msgid "Catch"
+msgid "Maximum distance from route"
 msgstr ""
 
-msgid "Join"
+msgid "Suggest Stops"
 msgstr ""
 
-msgid "Public Transport: Join GTFS stops"
+msgid "Create Stops from GPX ..."
 msgstr ""
 
-msgid "State"
+msgid "Create Stops from a GPX file"
 msgstr ""
 
-msgid "[incomplete]"
+msgid "Select GPX file"
 msgstr ""
 
-msgid "[empty way]"
+msgid "The GPX file contained no tracks or waypoints."
 msgstr ""
 
-msgid "[ID] {0}"
+msgid "moved"
 msgstr ""
 
-msgid "[gap]"
+msgid "added"
 msgstr ""
 
-msgid "Route patterns ..."
+msgid "Public Transport: Enable GTFSStops"
 msgstr ""
 
-msgid "Edit Route patterns for public transport"
+msgid "Public Transport: Catch GTFS stops"
 msgstr ""
 
-msgid "Route Patterns"
+msgid "skipped"
 msgstr ""
 
-msgid "Overview"
+msgid "Public Transport: Disable GTFS"
 msgstr ""
 
-msgid "Itinerary"
+msgid "Public Transport: Join GTFS stops"
 msgstr ""
 
-msgid "Stops"
+msgid "Public Transport: Change stop type"
 msgstr ""
 
-msgid "Meta"
+msgid "Public Transport: Add track stop"
 msgstr ""
 
-msgid "Existing route patterns:"
+msgid "Public Transport: Delete track stop"
 msgstr ""
 
-msgid "Reflect"
+msgid "Public Transport: Detach track stop list"
 msgstr ""
 
-msgid "Required tags:"
+msgid "Public Transport: Edit track stop list"
 msgstr ""
 
-msgid "Common tags:"
+msgid "Public Transport: Relocate nodes in track stoplist"
 msgstr ""
 
-msgid "Additional tags:"
+msgid "Public Transport: sort track stop list"
 msgstr ""
 
-msgid "Add a new Tag"
+msgid "Public Transport: Suggest stops"
 msgstr ""
 
-msgid "Name/Id"
+msgid "Public Transport: Detach waypoints"
 msgstr ""
 
-msgid "Ref"
+msgid "Public Transport: Disable waypoints"
 msgstr ""
 
-msgid "Stops are possible on the"
+msgid "Public Transport: Enable waypoints"
 msgstr ""
 
-msgid "right hand side"
+msgid "Public Transport: Edit waypoint name"
 msgstr ""
 
-msgid "left hand side"
+msgid "rail"
 msgstr ""
 
-msgid "Maximum distance from route"
+msgid "Can''t parse a time from this string."
 msgstr ""
 
-msgid " [ID] {0}"
+msgid "Invalid value"
 msgstr ""
 
-msgid "Public Transport: Change stop type"
+msgid "Create Stops from GTFS"
 msgstr ""
 
-msgid "Create Stops from GPX ..."
+msgid "GTFS-Stops"
 msgstr ""
 
-msgid "Create Stops from a GPX file"
+msgid "Type of stops to add"
 msgstr ""
 
-msgid "Select GPX file"
+msgid "Time on your GPS device"
 msgstr ""
 
-msgid "The GPX file contained no tracks or waypoints."
+msgid "HH:MM:SS.sss"
 msgstr ""
 
-msgid "Create Stops from GPX"
+msgid "Time on your stopwatch"
 msgstr ""
 
-msgid "Tracks in this GPX file:"
+msgid "Time window"
 msgstr ""
 
-msgid "Detach"
+msgid "seconds"
 msgstr ""
 
-msgid "implicit"
+msgid "Move Threshold"
 msgstr ""
 
-msgid ""
-"The GPX file doesn''t contain valid trackpoints. Please use a GPX file that "
-"has trackpoints."
+msgid "Catch"
 msgstr ""
 
-msgid "GPX File Trouble"
+msgid "Join"
 msgstr ""
 
-msgid "unnamed"
+msgid "Create Stops from GPX"
 msgstr ""
 
-msgid "Public Transport: Add track stop"
+msgid "Tracks in this GPX file:"
 msgstr ""
 
-msgid "Public Transport: Delete track stop"
+msgid "Detach"
 msgstr ""
 
-msgid "Public Transport: Detach track stop list"
+msgid "implicit"
 msgstr ""
 
-msgid "Public Transport: Edit track stop list"
+msgid "State"
 msgstr ""
 
-msgid "Public Transport: Relocate nodes in track stoplist"
+msgid "[incomplete]"
 msgstr ""
 
-msgid "Public Transport: sort track stop list"
+msgid "[empty way]"
 msgstr ""
 
-msgid "Public Transport: Suggest stops"
+msgid "[gap]"
 msgstr ""
 
 msgid "Stopname"
 msgstr ""
 
-msgid "Public Transport: Detach waypoints"
+msgid " [ID] {0}"
 msgstr ""
 
-msgid "Public Transport: Disable waypoints"
+msgid ""
+"The GPX file doesn''t contain valid trackpoints. Please use a GPX file that "
+"has trackpoints."
 msgstr ""
 
-msgid "Public Transport: Enable waypoints"
+msgid "GPX File Trouble"
 msgstr ""
 
-msgid "Public Transport: Edit waypoint name"
+msgid "unnamed"
 msgstr ""
 
 msgid "Distance between stops"
@@ -33708,6 +33789,9 @@ msgstr ""
 msgid "JOSM Tag Editor Plugin"
 msgstr ""
 
+msgid "Presets"
+msgstr ""
+
 msgid "Abort tag editing and close dialog"
 msgstr ""
 
@@ -35633,6 +35717,26 @@ msgid_plural "Overwrite ''{0}'' tags {1} from {2} with new value ''{3}''?"
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Download from Sophox API"
+msgstr ""
+
+msgid ""
+"Find places of education at least 2km, and at most 3km from the center of "
+"the selection"
+msgstr ""
+
+msgid "Show/hide Sophox snippet list"
+msgstr ""
+
+msgid "help"
+msgstr ""
+
+msgid "Server: "
+msgstr ""
+
+msgid "Wikidata+OSM server"
+msgstr ""
+
 msgid "Search Wikidata items"
 msgstr ""
 
@@ -35706,26 +35810,6 @@ msgid ""
 "objects"
 msgstr ""
 
-msgid "Download from Wikosm API"
-msgstr ""
-
-msgid ""
-"Find places of education at least 2km, and at most 3km from the center of "
-"the selection"
-msgstr ""
-
-msgid "Show/hide Wikosm snippet list"
-msgstr ""
-
-msgid "help"
-msgstr ""
-
-msgid "Server: "
-msgstr ""
-
-msgid "Wikidata+OSM server"
-msgstr ""
-
 msgid "The Ultimate WMS Super-speed Turbo Challenge II"
 msgstr ""
 
diff --git a/i18n/po/be.po b/i18n/po/be.po
index 61b988c..e25eb96 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-10-30 03:38+0100\n"
+"POT-Creation-Date: 2017-11-26 00:06+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-10-30 04:37+0000\n"
-"X-Generator: Launchpad (build 18493)\n"
+"X-Launchpad-Export-Date: 2017-11-26 04:37+0000\n"
+"X-Generator: Launchpad (build 18509)\n"
 "Language: be\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -457,12 +457,15 @@ msgstr "Выдаліць пласт"
 msgid "Delete the active layer. Does not delete the associated file."
 msgstr "Выдаліць актыўны пласт. Не выдаляе злучаны з ім файл."
 
-msgid "Toggle dialogs panel"
-msgstr "Пераключыць панэлі дыялогаў"
+msgid "Dialogs panel"
+msgstr ""
 
 msgid "Toggle dialogs panel, maximize mapview"
 msgstr "Хавае панэль дыялогаў, для павелічэння плошчы для рэдагавання"
 
+msgid "Toggle dialogs panel"
+msgstr "Пераключыць панэлі дыялогаў"
+
 msgid "Distribute Nodes"
 msgstr "Размеркаваць пункты"
 
@@ -7082,6 +7085,9 @@ msgstr "Каардынаты: "
 msgid "Coordinates (projected): "
 msgstr "Каардынаты (якія праецыююцца): "
 
+msgid "UTM Zone"
+msgstr "Зона UTM"
+
 msgid "Part of: "
 msgstr "Уваходзіць у: "
 
@@ -9606,6 +9612,11 @@ msgstr "Уключыце \"Перадаць на сервер\" для адпр
 msgid "Check \"Save\" to save the layer to the file specified on the left."
 msgstr "Уключыце \"Захаваць\" для захавання пласта ў паказаны злева файл."
 
+msgid ""
+"A background upload is already in progress. Kindly wait for it to finish "
+"before uploading new changes"
+msgstr ""
+
 msgid "I would like someone to review my edits."
 msgstr ""
 
@@ -10882,6 +10893,9 @@ msgstr "Змяніце праекцыю зноў ці выдаліце плас
 msgid "Save Layer"
 msgstr "Захаваць пласт"
 
+msgid "Trying to set a read only data layer as edit layer"
+msgstr ""
+
 msgid "{0} note"
 msgid_plural "{0} notes"
 msgstr[0] "{0} нататка"
@@ -11782,11 +11796,6 @@ msgid "Failed to parse Mappaint styles from ''{0}''. Error was: {1}"
 msgstr ""
 "Не атрымалася выканаць разбор стыляў Mappaint з ''{0}''. Памылка: {1}"
 
-msgid ""
-"Detected deprecated ''{0}'' in ''{1}'' which will be removed shortly. Use "
-"''{2}'' instead."
-msgstr ""
-
 msgid "Failed to locate image ''{0}''"
 msgstr "Збой пошуку выявы ''{0}''"
 
@@ -13086,6 +13095,9 @@ msgstr "Паказваць застаўку пры запуску"
 msgid "Show object ID in selection lists"
 msgstr "Паказваць ID аб’ектаў у спісе выбару"
 
+msgid "Show node coordinates in selection lists"
+msgstr ""
+
 msgid "Show localized name in selection lists"
 msgstr "Паказаць беларускую назву ў спісах выбару"
 
@@ -13910,9 +13922,6 @@ msgstr "Сістэма каардынат UTM"
 msgid "UTM"
 msgstr "UTM"
 
-msgid "UTM Zone"
-msgstr "Зона UTM"
-
 msgid "North"
 msgstr "Поўнач"
 
@@ -14435,9 +14444,6 @@ msgstr "Нарыхтоўка ўкладзенага элемента без ба
 msgid "Error parsing {0}: "
 msgstr "Памылка пры разборы {0}: "
 
-msgid "Presets"
-msgstr "Нарыхтоўкі"
-
 msgid "Search for objects by preset..."
 msgstr "Пошук аб''ектаў па нарыхтоўцы..."
 
@@ -17370,6 +17376,18 @@ msgstr "вегетарыянская"
 msgid "korean"
 msgstr "карэйская"
 
+msgid "donut"
+msgstr ""
+
+msgid "mediterranean"
+msgstr ""
+
+msgid "friture"
+msgstr ""
+
+msgid "crepe"
+msgstr ""
+
 msgid "Internet access"
 msgstr "Кропка доступу ў інтэрнэт"
 
@@ -20242,8 +20260,17 @@ msgstr "Электразабеспячэнне"
 msgid "Tents allowed"
 msgstr "Дазволены намёты"
 
-msgid "Camping Site"
-msgstr "Кемпінг"
+msgid "Campsite"
+msgstr ""
+
+msgid "Caravans allowed"
+msgstr ""
+
+msgid "Backcountry"
+msgstr ""
+
+msgid "Group only access"
+msgstr ""
 
 msgid "Food+Drinks"
 msgstr "Ежа і напоі"
@@ -25092,6 +25119,14 @@ msgid ""
 "resolution or better, and refreshed more frequently with ongoing updates."
 msgstr ""
 
+msgid "DigitalGlobe Premium Imagery Vintage"
+msgstr ""
+
+msgid ""
+"Imagery boundaries and capture dates. Labels appear at zoom level 14 and "
+"higher."
+msgstr ""
+
 msgid "DigitalGlobe Standard Imagery"
 msgstr ""
 
@@ -25101,6 +25136,9 @@ msgid ""
 "Landsat. Average age is 2.31 years, with some areas updated 2x per year."
 msgstr ""
 
+msgid "DigitalGlobe Standard Imagery Vintage"
+msgstr ""
+
 msgid "Esri World Imagery"
 msgstr ""
 
@@ -25164,6 +25202,12 @@ msgstr "Strava цеплавая карта бегуноў"
 msgid "Strava cycling and running heatmap"
 msgstr "Цёплакарта Strava для раварыстаў і бегуноў"
 
+msgid "Strava water sports heatmap"
+msgstr ""
+
+msgid "Strava winter sports heatmap"
+msgstr ""
+
 msgid "Locator Overlay"
 msgstr "MapBox Locator (аверлэй)"
 
@@ -25569,6 +25613,9 @@ msgstr "SPW (allonie) лічбавыя выявы PICC"
 msgid "SPW(allonie) most recent aerial imagery"
 msgstr "SPW(allonie) найнавейшыя здымкі"
 
+msgid "SPW(allonie) 2016 aerial imagery"
+msgstr ""
+
 msgid "SPW(allonie) 2015 aerial imagery"
 msgstr "SPW(allonie) 2015 аэрафотаздымка"
 
@@ -25614,6 +25661,14 @@ msgstr ""
 msgid "Addresses data from IBGE"
 msgstr ""
 
+msgid "Street names IBGE Salvador-BA"
+msgstr ""
+
+msgid ""
+"Streets geometry and names of Salvador, Bahia. Source: Faces de Logradouro - "
+"IBGE."
+msgstr ""
+
 msgid "Rio Mosaic 2013"
 msgstr "Рыа, мазаіка 2013"
 
@@ -26352,6 +26407,9 @@ msgstr ""
 msgid "Japan GSI ortho Imagery"
 msgstr "Японія: ортаздымкі GSI"
 
+msgid "Japan GSI Standard Map"
+msgstr ""
+
 msgid "imagico.de OSM images for mapping: Aral Sea (low water level)"
 msgstr ""
 
@@ -26381,8 +26439,8 @@ msgstr "50см артафота - Латвія"
 msgid "20cm ortho - Latvia - Coastline"
 msgstr "20см артафота - Латвія - узбярэжжа"
 
-msgid "1.cikla ortofotokarte - Latvia"
-msgstr "1.cikla артафотакарта - Латвія"
+msgid "Orthophoto 1st cycle (1994-1999) - Latvia"
+msgstr ""
 
 msgid "ORT10LT (Lithuania)"
 msgstr "ORT10LT (Літва)"
@@ -26390,6 +26448,9 @@ msgstr "ORT10LT (Літва)"
 msgid "geoportail.lu all layers"
 msgstr ""
 
+msgid "geoportail.lu ortho latest"
+msgstr ""
+
 msgid "geoportail.lu ortho 2016"
 msgstr ""
 
@@ -27909,6 +27970,9 @@ msgstr "няправільнае значэнне: {0}"
 msgid "{0} on a node. Should be used on a way."
 msgstr "{0} на кропцы. Павінен выкарыстоўвацца на лініі."
 
+msgid "{0} on a node. Should be used on a way or relation."
+msgstr ""
+
 msgid "{0} on a node. Should be drawn as an area."
 msgstr "{0} на кропцы. Павінен быць намаляваны як вобласць."
 
@@ -28152,6 +28216,9 @@ msgstr "{0} не мае сэнсу"
 msgid "Nodes duplicating parent way tags"
 msgstr "Кропкі з тэгамі як у бацькоўскай лініі"
 
+msgid "{0} together with {1} and {2}. Remove {0}."
+msgstr ""
+
 msgid ""
 "wikipedia tag has no language given, use ''wikipedia''=''language:page "
 "title''"
@@ -29069,6 +29136,21 @@ msgstr "Перадача трэкаў на сайт openstreetmap.org"
 msgid "Importing..."
 msgstr "Імпартаванне..."
 
+msgid "Shape is started incorrectly"
+msgstr ""
+
+msgid "Can''t load SVG diagram"
+msgstr ""
+
+msgid "Can''t find root SVG element"
+msgstr ""
+
+msgid "Import primitives"
+msgstr ""
+
+msgid "Cannot find configuration file!"
+msgstr ""
+
 msgid "DXF files [ImportDxf plugin] (*.dxf)"
 msgstr "Файлы DXF [модуль ImportDxf] (*.dxf)"
 
@@ -29731,6 +29813,9 @@ msgstr ""
 msgid "Download mode"
 msgstr "Рэжым спампоўкі"
 
+msgid "Number of images to be pre-fetched (forwards and backwards)"
+msgstr ""
+
 msgid "You are logged in as ''{0}''."
 msgstr "Вы ўвайшлі як ''{0}''."
 
@@ -29945,11 +30030,18 @@ msgid "only when manually requested"
 msgstr "толькі пры запыце ўручную"
 
 msgid ""
-"The downloaded OSM area is too big. Download mode has been changed to OSM "
-"area until the layer is restarted."
+"The Mapillary layer has stopped downloading images, because the requested "
+"area is too big!"
+msgstr ""
+
+msgid ""
+"To solve this problem, you could zoom in and load a smaller area of the map."
+msgstr ""
+
+msgid ""
+"To solve this problem, you could switch to download mode ''{0}'' and load "
+"Mapillary images for a smaller portion of the map."
 msgstr ""
-"Спампаваная вобласць OSM занадта вялікая. Рэжым загрузкі зменены на вобласць "
-"са спампаванымі дадзенымі OSM да наступнага перазапуску пласта."
 
 msgid "Downloading"
 msgstr "Сцягванне"
@@ -33551,23 +33643,6 @@ msgstr "Зліццё перакрыцця ліній."
 msgid "Merge Overlap (combine)"
 msgstr "Зліццё перакрыцця (камбінаванае)"
 
-msgid ""
-"<html>A role based relation membership was copied to all new ways.<br>You "
-"should verify this and correct it when necessary.</html>"
-msgstr ""
-"<html>Усе новыя лініі атрымалі сяброўства у ралявых дачыненнях.Трэба "
-"спраўдзіць і выправіць калі патрэбна.</html>"
-
-msgid ""
-"<html>A relation membership was copied to all new ways.<br>You should verify "
-"this and correct it when necessary.</html>"
-msgstr ""
-"Усе новыя лініі атрымалі сяброўства у дачыненнях.Трэба спраўдзіць і "
-"выправіць калі патрэбна.</html>"
-
-msgid "Split way"
-msgstr "Падзяліць лінію"
-
 msgid "Michigan Left"
 msgstr "Мічыганскі паварот налева"
 
@@ -35111,33 +35186,6 @@ msgid "PT: Route passes a oneway road in the wrong direction"
 msgstr ""
 "ГТ: Маршрут праходзіць па дарозе з аднабаковым рухам у зваротным кірунку"
 
-msgid "moved"
-msgstr "перамешчаны"
-
-msgid "rail"
-msgstr "рэйка"
-
-msgid "Can''t parse a time from this string."
-msgstr "Немагчыма разабраць час з гэтай паслядоўнасці."
-
-msgid "Invalid value"
-msgstr "Няправільнае значэнне"
-
-msgid "added"
-msgstr "дададзены"
-
-msgid "Public Transport: Enable GTFSStops"
-msgstr "Грамадскі транспарт: Абавязковыя GTFS прыпынкі"
-
-msgid "Public Transport: Catch GTFS stops"
-msgstr "Грамадскі транспарт: GTFS прыпынкі па патрабаванні"
-
-msgid "skipped"
-msgstr "прапускаць"
-
-msgid "Public Transport: Disable GTFS"
-msgstr "Грамадскі транспарт: Выключыць GTFS"
-
 msgid "Create Stops from GTFS ..."
 msgstr "Стварыць прыпынкі з GTFS..."
 
@@ -35166,69 +35214,9 @@ msgstr "Дадзеныя не знойдзены"
 msgid "The GTFS file was empty."
 msgstr "Файл GTFS быў пусты."
 
-msgid "Create Stops from GTFS"
-msgstr "Стварыць прыпынкі з GTFS"
-
-msgid "GTFS-Stops"
-msgstr "GTFS-прыпынкі"
-
-msgid "Type of stops to add"
-msgstr "Тыпы прыпынкаў для дадання"
-
-msgid "Time on your GPS device"
-msgstr "Час на вашым GPS прыстасаванні"
-
-msgid "HH:MM:SS.sss"
-msgstr "ГГ:ХХ:СС.ссс"
-
-msgid "Time on your stopwatch"
-msgstr "Час на вашым секундамеры"
-
-msgid "Time window"
-msgstr "Часавае вакно"
-
-msgid "seconds"
-msgstr "секунды"
-
-msgid "Move Threshold"
-msgstr "Пачатак руху"
-
-msgid "Suggest Stops"
-msgstr "Прапанаваць прыпынкі"
-
-msgid "Find"
-msgstr "Знайсці"
-
-msgid "Show"
-msgstr "Паказаць"
-
-msgid "Mark"
-msgstr "Пазначыць"
-
-msgid "Catch"
-msgstr "Злавіць"
-
-msgid "Join"
-msgstr "Злучыць"
-
-msgid "Public Transport: Join GTFS stops"
-msgstr "Грамадскі транспарт: Злучэнне GTFS прыпынкаў"
-
-msgid "State"
-msgstr "Даступныя"
-
-msgid "[incomplete]"
-msgstr "[няпоўны]"
-
-msgid "[empty way]"
-msgstr "[пусты шлях]"
-
 msgid "[ID] {0}"
 msgstr "[ID] {0}"
 
-msgid "[gap]"
-msgstr "[прамежак]"
-
 msgid "Route patterns ..."
 msgstr "Шаблоны маршрутаў …"
 
@@ -35271,6 +35259,15 @@ msgstr "Дадаць новы тэг"
 msgid "Name/Id"
 msgstr "Імя/ідэнтыфікатар"
 
+msgid "Find"
+msgstr "Знайсці"
+
+msgid "Show"
+msgstr "Паказаць"
+
+msgid "Mark"
+msgstr "Пазначыць"
+
 msgid "Ref"
 msgstr "Спасылка"
 
@@ -35286,11 +35283,8 @@ msgstr "Левы бок"
 msgid "Maximum distance from route"
 msgstr "Максімальная дыстанцыя ад маршруту"
 
-msgid " [ID] {0}"
-msgstr " [ID] {0}"
-
-msgid "Public Transport: Change stop type"
-msgstr "Грамадскі транспарт: Змена выгляду прыпынку"
+msgid "Suggest Stops"
+msgstr "Прапанаваць прыпынкі"
 
 msgid "Create Stops from GPX ..."
 msgstr "Стварыць прыпынкі па GPX..."
@@ -35304,30 +35298,29 @@ msgstr "Абярыце GPX файл"
 msgid "The GPX file contained no tracks or waypoints."
 msgstr "GPX файл не ўтрымоўвае трэкаў ці шляхавых пунктаў."
 
-msgid "Create Stops from GPX"
-msgstr "Стварыць прыпынкі з GPX"
+msgid "moved"
+msgstr "перамешчаны"
 
-msgid "Tracks in this GPX file:"
-msgstr "Маршруты ў GPX файле:"
+msgid "added"
+msgstr "дададзены"
 
-msgid "Detach"
-msgstr "Адлучыць"
+msgid "Public Transport: Enable GTFSStops"
+msgstr "Грамадскі транспарт: Абавязковыя GTFS прыпынкі"
 
-msgid "implicit"
-msgstr "няяўны"
+msgid "Public Transport: Catch GTFS stops"
+msgstr "Грамадскі транспарт: GTFS прыпынкі па патрабаванні"
 
-msgid ""
-"The GPX file doesn''t contain valid trackpoints. Please use a GPX file that "
-"has trackpoints."
-msgstr ""
-"GPX файл не ўтрымоўвае пэўных пунктаў трэка. Калі ласка, выкарыстоўвайце GPX "
-"файл, які мае пункты трэка."
+msgid "skipped"
+msgstr "прапускаць"
 
-msgid "GPX File Trouble"
-msgstr "Праблемны GPX файл"
+msgid "Public Transport: Disable GTFS"
+msgstr "Грамадскі транспарт: Выключыць GTFS"
 
-msgid "unnamed"
-msgstr "безназоўны"
+msgid "Public Transport: Join GTFS stops"
+msgstr "Грамадскі транспарт: Злучэнне GTFS прыпынкаў"
+
+msgid "Public Transport: Change stop type"
+msgstr "Грамадскі транспарт: Змена выгляду прыпынку"
 
 msgid "Public Transport: Add track stop"
 msgstr "Грамадскі транспарт: Дадаць у маршрут прыпынак"
@@ -35350,9 +35343,6 @@ msgstr "Грамадскі транспарт: Сартаваць спіс пр
 msgid "Public Transport: Suggest stops"
 msgstr "Грамадскі транспарт: Прапанаваць прыпынкі"
 
-msgid "Stopname"
-msgstr "Назва прыпынку"
-
 msgid "Public Transport: Detach waypoints"
 msgstr "Грамадскі транспарт: Адлучыць шляхавыя пункты"
 
@@ -35365,6 +35355,91 @@ msgstr "Грамадскі транспарт: Уключыць шляхавыя
 msgid "Public Transport: Edit waypoint name"
 msgstr "Грамадскі транспарт: Рэдагаваць імя пункта"
 
+msgid "rail"
+msgstr "рэйка"
+
+msgid "Can''t parse a time from this string."
+msgstr "Немагчыма разабраць час з гэтай паслядоўнасці."
+
+msgid "Invalid value"
+msgstr "Няправільнае значэнне"
+
+msgid "Create Stops from GTFS"
+msgstr "Стварыць прыпынкі з GTFS"
+
+msgid "GTFS-Stops"
+msgstr "GTFS-прыпынкі"
+
+msgid "Type of stops to add"
+msgstr "Тыпы прыпынкаў для дадання"
+
+msgid "Time on your GPS device"
+msgstr "Час на вашым GPS прыстасаванні"
+
+msgid "HH:MM:SS.sss"
+msgstr "ГГ:ХХ:СС.ссс"
+
+msgid "Time on your stopwatch"
+msgstr "Час на вашым секундамеры"
+
+msgid "Time window"
+msgstr "Часавае вакно"
+
+msgid "seconds"
+msgstr "секунды"
+
+msgid "Move Threshold"
+msgstr "Пачатак руху"
+
+msgid "Catch"
+msgstr "Злавіць"
+
+msgid "Join"
+msgstr "Злучыць"
+
+msgid "Create Stops from GPX"
+msgstr "Стварыць прыпынкі з GPX"
+
+msgid "Tracks in this GPX file:"
+msgstr "Маршруты ў GPX файле:"
+
+msgid "Detach"
+msgstr "Адлучыць"
+
+msgid "implicit"
+msgstr "няяўны"
+
+msgid "State"
+msgstr "Даступныя"
+
+msgid "[incomplete]"
+msgstr "[няпоўны]"
+
+msgid "[empty way]"
+msgstr "[пусты шлях]"
+
+msgid "[gap]"
+msgstr "[прамежак]"
+
+msgid "Stopname"
+msgstr "Назва прыпынку"
+
+msgid " [ID] {0}"
+msgstr " [ID] {0}"
+
+msgid ""
+"The GPX file doesn''t contain valid trackpoints. Please use a GPX file that "
+"has trackpoints."
+msgstr ""
+"GPX файл не ўтрымоўвае пэўных пунктаў трэка. Калі ласка, выкарыстоўвайце GPX "
+"файл, які мае пункты трэка."
+
+msgid "GPX File Trouble"
+msgstr "Праблемны GPX файл"
+
+msgid "unnamed"
+msgstr "безназоўны"
+
 msgid "Distance between stops"
 msgstr "Адлегласць паміж прыпынкамі"
 
@@ -36122,6 +36197,9 @@ msgstr "Адкрывае дыялог рэдактара тэгаў"
 msgid "JOSM Tag Editor Plugin"
 msgstr "Модуль рэдагавання тэгаў JOSM"
 
+msgid "Presets"
+msgstr "Нарыхтоўкі"
+
 msgid "Abort tag editing and close dialog"
 msgstr "Перапыніць праўку тэгаў і зачыніць дыялог"
 
@@ -38277,6 +38355,26 @@ msgstr[0] "Перазапісаць ''{0}'' тэг {1} з {2} новым зна
 msgstr[1] "Перазапісаць ''{0}'' тэгі {1} з {2} новым значэннем ''{3}''?"
 msgstr[2] "Перазапісаць ''{0}'' тэгаў {1} з {2} новым значэннем ''{3}''?"
 
+msgid "Download from Sophox API"
+msgstr ""
+
+msgid ""
+"Find places of education at least 2km, and at most 3km from the center of "
+"the selection"
+msgstr ""
+
+msgid "Show/hide Sophox snippet list"
+msgstr ""
+
+msgid "help"
+msgstr ""
+
+msgid "Server: "
+msgstr ""
+
+msgid "Wikidata+OSM server"
+msgstr ""
+
 msgid "Search Wikidata items"
 msgstr "Пошук элементаў Вікідадзеных"
 
@@ -38354,26 +38452,6 @@ msgid ""
 "objects"
 msgstr "Дадае тэг wikipedia, адпаведны гэтаму артыкулу, абраным аб’ектам"
 
-msgid "Download from Wikosm API"
-msgstr ""
-
-msgid ""
-"Find places of education at least 2km, and at most 3km from the center of "
-"the selection"
-msgstr ""
-
-msgid "Show/hide Wikosm snippet list"
-msgstr ""
-
-msgid "help"
-msgstr ""
-
-msgid "Server: "
-msgstr ""
-
-msgid "Wikidata+OSM server"
-msgstr ""
-
 msgid "The Ultimate WMS Super-speed Turbo Challenge II"
 msgstr "Канчатковы WMS Супер-хуткасць Турба выклік II"
 
diff --git a/i18n/po/bg.po b/i18n/po/bg.po
index b7b82ca..39a6dfe 100644
--- a/i18n/po/bg.po
+++ b/i18n/po/bg.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: josm\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2017-10-30 03:38+0100\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"
 "Language-Team: Bulgarian <bg at li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Launchpad-Export-Date: 2017-10-30 04:38+0000\n"
-"X-Generator: Launchpad (build 18493)\n"
+"X-Launchpad-Export-Date: 2017-11-26 04:39+0000\n"
+"X-Generator: Launchpad (build 18509)\n"
 "Language: bg\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -437,12 +437,15 @@ msgstr ""
 msgid "Delete the active layer. Does not delete the associated file."
 msgstr ""
 
-msgid "Toggle dialogs panel"
-msgstr "Включване на диалоговия панел"
+msgid "Dialogs panel"
+msgstr ""
 
 msgid "Toggle dialogs panel, maximize mapview"
 msgstr "Включване на диалоговия панел, максимално увеличаване на картата"
 
+msgid "Toggle dialogs panel"
+msgstr "Включване на диалоговия панел"
+
 msgid "Distribute Nodes"
 msgstr ""
 
@@ -6643,6 +6646,9 @@ msgstr "Координати: "
 msgid "Coordinates (projected): "
 msgstr ""
 
+msgid "UTM Zone"
+msgstr ""
+
 msgid "Part of: "
 msgstr "Част от: "
 
@@ -8960,6 +8966,11 @@ msgstr ""
 msgid "Check \"Save\" to save the layer to the file specified on the left."
 msgstr ""
 
+msgid ""
+"A background upload is already in progress. Kindly wait for it to finish "
+"before uploading new changes"
+msgstr ""
+
 msgid "I would like someone to review my edits."
 msgstr ""
 
@@ -10090,6 +10101,9 @@ msgstr ""
 msgid "Save Layer"
 msgstr "Запис на слой"
 
+msgid "Trying to set a read only data layer as edit layer"
+msgstr ""
+
 msgid "{0} note"
 msgid_plural "{0} notes"
 msgstr[0] "{0} бележка"
@@ -10950,11 +10964,6 @@ msgstr ""
 msgid "Failed to parse Mappaint styles from ''{0}''. Error was: {1}"
 msgstr ""
 
-msgid ""
-"Detected deprecated ''{0}'' in ''{1}'' which will be removed shortly. Use "
-"''{2}'' instead."
-msgstr ""
-
 msgid "Failed to locate image ''{0}''"
 msgstr ""
 
@@ -12150,6 +12159,9 @@ msgstr "Показване на стартова картинка"
 msgid "Show object ID in selection lists"
 msgstr "Показване на ID на обектите в списъците с избрани"
 
+msgid "Show node coordinates in selection lists"
+msgstr ""
+
 msgid "Show localized name in selection lists"
 msgstr ""
 
@@ -12907,9 +12919,6 @@ msgstr ""
 msgid "UTM"
 msgstr ""
 
-msgid "UTM Zone"
-msgstr ""
-
 msgid "North"
 msgstr "Север"
 
@@ -13379,9 +13388,6 @@ msgstr ""
 msgid "Error parsing {0}: "
 msgstr "Грешка при разбор {0}: "
 
-msgid "Presets"
-msgstr "Шаблони"
-
 msgid "Search for objects by preset..."
 msgstr ""
 
@@ -15942,6 +15948,18 @@ msgstr ""
 msgid "korean"
 msgstr ""
 
+msgid "donut"
+msgstr ""
+
+msgid "mediterranean"
+msgstr ""
+
+msgid "friture"
+msgstr ""
+
+msgid "crepe"
+msgstr ""
+
 msgid "Internet access"
 msgstr "Интернет достъп"
 
@@ -18784,8 +18802,17 @@ msgstr "Електрозахранване"
 msgid "Tents allowed"
 msgstr ""
 
-msgid "Camping Site"
-msgstr "Къмпинг"
+msgid "Campsite"
+msgstr ""
+
+msgid "Caravans allowed"
+msgstr ""
+
+msgid "Backcountry"
+msgstr ""
+
+msgid "Group only access"
+msgstr ""
 
 msgid "Food+Drinks"
 msgstr "Храна и напитки"
@@ -23615,6 +23642,14 @@ msgid ""
 "resolution or better, and refreshed more frequently with ongoing updates."
 msgstr ""
 
+msgid "DigitalGlobe Premium Imagery Vintage"
+msgstr ""
+
+msgid ""
+"Imagery boundaries and capture dates. Labels appear at zoom level 14 and "
+"higher."
+msgstr ""
+
 msgid "DigitalGlobe Standard Imagery"
 msgstr ""
 
@@ -23624,6 +23659,9 @@ msgid ""
 "Landsat. Average age is 2.31 years, with some areas updated 2x per year."
 msgstr ""
 
+msgid "DigitalGlobe Standard Imagery Vintage"
+msgstr ""
+
 msgid "Esri World Imagery"
 msgstr ""
 
@@ -23687,6 +23725,12 @@ msgstr "Strava running heatmap"
 msgid "Strava cycling and running heatmap"
 msgstr ""
 
+msgid "Strava water sports heatmap"
+msgstr ""
+
+msgid "Strava winter sports heatmap"
+msgstr ""
+
 msgid "Locator Overlay"
 msgstr "Locator Overlay"
 
@@ -24091,6 +24135,9 @@ msgstr ""
 msgid "SPW(allonie) most recent aerial imagery"
 msgstr ""
 
+msgid "SPW(allonie) 2016 aerial imagery"
+msgstr ""
+
 msgid "SPW(allonie) 2015 aerial imagery"
 msgstr ""
 
@@ -24136,6 +24183,14 @@ msgstr ""
 msgid "Addresses data from IBGE"
 msgstr ""
 
+msgid "Street names IBGE Salvador-BA"
+msgstr ""
+
+msgid ""
+"Streets geometry and names of Salvador, Bahia. Source: Faces de Logradouro - "
+"IBGE."
+msgstr ""
+
 msgid "Rio Mosaic 2013"
 msgstr ""
 
@@ -24868,6 +24923,9 @@ msgstr ""
 msgid "Japan GSI ortho Imagery"
 msgstr ""
 
+msgid "Japan GSI Standard Map"
+msgstr ""
+
 msgid "imagico.de OSM images for mapping: Aral Sea (low water level)"
 msgstr ""
 
@@ -24897,7 +24955,7 @@ msgstr "50cm ortho - Latvia"
 msgid "20cm ortho - Latvia - Coastline"
 msgstr "20cm ortho - Latvia - Coastline"
 
-msgid "1.cikla ortofotokarte - Latvia"
+msgid "Orthophoto 1st cycle (1994-1999) - Latvia"
 msgstr ""
 
 msgid "ORT10LT (Lithuania)"
@@ -24906,6 +24964,9 @@ msgstr "ORT10LT (Lithuania)"
 msgid "geoportail.lu all layers"
 msgstr ""
 
+msgid "geoportail.lu ortho latest"
+msgstr ""
+
 msgid "geoportail.lu ortho 2016"
 msgstr ""
 
@@ -26396,6 +26457,9 @@ msgstr ""
 msgid "{0} on a node. Should be used on a way."
 msgstr "{0} за точка. Трябва да се ползва за път."
 
+msgid "{0} on a node. Should be used on a way or relation."
+msgstr ""
+
 msgid "{0} on a node. Should be drawn as an area."
 msgstr "{0} за точка. Трябва да се ползва за площ."
 
@@ -26623,6 +26687,9 @@ msgstr ""
 msgid "Nodes duplicating parent way tags"
 msgstr ""
 
+msgid "{0} together with {1} and {2}. Remove {0}."
+msgstr ""
+
 msgid ""
 "wikipedia tag has no language given, use ''wikipedia''=''language:page "
 "title''"
@@ -27404,6 +27471,21 @@ msgstr "Качване на следи на openstreetmap.org"
 msgid "Importing..."
 msgstr ""
 
+msgid "Shape is started incorrectly"
+msgstr ""
+
+msgid "Can''t load SVG diagram"
+msgstr ""
+
+msgid "Can''t find root SVG element"
+msgstr ""
+
+msgid "Import primitives"
+msgstr ""
+
+msgid "Cannot find configuration file!"
+msgstr ""
+
 msgid "DXF files [ImportDxf plugin] (*.dxf)"
 msgstr ""
 
@@ -28043,6 +28125,9 @@ msgstr ""
 msgid "Download mode"
 msgstr ""
 
+msgid "Number of images to be pre-fetched (forwards and backwards)"
+msgstr ""
+
 msgid "You are logged in as ''{0}''."
 msgstr ""
 
@@ -28253,8 +28338,17 @@ msgid "only when manually requested"
 msgstr ""
 
 msgid ""
-"The downloaded OSM area is too big. Download mode has been changed to OSM "
-"area until the layer is restarted."
+"The Mapillary layer has stopped downloading images, because the requested "
+"area is too big!"
+msgstr ""
+
+msgid ""
+"To solve this problem, you could zoom in and load a smaller area of the map."
+msgstr ""
+
+msgid ""
+"To solve this problem, you could switch to download mode ''{0}'' and load "
+"Mapillary images for a smaller portion of the map."
 msgstr ""
 
 msgid "Downloading"
@@ -31605,23 +31699,6 @@ msgstr ""
 msgid "Merge Overlap (combine)"
 msgstr ""
 
-msgid ""
-"<html>A role based relation membership was copied to all new ways.<br>You "
-"should verify this and correct it when necessary.</html>"
-msgstr ""
-"<html>Ролевото членство в релация беше копирано за всички нови "
-"пътища.<br>Трябва да го проверите и коригирате ако е необходимо.</html>"
-
-msgid ""
-"<html>A relation membership was copied to all new ways.<br>You should verify "
-"this and correct it when necessary.</html>"
-msgstr ""
-"<html>Членството в релация беше копирано за всички нови пътища.<br>Трябва да "
-"го проверите и коригирате ако е необходимо.</html>"
-
-msgid "Split way"
-msgstr ""
-
 msgid "Michigan Left"
 msgstr ""
 
@@ -33079,33 +33156,6 @@ msgstr ""
 msgid "PT: Route passes a oneway road in the wrong direction"
 msgstr ""
 
-msgid "moved"
-msgstr "преместен"
-
-msgid "rail"
-msgstr "ЖП"
-
-msgid "Can''t parse a time from this string."
-msgstr ""
-
-msgid "Invalid value"
-msgstr "Невалидна стойност"
-
-msgid "added"
-msgstr ""
-
-msgid "Public Transport: Enable GTFSStops"
-msgstr ""
-
-msgid "Public Transport: Catch GTFS stops"
-msgstr ""
-
-msgid "skipped"
-msgstr ""
-
-msgid "Public Transport: Disable GTFS"
-msgstr ""
-
 msgid "Create Stops from GTFS ..."
 msgstr ""
 
@@ -33132,34 +33182,49 @@ msgstr "Няма намерени данни"
 msgid "The GTFS file was empty."
 msgstr ""
 
-msgid "Create Stops from GTFS"
+msgid "[ID] {0}"
+msgstr "[ID] {0}"
+
+msgid "Route patterns ..."
 msgstr ""
 
-msgid "GTFS-Stops"
-msgstr "GTFS-Stops"
+msgid "Edit Route patterns for public transport"
+msgstr ""
 
-msgid "Type of stops to add"
+msgid "Route Patterns"
 msgstr ""
 
-msgid "Time on your GPS device"
+msgid "Overview"
 msgstr ""
 
-msgid "HH:MM:SS.sss"
-msgstr "HH:MM:SS.sss"
+msgid "Itinerary"
+msgstr ""
 
-msgid "Time on your stopwatch"
+msgid "Stops"
 msgstr ""
 
-msgid "Time window"
+msgid "Meta"
 msgstr ""
 
-msgid "seconds"
-msgstr "секунди"
+msgid "Existing route patterns:"
+msgstr ""
 
-msgid "Move Threshold"
+msgid "Reflect"
 msgstr ""
 
-msgid "Suggest Stops"
+msgid "Required tags:"
+msgstr ""
+
+msgid "Common tags:"
+msgstr ""
+
+msgid "Additional tags:"
+msgstr ""
+
+msgid "Add a new Tag"
+msgstr ""
+
+msgid "Name/Id"
 msgstr ""
 
 msgid "Find"
@@ -33171,163 +33236,175 @@ msgstr "Покажи"
 msgid "Mark"
 msgstr "Маркирай"
 
-msgid "Catch"
+msgid "Ref"
 msgstr ""
 
-msgid "Join"
-msgstr "Присъедини"
-
-msgid "Public Transport: Join GTFS stops"
+msgid "Stops are possible on the"
 msgstr ""
 
-msgid "State"
-msgstr "Област/Щат"
-
-msgid "[incomplete]"
+msgid "right hand side"
 msgstr ""
 
-msgid "[empty way]"
+msgid "left hand side"
 msgstr ""
 
-msgid "[ID] {0}"
-msgstr "[ID] {0}"
-
-msgid "[gap]"
+msgid "Maximum distance from route"
 msgstr ""
 
-msgid "Route patterns ..."
+msgid "Suggest Stops"
 msgstr ""
 
-msgid "Edit Route patterns for public transport"
+msgid "Create Stops from GPX ..."
 msgstr ""
 
-msgid "Route Patterns"
+msgid "Create Stops from a GPX file"
 msgstr ""
 
-msgid "Overview"
+msgid "Select GPX file"
 msgstr ""
 
-msgid "Itinerary"
+msgid "The GPX file contained no tracks or waypoints."
 msgstr ""
 
-msgid "Stops"
+msgid "moved"
+msgstr "преместен"
+
+msgid "added"
 msgstr ""
 
-msgid "Meta"
+msgid "Public Transport: Enable GTFSStops"
 msgstr ""
 
-msgid "Existing route patterns:"
+msgid "Public Transport: Catch GTFS stops"
 msgstr ""
 
-msgid "Reflect"
+msgid "skipped"
 msgstr ""
 
-msgid "Required tags:"
+msgid "Public Transport: Disable GTFS"
 msgstr ""
 
-msgid "Common tags:"
+msgid "Public Transport: Join GTFS stops"
 msgstr ""
 
-msgid "Additional tags:"
+msgid "Public Transport: Change stop type"
 msgstr ""
 
-msgid "Add a new Tag"
+msgid "Public Transport: Add track stop"
 msgstr ""
 
-msgid "Name/Id"
+msgid "Public Transport: Delete track stop"
 msgstr ""
 
-msgid "Ref"
+msgid "Public Transport: Detach track stop list"
 msgstr ""
 
-msgid "Stops are possible on the"
+msgid "Public Transport: Edit track stop list"
 msgstr ""
 
-msgid "right hand side"
+msgid "Public Transport: Relocate nodes in track stoplist"
 msgstr ""
 
-msgid "left hand side"
+msgid "Public Transport: sort track stop list"
 msgstr ""
 
-msgid "Maximum distance from route"
+msgid "Public Transport: Suggest stops"
 msgstr ""
 
-msgid " [ID] {0}"
-msgstr " [ID] {0}"
+msgid "Public Transport: Detach waypoints"
+msgstr ""
 
-msgid "Public Transport: Change stop type"
+msgid "Public Transport: Disable waypoints"
 msgstr ""
 
-msgid "Create Stops from GPX ..."
+msgid "Public Transport: Enable waypoints"
 msgstr ""
 
-msgid "Create Stops from a GPX file"
+msgid "Public Transport: Edit waypoint name"
 msgstr ""
 
-msgid "Select GPX file"
+msgid "rail"
+msgstr "ЖП"
+
+msgid "Can''t parse a time from this string."
 msgstr ""
 
-msgid "The GPX file contained no tracks or waypoints."
+msgid "Invalid value"
+msgstr "Невалидна стойност"
+
+msgid "Create Stops from GTFS"
 msgstr ""
 
-msgid "Create Stops from GPX"
+msgid "GTFS-Stops"
+msgstr "GTFS-Stops"
+
+msgid "Type of stops to add"
 msgstr ""
 
-msgid "Tracks in this GPX file:"
+msgid "Time on your GPS device"
 msgstr ""
 
-msgid "Detach"
+msgid "HH:MM:SS.sss"
+msgstr "HH:MM:SS.sss"
+
+msgid "Time on your stopwatch"
 msgstr ""
 
-msgid "implicit"
+msgid "Time window"
 msgstr ""
 
-msgid ""
-"The GPX file doesn''t contain valid trackpoints. Please use a GPX file that "
-"has trackpoints."
+msgid "seconds"
+msgstr "секунди"
+
+msgid "Move Threshold"
 msgstr ""
 
-msgid "GPX File Trouble"
+msgid "Catch"
 msgstr ""
 
-msgid "unnamed"
-msgstr "неименуван"
+msgid "Join"
+msgstr "Присъедини"
 
-msgid "Public Transport: Add track stop"
+msgid "Create Stops from GPX"
 msgstr ""
 
-msgid "Public Transport: Delete track stop"
+msgid "Tracks in this GPX file:"
 msgstr ""
 
-msgid "Public Transport: Detach track stop list"
+msgid "Detach"
 msgstr ""
 
-msgid "Public Transport: Edit track stop list"
+msgid "implicit"
 msgstr ""
 
-msgid "Public Transport: Relocate nodes in track stoplist"
+msgid "State"
+msgstr "Област/Щат"
+
+msgid "[incomplete]"
 msgstr ""
 
-msgid "Public Transport: sort track stop list"
+msgid "[empty way]"
 msgstr ""
 
-msgid "Public Transport: Suggest stops"
+msgid "[gap]"
 msgstr ""
 
 msgid "Stopname"
 msgstr ""
 
-msgid "Public Transport: Detach waypoints"
-msgstr ""
+msgid " [ID] {0}"
+msgstr " [ID] {0}"
 
-msgid "Public Transport: Disable waypoints"
+msgid ""
+"The GPX file doesn''t contain valid trackpoints. Please use a GPX file that "
+"has trackpoints."
 msgstr ""
 
-msgid "Public Transport: Enable waypoints"
+msgid "GPX File Trouble"
 msgstr ""
 
-msgid "Public Transport: Edit waypoint name"
-msgstr ""
+msgid "unnamed"
+msgstr "неименуван"
 
 msgid "Distance between stops"
 msgstr ""
@@ -34056,6 +34133,9 @@ msgstr "Стартира редактора за маркери"
 msgid "JOSM Tag Editor Plugin"
 msgstr "JOSM Редактор за маркери"
 
+msgid "Presets"
+msgstr "Шаблони"
+
 msgid "Abort tag editing and close dialog"
 msgstr ""
 
@@ -35985,6 +36065,26 @@ msgid_plural "Overwrite ''{0}'' tags {1} from {2} with new value ''{3}''?"
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Download from Sophox API"
+msgstr ""
+
+msgid ""
+"Find places of education at least 2km, and at most 3km from the center of "
+"the selection"
+msgstr ""
+
+msgid "Show/hide Sophox snippet list"
+msgstr ""
+
+msgid "help"
+msgstr ""
+
+msgid "Server: "
+msgstr ""
+
+msgid "Wikidata+OSM server"
+msgstr ""
+
 msgid "Search Wikidata items"
 msgstr ""
 
@@ -36058,26 +36158,6 @@ msgid ""
 "objects"
 msgstr ""
 
-msgid "Download from Wikosm API"
-msgstr ""
-
-msgid ""
-"Find places of education at least 2km, and at most 3km from the center of "
-"the selection"
-msgstr ""
-
-msgid "Show/hide Wikosm snippet list"
-msgstr ""
-
-msgid "help"
-msgstr ""
-
-msgid "Server: "
-msgstr ""
-
-msgid "Wikidata+OSM server"
-msgstr ""
-
 msgid "The Ultimate WMS Super-speed Turbo Challenge II"
 msgstr ""
 
diff --git a/i18n/po/bn.po b/i18n/po/bn.po
index 72de073..76f057e 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-10-30 03:38+0100\n"
+"POT-Creation-Date: 2017-11-26 00:06+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-10-30 04:37+0000\n"
-"X-Generator: Launchpad (build 18493)\n"
+"X-Launchpad-Export-Date: 2017-11-26 04:37+0000\n"
+"X-Generator: Launchpad (build 18509)\n"
 "Language: bn\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -424,12 +424,15 @@ msgstr ""
 msgid "Delete the active layer. Does not delete the associated file."
 msgstr ""
 
-msgid "Toggle dialogs panel"
+msgid "Dialogs panel"
 msgstr ""
 
 msgid "Toggle dialogs panel, maximize mapview"
 msgstr ""
 
+msgid "Toggle dialogs panel"
+msgstr ""
+
 msgid "Distribute Nodes"
 msgstr ""
 
@@ -6491,6 +6494,9 @@ msgstr ""
 msgid "Coordinates (projected): "
 msgstr ""
 
+msgid "UTM Zone"
+msgstr ""
+
 msgid "Part of: "
 msgstr ""
 
@@ -8789,6 +8795,11 @@ msgstr ""
 msgid "Check \"Save\" to save the layer to the file specified on the left."
 msgstr ""
 
+msgid ""
+"A background upload is already in progress. Kindly wait for it to finish "
+"before uploading new changes"
+msgstr ""
+
 msgid "I would like someone to review my edits."
 msgstr ""
 
@@ -9897,6 +9908,9 @@ msgstr ""
 msgid "Save Layer"
 msgstr ""
 
+msgid "Trying to set a read only data layer as edit layer"
+msgstr ""
+
 msgid "{0} note"
 msgid_plural "{0} notes"
 msgstr[0] ""
@@ -10727,11 +10741,6 @@ msgstr ""
 msgid "Failed to parse Mappaint styles from ''{0}''. Error was: {1}"
 msgstr ""
 
-msgid ""
-"Detected deprecated ''{0}'' in ''{1}'' which will be removed shortly. Use "
-"''{2}'' instead."
-msgstr ""
-
 msgid "Failed to locate image ''{0}''"
 msgstr ""
 
@@ -11896,6 +11905,9 @@ msgstr ""
 msgid "Show object ID in selection lists"
 msgstr ""
 
+msgid "Show node coordinates in selection lists"
+msgstr ""
+
 msgid "Show localized name in selection lists"
 msgstr ""
 
@@ -12652,9 +12664,6 @@ msgstr ""
 msgid "UTM"
 msgstr ""
 
-msgid "UTM Zone"
-msgstr ""
-
 msgid "North"
 msgstr ""
 
@@ -13122,9 +13131,6 @@ msgstr ""
 msgid "Error parsing {0}: "
 msgstr ""
 
-msgid "Presets"
-msgstr ""
-
 msgid "Search for objects by preset..."
 msgstr ""
 
@@ -15666,6 +15672,18 @@ msgstr ""
 msgid "korean"
 msgstr ""
 
+msgid "donut"
+msgstr ""
+
+msgid "mediterranean"
+msgstr ""
+
+msgid "friture"
+msgstr ""
+
+msgid "crepe"
+msgstr ""
+
 msgid "Internet access"
 msgstr ""
 
@@ -18508,7 +18526,16 @@ msgstr ""
 msgid "Tents allowed"
 msgstr ""
 
-msgid "Camping Site"
+msgid "Campsite"
+msgstr ""
+
+msgid "Caravans allowed"
+msgstr ""
+
+msgid "Backcountry"
+msgstr ""
+
+msgid "Group only access"
 msgstr ""
 
 msgid "Food+Drinks"
@@ -23337,6 +23364,14 @@ msgid ""
 "resolution or better, and refreshed more frequently with ongoing updates."
 msgstr ""
 
+msgid "DigitalGlobe Premium Imagery Vintage"
+msgstr ""
+
+msgid ""
+"Imagery boundaries and capture dates. Labels appear at zoom level 14 and "
+"higher."
+msgstr ""
+
 msgid "DigitalGlobe Standard Imagery"
 msgstr ""
 
@@ -23346,6 +23381,9 @@ msgid ""
 "Landsat. Average age is 2.31 years, with some areas updated 2x per year."
 msgstr ""
 
+msgid "DigitalGlobe Standard Imagery Vintage"
+msgstr ""
+
 msgid "Esri World Imagery"
 msgstr ""
 
@@ -23409,6 +23447,12 @@ msgstr ""
 msgid "Strava cycling and running heatmap"
 msgstr ""
 
+msgid "Strava water sports heatmap"
+msgstr ""
+
+msgid "Strava winter sports heatmap"
+msgstr ""
+
 msgid "Locator Overlay"
 msgstr ""
 
@@ -23813,6 +23857,9 @@ msgstr ""
 msgid "SPW(allonie) most recent aerial imagery"
 msgstr ""
 
+msgid "SPW(allonie) 2016 aerial imagery"
+msgstr ""
+
 msgid "SPW(allonie) 2015 aerial imagery"
 msgstr ""
 
@@ -23858,6 +23905,14 @@ msgstr ""
 msgid "Addresses data from IBGE"
 msgstr ""
 
+msgid "Street names IBGE Salvador-BA"
+msgstr ""
+
+msgid ""
+"Streets geometry and names of Salvador, Bahia. Source: Faces de Logradouro - "
+"IBGE."
+msgstr ""
+
 msgid "Rio Mosaic 2013"
 msgstr ""
 
@@ -24588,6 +24643,9 @@ msgstr ""
 msgid "Japan GSI ortho Imagery"
 msgstr ""
 
+msgid "Japan GSI Standard Map"
+msgstr ""
+
 msgid "imagico.de OSM images for mapping: Aral Sea (low water level)"
 msgstr ""
 
@@ -24617,7 +24675,7 @@ msgstr ""
 msgid "20cm ortho - Latvia - Coastline"
 msgstr ""
 
-msgid "1.cikla ortofotokarte - Latvia"
+msgid "Orthophoto 1st cycle (1994-1999) - Latvia"
 msgstr ""
 
 msgid "ORT10LT (Lithuania)"
@@ -24626,6 +24684,9 @@ msgstr ""
 msgid "geoportail.lu all layers"
 msgstr ""
 
+msgid "geoportail.lu ortho latest"
+msgstr ""
+
 msgid "geoportail.lu ortho 2016"
 msgstr ""
 
@@ -26116,6 +26177,9 @@ msgstr ""
 msgid "{0} on a node. Should be used on a way."
 msgstr ""
 
+msgid "{0} on a node. Should be used on a way or relation."
+msgstr ""
+
 msgid "{0} on a node. Should be drawn as an area."
 msgstr ""
 
@@ -26343,6 +26407,9 @@ msgstr ""
 msgid "Nodes duplicating parent way tags"
 msgstr ""
 
+msgid "{0} together with {1} and {2}. Remove {0}."
+msgstr ""
+
 msgid ""
 "wikipedia tag has no language given, use ''wikipedia''=''language:page "
 "title''"
@@ -27107,6 +27174,21 @@ msgstr ""
 msgid "Importing..."
 msgstr ""
 
+msgid "Shape is started incorrectly"
+msgstr ""
+
+msgid "Can''t load SVG diagram"
+msgstr ""
+
+msgid "Can''t find root SVG element"
+msgstr ""
+
+msgid "Import primitives"
+msgstr ""
+
+msgid "Cannot find configuration file!"
+msgstr ""
+
 msgid "DXF files [ImportDxf plugin] (*.dxf)"
 msgstr ""
 
@@ -27746,6 +27828,9 @@ msgstr ""
 msgid "Download mode"
 msgstr ""
 
+msgid "Number of images to be pre-fetched (forwards and backwards)"
+msgstr ""
+
 msgid "You are logged in as ''{0}''."
 msgstr ""
 
@@ -27956,8 +28041,17 @@ msgid "only when manually requested"
 msgstr ""
 
 msgid ""
-"The downloaded OSM area is too big. Download mode has been changed to OSM "
-"area until the layer is restarted."
+"The Mapillary layer has stopped downloading images, because the requested "
+"area is too big!"
+msgstr ""
+
+msgid ""
+"To solve this problem, you could zoom in and load a smaller area of the map."
+msgstr ""
+
+msgid ""
+"To solve this problem, you could switch to download mode ''{0}'' and load "
+"Mapillary images for a smaller portion of the map."
 msgstr ""
 
 msgid "Downloading"
@@ -31269,19 +31363,6 @@ msgstr ""
 msgid "Merge Overlap (combine)"
 msgstr ""
 
-msgid ""
-"<html>A role based relation membership was copied to all new ways.<br>You "
-"should verify this and correct it when necessary.</html>"
-msgstr ""
-
-msgid ""
-"<html>A relation membership was copied to all new ways.<br>You should verify "
-"this and correct it when necessary.</html>"
-msgstr ""
-
-msgid "Split way"
-msgstr ""
-
 msgid "Michigan Left"
 msgstr ""
 
@@ -32736,254 +32817,254 @@ msgstr ""
 msgid "PT: Route passes a oneway road in the wrong direction"
 msgstr ""
 
-msgid "moved"
+msgid "Create Stops from GTFS ..."
 msgstr ""
 
-msgid "rail"
+msgid "Create Stops from a GTFS file"
 msgstr ""
 
-msgid "Can''t parse a time from this string."
+msgid "Select GTFS file (stops.txt)"
 msgstr ""
 
-msgid "Invalid value"
+msgid "File \"{0}\" does not exist"
 msgstr ""
 
-msgid "added"
+msgid "IOException \"{0}\" occurred"
 msgstr ""
 
-msgid "Public Transport: Enable GTFSStops"
+msgid ""
+"There exists no dataset. Try to download data from the server or open an OSM "
+"file."
 msgstr ""
 
-msgid "Public Transport: Catch GTFS stops"
+msgid "No data found"
 msgstr ""
 
-msgid "skipped"
+msgid "The GTFS file was empty."
 msgstr ""
 
-msgid "Public Transport: Disable GTFS"
+msgid "[ID] {0}"
 msgstr ""
 
-msgid "Create Stops from GTFS ..."
+msgid "Route patterns ..."
 msgstr ""
 
-msgid "Create Stops from a GTFS file"
+msgid "Edit Route patterns for public transport"
 msgstr ""
 
-msgid "Select GTFS file (stops.txt)"
+msgid "Route Patterns"
 msgstr ""
 
-msgid "File \"{0}\" does not exist"
+msgid "Overview"
 msgstr ""
 
-msgid "IOException \"{0}\" occurred"
+msgid "Itinerary"
 msgstr ""
 
-msgid ""
-"There exists no dataset. Try to download data from the server or open an OSM "
-"file."
+msgid "Stops"
 msgstr ""
 
-msgid "No data found"
+msgid "Meta"
 msgstr ""
 
-msgid "The GTFS file was empty."
+msgid "Existing route patterns:"
 msgstr ""
 
-msgid "Create Stops from GTFS"
+msgid "Reflect"
 msgstr ""
 
-msgid "GTFS-Stops"
+msgid "Required tags:"
 msgstr ""
 
-msgid "Type of stops to add"
+msgid "Common tags:"
 msgstr ""
 
-msgid "Time on your GPS device"
+msgid "Additional tags:"
 msgstr ""
 
-msgid "HH:MM:SS.sss"
+msgid "Add a new Tag"
 msgstr ""
 
-msgid "Time on your stopwatch"
+msgid "Name/Id"
 msgstr ""
 
-msgid "Time window"
+msgid "Find"
 msgstr ""
 
-msgid "seconds"
+msgid "Show"
 msgstr ""
 
-msgid "Move Threshold"
+msgid "Mark"
 msgstr ""
 
-msgid "Suggest Stops"
+msgid "Ref"
 msgstr ""
 
-msgid "Find"
+msgid "Stops are possible on the"
 msgstr ""
 
-msgid "Show"
+msgid "right hand side"
 msgstr ""
 
-msgid "Mark"
+msgid "left hand side"
 msgstr ""
 
-msgid "Catch"
+msgid "Maximum distance from route"
 msgstr ""
 
-msgid "Join"
+msgid "Suggest Stops"
 msgstr ""
 
-msgid "Public Transport: Join GTFS stops"
+msgid "Create Stops from GPX ..."
 msgstr ""
 
-msgid "State"
+msgid "Create Stops from a GPX file"
 msgstr ""
 
-msgid "[incomplete]"
+msgid "Select GPX file"
 msgstr ""
 
-msgid "[empty way]"
+msgid "The GPX file contained no tracks or waypoints."
 msgstr ""
 
-msgid "[ID] {0}"
+msgid "moved"
 msgstr ""
 
-msgid "[gap]"
+msgid "added"
 msgstr ""
 
-msgid "Route patterns ..."
+msgid "Public Transport: Enable GTFSStops"
 msgstr ""
 
-msgid "Edit Route patterns for public transport"
+msgid "Public Transport: Catch GTFS stops"
 msgstr ""
 
-msgid "Route Patterns"
+msgid "skipped"
 msgstr ""
 
-msgid "Overview"
+msgid "Public Transport: Disable GTFS"
 msgstr ""
 
-msgid "Itinerary"
+msgid "Public Transport: Join GTFS stops"
 msgstr ""
 
-msgid "Stops"
+msgid "Public Transport: Change stop type"
 msgstr ""
 
-msgid "Meta"
+msgid "Public Transport: Add track stop"
 msgstr ""
 
-msgid "Existing route patterns:"
+msgid "Public Transport: Delete track stop"
 msgstr ""
 
-msgid "Reflect"
+msgid "Public Transport: Detach track stop list"
 msgstr ""
 
-msgid "Required tags:"
+msgid "Public Transport: Edit track stop list"
 msgstr ""
 
-msgid "Common tags:"
+msgid "Public Transport: Relocate nodes in track stoplist"
 msgstr ""
 
-msgid "Additional tags:"
+msgid "Public Transport: sort track stop list"
 msgstr ""
 
-msgid "Add a new Tag"
+msgid "Public Transport: Suggest stops"
 msgstr ""
 
-msgid "Name/Id"
+msgid "Public Transport: Detach waypoints"
 msgstr ""
 
-msgid "Ref"
+msgid "Public Transport: Disable waypoints"
 msgstr ""
 
-msgid "Stops are possible on the"
+msgid "Public Transport: Enable waypoints"
 msgstr ""
 
-msgid "right hand side"
+msgid "Public Transport: Edit waypoint name"
 msgstr ""
 
-msgid "left hand side"
+msgid "rail"
 msgstr ""
 
-msgid "Maximum distance from route"
+msgid "Can''t parse a time from this string."
 msgstr ""
 
-msgid " [ID] {0}"
+msgid "Invalid value"
 msgstr ""
 
-msgid "Public Transport: Change stop type"
+msgid "Create Stops from GTFS"
 msgstr ""
 
-msgid "Create Stops from GPX ..."
+msgid "GTFS-Stops"
 msgstr ""
 
-msgid "Create Stops from a GPX file"
+msgid "Type of stops to add"
 msgstr ""
 
-msgid "Select GPX file"
+msgid "Time on your GPS device"
 msgstr ""
 
-msgid "The GPX file contained no tracks or waypoints."
+msgid "HH:MM:SS.sss"
 msgstr ""
 
-msgid "Create Stops from GPX"
+msgid "Time on your stopwatch"
 msgstr ""
 
-msgid "Tracks in this GPX file:"
+msgid "Time window"
 msgstr ""
 
-msgid "Detach"
+msgid "seconds"
 msgstr ""
 
-msgid "implicit"
+msgid "Move Threshold"
 msgstr ""
 
-msgid ""
-"The GPX file doesn''t contain valid trackpoints. Please use a GPX file that "
-"has trackpoints."
+msgid "Catch"
 msgstr ""
 
-msgid "GPX File Trouble"
+msgid "Join"
 msgstr ""
 
-msgid "unnamed"
+msgid "Create Stops from GPX"
 msgstr ""
 
-msgid "Public Transport: Add track stop"
+msgid "Tracks in this GPX file:"
 msgstr ""
 
-msgid "Public Transport: Delete track stop"
+msgid "Detach"
 msgstr ""
 
-msgid "Public Transport: Detach track stop list"
+msgid "implicit"
 msgstr ""
 
-msgid "Public Transport: Edit track stop list"
+msgid "State"
 msgstr ""
 
-msgid "Public Transport: Relocate nodes in track stoplist"
+msgid "[incomplete]"
 msgstr ""
 
-msgid "Public Transport: sort track stop list"
+msgid "[empty way]"
 msgstr ""
 
-msgid "Public Transport: Suggest stops"
+msgid "[gap]"
 msgstr ""
 
 msgid "Stopname"
 msgstr ""
 
-msgid "Public Transport: Detach waypoints"
+msgid " [ID] {0}"
 msgstr ""
 
-msgid "Public Transport: Disable waypoints"
+msgid ""
+"The GPX file doesn''t contain valid trackpoints. Please use a GPX file that "
+"has trackpoints."
 msgstr ""
 
-msgid "Public Transport: Enable waypoints"
+msgid "GPX File Trouble"
 msgstr ""
 
-msgid "Public Transport: Edit waypoint name"
+msgid "unnamed"
 msgstr ""
 
 msgid "Distance between stops"
@@ -33712,6 +33793,9 @@ msgstr ""
 msgid "JOSM Tag Editor Plugin"
 msgstr ""
 
+msgid "Presets"
+msgstr ""
+
 msgid "Abort tag editing and close dialog"
 msgstr ""
 
@@ -35637,6 +35721,26 @@ msgid_plural "Overwrite ''{0}'' tags {1} from {2} with new value ''{3}''?"
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Download from Sophox API"
+msgstr ""
+
+msgid ""
+"Find places of education at least 2km, and at most 3km from the center of "
+"the selection"
+msgstr ""
+
+msgid "Show/hide Sophox snippet list"
+msgstr ""
+
+msgid "help"
+msgstr ""
+
+msgid "Server: "
+msgstr ""
+
+msgid "Wikidata+OSM server"
+msgstr ""
+
 msgid "Search Wikidata items"
 msgstr ""
 
@@ -35710,26 +35814,6 @@ msgid ""
 "objects"
 msgstr ""
 
-msgid "Download from Wikosm API"
-msgstr ""
-
-msgid ""
-"Find places of education at least 2km, and at most 3km from the center of "
-"the selection"
-msgstr ""
-
-msgid "Show/hide Wikosm snippet list"
-msgstr ""
-
-msgid "help"
-msgstr ""
-
-msgid "Server: "
-msgstr ""
-
-msgid "Wikidata+OSM server"
-msgstr ""
-
 msgid "The Ultimate WMS Super-speed Turbo Challenge II"
 msgstr ""
 
diff --git a/i18n/po/br.po b/i18n/po/br.po
index bf3d380..52b6b61 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-10-30 03:38+0100\n"
+"POT-Creation-Date: 2017-11-26 00:06+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-10-30 04:38+0000\n"
-"X-Generator: Launchpad (build 18493)\n"
+"X-Launchpad-Export-Date: 2017-11-26 04:38+0000\n"
+"X-Generator: Launchpad (build 18509)\n"
 "Language: br\n"
 
 msgid "License"
@@ -421,12 +421,15 @@ msgstr ""
 msgid "Delete the active layer. Does not delete the associated file."
 msgstr ""
 
-msgid "Toggle dialogs panel"
+msgid "Dialogs panel"
 msgstr ""
 
 msgid "Toggle dialogs panel, maximize mapview"
 msgstr ""
 
+msgid "Toggle dialogs panel"
+msgstr ""
+
 msgid "Distribute Nodes"
 msgstr ""
 
@@ -6488,6 +6491,9 @@ msgstr ""
 msgid "Coordinates (projected): "
 msgstr ""
 
+msgid "UTM Zone"
+msgstr ""
+
 msgid "Part of: "
 msgstr ""
 
@@ -8786,6 +8792,11 @@ msgstr ""
 msgid "Check \"Save\" to save the layer to the file specified on the left."
 msgstr ""
 
+msgid ""
+"A background upload is already in progress. Kindly wait for it to finish "
+"before uploading new changes"
+msgstr ""
+
 msgid "I would like someone to review my edits."
 msgstr ""
 
@@ -9894,6 +9905,9 @@ msgstr ""
 msgid "Save Layer"
 msgstr ""
 
+msgid "Trying to set a read only data layer as edit layer"
+msgstr ""
+
 msgid "{0} note"
 msgid_plural "{0} notes"
 msgstr[0] ""
@@ -10724,11 +10738,6 @@ msgstr ""
 msgid "Failed to parse Mappaint styles from ''{0}''. Error was: {1}"
 msgstr ""
 
-msgid ""
-"Detected deprecated ''{0}'' in ''{1}'' which will be removed shortly. Use "
-"''{2}'' instead."
-msgstr ""
-
 msgid "Failed to locate image ''{0}''"
 msgstr ""
 
@@ -11893,6 +11902,9 @@ msgstr ""
 msgid "Show object ID in selection lists"
 msgstr ""
 
+msgid "Show node coordinates in selection lists"
+msgstr ""
+
 msgid "Show localized name in selection lists"
 msgstr ""
 
@@ -12649,9 +12661,6 @@ msgstr ""
 msgid "UTM"
 msgstr ""
 
-msgid "UTM Zone"
-msgstr ""
-
 msgid "North"
 msgstr ""
 
@@ -13119,9 +13128,6 @@ msgstr ""
 msgid "Error parsing {0}: "
 msgstr ""
 
-msgid "Presets"
-msgstr ""
-
 msgid "Search for objects by preset..."
 msgstr ""
 
@@ -15663,6 +15669,18 @@ msgstr ""
 msgid "korean"
 msgstr ""
 
+msgid "donut"
+msgstr ""
+
+msgid "mediterranean"
+msgstr ""
+
+msgid "friture"
+msgstr ""
+
+msgid "crepe"
+msgstr ""
+
 msgid "Internet access"
 msgstr ""
 
@@ -18505,7 +18523,16 @@ msgstr ""
 msgid "Tents allowed"
 msgstr ""
 
-msgid "Camping Site"
+msgid "Campsite"
+msgstr ""
+
+msgid "Caravans allowed"
+msgstr ""
+
+msgid "Backcountry"
+msgstr ""
+
+msgid "Group only access"
 msgstr ""
 
 msgid "Food+Drinks"
@@ -23334,6 +23361,14 @@ msgid ""
 "resolution or better, and refreshed more frequently with ongoing updates."
 msgstr ""
 
+msgid "DigitalGlobe Premium Imagery Vintage"
+msgstr ""
+
+msgid ""
+"Imagery boundaries and capture dates. Labels appear at zoom level 14 and "
+"higher."
+msgstr ""
+
 msgid "DigitalGlobe Standard Imagery"
 msgstr ""
 
@@ -23343,6 +23378,9 @@ msgid ""
 "Landsat. Average age is 2.31 years, with some areas updated 2x per year."
 msgstr ""
 
+msgid "DigitalGlobe Standard Imagery Vintage"
+msgstr ""
+
 msgid "Esri World Imagery"
 msgstr ""
 
@@ -23406,6 +23444,12 @@ msgstr ""
 msgid "Strava cycling and running heatmap"
 msgstr ""
 
+msgid "Strava water sports heatmap"
+msgstr ""
+
+msgid "Strava winter sports heatmap"
+msgstr ""
+
 msgid "Locator Overlay"
 msgstr ""
 
@@ -23810,6 +23854,9 @@ msgstr ""
 msgid "SPW(allonie) most recent aerial imagery"
 msgstr ""
 
+msgid "SPW(allonie) 2016 aerial imagery"
+msgstr ""
+
 msgid "SPW(allonie) 2015 aerial imagery"
 msgstr ""
 
@@ -23855,6 +23902,14 @@ msgstr ""
 msgid "Addresses data from IBGE"
 msgstr ""
 
+msgid "Street names IBGE Salvador-BA"
+msgstr ""
+
+msgid ""
+"Streets geometry and names of Salvador, Bahia. Source: Faces de Logradouro - "
+"IBGE."
+msgstr ""
+
 msgid "Rio Mosaic 2013"
 msgstr ""
 
@@ -24585,6 +24640,9 @@ msgstr ""
 msgid "Japan GSI ortho Imagery"
 msgstr ""
 
+msgid "Japan GSI Standard Map"
+msgstr ""
+
 msgid "imagico.de OSM images for mapping: Aral Sea (low water level)"
 msgstr ""
 
@@ -24614,7 +24672,7 @@ msgstr ""
 msgid "20cm ortho - Latvia - Coastline"
 msgstr ""
 
-msgid "1.cikla ortofotokarte - Latvia"
+msgid "Orthophoto 1st cycle (1994-1999) - Latvia"
 msgstr ""
 
 msgid "ORT10LT (Lithuania)"
@@ -24623,6 +24681,9 @@ msgstr ""
 msgid "geoportail.lu all layers"
 msgstr ""
 
+msgid "geoportail.lu ortho latest"
+msgstr ""
+
 msgid "geoportail.lu ortho 2016"
 msgstr ""
 
@@ -26113,6 +26174,9 @@ msgstr ""
 msgid "{0} on a node. Should be used on a way."
 msgstr ""
 
+msgid "{0} on a node. Should be used on a way or relation."
+msgstr ""
+
 msgid "{0} on a node. Should be drawn as an area."
 msgstr ""
 
@@ -26340,6 +26404,9 @@ msgstr ""
 msgid "Nodes duplicating parent way tags"
 msgstr ""
 
+msgid "{0} together with {1} and {2}. Remove {0}."
+msgstr ""
+
 msgid ""
 "wikipedia tag has no language given, use ''wikipedia''=''language:page "
 "title''"
@@ -27104,6 +27171,21 @@ msgstr ""
 msgid "Importing..."
 msgstr ""
 
+msgid "Shape is started incorrectly"
+msgstr ""
+
+msgid "Can''t load SVG diagram"
+msgstr ""
+
+msgid "Can''t find root SVG element"
+msgstr ""
+
+msgid "Import primitives"
+msgstr ""
+
+msgid "Cannot find configuration file!"
+msgstr ""
+
 msgid "DXF files [ImportDxf plugin] (*.dxf)"
 msgstr ""
 
@@ -27743,6 +27825,9 @@ msgstr ""
 msgid "Download mode"
 msgstr ""
 
+msgid "Number of images to be pre-fetched (forwards and backwards)"
+msgstr ""
+
 msgid "You are logged in as ''{0}''."
 msgstr ""
 
@@ -27953,8 +28038,17 @@ msgid "only when manually requested"
 msgstr ""
 
 msgid ""
-"The downloaded OSM area is too big. Download mode has been changed to OSM "
-"area until the layer is restarted."
+"The Mapillary layer has stopped downloading images, because the requested "
+"area is too big!"
+msgstr ""
+
+msgid ""
+"To solve this problem, you could zoom in and load a smaller area of the map."
+msgstr ""
+
+msgid ""
+"To solve this problem, you could switch to download mode ''{0}'' and load "
+"Mapillary images for a smaller portion of the map."
 msgstr ""
 
 msgid "Downloading"
@@ -31266,19 +31360,6 @@ msgstr ""
 msgid "Merge Overlap (combine)"
 msgstr ""
 
-msgid ""
-"<html>A role based relation membership was copied to all new ways.<br>You "
-"should verify this and correct it when necessary.</html>"
-msgstr ""
-
-msgid ""
-"<html>A relation membership was copied to all new ways.<br>You should verify "
-"this and correct it when necessary.</html>"
-msgstr ""
-
-msgid "Split way"
-msgstr ""
-
 msgid "Michigan Left"
 msgstr ""
 
@@ -32733,254 +32814,254 @@ msgstr ""
 msgid "PT: Route passes a oneway road in the wrong direction"
 msgstr ""
 
-msgid "moved"
+msgid "Create Stops from GTFS ..."
 msgstr ""
 
-msgid "rail"
+msgid "Create Stops from a GTFS file"
 msgstr ""
 
-msgid "Can''t parse a time from this string."
+msgid "Select GTFS file (stops.txt)"
 msgstr ""
 
-msgid "Invalid value"
+msgid "File \"{0}\" does not exist"
 msgstr ""
 
-msgid "added"
+msgid "IOException \"{0}\" occurred"
 msgstr ""
 
-msgid "Public Transport: Enable GTFSStops"
+msgid ""
+"There exists no dataset. Try to download data from the server or open an OSM "
+"file."
 msgstr ""
 
-msgid "Public Transport: Catch GTFS stops"
+msgid "No data found"
 msgstr ""
 
-msgid "skipped"
+msgid "The GTFS file was empty."
 msgstr ""
 
-msgid "Public Transport: Disable GTFS"
+msgid "[ID] {0}"
 msgstr ""
 
-msgid "Create Stops from GTFS ..."
+msgid "Route patterns ..."
 msgstr ""
 
-msgid "Create Stops from a GTFS file"
+msgid "Edit Route patterns for public transport"
 msgstr ""
 
-msgid "Select GTFS file (stops.txt)"
+msgid "Route Patterns"
 msgstr ""
 
-msgid "File \"{0}\" does not exist"
+msgid "Overview"
 msgstr ""
 
-msgid "IOException \"{0}\" occurred"
+msgid "Itinerary"
 msgstr ""
 
-msgid ""
-"There exists no dataset. Try to download data from the server or open an OSM "
-"file."
+msgid "Stops"
 msgstr ""
 
-msgid "No data found"
+msgid "Meta"
 msgstr ""
 
-msgid "The GTFS file was empty."
+msgid "Existing route patterns:"
 msgstr ""
 
-msgid "Create Stops from GTFS"
+msgid "Reflect"
 msgstr ""
 
-msgid "GTFS-Stops"
+msgid "Required tags:"
 msgstr ""
 
-msgid "Type of stops to add"
+msgid "Common tags:"
 msgstr ""
 
-msgid "Time on your GPS device"
+msgid "Additional tags:"
 msgstr ""
 
-msgid "HH:MM:SS.sss"
+msgid "Add a new Tag"
 msgstr ""
 
-msgid "Time on your stopwatch"
+msgid "Name/Id"
 msgstr ""
 
-msgid "Time window"
+msgid "Find"
 msgstr ""
 
-msgid "seconds"
+msgid "Show"
 msgstr ""
 
-msgid "Move Threshold"
+msgid "Mark"
 msgstr ""
 
-msgid "Suggest Stops"
+msgid "Ref"
 msgstr ""
 
-msgid "Find"
+msgid "Stops are possible on the"
 msgstr ""
 
-msgid "Show"
+msgid "right hand side"
 msgstr ""
 
-msgid "Mark"
+msgid "left hand side"
 msgstr ""
 
-msgid "Catch"
+msgid "Maximum distance from route"
 msgstr ""
 
-msgid "Join"
+msgid "Suggest Stops"
 msgstr ""
 
-msgid "Public Transport: Join GTFS stops"
+msgid "Create Stops from GPX ..."
 msgstr ""
 
-msgid "State"
+msgid "Create Stops from a GPX file"
 msgstr ""
 
-msgid "[incomplete]"
+msgid "Select GPX file"
 msgstr ""
 
-msgid "[empty way]"
+msgid "The GPX file contained no tracks or waypoints."
 msgstr ""
 
-msgid "[ID] {0}"
+msgid "moved"
 msgstr ""
 
-msgid "[gap]"
+msgid "added"
 msgstr ""
 
-msgid "Route patterns ..."
+msgid "Public Transport: Enable GTFSStops"
 msgstr ""
 
-msgid "Edit Route patterns for public transport"
+msgid "Public Transport: Catch GTFS stops"
 msgstr ""
 
-msgid "Route Patterns"
+msgid "skipped"
 msgstr ""
 
-msgid "Overview"
+msgid "Public Transport: Disable GTFS"
 msgstr ""
 
-msgid "Itinerary"
+msgid "Public Transport: Join GTFS stops"
 msgstr ""
 
-msgid "Stops"
+msgid "Public Transport: Change stop type"
 msgstr ""
 
-msgid "Meta"
+msgid "Public Transport: Add track stop"
 msgstr ""
 
-msgid "Existing route patterns:"
+msgid "Public Transport: Delete track stop"
 msgstr ""
 
-msgid "Reflect"
+msgid "Public Transport: Detach track stop list"
 msgstr ""
 
-msgid "Required tags:"
+msgid "Public Transport: Edit track stop list"
 msgstr ""
 
-msgid "Common tags:"
+msgid "Public Transport: Relocate nodes in track stoplist"
 msgstr ""
 
-msgid "Additional tags:"
+msgid "Public Transport: sort track stop list"
 msgstr ""
 
-msgid "Add a new Tag"
+msgid "Public Transport: Suggest stops"
 msgstr ""
 
-msgid "Name/Id"
+msgid "Public Transport: Detach waypoints"
 msgstr ""
 
-msgid "Ref"
+msgid "Public Transport: Disable waypoints"
 msgstr ""
 
-msgid "Stops are possible on the"
+msgid "Public Transport: Enable waypoints"
 msgstr ""
 
-msgid "right hand side"
+msgid "Public Transport: Edit waypoint name"
 msgstr ""
 
-msgid "left hand side"
+msgid "rail"
 msgstr ""
 
-msgid "Maximum distance from route"
+msgid "Can''t parse a time from this string."
 msgstr ""
 
-msgid " [ID] {0}"
+msgid "Invalid value"
 msgstr ""
 
-msgid "Public Transport: Change stop type"
+msgid "Create Stops from GTFS"
 msgstr ""
 
-msgid "Create Stops from GPX ..."
+msgid "GTFS-Stops"
 msgstr ""
 
-msgid "Create Stops from a GPX file"
+msgid "Type of stops to add"
 msgstr ""
 
-msgid "Select GPX file"
+msgid "Time on your GPS device"
 msgstr ""
 
-msgid "The GPX file contained no tracks or waypoints."
+msgid "HH:MM:SS.sss"
 msgstr ""
 
-msgid "Create Stops from GPX"
+msgid "Time on your stopwatch"
 msgstr ""
 
-msgid "Tracks in this GPX file:"
+msgid "Time window"
 msgstr ""
 
-msgid "Detach"
+msgid "seconds"
 msgstr ""
 
-msgid "implicit"
+msgid "Move Threshold"
 msgstr ""
 
-msgid ""
-"The GPX file doesn''t contain valid trackpoints. Please use a GPX file that "
-"has trackpoints."
+msgid "Catch"
 msgstr ""
 
-msgid "GPX File Trouble"
+msgid "Join"
 msgstr ""
 
-msgid "unnamed"
+msgid "Create Stops from GPX"
 msgstr ""
 
-msgid "Public Transport: Add track stop"
+msgid "Tracks in this GPX file:"
 msgstr ""
 
-msgid "Public Transport: Delete track stop"
+msgid "Detach"
 msgstr ""
 
-msgid "Public Transport: Detach track stop list"
+msgid "implicit"
 msgstr ""
 
-msgid "Public Transport: Edit track stop list"
+msgid "State"
 msgstr ""
 
-msgid "Public Transport: Relocate nodes in track stoplist"
+msgid "[incomplete]"
 msgstr ""
 
-msgid "Public Transport: sort track stop list"
+msgid "[empty way]"
 msgstr ""
 
-msgid "Public Transport: Suggest stops"
+msgid "[gap]"
 msgstr ""
 
 msgid "Stopname"
 msgstr ""
 
-msgid "Public Transport: Detach waypoints"
+msgid " [ID] {0}"
 msgstr ""
 
-msgid "Public Transport: Disable waypoints"
+msgid ""
+"The GPX file doesn''t contain valid trackpoints. Please use a GPX file that "
+"has trackpoints."
 msgstr ""
 
-msgid "Public Transport: Enable waypoints"
+msgid "GPX File Trouble"
 msgstr ""
 
-msgid "Public Transport: Edit waypoint name"
+msgid "unnamed"
 msgstr ""
 
 msgid "Distance between stops"
@@ -33709,6 +33790,9 @@ msgstr ""
 msgid "JOSM Tag Editor Plugin"
 msgstr ""
 
+msgid "Presets"
+msgstr ""
+
 msgid "Abort tag editing and close dialog"
 msgstr ""
 
@@ -35634,6 +35718,26 @@ msgid_plural "Overwrite ''{0}'' tags {1} from {2} with new value ''{3}''?"
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Download from Sophox API"
+msgstr ""
+
+msgid ""
+"Find places of education at least 2km, and at most 3km from the center of "
+"the selection"
+msgstr ""
+
+msgid "Show/hide Sophox snippet list"
+msgstr ""
+
+msgid "help"
+msgstr ""
+
+msgid "Server: "
+msgstr ""
+
+msgid "Wikidata+OSM server"
+msgstr ""
+
 msgid "Search Wikidata items"
 msgstr ""
 
@@ -35707,26 +35811,6 @@ msgid ""
 "objects"
 msgstr ""
 
-msgid "Download from Wikosm API"
-msgstr ""
-
-msgid ""
-"Find places of education at least 2km, and at most 3km from the center of "
-"the selection"
-msgstr ""
-
-msgid "Show/hide Wikosm snippet list"
-msgstr ""
-
-msgid "help"
-msgstr ""
-
-msgid "Server: "
-msgstr ""
-
-msgid "Wikidata+OSM server"
-msgstr ""
-
 msgid "The Ultimate WMS Super-speed Turbo Challenge II"
 msgstr ""
 
diff --git a/i18n/po/bs.po b/i18n/po/bs.po
index 34f66da..79b6692 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-10-30 03:38+0100\n"
+"POT-Creation-Date: 2017-11-26 00:06+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-10-30 04:38+0000\n"
-"X-Generator: Launchpad (build 18493)\n"
+"X-Launchpad-Export-Date: 2017-11-26 04:38+0000\n"
+"X-Generator: Launchpad (build 18509)\n"
 "Language: bs\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -424,12 +424,15 @@ msgstr ""
 msgid "Delete the active layer. Does not delete the associated file."
 msgstr ""
 
-msgid "Toggle dialogs panel"
+msgid "Dialogs panel"
 msgstr ""
 
 msgid "Toggle dialogs panel, maximize mapview"
 msgstr ""
 
+msgid "Toggle dialogs panel"
+msgstr ""
+
 msgid "Distribute Nodes"
 msgstr ""
 
@@ -6491,6 +6494,9 @@ msgstr ""
 msgid "Coordinates (projected): "
 msgstr ""
 
+msgid "UTM Zone"
+msgstr ""
+
 msgid "Part of: "
 msgstr ""
 
@@ -8789,6 +8795,11 @@ msgstr ""
 msgid "Check \"Save\" to save the layer to the file specified on the left."
 msgstr ""
 
+msgid ""
+"A background upload is already in progress. Kindly wait for it to finish "
+"before uploading new changes"
+msgstr ""
+
 msgid "I would like someone to review my edits."
 msgstr ""
 
@@ -9897,6 +9908,9 @@ msgstr ""
 msgid "Save Layer"
 msgstr ""
 
+msgid "Trying to set a read only data layer as edit layer"
+msgstr ""
+
 msgid "{0} note"
 msgid_plural "{0} notes"
 msgstr[0] ""
@@ -10727,11 +10741,6 @@ msgstr ""
 msgid "Failed to parse Mappaint styles from ''{0}''. Error was: {1}"
 msgstr ""
 
-msgid ""
-"Detected deprecated ''{0}'' in ''{1}'' which will be removed shortly. Use "
-"''{2}'' instead."
-msgstr ""
-
 msgid "Failed to locate image ''{0}''"
 msgstr ""
 
@@ -11896,6 +11905,9 @@ msgstr ""
 msgid "Show object ID in selection lists"
 msgstr ""
 
+msgid "Show node coordinates in selection lists"
+msgstr ""
+
 msgid "Show localized name in selection lists"
 msgstr ""
 
@@ -12652,9 +12664,6 @@ msgstr ""
 msgid "UTM"
 msgstr ""
 
-msgid "UTM Zone"
-msgstr ""
-
 msgid "North"
 msgstr ""
 
@@ -13122,9 +13131,6 @@ msgstr ""
 msgid "Error parsing {0}: "
 msgstr ""
 
-msgid "Presets"
-msgstr ""
-
 msgid "Search for objects by preset..."
 msgstr ""
 
@@ -15666,6 +15672,18 @@ msgstr ""
 msgid "korean"
 msgstr ""
 
+msgid "donut"
+msgstr ""
+
+msgid "mediterranean"
+msgstr ""
+
+msgid "friture"
+msgstr ""
+
+msgid "crepe"
+msgstr ""
+
 msgid "Internet access"
 msgstr ""
 
@@ -18508,7 +18526,16 @@ msgstr ""
 msgid "Tents allowed"
 msgstr ""
 
-msgid "Camping Site"
+msgid "Campsite"
+msgstr ""
+
+msgid "Caravans allowed"
+msgstr ""
+
+msgid "Backcountry"
+msgstr ""
+
+msgid "Group only access"
 msgstr ""
 
 msgid "Food+Drinks"
@@ -23337,6 +23364,14 @@ msgid ""
 "resolution or better, and refreshed more frequently with ongoing updates."
 msgstr ""
 
+msgid "DigitalGlobe Premium Imagery Vintage"
+msgstr ""
+
+msgid ""
+"Imagery boundaries and capture dates. Labels appear at zoom level 14 and "
+"higher."
+msgstr ""
+
 msgid "DigitalGlobe Standard Imagery"
 msgstr ""
 
@@ -23346,6 +23381,9 @@ msgid ""
 "Landsat. Average age is 2.31 years, with some areas updated 2x per year."
 msgstr ""
 
+msgid "DigitalGlobe Standard Imagery Vintage"
+msgstr ""
+
 msgid "Esri World Imagery"
 msgstr ""
 
@@ -23409,6 +23447,12 @@ msgstr ""
 msgid "Strava cycling and running heatmap"
 msgstr ""
 
+msgid "Strava water sports heatmap"
+msgstr ""
+
+msgid "Strava winter sports heatmap"
+msgstr ""
+
 msgid "Locator Overlay"
 msgstr ""
 
@@ -23813,6 +23857,9 @@ msgstr ""
 msgid "SPW(allonie) most recent aerial imagery"
 msgstr ""
 
+msgid "SPW(allonie) 2016 aerial imagery"
+msgstr ""
+
 msgid "SPW(allonie) 2015 aerial imagery"
 msgstr ""
 
@@ -23858,6 +23905,14 @@ msgstr ""
 msgid "Addresses data from IBGE"
 msgstr ""
 
+msgid "Street names IBGE Salvador-BA"
+msgstr ""
+
+msgid ""
+"Streets geometry and names of Salvador, Bahia. Source: Faces de Logradouro - "
+"IBGE."
+msgstr ""
+
 msgid "Rio Mosaic 2013"
 msgstr ""
 
@@ -24588,6 +24643,9 @@ msgstr ""
 msgid "Japan GSI ortho Imagery"
 msgstr ""
 
+msgid "Japan GSI Standard Map"
+msgstr ""
+
 msgid "imagico.de OSM images for mapping: Aral Sea (low water level)"
 msgstr ""
 
@@ -24617,7 +24675,7 @@ msgstr ""
 msgid "20cm ortho - Latvia - Coastline"
 msgstr ""
 
-msgid "1.cikla ortofotokarte - Latvia"
+msgid "Orthophoto 1st cycle (1994-1999) - Latvia"
 msgstr ""
 
 msgid "ORT10LT (Lithuania)"
@@ -24626,6 +24684,9 @@ msgstr ""
 msgid "geoportail.lu all layers"
 msgstr ""
 
+msgid "geoportail.lu ortho latest"
+msgstr ""
+
 msgid "geoportail.lu ortho 2016"
 msgstr ""
 
@@ -26116,6 +26177,9 @@ msgstr ""
 msgid "{0} on a node. Should be used on a way."
 msgstr ""
 
+msgid "{0} on a node. Should be used on a way or relation."
+msgstr ""
+
 msgid "{0} on a node. Should be drawn as an area."
 msgstr ""
 
@@ -26343,6 +26407,9 @@ msgstr ""
 msgid "Nodes duplicating parent way tags"
 msgstr ""
 
+msgid "{0} together with {1} and {2}. Remove {0}."
+msgstr ""
+
 msgid ""
 "wikipedia tag has no language given, use ''wikipedia''=''language:page "
 "title''"
@@ -27107,6 +27174,21 @@ msgstr ""
 msgid "Importing..."
 msgstr ""
 
+msgid "Shape is started incorrectly"
+msgstr ""
+
+msgid "Can''t load SVG diagram"
+msgstr ""
+
+msgid "Can''t find root SVG element"
+msgstr ""
+
+msgid "Import primitives"
+msgstr ""
+
+msgid "Cannot find configuration file!"
+msgstr ""
+
 msgid "DXF files [ImportDxf plugin] (*.dxf)"
 msgstr ""
 
@@ -27746,6 +27828,9 @@ msgstr ""
 msgid "Download mode"
 msgstr ""
 
+msgid "Number of images to be pre-fetched (forwards and backwards)"
+msgstr ""
+
 msgid "You are logged in as ''{0}''."
 msgstr ""
 
@@ -27956,8 +28041,17 @@ msgid "only when manually requested"
 msgstr ""
 
 msgid ""
-"The downloaded OSM area is too big. Download mode has been changed to OSM "
-"area until the layer is restarted."
+"The Mapillary layer has stopped downloading images, because the requested "
+"area is too big!"
+msgstr ""
+
+msgid ""
+"To solve this problem, you could zoom in and load a smaller area of the map."
+msgstr ""
+
+msgid ""
+"To solve this problem, you could switch to download mode ''{0}'' and load "
+"Mapillary images for a smaller portion of the map."
 msgstr ""
 
 msgid "Downloading"
@@ -31269,19 +31363,6 @@ msgstr ""
 msgid "Merge Overlap (combine)"
 msgstr ""
 
-msgid ""
-"<html>A role based relation membership was copied to all new ways.<br>You "
-"should verify this and correct it when necessary.</html>"
-msgstr ""
-
-msgid ""
-"<html>A relation membership was copied to all new ways.<br>You should verify "
-"this and correct it when necessary.</html>"
-msgstr ""
-
-msgid "Split way"
-msgstr ""
-
 msgid "Michigan Left"
 msgstr ""
 
@@ -32736,254 +32817,254 @@ msgstr ""
 msgid "PT: Route passes a oneway road in the wrong direction"
 msgstr ""
 
-msgid "moved"
+msgid "Create Stops from GTFS ..."
 msgstr ""
 
-msgid "rail"
+msgid "Create Stops from a GTFS file"
 msgstr ""
 
-msgid "Can''t parse a time from this string."
+msgid "Select GTFS file (stops.txt)"
 msgstr ""
 
-msgid "Invalid value"
+msgid "File \"{0}\" does not exist"
 msgstr ""
 
-msgid "added"
+msgid "IOException \"{0}\" occurred"
 msgstr ""
 
-msgid "Public Transport: Enable GTFSStops"
+msgid ""
+"There exists no dataset. Try to download data from the server or open an OSM "
+"file."
 msgstr ""
 
-msgid "Public Transport: Catch GTFS stops"
+msgid "No data found"
 msgstr ""
 
-msgid "skipped"
+msgid "The GTFS file was empty."
 msgstr ""
 
-msgid "Public Transport: Disable GTFS"
+msgid "[ID] {0}"
 msgstr ""
 
-msgid "Create Stops from GTFS ..."
+msgid "Route patterns ..."
 msgstr ""
 
-msgid "Create Stops from a GTFS file"
+msgid "Edit Route patterns for public transport"
 msgstr ""
 
-msgid "Select GTFS file (stops.txt)"
+msgid "Route Patterns"
 msgstr ""
 
-msgid "File \"{0}\" does not exist"
+msgid "Overview"
 msgstr ""
 
-msgid "IOException \"{0}\" occurred"
+msgid "Itinerary"
 msgstr ""
 
-msgid ""
-"There exists no dataset. Try to download data from the server or open an OSM "
-"file."
+msgid "Stops"
 msgstr ""
 
-msgid "No data found"
+msgid "Meta"
 msgstr ""
 
-msgid "The GTFS file was empty."
+msgid "Existing route patterns:"
 msgstr ""
 
-msgid "Create Stops from GTFS"
+msgid "Reflect"
 msgstr ""
 
-msgid "GTFS-Stops"
+msgid "Required tags:"
 msgstr ""
 
-msgid "Type of stops to add"
+msgid "Common tags:"
 msgstr ""
 
-msgid "Time on your GPS device"
+msgid "Additional tags:"
 msgstr ""
 
-msgid "HH:MM:SS.sss"
+msgid "Add a new Tag"
 msgstr ""
 
-msgid "Time on your stopwatch"
+msgid "Name/Id"
 msgstr ""
 
-msgid "Time window"
+msgid "Find"
 msgstr ""
 
-msgid "seconds"
+msgid "Show"
 msgstr ""
 
-msgid "Move Threshold"
+msgid "Mark"
 msgstr ""
 
-msgid "Suggest Stops"
+msgid "Ref"
 msgstr ""
 
-msgid "Find"
+msgid "Stops are possible on the"
 msgstr ""
 
-msgid "Show"
+msgid "right hand side"
 msgstr ""
 
-msgid "Mark"
+msgid "left hand side"
 msgstr ""
 
-msgid "Catch"
+msgid "Maximum distance from route"
 msgstr ""
 
-msgid "Join"
+msgid "Suggest Stops"
 msgstr ""
 
-msgid "Public Transport: Join GTFS stops"
+msgid "Create Stops from GPX ..."
 msgstr ""
 
-msgid "State"
+msgid "Create Stops from a GPX file"
 msgstr ""
 
-msgid "[incomplete]"
+msgid "Select GPX file"
 msgstr ""
 
-msgid "[empty way]"
+msgid "The GPX file contained no tracks or waypoints."
 msgstr ""
 
-msgid "[ID] {0}"
+msgid "moved"
 msgstr ""
 
-msgid "[gap]"
+msgid "added"
 msgstr ""
 
-msgid "Route patterns ..."
+msgid "Public Transport: Enable GTFSStops"
 msgstr ""
 
-msgid "Edit Route patterns for public transport"
+msgid "Public Transport: Catch GTFS stops"
 msgstr ""
 
-msgid "Route Patterns"
+msgid "skipped"
 msgstr ""
 
-msgid "Overview"
+msgid "Public Transport: Disable GTFS"
 msgstr ""
 
-msgid "Itinerary"
+msgid "Public Transport: Join GTFS stops"
 msgstr ""
 
-msgid "Stops"
+msgid "Public Transport: Change stop type"
 msgstr ""
 
-msgid "Meta"
+msgid "Public Transport: Add track stop"
 msgstr ""
 
-msgid "Existing route patterns:"
+msgid "Public Transport: Delete track stop"
 msgstr ""
 
-msgid "Reflect"
+msgid "Public Transport: Detach track stop list"
 msgstr ""
 
-msgid "Required tags:"
+msgid "Public Transport: Edit track stop list"
 msgstr ""
 
-msgid "Common tags:"
+msgid "Public Transport: Relocate nodes in track stoplist"
 msgstr ""
 
-msgid "Additional tags:"
+msgid "Public Transport: sort track stop list"
 msgstr ""
 
-msgid "Add a new Tag"
+msgid "Public Transport: Suggest stops"
 msgstr ""
 
-msgid "Name/Id"
+msgid "Public Transport: Detach waypoints"
 msgstr ""
 
-msgid "Ref"
+msgid "Public Transport: Disable waypoints"
 msgstr ""
 
-msgid "Stops are possible on the"
+msgid "Public Transport: Enable waypoints"
 msgstr ""
 
-msgid "right hand side"
+msgid "Public Transport: Edit waypoint name"
 msgstr ""
 
-msgid "left hand side"
+msgid "rail"
 msgstr ""
 
-msgid "Maximum distance from route"
+msgid "Can''t parse a time from this string."
 msgstr ""
 
-msgid " [ID] {0}"
+msgid "Invalid value"
 msgstr ""
 
-msgid "Public Transport: Change stop type"
+msgid "Create Stops from GTFS"
 msgstr ""
 
-msgid "Create Stops from GPX ..."
+msgid "GTFS-Stops"
 msgstr ""
 
-msgid "Create Stops from a GPX file"
+msgid "Type of stops to add"
 msgstr ""
 
-msgid "Select GPX file"
+msgid "Time on your GPS device"
 msgstr ""
 
-msgid "The GPX file contained no tracks or waypoints."
+msgid "HH:MM:SS.sss"
 msgstr ""
 
-msgid "Create Stops from GPX"
+msgid "Time on your stopwatch"
 msgstr ""
 
-msgid "Tracks in this GPX file:"
+msgid "Time window"
 msgstr ""
 
-msgid "Detach"
+msgid "seconds"
 msgstr ""
 
-msgid "implicit"
+msgid "Move Threshold"
 msgstr ""
 
-msgid ""
-"The GPX file doesn''t contain valid trackpoints. Please use a GPX file that "
-"has trackpoints."
+msgid "Catch"
 msgstr ""
 
-msgid "GPX File Trouble"
+msgid "Join"
 msgstr ""
 
-msgid "unnamed"
+msgid "Create Stops from GPX"
 msgstr ""
 
-msgid "Public Transport: Add track stop"
+msgid "Tracks in this GPX file:"
 msgstr ""
 
-msgid "Public Transport: Delete track stop"
+msgid "Detach"
 msgstr ""
 
-msgid "Public Transport: Detach track stop list"
+msgid "implicit"
 msgstr ""
 
-msgid "Public Transport: Edit track stop list"
+msgid "State"
 msgstr ""
 
-msgid "Public Transport: Relocate nodes in track stoplist"
+msgid "[incomplete]"
 msgstr ""
 
-msgid "Public Transport: sort track stop list"
+msgid "[empty way]"
 msgstr ""
 
-msgid "Public Transport: Suggest stops"
+msgid "[gap]"
 msgstr ""
 
 msgid "Stopname"
 msgstr ""
 
-msgid "Public Transport: Detach waypoints"
+msgid " [ID] {0}"
 msgstr ""
 
-msgid "Public Transport: Disable waypoints"
+msgid ""
+"The GPX file doesn''t contain valid trackpoints. Please use a GPX file that "
+"has trackpoints."
 msgstr ""
 
-msgid "Public Transport: Enable waypoints"
+msgid "GPX File Trouble"
 msgstr ""
 
-msgid "Public Transport: Edit waypoint name"
+msgid "unnamed"
 msgstr ""
 
 msgid "Distance between stops"
@@ -33712,6 +33793,9 @@ msgstr ""
 msgid "JOSM Tag Editor Plugin"
 msgstr ""
 
+msgid "Presets"
+msgstr ""
+
 msgid "Abort tag editing and close dialog"
 msgstr ""
 
@@ -35637,6 +35721,26 @@ msgid_plural "Overwrite ''{0}'' tags {1} from {2} with new value ''{3}''?"
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Download from Sophox API"
+msgstr ""
+
+msgid ""
+"Find places of education at least 2km, and at most 3km from the center of "
+"the selection"
+msgstr ""
+
+msgid "Show/hide Sophox snippet list"
+msgstr ""
+
+msgid "help"
+msgstr ""
+
+msgid "Server: "
+msgstr ""
+
+msgid "Wikidata+OSM server"
+msgstr ""
+
 msgid "Search Wikidata items"
 msgstr ""
 
@@ -35710,26 +35814,6 @@ msgid ""
 "objects"
 msgstr ""
 
-msgid "Download from Wikosm API"
-msgstr ""
-
-msgid ""
-"Find places of education at least 2km, and at most 3km from the center of "
-"the selection"
-msgstr ""
-
-msgid "Show/hide Wikosm snippet list"
-msgstr ""
-
-msgid "help"
-msgstr ""
-
-msgid "Server: "
-msgstr ""
-
-msgid "Wikidata+OSM server"
-msgstr ""
-
 msgid "The Ultimate WMS Super-speed Turbo Challenge II"
 msgstr ""
 
diff --git a/i18n/po/ca.po b/i18n/po/ca.po
index 47cd3c6..2c4cd54 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-10-30 03:38+0100\n"
+"POT-Creation-Date: 2017-11-26 00:06+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-10-30 04:39+0000\n"
-"X-Generator: Launchpad (build 18493)\n"
+"X-Launchpad-Export-Date: 2017-11-26 04:39+0000\n"
+"X-Generator: Launchpad (build 18509)\n"
 "Language: ca\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -447,12 +447,15 @@ msgstr "Suprimeix la capa"
 msgid "Delete the active layer. Does not delete the associated file."
 msgstr "Suprimeix la capa activa. No suprimeix el fitxer associat."
 
-msgid "Toggle dialogs panel"
-msgstr "Commuta les finestres"
+msgid "Dialogs panel"
+msgstr ""
 
 msgid "Toggle dialogs panel, maximize mapview"
 msgstr "Commuta les finestres, maximitza la vista del mapa"
 
+msgid "Toggle dialogs panel"
+msgstr "Commuta les finestres"
+
 msgid "Distribute Nodes"
 msgstr "Distribueix els nodes"
 
@@ -7060,6 +7063,9 @@ msgstr "Coordenades: "
 msgid "Coordinates (projected): "
 msgstr "Coordenades (projectades): "
 
+msgid "UTM Zone"
+msgstr "Zona UTM"
+
 msgid "Part of: "
 msgstr "Part de: "
 
@@ -9589,6 +9595,11 @@ msgstr ""
 msgid "Check \"Save\" to save the layer to the file specified on the left."
 msgstr ""
 
+msgid ""
+"A background upload is already in progress. Kindly wait for it to finish "
+"before uploading new changes"
+msgstr ""
+
 msgid "I would like someone to review my edits."
 msgstr ""
 
@@ -10829,6 +10840,9 @@ msgstr "Canvieu la projecció una altra vegada o suprimiu la capa."
 msgid "Save Layer"
 msgstr "Desa la capa"
 
+msgid "Trying to set a read only data layer as edit layer"
+msgstr ""
+
 msgid "{0} note"
 msgid_plural "{0} notes"
 msgstr[0] ""
@@ -11724,11 +11738,6 @@ msgstr ""
 "Ha fallat l''anàlisi dels estils de Mappaint de ''{0}''. L''excepció ha "
 "estat: {1}"
 
-msgid ""
-"Detected deprecated ''{0}'' in ''{1}'' which will be removed shortly. Use "
-"''{2}'' instead."
-msgstr ""
-
 msgid "Failed to locate image ''{0}''"
 msgstr "Ha fallat la localització la imatge ''{0}''"
 
@@ -13069,6 +13078,9 @@ msgstr "Mostra la pantalla de presentació en iniciar"
 msgid "Show object ID in selection lists"
 msgstr "Mostrar l''ID dels objectes a les llistes de selecció"
 
+msgid "Show node coordinates in selection lists"
+msgstr ""
+
 msgid "Show localized name in selection lists"
 msgstr "Mostrar el nom traduït a les llistes de selecció"
 
@@ -13886,9 +13898,6 @@ msgstr "Sistema geodèsic UTM"
 msgid "UTM"
 msgstr "UTM"
 
-msgid "UTM Zone"
-msgstr "Zona UTM"
-
 msgid "North"
 msgstr "Nord"
 
@@ -14417,9 +14426,6 @@ msgstr "Sotselement predefinit sense parent"
 msgid "Error parsing {0}: "
 msgstr "Error d''anàlisi {0}: "
 
-msgid "Presets"
-msgstr "Predefinicions"
-
 msgid "Search for objects by preset..."
 msgstr ""
 
@@ -17339,6 +17345,18 @@ msgstr "vegetariana"
 msgid "korean"
 msgstr "coreana"
 
+msgid "donut"
+msgstr ""
+
+msgid "mediterranean"
+msgstr ""
+
+msgid "friture"
+msgstr ""
+
+msgid "crepe"
+msgstr ""
+
 msgid "Internet access"
 msgstr "Accés a Internet"
 
@@ -20214,8 +20232,17 @@ msgstr "Font d''alimentació"
 msgid "Tents allowed"
 msgstr "Admet tenda de campanya"
 
-msgid "Camping Site"
-msgstr "Càmping"
+msgid "Campsite"
+msgstr ""
+
+msgid "Caravans allowed"
+msgstr ""
+
+msgid "Backcountry"
+msgstr ""
+
+msgid "Group only access"
+msgstr ""
 
 msgid "Food+Drinks"
 msgstr "Menjar i Beure"
@@ -25068,6 +25095,14 @@ msgid ""
 "resolution or better, and refreshed more frequently with ongoing updates."
 msgstr ""
 
+msgid "DigitalGlobe Premium Imagery Vintage"
+msgstr ""
+
+msgid ""
+"Imagery boundaries and capture dates. Labels appear at zoom level 14 and "
+"higher."
+msgstr ""
+
 msgid "DigitalGlobe Standard Imagery"
 msgstr ""
 
@@ -25077,6 +25112,9 @@ msgid ""
 "Landsat. Average age is 2.31 years, with some areas updated 2x per year."
 msgstr ""
 
+msgid "DigitalGlobe Standard Imagery Vintage"
+msgstr ""
+
 msgid "Esri World Imagery"
 msgstr ""
 
@@ -25140,6 +25178,12 @@ msgstr "Mapa de curses Strava"
 msgid "Strava cycling and running heatmap"
 msgstr ""
 
+msgid "Strava water sports heatmap"
+msgstr ""
+
+msgid "Strava winter sports heatmap"
+msgstr ""
+
 msgid "Locator Overlay"
 msgstr "Locator Overlay"
 
@@ -25544,6 +25588,9 @@ msgstr "SPW (Valònia) PICC imatgeria digital"
 msgid "SPW(allonie) most recent aerial imagery"
 msgstr ""
 
+msgid "SPW(allonie) 2016 aerial imagery"
+msgstr ""
+
 msgid "SPW(allonie) 2015 aerial imagery"
 msgstr "SPW (Valònia) 2015 imatgeria aèria"
 
@@ -25589,6 +25636,14 @@ msgstr ""
 msgid "Addresses data from IBGE"
 msgstr ""
 
+msgid "Street names IBGE Salvador-BA"
+msgstr ""
+
+msgid ""
+"Streets geometry and names of Salvador, Bahia. Source: Faces de Logradouro - "
+"IBGE."
+msgstr ""
+
 msgid "Rio Mosaic 2013"
 msgstr ""
 
@@ -26322,6 +26377,9 @@ msgstr ""
 msgid "Japan GSI ortho Imagery"
 msgstr ""
 
+msgid "Japan GSI Standard Map"
+msgstr ""
+
 msgid "imagico.de OSM images for mapping: Aral Sea (low water level)"
 msgstr ""
 
@@ -26351,8 +26409,8 @@ msgstr "50cm ortofoto - Letònia"
 msgid "20cm ortho - Latvia - Coastline"
 msgstr "20cm ortofoto - Letònia - Línia costanera"
 
-msgid "1.cikla ortofotokarte - Latvia"
-msgstr "1.cikla ortofotokarte - Letònia"
+msgid "Orthophoto 1st cycle (1994-1999) - Latvia"
+msgstr ""
 
 msgid "ORT10LT (Lithuania)"
 msgstr "ORT10LT (Lituània)"
@@ -26360,6 +26418,9 @@ msgstr "ORT10LT (Lituània)"
 msgid "geoportail.lu all layers"
 msgstr ""
 
+msgid "geoportail.lu ortho latest"
+msgstr ""
+
 msgid "geoportail.lu ortho 2016"
 msgstr ""
 
@@ -27868,6 +27929,9 @@ msgstr ""
 msgid "{0} on a node. Should be used on a way."
 msgstr "{0} a un node. Ha de ser utilitzat a una via."
 
+msgid "{0} on a node. Should be used on a way or relation."
+msgstr ""
+
 msgid "{0} on a node. Should be drawn as an area."
 msgstr "{0} a un node. Ha de ser utilitzat a una àrea."
 
@@ -28103,6 +28167,9 @@ msgstr ""
 msgid "Nodes duplicating parent way tags"
 msgstr "Nodes que dupliquen els atributs de la via pare"
 
+msgid "{0} together with {1} and {2}. Remove {0}."
+msgstr ""
+
 msgid ""
 "wikipedia tag has no language given, use ''wikipedia''=''language:page "
 "title''"
@@ -29015,6 +29082,21 @@ msgstr "Puja traçats a openstreetmap.org"
 msgid "Importing..."
 msgstr "Important..."
 
+msgid "Shape is started incorrectly"
+msgstr ""
+
+msgid "Can''t load SVG diagram"
+msgstr ""
+
+msgid "Can''t find root SVG element"
+msgstr ""
+
+msgid "Import primitives"
+msgstr ""
+
+msgid "Cannot find configuration file!"
+msgstr ""
+
 msgid "DXF files [ImportDxf plugin] (*.dxf)"
 msgstr ""
 
@@ -29672,6 +29754,9 @@ msgstr ""
 msgid "Download mode"
 msgstr "Mode de descàrrega"
 
+msgid "Number of images to be pre-fetched (forwards and backwards)"
+msgstr ""
+
 msgid "You are logged in as ''{0}''."
 msgstr "Esteu connectat com ''{0}''."
 
@@ -29884,8 +29969,17 @@ msgid "only when manually requested"
 msgstr ""
 
 msgid ""
-"The downloaded OSM area is too big. Download mode has been changed to OSM "
-"area until the layer is restarted."
+"The Mapillary layer has stopped downloading images, because the requested "
+"area is too big!"
+msgstr ""
+
+msgid ""
+"To solve this problem, you could zoom in and load a smaller area of the map."
+msgstr ""
+
+msgid ""
+"To solve this problem, you could switch to download mode ''{0}'' and load "
+"Mapillary images for a smaller portion of the map."
 msgstr ""
 
 msgid "Downloading"
@@ -33523,25 +33617,6 @@ msgstr "Fusiona les superposicions de vies"
 msgid "Merge Overlap (combine)"
 msgstr "Fusiona la superposició  (combinar)"
 
-msgid ""
-"<html>A role based relation membership was copied to all new ways.<br>You "
-"should verify this and correct it when necessary.</html>"
-msgstr ""
-"<html>Un rol basat membre de la relació fou copiat a totes les noves "
-"vies.<br> Caldria que comprovessiu si això és correcte i fessiu les "
-"correccions quan sigui necessari.</html>"
-
-msgid ""
-"<html>A relation membership was copied to all new ways.<br>You should verify "
-"this and correct it when necessary.</html>"
-msgstr ""
-"<html>Una relació de membre fou copiada a totes les noves vies.<br> Caldria "
-"que comprovessiu si això és correcte i fessiu les correccions quan sigui "
-"necessari.</html>"
-
-msgid "Split way"
-msgstr "Divideix la via"
-
 msgid "Michigan Left"
 msgstr "Michigan esquerra"
 
@@ -35097,33 +35172,6 @@ msgstr ""
 msgid "PT: Route passes a oneway road in the wrong direction"
 msgstr ""
 
-msgid "moved"
-msgstr "mogut"
-
-msgid "rail"
-msgstr "via fèrria"
-
-msgid "Can''t parse a time from this string."
-msgstr "No és possible de llegir la hora d''aquesta cadena de text."
-
-msgid "Invalid value"
-msgstr "Valor Invàlid"
-
-msgid "added"
-msgstr "afegit"
-
-msgid "Public Transport: Enable GTFSStops"
-msgstr "Transport públic: activa parades GTFS"
-
-msgid "Public Transport: Catch GTFS stops"
-msgstr "Transport públic: recupera parades GTFS"
-
-msgid "skipped"
-msgstr "omés"
-
-msgid "Public Transport: Disable GTFS"
-msgstr "Transport públic: desactiva GTFS"
-
 msgid "Create Stops from GTFS ..."
 msgstr "Crea parades a partir de GTFS..."
 
@@ -35152,69 +35200,9 @@ msgstr "No s''han trobat dades"
 msgid "The GTFS file was empty."
 msgstr "El fitxer GTFS era buit"
 
-msgid "Create Stops from GTFS"
-msgstr "Crear parades a partir de GTFS"
-
-msgid "GTFS-Stops"
-msgstr "Parades GTFS"
-
-msgid "Type of stops to add"
-msgstr "Tipus de parada a afegir"
-
-msgid "Time on your GPS device"
-msgstr "Hora del vostre aparell GPS"
-
-msgid "HH:MM:SS.sss"
-msgstr "HH:MM:SS.sss"
-
-msgid "Time on your stopwatch"
-msgstr "Hora del vostre rellotge"
-
-msgid "Time window"
-msgstr "Finestra de temps"
-
-msgid "seconds"
-msgstr "segons"
-
-msgid "Move Threshold"
-msgstr "Moure el llindar"
-
-msgid "Suggest Stops"
-msgstr "Suggerir parades"
-
-msgid "Find"
-msgstr "Troba"
-
-msgid "Show"
-msgstr "Mostra"
-
-msgid "Mark"
-msgstr "Marca"
-
-msgid "Catch"
-msgstr "Capta"
-
-msgid "Join"
-msgstr "Entra"
-
-msgid "Public Transport: Join GTFS stops"
-msgstr "Transport públic: afegeix parades GTFS"
-
-msgid "State"
-msgstr "Comunitat autònoma/Estat federal"
-
-msgid "[incomplete]"
-msgstr "[incomplet]"
-
-msgid "[empty way]"
-msgstr "[via buida]"
-
 msgid "[ID] {0}"
 msgstr "[ID] {0}"
 
-msgid "[gap]"
-msgstr "[gap]"
-
 msgid "Route patterns ..."
 msgstr "Patrons de ruta ..."
 
@@ -35257,6 +35245,15 @@ msgstr "Afegeix una nova etiqueta"
 msgid "Name/Id"
 msgstr "Nom/Id"
 
+msgid "Find"
+msgstr "Troba"
+
+msgid "Show"
+msgstr "Mostra"
+
+msgid "Mark"
+msgstr "Marca"
+
 msgid "Ref"
 msgstr "Ref"
 
@@ -35272,11 +35269,8 @@ msgstr "costat esquerre"
 msgid "Maximum distance from route"
 msgstr "Distància máxima de la ruta"
 
-msgid " [ID] {0}"
-msgstr " [ID] {0}"
-
-msgid "Public Transport: Change stop type"
-msgstr "Transport públic: modificar el tipus de parada"
+msgid "Suggest Stops"
+msgstr "Suggerir parades"
 
 msgid "Create Stops from GPX ..."
 msgstr "Crear parades a partir d''un fitxer GPX ..."
@@ -35290,30 +35284,29 @@ msgstr "Seleccionar un fitxer GPX"
 msgid "The GPX file contained no tracks or waypoints."
 msgstr "El fitxer GPX no conté cap track ni cap fita"
 
-msgid "Create Stops from GPX"
-msgstr "Crear parades a partir d''un fitxer GPX"
+msgid "moved"
+msgstr "mogut"
 
-msgid "Tracks in this GPX file:"
-msgstr "Tracks d''aquest fitxer GPX:"
+msgid "added"
+msgstr "afegit"
 
-msgid "Detach"
-msgstr "Desacobla"
+msgid "Public Transport: Enable GTFSStops"
+msgstr "Transport públic: activa parades GTFS"
 
-msgid "implicit"
-msgstr "implícit"
+msgid "Public Transport: Catch GTFS stops"
+msgstr "Transport públic: recupera parades GTFS"
 
-msgid ""
-"The GPX file doesn''t contain valid trackpoints. Please use a GPX file that "
-"has trackpoints."
-msgstr ""
-"El fitxer GPX no conté cap punt vàlid. Si us plau utilitzeu un fitxer GPX "
-"que tingui punts vàlids."
+msgid "skipped"
+msgstr "omés"
 
-msgid "GPX File Trouble"
-msgstr "Problema amb el fitxer GPX"
+msgid "Public Transport: Disable GTFS"
+msgstr "Transport públic: desactiva GTFS"
 
-msgid "unnamed"
-msgstr "sense nom"
+msgid "Public Transport: Join GTFS stops"
+msgstr "Transport públic: afegeix parades GTFS"
+
+msgid "Public Transport: Change stop type"
+msgstr "Transport públic: modificar el tipus de parada"
 
 msgid "Public Transport: Add track stop"
 msgstr "Transport públic: afegir una parada"
@@ -35336,9 +35329,6 @@ msgstr "Transport públic: ordenar la llista de parades"
 msgid "Public Transport: Suggest stops"
 msgstr "Transport públic: suggerir una parada"
 
-msgid "Stopname"
-msgstr "Nom de la parada"
-
 msgid "Public Transport: Detach waypoints"
 msgstr "Transport públic: separar fites"
 
@@ -35351,6 +35341,91 @@ msgstr "Transport públic: activar fites"
 msgid "Public Transport: Edit waypoint name"
 msgstr "Transport públic: modificar el nom d''una fita"
 
+msgid "rail"
+msgstr "via fèrria"
+
+msgid "Can''t parse a time from this string."
+msgstr "No és possible de llegir la hora d''aquesta cadena de text."
+
+msgid "Invalid value"
+msgstr "Valor Invàlid"
+
+msgid "Create Stops from GTFS"
+msgstr "Crear parades a partir de GTFS"
+
+msgid "GTFS-Stops"
+msgstr "Parades GTFS"
+
+msgid "Type of stops to add"
+msgstr "Tipus de parada a afegir"
+
+msgid "Time on your GPS device"
+msgstr "Hora del vostre aparell GPS"
+
+msgid "HH:MM:SS.sss"
+msgstr "HH:MM:SS.sss"
+
+msgid "Time on your stopwatch"
+msgstr "Hora del vostre rellotge"
+
+msgid "Time window"
+msgstr "Finestra de temps"
+
+msgid "seconds"
+msgstr "segons"
+
+msgid "Move Threshold"
+msgstr "Moure el llindar"
+
+msgid "Catch"
+msgstr "Capta"
+
+msgid "Join"
+msgstr "Entra"
+
+msgid "Create Stops from GPX"
+msgstr "Crear parades a partir d''un fitxer GPX"
+
+msgid "Tracks in this GPX file:"
+msgstr "Tracks d''aquest fitxer GPX:"
+
+msgid "Detach"
+msgstr "Desacobla"
+
+msgid "implicit"
+msgstr "implícit"
+
+msgid "State"
+msgstr "Comunitat autònoma/Estat federal"
+
+msgid "[incomplete]"
+msgstr "[incomplet]"
+
+msgid "[empty way]"
+msgstr "[via buida]"
+
+msgid "[gap]"
+msgstr "[gap]"
+
+msgid "Stopname"
+msgstr "Nom de la parada"
+
+msgid " [ID] {0}"
+msgstr " [ID] {0}"
+
+msgid ""
+"The GPX file doesn''t contain valid trackpoints. Please use a GPX file that "
+"has trackpoints."
+msgstr ""
+"El fitxer GPX no conté cap punt vàlid. Si us plau utilitzeu un fitxer GPX "
+"que tingui punts vàlids."
+
+msgid "GPX File Trouble"
+msgstr "Problema amb el fitxer GPX"
+
+msgid "unnamed"
+msgstr "sense nom"
+
 msgid "Distance between stops"
 msgstr ""
 
@@ -36123,6 +36198,9 @@ msgstr "Llança la finestra d''edició d''etiquetes"
 msgid "JOSM Tag Editor Plugin"
 msgstr "Connector JOSM d''edició d''etiquetes"
 
+msgid "Presets"
+msgstr "Predefinicions"
+
 msgid "Abort tag editing and close dialog"
 msgstr "Anul·la l''edició d''etiquetes i tanca la finestra"
 
@@ -38276,6 +38354,26 @@ msgid_plural "Overwrite ''{0}'' tags {1} from {2} with new value ''{3}''?"
 msgstr[0] "Reescriu  ''{0}''etiqueta {1} de {2} amb el nou valor ''{3}''?"
 msgstr[1] "Reescriu  ''{0}''etiquetes {1} de {2} amb el nou valor ''{3}''?"
 
+msgid "Download from Sophox API"
+msgstr ""
+
+msgid ""
+"Find places of education at least 2km, and at most 3km from the center of "
+"the selection"
+msgstr ""
+
+msgid "Show/hide Sophox snippet list"
+msgstr ""
+
+msgid "help"
+msgstr ""
+
+msgid "Server: "
+msgstr ""
+
+msgid "Wikidata+OSM server"
+msgstr ""
+
 msgid "Search Wikidata items"
 msgstr ""
 
@@ -38357,26 +38455,6 @@ msgstr ""
 "Afegeix una etiqueta \"wikipedia\" corresponent a aquest article als "
 "objectes seleccionats"
 
-msgid "Download from Wikosm API"
-msgstr ""
-
-msgid ""
-"Find places of education at least 2km, and at most 3km from the center of "
-"the selection"
-msgstr ""
-
-msgid "Show/hide Wikosm snippet list"
-msgstr ""
-
-msgid "help"
-msgstr ""
-
-msgid "Server: "
-msgstr ""
-
-msgid "Wikidata+OSM server"
-msgstr ""
-
 msgid "The Ultimate WMS Super-speed Turbo Challenge II"
 msgstr "Ultimate WMS Super-speed Turbo Challenge II"
 
diff --git a/i18n/po/ca at valencia.po b/i18n/po/ca at valencia.po
index 32d4ed4..58a8ffd 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-10-30 03:38+0100\n"
+"POT-Creation-Date: 2017-11-26 00:06+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-10-30 05:11+0000\n"
-"X-Generator: Launchpad (build 18493)\n"
+"X-Launchpad-Export-Date: 2017-11-26 05:14+0000\n"
+"X-Generator: Launchpad (build 18509)\n"
 "Language: ca at valencia\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -442,12 +442,15 @@ msgstr ""
 msgid "Delete the active layer. Does not delete the associated file."
 msgstr ""
 
-msgid "Toggle dialogs panel"
-msgstr "Commuta les finestres"
+msgid "Dialogs panel"
+msgstr ""
 
 msgid "Toggle dialogs panel, maximize mapview"
 msgstr "Commuta les finestres, maximitza la vista del mapa"
 
+msgid "Toggle dialogs panel"
+msgstr "Commuta les finestres"
+
 msgid "Distribute Nodes"
 msgstr ""
 
@@ -6913,6 +6916,9 @@ msgstr "Coordenades: "
 msgid "Coordinates (projected): "
 msgstr "Coordenades (projectades): "
 
+msgid "UTM Zone"
+msgstr "Zona UTM"
+
 msgid "Part of: "
 msgstr "Part de: "
 
@@ -9418,6 +9424,11 @@ msgstr ""
 msgid "Check \"Save\" to save the layer to the file specified on the left."
 msgstr ""
 
+msgid ""
+"A background upload is already in progress. Kindly wait for it to finish "
+"before uploading new changes"
+msgstr ""
+
 msgid "I would like someone to review my edits."
 msgstr ""
 
@@ -10661,6 +10672,9 @@ msgstr ""
 msgid "Save Layer"
 msgstr "Guarda la capa"
 
+msgid "Trying to set a read only data layer as edit layer"
+msgstr ""
+
 msgid "{0} note"
 msgid_plural "{0} notes"
 msgstr[0] ""
@@ -11554,11 +11568,6 @@ msgstr ""
 "Ha fallat l''anàlisi dels estils de Mappaint de ''{0}''. L''excepció ha "
 "estat: {1}"
 
-msgid ""
-"Detected deprecated ''{0}'' in ''{1}'' which will be removed shortly. Use "
-"''{2}'' instead."
-msgstr ""
-
 msgid "Failed to locate image ''{0}''"
 msgstr "Ha fallat la localització la imatge ''{0}''"
 
@@ -12902,6 +12911,9 @@ msgstr "Mostra la pantalla de presentació en iniciar"
 msgid "Show object ID in selection lists"
 msgstr "Mostrar l''ID dels objectes a les llistes de selecció"
 
+msgid "Show node coordinates in selection lists"
+msgstr ""
+
 msgid "Show localized name in selection lists"
 msgstr "Mostrar el nom traduït a les llistes de selecció"
 
@@ -13714,9 +13726,6 @@ msgstr "Sistema geodèsic UTM"
 msgid "UTM"
 msgstr "UTM"
 
-msgid "UTM Zone"
-msgstr "Zona UTM"
-
 msgid "North"
 msgstr "Nord"
 
@@ -14230,9 +14239,6 @@ msgstr "Sotselement predefinit sense parent"
 msgid "Error parsing {0}: "
 msgstr "Error d''anàlisi {0}: "
 
-msgid "Presets"
-msgstr "Predefinicions"
-
 msgid "Search for objects by preset..."
 msgstr ""
 
@@ -17133,6 +17139,18 @@ msgstr ""
 msgid "korean"
 msgstr ""
 
+msgid "donut"
+msgstr ""
+
+msgid "mediterranean"
+msgstr ""
+
+msgid "friture"
+msgstr ""
+
+msgid "crepe"
+msgstr ""
+
 msgid "Internet access"
 msgstr "Accés a Internet"
 
@@ -19992,8 +20010,17 @@ msgstr "Font d''alimentació"
 msgid "Tents allowed"
 msgstr "Admet tenda de campanya"
 
-msgid "Camping Site"
-msgstr "Càmping"
+msgid "Campsite"
+msgstr ""
+
+msgid "Caravans allowed"
+msgstr ""
+
+msgid "Backcountry"
+msgstr ""
+
+msgid "Group only access"
+msgstr ""
 
 msgid "Food+Drinks"
 msgstr "Menjar i Beure"
@@ -24821,6 +24848,14 @@ msgid ""
 "resolution or better, and refreshed more frequently with ongoing updates."
 msgstr ""
 
+msgid "DigitalGlobe Premium Imagery Vintage"
+msgstr ""
+
+msgid ""
+"Imagery boundaries and capture dates. Labels appear at zoom level 14 and "
+"higher."
+msgstr ""
+
 msgid "DigitalGlobe Standard Imagery"
 msgstr ""
 
@@ -24830,6 +24865,9 @@ msgid ""
 "Landsat. Average age is 2.31 years, with some areas updated 2x per year."
 msgstr ""
 
+msgid "DigitalGlobe Standard Imagery Vintage"
+msgstr ""
+
 msgid "Esri World Imagery"
 msgstr ""
 
@@ -24893,6 +24931,12 @@ msgstr ""
 msgid "Strava cycling and running heatmap"
 msgstr ""
 
+msgid "Strava water sports heatmap"
+msgstr ""
+
+msgid "Strava winter sports heatmap"
+msgstr ""
+
 msgid "Locator Overlay"
 msgstr ""
 
@@ -25297,6 +25341,9 @@ msgstr ""
 msgid "SPW(allonie) most recent aerial imagery"
 msgstr ""
 
+msgid "SPW(allonie) 2016 aerial imagery"
+msgstr ""
+
 msgid "SPW(allonie) 2015 aerial imagery"
 msgstr ""
 
@@ -25342,6 +25389,14 @@ msgstr ""
 msgid "Addresses data from IBGE"
 msgstr ""
 
+msgid "Street names IBGE Salvador-BA"
+msgstr ""
+
+msgid ""
+"Streets geometry and names of Salvador, Bahia. Source: Faces de Logradouro - "
+"IBGE."
+msgstr ""
+
 msgid "Rio Mosaic 2013"
 msgstr ""
 
@@ -26072,6 +26127,9 @@ msgstr ""
 msgid "Japan GSI ortho Imagery"
 msgstr ""
 
+msgid "Japan GSI Standard Map"
+msgstr ""
+
 msgid "imagico.de OSM images for mapping: Aral Sea (low water level)"
 msgstr ""
 
@@ -26101,7 +26159,7 @@ msgstr ""
 msgid "20cm ortho - Latvia - Coastline"
 msgstr ""
 
-msgid "1.cikla ortofotokarte - Latvia"
+msgid "Orthophoto 1st cycle (1994-1999) - Latvia"
 msgstr ""
 
 msgid "ORT10LT (Lithuania)"
@@ -26110,6 +26168,9 @@ msgstr ""
 msgid "geoportail.lu all layers"
 msgstr ""
 
+msgid "geoportail.lu ortho latest"
+msgstr ""
+
 msgid "geoportail.lu ortho 2016"
 msgstr ""
 
@@ -27600,6 +27661,9 @@ msgstr ""
 msgid "{0} on a node. Should be used on a way."
 msgstr ""
 
+msgid "{0} on a node. Should be used on a way or relation."
+msgstr ""
+
 msgid "{0} on a node. Should be drawn as an area."
 msgstr ""
 
@@ -27827,6 +27891,9 @@ msgstr ""
 msgid "Nodes duplicating parent way tags"
 msgstr "Nodes que dupliquen els atributs de la via pare"
 
+msgid "{0} together with {1} and {2}. Remove {0}."
+msgstr ""
+
 msgid ""
 "wikipedia tag has no language given, use ''wikipedia''=''language:page "
 "title''"
@@ -28691,6 +28758,21 @@ msgstr "Puja traçats a openstreetmap.org"
 msgid "Importing..."
 msgstr "Important..."
 
+msgid "Shape is started incorrectly"
+msgstr ""
+
+msgid "Can''t load SVG diagram"
+msgstr ""
+
+msgid "Can''t find root SVG element"
+msgstr ""
+
+msgid "Import primitives"
+msgstr ""
+
+msgid "Cannot find configuration file!"
+msgstr ""
+
 msgid "DXF files [ImportDxf plugin] (*.dxf)"
 msgstr ""
 
@@ -29348,6 +29430,9 @@ msgstr ""
 msgid "Download mode"
 msgstr ""
 
+msgid "Number of images to be pre-fetched (forwards and backwards)"
+msgstr ""
+
 msgid "You are logged in as ''{0}''."
 msgstr ""
 
@@ -29558,8 +29643,17 @@ msgid "only when manually requested"
 msgstr ""
 
 msgid ""
-"The downloaded OSM area is too big. Download mode has been changed to OSM "
-"area until the layer is restarted."
+"The Mapillary layer has stopped downloading images, because the requested "
+"area is too big!"
+msgstr ""
+
+msgid ""
+"To solve this problem, you could zoom in and load a smaller area of the map."
+msgstr ""
+
+msgid ""
+"To solve this problem, you could switch to download mode ''{0}'' and load "
+"Mapillary images for a smaller portion of the map."
 msgstr ""
 
 msgid "Downloading"
@@ -33165,25 +33259,6 @@ msgstr "Fusiona les superposicions de vies"
 msgid "Merge Overlap (combine)"
 msgstr "Fusiona la superposició  (combinar)"
 
-msgid ""
-"<html>A role based relation membership was copied to all new ways.<br>You "
-"should verify this and correct it when necessary.</html>"
-msgstr ""
-"<html>Un rol basat membre de la relació fou copiat a totes les noves "
-"vies.<br> Caldria que comprovessiu si això és correcte i fessiu les "
-"correccions quan siga necessari.</html>"
-
-msgid ""
-"<html>A relation membership was copied to all new ways.<br>You should verify "
-"this and correct it when necessary.</html>"
-msgstr ""
-"<html>Una relació de membre fou copiada a totes les noves vies.<br> Caldria "
-"que comprovessiu si això és correcte i fessiu les correccions quan siga "
-"necessari.</html>"
-
-msgid "Split way"
-msgstr "Divideix la via"
-
 msgid "Michigan Left"
 msgstr "Michigan esquerra"
 
@@ -34736,33 +34811,6 @@ msgstr ""
 msgid "PT: Route passes a oneway road in the wrong direction"
 msgstr ""
 
-msgid "moved"
-msgstr "mogut"
-
-msgid "rail"
-msgstr "via fèrria"
-
-msgid "Can''t parse a time from this string."
-msgstr "No és possible de llegir la hora d''esta cadena de text."
-
-msgid "Invalid value"
-msgstr "Valor Invàlid"
-
-msgid "added"
-msgstr "afegit"
-
-msgid "Public Transport: Enable GTFSStops"
-msgstr "Transport públic: activa parades GTFS"
-
-msgid "Public Transport: Catch GTFS stops"
-msgstr "Transport públic: recupera parades GTFS"
-
-msgid "skipped"
-msgstr "omés"
-
-msgid "Public Transport: Disable GTFS"
-msgstr "Transport públic: desactiva GTFS"
-
 msgid "Create Stops from GTFS ..."
 msgstr "Crea parades a partir de GTFS..."
 
@@ -34791,69 +34839,9 @@ msgstr "No s''han trobat dades"
 msgid "The GTFS file was empty."
 msgstr "El fitxer GTFS era buit"
 
-msgid "Create Stops from GTFS"
-msgstr "Crear parades a partir de GTFS"
-
-msgid "GTFS-Stops"
-msgstr "Parades GTFS"
-
-msgid "Type of stops to add"
-msgstr "Tipus de parada a afegir"
-
-msgid "Time on your GPS device"
-msgstr "Hora del vostre aparell GPS"
-
-msgid "HH:MM:SS.sss"
-msgstr "HH:MM:SS.sss"
-
-msgid "Time on your stopwatch"
-msgstr "Hora del vostre rellotge"
-
-msgid "Time window"
-msgstr "Finestra de temps"
-
-msgid "seconds"
-msgstr "segons"
-
-msgid "Move Threshold"
-msgstr "Moure el llindar"
-
-msgid "Suggest Stops"
-msgstr "Suggerir parades"
-
-msgid "Find"
-msgstr "Troba"
-
-msgid "Show"
-msgstr "Mostra"
-
-msgid "Mark"
-msgstr "Marca"
-
-msgid "Catch"
-msgstr "Capta"
-
-msgid "Join"
-msgstr "Entra"
-
-msgid "Public Transport: Join GTFS stops"
-msgstr "Transport públic: afig parades GTFS"
-
-msgid "State"
-msgstr "Comunitat autònoma/Estat federal"
-
-msgid "[incomplete]"
-msgstr "[incomplet]"
-
-msgid "[empty way]"
-msgstr "[via buida]"
-
 msgid "[ID] {0}"
 msgstr "[ID] {0}"
 
-msgid "[gap]"
-msgstr "[gap]"
-
 msgid "Route patterns ..."
 msgstr "Patrons de ruta ..."
 
@@ -34896,6 +34884,15 @@ msgstr "Afig una nova etiqueta"
 msgid "Name/Id"
 msgstr "Nom/Id"
 
+msgid "Find"
+msgstr "Troba"
+
+msgid "Show"
+msgstr "Mostra"
+
+msgid "Mark"
+msgstr "Marca"
+
 msgid "Ref"
 msgstr "Ref"
 
@@ -34911,11 +34908,8 @@ msgstr "costat esquerre"
 msgid "Maximum distance from route"
 msgstr "Distància máxima de la ruta"
 
-msgid " [ID] {0}"
-msgstr " [ID] {0}"
-
-msgid "Public Transport: Change stop type"
-msgstr "Transport públic: modificar el tipus de parada"
+msgid "Suggest Stops"
+msgstr "Suggerir parades"
 
 msgid "Create Stops from GPX ..."
 msgstr "Crear parades a partir d''un fitxer GPX ..."
@@ -34929,30 +34923,29 @@ msgstr "Seleccionar un fitxer GPX"
 msgid "The GPX file contained no tracks or waypoints."
 msgstr "El fitxer GPX no conté cap track ni cap fita"
 
-msgid "Create Stops from GPX"
-msgstr "Crear parades a partir d''un fitxer GPX"
+msgid "moved"
+msgstr "mogut"
 
-msgid "Tracks in this GPX file:"
-msgstr "Tracks d''este fitxer GPX:"
+msgid "added"
+msgstr "afegit"
 
-msgid "Detach"
-msgstr "Desacobla"
+msgid "Public Transport: Enable GTFSStops"
+msgstr "Transport públic: activa parades GTFS"
 
-msgid "implicit"
-msgstr "implícit"
+msgid "Public Transport: Catch GTFS stops"
+msgstr "Transport públic: recupera parades GTFS"
 
-msgid ""
-"The GPX file doesn''t contain valid trackpoints. Please use a GPX file that "
-"has trackpoints."
-msgstr ""
-"El fitxer GPX no conté cap punt vàlid. Per favor utilitzeu un fitxer GPX que "
-"tinga punts vàlids."
+msgid "skipped"
+msgstr "omés"
 
-msgid "GPX File Trouble"
-msgstr "Problema amb el fitxer GPX"
+msgid "Public Transport: Disable GTFS"
+msgstr "Transport públic: desactiva GTFS"
 
-msgid "unnamed"
-msgstr "sense nom"
+msgid "Public Transport: Join GTFS stops"
+msgstr "Transport públic: afig parades GTFS"
+
+msgid "Public Transport: Change stop type"
+msgstr "Transport públic: modificar el tipus de parada"
 
 msgid "Public Transport: Add track stop"
 msgstr "Transport públic: afegir una parada"
@@ -34975,9 +34968,6 @@ msgstr "Transport públic: ordenar la llista de parades"
 msgid "Public Transport: Suggest stops"
 msgstr "Transport públic: suggerir una parada"
 
-msgid "Stopname"
-msgstr "Nom de la parada"
-
 msgid "Public Transport: Detach waypoints"
 msgstr "Transport públic: separar fites"
 
@@ -34990,6 +34980,91 @@ msgstr "Transport públic: activar fites"
 msgid "Public Transport: Edit waypoint name"
 msgstr "Transport públic: modificar el nom d''una fita"
 
+msgid "rail"
+msgstr "via fèrria"
+
+msgid "Can''t parse a time from this string."
+msgstr "No és possible de llegir la hora d''esta cadena de text."
+
+msgid "Invalid value"
+msgstr "Valor Invàlid"
+
+msgid "Create Stops from GTFS"
+msgstr "Crear parades a partir de GTFS"
+
+msgid "GTFS-Stops"
+msgstr "Parades GTFS"
+
+msgid "Type of stops to add"
+msgstr "Tipus de parada a afegir"
+
+msgid "Time on your GPS device"
+msgstr "Hora del vostre aparell GPS"
+
+msgid "HH:MM:SS.sss"
+msgstr "HH:MM:SS.sss"
+
+msgid "Time on your stopwatch"
+msgstr "Hora del vostre rellotge"
+
+msgid "Time window"
+msgstr "Finestra de temps"
+
+msgid "seconds"
+msgstr "segons"
+
+msgid "Move Threshold"
+msgstr "Moure el llindar"
+
+msgid "Catch"
+msgstr "Capta"
+
+msgid "Join"
+msgstr "Entra"
+
+msgid "Create Stops from GPX"
+msgstr "Crear parades a partir d''un fitxer GPX"
+
+msgid "Tracks in this GPX file:"
+msgstr "Tracks d''este fitxer GPX:"
+
+msgid "Detach"
+msgstr "Desacobla"
+
+msgid "implicit"
+msgstr "implícit"
+
+msgid "State"
+msgstr "Comunitat autònoma/Estat federal"
+
+msgid "[incomplete]"
+msgstr "[incomplet]"
+
+msgid "[empty way]"
+msgstr "[via buida]"
+
+msgid "[gap]"
+msgstr "[gap]"
+
+msgid "Stopname"
+msgstr "Nom de la parada"
+
+msgid " [ID] {0}"
+msgstr " [ID] {0}"
+
+msgid ""
+"The GPX file doesn''t contain valid trackpoints. Please use a GPX file that "
+"has trackpoints."
+msgstr ""
+"El fitxer GPX no conté cap punt vàlid. Per favor utilitzeu un fitxer GPX que "
+"tinga punts vàlids."
+
+msgid "GPX File Trouble"
+msgstr "Problema amb el fitxer GPX"
+
+msgid "unnamed"
+msgstr "sense nom"
+
 msgid "Distance between stops"
 msgstr ""
 
@@ -35761,6 +35836,9 @@ msgstr "Llança la finestra d''edició d''etiquetes"
 msgid "JOSM Tag Editor Plugin"
 msgstr "Connector JOSM d''edició d''etiquetes"
 
+msgid "Presets"
+msgstr "Predefinicions"
+
 msgid "Abort tag editing and close dialog"
 msgstr "Anul·la l''edició d''etiquetes i tanca la finestra"
 
@@ -37897,6 +37975,26 @@ msgid_plural "Overwrite ''{0}'' tags {1} from {2} with new value ''{3}''?"
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Download from Sophox API"
+msgstr ""
+
+msgid ""
+"Find places of education at least 2km, and at most 3km from the center of "
+"the selection"
+msgstr ""
+
+msgid "Show/hide Sophox snippet list"
+msgstr ""
+
+msgid "help"
+msgstr ""
+
+msgid "Server: "
+msgstr ""
+
+msgid "Wikidata+OSM server"
+msgstr ""
+
 msgid "Search Wikidata items"
 msgstr ""
 
@@ -37978,26 +38076,6 @@ msgstr ""
 "Afig una etiqueta \"wikipedia\" corresponent a este article als objectes "
 "seleccionats"
 
-msgid "Download from Wikosm API"
-msgstr ""
-
-msgid ""
-"Find places of education at least 2km, and at most 3km from the center of "
-"the selection"
-msgstr ""
-
-msgid "Show/hide Wikosm snippet list"
-msgstr ""
-
-msgid "help"
-msgstr ""
-
-msgid "Server: "
-msgstr ""
-
-msgid "Wikidata+OSM server"
-msgstr ""
-
 msgid "The Ultimate WMS Super-speed Turbo Challenge II"
 msgstr "Ultimate WMS Super-speed Turbo Challenge II"
 
diff --git a/i18n/po/cs.po b/i18n/po/cs.po
index 016ba4a..a5b0b4a 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-10-30 03:38+0100\n"
-"PO-Revision-Date: 2017-10-25 11:01+0000\n"
+"POT-Creation-Date: 2017-11-26 00:06+0100\n"
+"PO-Revision-Date: 2017-11-24 12:58+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-10-30 04:39+0000\n"
-"X-Generator: Launchpad (build 18493)\n"
+"X-Launchpad-Export-Date: 2017-11-26 04:40+0000\n"
+"X-Generator: Launchpad (build 18509)\n"
 "Language: cs\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -454,12 +454,15 @@ msgstr "Smazat vrstvu"
 msgid "Delete the active layer. Does not delete the associated file."
 msgstr "Smaže tuto aktivní vrstvu. Nesmaže asociovaný soubor."
 
-msgid "Toggle dialogs panel"
-msgstr "Přepínat panely dialogů"
+msgid "Dialogs panel"
+msgstr "Panel dialogů"
 
 msgid "Toggle dialogs panel, maximize mapview"
 msgstr "Přepínat panely dialogů, maximalizovat zobrazení mapy"
 
+msgid "Toggle dialogs panel"
+msgstr "Přepínat panely dialogů"
+
 msgid "Distribute Nodes"
 msgstr "Distribuovat uzly"
 
@@ -7055,6 +7058,9 @@ msgstr "Souřadnice: "
 msgid "Coordinates (projected): "
 msgstr "Coordinates (v projekci): "
 
+msgid "UTM Zone"
+msgstr "Zóna UTM"
+
 msgid "Part of: "
 msgstr "Část z: "
 
@@ -9557,6 +9563,13 @@ msgid "Check \"Save\" to save the layer to the file specified on the left."
 msgstr ""
 "Zaškrtněte \"Uložit\", aby se vrstva uložila do souboru určeného vlevo."
 
+msgid ""
+"A background upload is already in progress. Kindly wait for it to finish "
+"before uploading new changes"
+msgstr ""
+"Nahrávání na server již probíhá na pozadí. Před nahráváním nových změn "
+"laskavě počkejte, až bude dokončeno."
+
 msgid "I would like someone to review my edits."
 msgstr "Požádat o posouzení změn ostatní editory."
 
@@ -10813,6 +10826,9 @@ msgstr "Opět změňte projekci nebo ostraňte vrstvu."
 msgid "Save Layer"
 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 "{0} note"
 msgid_plural "{0} notes"
 msgstr[0] "{0} poznámka"
@@ -11736,11 +11752,6 @@ msgstr "Selhalo nahrání stylů kreslení mapy z ''{0}''. Došlo k výjimce: {1
 msgid "Failed to parse Mappaint styles from ''{0}''. Error was: {1}"
 msgstr "Selhalo zpracování stylů kreslení mapy z ''{0}''. Došlo k chybě: {1}"
 
-msgid ""
-"Detected deprecated ''{0}'' in ''{1}'' which will be removed shortly. Use "
-"''{2}'' instead."
-msgstr ""
-
 msgid "Failed to locate image ''{0}''"
 msgstr "Nepodařilo se nalézt obrázek ''{0}''"
 
@@ -13039,6 +13050,9 @@ msgstr "Zobrazovat při startu úvodní obrazovku"
 msgid "Show object ID in selection lists"
 msgstr "Zobrazovat ID objektů v seznamech vybraných objektů"
 
+msgid "Show node coordinates in selection lists"
+msgstr "Ve výběrových seznamech zobrazovat souřadnice uzlů"
+
 msgid "Show localized name in selection lists"
 msgstr "Zobrazovat lokalizované názvy v seznamu prvků"
 
@@ -13850,9 +13864,6 @@ msgstr "UTM Geodesický systém"
 msgid "UTM"
 msgstr "UTM"
 
-msgid "UTM Zone"
-msgstr "Zóna UTM"
-
 msgid "North"
 msgstr "Sever"
 
@@ -14368,9 +14379,6 @@ msgstr "Pod-prvek předvolby bez rodiče"
 msgid "Error parsing {0}: "
 msgstr "Chyba parsování {0}: "
 
-msgid "Presets"
-msgstr "Předvolby"
-
 msgid "Search for objects by preset..."
 msgstr "Hledat objekty podle předvolby..."
 
@@ -17270,6 +17278,18 @@ msgstr "vegetariánská"
 msgid "korean"
 msgstr "korejská"
 
+msgid "donut"
+msgstr "donuty"
+
+msgid "mediterranean"
+msgstr "středomořská"
+
+msgid "friture"
+msgstr "hranolky"
+
+msgid "crepe"
+msgstr "crêpe"
+
 msgid "Internet access"
 msgstr "Přístup k Internetu"
 
@@ -20140,8 +20160,17 @@ msgstr "Zdroj elektrické energie"
 msgid "Tents allowed"
 msgstr "Stany povoleny"
 
-msgid "Camping Site"
-msgstr "Tábořiště"
+msgid "Campsite"
+msgstr "Kemp"
+
+msgid "Caravans allowed"
+msgstr "Karavany povoleny"
+
+msgid "Backcountry"
+msgstr "Základní tábořiště bez vybavení"
+
+msgid "Group only access"
+msgstr "Pouze pro skupiny"
 
 msgid "Food+Drinks"
 msgstr "Jídlo a pití"
@@ -24992,6 +25021,16 @@ msgstr ""
 "vybranými oblastmi vyplněnými +Vivid, rozlišení 50 cm nebo lepší, častěji "
 "občerstvováno průběžnými aktualizacemi."
 
+msgid "DigitalGlobe Premium Imagery Vintage"
+msgstr "DigitalGlobe Premium Imagery Vintage"
+
+msgid ""
+"Imagery boundaries and capture dates. Labels appear at zoom level 14 and "
+"higher."
+msgstr ""
+"Imagery boundaries and capture dates. Labels appear at zoom level 14 and "
+"higher."
+
 msgid "DigitalGlobe Standard Imagery"
 msgstr "Standardní snímky DigitalGlobe"
 
@@ -25004,6 +25043,9 @@ msgstr ""
 "pevnin Země, o rozlišení 30 - 60 cm doplněná snímky Landsat. Průměrné stáří "
 "je 2,31 roku a některé oblasti jsou aktualizovány dvakrát ročně."
 
+msgid "DigitalGlobe Standard Imagery Vintage"
+msgstr "DigitalGlobe Standard Imagery Vintage"
+
 msgid "Esri World Imagery"
 msgstr "Snímky světa Esri"
 
@@ -25067,6 +25109,12 @@ msgstr "Strava heatmap - běh"
 msgid "Strava cycling and running heatmap"
 msgstr "Strava heatmap - jízda na kole a běh"
 
+msgid "Strava water sports heatmap"
+msgstr "Strava water sports heatmap"
+
+msgid "Strava winter sports heatmap"
+msgstr "Strava winter sports heatmap"
+
 msgid "Locator Overlay"
 msgstr "Překryvná vrstva Locator"
 
@@ -25480,6 +25528,9 @@ msgstr "SPW(allonie) PICC numerical imagery"
 msgid "SPW(allonie) most recent aerial imagery"
 msgstr "SPW(allonie) most recent aerial imagery"
 
+msgid "SPW(allonie) 2016 aerial imagery"
+msgstr "SPW(allonie) 2016 aerial imagery"
+
 msgid "SPW(allonie) 2015 aerial imagery"
 msgstr "SPW(allonie) 2015 aerial imagery"
 
@@ -25526,6 +25577,16 @@ msgstr "IBGE federal district"
 msgid "Addresses data from IBGE"
 msgstr "Adresní data z IBGE"
 
+msgid "Street names IBGE Salvador-BA"
+msgstr "Street names IBGE Salvador-BA"
+
+msgid ""
+"Streets geometry and names of Salvador, Bahia. Source: Faces de Logradouro - "
+"IBGE."
+msgstr ""
+"Streets geometry and names of Salvador, Bahia. Source: Faces de Logradouro - "
+"IBGE."
+
 msgid "Rio Mosaic 2013"
 msgstr "Rio Mosaic 2013"
 
@@ -26297,6 +26358,9 @@ msgstr "Topographical basemap of South Tyrol"
 msgid "Japan GSI ortho Imagery"
 msgstr "Japan GSI ortho Imagery"
 
+msgid "Japan GSI Standard Map"
+msgstr ""
+
 msgid "imagico.de OSM images for mapping: Aral Sea (low water level)"
 msgstr "imagico.de OSM images for mapping: Aral Sea (low water level)"
 
@@ -26328,8 +26392,8 @@ msgstr "50cm ortho - Latvia"
 msgid "20cm ortho - Latvia - Coastline"
 msgstr "20cm ortho - Latvia - Coastline"
 
-msgid "1.cikla ortofotokarte - Latvia"
-msgstr "1.cikla ortofotokarte - Latvia"
+msgid "Orthophoto 1st cycle (1994-1999) - Latvia"
+msgstr ""
 
 msgid "ORT10LT (Lithuania)"
 msgstr "ORT10LT (Lithuania)"
@@ -26337,8 +26401,11 @@ msgstr "ORT10LT (Lithuania)"
 msgid "geoportail.lu all layers"
 msgstr "geoportail.lu all layers"
 
+msgid "geoportail.lu ortho latest"
+msgstr "geoportail.lu ortho latest"
+
 msgid "geoportail.lu ortho 2016"
-msgstr "geoportail.lu ortho 2016"
+msgstr ""
 
 msgid "Luxembourg Inspire Railway"
 msgstr "Luxembourg Inspire Railway"
@@ -28035,6 +28102,9 @@ msgstr "špatná hodnota: {0}"
 msgid "{0} on a node. Should be used on a way."
 msgstr "{0} na uzlu. Mělo by být použito na cestě."
 
+msgid "{0} on a node. Should be used on a way or relation."
+msgstr "{0} na uzlu. Mělo by být použito na cestě nebo relaci."
+
 msgid "{0} on a node. Should be drawn as an area."
 msgstr "{0} na uzlu. Mělo by být nakresleno jako plocha."
 
@@ -28283,6 +28353,9 @@ msgstr "{0} nedává smysl"
 msgid "Nodes duplicating parent way tags"
 msgstr "Uzly duplikující značky cesty, jejíž jsou součástí"
 
+msgid "{0} together with {1} and {2}. Remove {0}."
+msgstr "{0} spolu s {1} a {2}. Odstraňte {0}."
+
 msgid ""
 "wikipedia tag has no language given, use ''wikipedia''=''language:page "
 "title''"
@@ -29196,6 +29269,21 @@ msgstr "Nahraje trasy na openstreetmap.org"
 msgid "Importing..."
 msgstr "Probíhá import…"
 
+msgid "Shape is started incorrectly"
+msgstr "Útvar je nesprávně zahájen"
+
+msgid "Can''t load SVG diagram"
+msgstr "Nemohu načíst diagram SVG"
+
+msgid "Can''t find root SVG element"
+msgstr "Nemohu najít kořenový prvek SVG"
+
+msgid "Import primitives"
+msgstr "Import základních prvků"
+
+msgid "Cannot find configuration file!"
+msgstr "Nemohu najít konfigurační soubor!"
+
 msgid "DXF files [ImportDxf plugin] (*.dxf)"
 msgstr "Soubory DXF [doplněk ImportDxf] (*.dxf)"
 
@@ -29857,6 +29945,9 @@ msgstr "Povolit experimentální beta-funkce (může být nestabilní)"
 msgid "Download mode"
 msgstr "Režim stahování"
 
+msgid "Number of images to be pre-fetched (forwards and backwards)"
+msgstr "Počet snímků, která se mají načíst dopředu (vpřed a vzad)"
+
 msgid "You are logged in as ''{0}''."
 msgstr "Jste přihlášen jako ''{0}''."
 
@@ -30084,11 +30175,23 @@ msgid "only when manually requested"
 msgstr "pouze pokud je ručně požadováno"
 
 msgid ""
-"The downloaded OSM area is too big. Download mode has been changed to OSM "
-"area until the layer is restarted."
+"The Mapillary layer has stopped downloading images, because the requested "
+"area is too big!"
+msgstr ""
+"Do vrstvy Mapillary se již nenačítají obrázky, protože požadovaná oblast je "
+"příliš velká!"
+
+msgid ""
+"To solve this problem, you could zoom in and load a smaller area of the map."
 msgstr ""
-"Stažená plocha OSM je příliš velká. Režim stahování byl změněn na plochu OSM "
-"do doby, než bude vrstva restartována."
+"Chcete-li tento problém vyřešit, přibližte obraz a načtěte menší oblast mapy."
+
+msgid ""
+"To solve this problem, you could switch to download mode ''{0}'' and load "
+"Mapillary images for a smaller portion of the map."
+msgstr ""
+"Chcete-li tento problém vyřešit, přepněte na režim stahování ''{0}'' a "
+"načtěte obrázky Mapillary z menší části mapy."
 
 msgid "Downloading"
 msgstr "Stahuji"
@@ -33718,24 +33821,6 @@ msgstr "Sloučit překrytí cest."
 msgid "Merge Overlap (combine)"
 msgstr "Sloučení překryvu (spojení)"
 
-msgid ""
-"<html>A role based relation membership was copied to all new ways.<br>You "
-"should verify this and correct it when necessary.</html>"
-msgstr ""
-"<html>Relace založená na rolích byla zkopírována na všechny nové "
-"cesty.<br>Mělo by být ověřeno, zda je zkopírování správné a případně "
-"opraveno.</html>"
-
-msgid ""
-"<html>A relation membership was copied to all new ways.<br>You should verify "
-"this and correct it when necessary.</html>"
-msgstr ""
-"<html>Členství v relaci bylo zkopírováno na všechny nové cesty.<br>Mělo by "
-"být ověřeno, zda je zkopírování správné a případně opraveno.</html>"
-
-msgid "Split way"
-msgstr "Rozdělit cestu"
-
 msgid "Michigan Left"
 msgstr "Michiganské odbočení vlevo"
 
@@ -35277,33 +35362,6 @@ msgstr "VD: Silnice je ve výstavbě"
 msgid "PT: Route passes a oneway road in the wrong direction"
 msgstr "VD: Trasa probíhá jednosměrkou ve špatném směru"
 
-msgid "moved"
-msgstr "posunuto"
-
-msgid "rail"
-msgstr "kolejnice"
-
-msgid "Can''t parse a time from this string."
-msgstr "Z tohoto řetězce nemohu načíst čas"
-
-msgid "Invalid value"
-msgstr "Neplatná hodnota"
-
-msgid "added"
-msgstr "přidáno"
-
-msgid "Public Transport: Enable GTFSStops"
-msgstr "Hromadná doprava: Povolit GTFS zastávky"
-
-msgid "Public Transport: Catch GTFS stops"
-msgstr "Hromadná doprava: Odchytit GTFS zastávky"
-
-msgid "skipped"
-msgstr "vynecháno"
-
-msgid "Public Transport: Disable GTFS"
-msgstr "Hromadná doprava: Zakázat GTFS"
-
 msgid "Create Stops from GTFS ..."
 msgstr "Vytvořit zastávky z GTFS ..."
 
@@ -35332,69 +35390,9 @@ msgstr "Nenalezena žádná data"
 msgid "The GTFS file was empty."
 msgstr "Soubor GTFS byl prázdný."
 
-msgid "Create Stops from GTFS"
-msgstr "Vytvořit zastávky z GTFS"
-
-msgid "GTFS-Stops"
-msgstr "Zastávky-GTFS"
-
-msgid "Type of stops to add"
-msgstr "Typy zastávek k přidání"
-
-msgid "Time on your GPS device"
-msgstr "Čas na vašem přijímači GPS"
-
-msgid "HH:MM:SS.sss"
-msgstr "HH:MM:SS.sss"
-
-msgid "Time on your stopwatch"
-msgstr "Čas na vašich stopkách"
-
-msgid "Time window"
-msgstr "Časová osa"
-
-msgid "seconds"
-msgstr "sekund"
-
-msgid "Move Threshold"
-msgstr "Posunout práh"
-
-msgid "Suggest Stops"
-msgstr "Navrhnout zastávky"
-
-msgid "Find"
-msgstr "Najít"
-
-msgid "Show"
-msgstr "Zobrazit"
-
-msgid "Mark"
-msgstr "Označit"
-
-msgid "Catch"
-msgstr "Zachytit"
-
-msgid "Join"
-msgstr "Spojit"
-
-msgid "Public Transport: Join GTFS stops"
-msgstr "Hromadná doprava: Propojit GTFS zastávky"
-
-msgid "State"
-msgstr "Stav"
-
-msgid "[incomplete]"
-msgstr "[nekompletní]"
-
-msgid "[empty way]"
-msgstr "[prázdná cesta]"
-
 msgid "[ID] {0}"
 msgstr "[id] {0}"
 
-msgid "[gap]"
-msgstr "[mezera]"
-
 msgid "Route patterns ..."
 msgstr "Vzory tras ..."
 
@@ -35437,6 +35435,15 @@ msgstr "Přidat novou značku"
 msgid "Name/Id"
 msgstr "Název/id"
 
+msgid "Find"
+msgstr "Najít"
+
+msgid "Show"
+msgstr "Zobrazit"
+
+msgid "Mark"
+msgstr "Označit"
+
 msgid "Ref"
 msgstr "Ref"
 
@@ -35452,11 +35459,8 @@ msgstr "vlevo"
 msgid "Maximum distance from route"
 msgstr "Maximální vzdálenost od trasy"
 
-msgid " [ID] {0}"
-msgstr " [id] {0}"
-
-msgid "Public Transport: Change stop type"
-msgstr "Hromadná doprava: Změnit typ zastávky"
+msgid "Suggest Stops"
+msgstr "Navrhnout zastávky"
 
 msgid "Create Stops from GPX ..."
 msgstr "Vytvořit zastávky z GPX ..."
@@ -35470,30 +35474,29 @@ msgstr "Zvolit soubor GPX"
 msgid "The GPX file contained no tracks or waypoints."
 msgstr "Tento soubor GPX neobsahoval žádné trasy ani uzly tras."
 
-msgid "Create Stops from GPX"
-msgstr "Vytvořit zastávky podle GPX"
+msgid "moved"
+msgstr "posunuto"
 
-msgid "Tracks in this GPX file:"
-msgstr "Trasy v tomto souboru GPX:"
+msgid "added"
+msgstr "přidáno"
 
-msgid "Detach"
-msgstr "Odpojit"
+msgid "Public Transport: Enable GTFSStops"
+msgstr "Hromadná doprava: Povolit GTFS zastávky"
 
-msgid "implicit"
-msgstr "implicitní"
+msgid "Public Transport: Catch GTFS stops"
+msgstr "Hromadná doprava: Odchytit GTFS zastávky"
 
-msgid ""
-"The GPX file doesn''t contain valid trackpoints. Please use a GPX file that "
-"has trackpoints."
-msgstr ""
-"Soubor GPX neobsahuje použitelné trasové body. Zvolte, prosím, soubor GPS, "
-"který má trasové body."
+msgid "skipped"
+msgstr "vynecháno"
 
-msgid "GPX File Trouble"
-msgstr "Problém s GPX souborem"
+msgid "Public Transport: Disable GTFS"
+msgstr "Hromadná doprava: Zakázat GTFS"
 
-msgid "unnamed"
-msgstr "nepojmenováno"
+msgid "Public Transport: Join GTFS stops"
+msgstr "Hromadná doprava: Propojit GTFS zastávky"
+
+msgid "Public Transport: Change stop type"
+msgstr "Hromadná doprava: Změnit typ zastávky"
 
 msgid "Public Transport: Add track stop"
 msgstr "Hromadná doprava: Přidat zastávku"
@@ -35516,9 +35519,6 @@ msgstr "Hromadná doprava: seřadit seznam zastávek"
 msgid "Public Transport: Suggest stops"
 msgstr "Hromadná doprava: Navrhnout zastávky"
 
-msgid "Stopname"
-msgstr "Jméno zastávky"
-
 msgid "Public Transport: Detach waypoints"
 msgstr "Veřejná doprava: Odpojit body trasy"
 
@@ -35531,6 +35531,91 @@ msgstr "Veřejná doprava: Povolit body trasy"
 msgid "Public Transport: Edit waypoint name"
 msgstr "Hromadná doprava: Upravit název bodu trasy"
 
+msgid "rail"
+msgstr "kolejnice"
+
+msgid "Can''t parse a time from this string."
+msgstr "Z tohoto řetězce nemohu načíst čas"
+
+msgid "Invalid value"
+msgstr "Neplatná hodnota"
+
+msgid "Create Stops from GTFS"
+msgstr "Vytvořit zastávky z GTFS"
+
+msgid "GTFS-Stops"
+msgstr "Zastávky-GTFS"
+
+msgid "Type of stops to add"
+msgstr "Typy zastávek k přidání"
+
+msgid "Time on your GPS device"
+msgstr "Čas na vašem přijímači GPS"
+
+msgid "HH:MM:SS.sss"
+msgstr "HH:MM:SS.sss"
+
+msgid "Time on your stopwatch"
+msgstr "Čas na vašich stopkách"
+
+msgid "Time window"
+msgstr "Časová osa"
+
+msgid "seconds"
+msgstr "sekund"
+
+msgid "Move Threshold"
+msgstr "Posunout práh"
+
+msgid "Catch"
+msgstr "Zachytit"
+
+msgid "Join"
+msgstr "Spojit"
+
+msgid "Create Stops from GPX"
+msgstr "Vytvořit zastávky podle GPX"
+
+msgid "Tracks in this GPX file:"
+msgstr "Trasy v tomto souboru GPX:"
+
+msgid "Detach"
+msgstr "Odpojit"
+
+msgid "implicit"
+msgstr "implicitní"
+
+msgid "State"
+msgstr "Stav"
+
+msgid "[incomplete]"
+msgstr "[nekompletní]"
+
+msgid "[empty way]"
+msgstr "[prázdná cesta]"
+
+msgid "[gap]"
+msgstr "[mezera]"
+
+msgid "Stopname"
+msgstr "Jméno zastávky"
+
+msgid " [ID] {0}"
+msgstr " [id] {0}"
+
+msgid ""
+"The GPX file doesn''t contain valid trackpoints. Please use a GPX file that "
+"has trackpoints."
+msgstr ""
+"Soubor GPX neobsahuje použitelné trasové body. Zvolte, prosím, soubor GPS, "
+"který má trasové body."
+
+msgid "GPX File Trouble"
+msgstr "Problém s GPX souborem"
+
+msgid "unnamed"
+msgstr "nepojmenováno"
+
 msgid "Distance between stops"
 msgstr "Vzdálenost mezi zastávkami"
 
@@ -36291,6 +36376,9 @@ msgstr "Otevřít dialog editoru značek"
 msgid "JOSM Tag Editor Plugin"
 msgstr "Doplněk JOSM Tag Editor"
 
+msgid "Presets"
+msgstr "Předvolby"
+
 msgid "Abort tag editing and close dialog"
 msgstr "Přerušit úpravy značek a zavřít dialog"
 
@@ -38421,6 +38509,26 @@ msgstr[0] "Přepsat ''{0}'' značku {1} z {2} na novou hodnotu ''{3}''?"
 msgstr[1] "Přepsat ''{0}'' značky {1} z {2} na novou hodnotu ''{3}''?"
 msgstr[2] "Přepsat ''{0}'' značek {1} z {2} na novou hodnotu ''{3}''?"
 
+msgid "Download from Sophox API"
+msgstr "Stáhnout z API Sophox"
+
+msgid ""
+"Find places of education at least 2km, and at most 3km from the center of "
+"the selection"
+msgstr "Najít místa vzdělávání nejméně 2 km a nejvíce 3 km od středu výběru"
+
+msgid "Show/hide Sophox snippet list"
+msgstr "Zobrazit/skrýt seznam kousků kódu Sophox"
+
+msgid "help"
+msgstr "nápověda"
+
+msgid "Server: "
+msgstr "Server: "
+
+msgid "Wikidata+OSM server"
+msgstr "Wikidata+OSM server"
+
 msgid "Search Wikidata items"
 msgstr "Prohledávání položek Wikidat"
 
@@ -38497,26 +38605,6 @@ msgid ""
 msgstr ""
 "Přidá značku ''wikipedia'' odpovídající tomuto článku k vybraným objektům"
 
-msgid "Download from Wikosm API"
-msgstr "Stáhnout z Wikosm API"
-
-msgid ""
-"Find places of education at least 2km, and at most 3km from the center of "
-"the selection"
-msgstr "Najít místa vzdělávání nejméně 2 km a nejvíce 3 km od středu výběru"
-
-msgid "Show/hide Wikosm snippet list"
-msgstr "Zobrazit/skrýt dotazy z Wikosm"
-
-msgid "help"
-msgstr "nápověda"
-
-msgid "Server: "
-msgstr "Server: "
-
-msgid "Wikidata+OSM server"
-msgstr "Wikidata+OSM server"
-
 msgid "The Ultimate WMS Super-speed Turbo Challenge II"
 msgstr "Ultimativní WMS Vysokorychlostní Turbo Závod II"
 
diff --git a/i18n/po/cy.po b/i18n/po/cy.po
index a3f6271..2df211a 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-10-30 03:38+0100\n"
+"POT-Creation-Date: 2017-11-26 00:06+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-10-30 05:06+0000\n"
-"X-Generator: Launchpad (build 18493)\n"
+"X-Launchpad-Export-Date: 2017-11-26 05:09+0000\n"
+"X-Generator: Launchpad (build 18509)\n"
 "Language: cy\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -422,12 +422,15 @@ msgstr ""
 msgid "Delete the active layer. Does not delete the associated file."
 msgstr ""
 
-msgid "Toggle dialogs panel"
+msgid "Dialogs panel"
 msgstr ""
 
 msgid "Toggle dialogs panel, maximize mapview"
 msgstr ""
 
+msgid "Toggle dialogs panel"
+msgstr ""
+
 msgid "Distribute Nodes"
 msgstr ""
 
@@ -6489,6 +6492,9 @@ msgstr ""
 msgid "Coordinates (projected): "
 msgstr ""
 
+msgid "UTM Zone"
+msgstr ""
+
 msgid "Part of: "
 msgstr ""
 
@@ -8787,6 +8793,11 @@ msgstr ""
 msgid "Check \"Save\" to save the layer to the file specified on the left."
 msgstr ""
 
+msgid ""
+"A background upload is already in progress. Kindly wait for it to finish "
+"before uploading new changes"
+msgstr ""
+
 msgid "I would like someone to review my edits."
 msgstr ""
 
@@ -9895,6 +9906,9 @@ msgstr ""
 msgid "Save Layer"
 msgstr ""
 
+msgid "Trying to set a read only data layer as edit layer"
+msgstr ""
+
 msgid "{0} note"
 msgid_plural "{0} notes"
 msgstr[0] ""
@@ -10725,11 +10739,6 @@ msgstr ""
 msgid "Failed to parse Mappaint styles from ''{0}''. Error was: {1}"
 msgstr ""
 
-msgid ""
-"Detected deprecated ''{0}'' in ''{1}'' which will be removed shortly. Use "
-"''{2}'' instead."
-msgstr ""
-
 msgid "Failed to locate image ''{0}''"
 msgstr ""
 
@@ -11894,6 +11903,9 @@ msgstr ""
 msgid "Show object ID in selection lists"
 msgstr ""
 
+msgid "Show node coordinates in selection lists"
+msgstr ""
+
 msgid "Show localized name in selection lists"
 msgstr ""
 
@@ -12650,9 +12662,6 @@ msgstr ""
 msgid "UTM"
 msgstr ""
 
-msgid "UTM Zone"
-msgstr ""
-
 msgid "North"
 msgstr ""
 
@@ -13120,9 +13129,6 @@ msgstr ""
 msgid "Error parsing {0}: "
 msgstr ""
 
-msgid "Presets"
-msgstr ""
-
 msgid "Search for objects by preset..."
 msgstr ""
 
@@ -15664,6 +15670,18 @@ msgstr ""
 msgid "korean"
 msgstr ""
 
+msgid "donut"
+msgstr ""
+
+msgid "mediterranean"
+msgstr ""
+
+msgid "friture"
+msgstr ""
+
+msgid "crepe"
+msgstr ""
+
 msgid "Internet access"
 msgstr ""
 
@@ -18506,7 +18524,16 @@ msgstr ""
 msgid "Tents allowed"
 msgstr ""
 
-msgid "Camping Site"
+msgid "Campsite"
+msgstr ""
+
+msgid "Caravans allowed"
+msgstr ""
+
+msgid "Backcountry"
+msgstr ""
+
+msgid "Group only access"
 msgstr ""
 
 msgid "Food+Drinks"
@@ -23335,6 +23362,14 @@ msgid ""
 "resolution or better, and refreshed more frequently with ongoing updates."
 msgstr ""
 
+msgid "DigitalGlobe Premium Imagery Vintage"
+msgstr ""
+
+msgid ""
+"Imagery boundaries and capture dates. Labels appear at zoom level 14 and "
+"higher."
+msgstr ""
+
 msgid "DigitalGlobe Standard Imagery"
 msgstr ""
 
@@ -23344,6 +23379,9 @@ msgid ""
 "Landsat. Average age is 2.31 years, with some areas updated 2x per year."
 msgstr ""
 
+msgid "DigitalGlobe Standard Imagery Vintage"
+msgstr ""
+
 msgid "Esri World Imagery"
 msgstr ""
 
@@ -23407,6 +23445,12 @@ msgstr ""
 msgid "Strava cycling and running heatmap"
 msgstr ""
 
+msgid "Strava water sports heatmap"
+msgstr ""
+
+msgid "Strava winter sports heatmap"
+msgstr ""
+
 msgid "Locator Overlay"
 msgstr ""
 
@@ -23811,6 +23855,9 @@ msgstr ""
 msgid "SPW(allonie) most recent aerial imagery"
 msgstr ""
 
+msgid "SPW(allonie) 2016 aerial imagery"
+msgstr ""
+
 msgid "SPW(allonie) 2015 aerial imagery"
 msgstr ""
 
@@ -23856,6 +23903,14 @@ msgstr ""
 msgid "Addresses data from IBGE"
 msgstr ""
 
+msgid "Street names IBGE Salvador-BA"
+msgstr ""
+
+msgid ""
+"Streets geometry and names of Salvador, Bahia. Source: Faces de Logradouro - "
+"IBGE."
+msgstr ""
+
 msgid "Rio Mosaic 2013"
 msgstr ""
 
@@ -24586,6 +24641,9 @@ msgstr ""
 msgid "Japan GSI ortho Imagery"
 msgstr ""
 
+msgid "Japan GSI Standard Map"
+msgstr ""
+
 msgid "imagico.de OSM images for mapping: Aral Sea (low water level)"
 msgstr ""
 
@@ -24615,7 +24673,7 @@ msgstr ""
 msgid "20cm ortho - Latvia - Coastline"
 msgstr ""
 
-msgid "1.cikla ortofotokarte - Latvia"
+msgid "Orthophoto 1st cycle (1994-1999) - Latvia"
 msgstr ""
 
 msgid "ORT10LT (Lithuania)"
@@ -24624,6 +24682,9 @@ msgstr ""
 msgid "geoportail.lu all layers"
 msgstr ""
 
+msgid "geoportail.lu ortho latest"
+msgstr ""
+
 msgid "geoportail.lu ortho 2016"
 msgstr ""
 
@@ -26114,6 +26175,9 @@ msgstr ""
 msgid "{0} on a node. Should be used on a way."
 msgstr ""
 
+msgid "{0} on a node. Should be used on a way or relation."
+msgstr ""
+
 msgid "{0} on a node. Should be drawn as an area."
 msgstr ""
 
@@ -26341,6 +26405,9 @@ msgstr ""
 msgid "Nodes duplicating parent way tags"
 msgstr ""
 
+msgid "{0} together with {1} and {2}. Remove {0}."
+msgstr ""
+
 msgid ""
 "wikipedia tag has no language given, use ''wikipedia''=''language:page "
 "title''"
@@ -27105,6 +27172,21 @@ msgstr ""
 msgid "Importing..."
 msgstr ""
 
+msgid "Shape is started incorrectly"
+msgstr ""
+
+msgid "Can''t load SVG diagram"
+msgstr ""
+
+msgid "Can''t find root SVG element"
+msgstr ""
+
+msgid "Import primitives"
+msgstr ""
+
+msgid "Cannot find configuration file!"
+msgstr ""
+
 msgid "DXF files [ImportDxf plugin] (*.dxf)"
 msgstr ""
 
@@ -27744,6 +27826,9 @@ msgstr ""
 msgid "Download mode"
 msgstr ""
 
+msgid "Number of images to be pre-fetched (forwards and backwards)"
+msgstr ""
+
 msgid "You are logged in as ''{0}''."
 msgstr ""
 
@@ -27954,8 +28039,17 @@ msgid "only when manually requested"
 msgstr ""
 
 msgid ""
-"The downloaded OSM area is too big. Download mode has been changed to OSM "
-"area until the layer is restarted."
+"The Mapillary layer has stopped downloading images, because the requested "
+"area is too big!"
+msgstr ""
+
+msgid ""
+"To solve this problem, you could zoom in and load a smaller area of the map."
+msgstr ""
+
+msgid ""
+"To solve this problem, you could switch to download mode ''{0}'' and load "
+"Mapillary images for a smaller portion of the map."
 msgstr ""
 
 msgid "Downloading"
@@ -31267,19 +31361,6 @@ msgstr ""
 msgid "Merge Overlap (combine)"
 msgstr ""
 
-msgid ""
-"<html>A role based relation membership was copied to all new ways.<br>You "
-"should verify this and correct it when necessary.</html>"
-msgstr ""
-
-msgid ""
-"<html>A relation membership was copied to all new ways.<br>You should verify "
-"this and correct it when necessary.</html>"
-msgstr ""
-
-msgid "Split way"
-msgstr ""
-
 msgid "Michigan Left"
 msgstr ""
 
@@ -32734,254 +32815,254 @@ msgstr ""
 msgid "PT: Route passes a oneway road in the wrong direction"
 msgstr ""
 
-msgid "moved"
+msgid "Create Stops from GTFS ..."
 msgstr ""
 
-msgid "rail"
+msgid "Create Stops from a GTFS file"
 msgstr ""
 
-msgid "Can''t parse a time from this string."
+msgid "Select GTFS file (stops.txt)"
 msgstr ""
 
-msgid "Invalid value"
+msgid "File \"{0}\" does not exist"
 msgstr ""
 
-msgid "added"
+msgid "IOException \"{0}\" occurred"
 msgstr ""
 
-msgid "Public Transport: Enable GTFSStops"
+msgid ""
+"There exists no dataset. Try to download data from the server or open an OSM "
+"file."
 msgstr ""
 
-msgid "Public Transport: Catch GTFS stops"
+msgid "No data found"
 msgstr ""
 
-msgid "skipped"
+msgid "The GTFS file was empty."
 msgstr ""
 
-msgid "Public Transport: Disable GTFS"
+msgid "[ID] {0}"
 msgstr ""
 
-msgid "Create Stops from GTFS ..."
+msgid "Route patterns ..."
 msgstr ""
 
-msgid "Create Stops from a GTFS file"
+msgid "Edit Route patterns for public transport"
 msgstr ""
 
-msgid "Select GTFS file (stops.txt)"
+msgid "Route Patterns"
 msgstr ""
 
-msgid "File \"{0}\" does not exist"
+msgid "Overview"
 msgstr ""
 
-msgid "IOException \"{0}\" occurred"
+msgid "Itinerary"
 msgstr ""
 
-msgid ""
-"There exists no dataset. Try to download data from the server or open an OSM "
-"file."
+msgid "Stops"
 msgstr ""
 
-msgid "No data found"
+msgid "Meta"
 msgstr ""
 
-msgid "The GTFS file was empty."
+msgid "Existing route patterns:"
 msgstr ""
 
-msgid "Create Stops from GTFS"
+msgid "Reflect"
 msgstr ""
 
-msgid "GTFS-Stops"
+msgid "Required tags:"
 msgstr ""
 
-msgid "Type of stops to add"
+msgid "Common tags:"
 msgstr ""
 
-msgid "Time on your GPS device"
+msgid "Additional tags:"
 msgstr ""
 
-msgid "HH:MM:SS.sss"
+msgid "Add a new Tag"
 msgstr ""
 
-msgid "Time on your stopwatch"
+msgid "Name/Id"
 msgstr ""
 
-msgid "Time window"
+msgid "Find"
 msgstr ""
 
-msgid "seconds"
+msgid "Show"
 msgstr ""
 
-msgid "Move Threshold"
+msgid "Mark"
 msgstr ""
 
-msgid "Suggest Stops"
+msgid "Ref"
 msgstr ""
 
-msgid "Find"
+msgid "Stops are possible on the"
 msgstr ""
 
-msgid "Show"
+msgid "right hand side"
 msgstr ""
 
-msgid "Mark"
+msgid "left hand side"
 msgstr ""
 
-msgid "Catch"
+msgid "Maximum distance from route"
 msgstr ""
 
-msgid "Join"
+msgid "Suggest Stops"
 msgstr ""
 
-msgid "Public Transport: Join GTFS stops"
+msgid "Create Stops from GPX ..."
 msgstr ""
 
-msgid "State"
+msgid "Create Stops from a GPX file"
 msgstr ""
 
-msgid "[incomplete]"
+msgid "Select GPX file"
 msgstr ""
 
-msgid "[empty way]"
+msgid "The GPX file contained no tracks or waypoints."
 msgstr ""
 
-msgid "[ID] {0}"
+msgid "moved"
 msgstr ""
 
-msgid "[gap]"
+msgid "added"
 msgstr ""
 
-msgid "Route patterns ..."
+msgid "Public Transport: Enable GTFSStops"
 msgstr ""
 
-msgid "Edit Route patterns for public transport"
+msgid "Public Transport: Catch GTFS stops"
 msgstr ""
 
-msgid "Route Patterns"
+msgid "skipped"
 msgstr ""
 
-msgid "Overview"
+msgid "Public Transport: Disable GTFS"
 msgstr ""
 
-msgid "Itinerary"
+msgid "Public Transport: Join GTFS stops"
 msgstr ""
 
-msgid "Stops"
+msgid "Public Transport: Change stop type"
 msgstr ""
 
-msgid "Meta"
+msgid "Public Transport: Add track stop"
 msgstr ""
 
-msgid "Existing route patterns:"
+msgid "Public Transport: Delete track stop"
 msgstr ""
 
-msgid "Reflect"
+msgid "Public Transport: Detach track stop list"
 msgstr ""
 
-msgid "Required tags:"
+msgid "Public Transport: Edit track stop list"
 msgstr ""
 
-msgid "Common tags:"
+msgid "Public Transport: Relocate nodes in track stoplist"
 msgstr ""
 
-msgid "Additional tags:"
+msgid "Public Transport: sort track stop list"
 msgstr ""
 
-msgid "Add a new Tag"
+msgid "Public Transport: Suggest stops"
 msgstr ""
 
-msgid "Name/Id"
+msgid "Public Transport: Detach waypoints"
 msgstr ""
 
-msgid "Ref"
+msgid "Public Transport: Disable waypoints"
 msgstr ""
 
-msgid "Stops are possible on the"
+msgid "Public Transport: Enable waypoints"
 msgstr ""
 
-msgid "right hand side"
+msgid "Public Transport: Edit waypoint name"
 msgstr ""
 
-msgid "left hand side"
+msgid "rail"
 msgstr ""
 
-msgid "Maximum distance from route"
+msgid "Can''t parse a time from this string."
 msgstr ""
 
-msgid " [ID] {0}"
+msgid "Invalid value"
 msgstr ""
 
-msgid "Public Transport: Change stop type"
+msgid "Create Stops from GTFS"
 msgstr ""
 
-msgid "Create Stops from GPX ..."
+msgid "GTFS-Stops"
 msgstr ""
 
-msgid "Create Stops from a GPX file"
+msgid "Type of stops to add"
 msgstr ""
 
-msgid "Select GPX file"
+msgid "Time on your GPS device"
 msgstr ""
 
-msgid "The GPX file contained no tracks or waypoints."
+msgid "HH:MM:SS.sss"
 msgstr ""
 
-msgid "Create Stops from GPX"
+msgid "Time on your stopwatch"
 msgstr ""
 
-msgid "Tracks in this GPX file:"
+msgid "Time window"
 msgstr ""
 
-msgid "Detach"
+msgid "seconds"
 msgstr ""
 
-msgid "implicit"
+msgid "Move Threshold"
 msgstr ""
 
-msgid ""
-"The GPX file doesn''t contain valid trackpoints. Please use a GPX file that "
-"has trackpoints."
+msgid "Catch"
 msgstr ""
 
-msgid "GPX File Trouble"
+msgid "Join"
 msgstr ""
 
-msgid "unnamed"
+msgid "Create Stops from GPX"
 msgstr ""
 
-msgid "Public Transport: Add track stop"
+msgid "Tracks in this GPX file:"
 msgstr ""
 
-msgid "Public Transport: Delete track stop"
+msgid "Detach"
 msgstr ""
 
-msgid "Public Transport: Detach track stop list"
+msgid "implicit"
 msgstr ""
 
-msgid "Public Transport: Edit track stop list"
+msgid "State"
 msgstr ""
 
-msgid "Public Transport: Relocate nodes in track stoplist"
+msgid "[incomplete]"
 msgstr ""
 
-msgid "Public Transport: sort track stop list"
+msgid "[empty way]"
 msgstr ""
 
-msgid "Public Transport: Suggest stops"
+msgid "[gap]"
 msgstr ""
 
 msgid "Stopname"
 msgstr ""
 
-msgid "Public Transport: Detach waypoints"
+msgid " [ID] {0}"
 msgstr ""
 
-msgid "Public Transport: Disable waypoints"
+msgid ""
+"The GPX file doesn''t contain valid trackpoints. Please use a GPX file that "
+"has trackpoints."
 msgstr ""
 
-msgid "Public Transport: Enable waypoints"
+msgid "GPX File Trouble"
 msgstr ""
 
-msgid "Public Transport: Edit waypoint name"
+msgid "unnamed"
 msgstr ""
 
 msgid "Distance between stops"
@@ -33710,6 +33791,9 @@ msgstr ""
 msgid "JOSM Tag Editor Plugin"
 msgstr ""
 
+msgid "Presets"
+msgstr ""
+
 msgid "Abort tag editing and close dialog"
 msgstr ""
 
@@ -35635,6 +35719,26 @@ msgid_plural "Overwrite ''{0}'' tags {1} from {2} with new value ''{3}''?"
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Download from Sophox API"
+msgstr ""
+
+msgid ""
+"Find places of education at least 2km, and at most 3km from the center of "
+"the selection"
+msgstr ""
+
+msgid "Show/hide Sophox snippet list"
+msgstr ""
+
+msgid "help"
+msgstr ""
+
+msgid "Server: "
+msgstr ""
+
+msgid "Wikidata+OSM server"
+msgstr ""
+
 msgid "Search Wikidata items"
 msgstr ""
 
@@ -35708,26 +35812,6 @@ msgid ""
 "objects"
 msgstr ""
 
-msgid "Download from Wikosm API"
-msgstr ""
-
-msgid ""
-"Find places of education at least 2km, and at most 3km from the center of "
-"the selection"
-msgstr ""
-
-msgid "Show/hide Wikosm snippet list"
-msgstr ""
-
-msgid "help"
-msgstr ""
-
-msgid "Server: "
-msgstr ""
-
-msgid "Wikidata+OSM server"
-msgstr ""
-
 msgid "The Ultimate WMS Super-speed Turbo Challenge II"
 msgstr ""
 
diff --git a/i18n/po/da.po b/i18n/po/da.po
index 62027ae..f95a1de 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-10-30 03:38+0100\n"
-"PO-Revision-Date: 2017-10-28 08:17+0000\n"
+"POT-Creation-Date: 2017-11-26 00:06+0100\n"
+"PO-Revision-Date: 2017-11-14 15:29+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-10-30 04:40+0000\n"
-"X-Generator: Launchpad (build 18493)\n"
+"X-Launchpad-Export-Date: 2017-11-26 04:40+0000\n"
+"X-Generator: Launchpad (build 18509)\n"
 "Language: da_DK\n"
 "X-Poedit-SourceCharset: utf-8\n"
 
@@ -452,12 +452,15 @@ msgstr "Slet lag"
 msgid "Delete the active layer. Does not delete the associated file."
 msgstr "Slet det aktive lag. Sletter ikke den tilknyttede fil."
 
-msgid "Toggle dialogs panel"
-msgstr "Vis/skjul dialog panel"
+msgid "Dialogs panel"
+msgstr ""
 
 msgid "Toggle dialogs panel, maximize mapview"
 msgstr "Vis/skjul dialog panel, maksimer kortvisning"
 
+msgid "Toggle dialogs panel"
+msgstr "Vis/skjul dialog panel"
+
 msgid "Distribute Nodes"
 msgstr "Fordel punkter"
 
@@ -6976,6 +6979,9 @@ msgstr "Koordinater: "
 msgid "Coordinates (projected): "
 msgstr "Koordinater (projekteret): "
 
+msgid "UTM Zone"
+msgstr "UTM Zone"
+
 msgid "Part of: "
 msgstr "Del af: "
 
@@ -9477,6 +9483,11 @@ msgstr "Tjek \"Upload\" for at uploade ændringerne til OSM serveren."
 msgid "Check \"Save\" to save the layer to the file specified on the left."
 msgstr "Tjek \"Gem\" for at gemme laget til filen angivet til venstre."
 
+msgid ""
+"A background upload is already in progress. Kindly wait for it to finish "
+"before uploading new changes"
+msgstr ""
+
 msgid "I would like someone to review my edits."
 msgstr "Jeg vil gerne have nogen til at gennemgå mine redigeringer."
 
@@ -10697,6 +10708,9 @@ msgstr "Skift projektionen igen eller fjern laget."
 msgid "Save Layer"
 msgstr "Gem lag"
 
+msgid "Trying to set a read only data layer as edit layer"
+msgstr ""
+
 msgid "{0} note"
 msgid_plural "{0} notes"
 msgstr[0] "{0} note"
@@ -11607,11 +11621,6 @@ msgstr "Kunne ikke indlæse korttegningsstile fra ''{0}''. Hændelse var: {1}"
 msgid "Failed to parse Mappaint styles from ''{0}''. Error was: {1}"
 msgstr "Kunne ikke fortolke korttegningsstile fra ''{0}''. Fejlen var: {1}"
 
-msgid ""
-"Detected deprecated ''{0}'' in ''{1}'' which will be removed shortly. Use "
-"''{2}'' instead."
-msgstr ""
-
 msgid "Failed to locate image ''{0}''"
 msgstr "Kunne ikke finde billedet \"{0}\""
 
@@ -12913,6 +12922,9 @@ msgstr "Vis startbillede ved opstart"
 msgid "Show object ID in selection lists"
 msgstr "Vis objekt-ID i markeringslister"
 
+msgid "Show node coordinates in selection lists"
+msgstr ""
+
 msgid "Show localized name in selection lists"
 msgstr "Vis lokaliseret navn i markeringslister"
 
@@ -13719,9 +13731,6 @@ msgstr "UTM geodætiske system"
 msgid "UTM"
 msgstr "UTM"
 
-msgid "UTM Zone"
-msgstr "UTM Zone"
-
 msgid "North"
 msgstr "Nord"
 
@@ -14232,9 +14241,6 @@ msgstr "Prædefineret under-element uden forælder"
 msgid "Error parsing {0}: "
 msgstr "Fejl ved fortolkning af {0}: "
 
-msgid "Presets"
-msgstr "Prædefinerede"
-
 msgid "Search for objects by preset..."
 msgstr "Søg efter objekter via prædefinerede..."
 
@@ -17091,6 +17097,18 @@ msgstr "vegetar"
 msgid "korean"
 msgstr "koreansk"
 
+msgid "donut"
+msgstr ""
+
+msgid "mediterranean"
+msgstr ""
+
+msgid "friture"
+msgstr ""
+
+msgid "crepe"
+msgstr ""
+
 msgid "Internet access"
 msgstr "Internetadgang"
 
@@ -19961,8 +19979,17 @@ msgstr "Strømforsyning"
 msgid "Tents allowed"
 msgstr "Telte tilladt"
 
-msgid "Camping Site"
-msgstr "Campingplads"
+msgid "Campsite"
+msgstr ""
+
+msgid "Caravans allowed"
+msgstr ""
+
+msgid "Backcountry"
+msgstr ""
+
+msgid "Group only access"
+msgstr ""
 
 msgid "Food+Drinks"
 msgstr "Mad og drikke"
@@ -24818,6 +24845,16 @@ msgstr ""
 "select regions filled with +Vivid or custom area of interest imagery, 50cm "
 "resolution or better, and refreshed more frequently with ongoing updates."
 
+msgid "DigitalGlobe Premium Imagery Vintage"
+msgstr "DigitalGlobe Premium Imagery Vintage"
+
+msgid ""
+"Imagery boundaries and capture dates. Labels appear at zoom level 14 and "
+"higher."
+msgstr ""
+"Imagery boundaries and capture dates. Labels appear at zoom level 14 and "
+"higher."
+
 msgid "DigitalGlobe Standard Imagery"
 msgstr "DigitalGlobe Standard Imagery"
 
@@ -24830,6 +24867,9 @@ msgstr ""
 "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."
 
+msgid "DigitalGlobe Standard Imagery Vintage"
+msgstr "DigitalGlobe Standard Imagery Vintage"
+
 msgid "Esri World Imagery"
 msgstr "Esri World Imagery"
 
@@ -24893,6 +24933,12 @@ msgstr "Strava running heatmap"
 msgid "Strava cycling and running heatmap"
 msgstr "Strava cycling and running heatmap"
 
+msgid "Strava water sports heatmap"
+msgstr "Strava water sports heatmap"
+
+msgid "Strava winter sports heatmap"
+msgstr "Strava winter sports heatmap"
+
 msgid "Locator Overlay"
 msgstr "Locator Overlay"
 
@@ -25306,6 +25352,9 @@ msgstr "SPW(allonie) PICC numerical imagery"
 msgid "SPW(allonie) most recent aerial imagery"
 msgstr "SPW(allonie) most recent aerial imagery"
 
+msgid "SPW(allonie) 2016 aerial imagery"
+msgstr "SPW(allonie) 2016 aerial imagery"
+
 msgid "SPW(allonie) 2015 aerial imagery"
 msgstr "SPW(allonie) 2015 aerial imagery"
 
@@ -25351,6 +25400,16 @@ msgstr "IBGE federal district"
 msgid "Addresses data from IBGE"
 msgstr "Addresses data from IBGE"
 
+msgid "Street names IBGE Salvador-BA"
+msgstr "Street names IBGE Salvador-BA"
+
+msgid ""
+"Streets geometry and names of Salvador, Bahia. Source: Faces de Logradouro - "
+"IBGE."
+msgstr ""
+"Streets geometry and names of Salvador, Bahia. Source: Faces de Logradouro - "
+"IBGE."
+
 msgid "Rio Mosaic 2013"
 msgstr "Rio Mosaic 2013"
 
@@ -26122,6 +26181,9 @@ msgstr "Topographical basemap of South Tyrol"
 msgid "Japan GSI ortho Imagery"
 msgstr "Japan GSI ortho Imagery"
 
+msgid "Japan GSI Standard Map"
+msgstr ""
+
 msgid "imagico.de OSM images for mapping: Aral Sea (low water level)"
 msgstr "imagico.de OSM images for mapping: Aral Sea (low water level)"
 
@@ -26153,8 +26215,8 @@ msgstr "50cm ortho - Latvia"
 msgid "20cm ortho - Latvia - Coastline"
 msgstr "20cm ortho - Latvia - Coastline"
 
-msgid "1.cikla ortofotokarte - Latvia"
-msgstr "1.cikla ortofotokarte - Latvia"
+msgid "Orthophoto 1st cycle (1994-1999) - Latvia"
+msgstr ""
 
 msgid "ORT10LT (Lithuania)"
 msgstr "ORT10LT (Lithuania)"
@@ -26162,8 +26224,11 @@ msgstr "ORT10LT (Lithuania)"
 msgid "geoportail.lu all layers"
 msgstr "geoportail.lu all layers"
 
+msgid "geoportail.lu ortho latest"
+msgstr ""
+
 msgid "geoportail.lu ortho 2016"
-msgstr "geoportail.lu ortho 2016"
+msgstr ""
 
 msgid "Luxembourg Inspire Railway"
 msgstr "Luxembourg Inspire Railway"
@@ -27857,6 +27922,9 @@ msgstr "forkert værdi: {0}"
 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 ""
+
 msgid "{0} on a node. Should be drawn as an area."
 msgstr "{0} på et punkt. Bør tegnes som et område."
 
@@ -28100,6 +28168,9 @@ msgstr "{0} giver ingen mening"
 msgid "Nodes duplicating parent way tags"
 msgstr "Punkter der duplikerer \"forældre\"-vej tags"
 
+msgid "{0} together with {1} and {2}. Remove {0}."
+msgstr "{0} sammen med {1} og {2}. Fjern {0}."
+
 msgid ""
 "wikipedia tag has no language given, use ''wikipedia''=''language:page "
 "title''"
@@ -29026,6 +29097,21 @@ msgstr "Uploader GPX-spor til openstreetmap.org"
 msgid "Importing..."
 msgstr "Importerer..."
 
+msgid "Shape is started incorrectly"
+msgstr ""
+
+msgid "Can''t load SVG diagram"
+msgstr ""
+
+msgid "Can''t find root SVG element"
+msgstr ""
+
+msgid "Import primitives"
+msgstr ""
+
+msgid "Cannot find configuration file!"
+msgstr ""
+
 msgid "DXF files [ImportDxf plugin] (*.dxf)"
 msgstr "DXF filer [ImportDxf udvidelse] (*.dxf)"
 
@@ -29687,6 +29773,9 @@ msgstr "Aktiver eksperimentelle beta-funktioner (muligvis ustabil)"
 msgid "Download mode"
 msgstr "Download tilstand"
 
+msgid "Number of images to be pre-fetched (forwards and backwards)"
+msgstr "Antal billeder der skal hentes (frem og tilbage)"
+
 msgid "You are logged in as ''{0}''."
 msgstr "Du er logget ind som ''{0}''."
 
@@ -29911,11 +30000,24 @@ msgid "only when manually requested"
 msgstr "kun ved manuel anmodet"
 
 msgid ""
-"The downloaded OSM area is too big. Download mode has been changed to OSM "
-"area until the layer is restarted."
+"The Mapillary layer has stopped downloading images, because the requested "
+"area is too big!"
+msgstr ""
+"Mapillary laget er stoppet med at downloade billeder, fordi det ønskede "
+"område er for stort!"
+
+msgid ""
+"To solve this problem, you could zoom in and load a smaller area of the map."
+msgstr ""
+"For at løse dette problem kan du zoome ind og indlæse et mindre område på "
+"kortet."
+
+msgid ""
+"To solve this problem, you could switch to download mode ''{0}'' and load "
+"Mapillary images for a smaller portion of the map."
 msgstr ""
-"Det downloadede OSM-område er for stort. Download tilstand er blevet ændret "
-"til OSM område indtil laget genstartes."
+"For at løse dette problem kan du skifte til download mode ''{0}'' og indlæse "
+"Mapillary billeder for en mindre del af kortet."
 
 msgid "Downloading"
 msgstr "Downloader"
@@ -33513,23 +33615,6 @@ msgstr "Læg overlappende veje sammen"
 msgid "Merge Overlap (combine)"
 msgstr "Læg overlapning sammen (kombinerer)"
 
-msgid ""
-"<html>A role based relation membership was copied to all new ways.<br>You "
-"should verify this and correct it when necessary.</html>"
-msgstr ""
-"<html>Et rollebaseret relationsmedlemskab blev kopieret til alle nye "
-"veje.<br>Du bør kontrollere dette og om nødvendigt korrigere det.</html>"
-
-msgid ""
-"<html>A relation membership was copied to all new ways.<br>You should verify "
-"this and correct it when necessary.</html>"
-msgstr ""
-"<html>Et relationsmedlemskab blev kopieret til alle nye veje.<br>Du bør "
-"kontrollere dette og om nødvendigt korrigere det.</html>"
-
-msgid "Split way"
-msgstr "Opdel vej"
-
 msgid "Michigan Left"
 msgstr "Michigan venstre"
 
@@ -35064,33 +35149,6 @@ msgstr "OT: Vej er under udførelse"
 msgid "PT: Route passes a oneway road in the wrong direction"
 msgstr "OT: Rute passerer en ensrettet vej i den forkerte retning"
 
-msgid "moved"
-msgstr "flyttet"
-
-msgid "rail"
-msgstr "strømskinne"
-
-msgid "Can''t parse a time from this string."
-msgstr "Kan ikke fortolke en tid fra denne streng."
-
-msgid "Invalid value"
-msgstr "Ugyldig værdi"
-
-msgid "added"
-msgstr "tilføjet"
-
-msgid "Public Transport: Enable GTFSStops"
-msgstr "Offentligt transport: Aktiver GTFSStops"
-
-msgid "Public Transport: Catch GTFS stops"
-msgstr "Offentligt transport: Opfang GTFS stop"
-
-msgid "skipped"
-msgstr "sprunget over"
-
-msgid "Public Transport: Disable GTFS"
-msgstr "Offentlig transport: Deaktiver GTFS"
-
 msgid "Create Stops from GTFS ..."
 msgstr "Opret stop fra GTFS ..."
 
@@ -35119,69 +35177,9 @@ msgstr "Ingen data fundet"
 msgid "The GTFS file was empty."
 msgstr "GTFS filen var tom."
 
-msgid "Create Stops from GTFS"
-msgstr "Opret stop fra GTFS"
-
-msgid "GTFS-Stops"
-msgstr "GTFS-stop"
-
-msgid "Type of stops to add"
-msgstr "Type stop der skal tilføjes"
-
-msgid "Time on your GPS device"
-msgstr "Tid på din GPS enhed"
-
-msgid "HH:MM:SS.sss"
-msgstr "TT:MM:SS.sss"
-
-msgid "Time on your stopwatch"
-msgstr "Tid på dit stopur"
-
-msgid "Time window"
-msgstr "Tidsvindue"
-
-msgid "seconds"
-msgstr "sekunder"
-
-msgid "Move Threshold"
-msgstr "Grænseværdi for bevægelse"
-
-msgid "Suggest Stops"
-msgstr "Foreslå stoppesteder"
-
-msgid "Find"
-msgstr "Find"
-
-msgid "Show"
-msgstr "Vis"
-
-msgid "Mark"
-msgstr "Marker"
-
-msgid "Catch"
-msgstr "Opfang"
-
-msgid "Join"
-msgstr "Sammenlæg"
-
-msgid "Public Transport: Join GTFS stops"
-msgstr "Offentlig transport: Sammenlæg GTFS stop"
-
-msgid "State"
-msgstr "Stat"
-
-msgid "[incomplete]"
-msgstr "[ufuldstændig]"
-
-msgid "[empty way]"
-msgstr "[tom vej]"
-
 msgid "[ID] {0}"
 msgstr "[ID] {0}"
 
-msgid "[gap]"
-msgstr "[mellemrum]"
-
 msgid "Route patterns ..."
 msgstr "Rutemønstre ..."
 
@@ -35224,6 +35222,15 @@ msgstr "Tilføj en ny tag"
 msgid "Name/Id"
 msgstr "Navn/Id"
 
+msgid "Find"
+msgstr "Find"
+
+msgid "Show"
+msgstr "Vis"
+
+msgid "Mark"
+msgstr "Marker"
+
 msgid "Ref"
 msgstr "Ref"
 
@@ -35239,11 +35246,8 @@ msgstr "venstre side"
 msgid "Maximum distance from route"
 msgstr "Maksimal afstand fra ruten"
 
-msgid " [ID] {0}"
-msgstr " [ID] {0}"
-
-msgid "Public Transport: Change stop type"
-msgstr "Offentlig Transport: Skift stop type"
+msgid "Suggest Stops"
+msgstr "Foreslå stoppesteder"
 
 msgid "Create Stops from GPX ..."
 msgstr "Opret stop fra GPX ..."
@@ -35257,30 +35261,29 @@ msgstr "Vælg GPX fil"
 msgid "The GPX file contained no tracks or waypoints."
 msgstr "GPX filen indeholdt ikke nogen spor eller waypoints."
 
-msgid "Create Stops from GPX"
-msgstr "Opret stop fra GPX"
+msgid "moved"
+msgstr "flyttet"
 
-msgid "Tracks in this GPX file:"
-msgstr "Spor i denne GPX fil:"
+msgid "added"
+msgstr "tilføjet"
 
-msgid "Detach"
-msgstr "Frigør"
+msgid "Public Transport: Enable GTFSStops"
+msgstr "Offentligt transport: Aktiver GTFSStops"
 
-msgid "implicit"
-msgstr "underforstået"
+msgid "Public Transport: Catch GTFS stops"
+msgstr "Offentligt transport: Opfang GTFS stop"
 
-msgid ""
-"The GPX file doesn''t contain valid trackpoints. Please use a GPX file that "
-"has trackpoints."
-msgstr ""
-"GPX filen indeholder ikke gyldige sporpunkter. Brug en GPX fil der har "
-"sporpunkter."
+msgid "skipped"
+msgstr "sprunget over"
 
-msgid "GPX File Trouble"
-msgstr "GPX fil-problem"
+msgid "Public Transport: Disable GTFS"
+msgstr "Offentlig transport: Deaktiver GTFS"
 
-msgid "unnamed"
-msgstr "unavngivet"
+msgid "Public Transport: Join GTFS stops"
+msgstr "Offentlig transport: Sammenlæg GTFS stop"
+
+msgid "Public Transport: Change stop type"
+msgstr "Offentlig Transport: Skift stop type"
 
 msgid "Public Transport: Add track stop"
 msgstr "Offentlig transport: Tilføj spor stop"
@@ -35303,9 +35306,6 @@ msgstr "Offentlig transport: Sortering af spor stop liste"
 msgid "Public Transport: Suggest stops"
 msgstr "Offentlig transport: Foreslå stop"
 
-msgid "Stopname"
-msgstr "Stopnavn"
-
 msgid "Public Transport: Detach waypoints"
 msgstr "Offentlig transport: Frigør waypoints"
 
@@ -35318,6 +35318,91 @@ msgstr "Offentlig transport: Aktiver waypoints"
 msgid "Public Transport: Edit waypoint name"
 msgstr "Offentlig transport: Rediger waypoint-navn"
 
+msgid "rail"
+msgstr "strømskinne"
+
+msgid "Can''t parse a time from this string."
+msgstr "Kan ikke fortolke en tid fra denne streng."
+
+msgid "Invalid value"
+msgstr "Ugyldig værdi"
+
+msgid "Create Stops from GTFS"
+msgstr "Opret stop fra GTFS"
+
+msgid "GTFS-Stops"
+msgstr "GTFS-stop"
+
+msgid "Type of stops to add"
+msgstr "Type stop der skal tilføjes"
+
+msgid "Time on your GPS device"
+msgstr "Tid på din GPS enhed"
+
+msgid "HH:MM:SS.sss"
+msgstr "TT:MM:SS.sss"
+
+msgid "Time on your stopwatch"
+msgstr "Tid på dit stopur"
+
+msgid "Time window"
+msgstr "Tidsvindue"
+
+msgid "seconds"
+msgstr "sekunder"
+
+msgid "Move Threshold"
+msgstr "Grænseværdi for bevægelse"
+
+msgid "Catch"
+msgstr "Opfang"
+
+msgid "Join"
+msgstr "Sammenlæg"
+
+msgid "Create Stops from GPX"
+msgstr "Opret stop fra GPX"
+
+msgid "Tracks in this GPX file:"
+msgstr "Spor i denne GPX fil:"
+
+msgid "Detach"
+msgstr "Frigør"
+
+msgid "implicit"
+msgstr "underforstået"
+
+msgid "State"
+msgstr "Stat"
+
+msgid "[incomplete]"
+msgstr "[ufuldstændig]"
+
+msgid "[empty way]"
+msgstr "[tom vej]"
+
+msgid "[gap]"
+msgstr "[mellemrum]"
+
+msgid "Stopname"
+msgstr "Stopnavn"
+
+msgid " [ID] {0}"
+msgstr " [ID] {0}"
+
+msgid ""
+"The GPX file doesn''t contain valid trackpoints. Please use a GPX file that "
+"has trackpoints."
+msgstr ""
+"GPX filen indeholder ikke gyldige sporpunkter. Brug en GPX fil der har "
+"sporpunkter."
+
+msgid "GPX File Trouble"
+msgstr "GPX fil-problem"
+
+msgid "unnamed"
+msgstr "unavngivet"
+
 msgid "Distance between stops"
 msgstr "Afstand mellem stop"
 
@@ -36076,6 +36161,9 @@ msgstr "Starter tag-redigeringsdialogen"
 msgid "JOSM Tag Editor Plugin"
 msgstr "JOSM tag-editor-udvidelse"
 
+msgid "Presets"
+msgstr "Prædefinerede"
+
 msgid "Abort tag editing and close dialog"
 msgstr "Afbryd tag redigering og luk dialog"
 
@@ -38179,6 +38267,27 @@ msgid_plural "Overwrite ''{0}'' tags {1} from {2} with new value ''{3}''?"
 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 ""
+
+msgid ""
+"Find places of education at least 2km, and at most 3km from the center of "
+"the selection"
+msgstr ""
+"Find uddannelsessteder mindst 2 km og højst 3 km fra centrum af udvælgelsen"
+
+msgid "Show/hide Sophox snippet list"
+msgstr ""
+
+msgid "help"
+msgstr "hjælp"
+
+msgid "Server: "
+msgstr "Server: "
+
+msgid "Wikidata+OSM server"
+msgstr "Wikidata+OSM server"
+
 msgid "Search Wikidata items"
 msgstr "Søg Wikidata emner"
 
@@ -38256,27 +38365,6 @@ msgstr ""
 "Tilføjer et \"wikipedia\" tag svarende til denne artikel til de markerede "
 "objekter"
 
-msgid "Download from Wikosm API"
-msgstr "Download fra Wikosm API"
-
-msgid ""
-"Find places of education at least 2km, and at most 3km from the center of "
-"the selection"
-msgstr ""
-"Find uddannelsessteder mindst 2 km og højst 3 km fra centrum af udvælgelsen"
-
-msgid "Show/hide Wikosm snippet list"
-msgstr "Vis/skjul Wikosm uddragsliste"
-
-msgid "help"
-msgstr "hjælp"
-
-msgid "Server: "
-msgstr "Server: "
-
-msgid "Wikidata+OSM server"
-msgstr "Wikidata+OSM server"
-
 msgid "The Ultimate WMS Super-speed Turbo Challenge II"
 msgstr "Den ultimative WMS super-hastigheds Turbo prøvelse II"
 
diff --git a/i18n/po/de.po b/i18n/po/de.po
index 24fc378..42b724f 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-10-30 03:38+0100\n"
-"PO-Revision-Date: 2017-10-29 18:20+0000\n"
-"Last-Translator: Klumbumbus <Unknown>\n"
+"POT-Creation-Date: 2017-11-26 00:06+0100\n"
+"PO-Revision-Date: 2017-11-25 21:53+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-10-30 04:44+0000\n"
-"X-Generator: Launchpad (build 18493)\n"
+"X-Launchpad-Export-Date: 2017-11-26 04:44+0000\n"
+"X-Generator: Launchpad (build 18509)\n"
 "Language: de\n"
 "X-Poedit-SearchPath-0: .\n"
 "X-Poedit-Basepath: /home/simon/src/josm.all/i18n\n"
@@ -459,12 +459,15 @@ msgstr "Ebene löschen"
 msgid "Delete the active layer. Does not delete the associated file."
 msgstr "Aktive Ebene löschen. Löscht nicht die zugehörige Datei."
 
-msgid "Toggle dialogs panel"
-msgstr "Dialogbedienfeld umschalten"
+msgid "Dialogs panel"
+msgstr "Dialogbedienfeld"
 
 msgid "Toggle dialogs panel, maximize mapview"
 msgstr "Dialogbedienfeld umschalten, Kartenanzeige maximieren"
 
+msgid "Toggle dialogs panel"
+msgstr "Dialogbedienfeld umschalten"
+
 msgid "Distribute Nodes"
 msgstr "Punkte verteilen"
 
@@ -4223,7 +4226,7 @@ msgid "Lat/lon (Geodetic)"
 msgstr "Breitengrad/Längengrad (geodätisch)"
 
 msgid "Mercator"
-msgstr "Merkator"
+msgstr "Mercator"
 
 msgid "Oblique Mercator"
 msgstr "Schiefachsige Mercator"
@@ -4250,7 +4253,7 @@ msgid "Swiss Oblique Mercator"
 msgstr "Schweizer schiefachsige Mercator"
 
 msgid "Transverse Mercator"
-msgstr "Transversal Mercator"
+msgstr "Transversale Mercator"
 
 msgid ""
 "Error initializing test {0}:\n"
@@ -5696,7 +5699,7 @@ msgstr ""
 "Werkzeugleiste) um"
 
 msgid "Edit toolbar"
-msgstr "Werkzeugleiste bearbeiten"
+msgstr "Arbeitswerkzeugleiste"
 
 msgid "Toggles the visibility of the edit toolbar (i.e., the vertical tool)"
 msgstr "Werkzeugleiste »Bearbeiten« (senkrechtes Werkzeug) ein-/ausblenden"
@@ -7154,6 +7157,9 @@ msgstr "Koordinaten: "
 msgid "Coordinates (projected): "
 msgstr "Koordinaten (projiziert): "
 
+msgid "UTM Zone"
+msgstr "UTM Zone"
+
 msgid "Part of: "
 msgstr "Teil von: "
 
@@ -7640,7 +7646,7 @@ msgid "Lookup"
 msgstr "Nachschlagen"
 
 msgid "Looks up the selected primitives in the error list."
-msgstr "Sucht nach den ausgewählten Primitiven in der Fehlerliste."
+msgstr "Sucht nach den ausgewählten Objekten in der Fehlerliste."
 
 msgid "Fix"
 msgstr "Reparieren"
@@ -9748,6 +9754,13 @@ msgstr ""
 "Haken Sie \"Speichern\" an, um die Ebene in der auf der linken Seite "
 "angegebenen Datei zu speichern."
 
+msgid ""
+"A background upload is already in progress. Kindly wait for it to finish "
+"before uploading new changes"
+msgstr ""
+"Ein Hintergrund-Hochladeprozess läuft bereits. Bitte warten Sie bis dieser "
+"fertig ist, bevor Sie neue Änderungen hochladen"
+
 msgid "I would like someone to review my edits."
 msgstr "Ich möchte, dass jemand meine Bearbeitungen überprüft."
 
@@ -11014,6 +11027,10 @@ msgstr "Ändern Sie die Projektion erneut oder entfernen Sie die Ebene."
 msgid "Save Layer"
 msgstr "Ebene speichern"
 
+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 "{0} note"
 msgid_plural "{0} notes"
 msgstr[0] "{0} Hinweis"
@@ -11943,11 +11960,6 @@ msgstr ""
 msgid "Failed to parse Mappaint styles from ''{0}''. Error was: {1}"
 msgstr "Kartenstile in ''{0}'' enthalten Fehler: {1}"
 
-msgid ""
-"Detected deprecated ''{0}'' in ''{1}'' which will be removed shortly. Use "
-"''{2}'' instead."
-msgstr ""
-
 msgid "Failed to locate image ''{0}''"
 msgstr "Fehler beim Laden des Bildes ''{0}''"
 
@@ -13295,6 +13307,9 @@ msgstr "Begrüßungsbildschirm beim Start anzeigen"
 msgid "Show object ID in selection lists"
 msgstr "Objektkennung in Auswahllisten anzeigen"
 
+msgid "Show node coordinates in selection lists"
+msgstr "Knotenkoordinaten in Auswahllisten anzeigen"
+
 msgid "Show localized name in selection lists"
 msgstr "Übersetzte Namen in Auswahllisten anzeigen"
 
@@ -14055,7 +14070,7 @@ msgid "Lambert 93 (France)"
 msgstr "Lambert 93 (Frankreich)"
 
 msgid "LKS-92 (Latvia TM)"
-msgstr "LKS-92 (Latvia TM)"
+msgstr "LKS-92 (Lettland Transversale Mercator)"
 
 msgid "Rijksdriehoekscoördinaten (Netherlands)"
 msgstr "Reichsdreieckskoordinaten (Niederlande)"
@@ -14099,7 +14114,7 @@ msgid "PUWG 2000 Zone {0} (Poland)"
 msgstr "PUWG-2000-Zone {0} (Polen)"
 
 msgid "PUWG (Poland)"
-msgstr "PUWG (polen)"
+msgstr "PUWG (Polen)"
 
 msgid "PUWG Zone"
 msgstr "PUWG-Zone"
@@ -14134,9 +14149,6 @@ msgstr "Geodätisches System UTM"
 msgid "UTM"
 msgstr "UTM"
 
-msgid "UTM Zone"
-msgstr "UTM Zone"
-
 msgid "North"
 msgstr "Nord"
 
@@ -14666,9 +14678,6 @@ msgstr "Vorlagenelement ohne Elternelement"
 msgid "Error parsing {0}: "
 msgstr "Fehler beim Einlesen von {0}: "
 
-msgid "Presets"
-msgstr "Vorlagen"
-
 msgid "Search for objects by preset..."
 msgstr "Nach Objekten durch Voreinstellung suchen..."
 
@@ -17638,6 +17647,18 @@ msgstr "vegetarisch"
 msgid "korean"
 msgstr "koreanisch"
 
+msgid "donut"
+msgstr "Donut"
+
+msgid "mediterranean"
+msgstr "mediterran"
+
+msgid "friture"
+msgstr "holländische und belgische Chips"
+
+msgid "crepe"
+msgstr "Crêpe"
+
 msgid "Internet access"
 msgstr "Internetzugang"
 
@@ -20518,9 +20539,18 @@ msgstr "Stromversorgung"
 msgid "Tents allowed"
 msgstr "Zelte erlaubt"
 
-msgid "Camping Site"
+msgid "Campsite"
 msgstr "Campingplatz"
 
+msgid "Caravans allowed"
+msgstr "Wohnmobile erlaubt"
+
+msgid "Backcountry"
+msgstr "Wildnis Campingplatz"
+
+msgid "Group only access"
+msgstr "Nur für Gruppen"
+
 msgid "Food+Drinks"
 msgstr "Essen & Trinken"
 
@@ -25381,6 +25411,16 @@ msgstr ""
 "mit ausgewählten Regionen gefüllt mit +Vivid oder benutzerdefinierten "
 "Flächen mit Interessebildern."
 
+msgid "DigitalGlobe Premium Imagery Vintage"
+msgstr "DigitalGlobe Premium Luftbilder Klassisch"
+
+msgid ""
+"Imagery boundaries and capture dates. Labels appear at zoom level 14 and "
+"higher."
+msgstr ""
+"Bildgrenzen und Aufnahmedaten. Beschriftungen werden ab Zoomstufe 14 "
+"angezeigt."
+
 msgid "DigitalGlobe Standard Imagery"
 msgstr "DigitalGlobe Standard Luftbilder"
 
@@ -25394,6 +25434,9 @@ msgstr ""
 "zurückgefüllt von Landsat. Das Durchschnittsalter ist 2.31 Jahre mit einigen "
 "Flächen welche 2x pro Jahr aktualisiert werden."
 
+msgid "DigitalGlobe Standard Imagery Vintage"
+msgstr "DigitalGlobe Standard Luftbilder Klassisch"
+
 msgid "Esri World Imagery"
 msgstr "Esri Luftbilder"
 
@@ -25457,6 +25500,12 @@ msgstr "Strava Laufsport-Heatmap"
 msgid "Strava cycling and running heatmap"
 msgstr "Strava Radfahr- und Laufsport-Heatmap"
 
+msgid "Strava water sports heatmap"
+msgstr "Strava Wassersport-Heatmap"
+
+msgid "Strava winter sports heatmap"
+msgstr "Strava Wintersport-Heatmap"
+
 msgid "Locator Overlay"
 msgstr "Positionsanzeiger-Einblendung"
 
@@ -25881,6 +25930,9 @@ msgstr "SPW (Wallonie) PICC-(Haus-)Nummernkarten"
 msgid "SPW(allonie) most recent aerial imagery"
 msgstr "SPW (Wallonie) neueste Luftbilder"
 
+msgid "SPW(allonie) 2016 aerial imagery"
+msgstr "SPW (Wallonie) 2016 Luftbilder"
+
 msgid "SPW(allonie) 2015 aerial imagery"
 msgstr "SPW (Wallonie) 2015 Luftbilder"
 
@@ -25927,6 +25979,16 @@ msgstr "IBGE Bundesdistrikt"
 msgid "Addresses data from IBGE"
 msgstr "Adressdaten von IBGE"
 
+msgid "Street names IBGE Salvador-BA"
+msgstr "Straßennamen IBGE Salvador-BA"
+
+msgid ""
+"Streets geometry and names of Salvador, Bahia. Source: Faces de Logradouro - "
+"IBGE."
+msgstr ""
+"Straßengeometrie und -namen von Salvador, Bahia. Quelle: Faces de Logradouro "
+"- IBGE."
+
 msgid "Rio Mosaic 2013"
 msgstr "Rio de Janeiro 2013"
 
@@ -26708,6 +26770,9 @@ msgstr "Topografische Basiskarte von Südtirol"
 msgid "Japan GSI ortho Imagery"
 msgstr "Japan GSI Luftbild"
 
+msgid "Japan GSI Standard Map"
+msgstr "Japan GSI Standardkarte"
+
 msgid "imagico.de OSM images for mapping: Aral Sea (low water level)"
 msgstr "imagico.de OSM Bilder für Mapping: Aralsee (niedriger Wasserstand)"
 
@@ -26739,8 +26804,8 @@ msgstr "50cm Orthofoto - Lettland"
 msgid "20cm ortho - Latvia - Coastline"
 msgstr "20cm Orthofoto - Lettland - Küstenlinie"
 
-msgid "1.cikla ortofotokarte - Latvia"
-msgstr "1. Version Orthophoto - Litauen"
+msgid "Orthophoto 1st cycle (1994-1999) - Latvia"
+msgstr "Orthofoto 1. Zyklus (1994-1999) - Lettland"
 
 msgid "ORT10LT (Lithuania)"
 msgstr "ORT10LT (Litauen)"
@@ -26748,8 +26813,11 @@ msgstr "ORT10LT (Litauen)"
 msgid "geoportail.lu all layers"
 msgstr "geoportail.lu alle Ebenen"
 
+msgid "geoportail.lu ortho latest"
+msgstr "geoportail.lu neueste Orthofotos"
+
 msgid "geoportail.lu ortho 2016"
-msgstr "geoportail.lu Orthophoto 2016"
+msgstr "geoportail.lu Orthofoto 2016"
 
 msgid "Luxembourg Inspire Railway"
 msgstr "Luxembourg Inspire Railway"
@@ -28482,6 +28550,10 @@ msgstr "falscher Wert: {0}"
 msgid "{0} on a node. Should be used on a way."
 msgstr "{0} auf einem Punkt. Sollte auf einer Linie verwendet werden."
 
+msgid "{0} on a node. Should be used on a way or relation."
+msgstr ""
+"{0} auf einem Punkt. Sollte auf einer Linie oder Relation verwendet werden."
+
 msgid "{0} on a node. Should be drawn as an area."
 msgstr "{0} auf einem Punkt. Sollte als eine Fläche gezeichnet werden."
 
@@ -28729,6 +28801,9 @@ msgstr "{0} ergibt keinen Sinn"
 msgid "Nodes duplicating parent way tags"
 msgstr "Punkte verdoppeln Merkmale der Elternlinie"
 
+msgid "{0} together with {1} and {2}. Remove {0}."
+msgstr "{0} zusammen mit {1} und {2}. {0} entfernen."
+
 msgid ""
 "wikipedia tag has no language given, use ''wikipedia''=''language:page "
 "title''"
@@ -29687,6 +29762,21 @@ msgstr "GPS-Spuren zu openstreetmap.org hochladen"
 msgid "Importing..."
 msgstr "Importieren …"
 
+msgid "Shape is started incorrectly"
+msgstr "Form beginnt falsch"
+
+msgid "Can''t load SVG diagram"
+msgstr "Kann SVG-Diagramm nicht laden"
+
+msgid "Can''t find root SVG element"
+msgstr "Kann SVG-Wurzelelement nicht finden"
+
+msgid "Import primitives"
+msgstr "Objekte importieren"
+
+msgid "Cannot find configuration file!"
+msgstr "Kann Konfigurationsdatei nicht finden!"
+
 msgid "DXF files [ImportDxf plugin] (*.dxf)"
 msgstr "DXF-Dateien [ImportDxfPlugin] (*.dxf)"
 
@@ -30352,6 +30442,9 @@ msgstr "Experimentelle Beta-Funktionalität aktivieren (kann instabil sein)"
 msgid "Download mode"
 msgstr "Herunterlademodus"
 
+msgid "Number of images to be pre-fetched (forwards and backwards)"
+msgstr "Anzahl der vorab abzurufenden Bilder (vorwärts und rückwärts)"
+
 msgid "You are logged in as ''{0}''."
 msgstr "Sie sind als ''{0}'' angemeldet."
 
@@ -30583,11 +30676,24 @@ msgid "only when manually requested"
 msgstr "nur wenn manuell angefordert"
 
 msgid ""
-"The downloaded OSM area is too big. Download mode has been changed to OSM "
-"area until the layer is restarted."
+"The Mapillary layer has stopped downloading images, because the requested "
+"area is too big!"
 msgstr ""
-"Das heruntergeladene OSM-Gebiet ist zu groß. Herunterlademodus wurde auf OSM-"
-"Gebiet geändert, bis die Ebene neu gestartet wird."
+"Die Mapillary-Ebene hat das Herunterladen von Bildern gestoppt, weil der "
+"angeforderte Bereich zu groß ist!"
+
+msgid ""
+"To solve this problem, you could zoom in and load a smaller area of the map."
+msgstr ""
+"Um dieses Problem zu lösen, können Sie einen kleineren Ausschnitt der Karte "
+"vergrößern und laden."
+
+msgid ""
+"To solve this problem, you could switch to download mode ''{0}'' and load "
+"Mapillary images for a smaller portion of the map."
+msgstr ""
+"Um dieses Problem zu lösen, können Sie in den Herunterlademodus ''{0}'' "
+"wechseln und Mapillary-Bilder für einen kleineren Teil der Karte laden."
 
 msgid "Downloading"
 msgstr "Wird heruntergeladen"
@@ -34266,23 +34372,6 @@ msgstr "Überlappung von Linien vereinigen"
 msgid "Merge Overlap (combine)"
 msgstr "Überlappung vereinigen (kombinieren)"
 
-msgid ""
-"<html>A role based relation membership was copied to all new ways.<br>You "
-"should verify this and correct it when necessary.</html>"
-msgstr ""
-"<html>Eine rollenbasierte Relationsmitgliedschaft wurde in alle neuen Linien "
-"kopiert.<br>Sie sollten dies überprüfen und falls nötig korrigieren.</html>"
-
-msgid ""
-"<html>A relation membership was copied to all new ways.<br>You should verify "
-"this and correct it when necessary.</html>"
-msgstr ""
-"<html>Alle neuen Linien wurden als Elemente in einer Relation "
-"eingefügt.<br>Sie sollten dies überprüfen und falls nötig korrigieren.</html>"
-
-msgid "Split way"
-msgstr "Linie teilen"
-
 msgid "Michigan Left"
 msgstr "Michigan Left"
 
@@ -35855,33 +35944,6 @@ msgstr "ÖV: Straße ist im Bau"
 msgid "PT: Route passes a oneway road in the wrong direction"
 msgstr "ÖV: Route führt in falscher Richtung über eine Einbahnstraße"
 
-msgid "moved"
-msgstr "verschoben"
-
-msgid "rail"
-msgstr "Eisenbahn"
-
-msgid "Can''t parse a time from this string."
-msgstr "Von dieser Zeichenkette konnte keine Uhrzeit geparst werden."
-
-msgid "Invalid value"
-msgstr "Ungültiger Wert"
-
-msgid "added"
-msgstr "hinzugefügt"
-
-msgid "Public Transport: Enable GTFSStops"
-msgstr "Öffentlicher Verkehr: GTFS-Haltestellen aktivieren"
-
-msgid "Public Transport: Catch GTFS stops"
-msgstr "Öffentlicher Verkehr: GTFS-Haltestellen erfassen"
-
-msgid "skipped"
-msgstr "übersprungen"
-
-msgid "Public Transport: Disable GTFS"
-msgstr "Öffentlicher Verkehr: GTFS-Haltestellen deaktivieren"
-
 msgid "Create Stops from GTFS ..."
 msgstr "Haltestellen aus GTFS erstellen …"
 
@@ -35910,69 +35972,9 @@ msgstr "Keine Daten gefunden"
 msgid "The GTFS file was empty."
 msgstr "Die GTFS-Datei war leer."
 
-msgid "Create Stops from GTFS"
-msgstr "Haltestellen aus GTFS erstellen"
-
-msgid "GTFS-Stops"
-msgstr "GTFS-Haltestelle"
-
-msgid "Type of stops to add"
-msgstr "Art der hinzuzufügenden Haltestellen"
-
-msgid "Time on your GPS device"
-msgstr "Uhrzeit auf Ihrem GPS-Gerät"
-
-msgid "HH:MM:SS.sss"
-msgstr "HH:MM:SS.sss"
-
-msgid "Time on your stopwatch"
-msgstr "Zeit auf Ihrer Stoppuhr"
-
-msgid "Time window"
-msgstr "Zeitfenster"
-
-msgid "seconds"
-msgstr "Sekunden"
-
-msgid "Move Threshold"
-msgstr "Schwellenwert verschieben"
-
-msgid "Suggest Stops"
-msgstr "Haltestellen vorschlagen"
-
-msgid "Find"
-msgstr "Suchen"
-
-msgid "Show"
-msgstr "Anzeigen"
-
-msgid "Mark"
-msgstr "Markierung"
-
-msgid "Catch"
-msgstr "Erfassen"
-
-msgid "Join"
-msgstr "Verbinden"
-
-msgid "Public Transport: Join GTFS stops"
-msgstr "Öffentlicher Verkehr: GTFS-Haltestellen verbinden"
-
-msgid "State"
-msgstr "Bundesland"
-
-msgid "[incomplete]"
-msgstr "[unvollständig]"
-
-msgid "[empty way]"
-msgstr "[leere Linie]"
-
 msgid "[ID] {0}"
 msgstr "[ID] {0}"
 
-msgid "[gap]"
-msgstr "[Lücke]"
-
 msgid "Route patterns ..."
 msgstr "Routenmuster …"
 
@@ -36015,6 +36017,15 @@ msgstr "Ein neues Merkmal hinzufügen"
 msgid "Name/Id"
 msgstr "Name/Id"
 
+msgid "Find"
+msgstr "Suchen"
+
+msgid "Show"
+msgstr "Anzeigen"
+
+msgid "Mark"
+msgstr "Markierung"
+
 msgid "Ref"
 msgstr "Ref."
 
@@ -36030,11 +36041,8 @@ msgstr "linken Seite"
 msgid "Maximum distance from route"
 msgstr "Maximale Entfernung zur Route"
 
-msgid " [ID] {0}"
-msgstr " [ID] {0}"
-
-msgid "Public Transport: Change stop type"
-msgstr "Öffentlicher Verkehr: Haltestellenart ändern"
+msgid "Suggest Stops"
+msgstr "Haltestellen vorschlagen"
 
 msgid "Create Stops from GPX ..."
 msgstr "Haltestellen aus GPX erstellen …"
@@ -36048,30 +36056,29 @@ msgstr "GPX-Datei auswählen"
 msgid "The GPX file contained no tracks or waypoints."
 msgstr "Die GPX-Datei enthielt keine Spuren oder Wegpunkte."
 
-msgid "Create Stops from GPX"
-msgstr "Haltestellen aus GPX erstellen"
+msgid "moved"
+msgstr "verschoben"
 
-msgid "Tracks in this GPX file:"
-msgstr "Spuren in dieser GPX-Datei:"
+msgid "added"
+msgstr "hinzugefügt"
 
-msgid "Detach"
-msgstr "Abtrennen"
+msgid "Public Transport: Enable GTFSStops"
+msgstr "Öffentlicher Verkehr: GTFS-Haltestellen aktivieren"
 
-msgid "implicit"
-msgstr "implizit"
+msgid "Public Transport: Catch GTFS stops"
+msgstr "Öffentlicher Verkehr: GTFS-Haltestellen erfassen"
 
-msgid ""
-"The GPX file doesn''t contain valid trackpoints. Please use a GPX file that "
-"has trackpoints."
-msgstr ""
-"Die GPX-Datei enthält keine gültigen Spurpunkte. Bitte verwenden Sie eine "
-"GPX-Datei mit Spurpunkten."
+msgid "skipped"
+msgstr "übersprungen"
 
-msgid "GPX File Trouble"
-msgstr "GPX-Dateiproblem"
+msgid "Public Transport: Disable GTFS"
+msgstr "Öffentlicher Verkehr: GTFS-Haltestellen deaktivieren"
 
-msgid "unnamed"
-msgstr "unbenannt"
+msgid "Public Transport: Join GTFS stops"
+msgstr "Öffentlicher Verkehr: GTFS-Haltestellen verbinden"
+
+msgid "Public Transport: Change stop type"
+msgstr "Öffentlicher Verkehr: Haltestellenart ändern"
 
 msgid "Public Transport: Add track stop"
 msgstr "Öffentlicher Verkehr: Haltestelle hinzufügen"
@@ -36094,9 +36101,6 @@ msgstr "Öffentlicher Verkehr: Haltestellenliste sortieren"
 msgid "Public Transport: Suggest stops"
 msgstr "Öffentlicher Verkehr: Haltestellen vorschlagen"
 
-msgid "Stopname"
-msgstr "Haltestellenname"
-
 msgid "Public Transport: Detach waypoints"
 msgstr "Öffentlicher Verkehr: Wegpunkte abtrennen"
 
@@ -36109,6 +36113,91 @@ msgstr "Öffentlicher Verkehr: Wegpunkte aktivieren"
 msgid "Public Transport: Edit waypoint name"
 msgstr "Öffentlicher Verkehr: Wegpunktname bearbeiten"
 
+msgid "rail"
+msgstr "Eisenbahn"
+
+msgid "Can''t parse a time from this string."
+msgstr "Von dieser Zeichenkette konnte keine Uhrzeit geparst werden."
+
+msgid "Invalid value"
+msgstr "Ungültiger Wert"
+
+msgid "Create Stops from GTFS"
+msgstr "Haltestellen aus GTFS erstellen"
+
+msgid "GTFS-Stops"
+msgstr "GTFS-Haltestelle"
+
+msgid "Type of stops to add"
+msgstr "Art der hinzuzufügenden Haltestellen"
+
+msgid "Time on your GPS device"
+msgstr "Uhrzeit auf Ihrem GPS-Gerät"
+
+msgid "HH:MM:SS.sss"
+msgstr "HH:MM:SS.sss"
+
+msgid "Time on your stopwatch"
+msgstr "Zeit auf Ihrer Stoppuhr"
+
+msgid "Time window"
+msgstr "Zeitfenster"
+
+msgid "seconds"
+msgstr "Sekunden"
+
+msgid "Move Threshold"
+msgstr "Schwellenwert verschieben"
+
+msgid "Catch"
+msgstr "Erfassen"
+
+msgid "Join"
+msgstr "Verbinden"
+
+msgid "Create Stops from GPX"
+msgstr "Haltestellen aus GPX erstellen"
+
+msgid "Tracks in this GPX file:"
+msgstr "Spuren in dieser GPX-Datei:"
+
+msgid "Detach"
+msgstr "Abtrennen"
+
+msgid "implicit"
+msgstr "implizit"
+
+msgid "State"
+msgstr "Bundesland"
+
+msgid "[incomplete]"
+msgstr "[unvollständig]"
+
+msgid "[empty way]"
+msgstr "[leere Linie]"
+
+msgid "[gap]"
+msgstr "[Lücke]"
+
+msgid "Stopname"
+msgstr "Haltestellenname"
+
+msgid " [ID] {0}"
+msgstr " [ID] {0}"
+
+msgid ""
+"The GPX file doesn''t contain valid trackpoints. Please use a GPX file that "
+"has trackpoints."
+msgstr ""
+"Die GPX-Datei enthält keine gültigen Spurpunkte. Bitte verwenden Sie eine "
+"GPX-Datei mit Spurpunkten."
+
+msgid "GPX File Trouble"
+msgstr "GPX-Dateiproblem"
+
+msgid "unnamed"
+msgstr "unbenannt"
+
 msgid "Distance between stops"
 msgstr "Entfernung zwischen Haltestellen"
 
@@ -36883,6 +36972,9 @@ msgstr "Merkmalseditor aufrufen"
 msgid "JOSM Tag Editor Plugin"
 msgstr "JOSM-Merkmalsbearbeitungserweiterung"
 
+msgid "Presets"
+msgstr "Vorlagen"
+
 msgid "Abort tag editing and close dialog"
 msgstr "Merkmalsbearbeitung abbrechen und Dialog schließen"
 
@@ -39070,6 +39162,28 @@ msgstr[0] "''{0}'' Merkmal {1} von {2} mit neuem Wert ''{3}'' überschreiben?"
 msgstr[1] ""
 "''{0}'' Merkmale {1} von {2} mit neuem Wert ''{3}'' überschreiben?"
 
+msgid "Download from Sophox API"
+msgstr "Von der Sophox-API herunterladen"
+
+msgid ""
+"Find places of education at least 2km, and at most 3km from the center of "
+"the selection"
+msgstr ""
+"Bildungseinrichtungen finden, die mindestens 2km und maximal 3km vom "
+"Mittelpunkt der Auswahl entfernt sind"
+
+msgid "Show/hide Sophox snippet list"
+msgstr "Zeige/Verstecke die Sophox Schnipsel-Liste"
+
+msgid "help"
+msgstr "Hilfe"
+
+msgid "Server: "
+msgstr "Server: "
+
+msgid "Wikidata+OSM server"
+msgstr "Wikidata+OSM Server"
+
 msgid "Search Wikidata items"
 msgstr "Wikidata-Einträge suchen"
 
@@ -39148,28 +39262,6 @@ msgstr ""
 "''wikipedia''-Merkmal aus dem ausgewählten Artikel in die markierten Objekte "
 "einfügen"
 
-msgid "Download from Wikosm API"
-msgstr "Von Wikosm-API herunterladen"
-
-msgid ""
-"Find places of education at least 2km, and at most 3km from the center of "
-"the selection"
-msgstr ""
-"Bildungseinrichtungen finden, die mindestens 2km und maximal 3km vom "
-"Mittelpunkt der Auswahl entfernt sind"
-
-msgid "Show/hide Wikosm snippet list"
-msgstr "Zeige/Verstecke die Wikosm Schnipsel-Liste"
-
-msgid "help"
-msgstr "Hilfe"
-
-msgid "Server: "
-msgstr "Server: "
-
-msgid "Wikidata+OSM server"
-msgstr "Wikidata+OSM Server"
-
 msgid "The Ultimate WMS Super-speed Turbo Challenge II"
 msgstr "Der Ultimative WMS Höchstgeschwindigkeits-Turbo-Wettkampf II"
 
diff --git a/i18n/po/de_DE.po b/i18n/po/de_DE.po
index 4e03994..8c349fc 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-10-30 03:38+0100\n"
+"POT-Creation-Date: 2017-11-26 00:06+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-10-30 05:09+0000\n"
-"X-Generator: Launchpad (build 18493)\n"
+"X-Launchpad-Export-Date: 2017-11-26 05:12+0000\n"
+"X-Generator: Launchpad (build 18509)\n"
 "Language: \n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -429,12 +429,15 @@ msgstr ""
 msgid "Delete the active layer. Does not delete the associated file."
 msgstr ""
 
-msgid "Toggle dialogs panel"
+msgid "Dialogs panel"
 msgstr ""
 
 msgid "Toggle dialogs panel, maximize mapview"
 msgstr ""
 
+msgid "Toggle dialogs panel"
+msgstr ""
+
 msgid "Distribute Nodes"
 msgstr ""
 
@@ -6497,6 +6500,9 @@ msgstr ""
 msgid "Coordinates (projected): "
 msgstr ""
 
+msgid "UTM Zone"
+msgstr ""
+
 msgid "Part of: "
 msgstr ""
 
@@ -8795,6 +8801,11 @@ msgstr ""
 msgid "Check \"Save\" to save the layer to the file specified on the left."
 msgstr ""
 
+msgid ""
+"A background upload is already in progress. Kindly wait for it to finish "
+"before uploading new changes"
+msgstr ""
+
 msgid "I would like someone to review my edits."
 msgstr ""
 
@@ -9903,6 +9914,9 @@ msgstr ""
 msgid "Save Layer"
 msgstr ""
 
+msgid "Trying to set a read only data layer as edit layer"
+msgstr ""
+
 msgid "{0} note"
 msgid_plural "{0} notes"
 msgstr[0] ""
@@ -10733,11 +10747,6 @@ msgstr ""
 msgid "Failed to parse Mappaint styles from ''{0}''. Error was: {1}"
 msgstr ""
 
-msgid ""
-"Detected deprecated ''{0}'' in ''{1}'' which will be removed shortly. Use "
-"''{2}'' instead."
-msgstr ""
-
 msgid "Failed to locate image ''{0}''"
 msgstr ""
 
@@ -11902,6 +11911,9 @@ msgstr ""
 msgid "Show object ID in selection lists"
 msgstr ""
 
+msgid "Show node coordinates in selection lists"
+msgstr ""
+
 msgid "Show localized name in selection lists"
 msgstr ""
 
@@ -12658,9 +12670,6 @@ msgstr ""
 msgid "UTM"
 msgstr ""
 
-msgid "UTM Zone"
-msgstr ""
-
 msgid "North"
 msgstr ""
 
@@ -13128,9 +13137,6 @@ msgstr ""
 msgid "Error parsing {0}: "
 msgstr ""
 
-msgid "Presets"
-msgstr ""
-
 msgid "Search for objects by preset..."
 msgstr ""
 
@@ -15675,6 +15681,18 @@ msgstr ""
 msgid "korean"
 msgstr ""
 
+msgid "donut"
+msgstr ""
+
+msgid "mediterranean"
+msgstr ""
+
+msgid "friture"
+msgstr ""
+
+msgid "crepe"
+msgstr ""
+
 msgid "Internet access"
 msgstr ""
 
@@ -18517,7 +18535,16 @@ msgstr ""
 msgid "Tents allowed"
 msgstr ""
 
-msgid "Camping Site"
+msgid "Campsite"
+msgstr ""
+
+msgid "Caravans allowed"
+msgstr ""
+
+msgid "Backcountry"
+msgstr ""
+
+msgid "Group only access"
 msgstr ""
 
 msgid "Food+Drinks"
@@ -23346,6 +23373,14 @@ msgid ""
 "resolution or better, and refreshed more frequently with ongoing updates."
 msgstr ""
 
+msgid "DigitalGlobe Premium Imagery Vintage"
+msgstr ""
+
+msgid ""
+"Imagery boundaries and capture dates. Labels appear at zoom level 14 and "
+"higher."
+msgstr ""
+
 msgid "DigitalGlobe Standard Imagery"
 msgstr ""
 
@@ -23355,6 +23390,9 @@ msgid ""
 "Landsat. Average age is 2.31 years, with some areas updated 2x per year."
 msgstr ""
 
+msgid "DigitalGlobe Standard Imagery Vintage"
+msgstr ""
+
 msgid "Esri World Imagery"
 msgstr ""
 
@@ -23418,6 +23456,12 @@ msgstr ""
 msgid "Strava cycling and running heatmap"
 msgstr ""
 
+msgid "Strava water sports heatmap"
+msgstr ""
+
+msgid "Strava winter sports heatmap"
+msgstr ""
+
 msgid "Locator Overlay"
 msgstr ""
 
@@ -23822,6 +23866,9 @@ msgstr ""
 msgid "SPW(allonie) most recent aerial imagery"
 msgstr ""
 
+msgid "SPW(allonie) 2016 aerial imagery"
+msgstr ""
+
 msgid "SPW(allonie) 2015 aerial imagery"
 msgstr ""
 
@@ -23867,6 +23914,14 @@ msgstr ""
 msgid "Addresses data from IBGE"
 msgstr ""
 
+msgid "Street names IBGE Salvador-BA"
+msgstr ""
+
+msgid ""
+"Streets geometry and names of Salvador, Bahia. Source: Faces de Logradouro - "
+"IBGE."
+msgstr ""
+
 msgid "Rio Mosaic 2013"
 msgstr ""
 
@@ -24597,6 +24652,9 @@ msgstr ""
 msgid "Japan GSI ortho Imagery"
 msgstr ""
 
+msgid "Japan GSI Standard Map"
+msgstr ""
+
 msgid "imagico.de OSM images for mapping: Aral Sea (low water level)"
 msgstr ""
 
@@ -24626,7 +24684,7 @@ msgstr ""
 msgid "20cm ortho - Latvia - Coastline"
 msgstr ""
 
-msgid "1.cikla ortofotokarte - Latvia"
+msgid "Orthophoto 1st cycle (1994-1999) - Latvia"
 msgstr ""
 
 msgid "ORT10LT (Lithuania)"
@@ -24635,6 +24693,9 @@ msgstr ""
 msgid "geoportail.lu all layers"
 msgstr ""
 
+msgid "geoportail.lu ortho latest"
+msgstr ""
+
 msgid "geoportail.lu ortho 2016"
 msgstr ""
 
@@ -26125,6 +26186,9 @@ msgstr ""
 msgid "{0} on a node. Should be used on a way."
 msgstr ""
 
+msgid "{0} on a node. Should be used on a way or relation."
+msgstr ""
+
 msgid "{0} on a node. Should be drawn as an area."
 msgstr ""
 
@@ -26352,6 +26416,9 @@ msgstr ""
 msgid "Nodes duplicating parent way tags"
 msgstr ""
 
+msgid "{0} together with {1} and {2}. Remove {0}."
+msgstr ""
+
 msgid ""
 "wikipedia tag has no language given, use ''wikipedia''=''language:page "
 "title''"
@@ -27116,6 +27183,21 @@ msgstr ""
 msgid "Importing..."
 msgstr ""
 
+msgid "Shape is started incorrectly"
+msgstr ""
+
+msgid "Can''t load SVG diagram"
+msgstr ""
+
+msgid "Can''t find root SVG element"
+msgstr ""
+
+msgid "Import primitives"
+msgstr ""
+
+msgid "Cannot find configuration file!"
+msgstr ""
+
 msgid "DXF files [ImportDxf plugin] (*.dxf)"
 msgstr ""
 
@@ -27755,6 +27837,9 @@ msgstr ""
 msgid "Download mode"
 msgstr ""
 
+msgid "Number of images to be pre-fetched (forwards and backwards)"
+msgstr ""
+
 msgid "You are logged in as ''{0}''."
 msgstr ""
 
@@ -27965,8 +28050,17 @@ msgid "only when manually requested"
 msgstr ""
 
 msgid ""
-"The downloaded OSM area is too big. Download mode has been changed to OSM "
-"area until the layer is restarted."
+"The Mapillary layer has stopped downloading images, because the requested "
+"area is too big!"
+msgstr ""
+
+msgid ""
+"To solve this problem, you could zoom in and load a smaller area of the map."
+msgstr ""
+
+msgid ""
+"To solve this problem, you could switch to download mode ''{0}'' and load "
+"Mapillary images for a smaller portion of the map."
 msgstr ""
 
 msgid "Downloading"
@@ -31282,19 +31376,6 @@ msgstr ""
 msgid "Merge Overlap (combine)"
 msgstr ""
 
-msgid ""
-"<html>A role based relation membership was copied to all new ways.<br>You "
-"should verify this and correct it when necessary.</html>"
-msgstr ""
-
-msgid ""
-"<html>A relation membership was copied to all new ways.<br>You should verify "
-"this and correct it when necessary.</html>"
-msgstr ""
-
-msgid "Split way"
-msgstr ""
-
 msgid "Michigan Left"
 msgstr ""
 
@@ -32749,254 +32830,254 @@ msgstr ""
 msgid "PT: Route passes a oneway road in the wrong direction"
 msgstr ""
 
-msgid "moved"
+msgid "Create Stops from GTFS ..."
 msgstr ""
 
-msgid "rail"
+msgid "Create Stops from a GTFS file"
 msgstr ""
 
-msgid "Can''t parse a time from this string."
+msgid "Select GTFS file (stops.txt)"
 msgstr ""
 
-msgid "Invalid value"
+msgid "File \"{0}\" does not exist"
 msgstr ""
 
-msgid "added"
+msgid "IOException \"{0}\" occurred"
 msgstr ""
 
-msgid "Public Transport: Enable GTFSStops"
+msgid ""
+"There exists no dataset. Try to download data from the server or open an OSM "
+"file."
 msgstr ""
 
-msgid "Public Transport: Catch GTFS stops"
+msgid "No data found"
 msgstr ""
 
-msgid "skipped"
+msgid "The GTFS file was empty."
 msgstr ""
 
-msgid "Public Transport: Disable GTFS"
+msgid "[ID] {0}"
 msgstr ""
 
-msgid "Create Stops from GTFS ..."
+msgid "Route patterns ..."
 msgstr ""
 
-msgid "Create Stops from a GTFS file"
+msgid "Edit Route patterns for public transport"
 msgstr ""
 
-msgid "Select GTFS file (stops.txt)"
+msgid "Route Patterns"
 msgstr ""
 
-msgid "File \"{0}\" does not exist"
+msgid "Overview"
 msgstr ""
 
-msgid "IOException \"{0}\" occurred"
+msgid "Itinerary"
 msgstr ""
 
-msgid ""
-"There exists no dataset. Try to download data from the server or open an OSM "
-"file."
+msgid "Stops"
 msgstr ""
 
-msgid "No data found"
+msgid "Meta"
 msgstr ""
 
-msgid "The GTFS file was empty."
+msgid "Existing route patterns:"
 msgstr ""
 
-msgid "Create Stops from GTFS"
+msgid "Reflect"
 msgstr ""
 
-msgid "GTFS-Stops"
+msgid "Required tags:"
 msgstr ""
 
-msgid "Type of stops to add"
+msgid "Common tags:"
 msgstr ""
 
-msgid "Time on your GPS device"
+msgid "Additional tags:"
 msgstr ""
 
-msgid "HH:MM:SS.sss"
+msgid "Add a new Tag"
 msgstr ""
 
-msgid "Time on your stopwatch"
+msgid "Name/Id"
 msgstr ""
 
-msgid "Time window"
+msgid "Find"
 msgstr ""
 
-msgid "seconds"
+msgid "Show"
 msgstr ""
 
-msgid "Move Threshold"
+msgid "Mark"
 msgstr ""
 
-msgid "Suggest Stops"
+msgid "Ref"
 msgstr ""
 
-msgid "Find"
+msgid "Stops are possible on the"
 msgstr ""
 
-msgid "Show"
+msgid "right hand side"
 msgstr ""
 
-msgid "Mark"
+msgid "left hand side"
 msgstr ""
 
-msgid "Catch"
+msgid "Maximum distance from route"
 msgstr ""
 
-msgid "Join"
+msgid "Suggest Stops"
 msgstr ""
 
-msgid "Public Transport: Join GTFS stops"
+msgid "Create Stops from GPX ..."
 msgstr ""
 
-msgid "State"
+msgid "Create Stops from a GPX file"
 msgstr ""
 
-msgid "[incomplete]"
+msgid "Select GPX file"
 msgstr ""
 
-msgid "[empty way]"
+msgid "The GPX file contained no tracks or waypoints."
 msgstr ""
 
-msgid "[ID] {0}"
+msgid "moved"
 msgstr ""
 
-msgid "[gap]"
+msgid "added"
 msgstr ""
 
-msgid "Route patterns ..."
+msgid "Public Transport: Enable GTFSStops"
 msgstr ""
 
-msgid "Edit Route patterns for public transport"
+msgid "Public Transport: Catch GTFS stops"
 msgstr ""
 
-msgid "Route Patterns"
+msgid "skipped"
 msgstr ""
 
-msgid "Overview"
+msgid "Public Transport: Disable GTFS"
 msgstr ""
 
-msgid "Itinerary"
+msgid "Public Transport: Join GTFS stops"
 msgstr ""
 
-msgid "Stops"
+msgid "Public Transport: Change stop type"
 msgstr ""
 
-msgid "Meta"
+msgid "Public Transport: Add track stop"
 msgstr ""
 
-msgid "Existing route patterns:"
+msgid "Public Transport: Delete track stop"
 msgstr ""
 
-msgid "Reflect"
+msgid "Public Transport: Detach track stop list"
 msgstr ""
 
-msgid "Required tags:"
+msgid "Public Transport: Edit track stop list"
 msgstr ""
 
-msgid "Common tags:"
+msgid "Public Transport: Relocate nodes in track stoplist"
 msgstr ""
 
-msgid "Additional tags:"
+msgid "Public Transport: sort track stop list"
 msgstr ""
 
-msgid "Add a new Tag"
+msgid "Public Transport: Suggest stops"
 msgstr ""
 
-msgid "Name/Id"
+msgid "Public Transport: Detach waypoints"
 msgstr ""
 
-msgid "Ref"
+msgid "Public Transport: Disable waypoints"
 msgstr ""
 
-msgid "Stops are possible on the"
+msgid "Public Transport: Enable waypoints"
 msgstr ""
 
-msgid "right hand side"
+msgid "Public Transport: Edit waypoint name"
 msgstr ""
 
-msgid "left hand side"
+msgid "rail"
 msgstr ""
 
-msgid "Maximum distance from route"
+msgid "Can''t parse a time from this string."
 msgstr ""
 
-msgid " [ID] {0}"
+msgid "Invalid value"
 msgstr ""
 
-msgid "Public Transport: Change stop type"
+msgid "Create Stops from GTFS"
 msgstr ""
 
-msgid "Create Stops from GPX ..."
+msgid "GTFS-Stops"
 msgstr ""
 
-msgid "Create Stops from a GPX file"
+msgid "Type of stops to add"
 msgstr ""
 
-msgid "Select GPX file"
+msgid "Time on your GPS device"
 msgstr ""
 
-msgid "The GPX file contained no tracks or waypoints."
+msgid "HH:MM:SS.sss"
 msgstr ""
 
-msgid "Create Stops from GPX"
+msgid "Time on your stopwatch"
 msgstr ""
 
-msgid "Tracks in this GPX file:"
+msgid "Time window"
 msgstr ""
 
-msgid "Detach"
+msgid "seconds"
 msgstr ""
 
-msgid "implicit"
+msgid "Move Threshold"
 msgstr ""
 
-msgid ""
-"The GPX file doesn''t contain valid trackpoints. Please use a GPX file that "
-"has trackpoints."
+msgid "Catch"
 msgstr ""
 
-msgid "GPX File Trouble"
+msgid "Join"
 msgstr ""
 
-msgid "unnamed"
+msgid "Create Stops from GPX"
 msgstr ""
 
-msgid "Public Transport: Add track stop"
+msgid "Tracks in this GPX file:"
 msgstr ""
 
-msgid "Public Transport: Delete track stop"
+msgid "Detach"
 msgstr ""
 
-msgid "Public Transport: Detach track stop list"
+msgid "implicit"
 msgstr ""
 
-msgid "Public Transport: Edit track stop list"
+msgid "State"
 msgstr ""
 
-msgid "Public Transport: Relocate nodes in track stoplist"
+msgid "[incomplete]"
 msgstr ""
 
-msgid "Public Transport: sort track stop list"
+msgid "[empty way]"
 msgstr ""
 
-msgid "Public Transport: Suggest stops"
+msgid "[gap]"
 msgstr ""
 
 msgid "Stopname"
 msgstr ""
 
-msgid "Public Transport: Detach waypoints"
+msgid " [ID] {0}"
 msgstr ""
 
-msgid "Public Transport: Disable waypoints"
+msgid ""
+"The GPX file doesn''t contain valid trackpoints. Please use a GPX file that "
+"has trackpoints."
 msgstr ""
 
-msgid "Public Transport: Enable waypoints"
+msgid "GPX File Trouble"
 msgstr ""
 
-msgid "Public Transport: Edit waypoint name"
+msgid "unnamed"
 msgstr ""
 
 msgid "Distance between stops"
@@ -33725,6 +33806,9 @@ msgstr ""
 msgid "JOSM Tag Editor Plugin"
 msgstr ""
 
+msgid "Presets"
+msgstr ""
+
 msgid "Abort tag editing and close dialog"
 msgstr ""
 
@@ -35650,6 +35734,26 @@ msgid_plural "Overwrite ''{0}'' tags {1} from {2} with new value ''{3}''?"
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Download from Sophox API"
+msgstr ""
+
+msgid ""
+"Find places of education at least 2km, and at most 3km from the center of "
+"the selection"
+msgstr ""
+
+msgid "Show/hide Sophox snippet list"
+msgstr ""
+
+msgid "help"
+msgstr ""
+
+msgid "Server: "
+msgstr ""
+
+msgid "Wikidata+OSM server"
+msgstr ""
+
 msgid "Search Wikidata items"
 msgstr ""
 
@@ -35723,26 +35827,6 @@ msgid ""
 "objects"
 msgstr ""
 
-msgid "Download from Wikosm API"
-msgstr ""
-
-msgid ""
-"Find places of education at least 2km, and at most 3km from the center of "
-"the selection"
-msgstr ""
-
-msgid "Show/hide Wikosm snippet list"
-msgstr ""
-
-msgid "help"
-msgstr ""
-
-msgid "Server: "
-msgstr ""
-
-msgid "Wikidata+OSM server"
-msgstr ""
-
 msgid "The Ultimate WMS Super-speed Turbo Challenge II"
 msgstr ""
 
diff --git a/i18n/po/el.po b/i18n/po/el.po
index 7c9c8db..a4cbc59 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-10-30 03:38+0100\n"
+"POT-Creation-Date: 2017-11-26 00:06+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-10-30 04:45+0000\n"
-"X-Generator: Launchpad (build 18493)\n"
+"X-Launchpad-Export-Date: 2017-11-26 04:46+0000\n"
+"X-Generator: Launchpad (build 18509)\n"
 "Language: el\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -444,12 +444,15 @@ msgstr ""
 msgid "Delete the active layer. Does not delete the associated file."
 msgstr ""
 
-msgid "Toggle dialogs panel"
+msgid "Dialogs panel"
 msgstr ""
 
 msgid "Toggle dialogs panel, maximize mapview"
 msgstr ""
 
+msgid "Toggle dialogs panel"
+msgstr ""
+
 msgid "Distribute Nodes"
 msgstr "Διανομή κόμβων"
 
@@ -6721,6 +6724,9 @@ msgstr "Συντεταγμένες: "
 msgid "Coordinates (projected): "
 msgstr "Συντεταγμένες (προβεβλημένες): "
 
+msgid "UTM Zone"
+msgstr "Ζώνη UTM"
+
 msgid "Part of: "
 msgstr "Μέρος του: "
 
@@ -9060,6 +9066,11 @@ msgstr ""
 msgid "Check \"Save\" to save the layer to the file specified on the left."
 msgstr ""
 
+msgid ""
+"A background upload is already in progress. Kindly wait for it to finish "
+"before uploading new changes"
+msgstr ""
+
 msgid "I would like someone to review my edits."
 msgstr ""
 
@@ -10215,6 +10226,9 @@ msgstr ""
 msgid "Save Layer"
 msgstr "Αποθήκευση Επιπέδου"
 
+msgid "Trying to set a read only data layer as edit layer"
+msgstr ""
+
 msgid "{0} note"
 msgid_plural "{0} notes"
 msgstr[0] ""
@@ -11052,11 +11066,6 @@ msgstr ""
 msgid "Failed to parse Mappaint styles from ''{0}''. Error was: {1}"
 msgstr ""
 
-msgid ""
-"Detected deprecated ''{0}'' in ''{1}'' which will be removed shortly. Use "
-"''{2}'' instead."
-msgstr ""
-
 msgid "Failed to locate image ''{0}''"
 msgstr ""
 
@@ -12233,6 +12242,9 @@ msgstr "Εμφάνιση οθόνης έναρξης στην εκκίνηση"
 msgid "Show object ID in selection lists"
 msgstr "Εμφάνιση ID αντικειμένου στις λίστες επιλογών"
 
+msgid "Show node coordinates in selection lists"
+msgstr ""
+
 msgid "Show localized name in selection lists"
 msgstr ""
 
@@ -13001,9 +13013,6 @@ msgstr "UTM Γεωδαιτικό σύστημα"
 msgid "UTM"
 msgstr "UTM"
 
-msgid "UTM Zone"
-msgstr "Ζώνη UTM"
-
 msgid "North"
 msgstr "Βορράς"
 
@@ -13481,9 +13490,6 @@ msgstr ""
 msgid "Error parsing {0}: "
 msgstr "Σφάλμα ανάλυσης {0}: "
 
-msgid "Presets"
-msgstr "Προεπιλογές"
-
 msgid "Search for objects by preset..."
 msgstr ""
 
@@ -16056,6 +16062,18 @@ msgstr ""
 msgid "korean"
 msgstr ""
 
+msgid "donut"
+msgstr ""
+
+msgid "mediterranean"
+msgstr ""
+
+msgid "friture"
+msgstr ""
+
+msgid "crepe"
+msgstr ""
+
 msgid "Internet access"
 msgstr "Πρόσβαση στο διαδίκτυο"
 
@@ -18898,8 +18916,17 @@ msgstr "Παροχή ενέργειας"
 msgid "Tents allowed"
 msgstr ""
 
-msgid "Camping Site"
-msgstr "Χώρος Κάμπινγκ"
+msgid "Campsite"
+msgstr ""
+
+msgid "Caravans allowed"
+msgstr ""
+
+msgid "Backcountry"
+msgstr ""
+
+msgid "Group only access"
+msgstr ""
 
 msgid "Food+Drinks"
 msgstr "Φαγητό+Ποτά"
@@ -23727,6 +23754,14 @@ msgid ""
 "resolution or better, and refreshed more frequently with ongoing updates."
 msgstr ""
 
+msgid "DigitalGlobe Premium Imagery Vintage"
+msgstr ""
+
+msgid ""
+"Imagery boundaries and capture dates. Labels appear at zoom level 14 and "
+"higher."
+msgstr ""
+
 msgid "DigitalGlobe Standard Imagery"
 msgstr ""
 
@@ -23736,6 +23771,9 @@ msgid ""
 "Landsat. Average age is 2.31 years, with some areas updated 2x per year."
 msgstr ""
 
+msgid "DigitalGlobe Standard Imagery Vintage"
+msgstr ""
+
 msgid "Esri World Imagery"
 msgstr ""
 
@@ -23799,6 +23837,12 @@ msgstr "Χάρτης θερμότητας τρεξίματος Strava"
 msgid "Strava cycling and running heatmap"
 msgstr ""
 
+msgid "Strava water sports heatmap"
+msgstr ""
+
+msgid "Strava winter sports heatmap"
+msgstr ""
+
 msgid "Locator Overlay"
 msgstr ""
 
@@ -24203,6 +24247,9 @@ msgstr ""
 msgid "SPW(allonie) most recent aerial imagery"
 msgstr ""
 
+msgid "SPW(allonie) 2016 aerial imagery"
+msgstr ""
+
 msgid "SPW(allonie) 2015 aerial imagery"
 msgstr ""
 
@@ -24248,6 +24295,14 @@ msgstr ""
 msgid "Addresses data from IBGE"
 msgstr ""
 
+msgid "Street names IBGE Salvador-BA"
+msgstr ""
+
+msgid ""
+"Streets geometry and names of Salvador, Bahia. Source: Faces de Logradouro - "
+"IBGE."
+msgstr ""
+
 msgid "Rio Mosaic 2013"
 msgstr ""
 
@@ -24978,6 +25033,9 @@ msgstr ""
 msgid "Japan GSI ortho Imagery"
 msgstr ""
 
+msgid "Japan GSI Standard Map"
+msgstr ""
+
 msgid "imagico.de OSM images for mapping: Aral Sea (low water level)"
 msgstr ""
 
@@ -25007,7 +25065,7 @@ msgstr ""
 msgid "20cm ortho - Latvia - Coastline"
 msgstr ""
 
-msgid "1.cikla ortofotokarte - Latvia"
+msgid "Orthophoto 1st cycle (1994-1999) - Latvia"
 msgstr ""
 
 msgid "ORT10LT (Lithuania)"
@@ -25016,6 +25074,9 @@ msgstr ""
 msgid "geoportail.lu all layers"
 msgstr ""
 
+msgid "geoportail.lu ortho latest"
+msgstr ""
+
 msgid "geoportail.lu ortho 2016"
 msgstr ""
 
@@ -26506,6 +26567,9 @@ msgstr ""
 msgid "{0} on a node. Should be used on a way."
 msgstr ""
 
+msgid "{0} on a node. Should be used on a way or relation."
+msgstr ""
+
 msgid "{0} on a node. Should be drawn as an area."
 msgstr ""
 
@@ -26733,6 +26797,9 @@ msgstr ""
 msgid "Nodes duplicating parent way tags"
 msgstr ""
 
+msgid "{0} together with {1} and {2}. Remove {0}."
+msgstr ""
+
 msgid ""
 "wikipedia tag has no language given, use ''wikipedia''=''language:page "
 "title''"
@@ -27497,6 +27564,21 @@ msgstr "Αποστολή ιχνών στο openstreetmap.org"
 msgid "Importing..."
 msgstr "Γίνεται εισαγωγή..."
 
+msgid "Shape is started incorrectly"
+msgstr ""
+
+msgid "Can''t load SVG diagram"
+msgstr ""
+
+msgid "Can''t find root SVG element"
+msgstr ""
+
+msgid "Import primitives"
+msgstr ""
+
+msgid "Cannot find configuration file!"
+msgstr ""
+
 msgid "DXF files [ImportDxf plugin] (*.dxf)"
 msgstr ""
 
@@ -28138,6 +28220,9 @@ msgstr ""
 msgid "Download mode"
 msgstr ""
 
+msgid "Number of images to be pre-fetched (forwards and backwards)"
+msgstr ""
+
 msgid "You are logged in as ''{0}''."
 msgstr ""
 
@@ -28348,8 +28433,17 @@ msgid "only when manually requested"
 msgstr ""
 
 msgid ""
-"The downloaded OSM area is too big. Download mode has been changed to OSM "
-"area until the layer is restarted."
+"The Mapillary layer has stopped downloading images, because the requested "
+"area is too big!"
+msgstr ""
+
+msgid ""
+"To solve this problem, you could zoom in and load a smaller area of the map."
+msgstr ""
+
+msgid ""
+"To solve this problem, you could switch to download mode ''{0}'' and load "
+"Mapillary images for a smaller portion of the map."
 msgstr ""
 
 msgid "Downloading"
@@ -31685,19 +31779,6 @@ msgstr ""
 msgid "Merge Overlap (combine)"
 msgstr ""
 
-msgid ""
-"<html>A role based relation membership was copied to all new ways.<br>You "
-"should verify this and correct it when necessary.</html>"
-msgstr ""
-
-msgid ""
-"<html>A relation membership was copied to all new ways.<br>You should verify "
-"this and correct it when necessary.</html>"
-msgstr ""
-
-msgid "Split way"
-msgstr ""
-
 msgid "Michigan Left"
 msgstr ""
 
@@ -33154,33 +33235,6 @@ msgstr ""
 msgid "PT: Route passes a oneway road in the wrong direction"
 msgstr ""
 
-msgid "moved"
-msgstr ""
-
-msgid "rail"
-msgstr ""
-
-msgid "Can''t parse a time from this string."
-msgstr ""
-
-msgid "Invalid value"
-msgstr "Μη έγκυρη τιμή"
-
-msgid "added"
-msgstr "προστέθηκε"
-
-msgid "Public Transport: Enable GTFSStops"
-msgstr ""
-
-msgid "Public Transport: Catch GTFS stops"
-msgstr ""
-
-msgid "skipped"
-msgstr "παραβλέφθηκε"
-
-msgid "Public Transport: Disable GTFS"
-msgstr ""
-
 msgid "Create Stops from GTFS ..."
 msgstr "Δημιουργία Στάσεων από GTFS ..."
 
@@ -33209,69 +33263,9 @@ msgstr "Δεν βρέθηκαν δεδομένα"
 msgid "The GTFS file was empty."
 msgstr ""
 
-msgid "Create Stops from GTFS"
-msgstr "Δημιουργία Στάσεων από GTFS"
-
-msgid "GTFS-Stops"
-msgstr ""
-
-msgid "Type of stops to add"
-msgstr ""
-
-msgid "Time on your GPS device"
-msgstr ""
-
-msgid "HH:MM:SS.sss"
-msgstr "ΩΩ:ΛΛ:ΔΔ.δδδ"
-
-msgid "Time on your stopwatch"
-msgstr ""
-
-msgid "Time window"
-msgstr ""
-
-msgid "seconds"
-msgstr "δευτερόλεπτα"
-
-msgid "Move Threshold"
-msgstr ""
-
-msgid "Suggest Stops"
-msgstr ""
-
-msgid "Find"
-msgstr "Αναζήτηση"
-
-msgid "Show"
-msgstr "Προβολή"
-
-msgid "Mark"
-msgstr "Σημείωση"
-
-msgid "Catch"
-msgstr ""
-
-msgid "Join"
-msgstr "Σύνδεση"
-
-msgid "Public Transport: Join GTFS stops"
-msgstr ""
-
-msgid "State"
-msgstr "Πολιτεία"
-
-msgid "[incomplete]"
-msgstr ""
-
-msgid "[empty way]"
-msgstr ""
-
 msgid "[ID] {0}"
 msgstr ""
 
-msgid "[gap]"
-msgstr ""
-
 msgid "Route patterns ..."
 msgstr ""
 
@@ -33314,6 +33308,15 @@ msgstr ""
 msgid "Name/Id"
 msgstr ""
 
+msgid "Find"
+msgstr "Αναζήτηση"
+
+msgid "Show"
+msgstr "Προβολή"
+
+msgid "Mark"
+msgstr "Σημείωση"
+
 msgid "Ref"
 msgstr ""
 
@@ -33329,10 +33332,7 @@ msgstr ""
 msgid "Maximum distance from route"
 msgstr ""
 
-msgid " [ID] {0}"
-msgstr ""
-
-msgid "Public Transport: Change stop type"
+msgid "Suggest Stops"
 msgstr ""
 
 msgid "Create Stops from GPX ..."
@@ -33347,28 +33347,29 @@ msgstr ""
 msgid "The GPX file contained no tracks or waypoints."
 msgstr ""
 
-msgid "Create Stops from GPX"
-msgstr "Δημιουργία Στάσεων από GPX"
+msgid "moved"
+msgstr ""
 
-msgid "Tracks in this GPX file:"
-msgstr "Ίχνη σε αυτό το ερχείο GPX:"
+msgid "added"
+msgstr "προστέθηκε"
 
-msgid "Detach"
-msgstr "Απόσπαση"
+msgid "Public Transport: Enable GTFSStops"
+msgstr ""
 
-msgid "implicit"
+msgid "Public Transport: Catch GTFS stops"
 msgstr ""
 
-msgid ""
-"The GPX file doesn''t contain valid trackpoints. Please use a GPX file that "
-"has trackpoints."
+msgid "skipped"
+msgstr "παραβλέφθηκε"
+
+msgid "Public Transport: Disable GTFS"
 msgstr ""
 
-msgid "GPX File Trouble"
+msgid "Public Transport: Join GTFS stops"
 msgstr ""
 
-msgid "unnamed"
-msgstr "χωρίς όνομα"
+msgid "Public Transport: Change stop type"
+msgstr ""
 
 msgid "Public Transport: Add track stop"
 msgstr ""
@@ -33391,9 +33392,6 @@ msgstr ""
 msgid "Public Transport: Suggest stops"
 msgstr ""
 
-msgid "Stopname"
-msgstr ""
-
 msgid "Public Transport: Detach waypoints"
 msgstr ""
 
@@ -33406,6 +33404,89 @@ msgstr ""
 msgid "Public Transport: Edit waypoint name"
 msgstr ""
 
+msgid "rail"
+msgstr ""
+
+msgid "Can''t parse a time from this string."
+msgstr ""
+
+msgid "Invalid value"
+msgstr "Μη έγκυρη τιμή"
+
+msgid "Create Stops from GTFS"
+msgstr "Δημιουργία Στάσεων από GTFS"
+
+msgid "GTFS-Stops"
+msgstr ""
+
+msgid "Type of stops to add"
+msgstr ""
+
+msgid "Time on your GPS device"
+msgstr ""
+
+msgid "HH:MM:SS.sss"
+msgstr "ΩΩ:ΛΛ:ΔΔ.δδδ"
+
+msgid "Time on your stopwatch"
+msgstr ""
+
+msgid "Time window"
+msgstr ""
+
+msgid "seconds"
+msgstr "δευτερόλεπτα"
+
+msgid "Move Threshold"
+msgstr ""
+
+msgid "Catch"
+msgstr ""
+
+msgid "Join"
+msgstr "Σύνδεση"
+
+msgid "Create Stops from GPX"
+msgstr "Δημιουργία Στάσεων από GPX"
+
+msgid "Tracks in this GPX file:"
+msgstr "Ίχνη σε αυτό το ερχείο GPX:"
+
+msgid "Detach"
+msgstr "Απόσπαση"
+
+msgid "implicit"
+msgstr ""
+
+msgid "State"
+msgstr "Πολιτεία"
+
+msgid "[incomplete]"
+msgstr ""
+
+msgid "[empty way]"
+msgstr ""
+
+msgid "[gap]"
+msgstr ""
+
+msgid "Stopname"
+msgstr ""
+
+msgid " [ID] {0}"
+msgstr ""
+
+msgid ""
+"The GPX file doesn''t contain valid trackpoints. Please use a GPX file that "
+"has trackpoints."
+msgstr ""
+
+msgid "GPX File Trouble"
+msgstr ""
+
+msgid "unnamed"
+msgstr "χωρίς όνομα"
+
 msgid "Distance between stops"
 msgstr ""
 
@@ -34133,6 +34214,9 @@ msgstr "Ανοίγει τον διάλογο επεξεργασίας ετικε
 msgid "JOSM Tag Editor Plugin"
 msgstr ""
 
+msgid "Presets"
+msgstr "Προεπιλογές"
+
 msgid "Abort tag editing and close dialog"
 msgstr ""
 
@@ -36108,6 +36192,26 @@ msgid_plural "Overwrite ''{0}'' tags {1} from {2} with new value ''{3}''?"
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Download from Sophox API"
+msgstr ""
+
+msgid ""
+"Find places of education at least 2km, and at most 3km from the center of "
+"the selection"
+msgstr ""
+
+msgid "Show/hide Sophox snippet list"
+msgstr ""
+
+msgid "help"
+msgstr ""
+
+msgid "Server: "
+msgstr ""
+
+msgid "Wikidata+OSM server"
+msgstr ""
+
 msgid "Search Wikidata items"
 msgstr ""
 
@@ -36181,26 +36285,6 @@ msgid ""
 "objects"
 msgstr ""
 
-msgid "Download from Wikosm API"
-msgstr ""
-
-msgid ""
-"Find places of education at least 2km, and at most 3km from the center of "
-"the selection"
-msgstr ""
-
-msgid "Show/hide Wikosm snippet list"
-msgstr ""
-
-msgid "help"
-msgstr ""
-
-msgid "Server: "
-msgstr ""
-
-msgid "Wikidata+OSM server"
-msgstr ""
-
 msgid "The Ultimate WMS Super-speed Turbo Challenge II"
 msgstr ""
 
diff --git a/i18n/po/en_AU.po b/i18n/po/en_AU.po
index 67bbb6c..de735c9 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-10-30 03:38+0100\n"
+"POT-Creation-Date: 2017-11-26 00:06+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-10-30 05:07+0000\n"
-"X-Generator: Launchpad (build 18493)\n"
+"X-Launchpad-Export-Date: 2017-11-26 05:10+0000\n"
+"X-Generator: Launchpad (build 18509)\n"
 "Language: \n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -446,12 +446,15 @@ msgstr ""
 msgid "Delete the active layer. Does not delete the associated file."
 msgstr ""
 
-msgid "Toggle dialogs panel"
-msgstr "Toggle dialogues panel"
+msgid "Dialogs panel"
+msgstr ""
 
 msgid "Toggle dialogs panel, maximize mapview"
 msgstr "Toggle dialogues panel, maximise mapview"
 
+msgid "Toggle dialogs panel"
+msgstr "Toggle dialogues panel"
+
 msgid "Distribute Nodes"
 msgstr "Distribute Nodes"
 
@@ -6868,6 +6871,9 @@ msgstr "Coordinates: "
 msgid "Coordinates (projected): "
 msgstr "Coordinates (projected): "
 
+msgid "UTM Zone"
+msgstr "UTM Zone"
+
 msgid "Part of: "
 msgstr "Part of: "
 
@@ -9317,6 +9323,11 @@ msgstr ""
 msgid "Check \"Save\" to save the layer to the file specified on the left."
 msgstr ""
 
+msgid ""
+"A background upload is already in progress. Kindly wait for it to finish "
+"before uploading new changes"
+msgstr ""
+
 msgid "I would like someone to review my edits."
 msgstr ""
 
@@ -10523,6 +10534,9 @@ msgstr ""
 msgid "Save Layer"
 msgstr "Save Layer"
 
+msgid "Trying to set a read only data layer as edit layer"
+msgstr ""
+
 msgid "{0} note"
 msgid_plural "{0} notes"
 msgstr[0] ""
@@ -11408,11 +11422,6 @@ msgstr "Failed to load Mappaint styles from ''{0}''. Exception was: {1}"
 msgid "Failed to parse Mappaint styles from ''{0}''. Error was: {1}"
 msgstr "Failed to parse Mappaint styles from ''{0}''. Error was: {1}"
 
-msgid ""
-"Detected deprecated ''{0}'' in ''{1}'' which will be removed shortly. Use "
-"''{2}'' instead."
-msgstr ""
-
 msgid "Failed to locate image ''{0}''"
 msgstr ""
 
@@ -12682,6 +12691,9 @@ msgstr "Show splash screen at startup"
 msgid "Show object ID in selection lists"
 msgstr "Show object ID in selection lists"
 
+msgid "Show node coordinates in selection lists"
+msgstr ""
+
 msgid "Show localized name in selection lists"
 msgstr "Show localised name in selection lists"
 
@@ -13450,9 +13462,6 @@ msgstr ""
 msgid "UTM"
 msgstr "UTM"
 
-msgid "UTM Zone"
-msgstr "UTM Zone"
-
 msgid "North"
 msgstr "North"
 
@@ -13943,9 +13952,6 @@ msgstr ""
 msgid "Error parsing {0}: "
 msgstr "Error parsing {0}: "
 
-msgid "Presets"
-msgstr "Presets"
-
 msgid "Search for objects by preset..."
 msgstr ""
 
@@ -16606,6 +16612,18 @@ msgstr ""
 msgid "korean"
 msgstr ""
 
+msgid "donut"
+msgstr ""
+
+msgid "mediterranean"
+msgstr ""
+
+msgid "friture"
+msgstr ""
+
+msgid "crepe"
+msgstr ""
+
 msgid "Internet access"
 msgstr ""
 
@@ -19448,8 +19466,17 @@ msgstr ""
 msgid "Tents allowed"
 msgstr ""
 
-msgid "Camping Site"
-msgstr "Camp Site"
+msgid "Campsite"
+msgstr ""
+
+msgid "Caravans allowed"
+msgstr ""
+
+msgid "Backcountry"
+msgstr ""
+
+msgid "Group only access"
+msgstr ""
 
 msgid "Food+Drinks"
 msgstr "Food+Drinks"
@@ -24277,6 +24304,14 @@ msgid ""
 "resolution or better, and refreshed more frequently with ongoing updates."
 msgstr ""
 
+msgid "DigitalGlobe Premium Imagery Vintage"
+msgstr ""
+
+msgid ""
+"Imagery boundaries and capture dates. Labels appear at zoom level 14 and "
+"higher."
+msgstr ""
+
 msgid "DigitalGlobe Standard Imagery"
 msgstr ""
 
@@ -24286,6 +24321,9 @@ msgid ""
 "Landsat. Average age is 2.31 years, with some areas updated 2x per year."
 msgstr ""
 
+msgid "DigitalGlobe Standard Imagery Vintage"
+msgstr ""
+
 msgid "Esri World Imagery"
 msgstr ""
 
@@ -24349,6 +24387,12 @@ msgstr ""
 msgid "Strava cycling and running heatmap"
 msgstr ""
 
+msgid "Strava water sports heatmap"
+msgstr ""
+
+msgid "Strava winter sports heatmap"
+msgstr ""
+
 msgid "Locator Overlay"
 msgstr ""
 
@@ -24753,6 +24797,9 @@ msgstr ""
 msgid "SPW(allonie) most recent aerial imagery"
 msgstr ""
 
+msgid "SPW(allonie) 2016 aerial imagery"
+msgstr ""
+
 msgid "SPW(allonie) 2015 aerial imagery"
 msgstr ""
 
@@ -24798,6 +24845,14 @@ msgstr ""
 msgid "Addresses data from IBGE"
 msgstr ""
 
+msgid "Street names IBGE Salvador-BA"
+msgstr ""
+
+msgid ""
+"Streets geometry and names of Salvador, Bahia. Source: Faces de Logradouro - "
+"IBGE."
+msgstr ""
+
 msgid "Rio Mosaic 2013"
 msgstr ""
 
@@ -25528,6 +25583,9 @@ msgstr ""
 msgid "Japan GSI ortho Imagery"
 msgstr ""
 
+msgid "Japan GSI Standard Map"
+msgstr ""
+
 msgid "imagico.de OSM images for mapping: Aral Sea (low water level)"
 msgstr ""
 
@@ -25557,7 +25615,7 @@ msgstr ""
 msgid "20cm ortho - Latvia - Coastline"
 msgstr ""
 
-msgid "1.cikla ortofotokarte - Latvia"
+msgid "Orthophoto 1st cycle (1994-1999) - Latvia"
 msgstr ""
 
 msgid "ORT10LT (Lithuania)"
@@ -25566,6 +25624,9 @@ msgstr ""
 msgid "geoportail.lu all layers"
 msgstr ""
 
+msgid "geoportail.lu ortho latest"
+msgstr ""
+
 msgid "geoportail.lu ortho 2016"
 msgstr ""
 
@@ -27056,6 +27117,9 @@ msgstr ""
 msgid "{0} on a node. Should be used on a way."
 msgstr ""
 
+msgid "{0} on a node. Should be used on a way or relation."
+msgstr ""
+
 msgid "{0} on a node. Should be drawn as an area."
 msgstr ""
 
@@ -27283,6 +27347,9 @@ msgstr ""
 msgid "Nodes duplicating parent way tags"
 msgstr ""
 
+msgid "{0} together with {1} and {2}. Remove {0}."
+msgstr ""
+
 msgid ""
 "wikipedia tag has no language given, use ''wikipedia''=''language:page "
 "title''"
@@ -28078,6 +28145,21 @@ msgstr "Uploads traces to openstreetmap.org"
 msgid "Importing..."
 msgstr ""
 
+msgid "Shape is started incorrectly"
+msgstr ""
+
+msgid "Can''t load SVG diagram"
+msgstr ""
+
+msgid "Can''t find root SVG element"
+msgstr ""
+
+msgid "Import primitives"
+msgstr ""
+
+msgid "Cannot find configuration file!"
+msgstr ""
+
 msgid "DXF files [ImportDxf plugin] (*.dxf)"
 msgstr ""
 
@@ -28717,6 +28799,9 @@ msgstr ""
 msgid "Download mode"
 msgstr ""
 
+msgid "Number of images to be pre-fetched (forwards and backwards)"
+msgstr ""
+
 msgid "You are logged in as ''{0}''."
 msgstr ""
 
@@ -28927,8 +29012,17 @@ msgid "only when manually requested"
 msgstr ""
 
 msgid ""
-"The downloaded OSM area is too big. Download mode has been changed to OSM "
-"area until the layer is restarted."
+"The Mapillary layer has stopped downloading images, because the requested "
+"area is too big!"
+msgstr ""
+
+msgid ""
+"To solve this problem, you could zoom in and load a smaller area of the map."
+msgstr ""
+
+msgid ""
+"To solve this problem, you could switch to download mode ''{0}'' and load "
+"Mapillary images for a smaller portion of the map."
 msgstr ""
 
 msgid "Downloading"
@@ -32297,23 +32391,6 @@ msgstr ""
 msgid "Merge Overlap (combine)"
 msgstr ""
 
-msgid ""
-"<html>A role based relation membership was copied to all new ways.<br>You "
-"should verify this and correct it when necessary.</html>"
-msgstr ""
-"<html>A role based relation membership was copied to all new ways.<br>You "
-"should verify this and correct it when necessary.</html>"
-
-msgid ""
-"<html>A relation membership was copied to all new ways.<br>You should verify "
-"this and correct it when necessary.</html>"
-msgstr ""
-"<html>A relation membership was copied to all new ways.<br>You should verify "
-"this and correct it when necessary.</html>"
-
-msgid "Split way"
-msgstr ""
-
 msgid "Michigan Left"
 msgstr "Michigan Left"
 
@@ -33771,33 +33848,6 @@ msgstr ""
 msgid "PT: Route passes a oneway road in the wrong direction"
 msgstr ""
 
-msgid "moved"
-msgstr ""
-
-msgid "rail"
-msgstr "rail"
-
-msgid "Can''t parse a time from this string."
-msgstr ""
-
-msgid "Invalid value"
-msgstr ""
-
-msgid "added"
-msgstr ""
-
-msgid "Public Transport: Enable GTFSStops"
-msgstr ""
-
-msgid "Public Transport: Catch GTFS stops"
-msgstr ""
-
-msgid "skipped"
-msgstr ""
-
-msgid "Public Transport: Disable GTFS"
-msgstr ""
-
 msgid "Create Stops from GTFS ..."
 msgstr ""
 
@@ -33824,34 +33874,49 @@ msgstr ""
 msgid "The GTFS file was empty."
 msgstr ""
 
-msgid "Create Stops from GTFS"
+msgid "[ID] {0}"
 msgstr ""
 
-msgid "GTFS-Stops"
-msgstr ""
+msgid "Route patterns ..."
+msgstr "Route patterns ..."
 
-msgid "Type of stops to add"
+msgid "Edit Route patterns for public transport"
+msgstr "Edit Route patterns for public transport"
+
+msgid "Route Patterns"
 msgstr ""
 
-msgid "Time on your GPS device"
+msgid "Overview"
+msgstr "Overview"
+
+msgid "Itinerary"
+msgstr "Itinerary"
+
+msgid "Stops"
+msgstr "Stops"
+
+msgid "Meta"
+msgstr "Meta"
+
+msgid "Existing route patterns:"
 msgstr ""
 
-msgid "HH:MM:SS.sss"
+msgid "Reflect"
 msgstr ""
 
-msgid "Time on your stopwatch"
+msgid "Required tags:"
 msgstr ""
 
-msgid "Time window"
+msgid "Common tags:"
 msgstr ""
 
-msgid "seconds"
+msgid "Additional tags:"
 msgstr ""
 
-msgid "Move Threshold"
+msgid "Add a new Tag"
 msgstr ""
 
-msgid "Suggest Stops"
+msgid "Name/Id"
 msgstr ""
 
 msgid "Find"
@@ -33863,162 +33928,174 @@ msgstr "Show"
 msgid "Mark"
 msgstr ""
 
-msgid "Catch"
+msgid "Ref"
 msgstr ""
 
-msgid "Join"
+msgid "Stops are possible on the"
 msgstr ""
 
-msgid "Public Transport: Join GTFS stops"
+msgid "right hand side"
 msgstr ""
 
-msgid "State"
-msgstr "State"
+msgid "left hand side"
+msgstr ""
 
-msgid "[incomplete]"
+msgid "Maximum distance from route"
 msgstr ""
 
-msgid "[empty way]"
+msgid "Suggest Stops"
 msgstr ""
 
-msgid "[ID] {0}"
+msgid "Create Stops from GPX ..."
 msgstr ""
 
-msgid "[gap]"
+msgid "Create Stops from a GPX file"
 msgstr ""
 
-msgid "Route patterns ..."
-msgstr "Route patterns ..."
+msgid "Select GPX file"
+msgstr ""
 
-msgid "Edit Route patterns for public transport"
-msgstr "Edit Route patterns for public transport"
+msgid "The GPX file contained no tracks or waypoints."
+msgstr ""
 
-msgid "Route Patterns"
+msgid "moved"
 msgstr ""
 
-msgid "Overview"
-msgstr "Overview"
+msgid "added"
+msgstr ""
 
-msgid "Itinerary"
-msgstr "Itinerary"
+msgid "Public Transport: Enable GTFSStops"
+msgstr ""
 
-msgid "Stops"
-msgstr "Stops"
+msgid "Public Transport: Catch GTFS stops"
+msgstr ""
 
-msgid "Meta"
-msgstr "Meta"
+msgid "skipped"
+msgstr ""
 
-msgid "Existing route patterns:"
+msgid "Public Transport: Disable GTFS"
 msgstr ""
 
-msgid "Reflect"
+msgid "Public Transport: Join GTFS stops"
 msgstr ""
 
-msgid "Required tags:"
+msgid "Public Transport: Change stop type"
 msgstr ""
 
-msgid "Common tags:"
+msgid "Public Transport: Add track stop"
 msgstr ""
 
-msgid "Additional tags:"
+msgid "Public Transport: Delete track stop"
 msgstr ""
 
-msgid "Add a new Tag"
+msgid "Public Transport: Detach track stop list"
 msgstr ""
 
-msgid "Name/Id"
+msgid "Public Transport: Edit track stop list"
 msgstr ""
 
-msgid "Ref"
+msgid "Public Transport: Relocate nodes in track stoplist"
 msgstr ""
 
-msgid "Stops are possible on the"
+msgid "Public Transport: sort track stop list"
 msgstr ""
 
-msgid "right hand side"
+msgid "Public Transport: Suggest stops"
 msgstr ""
 
-msgid "left hand side"
+msgid "Public Transport: Detach waypoints"
 msgstr ""
 
-msgid "Maximum distance from route"
+msgid "Public Transport: Disable waypoints"
 msgstr ""
 
-msgid " [ID] {0}"
+msgid "Public Transport: Enable waypoints"
 msgstr ""
 
-msgid "Public Transport: Change stop type"
+msgid "Public Transport: Edit waypoint name"
 msgstr ""
 
-msgid "Create Stops from GPX ..."
+msgid "rail"
+msgstr "rail"
+
+msgid "Can''t parse a time from this string."
 msgstr ""
 
-msgid "Create Stops from a GPX file"
+msgid "Invalid value"
 msgstr ""
 
-msgid "Select GPX file"
+msgid "Create Stops from GTFS"
 msgstr ""
 
-msgid "The GPX file contained no tracks or waypoints."
+msgid "GTFS-Stops"
 msgstr ""
 
-msgid "Create Stops from GPX"
+msgid "Type of stops to add"
 msgstr ""
 
-msgid "Tracks in this GPX file:"
+msgid "Time on your GPS device"
 msgstr ""
 
-msgid "Detach"
+msgid "HH:MM:SS.sss"
 msgstr ""
 
-msgid "implicit"
+msgid "Time on your stopwatch"
 msgstr ""
 
-msgid ""
-"The GPX file doesn''t contain valid trackpoints. Please use a GPX file that "
-"has trackpoints."
+msgid "Time window"
 msgstr ""
 
-msgid "GPX File Trouble"
+msgid "seconds"
 msgstr ""
 
-msgid "unnamed"
+msgid "Move Threshold"
 msgstr ""
 
-msgid "Public Transport: Add track stop"
+msgid "Catch"
 msgstr ""
 
-msgid "Public Transport: Delete track stop"
+msgid "Join"
 msgstr ""
 
-msgid "Public Transport: Detach track stop list"
+msgid "Create Stops from GPX"
 msgstr ""
 
-msgid "Public Transport: Edit track stop list"
+msgid "Tracks in this GPX file:"
 msgstr ""
 
-msgid "Public Transport: Relocate nodes in track stoplist"
+msgid "Detach"
 msgstr ""
 
-msgid "Public Transport: sort track stop list"
+msgid "implicit"
 msgstr ""
 
-msgid "Public Transport: Suggest stops"
+msgid "State"
+msgstr "State"
+
+msgid "[incomplete]"
+msgstr ""
+
+msgid "[empty way]"
+msgstr ""
+
+msgid "[gap]"
 msgstr ""
 
 msgid "Stopname"
 msgstr ""
 
-msgid "Public Transport: Detach waypoints"
+msgid " [ID] {0}"
 msgstr ""
 
-msgid "Public Transport: Disable waypoints"
+msgid ""
+"The GPX file doesn''t contain valid trackpoints. Please use a GPX file that "
+"has trackpoints."
 msgstr ""
 
-msgid "Public Transport: Enable waypoints"
+msgid "GPX File Trouble"
 msgstr ""
 
-msgid "Public Transport: Edit waypoint name"
+msgid "unnamed"
 msgstr ""
 
 msgid "Distance between stops"
@@ -34751,6 +34828,9 @@ msgstr "Launches the tag editor dialogue"
 msgid "JOSM Tag Editor Plugin"
 msgstr "JOSM Tag Editor Plug-in"
 
+msgid "Presets"
+msgstr "Presets"
+
 msgid "Abort tag editing and close dialog"
 msgstr "Abort tag editing and close dialogue"
 
@@ -36687,6 +36767,26 @@ msgid_plural "Overwrite ''{0}'' tags {1} from {2} with new value ''{3}''?"
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Download from Sophox API"
+msgstr ""
+
+msgid ""
+"Find places of education at least 2km, and at most 3km from the center of "
+"the selection"
+msgstr ""
+
+msgid "Show/hide Sophox snippet list"
+msgstr ""
+
+msgid "help"
+msgstr ""
+
+msgid "Server: "
+msgstr ""
+
+msgid "Wikidata+OSM server"
+msgstr ""
+
 msgid "Search Wikidata items"
 msgstr ""
 
@@ -36762,26 +36862,6 @@ msgstr ""
 "Adds a ''wikipedia'' tag corresponding to this article to the selected "
 "objects"
 
-msgid "Download from Wikosm API"
-msgstr ""
-
-msgid ""
-"Find places of education at least 2km, and at most 3km from the center of "
-"the selection"
-msgstr ""
-
-msgid "Show/hide Wikosm snippet list"
-msgstr ""
-
-msgid "help"
-msgstr ""
-
-msgid "Server: "
-msgstr ""
-
-msgid "Wikidata+OSM server"
-msgstr ""
-
 msgid "The Ultimate WMS Super-speed Turbo Challenge II"
 msgstr "The Ultimate WMS Super-speed Turbo Challenge II"
 
diff --git a/i18n/po/en_CA.po b/i18n/po/en_CA.po
index 95791a9..8af58de 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-10-30 03:38+0100\n"
+"POT-Creation-Date: 2017-11-26 00:06+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-10-30 05:09+0000\n"
-"X-Generator: Launchpad (build 18493)\n"
+"X-Launchpad-Export-Date: 2017-11-26 05:12+0000\n"
+"X-Generator: Launchpad (build 18509)\n"
 "Language: \n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -427,12 +427,15 @@ msgstr ""
 msgid "Delete the active layer. Does not delete the associated file."
 msgstr ""
 
-msgid "Toggle dialogs panel"
+msgid "Dialogs panel"
 msgstr ""
 
 msgid "Toggle dialogs panel, maximize mapview"
 msgstr ""
 
+msgid "Toggle dialogs panel"
+msgstr ""
+
 msgid "Distribute Nodes"
 msgstr ""
 
@@ -6494,6 +6497,9 @@ msgstr ""
 msgid "Coordinates (projected): "
 msgstr ""
 
+msgid "UTM Zone"
+msgstr ""
+
 msgid "Part of: "
 msgstr ""
 
@@ -8792,6 +8798,11 @@ msgstr ""
 msgid "Check \"Save\" to save the layer to the file specified on the left."
 msgstr ""
 
+msgid ""
+"A background upload is already in progress. Kindly wait for it to finish "
+"before uploading new changes"
+msgstr ""
+
 msgid "I would like someone to review my edits."
 msgstr ""
 
@@ -9900,6 +9911,9 @@ msgstr ""
 msgid "Save Layer"
 msgstr ""
 
+msgid "Trying to set a read only data layer as edit layer"
+msgstr ""
+
 msgid "{0} note"
 msgid_plural "{0} notes"
 msgstr[0] ""
@@ -10730,11 +10744,6 @@ msgstr ""
 msgid "Failed to parse Mappaint styles from ''{0}''. Error was: {1}"
 msgstr ""
 
-msgid ""
-"Detected deprecated ''{0}'' in ''{1}'' which will be removed shortly. Use "
-"''{2}'' instead."
-msgstr ""
-
 msgid "Failed to locate image ''{0}''"
 msgstr ""
 
@@ -11899,6 +11908,9 @@ msgstr ""
 msgid "Show object ID in selection lists"
 msgstr ""
 
+msgid "Show node coordinates in selection lists"
+msgstr ""
+
 msgid "Show localized name in selection lists"
 msgstr ""
 
@@ -12655,9 +12667,6 @@ msgstr ""
 msgid "UTM"
 msgstr ""
 
-msgid "UTM Zone"
-msgstr ""
-
 msgid "North"
 msgstr ""
 
@@ -13125,9 +13134,6 @@ msgstr ""
 msgid "Error parsing {0}: "
 msgstr ""
 
-msgid "Presets"
-msgstr ""
-
 msgid "Search for objects by preset..."
 msgstr ""
 
@@ -15669,6 +15675,18 @@ msgstr ""
 msgid "korean"
 msgstr ""
 
+msgid "donut"
+msgstr ""
+
+msgid "mediterranean"
+msgstr ""
+
+msgid "friture"
+msgstr ""
+
+msgid "crepe"
+msgstr ""
+
 msgid "Internet access"
 msgstr ""
 
@@ -18511,7 +18529,16 @@ msgstr ""
 msgid "Tents allowed"
 msgstr ""
 
-msgid "Camping Site"
+msgid "Campsite"
+msgstr ""
+
+msgid "Caravans allowed"
+msgstr ""
+
+msgid "Backcountry"
+msgstr ""
+
+msgid "Group only access"
 msgstr ""
 
 msgid "Food+Drinks"
@@ -23340,6 +23367,14 @@ msgid ""
 "resolution or better, and refreshed more frequently with ongoing updates."
 msgstr ""
 
+msgid "DigitalGlobe Premium Imagery Vintage"
+msgstr ""
+
+msgid ""
+"Imagery boundaries and capture dates. Labels appear at zoom level 14 and "
+"higher."
+msgstr ""
+
 msgid "DigitalGlobe Standard Imagery"
 msgstr ""
 
@@ -23349,6 +23384,9 @@ msgid ""
 "Landsat. Average age is 2.31 years, with some areas updated 2x per year."
 msgstr ""
 
+msgid "DigitalGlobe Standard Imagery Vintage"
+msgstr ""
+
 msgid "Esri World Imagery"
 msgstr ""
 
@@ -23412,6 +23450,12 @@ msgstr ""
 msgid "Strava cycling and running heatmap"
 msgstr ""
 
+msgid "Strava water sports heatmap"
+msgstr ""
+
+msgid "Strava winter sports heatmap"
+msgstr ""
+
 msgid "Locator Overlay"
 msgstr ""
 
@@ -23816,6 +23860,9 @@ msgstr ""
 msgid "SPW(allonie) most recent aerial imagery"
 msgstr ""
 
+msgid "SPW(allonie) 2016 aerial imagery"
+msgstr ""
+
 msgid "SPW(allonie) 2015 aerial imagery"
 msgstr ""
 
@@ -23861,6 +23908,14 @@ msgstr ""
 msgid "Addresses data from IBGE"
 msgstr ""
 
+msgid "Street names IBGE Salvador-BA"
+msgstr ""
+
+msgid ""
+"Streets geometry and names of Salvador, Bahia. Source: Faces de Logradouro - "
+"IBGE."
+msgstr ""
+
 msgid "Rio Mosaic 2013"
 msgstr ""
 
@@ -24591,6 +24646,9 @@ msgstr ""
 msgid "Japan GSI ortho Imagery"
 msgstr ""
 
+msgid "Japan GSI Standard Map"
+msgstr ""
+
 msgid "imagico.de OSM images for mapping: Aral Sea (low water level)"
 msgstr ""
 
@@ -24620,7 +24678,7 @@ msgstr ""
 msgid "20cm ortho - Latvia - Coastline"
 msgstr ""
 
-msgid "1.cikla ortofotokarte - Latvia"
+msgid "Orthophoto 1st cycle (1994-1999) - Latvia"
 msgstr ""
 
 msgid "ORT10LT (Lithuania)"
@@ -24629,6 +24687,9 @@ msgstr ""
 msgid "geoportail.lu all layers"
 msgstr ""
 
+msgid "geoportail.lu ortho latest"
+msgstr ""
+
 msgid "geoportail.lu ortho 2016"
 msgstr ""
 
@@ -26119,6 +26180,9 @@ msgstr ""
 msgid "{0} on a node. Should be used on a way."
 msgstr ""
 
+msgid "{0} on a node. Should be used on a way or relation."
+msgstr ""
+
 msgid "{0} on a node. Should be drawn as an area."
 msgstr ""
 
@@ -26346,6 +26410,9 @@ msgstr ""
 msgid "Nodes duplicating parent way tags"
 msgstr ""
 
+msgid "{0} together with {1} and {2}. Remove {0}."
+msgstr ""
+
 msgid ""
 "wikipedia tag has no language given, use ''wikipedia''=''language:page "
 "title''"
@@ -27110,6 +27177,21 @@ msgstr ""
 msgid "Importing..."
 msgstr ""
 
+msgid "Shape is started incorrectly"
+msgstr ""
+
+msgid "Can''t load SVG diagram"
+msgstr ""
+
+msgid "Can''t find root SVG element"
+msgstr ""
+
+msgid "Import primitives"
+msgstr ""
+
+msgid "Cannot find configuration file!"
+msgstr ""
+
 msgid "DXF files [ImportDxf plugin] (*.dxf)"
 msgstr ""
 
@@ -27749,6 +27831,9 @@ msgstr ""
 msgid "Download mode"
 msgstr ""
 
+msgid "Number of images to be pre-fetched (forwards and backwards)"
+msgstr ""
+
 msgid "You are logged in as ''{0}''."
 msgstr ""
 
@@ -27959,8 +28044,17 @@ msgid "only when manually requested"
 msgstr ""
 
 msgid ""
-"The downloaded OSM area is too big. Download mode has been changed to OSM "
-"area until the layer is restarted."
+"The Mapillary layer has stopped downloading images, because the requested "
+"area is too big!"
+msgstr ""
+
+msgid ""
+"To solve this problem, you could zoom in and load a smaller area of the map."
+msgstr ""
+
+msgid ""
+"To solve this problem, you could switch to download mode ''{0}'' and load "
+"Mapillary images for a smaller portion of the map."
 msgstr ""
 
 msgid "Downloading"
@@ -31272,19 +31366,6 @@ msgstr ""
 msgid "Merge Overlap (combine)"
 msgstr ""
 
-msgid ""
-"<html>A role based relation membership was copied to all new ways.<br>You "
-"should verify this and correct it when necessary.</html>"
-msgstr ""
-
-msgid ""
-"<html>A relation membership was copied to all new ways.<br>You should verify "
-"this and correct it when necessary.</html>"
-msgstr ""
-
-msgid "Split way"
-msgstr ""
-
 msgid "Michigan Left"
 msgstr ""
 
@@ -32739,254 +32820,254 @@ msgstr ""
 msgid "PT: Route passes a oneway road in the wrong direction"
 msgstr ""
 
-msgid "moved"
+msgid "Create Stops from GTFS ..."
 msgstr ""
 
-msgid "rail"
+msgid "Create Stops from a GTFS file"
 msgstr ""
 
-msgid "Can''t parse a time from this string."
+msgid "Select GTFS file (stops.txt)"
 msgstr ""
 
-msgid "Invalid value"
+msgid "File \"{0}\" does not exist"
 msgstr ""
 
-msgid "added"
+msgid "IOException \"{0}\" occurred"
 msgstr ""
 
-msgid "Public Transport: Enable GTFSStops"
+msgid ""
+"There exists no dataset. Try to download data from the server or open an OSM "
+"file."
 msgstr ""
 
-msgid "Public Transport: Catch GTFS stops"
+msgid "No data found"
 msgstr ""
 
-msgid "skipped"
+msgid "The GTFS file was empty."
 msgstr ""
 
-msgid "Public Transport: Disable GTFS"
+msgid "[ID] {0}"
 msgstr ""
 
-msgid "Create Stops from GTFS ..."
+msgid "Route patterns ..."
 msgstr ""
 
-msgid "Create Stops from a GTFS file"
+msgid "Edit Route patterns for public transport"
 msgstr ""
 
-msgid "Select GTFS file (stops.txt)"
+msgid "Route Patterns"
 msgstr ""
 
-msgid "File \"{0}\" does not exist"
+msgid "Overview"
 msgstr ""
 
-msgid "IOException \"{0}\" occurred"
+msgid "Itinerary"
 msgstr ""
 
-msgid ""
-"There exists no dataset. Try to download data from the server or open an OSM "
-"file."
+msgid "Stops"
 msgstr ""
 
-msgid "No data found"
+msgid "Meta"
 msgstr ""
 
-msgid "The GTFS file was empty."
+msgid "Existing route patterns:"
 msgstr ""
 
-msgid "Create Stops from GTFS"
+msgid "Reflect"
 msgstr ""
 
-msgid "GTFS-Stops"
+msgid "Required tags:"
 msgstr ""
 
-msgid "Type of stops to add"
+msgid "Common tags:"
 msgstr ""
 
-msgid "Time on your GPS device"
+msgid "Additional tags:"
 msgstr ""
 
-msgid "HH:MM:SS.sss"
+msgid "Add a new Tag"
 msgstr ""
 
-msgid "Time on your stopwatch"
+msgid "Name/Id"
 msgstr ""
 
-msgid "Time window"
+msgid "Find"
 msgstr ""
 
-msgid "seconds"
+msgid "Show"
 msgstr ""
 
-msgid "Move Threshold"
+msgid "Mark"
 msgstr ""
 
-msgid "Suggest Stops"
+msgid "Ref"
 msgstr ""
 
-msgid "Find"
+msgid "Stops are possible on the"
 msgstr ""
 
-msgid "Show"
+msgid "right hand side"
 msgstr ""
 
-msgid "Mark"
+msgid "left hand side"
 msgstr ""
 
-msgid "Catch"
+msgid "Maximum distance from route"
 msgstr ""
 
-msgid "Join"
+msgid "Suggest Stops"
 msgstr ""
 
-msgid "Public Transport: Join GTFS stops"
+msgid "Create Stops from GPX ..."
 msgstr ""
 
-msgid "State"
+msgid "Create Stops from a GPX file"
 msgstr ""
 
-msgid "[incomplete]"
+msgid "Select GPX file"
 msgstr ""
 
-msgid "[empty way]"
+msgid "The GPX file contained no tracks or waypoints."
 msgstr ""
 
-msgid "[ID] {0}"
+msgid "moved"
 msgstr ""
 
-msgid "[gap]"
+msgid "added"
 msgstr ""
 
-msgid "Route patterns ..."
+msgid "Public Transport: Enable GTFSStops"
 msgstr ""
 
-msgid "Edit Route patterns for public transport"
+msgid "Public Transport: Catch GTFS stops"
 msgstr ""
 
-msgid "Route Patterns"
+msgid "skipped"
 msgstr ""
 
-msgid "Overview"
+msgid "Public Transport: Disable GTFS"
 msgstr ""
 
-msgid "Itinerary"
+msgid "Public Transport: Join GTFS stops"
 msgstr ""
 
-msgid "Stops"
+msgid "Public Transport: Change stop type"
 msgstr ""
 
-msgid "Meta"
+msgid "Public Transport: Add track stop"
 msgstr ""
 
-msgid "Existing route patterns:"
+msgid "Public Transport: Delete track stop"
 msgstr ""
 
-msgid "Reflect"
+msgid "Public Transport: Detach track stop list"
 msgstr ""
 
-msgid "Required tags:"
+msgid "Public Transport: Edit track stop list"
 msgstr ""
 
-msgid "Common tags:"
+msgid "Public Transport: Relocate nodes in track stoplist"
 msgstr ""
 
-msgid "Additional tags:"
+msgid "Public Transport: sort track stop list"
 msgstr ""
 
-msgid "Add a new Tag"
+msgid "Public Transport: Suggest stops"
 msgstr ""
 
-msgid "Name/Id"
+msgid "Public Transport: Detach waypoints"
 msgstr ""
 
-msgid "Ref"
+msgid "Public Transport: Disable waypoints"
 msgstr ""
 
-msgid "Stops are possible on the"
+msgid "Public Transport: Enable waypoints"
 msgstr ""
 
-msgid "right hand side"
+msgid "Public Transport: Edit waypoint name"
 msgstr ""
 
-msgid "left hand side"
+msgid "rail"
 msgstr ""
 
-msgid "Maximum distance from route"
+msgid "Can''t parse a time from this string."
 msgstr ""
 
-msgid " [ID] {0}"
+msgid "Invalid value"
 msgstr ""
 
-msgid "Public Transport: Change stop type"
+msgid "Create Stops from GTFS"
 msgstr ""
 
-msgid "Create Stops from GPX ..."
+msgid "GTFS-Stops"
 msgstr ""
 
-msgid "Create Stops from a GPX file"
+msgid "Type of stops to add"
 msgstr ""
 
-msgid "Select GPX file"
+msgid "Time on your GPS device"
 msgstr ""
 
-msgid "The GPX file contained no tracks or waypoints."
+msgid "HH:MM:SS.sss"
 msgstr ""
 
-msgid "Create Stops from GPX"
+msgid "Time on your stopwatch"
 msgstr ""
 
-msgid "Tracks in this GPX file:"
+msgid "Time window"
 msgstr ""
 
-msgid "Detach"
+msgid "seconds"
 msgstr ""
 
-msgid "implicit"
+msgid "Move Threshold"
 msgstr ""
 
-msgid ""
-"The GPX file doesn''t contain valid trackpoints. Please use a GPX file that "
-"has trackpoints."
+msgid "Catch"
 msgstr ""
 
-msgid "GPX File Trouble"
+msgid "Join"
 msgstr ""
 
-msgid "unnamed"
+msgid "Create Stops from GPX"
 msgstr ""
 
-msgid "Public Transport: Add track stop"
+msgid "Tracks in this GPX file:"
 msgstr ""
 
-msgid "Public Transport: Delete track stop"
+msgid "Detach"
 msgstr ""
 
-msgid "Public Transport: Detach track stop list"
+msgid "implicit"
 msgstr ""
 
-msgid "Public Transport: Edit track stop list"
+msgid "State"
 msgstr ""
 
-msgid "Public Transport: Relocate nodes in track stoplist"
+msgid "[incomplete]"
 msgstr ""
 
-msgid "Public Transport: sort track stop list"
+msgid "[empty way]"
 msgstr ""
 
-msgid "Public Transport: Suggest stops"
+msgid "[gap]"
 msgstr ""
 
 msgid "Stopname"
 msgstr ""
 
-msgid "Public Transport: Detach waypoints"
+msgid " [ID] {0}"
 msgstr ""
 
-msgid "Public Transport: Disable waypoints"
+msgid ""
+"The GPX file doesn''t contain valid trackpoints. Please use a GPX file that "
+"has trackpoints."
 msgstr ""
 
-msgid "Public Transport: Enable waypoints"
+msgid "GPX File Trouble"
 msgstr ""
 
-msgid "Public Transport: Edit waypoint name"
+msgid "unnamed"
 msgstr ""
 
 msgid "Distance between stops"
@@ -33715,6 +33796,9 @@ msgstr ""
 msgid "JOSM Tag Editor Plugin"
 msgstr ""
 
+msgid "Presets"
+msgstr ""
+
 msgid "Abort tag editing and close dialog"
 msgstr ""
 
@@ -35640,6 +35724,26 @@ msgid_plural "Overwrite ''{0}'' tags {1} from {2} with new value ''{3}''?"
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Download from Sophox API"
+msgstr ""
+
+msgid ""
+"Find places of education at least 2km, and at most 3km from the center of "
+"the selection"
+msgstr ""
+
+msgid "Show/hide Sophox snippet list"
+msgstr ""
+
+msgid "help"
+msgstr ""
+
+msgid "Server: "
+msgstr ""
+
+msgid "Wikidata+OSM server"
+msgstr ""
+
 msgid "Search Wikidata items"
 msgstr ""
 
@@ -35713,26 +35817,6 @@ msgid ""
 "objects"
 msgstr ""
 
-msgid "Download from Wikosm API"
-msgstr ""
-
-msgid ""
-"Find places of education at least 2km, and at most 3km from the center of "
-"the selection"
-msgstr ""
-
-msgid "Show/hide Wikosm snippet list"
-msgstr ""
-
-msgid "help"
-msgstr ""
-
-msgid "Server: "
-msgstr ""
-
-msgid "Wikidata+OSM server"
-msgstr ""
-
 msgid "The Ultimate WMS Super-speed Turbo Challenge II"
 msgstr ""
 
diff --git a/i18n/po/en_GB.po b/i18n/po/en_GB.po
index 92397ba..c52de1e 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-10-30 03:38+0100\n"
-"PO-Revision-Date: 2016-11-01 11:03+0000\n"
+"POT-Creation-Date: 2017-11-26 00:06+0100\n"
+"PO-Revision-Date: 2017-11-23 11:29+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-10-30 05:07+0000\n"
-"X-Generator: Launchpad (build 18493)\n"
+"X-Launchpad-Export-Date: 2017-11-26 05:10+0000\n"
+"X-Generator: Launchpad (build 18509)\n"
 "Language: de\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -449,12 +449,15 @@ msgstr "Delete Layer"
 msgid "Delete the active layer. Does not delete the associated file."
 msgstr "Delete the active layer. Does not delete the associated file."
 
-msgid "Toggle dialogs panel"
-msgstr "Toggle dialogues panel"
+msgid "Dialogs panel"
+msgstr "Dialogues panel"
 
 msgid "Toggle dialogs panel, maximize mapview"
 msgstr "Toggle dialogues panel, maximise mapview"
 
+msgid "Toggle dialogs panel"
+msgstr "Toggle dialogues panel"
+
 msgid "Distribute Nodes"
 msgstr "Distribute Nodes"
 
@@ -477,7 +480,7 @@ msgid "Download data"
 msgstr "Download data"
 
 msgid "Download map data from a server of your choice"
-msgstr ""
+msgstr "Download map data from a server of your choice"
 
 msgid ""
 "<html>This action will require {0} individual<br>download requests. Do you "
@@ -1434,7 +1437,7 @@ msgid "Search presets"
 msgstr "Search presets"
 
 msgid "Discourage upload"
-msgstr ""
+msgstr "Discourage upload"
 
 msgid "UnGlue Ways"
 msgstr "UnGlue Ways"
@@ -2488,19 +2491,19 @@ msgid "MapCSS selector"
 msgstr "MapCSS selector"
 
 msgid "Selection settings"
-msgstr ""
+msgstr "Selection settings"
 
 msgid "Additional settings"
-msgstr ""
+msgstr "Additional settings"
 
 msgid "Search syntax"
-msgstr ""
+msgstr "Search syntax"
 
 msgid "Invalid search expression"
 msgstr "Invalid search expression"
 
 msgid "Search by preset"
-msgstr ""
+msgstr "Search by preset"
 
 msgid "Filter"
 msgstr "Filter"
@@ -2524,7 +2527,7 @@ msgstr ""
 " {0}"
 
 msgid "Search hints"
-msgstr ""
+msgstr "Search hints"
 
 msgid "basics"
 msgstr "basics"
@@ -2591,7 +2594,7 @@ msgid "objects"
 msgstr "objects"
 
 msgid "all nodes"
-msgstr ""
+msgstr "all nodes"
 
 msgid "all ways"
 msgstr "all ways"
@@ -2606,10 +2609,10 @@ msgid "object without useful tags"
 msgstr "object without useful tags"
 
 msgid "all objects that use the address preset"
-msgstr ""
+msgstr "all objects that use the address preset"
 
 msgid "all objects that use any preset under the Geography/Nature group"
-msgstr ""
+msgstr "all objects that use any preset under the Geography/Nature group"
 
 msgid "metadata"
 msgstr "metadata"
@@ -2670,7 +2673,7 @@ msgid "all incomplete objects"
 msgstr "all incomplete objects"
 
 msgid "all deleted objects (checkbox <b>{0}</b> must be enabled)"
-msgstr ""
+msgstr "all deleted objects (checkbox <b>{0}</b> must be enabled)"
 
 msgid "related objects"
 msgstr "related objects"
@@ -3285,28 +3288,28 @@ msgid "E"
 msgstr "E"
 
 msgid "Unable to parse as coordinate value: ''{0}''"
-msgstr ""
+msgstr "Unable to parse as coordinate value: ''{0}''"
 
 msgid "Date of imagery: {0}"
-msgstr ""
+msgstr "Date of imagery: {0}"
 
 msgid "This imagery is marked as best in this region in other editors."
-msgstr ""
+msgstr "This imagery is marked as best in this region in other editors."
 
 msgid "{0} mirror server {1}"
-msgstr ""
+msgstr "{0} mirror server {1}"
 
 msgid "{0} mirror server"
-msgstr ""
+msgstr "{0} mirror server"
 
 msgid "Update default entries"
 msgstr "Update default entries"
 
 msgid "Update imagery ''{0}''"
-msgstr ""
+msgstr "Update imagery ''{0}''"
 
 msgid "Drop old imagery ''{0}''"
-msgstr ""
+msgstr "Drop old imagery ''{0}''"
 
 msgid "Projection ''{0}'' is not found, bookmark ''{1}'' is not usable"
 msgstr "Projection ''{0}'' is not found, bookmark ''{1}'' is not usable"
@@ -3340,7 +3343,7 @@ msgid "Matrix set identifier"
 msgstr "Matrix set identifier"
 
 msgid "No default layer selected, choosing first layer."
-msgstr ""
+msgstr "No default layer selected, choosing first layer."
 
 msgid "No layers defined by getCapabilities document: {0}"
 msgstr "No layers defined by getCapabilities document: {0}"
@@ -3354,6 +3357,8 @@ msgid ""
 "Can''t use layer {0} because no supported formats where found. Layer is "
 "available in formats: {1}"
 msgstr ""
+"Can''t use layer {0} because no supported formats where found. Layer is "
+"available in formats: {1}"
 
 msgid ""
 "Only square tiles are supported. {0}x{1} returned by server for TileMatrix "
@@ -3643,7 +3648,7 @@ msgid "Range of numbers expected"
 msgstr "Range of numbers expected"
 
 msgid "Unknown preset name: "
-msgstr ""
+msgstr "Unknown preset name: "
 
 msgid "Failed to parse MapCSS selector"
 msgstr "Failed to parse MapCSS selector"
@@ -3760,13 +3765,13 @@ msgid "areatext"
 msgstr "areatext"
 
 msgid "Failed to create missing preferences directory: {0}"
-msgstr ""
+msgstr "Failed to create missing preferences directory: {0}"
 
 msgid "<html>Failed to create missing preferences directory: {0}</html>"
-msgstr ""
+msgstr "<html>Failed to create missing preferences directory: {0}</html>"
 
 msgid "Failed to create missing user data directory: {0}"
-msgstr ""
+msgstr "Failed to create missing user data directory: {0}"
 
 msgid "<html>Failed to create missing user data directory: {0}</html>"
 msgstr ""
@@ -6905,6 +6910,9 @@ msgstr "Coordinates: "
 msgid "Coordinates (projected): "
 msgstr "Coordinates (projected): "
 
+msgid "UTM Zone"
+msgstr "UTM Zone"
+
 msgid "Part of: "
 msgstr "Part of: "
 
@@ -9377,6 +9385,11 @@ msgstr "Check \"Upload\" to upload the changes to the OSM server."
 msgid "Check \"Save\" to save the layer to the file specified on the left."
 msgstr "Check \"Save\" to save the layer to the file specified on the left."
 
+msgid ""
+"A background upload is already in progress. Kindly wait for it to finish "
+"before uploading new changes"
+msgstr ""
+
 msgid "I would like someone to review my edits."
 msgstr ""
 
@@ -10589,6 +10602,9 @@ msgstr "Change the projection again or remove the layer."
 msgid "Save Layer"
 msgstr "Save Layer"
 
+msgid "Trying to set a read only data layer as edit layer"
+msgstr ""
+
 msgid "{0} note"
 msgid_plural "{0} notes"
 msgstr[0] "{0} note"
@@ -11474,11 +11490,6 @@ msgstr "Failed to load Mappaint styles from ''{0}''. Exception was: {1}"
 msgid "Failed to parse Mappaint styles from ''{0}''. Error was: {1}"
 msgstr "Failed to parse Mappaint styles from ''{0}''. Error was: {1}"
 
-msgid ""
-"Detected deprecated ''{0}'' in ''{1}'' which will be removed shortly. Use "
-"''{2}'' instead."
-msgstr ""
-
 msgid "Failed to locate image ''{0}''"
 msgstr "Failed to locate image ''{0}''"
 
@@ -12764,6 +12775,9 @@ msgstr "Show splash screen at startup"
 msgid "Show object ID in selection lists"
 msgstr "Show object ID in selection lists"
 
+msgid "Show node coordinates in selection lists"
+msgstr ""
+
 msgid "Show localized name in selection lists"
 msgstr "Show localised name in selection lists"
 
@@ -13569,9 +13583,6 @@ msgstr "UTM Geodesic system"
 msgid "UTM"
 msgstr "UTM"
 
-msgid "UTM Zone"
-msgstr "UTM Zone"
-
 msgid "North"
 msgstr "North"
 
@@ -14078,9 +14089,6 @@ msgstr "Preset sub element without parent"
 msgid "Error parsing {0}: "
 msgstr "Error parsing {0}: "
 
-msgid "Presets"
-msgstr "Presets"
-
 msgid "Search for objects by preset..."
 msgstr "Search for objects by preset..."
 
@@ -16919,6 +16927,18 @@ msgstr "vegetarian"
 msgid "korean"
 msgstr "korean"
 
+msgid "donut"
+msgstr ""
+
+msgid "mediterranean"
+msgstr ""
+
+msgid "friture"
+msgstr ""
+
+msgid "crepe"
+msgstr ""
+
 msgid "Internet access"
 msgstr "Internet access"
 
@@ -19787,8 +19807,17 @@ msgstr "Power supply"
 msgid "Tents allowed"
 msgstr "Tents allowed"
 
-msgid "Camping Site"
-msgstr "Camp Site"
+msgid "Campsite"
+msgstr ""
+
+msgid "Caravans allowed"
+msgstr ""
+
+msgid "Backcountry"
+msgstr ""
+
+msgid "Group only access"
+msgstr ""
 
 msgid "Food+Drinks"
 msgstr "Food+Drinks"
@@ -24641,6 +24670,14 @@ msgid ""
 "resolution or better, and refreshed more frequently with ongoing updates."
 msgstr ""
 
+msgid "DigitalGlobe Premium Imagery Vintage"
+msgstr ""
+
+msgid ""
+"Imagery boundaries and capture dates. Labels appear at zoom level 14 and "
+"higher."
+msgstr ""
+
 msgid "DigitalGlobe Standard Imagery"
 msgstr ""
 
@@ -24650,6 +24687,9 @@ msgid ""
 "Landsat. Average age is 2.31 years, with some areas updated 2x per year."
 msgstr ""
 
+msgid "DigitalGlobe Standard Imagery Vintage"
+msgstr ""
+
 msgid "Esri World Imagery"
 msgstr ""
 
@@ -24713,6 +24753,12 @@ msgstr "Strava running heatmap"
 msgid "Strava cycling and running heatmap"
 msgstr "Strava cycling and running heatmap"
 
+msgid "Strava water sports heatmap"
+msgstr ""
+
+msgid "Strava winter sports heatmap"
+msgstr ""
+
 msgid "Locator Overlay"
 msgstr "Locator Overlay"
 
@@ -25117,6 +25163,9 @@ msgstr "SPW(allonie) PICC numerical imagery"
 msgid "SPW(allonie) most recent aerial imagery"
 msgstr ""
 
+msgid "SPW(allonie) 2016 aerial imagery"
+msgstr ""
+
 msgid "SPW(allonie) 2015 aerial imagery"
 msgstr "SPW(allonie) 2015 aerial imagery"
 
@@ -25162,6 +25211,14 @@ msgstr ""
 msgid "Addresses data from IBGE"
 msgstr ""
 
+msgid "Street names IBGE Salvador-BA"
+msgstr ""
+
+msgid ""
+"Streets geometry and names of Salvador, Bahia. Source: Faces de Logradouro - "
+"IBGE."
+msgstr ""
+
 msgid "Rio Mosaic 2013"
 msgstr ""
 
@@ -25894,6 +25951,9 @@ msgstr ""
 msgid "Japan GSI ortho Imagery"
 msgstr ""
 
+msgid "Japan GSI Standard Map"
+msgstr ""
+
 msgid "imagico.de OSM images for mapping: Aral Sea (low water level)"
 msgstr ""
 
@@ -25923,8 +25983,8 @@ msgstr "50cm ortho - Latvia"
 msgid "20cm ortho - Latvia - Coastline"
 msgstr "20cm ortho - Latvia - Coastline"
 
-msgid "1.cikla ortofotokarte - Latvia"
-msgstr "1.cikla ortofotokarte - Latvia"
+msgid "Orthophoto 1st cycle (1994-1999) - Latvia"
+msgstr ""
 
 msgid "ORT10LT (Lithuania)"
 msgstr "ORT10LT (Lithuania)"
@@ -25932,6 +25992,9 @@ msgstr "ORT10LT (Lithuania)"
 msgid "geoportail.lu all layers"
 msgstr ""
 
+msgid "geoportail.lu ortho latest"
+msgstr ""
+
 msgid "geoportail.lu ortho 2016"
 msgstr ""
 
@@ -27441,6 +27504,9 @@ msgstr ""
 msgid "{0} on a node. Should be used on a way."
 msgstr "{0} on a node. Should be used on a way."
 
+msgid "{0} on a node. Should be used on a way or relation."
+msgstr ""
+
 msgid "{0} on a node. Should be drawn as an area."
 msgstr "{0} on a node. Should be drawn as an area."
 
@@ -27678,6 +27744,9 @@ msgstr ""
 msgid "Nodes duplicating parent way tags"
 msgstr "Nodes duplicating parent way tags"
 
+msgid "{0} together with {1} and {2}. Remove {0}."
+msgstr ""
+
 msgid ""
 "wikipedia tag has no language given, use ''wikipedia''=''language:page "
 "title''"
@@ -28568,6 +28637,21 @@ msgstr "Uploads traces to openstreetmap.org"
 msgid "Importing..."
 msgstr "Importing..."
 
+msgid "Shape is started incorrectly"
+msgstr ""
+
+msgid "Can''t load SVG diagram"
+msgstr ""
+
+msgid "Can''t find root SVG element"
+msgstr ""
+
+msgid "Import primitives"
+msgstr ""
+
+msgid "Cannot find configuration file!"
+msgstr ""
+
 msgid "DXF files [ImportDxf plugin] (*.dxf)"
 msgstr ""
 
@@ -29221,6 +29305,9 @@ msgstr ""
 msgid "Download mode"
 msgstr "Download mode"
 
+msgid "Number of images to be pre-fetched (forwards and backwards)"
+msgstr ""
+
 msgid "You are logged in as ''{0}''."
 msgstr "You are logged in as ''{0}''."
 
@@ -29431,8 +29518,17 @@ msgid "only when manually requested"
 msgstr "only when manually requested"
 
 msgid ""
-"The downloaded OSM area is too big. Download mode has been changed to OSM "
-"area until the layer is restarted."
+"The Mapillary layer has stopped downloading images, because the requested "
+"area is too big!"
+msgstr ""
+
+msgid ""
+"To solve this problem, you could zoom in and load a smaller area of the map."
+msgstr ""
+
+msgid ""
+"To solve this problem, you could switch to download mode ''{0}'' and load "
+"Mapillary images for a smaller portion of the map."
 msgstr ""
 
 msgid "Downloading"
@@ -32995,23 +33091,6 @@ msgstr "Merge overlap of ways."
 msgid "Merge Overlap (combine)"
 msgstr "Merge Overlap (combine)"
 
-msgid ""
-"<html>A role based relation membership was copied to all new ways.<br>You "
-"should verify this and correct it when necessary.</html>"
-msgstr ""
-"<html>A role based relation membership was copied to all new ways.<br>You "
-"should verify this and correct it when necessary.</html>"
-
-msgid ""
-"<html>A relation membership was copied to all new ways.<br>You should verify "
-"this and correct it when necessary.</html>"
-msgstr ""
-"<html>A relation membership was copied to all new ways.<br>You should verify "
-"this and correct it when necessary.</html>"
-
-msgid "Split way"
-msgstr "Split way"
-
 msgid "Michigan Left"
 msgstr "Michigan Left"
 
@@ -34531,33 +34610,6 @@ msgstr "PT: Road is under construction"
 msgid "PT: Route passes a oneway road in the wrong direction"
 msgstr "PT: Route passes a oneway road in the wrong direction"
 
-msgid "moved"
-msgstr "moved"
-
-msgid "rail"
-msgstr "rail"
-
-msgid "Can''t parse a time from this string."
-msgstr "Can''t parse a time from this string."
-
-msgid "Invalid value"
-msgstr "Invalid value"
-
-msgid "added"
-msgstr "added"
-
-msgid "Public Transport: Enable GTFSStops"
-msgstr "Public Transport: Enable GTFSStops"
-
-msgid "Public Transport: Catch GTFS stops"
-msgstr "Public Transport: Catch GTFS stops"
-
-msgid "skipped"
-msgstr "skipped"
-
-msgid "Public Transport: Disable GTFS"
-msgstr "Public Transport: Disable GTFS"
-
 msgid "Create Stops from GTFS ..."
 msgstr "Create Stops from GTFS ..."
 
@@ -34585,69 +34637,9 @@ msgstr "No data found"
 msgid "The GTFS file was empty."
 msgstr "The GTFS file was empty."
 
-msgid "Create Stops from GTFS"
-msgstr "Create Stops from GTFS"
-
-msgid "GTFS-Stops"
-msgstr "GTFS-Stops"
-
-msgid "Type of stops to add"
-msgstr "Type of stops to add"
-
-msgid "Time on your GPS device"
-msgstr "Time on your GPS device"
-
-msgid "HH:MM:SS.sss"
-msgstr "HH:MM:SS.sss"
-
-msgid "Time on your stopwatch"
-msgstr "Time on your stopwatch"
-
-msgid "Time window"
-msgstr "Time window"
-
-msgid "seconds"
-msgstr "seconds"
-
-msgid "Move Threshold"
-msgstr "Move Threshold"
-
-msgid "Suggest Stops"
-msgstr "Suggest Stops"
-
-msgid "Find"
-msgstr "Find"
-
-msgid "Show"
-msgstr "Show"
-
-msgid "Mark"
-msgstr "Mark"
-
-msgid "Catch"
-msgstr "Catch"
-
-msgid "Join"
-msgstr "Join"
-
-msgid "Public Transport: Join GTFS stops"
-msgstr "Public Transport: Join GTFS stops"
-
-msgid "State"
-msgstr "State"
-
-msgid "[incomplete]"
-msgstr "[incomplete]"
-
-msgid "[empty way]"
-msgstr "[empty way]"
-
 msgid "[ID] {0}"
 msgstr "[ID] {0}"
 
-msgid "[gap]"
-msgstr "[gap]"
-
 msgid "Route patterns ..."
 msgstr "Route patterns ..."
 
@@ -34690,6 +34682,15 @@ msgstr "Add a new Tag"
 msgid "Name/Id"
 msgstr "Name/Id"
 
+msgid "Find"
+msgstr "Find"
+
+msgid "Show"
+msgstr "Show"
+
+msgid "Mark"
+msgstr "Mark"
+
 msgid "Ref"
 msgstr "Ref"
 
@@ -34705,11 +34706,8 @@ msgstr "left hand side"
 msgid "Maximum distance from route"
 msgstr "Maximum distance from route"
 
-msgid " [ID] {0}"
-msgstr " [ID] {0}"
-
-msgid "Public Transport: Change stop type"
-msgstr "Public Transport: Change stop type"
+msgid "Suggest Stops"
+msgstr "Suggest Stops"
 
 msgid "Create Stops from GPX ..."
 msgstr "Create Stops from GPX ..."
@@ -34723,30 +34721,29 @@ msgstr "Select GPX file"
 msgid "The GPX file contained no tracks or waypoints."
 msgstr "The GPX file contained no tracks or waypoints."
 
-msgid "Create Stops from GPX"
-msgstr "Create Stops from GPX"
+msgid "moved"
+msgstr "moved"
 
-msgid "Tracks in this GPX file:"
-msgstr "Tracks in this GPX file:"
+msgid "added"
+msgstr "added"
 
-msgid "Detach"
-msgstr "Detach"
+msgid "Public Transport: Enable GTFSStops"
+msgstr "Public Transport: Enable GTFSStops"
 
-msgid "implicit"
-msgstr "implicit"
+msgid "Public Transport: Catch GTFS stops"
+msgstr "Public Transport: Catch GTFS stops"
 
-msgid ""
-"The GPX file doesn''t contain valid trackpoints. Please use a GPX file that "
-"has trackpoints."
-msgstr ""
-"The GPX file doesn''t contain valid trackpoints. Please use a GPX file that "
-"has trackpoints."
+msgid "skipped"
+msgstr "skipped"
 
-msgid "GPX File Trouble"
-msgstr "GPX File Trouble"
+msgid "Public Transport: Disable GTFS"
+msgstr "Public Transport: Disable GTFS"
 
-msgid "unnamed"
-msgstr "unnamed"
+msgid "Public Transport: Join GTFS stops"
+msgstr "Public Transport: Join GTFS stops"
+
+msgid "Public Transport: Change stop type"
+msgstr "Public Transport: Change stop type"
 
 msgid "Public Transport: Add track stop"
 msgstr "Public Transport: Add track stop"
@@ -34769,9 +34766,6 @@ msgstr "Public Transport: sort track stop list"
 msgid "Public Transport: Suggest stops"
 msgstr "Public Transport: Suggest stops"
 
-msgid "Stopname"
-msgstr "Stopname"
-
 msgid "Public Transport: Detach waypoints"
 msgstr "Public Transport: Detach waypoints"
 
@@ -34784,6 +34778,91 @@ msgstr "Public Transport: Enable waypoints"
 msgid "Public Transport: Edit waypoint name"
 msgstr "Public Transport: Edit waypoint name"
 
+msgid "rail"
+msgstr "rail"
+
+msgid "Can''t parse a time from this string."
+msgstr "Can''t parse a time from this string."
+
+msgid "Invalid value"
+msgstr "Invalid value"
+
+msgid "Create Stops from GTFS"
+msgstr "Create Stops from GTFS"
+
+msgid "GTFS-Stops"
+msgstr "GTFS-Stops"
+
+msgid "Type of stops to add"
+msgstr "Type of stops to add"
+
+msgid "Time on your GPS device"
+msgstr "Time on your GPS device"
+
+msgid "HH:MM:SS.sss"
+msgstr "HH:MM:SS.sss"
+
+msgid "Time on your stopwatch"
+msgstr "Time on your stopwatch"
+
+msgid "Time window"
+msgstr "Time window"
+
+msgid "seconds"
+msgstr "seconds"
+
+msgid "Move Threshold"
+msgstr "Move Threshold"
+
+msgid "Catch"
+msgstr "Catch"
+
+msgid "Join"
+msgstr "Join"
+
+msgid "Create Stops from GPX"
+msgstr "Create Stops from GPX"
+
+msgid "Tracks in this GPX file:"
+msgstr "Tracks in this GPX file:"
+
+msgid "Detach"
+msgstr "Detach"
+
+msgid "implicit"
+msgstr "implicit"
+
+msgid "State"
+msgstr "State"
+
+msgid "[incomplete]"
+msgstr "[incomplete]"
+
+msgid "[empty way]"
+msgstr "[empty way]"
+
+msgid "[gap]"
+msgstr "[gap]"
+
+msgid "Stopname"
+msgstr "Stopname"
+
+msgid " [ID] {0}"
+msgstr " [ID] {0}"
+
+msgid ""
+"The GPX file doesn''t contain valid trackpoints. Please use a GPX file that "
+"has trackpoints."
+msgstr ""
+"The GPX file doesn''t contain valid trackpoints. Please use a GPX file that "
+"has trackpoints."
+
+msgid "GPX File Trouble"
+msgstr "GPX File Trouble"
+
+msgid "unnamed"
+msgstr "unnamed"
+
 msgid "Distance between stops"
 msgstr "Distance between stops"
 
@@ -35540,6 +35619,9 @@ msgstr "Launches the tag editor dialogue"
 msgid "JOSM Tag Editor Plugin"
 msgstr "JOSM Tag Editor Plug-in"
 
+msgid "Presets"
+msgstr "Presets"
+
 msgid "Abort tag editing and close dialog"
 msgstr "Abort tag editing and close dialogue"
 
@@ -37639,6 +37721,26 @@ msgid_plural "Overwrite ''{0}'' tags {1} from {2} with new value ''{3}''?"
 msgstr[0] "Overwrite ''{0}'' tag {1} from {2} with new value ''{3}''?"
 msgstr[1] "Overwrite ''{0}'' tags {1} from {2} with new value ''{3}''?"
 
+msgid "Download from Sophox API"
+msgstr ""
+
+msgid ""
+"Find places of education at least 2km, and at most 3km from the center of "
+"the selection"
+msgstr ""
+
+msgid "Show/hide Sophox snippet list"
+msgstr ""
+
+msgid "help"
+msgstr ""
+
+msgid "Server: "
+msgstr ""
+
+msgid "Wikidata+OSM server"
+msgstr ""
+
 msgid "Search Wikidata items"
 msgstr "Search Wikidata items"
 
@@ -37716,26 +37818,6 @@ msgstr ""
 "Adds a ''wikipedia'' tag corresponding to this article to the selected "
 "objects"
 
-msgid "Download from Wikosm API"
-msgstr ""
-
-msgid ""
-"Find places of education at least 2km, and at most 3km from the center of "
-"the selection"
-msgstr ""
-
-msgid "Show/hide Wikosm snippet list"
-msgstr ""
-
-msgid "help"
-msgstr ""
-
-msgid "Server: "
-msgstr ""
-
-msgid "Wikidata+OSM server"
-msgstr ""
-
 msgid "The Ultimate WMS Super-speed Turbo Challenge II"
 msgstr "The Ultimate WMS Super-speed Turbo Challenge II"
 
diff --git a/i18n/po/eo.po b/i18n/po/eo.po
index 4ee9796..68792d4 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-10-30 03:38+0100\n"
+"POT-Creation-Date: 2017-11-26 00:06+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-10-30 04:41+0000\n"
-"X-Generator: Launchpad (build 18493)\n"
+"X-Launchpad-Export-Date: 2017-11-26 04:41+0000\n"
+"X-Generator: Launchpad (build 18509)\n"
 "Language: eo\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -427,12 +427,15 @@ msgstr ""
 msgid "Delete the active layer. Does not delete the associated file."
 msgstr ""
 
-msgid "Toggle dialogs panel"
+msgid "Dialogs panel"
 msgstr ""
 
 msgid "Toggle dialogs panel, maximize mapview"
 msgstr ""
 
+msgid "Toggle dialogs panel"
+msgstr ""
+
 msgid "Distribute Nodes"
 msgstr ""
 
@@ -6495,6 +6498,9 @@ msgstr ""
 msgid "Coordinates (projected): "
 msgstr ""
 
+msgid "UTM Zone"
+msgstr ""
+
 msgid "Part of: "
 msgstr ""
 
@@ -8793,6 +8799,11 @@ msgstr ""
 msgid "Check \"Save\" to save the layer to the file specified on the left."
 msgstr ""
 
+msgid ""
+"A background upload is already in progress. Kindly wait for it to finish "
+"before uploading new changes"
+msgstr ""
+
 msgid "I would like someone to review my edits."
 msgstr ""
 
@@ -9905,6 +9916,9 @@ msgstr ""
 msgid "Save Layer"
 msgstr ""
 
+msgid "Trying to set a read only data layer as edit layer"
+msgstr ""
+
 msgid "{0} note"
 msgid_plural "{0} notes"
 msgstr[0] ""
@@ -10735,11 +10749,6 @@ msgstr ""
 msgid "Failed to parse Mappaint styles from ''{0}''. Error was: {1}"
 msgstr ""
 
-msgid ""
-"Detected deprecated ''{0}'' in ''{1}'' which will be removed shortly. Use "
-"''{2}'' instead."
-msgstr ""
-
 msgid "Failed to locate image ''{0}''"
 msgstr ""
 
@@ -11904,6 +11913,9 @@ msgstr ""
 msgid "Show object ID in selection lists"
 msgstr ""
 
+msgid "Show node coordinates in selection lists"
+msgstr ""
+
 msgid "Show localized name in selection lists"
 msgstr ""
 
@@ -12660,9 +12672,6 @@ msgstr ""
 msgid "UTM"
 msgstr ""
 
-msgid "UTM Zone"
-msgstr ""
-
 msgid "North"
 msgstr "Nordo"
 
@@ -13130,9 +13139,6 @@ msgstr ""
 msgid "Error parsing {0}: "
 msgstr ""
 
-msgid "Presets"
-msgstr ""
-
 msgid "Search for objects by preset..."
 msgstr ""
 
@@ -15674,6 +15680,18 @@ msgstr ""
 msgid "korean"
 msgstr ""
 
+msgid "donut"
+msgstr ""
+
+msgid "mediterranean"
+msgstr ""
+
+msgid "friture"
+msgstr ""
+
+msgid "crepe"
+msgstr ""
+
 msgid "Internet access"
 msgstr ""
 
@@ -18516,7 +18534,16 @@ msgstr ""
 msgid "Tents allowed"
 msgstr ""
 
-msgid "Camping Site"
+msgid "Campsite"
+msgstr ""
+
+msgid "Caravans allowed"
+msgstr ""
+
+msgid "Backcountry"
+msgstr ""
+
+msgid "Group only access"
 msgstr ""
 
 msgid "Food+Drinks"
@@ -23345,6 +23372,14 @@ msgid ""
 "resolution or better, and refreshed more frequently with ongoing updates."
 msgstr ""
 
+msgid "DigitalGlobe Premium Imagery Vintage"
+msgstr ""
+
+msgid ""
+"Imagery boundaries and capture dates. Labels appear at zoom level 14 and "
+"higher."
+msgstr ""
+
 msgid "DigitalGlobe Standard Imagery"
 msgstr ""
 
@@ -23354,6 +23389,9 @@ msgid ""
 "Landsat. Average age is 2.31 years, with some areas updated 2x per year."
 msgstr ""
 
+msgid "DigitalGlobe Standard Imagery Vintage"
+msgstr ""
+
 msgid "Esri World Imagery"
 msgstr ""
 
@@ -23417,6 +23455,12 @@ msgstr ""
 msgid "Strava cycling and running heatmap"
 msgstr ""
 
+msgid "Strava water sports heatmap"
+msgstr ""
+
+msgid "Strava winter sports heatmap"
+msgstr ""
+
 msgid "Locator Overlay"
 msgstr ""
 
@@ -23821,6 +23865,9 @@ msgstr ""
 msgid "SPW(allonie) most recent aerial imagery"
 msgstr ""
 
+msgid "SPW(allonie) 2016 aerial imagery"
+msgstr ""
+
 msgid "SPW(allonie) 2015 aerial imagery"
 msgstr ""
 
@@ -23866,6 +23913,14 @@ msgstr ""
 msgid "Addresses data from IBGE"
 msgstr ""
 
+msgid "Street names IBGE Salvador-BA"
+msgstr ""
+
+msgid ""
+"Streets geometry and names of Salvador, Bahia. Source: Faces de Logradouro - "
+"IBGE."
+msgstr ""
+
 msgid "Rio Mosaic 2013"
 msgstr ""
 
@@ -24596,6 +24651,9 @@ msgstr ""
 msgid "Japan GSI ortho Imagery"
 msgstr ""
 
+msgid "Japan GSI Standard Map"
+msgstr ""
+
 msgid "imagico.de OSM images for mapping: Aral Sea (low water level)"
 msgstr ""
 
@@ -24625,7 +24683,7 @@ msgstr ""
 msgid "20cm ortho - Latvia - Coastline"
 msgstr ""
 
-msgid "1.cikla ortofotokarte - Latvia"
+msgid "Orthophoto 1st cycle (1994-1999) - Latvia"
 msgstr ""
 
 msgid "ORT10LT (Lithuania)"
@@ -24634,6 +24692,9 @@ msgstr ""
 msgid "geoportail.lu all layers"
 msgstr ""
 
+msgid "geoportail.lu ortho latest"
+msgstr ""
+
 msgid "geoportail.lu ortho 2016"
 msgstr ""
 
@@ -26124,6 +26185,9 @@ msgstr ""
 msgid "{0} on a node. Should be used on a way."
 msgstr ""
 
+msgid "{0} on a node. Should be used on a way or relation."
+msgstr ""
+
 msgid "{0} on a node. Should be drawn as an area."
 msgstr ""
 
@@ -26351,6 +26415,9 @@ msgstr ""
 msgid "Nodes duplicating parent way tags"
 msgstr ""
 
+msgid "{0} together with {1} and {2}. Remove {0}."
+msgstr ""
+
 msgid ""
 "wikipedia tag has no language given, use ''wikipedia''=''language:page "
 "title''"
@@ -27115,6 +27182,21 @@ msgstr ""
 msgid "Importing..."
 msgstr ""
 
+msgid "Shape is started incorrectly"
+msgstr ""
+
+msgid "Can''t load SVG diagram"
+msgstr ""
+
+msgid "Can''t find root SVG element"
+msgstr ""
+
+msgid "Import primitives"
+msgstr ""
+
+msgid "Cannot find configuration file!"
+msgstr ""
+
 msgid "DXF files [ImportDxf plugin] (*.dxf)"
 msgstr ""
 
@@ -27754,6 +27836,9 @@ msgstr ""
 msgid "Download mode"
 msgstr ""
 
+msgid "Number of images to be pre-fetched (forwards and backwards)"
+msgstr ""
+
 msgid "You are logged in as ''{0}''."
 msgstr ""
 
@@ -27964,8 +28049,17 @@ msgid "only when manually requested"
 msgstr ""
 
 msgid ""
-"The downloaded OSM area is too big. Download mode has been changed to OSM "
-"area until the layer is restarted."
+"The Mapillary layer has stopped downloading images, because the requested "
+"area is too big!"
+msgstr ""
+
+msgid ""
+"To solve this problem, you could zoom in and load a smaller area of the map."
+msgstr ""
+
+msgid ""
+"To solve this problem, you could switch to download mode ''{0}'' and load "
+"Mapillary images for a smaller portion of the map."
 msgstr ""
 
 msgid "Downloading"
@@ -31277,19 +31371,6 @@ msgstr ""
 msgid "Merge Overlap (combine)"
 msgstr ""
 
-msgid ""
-"<html>A role based relation membership was copied to all new ways.<br>You "
-"should verify this and correct it when necessary.</html>"
-msgstr ""
-
-msgid ""
-"<html>A relation membership was copied to all new ways.<br>You should verify "
-"this and correct it when necessary.</html>"
-msgstr ""
-
-msgid "Split way"
-msgstr ""
-
 msgid "Michigan Left"
 msgstr ""
 
@@ -32744,254 +32825,254 @@ msgstr ""
 msgid "PT: Route passes a oneway road in the wrong direction"
 msgstr ""
 
-msgid "moved"
+msgid "Create Stops from GTFS ..."
 msgstr ""
 
-msgid "rail"
+msgid "Create Stops from a GTFS file"
 msgstr ""
 
-msgid "Can''t parse a time from this string."
+msgid "Select GTFS file (stops.txt)"
 msgstr ""
 
-msgid "Invalid value"
+msgid "File \"{0}\" does not exist"
 msgstr ""
 
-msgid "added"
+msgid "IOException \"{0}\" occurred"
 msgstr ""
 
-msgid "Public Transport: Enable GTFSStops"
+msgid ""
+"There exists no dataset. Try to download data from the server or open an OSM "
+"file."
 msgstr ""
 
-msgid "Public Transport: Catch GTFS stops"
+msgid "No data found"
 msgstr ""
 
-msgid "skipped"
+msgid "The GTFS file was empty."
 msgstr ""
 
-msgid "Public Transport: Disable GTFS"
+msgid "[ID] {0}"
 msgstr ""
 
-msgid "Create Stops from GTFS ..."
+msgid "Route patterns ..."
 msgstr ""
 
-msgid "Create Stops from a GTFS file"
+msgid "Edit Route patterns for public transport"
 msgstr ""
 
-msgid "Select GTFS file (stops.txt)"
+msgid "Route Patterns"
 msgstr ""
 
-msgid "File \"{0}\" does not exist"
+msgid "Overview"
 msgstr ""
 
-msgid "IOException \"{0}\" occurred"
+msgid "Itinerary"
 msgstr ""
 
-msgid ""
-"There exists no dataset. Try to download data from the server or open an OSM "
-"file."
+msgid "Stops"
 msgstr ""
 
-msgid "No data found"
+msgid "Meta"
 msgstr ""
 
-msgid "The GTFS file was empty."
+msgid "Existing route patterns:"
 msgstr ""
 
-msgid "Create Stops from GTFS"
+msgid "Reflect"
 msgstr ""
 
-msgid "GTFS-Stops"
+msgid "Required tags:"
 msgstr ""
 
-msgid "Type of stops to add"
+msgid "Common tags:"
 msgstr ""
 
-msgid "Time on your GPS device"
+msgid "Additional tags:"
 msgstr ""
 
-msgid "HH:MM:SS.sss"
+msgid "Add a new Tag"
 msgstr ""
 
-msgid "Time on your stopwatch"
+msgid "Name/Id"
 msgstr ""
 
-msgid "Time window"
+msgid "Find"
 msgstr ""
 
-msgid "seconds"
+msgid "Show"
 msgstr ""
 
-msgid "Move Threshold"
+msgid "Mark"
 msgstr ""
 
-msgid "Suggest Stops"
+msgid "Ref"
 msgstr ""
 
-msgid "Find"
+msgid "Stops are possible on the"
 msgstr ""
 
-msgid "Show"
+msgid "right hand side"
 msgstr ""
 
-msgid "Mark"
+msgid "left hand side"
 msgstr ""
 
-msgid "Catch"
+msgid "Maximum distance from route"
 msgstr ""
 
-msgid "Join"
+msgid "Suggest Stops"
 msgstr ""
 
-msgid "Public Transport: Join GTFS stops"
+msgid "Create Stops from GPX ..."
 msgstr ""
 
-msgid "State"
+msgid "Create Stops from a GPX file"
 msgstr ""
 
-msgid "[incomplete]"
+msgid "Select GPX file"
 msgstr ""
 
-msgid "[empty way]"
+msgid "The GPX file contained no tracks or waypoints."
 msgstr ""
 
-msgid "[ID] {0}"
+msgid "moved"
 msgstr ""
 
-msgid "[gap]"
+msgid "added"
 msgstr ""
 
-msgid "Route patterns ..."
+msgid "Public Transport: Enable GTFSStops"
 msgstr ""
 
-msgid "Edit Route patterns for public transport"
+msgid "Public Transport: Catch GTFS stops"
 msgstr ""
 
-msgid "Route Patterns"
+msgid "skipped"
 msgstr ""
 
-msgid "Overview"
+msgid "Public Transport: Disable GTFS"
 msgstr ""
 
-msgid "Itinerary"
+msgid "Public Transport: Join GTFS stops"
 msgstr ""
 
-msgid "Stops"
+msgid "Public Transport: Change stop type"
 msgstr ""
 
-msgid "Meta"
+msgid "Public Transport: Add track stop"
 msgstr ""
 
-msgid "Existing route patterns:"
+msgid "Public Transport: Delete track stop"
 msgstr ""
 
-msgid "Reflect"
+msgid "Public Transport: Detach track stop list"
 msgstr ""
 
-msgid "Required tags:"
+msgid "Public Transport: Edit track stop list"
 msgstr ""
 
-msgid "Common tags:"
+msgid "Public Transport: Relocate nodes in track stoplist"
 msgstr ""
 
-msgid "Additional tags:"
+msgid "Public Transport: sort track stop list"
 msgstr ""
 
-msgid "Add a new Tag"
+msgid "Public Transport: Suggest stops"
 msgstr ""
 
-msgid "Name/Id"
+msgid "Public Transport: Detach waypoints"
 msgstr ""
 
-msgid "Ref"
+msgid "Public Transport: Disable waypoints"
 msgstr ""
 
-msgid "Stops are possible on the"
+msgid "Public Transport: Enable waypoints"
 msgstr ""
 
-msgid "right hand side"
+msgid "Public Transport: Edit waypoint name"
 msgstr ""
 
-msgid "left hand side"
+msgid "rail"
 msgstr ""
 
-msgid "Maximum distance from route"
+msgid "Can''t parse a time from this string."
 msgstr ""
 
-msgid " [ID] {0}"
+msgid "Invalid value"
 msgstr ""
 
-msgid "Public Transport: Change stop type"
+msgid "Create Stops from GTFS"
 msgstr ""
 
-msgid "Create Stops from GPX ..."
+msgid "GTFS-Stops"
 msgstr ""
 
-msgid "Create Stops from a GPX file"
+msgid "Type of stops to add"
 msgstr ""
 
-msgid "Select GPX file"
+msgid "Time on your GPS device"
 msgstr ""
 
-msgid "The GPX file contained no tracks or waypoints."
+msgid "HH:MM:SS.sss"
 msgstr ""
 
-msgid "Create Stops from GPX"
+msgid "Time on your stopwatch"
 msgstr ""
 
-msgid "Tracks in this GPX file:"
+msgid "Time window"
 msgstr ""
 
-msgid "Detach"
+msgid "seconds"
 msgstr ""
 
-msgid "implicit"
+msgid "Move Threshold"
 msgstr ""
 
-msgid ""
-"The GPX file doesn''t contain valid trackpoints. Please use a GPX file that "
-"has trackpoints."
+msgid "Catch"
 msgstr ""
 
-msgid "GPX File Trouble"
+msgid "Join"
 msgstr ""
 
-msgid "unnamed"
+msgid "Create Stops from GPX"
 msgstr ""
 
-msgid "Public Transport: Add track stop"
+msgid "Tracks in this GPX file:"
 msgstr ""
 
-msgid "Public Transport: Delete track stop"
+msgid "Detach"
 msgstr ""
 
-msgid "Public Transport: Detach track stop list"
+msgid "implicit"
 msgstr ""
 
-msgid "Public Transport: Edit track stop list"
+msgid "State"
 msgstr ""
 
-msgid "Public Transport: Relocate nodes in track stoplist"
+msgid "[incomplete]"
 msgstr ""
 
-msgid "Public Transport: sort track stop list"
+msgid "[empty way]"
 msgstr ""
 
-msgid "Public Transport: Suggest stops"
+msgid "[gap]"
 msgstr ""
 
 msgid "Stopname"
 msgstr ""
 
-msgid "Public Transport: Detach waypoints"
+msgid " [ID] {0}"
 msgstr ""
 
-msgid "Public Transport: Disable waypoints"
+msgid ""
+"The GPX file doesn''t contain valid trackpoints. Please use a GPX file that "
+"has trackpoints."
 msgstr ""
 
-msgid "Public Transport: Enable waypoints"
+msgid "GPX File Trouble"
 msgstr ""
 
-msgid "Public Transport: Edit waypoint name"
+msgid "unnamed"
 msgstr ""
 
 msgid "Distance between stops"
@@ -33720,6 +33801,9 @@ msgstr ""
 msgid "JOSM Tag Editor Plugin"
 msgstr ""
 
+msgid "Presets"
+msgstr ""
+
 msgid "Abort tag editing and close dialog"
 msgstr ""
 
@@ -35645,6 +35729,26 @@ msgid_plural "Overwrite ''{0}'' tags {1} from {2} with new value ''{3}''?"
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Download from Sophox API"
+msgstr ""
+
+msgid ""
+"Find places of education at least 2km, and at most 3km from the center of "
+"the selection"
+msgstr ""
+
+msgid "Show/hide Sophox snippet list"
+msgstr ""
+
+msgid "help"
+msgstr ""
+
+msgid "Server: "
+msgstr ""
+
+msgid "Wikidata+OSM server"
+msgstr ""
+
 msgid "Search Wikidata items"
 msgstr ""
 
@@ -35718,26 +35822,6 @@ msgid ""
 "objects"
 msgstr ""
 
-msgid "Download from Wikosm API"
-msgstr ""
-
-msgid ""
-"Find places of education at least 2km, and at most 3km from the center of "
-"the selection"
-msgstr ""
-
-msgid "Show/hide Wikosm snippet list"
-msgstr ""
-
-msgid "help"
-msgstr ""
-
-msgid "Server: "
-msgstr ""
-
-msgid "Wikidata+OSM server"
-msgstr ""
-
 msgid "The Ultimate WMS Super-speed Turbo Challenge II"
 msgstr ""
 
diff --git a/i18n/po/es.po b/i18n/po/es.po
index ddfcc95..56732b4 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-10-30 03:38+0100\n"
-"PO-Revision-Date: 2017-10-12 10:53+0000\n"
-"Last-Translator: Rodrigo Rega <rodrigorega at gmail.com>\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"
 "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-10-30 05:02+0000\n"
-"X-Generator: Launchpad (build 18493)\n"
+"X-Launchpad-Export-Date: 2017-11-26 05:04+0000\n"
+"X-Generator: Launchpad (build 18509)\n"
 "Language: es\n"
 "X-Language: es_ES\n"
 "X-Source-Language: C\n"
@@ -448,12 +448,15 @@ msgstr "Eliminar capa"
 msgid "Delete the active layer. Does not delete the associated file."
 msgstr "Eliminar la capa activa. No elimina el archivo asociado."
 
-msgid "Toggle dialogs panel"
-msgstr "Activar panel de diálogos"
+msgid "Dialogs panel"
+msgstr ""
 
 msgid "Toggle dialogs panel, maximize mapview"
 msgstr "Conmuta el panel de diálogos, maximiza la vista del mapa"
 
+msgid "Toggle dialogs panel"
+msgstr "Activar panel de diálogos"
+
 msgid "Distribute Nodes"
 msgstr "Distribuir nodos"
 
@@ -3365,7 +3368,7 @@ msgid "E"
 msgstr "E"
 
 msgid "Unable to parse as coordinate value: ''{0}''"
-msgstr ""
+msgstr "No se pudo analizar como valor de coordenada: ''{0}''"
 
 msgid "Date of imagery: {0}"
 msgstr "Fecha de la imagen: {0}"
@@ -3863,16 +3866,19 @@ msgid "areatext"
 msgstr "area de texto"
 
 msgid "Failed to create missing preferences directory: {0}"
-msgstr ""
+msgstr "No se pudo crear directorio de preferencias faltantes: {0}"
 
 msgid "<html>Failed to create missing preferences directory: {0}</html>"
 msgstr ""
+"<html>No se pudo crear directorio de preferencias faltantes: {0}</html>"
 
 msgid "Failed to create missing user data directory: {0}"
 msgstr ""
 
 msgid "<html>Failed to create missing user data directory: {0}</html>"
 msgstr ""
+"<html>No se pudo crear el directorio de preferencias de usuario faltantes: "
+"{0}</html>"
 
 msgid "Failed to create missing cache directory: {0}"
 msgstr "Error al crear el directorio de caché faltante: {0}"
@@ -4094,36 +4100,41 @@ msgid "Error: {0}"
 msgstr "Error: {0}"
 
 msgid "JOSM projection command line interface"
-msgstr ""
+msgstr "Interfaz de línea de comando de proyecciones de JOSM"
 
 msgid "Description"
 msgstr "Descripción"
 
 msgid "Converts coordinates from one coordinate reference system to another."
 msgstr ""
+"Convierte coordenadas desde un sistema de referencia de coordenadas a otro."
 
 msgid "Options"
-msgstr ""
+msgstr "Opciones"
 
 msgid "Show this help"
 msgstr "Mostrar esta ayuda"
 
 msgid "Switch input and output crs"
 msgstr ""
+"Intercambiar entrada y salida del sistema de coordenadas de referencia"
 
 msgid "Switch order of input coordinates (east/north, lon/lat)"
 msgstr ""
+"Intercambiar orden de coordenadas de entrada (este/norte, longitud/latitud)"
 
 msgid "Switch order of output coordinates (east/north, lon/lat)"
-msgstr ""
+msgstr "Cambiar el orden de las coordinadas de salida (este/norte, lon/la)"
 
 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 ""
+"El formato para el sistema de referencia de coordenadas de entrada y salida "
+"es similar al del programa PROJ.4."
 
 msgid "[file]"
 msgstr "[Archivo]"
@@ -4133,6 +4144,9 @@ msgid ""
 "no files are given, or the filename is \"-\", data is read from standard "
 "input."
 msgstr ""
+"Lee datos de entrada desde uno o más archivos listados como argumentos "
+"posicionales. Cuando no se proveen archivos, o el nombre de archivo es \"-"
+"\", los datos son leídos desde la entrada estándar."
 
 msgid "Examples"
 msgstr "Ejemplos"
@@ -4140,9 +4154,11 @@ msgstr "Ejemplos"
 msgid ""
 "Expected two coordinates, separated by white space, found {0} in ''{1}''"
 msgstr ""
+"Se esperaban dos coordenadas separadas por un espacio en blanco. Se encontró "
+"{0} en ''{1}''"
 
 msgid "Unable to parse number ''{0}''"
-msgstr ""
+msgstr "No se puede analizar el número ''{0}''"
 
 msgid "GRS80"
 msgstr "GRS80"
@@ -4594,7 +4610,7 @@ msgid "Multipolygon is not closed"
 msgstr "El multipolígono no está cerrado"
 
 msgid "Self-intersecting polygon ring"
-msgstr ""
+msgstr "Anillo de polígono se corta a sí mismo"
 
 msgid "Multipolygon rings share node(s)"
 msgstr "Anillos de multipolígono comparten nodo(s)"
@@ -5280,7 +5296,7 @@ msgid "Would you like to update now ?"
 msgstr "¿Desea actualizar ahora?"
 
 msgid "Starting file watcher"
-msgstr ""
+msgstr "Iniciando vigilante de archivos"
 
 msgid "Executing platform startup hook"
 msgstr "Ejecutando enganche de inicio a la plataforma"
@@ -5324,16 +5340,19 @@ msgstr "comandos"
 
 msgid "launch JOSM (default, performed when no command is specified)"
 msgstr ""
+"lanzar JOSM (por defecto, ejecutado cuando no se especifica un comando)"
 
 msgid "render data and save the result to an image file"
 msgstr "interpretar datos y guardar el resultado en un archivo de imagen"
 
 msgid "convert coordinates from one coordinate reference system to another"
 msgstr ""
+"convertir coordenadas desde un sistema de referencia de coordenadas a otro"
 
 msgid ""
 "For details on the {0} and {1} commands, run them with the {2} option."
 msgstr ""
+"Para detalles sobre los comandos {0} y {1}, ejecutarlos con la opción {2}."
 
 msgid "The remainder of this help page documents the {0} command."
 msgstr "El resto de esta página de ayuda documenta el comando {0}."
@@ -7126,6 +7145,9 @@ msgstr "Coordenadas: "
 msgid "Coordinates (projected): "
 msgstr "Coordenadas (proyectadas): "
 
+msgid "UTM Zone"
+msgstr "Zona UTM"
+
 msgid "Part of: "
 msgstr "Parte de: "
 
@@ -9165,7 +9187,7 @@ msgid "Your saved queries:"
 msgstr "Sus consultas guardadas:"
 
 msgid "Show/hide Overpass snippet list"
-msgstr ""
+msgstr "Mostrar/ocultar la lista de fragmentos de Overpass"
 
 msgid "Overpass query:"
 msgstr "Consulta de Overpass"
@@ -9174,15 +9196,17 @@ msgid ""
 "You entered an empty query. Do you want to download all data in this area "
 "instead?"
 msgstr ""
+"Ha introducido una consulta vacía. ¿Desea descargar todos los datos de este "
+"área?"
 
 msgid "Download all data?"
 msgstr "¿Descargar todos los datos?"
 
 msgid "Add new snippet"
-msgstr ""
+msgstr "Añadir nuevo fragmento"
 
 msgid "Delete selected snippet"
-msgstr ""
+msgstr "Eliminar el fragmento seleccionado"
 
 msgid "Edit selected snippet"
 msgstr "Editar el fragmento seleccionado"
@@ -9209,6 +9233,8 @@ msgid ""
 "Allows you to interact with <i>Overpass API</i> by writing declarative, "
 "human-readable terms."
 msgstr ""
+"Le permite interactuar con <i>Overpass API</i> escribiendo términos "
+"declarativos, legibles para humanos."
 
 msgid ""
 "The <i>Query Wizard</i> tool will transform those to a valid overpass query."
@@ -9220,7 +9246,7 @@ msgid "For more detailed description see "
 msgstr "Para una descripción más detallada ver "
 
 msgid "<a href=\"{0}\">OSM Wiki</a>."
-msgstr ""
+msgstr "<a href=\"{0}\">Wiki de OSM</a>."
 
 msgid "Hints"
 msgstr "Sugerencias"
@@ -9233,37 +9259,51 @@ msgstr ""
 "Descargar objeto especificando una localización específica. Por ejemplo,"
 
 msgid "{0} all objects having {1} as attribute are downloaded."
-msgstr ""
+msgstr "{0} todos los objetos con el atributo {1} son descargados."
 
 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 los objetos con el correspondiente par clave/valor ubicados "
+"alrededor de Berlín. Note que el valor por defecto del radio está fijado en "
+"1000m, pero el mismo puede ser cambiado en la consulta generada."
 
 msgid ""
 "{0} all objects within the current selection that have {1} as attribute."
 msgstr ""
+"{0} todos los objetos dentro de la selección actual que tengan {1} como "
+"atributo."
 
 msgid ""
 "Instead of <i>location</i> any valid place name can be used like address, "
 "city, etc."
 msgstr ""
+"En vez de la <i>ubicación</i> se puede utilizar cualquier nombre de lugar "
+"válido como dirección, ciudad, 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>Descargar objetos que tienen algún par clave/valor concreto, o "
+"aquellos que tengan cualquier valor siempre y cuando coincida la clave, o "
+"bien donde el valor concuerde con alguna expresión regular.  También se "
+"soportan los operadores de \"no igual a\".</span>"
 
 msgid "<i>expression1 {0} expression2</i>"
-msgstr ""
+msgstr "<i>expresión1 {0} expresión2</i>"
 
 msgid ""
 "Basic logical operators can be used to create more sophisticated queries. "
 "Instead of \"or\" - \"|\", \"||\" can be used, and instead of \"and\" - "
 "\"&\", \"&&\"."
 msgstr ""
+"Se pueden utilizar los operadores lógicos básicos para crear consultas más "
+"sofisticadas. En lugar del operador lógico \"or\" se pueden emplear \"|\" o "
+"\"||\", como así también \"&\" o \"&&\" en lugar del operador \"and\" ."
 
 msgid "Class Type"
 msgstr "Tipo de clase"
@@ -9324,7 +9364,7 @@ msgid "Edit item"
 msgstr "Editar elemento"
 
 msgid "Add snippet"
-msgstr ""
+msgstr "Añadir fragmento"
 
 msgid "Query cannot be empty"
 msgstr "La consulta no puede estar vacía"
@@ -9696,6 +9736,11 @@ msgstr ""
 "Marque \"Guardar\" para guardar la capa en el archivo especificado en la "
 "izquierda."
 
+msgid ""
+"A background upload is already in progress. Kindly wait for it to finish "
+"before uploading new changes"
+msgstr ""
+
 msgid "I would like someone to review my edits."
 msgstr "Me gustaría que alguien revisase mis ediciones."
 
@@ -10946,6 +10991,9 @@ msgstr "Cambiar la proyección de nuevo o eliminar la capa."
 msgid "Save Layer"
 msgstr "Guardar capa"
 
+msgid "Trying to set a read only data layer as edit layer"
+msgstr ""
+
 msgid "{0} note"
 msgid_plural "{0} notes"
 msgstr[0] "{0} nota"
@@ -10961,7 +11009,7 @@ msgid "Changes need uploading?"
 msgstr "¿Los cambios necesitan ser subidos?"
 
 msgid "Save Note file"
-msgstr ""
+msgstr "Guardar archivo de nota"
 
 msgid "outside downloaded area"
 msgstr "fuera del área descargada"
@@ -11039,7 +11087,7 @@ msgid "No validation errors"
 msgstr "Sin errores de validación"
 
 msgid "Save Validation errors file"
-msgstr ""
+msgstr "Guardar archivo de validación de errores"
 
 msgid "Set WMS Bookmark"
 msgstr "Fijar marcador WMS"
@@ -11681,14 +11729,17 @@ msgstr ""
 
 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 "Unable to parse {0} parameter: {1}"
-msgstr ""
+msgstr "No se pudo analizar parámetro {0}: {1}"
 
 msgid ""
 "Expected key and value, separated by '':'' character for option {0}, but got "
 "''{1}''"
 msgstr ""
+"Se esperaban clave y valor, separados por '':'' carácter para la opción {0}, "
+"pero se obtuvo ''{1}''"
 
 msgid "Expected floating point number for option {0}, but got ''{1}''"
 msgstr ""
@@ -11848,11 +11899,6 @@ msgid "Failed to parse Mappaint styles from ''{0}''. Error was: {1}"
 msgstr ""
 "Error al deserializar los estilos Mappaint desde ''{0}''. El error fue: {1}"
 
-msgid ""
-"Detected deprecated ''{0}'' in ''{1}'' which will be removed shortly. Use "
-"''{2}'' instead."
-msgstr ""
-
 msgid "Failed to locate image ''{0}''"
 msgstr "No se pudo localizar la imagen ''{0}''"
 
@@ -13208,6 +13254,9 @@ msgstr "Mostrar pantalla de bienvenida al inicio"
 msgid "Show object ID in selection lists"
 msgstr "Mostrar el identificador del objeto en las listas de selección"
 
+msgid "Show node coordinates in selection lists"
+msgstr ""
+
 msgid "Show localized name in selection lists"
 msgstr "Mostrar nombre localizado en listas de selección"
 
@@ -14040,9 +14089,6 @@ msgstr "Sistema geodésico UTM"
 msgid "UTM"
 msgstr "UTM"
 
-msgid "UTM Zone"
-msgstr "Zona UTM"
-
 msgid "North"
 msgstr "Norte"
 
@@ -14569,9 +14615,6 @@ msgstr "Subelmento preestablecido sin padre"
 msgid "Error parsing {0}: "
 msgstr "Error analizando {0}: "
 
-msgid "Presets"
-msgstr "Predefinidos"
-
 msgid "Search for objects by preset..."
 msgstr "Buscar objetos por plantilla..."
 
@@ -17508,6 +17551,18 @@ msgstr "vegetariana"
 msgid "korean"
 msgstr "coreana"
 
+msgid "donut"
+msgstr ""
+
+msgid "mediterranean"
+msgstr ""
+
+msgid "friture"
+msgstr ""
+
+msgid "crepe"
+msgstr ""
+
 msgid "Internet access"
 msgstr "Acceso a Internet"
 
@@ -20392,8 +20447,17 @@ msgstr "Suministro de electricidad"
 msgid "Tents allowed"
 msgstr "Permitido tiendas de campaña"
 
-msgid "Camping Site"
-msgstr "Lugar de acampada"
+msgid "Campsite"
+msgstr ""
+
+msgid "Caravans allowed"
+msgstr ""
+
+msgid "Backcountry"
+msgstr ""
+
+msgid "Group only access"
+msgstr ""
 
 msgid "Food+Drinks"
 msgstr "Comida+Bebidas"
@@ -22926,7 +22990,7 @@ msgid "Power Street Cabinet"
 msgstr "Gabinete de energía callejero"
 
 msgid "Transformer Tower"
-msgstr "Torren de transformador"
+msgstr "Torre de transformador"
 
 msgid "Power Portal"
 msgstr "Portal de energía"
@@ -25263,6 +25327,14 @@ msgid ""
 "resolution or better, and refreshed more frequently with ongoing updates."
 msgstr ""
 
+msgid "DigitalGlobe Premium Imagery Vintage"
+msgstr ""
+
+msgid ""
+"Imagery boundaries and capture dates. Labels appear at zoom level 14 and "
+"higher."
+msgstr ""
+
 msgid "DigitalGlobe Standard Imagery"
 msgstr "Imágenes de DigitalGlobe Standard"
 
@@ -25272,6 +25344,9 @@ msgid ""
 "Landsat. Average age is 2.31 years, with some areas updated 2x per year."
 msgstr ""
 
+msgid "DigitalGlobe Standard Imagery Vintage"
+msgstr ""
+
 msgid "Esri World Imagery"
 msgstr ""
 
@@ -25335,6 +25410,12 @@ msgstr "Mapa de calor para corredores de Strava"
 msgid "Strava cycling and running heatmap"
 msgstr "Strava - Mapa de calor de ciclismo y running"
 
+msgid "Strava water sports heatmap"
+msgstr ""
+
+msgid "Strava winter sports heatmap"
+msgstr ""
+
 msgid "Locator Overlay"
 msgstr "Superponer ubicador"
 
@@ -25752,6 +25833,9 @@ msgstr "Imágenes aéreas SPW(allonie) PICC numéricas"
 msgid "SPW(allonie) most recent aerial imagery"
 msgstr "Imágenes aéreas más recientes de SPW(allonie)"
 
+msgid "SPW(allonie) 2016 aerial imagery"
+msgstr ""
+
 msgid "SPW(allonie) 2015 aerial imagery"
 msgstr "SPW(slitario) 2015 imágenes aéreas"
 
@@ -25801,6 +25885,14 @@ msgstr "Distrito federal IBGE"
 msgid "Addresses data from IBGE"
 msgstr "Datos de direcciones de IBGE"
 
+msgid "Street names IBGE Salvador-BA"
+msgstr ""
+
+msgid ""
+"Streets geometry and names of Salvador, Bahia. Source: Faces de Logradouro - "
+"IBGE."
+msgstr ""
+
 msgid "Rio Mosaic 2013"
 msgstr "Mosaico de Río de Janeiro 2013"
 
@@ -26580,6 +26672,9 @@ msgstr "Mapa base topográfico de Tirol del Sur"
 msgid "Japan GSI ortho Imagery"
 msgstr "Imágenes aéreas de Japón GSI"
 
+msgid "Japan GSI Standard Map"
+msgstr ""
+
 msgid "imagico.de OSM images for mapping: Aral Sea (low water level)"
 msgstr ""
 
@@ -26609,8 +26704,8 @@ msgstr "50cm ortofoto - Letonia"
 msgid "20cm ortho - Latvia - Coastline"
 msgstr "20cm ortofoto - Línea costera de Letonia"
 
-msgid "1.cikla ortofotokarte - Latvia"
-msgstr "1.cikla ortofotokarte - Latvia"
+msgid "Orthophoto 1st cycle (1994-1999) - Latvia"
+msgstr ""
 
 msgid "ORT10LT (Lithuania)"
 msgstr "ORT10LT (Lituania)"
@@ -26618,8 +26713,11 @@ msgstr "ORT10LT (Lituania)"
 msgid "geoportail.lu all layers"
 msgstr "todas las capas de geoportail.lu"
 
+msgid "geoportail.lu ortho latest"
+msgstr ""
+
 msgid "geoportail.lu ortho 2016"
-msgstr "geoportail.lu orto 2016"
+msgstr ""
 
 msgid "Luxembourg Inspire Railway"
 msgstr "Ferrocarril Inspire Luxemburgo"
@@ -28352,6 +28450,9 @@ msgstr "valor incorrecto: {0}"
 msgid "{0} on a node. Should be used on a way."
 msgstr "{0} sobre un nodo. Debería ser utilizado sobre una vía."
 
+msgid "{0} on a node. Should be used on a way or relation."
+msgstr ""
+
 msgid "{0} on a node. Should be drawn as an area."
 msgstr "{0} sobre un nodo. Debería ser dibujado como un área."
 
@@ -28596,6 +28697,9 @@ msgstr "{0} no tiene sentido"
 msgid "Nodes duplicating parent way tags"
 msgstr "Nodos que duplican las etiquetas de las vías padre"
 
+msgid "{0} together with {1} and {2}. Remove {0}."
+msgstr ""
+
 msgid ""
 "wikipedia tag has no language given, use ''wikipedia''=''language:page "
 "title''"
@@ -29575,6 +29679,21 @@ msgstr "Trazas subidas a openstreetmap.org"
 msgid "Importing..."
 msgstr "Importando..."
 
+msgid "Shape is started incorrectly"
+msgstr ""
+
+msgid "Can''t load SVG diagram"
+msgstr ""
+
+msgid "Can''t find root SVG element"
+msgstr ""
+
+msgid "Import primitives"
+msgstr ""
+
+msgid "Cannot find configuration file!"
+msgstr ""
+
 msgid "DXF files [ImportDxf plugin] (*.dxf)"
 msgstr "Archivos DXF [componente ImportDxf] (* .dxf)"
 
@@ -30243,6 +30362,9 @@ msgstr ""
 msgid "Download mode"
 msgstr "Modo de descarga"
 
+msgid "Number of images to be pre-fetched (forwards and backwards)"
+msgstr ""
+
 msgid "You are logged in as ''{0}''."
 msgstr "Está registrado como ''{0}''."
 
@@ -30471,11 +30593,18 @@ msgid "only when manually requested"
 msgstr "sólo cuando se solicitan manualmente"
 
 msgid ""
-"The downloaded OSM area is too big. Download mode has been changed to OSM "
-"area until the layer is restarted."
+"The Mapillary layer has stopped downloading images, because the requested "
+"area is too big!"
+msgstr ""
+
+msgid ""
+"To solve this problem, you could zoom in and load a smaller area of the map."
+msgstr ""
+
+msgid ""
+"To solve this problem, you could switch to download mode ''{0}'' and load "
+"Mapillary images for a smaller portion of the map."
 msgstr ""
-"El área de OSM descargado es demasiado grande. El modo de descarga se ha "
-"cambiado a la zona de OSM hasta que se reinicie la capa."
 
 msgid "Downloading"
 msgstr "Descargando"
@@ -34169,24 +34298,6 @@ msgstr "Combinar superposición de vías"
 msgid "Merge Overlap (combine)"
 msgstr "Fusionar superposición (combinar)"
 
-msgid ""
-"<html>A role based relation membership was copied to all new ways.<br>You "
-"should verify this and correct it when necessary.</html>"
-msgstr ""
-"<html>Una relación de miembros basada en la función fue copiada a todas las "
-"nuevas vías.<br>Debería verificar esto y corregirlo cuando sea "
-"necesario.</html>"
-
-msgid ""
-"<html>A relation membership was copied to all new ways.<br>You should verify "
-"this and correct it when necessary.</html>"
-msgstr ""
-"<html>Una relación de miembros fue copiada a todas las vías "
-"nuevas.<br>Deberería verificar y corregir esto cuando sea necesario.</html>"
-
-msgid "Split way"
-msgstr "Dividir la vía"
-
 msgid "Michigan Left"
 msgstr "Restricción de giro a la izquierda tipo Michigan"
 
@@ -35763,33 +35874,6 @@ msgstr ""
 "PT: La ruta pasa por una carretera de un único sentido en la dirección "
 "equivocada"
 
-msgid "moved"
-msgstr "Movido"
-
-msgid "rail"
-msgstr "ferrocarril"
-
-msgid "Can''t parse a time from this string."
-msgstr "No se puede deserializar una hora con esta cadena de caracteres."
-
-msgid "Invalid value"
-msgstr "Valor no válido"
-
-msgid "added"
-msgstr "añadido"
-
-msgid "Public Transport: Enable GTFSStops"
-msgstr "Transporte público: activar paradas GFTS"
-
-msgid "Public Transport: Catch GTFS stops"
-msgstr "Transporte público: capturar paradas GTFS"
-
-msgid "skipped"
-msgstr "omitido"
-
-msgid "Public Transport: Disable GTFS"
-msgstr "Transporte público: desactivar GTFS"
-
 msgid "Create Stops from GTFS ..."
 msgstr "Crear paradas desde archivo GTFS..."
 
@@ -35818,69 +35902,9 @@ msgstr "No se encontraron datos"
 msgid "The GTFS file was empty."
 msgstr "El archivo GTFS estaba vacío."
 
-msgid "Create Stops from GTFS"
-msgstr "Crear paradas desde archivo GTFS"
-
-msgid "GTFS-Stops"
-msgstr "Paradas-GTFS"
-
-msgid "Type of stops to add"
-msgstr "Tipo de parada a añadir"
-
-msgid "Time on your GPS device"
-msgstr "Tiempo en su dispositivo GPS"
-
-msgid "HH:MM:SS.sss"
-msgstr "HH:MM:SS.sss"
-
-msgid "Time on your stopwatch"
-msgstr "Tiempo en su cronómetro"
-
-msgid "Time window"
-msgstr "Período de tiempo"
-
-msgid "seconds"
-msgstr "segundos"
-
-msgid "Move Threshold"
-msgstr "Umbral de desplazamiento"
-
-msgid "Suggest Stops"
-msgstr "Sugerir paradas"
-
-msgid "Find"
-msgstr "Buscar"
-
-msgid "Show"
-msgstr "Mostrar"
-
-msgid "Mark"
-msgstr "Marcar"
-
-msgid "Catch"
-msgstr "Capturar"
-
-msgid "Join"
-msgstr "Unir"
-
-msgid "Public Transport: Join GTFS stops"
-msgstr "Transporte público: unir paradas GTFS"
-
-msgid "State"
-msgstr "Estado/Provincia"
-
-msgid "[incomplete]"
-msgstr "[incompleto]"
-
-msgid "[empty way]"
-msgstr "[vía vacía]"
-
 msgid "[ID] {0}"
 msgstr "[ID] {0}"
 
-msgid "[gap]"
-msgstr "[interrupción]"
-
 msgid "Route patterns ..."
 msgstr "Patrones de ruta..."
 
@@ -35923,6 +35947,15 @@ msgstr "Añadir una nueva etiqueta"
 msgid "Name/Id"
 msgstr "Nombre/Id"
 
+msgid "Find"
+msgstr "Buscar"
+
+msgid "Show"
+msgstr "Mostrar"
+
+msgid "Mark"
+msgstr "Marcar"
+
 msgid "Ref"
 msgstr "Referencia"
 
@@ -35938,11 +35971,8 @@ msgstr "lado de la mano izquierda"
 msgid "Maximum distance from route"
 msgstr "Distancia máxima desde el itinerario"
 
-msgid " [ID] {0}"
-msgstr " [ID] {0}"
-
-msgid "Public Transport: Change stop type"
-msgstr "Transporte público: cambiar tipo de parada"
+msgid "Suggest Stops"
+msgstr "Sugerir paradas"
 
 msgid "Create Stops from GPX ..."
 msgstr "Crear paradas desde archivo GPX..."
@@ -35956,30 +35986,29 @@ msgstr "Seleccionar el archivo GPX"
 msgid "The GPX file contained no tracks or waypoints."
 msgstr "El archivo GPX no contenía trazas ni puntos de interés."
 
-msgid "Create Stops from GPX"
-msgstr "Crear paradas desde archivo GPX"
+msgid "moved"
+msgstr "Movido"
 
-msgid "Tracks in this GPX file:"
-msgstr "Trazas en este archivo GPX:"
+msgid "added"
+msgstr "añadido"
 
-msgid "Detach"
-msgstr "Despegar"
+msgid "Public Transport: Enable GTFSStops"
+msgstr "Transporte público: activar paradas GFTS"
 
-msgid "implicit"
-msgstr "implícito"
+msgid "Public Transport: Catch GTFS stops"
+msgstr "Transporte público: capturar paradas GTFS"
 
-msgid ""
-"The GPX file doesn''t contain valid trackpoints. Please use a GPX file that "
-"has trackpoints."
-msgstr ""
-"El archivo GPX no contiene puntos de traza válidos. Por favor utilice un "
-"archivo GPX que contenga puntos de traza."
+msgid "skipped"
+msgstr "omitido"
 
-msgid "GPX File Trouble"
-msgstr "Problema con Archivo GPX"
+msgid "Public Transport: Disable GTFS"
+msgstr "Transporte público: desactivar GTFS"
 
-msgid "unnamed"
-msgstr "sin nombre"
+msgid "Public Transport: Join GTFS stops"
+msgstr "Transporte público: unir paradas GTFS"
+
+msgid "Public Transport: Change stop type"
+msgstr "Transporte público: cambiar tipo de parada"
 
 msgid "Public Transport: Add track stop"
 msgstr "Transporte público: añadir pista de parada"
@@ -36002,9 +36031,6 @@ msgstr "Transporte público: ordenar lista de paradas de ruta"
 msgid "Public Transport: Suggest stops"
 msgstr "Transporte público: paradas sugeridas"
 
-msgid "Stopname"
-msgstr "Nombre de parada"
-
 msgid "Public Transport: Detach waypoints"
 msgstr "Transporte público: separar punto de ruta"
 
@@ -36017,6 +36043,91 @@ msgstr "Transporte público: activar puntos de ruta"
 msgid "Public Transport: Edit waypoint name"
 msgstr "Transporte público: editar nombre del punto de ruta"
 
+msgid "rail"
+msgstr "ferrocarril"
+
+msgid "Can''t parse a time from this string."
+msgstr "No se puede deserializar una hora con esta cadena de caracteres."
+
+msgid "Invalid value"
+msgstr "Valor no válido"
+
+msgid "Create Stops from GTFS"
+msgstr "Crear paradas desde archivo GTFS"
+
+msgid "GTFS-Stops"
+msgstr "Paradas-GTFS"
+
+msgid "Type of stops to add"
+msgstr "Tipo de parada a añadir"
+
+msgid "Time on your GPS device"
+msgstr "Tiempo en su dispositivo GPS"
+
+msgid "HH:MM:SS.sss"
+msgstr "HH:MM:SS.sss"
+
+msgid "Time on your stopwatch"
+msgstr "Tiempo en su cronómetro"
+
+msgid "Time window"
+msgstr "Período de tiempo"
+
+msgid "seconds"
+msgstr "segundos"
+
+msgid "Move Threshold"
+msgstr "Umbral de desplazamiento"
+
+msgid "Catch"
+msgstr "Capturar"
+
+msgid "Join"
+msgstr "Unir"
+
+msgid "Create Stops from GPX"
+msgstr "Crear paradas desde archivo GPX"
+
+msgid "Tracks in this GPX file:"
+msgstr "Trazas en este archivo GPX:"
+
+msgid "Detach"
+msgstr "Despegar"
+
+msgid "implicit"
+msgstr "implícito"
+
+msgid "State"
+msgstr "Estado/Provincia"
+
+msgid "[incomplete]"
+msgstr "[incompleto]"
+
+msgid "[empty way]"
+msgstr "[vía vacía]"
+
+msgid "[gap]"
+msgstr "[interrupción]"
+
+msgid "Stopname"
+msgstr "Nombre de parada"
+
+msgid " [ID] {0}"
+msgstr " [ID] {0}"
+
+msgid ""
+"The GPX file doesn''t contain valid trackpoints. Please use a GPX file that "
+"has trackpoints."
+msgstr ""
+"El archivo GPX no contiene puntos de traza válidos. Por favor utilice un "
+"archivo GPX que contenga puntos de traza."
+
+msgid "GPX File Trouble"
+msgstr "Problema con Archivo GPX"
+
+msgid "unnamed"
+msgstr "sin nombre"
+
 msgid "Distance between stops"
 msgstr "Distancia entre paradas"
 
@@ -36785,6 +36896,9 @@ msgstr "Lanza la ventana de dialogo del editor de etiquetas"
 msgid "JOSM Tag Editor Plugin"
 msgstr "Complemento JOSM Tag Editor"
 
+msgid "Presets"
+msgstr "Predefinidos"
+
 msgid "Abort tag editing and close dialog"
 msgstr "Cancelar la edición de etiquetas y cerrar el diálogo"
 
@@ -38969,6 +39083,26 @@ msgstr[0] ""
 msgstr[1] ""
 "¿Sobrescribir las etiquetas ''{0}'' {1} de {2} con el nuevo valor ''{3}''?"
 
+msgid "Download from Sophox API"
+msgstr ""
+
+msgid ""
+"Find places of education at least 2km, and at most 3km from the center of "
+"the selection"
+msgstr ""
+
+msgid "Show/hide Sophox snippet list"
+msgstr ""
+
+msgid "help"
+msgstr "ayuda"
+
+msgid "Server: "
+msgstr "Servidor: "
+
+msgid "Wikidata+OSM server"
+msgstr "Wikidata+servidor OSM"
+
 msgid "Search Wikidata items"
 msgstr "Buscar elementos de Wikidata"
 
@@ -39049,26 +39183,6 @@ msgstr ""
 "Añade una etiqueta ''wikipedia'' correspondiente a este artículo para los "
 "objetos seleccionados"
 
-msgid "Download from Wikosm API"
-msgstr "Descargar desde Wikosm API"
-
-msgid ""
-"Find places of education at least 2km, and at most 3km from the center of "
-"the selection"
-msgstr ""
-
-msgid "Show/hide Wikosm snippet list"
-msgstr ""
-
-msgid "help"
-msgstr "ayuda"
-
-msgid "Server: "
-msgstr "Servidor: "
-
-msgid "Wikidata+OSM server"
-msgstr "Wikidata+servidor OSM"
-
 msgid "The Ultimate WMS Super-speed Turbo Challenge II"
 msgstr "El Ultimate WMS Super-Velocidad Turbo Desafío II"
 
diff --git a/i18n/po/et.po b/i18n/po/et.po
index 076eb3d..8a868e8 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-10-30 03:38+0100\n"
+"POT-Creation-Date: 2017-11-26 00:06+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-10-30 04:41+0000\n"
-"X-Generator: Launchpad (build 18493)\n"
+"X-Launchpad-Export-Date: 2017-11-26 04:42+0000\n"
+"X-Generator: Launchpad (build 18509)\n"
 "Language: et\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -441,12 +441,15 @@ msgstr "Kustuta kiht"
 msgid "Delete the active layer. Does not delete the associated file."
 msgstr "Kustuta aktiivne kiht. Ei kustuta seotud faili."
 
-msgid "Toggle dialogs panel"
-msgstr "Lülita dialoogiaken"
+msgid "Dialogs panel"
+msgstr ""
 
 msgid "Toggle dialogs panel, maximize mapview"
 msgstr "Lülita dialoogiaken, maksimeeri kaardivaade"
 
+msgid "Toggle dialogs panel"
+msgstr "Lülita dialoogiaken"
+
 msgid "Distribute Nodes"
 msgstr "Jaota sõlmed"
 
@@ -6586,6 +6589,9 @@ msgstr "Koordinaadid: "
 msgid "Coordinates (projected): "
 msgstr ""
 
+msgid "UTM Zone"
+msgstr ""
+
 msgid "Part of: "
 msgstr ""
 
@@ -8917,6 +8923,11 @@ msgstr ""
 msgid "Check \"Save\" to save the layer to the file specified on the left."
 msgstr ""
 
+msgid ""
+"A background upload is already in progress. Kindly wait for it to finish "
+"before uploading new changes"
+msgstr ""
+
 msgid "I would like someone to review my edits."
 msgstr ""
 
@@ -10055,6 +10066,9 @@ msgstr ""
 msgid "Save Layer"
 msgstr "Salvesta kiht"
 
+msgid "Trying to set a read only data layer as edit layer"
+msgstr ""
+
 msgid "{0} note"
 msgid_plural "{0} notes"
 msgstr[0] ""
@@ -10899,11 +10913,6 @@ msgstr ""
 msgid "Failed to parse Mappaint styles from ''{0}''. Error was: {1}"
 msgstr ""
 
-msgid ""
-"Detected deprecated ''{0}'' in ''{1}'' which will be removed shortly. Use "
-"''{2}'' instead."
-msgstr ""
-
 msgid "Failed to locate image ''{0}''"
 msgstr ""
 
@@ -12075,6 +12084,9 @@ msgstr "Käivitamisel näidatakse käivituslogo"
 msgid "Show object ID in selection lists"
 msgstr "Objekti ID-d näidatakse valikuloendis"
 
+msgid "Show node coordinates in selection lists"
+msgstr ""
+
 msgid "Show localized name in selection lists"
 msgstr "Lokaliseeritud nime näidatakse valikuloendis"
 
@@ -12837,9 +12849,6 @@ msgstr ""
 msgid "UTM"
 msgstr ""
 
-msgid "UTM Zone"
-msgstr ""
-
 msgid "North"
 msgstr ""
 
@@ -13323,9 +13332,6 @@ msgstr ""
 msgid "Error parsing {0}: "
 msgstr "Viga sõelumisel {0}: "
 
-msgid "Presets"
-msgstr "Eelseaded"
-
 msgid "Search for objects by preset..."
 msgstr ""
 
@@ -15906,6 +15912,18 @@ msgstr ""
 msgid "korean"
 msgstr ""
 
+msgid "donut"
+msgstr ""
+
+msgid "mediterranean"
+msgstr ""
+
+msgid "friture"
+msgstr ""
+
+msgid "crepe"
+msgstr ""
+
 msgid "Internet access"
 msgstr "Internetiühendus"
 
@@ -18748,8 +18766,17 @@ msgstr "Elektrivarustus"
 msgid "Tents allowed"
 msgstr "Telkimine lubatud"
 
-msgid "Camping Site"
-msgstr "Laagriplats"
+msgid "Campsite"
+msgstr ""
+
+msgid "Caravans allowed"
+msgstr ""
+
+msgid "Backcountry"
+msgstr ""
+
+msgid "Group only access"
+msgstr ""
 
 msgid "Food+Drinks"
 msgstr "Toit ja jook"
@@ -23577,6 +23604,14 @@ msgid ""
 "resolution or better, and refreshed more frequently with ongoing updates."
 msgstr ""
 
+msgid "DigitalGlobe Premium Imagery Vintage"
+msgstr ""
+
+msgid ""
+"Imagery boundaries and capture dates. Labels appear at zoom level 14 and "
+"higher."
+msgstr ""
+
 msgid "DigitalGlobe Standard Imagery"
 msgstr ""
 
@@ -23586,6 +23621,9 @@ msgid ""
 "Landsat. Average age is 2.31 years, with some areas updated 2x per year."
 msgstr ""
 
+msgid "DigitalGlobe Standard Imagery Vintage"
+msgstr ""
+
 msgid "Esri World Imagery"
 msgstr ""
 
@@ -23649,6 +23687,12 @@ msgstr ""
 msgid "Strava cycling and running heatmap"
 msgstr ""
 
+msgid "Strava water sports heatmap"
+msgstr ""
+
+msgid "Strava winter sports heatmap"
+msgstr ""
+
 msgid "Locator Overlay"
 msgstr ""
 
@@ -24053,6 +24097,9 @@ msgstr ""
 msgid "SPW(allonie) most recent aerial imagery"
 msgstr ""
 
+msgid "SPW(allonie) 2016 aerial imagery"
+msgstr ""
+
 msgid "SPW(allonie) 2015 aerial imagery"
 msgstr ""
 
@@ -24098,6 +24145,14 @@ msgstr ""
 msgid "Addresses data from IBGE"
 msgstr ""
 
+msgid "Street names IBGE Salvador-BA"
+msgstr ""
+
+msgid ""
+"Streets geometry and names of Salvador, Bahia. Source: Faces de Logradouro - "
+"IBGE."
+msgstr ""
+
 msgid "Rio Mosaic 2013"
 msgstr ""
 
@@ -24828,6 +24883,9 @@ msgstr ""
 msgid "Japan GSI ortho Imagery"
 msgstr ""
 
+msgid "Japan GSI Standard Map"
+msgstr ""
+
 msgid "imagico.de OSM images for mapping: Aral Sea (low water level)"
 msgstr ""
 
@@ -24857,7 +24915,7 @@ msgstr ""
 msgid "20cm ortho - Latvia - Coastline"
 msgstr ""
 
-msgid "1.cikla ortofotokarte - Latvia"
+msgid "Orthophoto 1st cycle (1994-1999) - Latvia"
 msgstr ""
 
 msgid "ORT10LT (Lithuania)"
@@ -24866,6 +24924,9 @@ msgstr ""
 msgid "geoportail.lu all layers"
 msgstr ""
 
+msgid "geoportail.lu ortho latest"
+msgstr ""
+
 msgid "geoportail.lu ortho 2016"
 msgstr ""
 
@@ -26356,6 +26417,9 @@ msgstr ""
 msgid "{0} on a node. Should be used on a way."
 msgstr ""
 
+msgid "{0} on a node. Should be used on a way or relation."
+msgstr ""
+
 msgid "{0} on a node. Should be drawn as an area."
 msgstr ""
 
@@ -26583,6 +26647,9 @@ msgstr ""
 msgid "Nodes duplicating parent way tags"
 msgstr ""
 
+msgid "{0} together with {1} and {2}. Remove {0}."
+msgstr ""
+
 msgid ""
 "wikipedia tag has no language given, use ''wikipedia''=''language:page "
 "title''"
@@ -27356,6 +27423,21 @@ msgstr ""
 msgid "Importing..."
 msgstr ""
 
+msgid "Shape is started incorrectly"
+msgstr ""
+
+msgid "Can''t load SVG diagram"
+msgstr ""
+
+msgid "Can''t find root SVG element"
+msgstr ""
+
+msgid "Import primitives"
+msgstr ""
+
+msgid "Cannot find configuration file!"
+msgstr ""
+
 msgid "DXF files [ImportDxf plugin] (*.dxf)"
 msgstr ""
 
@@ -27995,6 +28077,9 @@ msgstr ""
 msgid "Download mode"
 msgstr ""
 
+msgid "Number of images to be pre-fetched (forwards and backwards)"
+msgstr ""
+
 msgid "You are logged in as ''{0}''."
 msgstr ""
 
@@ -28205,8 +28290,17 @@ msgid "only when manually requested"
 msgstr ""
 
 msgid ""
-"The downloaded OSM area is too big. Download mode has been changed to OSM "
-"area until the layer is restarted."
+"The Mapillary layer has stopped downloading images, because the requested "
+"area is too big!"
+msgstr ""
+
+msgid ""
+"To solve this problem, you could zoom in and load a smaller area of the map."
+msgstr ""
+
+msgid ""
+"To solve this problem, you could switch to download mode ''{0}'' and load "
+"Mapillary images for a smaller portion of the map."
 msgstr ""
 
 msgid "Downloading"
@@ -31534,19 +31628,6 @@ msgstr ""
 msgid "Merge Overlap (combine)"
 msgstr ""
 
-msgid ""
-"<html>A role based relation membership was copied to all new ways.<br>You "
-"should verify this and correct it when necessary.</html>"
-msgstr ""
-
-msgid ""
-"<html>A relation membership was copied to all new ways.<br>You should verify "
-"this and correct it when necessary.</html>"
-msgstr ""
-
-msgid "Split way"
-msgstr ""
-
 msgid "Michigan Left"
 msgstr ""
 
@@ -33009,33 +33090,6 @@ msgstr ""
 msgid "PT: Route passes a oneway road in the wrong direction"
 msgstr ""
 
-msgid "moved"
-msgstr ""
-
-msgid "rail"
-msgstr "raudtee"
-
-msgid "Can''t parse a time from this string."
-msgstr ""
-
-msgid "Invalid value"
-msgstr ""
-
-msgid "added"
-msgstr ""
-
-msgid "Public Transport: Enable GTFSStops"
-msgstr ""
-
-msgid "Public Transport: Catch GTFS stops"
-msgstr ""
-
-msgid "skipped"
-msgstr ""
-
-msgid "Public Transport: Disable GTFS"
-msgstr ""
-
 msgid "Create Stops from GTFS ..."
 msgstr "Loo peatused GTFS-failist ..."
 
@@ -33062,69 +33116,9 @@ msgstr ""
 msgid "The GTFS file was empty."
 msgstr "GTFS-fail oli tühi."
 
-msgid "Create Stops from GTFS"
-msgstr "Peatuste loomine GTFS-failist"
-
-msgid "GTFS-Stops"
-msgstr "GTFS-peatused"
-
-msgid "Type of stops to add"
-msgstr ""
-
-msgid "Time on your GPS device"
-msgstr ""
-
-msgid "HH:MM:SS.sss"
-msgstr ""
-
-msgid "Time on your stopwatch"
-msgstr ""
-
-msgid "Time window"
-msgstr ""
-
-msgid "seconds"
-msgstr ""
-
-msgid "Move Threshold"
-msgstr ""
-
-msgid "Suggest Stops"
-msgstr ""
-
-msgid "Find"
-msgstr ""
-
-msgid "Show"
-msgstr "Näita"
-
-msgid "Mark"
-msgstr ""
-
-msgid "Catch"
-msgstr ""
-
-msgid "Join"
-msgstr ""
-
-msgid "Public Transport: Join GTFS stops"
-msgstr ""
-
-msgid "State"
-msgstr "Riik"
-
-msgid "[incomplete]"
-msgstr ""
-
-msgid "[empty way]"
-msgstr ""
-
 msgid "[ID] {0}"
 msgstr ""
 
-msgid "[gap]"
-msgstr "[lünk]"
-
 msgid "Route patterns ..."
 msgstr ""
 
@@ -33167,6 +33161,15 @@ msgstr "Lisa uus silt"
 msgid "Name/Id"
 msgstr "Nimi/Id"
 
+msgid "Find"
+msgstr ""
+
+msgid "Show"
+msgstr "Näita"
+
+msgid "Mark"
+msgstr ""
+
 msgid "Ref"
 msgstr ""
 
@@ -33182,10 +33185,7 @@ msgstr "vasakul pool"
 msgid "Maximum distance from route"
 msgstr "Suurim kaugus marsruudist"
 
-msgid " [ID] {0}"
-msgstr ""
-
-msgid "Public Transport: Change stop type"
+msgid "Suggest Stops"
 msgstr ""
 
 msgid "Create Stops from GPX ..."
@@ -33200,28 +33200,29 @@ msgstr "Vali GPX-fail"
 msgid "The GPX file contained no tracks or waypoints."
 msgstr ""
 
-msgid "Create Stops from GPX"
-msgstr "Peatuste loomine GPX-failist"
+msgid "moved"
+msgstr ""
 
-msgid "Tracks in this GPX file:"
+msgid "added"
 msgstr ""
 
-msgid "Detach"
+msgid "Public Transport: Enable GTFSStops"
 msgstr ""
 
-msgid "implicit"
+msgid "Public Transport: Catch GTFS stops"
 msgstr ""
 
-msgid ""
-"The GPX file doesn''t contain valid trackpoints. Please use a GPX file that "
-"has trackpoints."
+msgid "skipped"
 msgstr ""
 
-msgid "GPX File Trouble"
+msgid "Public Transport: Disable GTFS"
 msgstr ""
 
-msgid "unnamed"
-msgstr "nimeta"
+msgid "Public Transport: Join GTFS stops"
+msgstr ""
+
+msgid "Public Transport: Change stop type"
+msgstr ""
 
 msgid "Public Transport: Add track stop"
 msgstr ""
@@ -33244,9 +33245,6 @@ msgstr ""
 msgid "Public Transport: Suggest stops"
 msgstr ""
 
-msgid "Stopname"
-msgstr ""
-
 msgid "Public Transport: Detach waypoints"
 msgstr ""
 
@@ -33259,6 +33257,89 @@ msgstr ""
 msgid "Public Transport: Edit waypoint name"
 msgstr ""
 
+msgid "rail"
+msgstr "raudtee"
+
+msgid "Can''t parse a time from this string."
+msgstr ""
+
+msgid "Invalid value"
+msgstr ""
+
+msgid "Create Stops from GTFS"
+msgstr "Peatuste loomine GTFS-failist"
+
+msgid "GTFS-Stops"
+msgstr "GTFS-peatused"
+
+msgid "Type of stops to add"
+msgstr ""
+
+msgid "Time on your GPS device"
+msgstr ""
+
+msgid "HH:MM:SS.sss"
+msgstr ""
+
+msgid "Time on your stopwatch"
+msgstr ""
+
+msgid "Time window"
+msgstr ""
+
+msgid "seconds"
+msgstr ""
+
+msgid "Move Threshold"
+msgstr ""
+
+msgid "Catch"
+msgstr ""
+
+msgid "Join"
+msgstr ""
+
+msgid "Create Stops from GPX"
+msgstr "Peatuste loomine GPX-failist"
+
+msgid "Tracks in this GPX file:"
+msgstr ""
+
+msgid "Detach"
+msgstr ""
+
+msgid "implicit"
+msgstr ""
+
+msgid "State"
+msgstr "Riik"
+
+msgid "[incomplete]"
+msgstr ""
+
+msgid "[empty way]"
+msgstr ""
+
+msgid "[gap]"
+msgstr "[lünk]"
+
+msgid "Stopname"
+msgstr ""
+
+msgid " [ID] {0}"
+msgstr ""
+
+msgid ""
+"The GPX file doesn''t contain valid trackpoints. Please use a GPX file that "
+"has trackpoints."
+msgstr ""
+
+msgid "GPX File Trouble"
+msgstr ""
+
+msgid "unnamed"
+msgstr "nimeta"
+
 msgid "Distance between stops"
 msgstr ""
 
@@ -33985,6 +34066,9 @@ msgstr ""
 msgid "JOSM Tag Editor Plugin"
 msgstr ""
 
+msgid "Presets"
+msgstr "Eelseaded"
+
 msgid "Abort tag editing and close dialog"
 msgstr ""
 
@@ -35917,6 +36001,26 @@ msgid_plural "Overwrite ''{0}'' tags {1} from {2} with new value ''{3}''?"
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Download from Sophox API"
+msgstr ""
+
+msgid ""
+"Find places of education at least 2km, and at most 3km from the center of "
+"the selection"
+msgstr ""
+
+msgid "Show/hide Sophox snippet list"
+msgstr ""
+
+msgid "help"
+msgstr ""
+
+msgid "Server: "
+msgstr ""
+
+msgid "Wikidata+OSM server"
+msgstr ""
+
 msgid "Search Wikidata items"
 msgstr ""
 
@@ -35991,26 +36095,6 @@ msgid ""
 msgstr ""
 "Lisab sildi sellele artiklile vastava \"wikipedia\" sildi valitud objektidele"
 
-msgid "Download from Wikosm API"
-msgstr ""
-
-msgid ""
-"Find places of education at least 2km, and at most 3km from the center of "
-"the selection"
-msgstr ""
-
-msgid "Show/hide Wikosm snippet list"
-msgstr ""
-
-msgid "help"
-msgstr ""
-
-msgid "Server: "
-msgstr ""
-
-msgid "Wikidata+OSM server"
-msgstr ""
-
 msgid "The Ultimate WMS Super-speed Turbo Challenge II"
 msgstr "The Ultimate WMS Super-speed Turbo Challenge II"
 
diff --git a/i18n/po/eu.po b/i18n/po/eu.po
index bec1344..d82f178 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-10-30 03:38+0100\n"
+"POT-Creation-Date: 2017-11-26 00:06+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-10-30 04:36+0000\n"
-"X-Generator: Launchpad (build 18493)\n"
+"X-Launchpad-Export-Date: 2017-11-26 04:36+0000\n"
+"X-Generator: Launchpad (build 18509)\n"
 "Language: eu\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -434,12 +434,15 @@ msgstr ""
 msgid "Delete the active layer. Does not delete the associated file."
 msgstr ""
 
-msgid "Toggle dialogs panel"
+msgid "Dialogs panel"
 msgstr ""
 
 msgid "Toggle dialogs panel, maximize mapview"
 msgstr ""
 
+msgid "Toggle dialogs panel"
+msgstr ""
+
 msgid "Distribute Nodes"
 msgstr ""
 
@@ -6677,6 +6680,9 @@ msgstr ""
 msgid "Coordinates (projected): "
 msgstr ""
 
+msgid "UTM Zone"
+msgstr "UTM Zonaldea"
+
 msgid "Part of: "
 msgstr ""
 
@@ -8976,6 +8982,11 @@ msgstr ""
 msgid "Check \"Save\" to save the layer to the file specified on the left."
 msgstr ""
 
+msgid ""
+"A background upload is already in progress. Kindly wait for it to finish "
+"before uploading new changes"
+msgstr ""
+
 msgid "I would like someone to review my edits."
 msgstr ""
 
@@ -10085,6 +10096,9 @@ msgstr ""
 msgid "Save Layer"
 msgstr "Geruza gorde"
 
+msgid "Trying to set a read only data layer as edit layer"
+msgstr ""
+
 msgid "{0} note"
 msgid_plural "{0} notes"
 msgstr[0] ""
@@ -10917,11 +10931,6 @@ msgstr ""
 msgid "Failed to parse Mappaint styles from ''{0}''. Error was: {1}"
 msgstr ""
 
-msgid ""
-"Detected deprecated ''{0}'' in ''{1}'' which will be removed shortly. Use "
-"''{2}'' instead."
-msgstr ""
-
 msgid "Failed to locate image ''{0}''"
 msgstr ""
 
@@ -12086,6 +12095,9 @@ msgstr ""
 msgid "Show object ID in selection lists"
 msgstr ""
 
+msgid "Show node coordinates in selection lists"
+msgstr ""
+
 msgid "Show localized name in selection lists"
 msgstr ""
 
@@ -12842,9 +12854,6 @@ msgstr "UTM Sistema-geodesikoa"
 msgid "UTM"
 msgstr "UTM"
 
-msgid "UTM Zone"
-msgstr "UTM Zonaldea"
-
 msgid "North"
 msgstr "Iparraldea"
 
@@ -13312,9 +13321,6 @@ msgstr ""
 msgid "Error parsing {0}: "
 msgstr ""
 
-msgid "Presets"
-msgstr "Aurrezarpenak"
-
 msgid "Search for objects by preset..."
 msgstr ""
 
@@ -15861,6 +15867,18 @@ msgstr ""
 msgid "korean"
 msgstr ""
 
+msgid "donut"
+msgstr ""
+
+msgid "mediterranean"
+msgstr ""
+
+msgid "friture"
+msgstr ""
+
+msgid "crepe"
+msgstr ""
+
 msgid "Internet access"
 msgstr ""
 
@@ -18703,8 +18721,17 @@ msgstr ""
 msgid "Tents allowed"
 msgstr ""
 
-msgid "Camping Site"
-msgstr "Kanpalekua"
+msgid "Campsite"
+msgstr ""
+
+msgid "Caravans allowed"
+msgstr ""
+
+msgid "Backcountry"
+msgstr ""
+
+msgid "Group only access"
+msgstr ""
 
 msgid "Food+Drinks"
 msgstr "Janaria+Edariak"
@@ -23532,6 +23559,14 @@ msgid ""
 "resolution or better, and refreshed more frequently with ongoing updates."
 msgstr ""
 
+msgid "DigitalGlobe Premium Imagery Vintage"
+msgstr ""
+
+msgid ""
+"Imagery boundaries and capture dates. Labels appear at zoom level 14 and "
+"higher."
+msgstr ""
+
 msgid "DigitalGlobe Standard Imagery"
 msgstr ""
 
@@ -23541,6 +23576,9 @@ msgid ""
 "Landsat. Average age is 2.31 years, with some areas updated 2x per year."
 msgstr ""
 
+msgid "DigitalGlobe Standard Imagery Vintage"
+msgstr ""
+
 msgid "Esri World Imagery"
 msgstr ""
 
@@ -23604,6 +23642,12 @@ msgstr ""
 msgid "Strava cycling and running heatmap"
 msgstr ""
 
+msgid "Strava water sports heatmap"
+msgstr ""
+
+msgid "Strava winter sports heatmap"
+msgstr ""
+
 msgid "Locator Overlay"
 msgstr ""
 
@@ -24008,6 +24052,9 @@ msgstr ""
 msgid "SPW(allonie) most recent aerial imagery"
 msgstr ""
 
+msgid "SPW(allonie) 2016 aerial imagery"
+msgstr ""
+
 msgid "SPW(allonie) 2015 aerial imagery"
 msgstr ""
 
@@ -24053,6 +24100,14 @@ msgstr ""
 msgid "Addresses data from IBGE"
 msgstr ""
 
+msgid "Street names IBGE Salvador-BA"
+msgstr ""
+
+msgid ""
+"Streets geometry and names of Salvador, Bahia. Source: Faces de Logradouro - "
+"IBGE."
+msgstr ""
+
 msgid "Rio Mosaic 2013"
 msgstr ""
 
@@ -24783,6 +24838,9 @@ msgstr ""
 msgid "Japan GSI ortho Imagery"
 msgstr ""
 
+msgid "Japan GSI Standard Map"
+msgstr ""
+
 msgid "imagico.de OSM images for mapping: Aral Sea (low water level)"
 msgstr ""
 
@@ -24812,7 +24870,7 @@ msgstr ""
 msgid "20cm ortho - Latvia - Coastline"
 msgstr ""
 
-msgid "1.cikla ortofotokarte - Latvia"
+msgid "Orthophoto 1st cycle (1994-1999) - Latvia"
 msgstr ""
 
 msgid "ORT10LT (Lithuania)"
@@ -24821,6 +24879,9 @@ msgstr ""
 msgid "geoportail.lu all layers"
 msgstr ""
 
+msgid "geoportail.lu ortho latest"
+msgstr ""
+
 msgid "geoportail.lu ortho 2016"
 msgstr ""
 
@@ -26311,6 +26372,9 @@ msgstr ""
 msgid "{0} on a node. Should be used on a way."
 msgstr ""
 
+msgid "{0} on a node. Should be used on a way or relation."
+msgstr ""
+
 msgid "{0} on a node. Should be drawn as an area."
 msgstr ""
 
@@ -26538,6 +26602,9 @@ msgstr ""
 msgid "Nodes duplicating parent way tags"
 msgstr ""
 
+msgid "{0} together with {1} and {2}. Remove {0}."
+msgstr ""
+
 msgid ""
 "wikipedia tag has no language given, use ''wikipedia''=''language:page "
 "title''"
@@ -27339,6 +27406,21 @@ msgstr ""
 msgid "Importing..."
 msgstr ""
 
+msgid "Shape is started incorrectly"
+msgstr ""
+
+msgid "Can''t load SVG diagram"
+msgstr ""
+
+msgid "Can''t find root SVG element"
+msgstr ""
+
+msgid "Import primitives"
+msgstr ""
+
+msgid "Cannot find configuration file!"
+msgstr ""
+
 msgid "DXF files [ImportDxf plugin] (*.dxf)"
 msgstr ""
 
@@ -27978,6 +28060,9 @@ msgstr ""
 msgid "Download mode"
 msgstr ""
 
+msgid "Number of images to be pre-fetched (forwards and backwards)"
+msgstr ""
+
 msgid "You are logged in as ''{0}''."
 msgstr ""
 
@@ -28188,8 +28273,17 @@ msgid "only when manually requested"
 msgstr ""
 
 msgid ""
-"The downloaded OSM area is too big. Download mode has been changed to OSM "
-"area until the layer is restarted."
+"The Mapillary layer has stopped downloading images, because the requested "
+"area is too big!"
+msgstr ""
+
+msgid ""
+"To solve this problem, you could zoom in and load a smaller area of the map."
+msgstr ""
+
+msgid ""
+"To solve this problem, you could switch to download mode ''{0}'' and load "
+"Mapillary images for a smaller portion of the map."
 msgstr ""
 
 msgid "Downloading"
@@ -31501,24 +31595,6 @@ msgstr ""
 msgid "Merge Overlap (combine)"
 msgstr ""
 
-msgid ""
-"<html>A role based relation membership was copied to all new ways.<br>You "
-"should verify this and correct it when necessary.</html>"
-msgstr ""
-"<html>Bazkideen roletan oinarrituriko bazkideen zerrenda bat kopiatu egin da "
-"bide berri guztietan.<br>Baieztatu  egin beharko zenuke hau eta zuzendu "
-"beharrezkoa denean.</html>"
-
-msgid ""
-"<html>A relation membership was copied to all new ways.<br>You should verify "
-"this and correct it when necessary.</html>"
-msgstr ""
-"<html>Bazkideen zerrenda kopiatu egin da bide berri guztietan.<br>Baieztatu  "
-"egin beharko zenuke hau eta zuzendu beharrezkoa denean.</html>"
-
-msgid "Split way"
-msgstr ""
-
 msgid "Michigan Left"
 msgstr ""
 
@@ -32973,33 +33049,6 @@ msgstr ""
 msgid "PT: Route passes a oneway road in the wrong direction"
 msgstr ""
 
-msgid "moved"
-msgstr ""
-
-msgid "rail"
-msgstr "trenbidea"
-
-msgid "Can''t parse a time from this string."
-msgstr ""
-
-msgid "Invalid value"
-msgstr ""
-
-msgid "added"
-msgstr ""
-
-msgid "Public Transport: Enable GTFSStops"
-msgstr ""
-
-msgid "Public Transport: Catch GTFS stops"
-msgstr ""
-
-msgid "skipped"
-msgstr ""
-
-msgid "Public Transport: Disable GTFS"
-msgstr ""
-
 msgid "Create Stops from GTFS ..."
 msgstr ""
 
@@ -33026,34 +33075,49 @@ msgstr ""
 msgid "The GTFS file was empty."
 msgstr ""
 
-msgid "Create Stops from GTFS"
+msgid "[ID] {0}"
 msgstr ""
 
-msgid "GTFS-Stops"
+msgid "Route patterns ..."
 msgstr ""
 
-msgid "Type of stops to add"
+msgid "Edit Route patterns for public transport"
 msgstr ""
 
-msgid "Time on your GPS device"
+msgid "Route Patterns"
 msgstr ""
 
-msgid "HH:MM:SS.sss"
+msgid "Overview"
 msgstr ""
 
-msgid "Time on your stopwatch"
+msgid "Itinerary"
 msgstr ""
 
-msgid "Time window"
+msgid "Stops"
 msgstr ""
 
-msgid "seconds"
+msgid "Meta"
 msgstr ""
 
-msgid "Move Threshold"
+msgid "Existing route patterns:"
 msgstr ""
 
-msgid "Suggest Stops"
+msgid "Reflect"
+msgstr ""
+
+msgid "Required tags:"
+msgstr ""
+
+msgid "Common tags:"
+msgstr ""
+
+msgid "Additional tags:"
+msgstr ""
+
+msgid "Add a new Tag"
+msgstr ""
+
+msgid "Name/Id"
 msgstr ""
 
 msgid "Find"
@@ -33065,162 +33129,174 @@ msgstr "Erakutsi"
 msgid "Mark"
 msgstr ""
 
-msgid "Catch"
+msgid "Ref"
 msgstr ""
 
-msgid "Join"
+msgid "Stops are possible on the"
 msgstr ""
 
-msgid "Public Transport: Join GTFS stops"
+msgid "right hand side"
 msgstr ""
 
-msgid "State"
-msgstr "Estatua"
+msgid "left hand side"
+msgstr ""
 
-msgid "[incomplete]"
+msgid "Maximum distance from route"
 msgstr ""
 
-msgid "[empty way]"
+msgid "Suggest Stops"
 msgstr ""
 
-msgid "[ID] {0}"
+msgid "Create Stops from GPX ..."
 msgstr ""
 
-msgid "[gap]"
+msgid "Create Stops from a GPX file"
 msgstr ""
 
-msgid "Route patterns ..."
+msgid "Select GPX file"
 msgstr ""
 
-msgid "Edit Route patterns for public transport"
+msgid "The GPX file contained no tracks or waypoints."
 msgstr ""
 
-msgid "Route Patterns"
+msgid "moved"
 msgstr ""
 
-msgid "Overview"
+msgid "added"
 msgstr ""
 
-msgid "Itinerary"
+msgid "Public Transport: Enable GTFSStops"
 msgstr ""
 
-msgid "Stops"
+msgid "Public Transport: Catch GTFS stops"
 msgstr ""
 
-msgid "Meta"
+msgid "skipped"
 msgstr ""
 
-msgid "Existing route patterns:"
+msgid "Public Transport: Disable GTFS"
 msgstr ""
 
-msgid "Reflect"
+msgid "Public Transport: Join GTFS stops"
 msgstr ""
 
-msgid "Required tags:"
+msgid "Public Transport: Change stop type"
 msgstr ""
 
-msgid "Common tags:"
+msgid "Public Transport: Add track stop"
 msgstr ""
 
-msgid "Additional tags:"
+msgid "Public Transport: Delete track stop"
 msgstr ""
 
-msgid "Add a new Tag"
+msgid "Public Transport: Detach track stop list"
 msgstr ""
 
-msgid "Name/Id"
+msgid "Public Transport: Edit track stop list"
 msgstr ""
 
-msgid "Ref"
+msgid "Public Transport: Relocate nodes in track stoplist"
 msgstr ""
 
-msgid "Stops are possible on the"
+msgid "Public Transport: sort track stop list"
 msgstr ""
 
-msgid "right hand side"
+msgid "Public Transport: Suggest stops"
 msgstr ""
 
-msgid "left hand side"
+msgid "Public Transport: Detach waypoints"
 msgstr ""
 
-msgid "Maximum distance from route"
+msgid "Public Transport: Disable waypoints"
 msgstr ""
 
-msgid " [ID] {0}"
+msgid "Public Transport: Enable waypoints"
 msgstr ""
 
-msgid "Public Transport: Change stop type"
+msgid "Public Transport: Edit waypoint name"
 msgstr ""
 
-msgid "Create Stops from GPX ..."
+msgid "rail"
+msgstr "trenbidea"
+
+msgid "Can''t parse a time from this string."
 msgstr ""
 
-msgid "Create Stops from a GPX file"
+msgid "Invalid value"
 msgstr ""
 
-msgid "Select GPX file"
+msgid "Create Stops from GTFS"
 msgstr ""
 
-msgid "The GPX file contained no tracks or waypoints."
+msgid "GTFS-Stops"
 msgstr ""
 
-msgid "Create Stops from GPX"
+msgid "Type of stops to add"
 msgstr ""
 
-msgid "Tracks in this GPX file:"
+msgid "Time on your GPS device"
 msgstr ""
 
-msgid "Detach"
+msgid "HH:MM:SS.sss"
 msgstr ""
 
-msgid "implicit"
+msgid "Time on your stopwatch"
 msgstr ""
 
-msgid ""
-"The GPX file doesn''t contain valid trackpoints. Please use a GPX file that "
-"has trackpoints."
+msgid "Time window"
 msgstr ""
 
-msgid "GPX File Trouble"
+msgid "seconds"
 msgstr ""
 
-msgid "unnamed"
+msgid "Move Threshold"
 msgstr ""
 
-msgid "Public Transport: Add track stop"
+msgid "Catch"
 msgstr ""
 
-msgid "Public Transport: Delete track stop"
+msgid "Join"
 msgstr ""
 
-msgid "Public Transport: Detach track stop list"
+msgid "Create Stops from GPX"
 msgstr ""
 
-msgid "Public Transport: Edit track stop list"
+msgid "Tracks in this GPX file:"
 msgstr ""
 
-msgid "Public Transport: Relocate nodes in track stoplist"
+msgid "Detach"
 msgstr ""
 
-msgid "Public Transport: sort track stop list"
+msgid "implicit"
 msgstr ""
 
-msgid "Public Transport: Suggest stops"
+msgid "State"
+msgstr "Estatua"
+
+msgid "[incomplete]"
+msgstr ""
+
+msgid "[empty way]"
+msgstr ""
+
+msgid "[gap]"
 msgstr ""
 
 msgid "Stopname"
 msgstr ""
 
-msgid "Public Transport: Detach waypoints"
+msgid " [ID] {0}"
 msgstr ""
 
-msgid "Public Transport: Disable waypoints"
+msgid ""
+"The GPX file doesn''t contain valid trackpoints. Please use a GPX file that "
+"has trackpoints."
 msgstr ""
 
-msgid "Public Transport: Enable waypoints"
+msgid "GPX File Trouble"
 msgstr ""
 
-msgid "Public Transport: Edit waypoint name"
+msgid "unnamed"
 msgstr ""
 
 msgid "Distance between stops"
@@ -33949,6 +34025,9 @@ msgstr ""
 msgid "JOSM Tag Editor Plugin"
 msgstr ""
 
+msgid "Presets"
+msgstr "Aurrezarpenak"
+
 msgid "Abort tag editing and close dialog"
 msgstr ""
 
@@ -35879,6 +35958,26 @@ msgid_plural "Overwrite ''{0}'' tags {1} from {2} with new value ''{3}''?"
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Download from Sophox API"
+msgstr ""
+
+msgid ""
+"Find places of education at least 2km, and at most 3km from the center of "
+"the selection"
+msgstr ""
+
+msgid "Show/hide Sophox snippet list"
+msgstr ""
+
+msgid "help"
+msgstr ""
+
+msgid "Server: "
+msgstr ""
+
+msgid "Wikidata+OSM server"
+msgstr ""
+
 msgid "Search Wikidata items"
 msgstr ""
 
@@ -35952,26 +36051,6 @@ msgid ""
 "objects"
 msgstr ""
 
-msgid "Download from Wikosm API"
-msgstr ""
-
-msgid ""
-"Find places of education at least 2km, and at most 3km from the center of "
-"the selection"
-msgstr ""
-
-msgid "Show/hide Wikosm snippet list"
-msgstr ""
-
-msgid "help"
-msgstr ""
-
-msgid "Server: "
-msgstr ""
-
-msgid "Wikidata+OSM server"
-msgstr ""
-
 msgid "The Ultimate WMS Super-speed Turbo Challenge II"
 msgstr ""
 
diff --git a/i18n/po/fa.po b/i18n/po/fa.po
index 743405e..2ccfe59 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-10-30 03:38+0100\n"
+"POT-Creation-Date: 2017-11-26 00:06+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-10-30 04:57+0000\n"
-"X-Generator: Launchpad (build 18493)\n"
+"X-Launchpad-Export-Date: 2017-11-26 04:58+0000\n"
+"X-Generator: Launchpad (build 18509)\n"
 "Language: fa\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -427,12 +427,15 @@ msgstr ""
 msgid "Delete the active layer. Does not delete the associated file."
 msgstr ""
 
-msgid "Toggle dialogs panel"
-msgstr "میخ پرچ پنل گفتگو"
+msgid "Dialogs panel"
+msgstr ""
 
 msgid "Toggle dialogs panel, maximize mapview"
 msgstr "میخ پرچ پنل گفتگو، نمای نقشه را حداگثر میکند"
 
+msgid "Toggle dialogs panel"
+msgstr "میخ پرچ پنل گفتگو"
+
 msgid "Distribute Nodes"
 msgstr ""
 
@@ -6556,6 +6559,9 @@ msgstr ""
 msgid "Coordinates (projected): "
 msgstr ""
 
+msgid "UTM Zone"
+msgstr ""
+
 msgid "Part of: "
 msgstr ""
 
@@ -8854,6 +8860,11 @@ msgstr ""
 msgid "Check \"Save\" to save the layer to the file specified on the left."
 msgstr ""
 
+msgid ""
+"A background upload is already in progress. Kindly wait for it to finish "
+"before uploading new changes"
+msgstr ""
+
 msgid "I would like someone to review my edits."
 msgstr ""
 
@@ -9967,6 +9978,9 @@ msgstr ""
 msgid "Save Layer"
 msgstr ""
 
+msgid "Trying to set a read only data layer as edit layer"
+msgstr ""
+
 msgid "{0} note"
 msgid_plural "{0} notes"
 msgstr[0] ""
@@ -10797,11 +10811,6 @@ msgstr ""
 msgid "Failed to parse Mappaint styles from ''{0}''. Error was: {1}"
 msgstr ""
 
-msgid ""
-"Detected deprecated ''{0}'' in ''{1}'' which will be removed shortly. Use "
-"''{2}'' instead."
-msgstr ""
-
 msgid "Failed to locate image ''{0}''"
 msgstr ""
 
@@ -11966,6 +11975,9 @@ msgstr ""
 msgid "Show object ID in selection lists"
 msgstr ""
 
+msgid "Show node coordinates in selection lists"
+msgstr ""
+
 msgid "Show localized name in selection lists"
 msgstr ""
 
@@ -12722,9 +12734,6 @@ msgstr ""
 msgid "UTM"
 msgstr ""
 
-msgid "UTM Zone"
-msgstr ""
-
 msgid "North"
 msgstr ""
 
@@ -13192,9 +13201,6 @@ msgstr ""
 msgid "Error parsing {0}: "
 msgstr ""
 
-msgid "Presets"
-msgstr ""
-
 msgid "Search for objects by preset..."
 msgstr ""
 
@@ -15736,6 +15742,18 @@ msgstr ""
 msgid "korean"
 msgstr ""
 
+msgid "donut"
+msgstr ""
+
+msgid "mediterranean"
+msgstr ""
+
+msgid "friture"
+msgstr ""
+
+msgid "crepe"
+msgstr ""
+
 msgid "Internet access"
 msgstr ""
 
@@ -18578,7 +18596,16 @@ msgstr ""
 msgid "Tents allowed"
 msgstr ""
 
-msgid "Camping Site"
+msgid "Campsite"
+msgstr ""
+
+msgid "Caravans allowed"
+msgstr ""
+
+msgid "Backcountry"
+msgstr ""
+
+msgid "Group only access"
 msgstr ""
 
 msgid "Food+Drinks"
@@ -23407,6 +23434,14 @@ msgid ""
 "resolution or better, and refreshed more frequently with ongoing updates."
 msgstr ""
 
+msgid "DigitalGlobe Premium Imagery Vintage"
+msgstr ""
+
+msgid ""
+"Imagery boundaries and capture dates. Labels appear at zoom level 14 and "
+"higher."
+msgstr ""
+
 msgid "DigitalGlobe Standard Imagery"
 msgstr ""
 
@@ -23416,6 +23451,9 @@ msgid ""
 "Landsat. Average age is 2.31 years, with some areas updated 2x per year."
 msgstr ""
 
+msgid "DigitalGlobe Standard Imagery Vintage"
+msgstr ""
+
 msgid "Esri World Imagery"
 msgstr ""
 
@@ -23479,6 +23517,12 @@ msgstr ""
 msgid "Strava cycling and running heatmap"
 msgstr ""
 
+msgid "Strava water sports heatmap"
+msgstr ""
+
+msgid "Strava winter sports heatmap"
+msgstr ""
+
 msgid "Locator Overlay"
 msgstr ""
 
@@ -23883,6 +23927,9 @@ msgstr ""
 msgid "SPW(allonie) most recent aerial imagery"
 msgstr ""
 
+msgid "SPW(allonie) 2016 aerial imagery"
+msgstr ""
+
 msgid "SPW(allonie) 2015 aerial imagery"
 msgstr ""
 
@@ -23928,6 +23975,14 @@ msgstr ""
 msgid "Addresses data from IBGE"
 msgstr ""
 
+msgid "Street names IBGE Salvador-BA"
+msgstr ""
+
+msgid ""
+"Streets geometry and names of Salvador, Bahia. Source: Faces de Logradouro - "
+"IBGE."
+msgstr ""
+
 msgid "Rio Mosaic 2013"
 msgstr ""
 
@@ -24658,6 +24713,9 @@ msgstr ""
 msgid "Japan GSI ortho Imagery"
 msgstr ""
 
+msgid "Japan GSI Standard Map"
+msgstr ""
+
 msgid "imagico.de OSM images for mapping: Aral Sea (low water level)"
 msgstr ""
 
@@ -24687,7 +24745,7 @@ msgstr ""
 msgid "20cm ortho - Latvia - Coastline"
 msgstr ""
 
-msgid "1.cikla ortofotokarte - Latvia"
+msgid "Orthophoto 1st cycle (1994-1999) - Latvia"
 msgstr ""
 
 msgid "ORT10LT (Lithuania)"
@@ -24696,6 +24754,9 @@ msgstr ""
 msgid "geoportail.lu all layers"
 msgstr ""
 
+msgid "geoportail.lu ortho latest"
+msgstr ""
+
 msgid "geoportail.lu ortho 2016"
 msgstr ""
 
@@ -26186,6 +26247,9 @@ msgstr ""
 msgid "{0} on a node. Should be used on a way."
 msgstr ""
 
+msgid "{0} on a node. Should be used on a way or relation."
+msgstr ""
+
 msgid "{0} on a node. Should be drawn as an area."
 msgstr ""
 
@@ -26413,6 +26477,9 @@ msgstr ""
 msgid "Nodes duplicating parent way tags"
 msgstr ""
 
+msgid "{0} together with {1} and {2}. Remove {0}."
+msgstr ""
+
 msgid ""
 "wikipedia tag has no language given, use ''wikipedia''=''language:page "
 "title''"
@@ -27177,6 +27244,21 @@ msgstr ""
 msgid "Importing..."
 msgstr ""
 
+msgid "Shape is started incorrectly"
+msgstr ""
+
+msgid "Can''t load SVG diagram"
+msgstr ""
+
+msgid "Can''t find root SVG element"
+msgstr ""
+
+msgid "Import primitives"
+msgstr ""
+
+msgid "Cannot find configuration file!"
+msgstr ""
+
 msgid "DXF files [ImportDxf plugin] (*.dxf)"
 msgstr ""
 
@@ -27816,6 +27898,9 @@ msgstr ""
 msgid "Download mode"
 msgstr ""
 
+msgid "Number of images to be pre-fetched (forwards and backwards)"
+msgstr ""
+
 msgid "You are logged in as ''{0}''."
 msgstr ""
 
@@ -28026,8 +28111,17 @@ msgid "only when manually requested"
 msgstr ""
 
 msgid ""
-"The downloaded OSM area is too big. Download mode has been changed to OSM "
-"area until the layer is restarted."
+"The Mapillary layer has stopped downloading images, because the requested "
+"area is too big!"
+msgstr ""
+
+msgid ""
+"To solve this problem, you could zoom in and load a smaller area of the map."
+msgstr ""
+
+msgid ""
+"To solve this problem, you could switch to download mode ''{0}'' and load "
+"Mapillary images for a smaller portion of the map."
 msgstr ""
 
 msgid "Downloading"
@@ -31339,19 +31433,6 @@ msgstr ""
 msgid "Merge Overlap (combine)"
 msgstr ""
 
-msgid ""
-"<html>A role based relation membership was copied to all new ways.<br>You "
-"should verify this and correct it when necessary.</html>"
-msgstr ""
-
-msgid ""
-"<html>A relation membership was copied to all new ways.<br>You should verify "
-"this and correct it when necessary.</html>"
-msgstr ""
-
-msgid "Split way"
-msgstr ""
-
 msgid "Michigan Left"
 msgstr ""
 
@@ -32806,254 +32887,254 @@ msgstr ""
 msgid "PT: Route passes a oneway road in the wrong direction"
 msgstr ""
 
-msgid "moved"
+msgid "Create Stops from GTFS ..."
 msgstr ""
 
-msgid "rail"
+msgid "Create Stops from a GTFS file"
 msgstr ""
 
-msgid "Can''t parse a time from this string."
+msgid "Select GTFS file (stops.txt)"
 msgstr ""
 
-msgid "Invalid value"
+msgid "File \"{0}\" does not exist"
 msgstr ""
 
-msgid "added"
+msgid "IOException \"{0}\" occurred"
 msgstr ""
 
-msgid "Public Transport: Enable GTFSStops"
+msgid ""
+"There exists no dataset. Try to download data from the server or open an OSM "
+"file."
 msgstr ""
 
-msgid "Public Transport: Catch GTFS stops"
+msgid "No data found"
 msgstr ""
 
-msgid "skipped"
+msgid "The GTFS file was empty."
 msgstr ""
 
-msgid "Public Transport: Disable GTFS"
+msgid "[ID] {0}"
 msgstr ""
 
-msgid "Create Stops from GTFS ..."
+msgid "Route patterns ..."
 msgstr ""
 
-msgid "Create Stops from a GTFS file"
+msgid "Edit Route patterns for public transport"
 msgstr ""
 
-msgid "Select GTFS file (stops.txt)"
+msgid "Route Patterns"
 msgstr ""
 
-msgid "File \"{0}\" does not exist"
+msgid "Overview"
 msgstr ""
 
-msgid "IOException \"{0}\" occurred"
+msgid "Itinerary"
 msgstr ""
 
-msgid ""
-"There exists no dataset. Try to download data from the server or open an OSM "
-"file."
+msgid "Stops"
 msgstr ""
 
-msgid "No data found"
+msgid "Meta"
 msgstr ""
 
-msgid "The GTFS file was empty."
+msgid "Existing route patterns:"
 msgstr ""
 
-msgid "Create Stops from GTFS"
+msgid "Reflect"
 msgstr ""
 
-msgid "GTFS-Stops"
+msgid "Required tags:"
 msgstr ""
 
-msgid "Type of stops to add"
+msgid "Common tags:"
 msgstr ""
 
-msgid "Time on your GPS device"
+msgid "Additional tags:"
 msgstr ""
 
-msgid "HH:MM:SS.sss"
+msgid "Add a new Tag"
 msgstr ""
 
-msgid "Time on your stopwatch"
+msgid "Name/Id"
 msgstr ""
 
-msgid "Time window"
+msgid "Find"
 msgstr ""
 
-msgid "seconds"
+msgid "Show"
 msgstr ""
 
-msgid "Move Threshold"
+msgid "Mark"
 msgstr ""
 
-msgid "Suggest Stops"
+msgid "Ref"
 msgstr ""
 
-msgid "Find"
+msgid "Stops are possible on the"
 msgstr ""
 
-msgid "Show"
+msgid "right hand side"
 msgstr ""
 
-msgid "Mark"
+msgid "left hand side"
 msgstr ""
 
-msgid "Catch"
+msgid "Maximum distance from route"
 msgstr ""
 
-msgid "Join"
+msgid "Suggest Stops"
 msgstr ""
 
-msgid "Public Transport: Join GTFS stops"
+msgid "Create Stops from GPX ..."
 msgstr ""
 
-msgid "State"
+msgid "Create Stops from a GPX file"
 msgstr ""
 
-msgid "[incomplete]"
+msgid "Select GPX file"
 msgstr ""
 
-msgid "[empty way]"
+msgid "The GPX file contained no tracks or waypoints."
 msgstr ""
 
-msgid "[ID] {0}"
+msgid "moved"
 msgstr ""
 
-msgid "[gap]"
+msgid "added"
 msgstr ""
 
-msgid "Route patterns ..."
+msgid "Public Transport: Enable GTFSStops"
 msgstr ""
 
-msgid "Edit Route patterns for public transport"
+msgid "Public Transport: Catch GTFS stops"
 msgstr ""
 
-msgid "Route Patterns"
+msgid "skipped"
 msgstr ""
 
-msgid "Overview"
+msgid "Public Transport: Disable GTFS"
 msgstr ""
 
-msgid "Itinerary"
+msgid "Public Transport: Join GTFS stops"
 msgstr ""
 
-msgid "Stops"
+msgid "Public Transport: Change stop type"
 msgstr ""
 
-msgid "Meta"
+msgid "Public Transport: Add track stop"
 msgstr ""
 
-msgid "Existing route patterns:"
+msgid "Public Transport: Delete track stop"
 msgstr ""
 
-msgid "Reflect"
+msgid "Public Transport: Detach track stop list"
 msgstr ""
 
-msgid "Required tags:"
+msgid "Public Transport: Edit track stop list"
 msgstr ""
 
-msgid "Common tags:"
+msgid "Public Transport: Relocate nodes in track stoplist"
 msgstr ""
 
-msgid "Additional tags:"
+msgid "Public Transport: sort track stop list"
 msgstr ""
 
-msgid "Add a new Tag"
+msgid "Public Transport: Suggest stops"
 msgstr ""
 
-msgid "Name/Id"
+msgid "Public Transport: Detach waypoints"
 msgstr ""
 
-msgid "Ref"
+msgid "Public Transport: Disable waypoints"
 msgstr ""
 
-msgid "Stops are possible on the"
+msgid "Public Transport: Enable waypoints"
 msgstr ""
 
-msgid "right hand side"
+msgid "Public Transport: Edit waypoint name"
 msgstr ""
 
-msgid "left hand side"
+msgid "rail"
 msgstr ""
 
-msgid "Maximum distance from route"
+msgid "Can''t parse a time from this string."
 msgstr ""
 
-msgid " [ID] {0}"
+msgid "Invalid value"
 msgstr ""
 
-msgid "Public Transport: Change stop type"
+msgid "Create Stops from GTFS"
 msgstr ""
 
-msgid "Create Stops from GPX ..."
+msgid "GTFS-Stops"
 msgstr ""
 
-msgid "Create Stops from a GPX file"
+msgid "Type of stops to add"
 msgstr ""
 
-msgid "Select GPX file"
+msgid "Time on your GPS device"
 msgstr ""
 
-msgid "The GPX file contained no tracks or waypoints."
+msgid "HH:MM:SS.sss"
 msgstr ""
 
-msgid "Create Stops from GPX"
+msgid "Time on your stopwatch"
 msgstr ""
 
-msgid "Tracks in this GPX file:"
+msgid "Time window"
 msgstr ""
 
-msgid "Detach"
+msgid "seconds"
 msgstr ""
 
-msgid "implicit"
+msgid "Move Threshold"
 msgstr ""
 
-msgid ""
-"The GPX file doesn''t contain valid trackpoints. Please use a GPX file that "
-"has trackpoints."
+msgid "Catch"
 msgstr ""
 
-msgid "GPX File Trouble"
+msgid "Join"
 msgstr ""
 
-msgid "unnamed"
+msgid "Create Stops from GPX"
 msgstr ""
 
-msgid "Public Transport: Add track stop"
+msgid "Tracks in this GPX file:"
 msgstr ""
 
-msgid "Public Transport: Delete track stop"
+msgid "Detach"
 msgstr ""
 
-msgid "Public Transport: Detach track stop list"
+msgid "implicit"
 msgstr ""
 
-msgid "Public Transport: Edit track stop list"
+msgid "State"
 msgstr ""
 
-msgid "Public Transport: Relocate nodes in track stoplist"
+msgid "[incomplete]"
 msgstr ""
 
-msgid "Public Transport: sort track stop list"
+msgid "[empty way]"
 msgstr ""
 
-msgid "Public Transport: Suggest stops"
+msgid "[gap]"
 msgstr ""
 
 msgid "Stopname"
 msgstr ""
 
-msgid "Public Transport: Detach waypoints"
+msgid " [ID] {0}"
 msgstr ""
 
-msgid "Public Transport: Disable waypoints"
+msgid ""
+"The GPX file doesn''t contain valid trackpoints. Please use a GPX file that "
+"has trackpoints."
 msgstr ""
 
-msgid "Public Transport: Enable waypoints"
+msgid "GPX File Trouble"
 msgstr ""
 
-msgid "Public Transport: Edit waypoint name"
+msgid "unnamed"
 msgstr ""
 
 msgid "Distance between stops"
@@ -33782,6 +33863,9 @@ msgstr ""
 msgid "JOSM Tag Editor Plugin"
 msgstr ""
 
+msgid "Presets"
+msgstr ""
+
 msgid "Abort tag editing and close dialog"
 msgstr ""
 
@@ -35707,6 +35791,26 @@ msgid_plural "Overwrite ''{0}'' tags {1} from {2} with new value ''{3}''?"
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Download from Sophox API"
+msgstr ""
+
+msgid ""
+"Find places of education at least 2km, and at most 3km from the center of "
+"the selection"
+msgstr ""
+
+msgid "Show/hide Sophox snippet list"
+msgstr ""
+
+msgid "help"
+msgstr ""
+
+msgid "Server: "
+msgstr ""
+
+msgid "Wikidata+OSM server"
+msgstr ""
+
 msgid "Search Wikidata items"
 msgstr ""
 
@@ -35780,26 +35884,6 @@ msgid ""
 "objects"
 msgstr ""
 
-msgid "Download from Wikosm API"
-msgstr ""
-
-msgid ""
-"Find places of education at least 2km, and at most 3km from the center of "
-"the selection"
-msgstr ""
-
-msgid "Show/hide Wikosm snippet list"
-msgstr ""
-
-msgid "help"
-msgstr ""
-
-msgid "Server: "
-msgstr ""
-
-msgid "Wikidata+OSM server"
-msgstr ""
-
 msgid "The Ultimate WMS Super-speed Turbo Challenge II"
 msgstr ""
 
diff --git a/i18n/po/fi.po b/i18n/po/fi.po
index 138cdf5..6081f06 100644
--- a/i18n/po/fi.po
+++ b/i18n/po/fi.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: josm\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2017-10-30 03:38+0100\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"
 "Language-Team: Finnish <fi at li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Launchpad-Export-Date: 2017-10-30 04:42+0000\n"
-"X-Generator: Launchpad (build 18493)\n"
+"X-Launchpad-Export-Date: 2017-11-26 04:43+0000\n"
+"X-Generator: Launchpad (build 18509)\n"
 "Language: fi\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -447,14 +447,17 @@ msgstr ""
 msgid "Delete the active layer. Does not delete the associated file."
 msgstr ""
 
-msgid "Toggle dialogs panel"
-msgstr "Näytä paneelit"
+msgid "Dialogs panel"
+msgstr ""
 
 msgid "Toggle dialogs panel, maximize mapview"
 msgstr ""
 "Näytä tai piilota oikean reunan muokkauspaneelit karttanäkymän "
 "maksimoimiseksi"
 
+msgid "Toggle dialogs panel"
+msgstr "Näytä paneelit"
+
 msgid "Distribute Nodes"
 msgstr "Aseta pisteet tasavälein"
 
@@ -6848,6 +6851,9 @@ msgstr "Koordinaatit: "
 msgid "Coordinates (projected): "
 msgstr "Koordinatit (projisoidut): "
 
+msgid "UTM Zone"
+msgstr "UTM-alue"
+
 msgid "Part of: "
 msgstr "Osa objekteja: "
 
@@ -9314,6 +9320,11 @@ msgstr ""
 msgid "Check \"Save\" to save the layer to the file specified on the left."
 msgstr ""
 
+msgid ""
+"A background upload is already in progress. Kindly wait for it to finish "
+"before uploading new changes"
+msgstr ""
+
 msgid "I would like someone to review my edits."
 msgstr ""
 
@@ -10535,6 +10546,9 @@ msgstr ""
 msgid "Save Layer"
 msgstr "Tallenna kerros"
 
+msgid "Trying to set a read only data layer as edit layer"
+msgstr ""
+
 msgid "{0} note"
 msgid_plural "{0} notes"
 msgstr[0] ""
@@ -11380,11 +11394,6 @@ msgstr ""
 msgid "Failed to parse Mappaint styles from ''{0}''. Error was: {1}"
 msgstr ""
 
-msgid ""
-"Detected deprecated ''{0}'' in ''{1}'' which will be removed shortly. Use "
-"''{2}'' instead."
-msgstr ""
-
 msgid "Failed to locate image ''{0}''"
 msgstr ""
 
@@ -12598,6 +12607,9 @@ msgstr "Näytä käynnistysruutu käynnistyksessä"
 msgid "Show object ID in selection lists"
 msgstr "Näytä objektitunniste valintalistoissa"
 
+msgid "Show node coordinates in selection lists"
+msgstr ""
+
 msgid "Show localized name in selection lists"
 msgstr ""
 
@@ -13385,9 +13397,6 @@ msgstr "UTM-karttajärjestelmä"
 msgid "UTM"
 msgstr "UTM"
 
-msgid "UTM Zone"
-msgstr "UTM-alue"
-
 msgid "North"
 msgstr "Pohjoinen"
 
@@ -13880,9 +13889,6 @@ msgstr ""
 msgid "Error parsing {0}: "
 msgstr "Virhe käsiteltäessä {0}: "
 
-msgid "Presets"
-msgstr "Esivalinnat"
-
 msgid "Search for objects by preset..."
 msgstr ""
 
@@ -16528,6 +16534,18 @@ msgstr ""
 msgid "korean"
 msgstr ""
 
+msgid "donut"
+msgstr ""
+
+msgid "mediterranean"
+msgstr ""
+
+msgid "friture"
+msgstr ""
+
+msgid "crepe"
+msgstr ""
+
 msgid "Internet access"
 msgstr ""
 
@@ -19372,8 +19390,17 @@ msgstr ""
 msgid "Tents allowed"
 msgstr ""
 
-msgid "Camping Site"
-msgstr "Leirintäalue"
+msgid "Campsite"
+msgstr ""
+
+msgid "Caravans allowed"
+msgstr ""
+
+msgid "Backcountry"
+msgstr ""
+
+msgid "Group only access"
+msgstr ""
 
 msgid "Food+Drinks"
 msgstr "Ruoka ja juoma"
@@ -24202,6 +24229,14 @@ msgid ""
 "resolution or better, and refreshed more frequently with ongoing updates."
 msgstr ""
 
+msgid "DigitalGlobe Premium Imagery Vintage"
+msgstr ""
+
+msgid ""
+"Imagery boundaries and capture dates. Labels appear at zoom level 14 and "
+"higher."
+msgstr ""
+
 msgid "DigitalGlobe Standard Imagery"
 msgstr ""
 
@@ -24211,6 +24246,9 @@ msgid ""
 "Landsat. Average age is 2.31 years, with some areas updated 2x per year."
 msgstr ""
 
+msgid "DigitalGlobe Standard Imagery Vintage"
+msgstr ""
+
 msgid "Esri World Imagery"
 msgstr ""
 
@@ -24274,6 +24312,12 @@ msgstr ""
 msgid "Strava cycling and running heatmap"
 msgstr ""
 
+msgid "Strava water sports heatmap"
+msgstr ""
+
+msgid "Strava winter sports heatmap"
+msgstr ""
+
 msgid "Locator Overlay"
 msgstr ""
 
@@ -24678,6 +24722,9 @@ msgstr ""
 msgid "SPW(allonie) most recent aerial imagery"
 msgstr ""
 
+msgid "SPW(allonie) 2016 aerial imagery"
+msgstr ""
+
 msgid "SPW(allonie) 2015 aerial imagery"
 msgstr ""
 
@@ -24723,6 +24770,14 @@ msgstr ""
 msgid "Addresses data from IBGE"
 msgstr ""
 
+msgid "Street names IBGE Salvador-BA"
+msgstr ""
+
+msgid ""
+"Streets geometry and names of Salvador, Bahia. Source: Faces de Logradouro - "
+"IBGE."
+msgstr ""
+
 msgid "Rio Mosaic 2013"
 msgstr ""
 
@@ -25453,6 +25508,9 @@ msgstr ""
 msgid "Japan GSI ortho Imagery"
 msgstr ""
 
+msgid "Japan GSI Standard Map"
+msgstr ""
+
 msgid "imagico.de OSM images for mapping: Aral Sea (low water level)"
 msgstr ""
 
@@ -25482,7 +25540,7 @@ msgstr ""
 msgid "20cm ortho - Latvia - Coastline"
 msgstr ""
 
-msgid "1.cikla ortofotokarte - Latvia"
+msgid "Orthophoto 1st cycle (1994-1999) - Latvia"
 msgstr ""
 
 msgid "ORT10LT (Lithuania)"
@@ -25491,6 +25549,9 @@ msgstr "ORT10LT (Liettua)"
 msgid "geoportail.lu all layers"
 msgstr ""
 
+msgid "geoportail.lu ortho latest"
+msgstr ""
+
 msgid "geoportail.lu ortho 2016"
 msgstr ""
 
@@ -26989,6 +27050,9 @@ msgstr ""
 msgid "{0} on a node. Should be used on a way."
 msgstr ""
 
+msgid "{0} on a node. Should be used on a way or relation."
+msgstr ""
+
 msgid "{0} on a node. Should be drawn as an area."
 msgstr ""
 
@@ -27220,6 +27284,9 @@ msgstr ""
 msgid "Nodes duplicating parent way tags"
 msgstr ""
 
+msgid "{0} together with {1} and {2}. Remove {0}."
+msgstr ""
+
 msgid ""
 "wikipedia tag has no language given, use ''wikipedia''=''language:page "
 "title''"
@@ -28032,6 +28099,21 @@ msgstr "Lähettää jäljet openstreetmap.org:iin"
 msgid "Importing..."
 msgstr ""
 
+msgid "Shape is started incorrectly"
+msgstr ""
+
+msgid "Can''t load SVG diagram"
+msgstr ""
+
+msgid "Can''t find root SVG element"
+msgstr ""
+
+msgid "Import primitives"
+msgstr ""
+
+msgid "Cannot find configuration file!"
+msgstr ""
+
 msgid "DXF files [ImportDxf plugin] (*.dxf)"
 msgstr ""
 
@@ -28673,6 +28755,9 @@ msgstr ""
 msgid "Download mode"
 msgstr ""
 
+msgid "Number of images to be pre-fetched (forwards and backwards)"
+msgstr ""
+
 msgid "You are logged in as ''{0}''."
 msgstr ""
 
@@ -28883,8 +28968,17 @@ msgid "only when manually requested"
 msgstr ""
 
 msgid ""
-"The downloaded OSM area is too big. Download mode has been changed to OSM "
-"area until the layer is restarted."
+"The Mapillary layer has stopped downloading images, because the requested "
+"area is too big!"
+msgstr ""
+
+msgid ""
+"To solve this problem, you could zoom in and load a smaller area of the map."
+msgstr ""
+
+msgid ""
+"To solve this problem, you could switch to download mode ''{0}'' and load "
+"Mapillary images for a smaller portion of the map."
 msgstr ""
 
 msgid "Downloading"
@@ -32242,23 +32336,6 @@ msgstr ""
 msgid "Merge Overlap (combine)"
 msgstr ""
 
-msgid ""
-"<html>A role based relation membership was copied to all new ways.<br>You "
-"should verify this and correct it when necessary.</html>"
-msgstr ""
-"<html>Roolin sisältävä relaatiojäsenyys kopioitiin kaikkiin uusin "
-"polkuihin.<br>Sinun tulisi tarkistaa, että jäsenyydet ovat oikein.</html>"
-
-msgid ""
-"<html>A relation membership was copied to all new ways.<br>You should verify "
-"this and correct it when necessary.</html>"
-msgstr ""
-"<html>Relaatiojäsenyydet kopioitiin kaikkiin uusiin polkuihin.<br>Sinun "
-"tulisi tarkistaa, että jäsenyydet ovat oikein.</html>"
-
-msgid "Split way"
-msgstr ""
-
 msgid "Michigan Left"
 msgstr ""
 
@@ -33728,33 +33805,6 @@ msgstr ""
 msgid "PT: Route passes a oneway road in the wrong direction"
 msgstr ""
 
-msgid "moved"
-msgstr ""
-
-msgid "rail"
-msgstr ""
-
-msgid "Can''t parse a time from this string."
-msgstr ""
-
-msgid "Invalid value"
-msgstr ""
-
-msgid "added"
-msgstr ""
-
-msgid "Public Transport: Enable GTFSStops"
-msgstr ""
-
-msgid "Public Transport: Catch GTFS stops"
-msgstr ""
-
-msgid "skipped"
-msgstr ""
-
-msgid "Public Transport: Disable GTFS"
-msgstr ""
-
 msgid "Create Stops from GTFS ..."
 msgstr ""
 
@@ -33781,34 +33831,49 @@ msgstr ""
 msgid "The GTFS file was empty."
 msgstr "GTFS-tiedosto oli tyhjä."
 
-msgid "Create Stops from GTFS"
+msgid "[ID] {0}"
 msgstr ""
 
-msgid "GTFS-Stops"
+msgid "Route patterns ..."
 msgstr ""
 
-msgid "Type of stops to add"
+msgid "Edit Route patterns for public transport"
+msgstr "Muokkaa julkisen liikenteen reittihakulausekkeita"
+
+msgid "Route Patterns"
 msgstr ""
 
-msgid "Time on your GPS device"
+msgid "Overview"
 msgstr ""
 
-msgid "HH:MM:SS.sss"
+msgid "Itinerary"
 msgstr ""
 
-msgid "Time on your stopwatch"
+msgid "Stops"
 msgstr ""
 
-msgid "Time window"
+msgid "Meta"
 msgstr ""
 
-msgid "seconds"
+msgid "Existing route patterns:"
 msgstr ""
 
-msgid "Move Threshold"
+msgid "Reflect"
 msgstr ""
 
-msgid "Suggest Stops"
+msgid "Required tags:"
+msgstr ""
+
+msgid "Common tags:"
+msgstr ""
+
+msgid "Additional tags:"
+msgstr ""
+
+msgid "Add a new Tag"
+msgstr ""
+
+msgid "Name/Id"
 msgstr ""
 
 msgid "Find"
@@ -33820,165 +33885,177 @@ msgstr "Näytä"
 msgid "Mark"
 msgstr ""
 
-msgid "Catch"
+msgid "Ref"
 msgstr ""
 
-msgid "Join"
+msgid "Stops are possible on the"
 msgstr ""
 
-msgid "Public Transport: Join GTFS stops"
+msgid "right hand side"
 msgstr ""
 
-msgid "State"
-msgstr "Osavaltio"
+msgid "left hand side"
+msgstr ""
 
-msgid "[incomplete]"
+msgid "Maximum distance from route"
 msgstr ""
 
-msgid "[empty way]"
+msgid "Suggest Stops"
 msgstr ""
 
-msgid "[ID] {0}"
+msgid "Create Stops from GPX ..."
 msgstr ""
 
-msgid "[gap]"
+msgid "Create Stops from a GPX file"
 msgstr ""
 
-msgid "Route patterns ..."
+msgid "Select GPX file"
+msgstr "Valitse GPX-tiedosto"
+
+msgid "The GPX file contained no tracks or waypoints."
+msgstr "GPX-tiedostosta ei löytynyt yhtään jälkeä eikä reittipistettä."
+
+msgid "moved"
 msgstr ""
 
-msgid "Edit Route patterns for public transport"
-msgstr "Muokkaa julkisen liikenteen reittihakulausekkeita"
+msgid "added"
+msgstr ""
 
-msgid "Route Patterns"
+msgid "Public Transport: Enable GTFSStops"
 msgstr ""
 
-msgid "Overview"
+msgid "Public Transport: Catch GTFS stops"
 msgstr ""
 
-msgid "Itinerary"
+msgid "skipped"
 msgstr ""
 
-msgid "Stops"
+msgid "Public Transport: Disable GTFS"
 msgstr ""
 
-msgid "Meta"
+msgid "Public Transport: Join GTFS stops"
 msgstr ""
 
-msgid "Existing route patterns:"
+msgid "Public Transport: Change stop type"
 msgstr ""
 
-msgid "Reflect"
+msgid "Public Transport: Add track stop"
 msgstr ""
 
-msgid "Required tags:"
+msgid "Public Transport: Delete track stop"
 msgstr ""
 
-msgid "Common tags:"
+msgid "Public Transport: Detach track stop list"
 msgstr ""
 
-msgid "Additional tags:"
+msgid "Public Transport: Edit track stop list"
 msgstr ""
 
-msgid "Add a new Tag"
+msgid "Public Transport: Relocate nodes in track stoplist"
 msgstr ""
 
-msgid "Name/Id"
+msgid "Public Transport: sort track stop list"
 msgstr ""
 
-msgid "Ref"
+msgid "Public Transport: Suggest stops"
 msgstr ""
 
-msgid "Stops are possible on the"
+msgid "Public Transport: Detach waypoints"
 msgstr ""
 
-msgid "right hand side"
+msgid "Public Transport: Disable waypoints"
 msgstr ""
 
-msgid "left hand side"
+msgid "Public Transport: Enable waypoints"
 msgstr ""
 
-msgid "Maximum distance from route"
+msgid "Public Transport: Edit waypoint name"
 msgstr ""
 
-msgid " [ID] {0}"
+msgid "rail"
 msgstr ""
 
-msgid "Public Transport: Change stop type"
+msgid "Can''t parse a time from this string."
 msgstr ""
 
-msgid "Create Stops from GPX ..."
+msgid "Invalid value"
 msgstr ""
 
-msgid "Create Stops from a GPX file"
+msgid "Create Stops from GTFS"
 msgstr ""
 
-msgid "Select GPX file"
-msgstr "Valitse GPX-tiedosto"
+msgid "GTFS-Stops"
+msgstr ""
 
-msgid "The GPX file contained no tracks or waypoints."
-msgstr "GPX-tiedostosta ei löytynyt yhtään jälkeä eikä reittipistettä."
+msgid "Type of stops to add"
+msgstr ""
 
-msgid "Create Stops from GPX"
+msgid "Time on your GPS device"
 msgstr ""
 
-msgid "Tracks in this GPX file:"
-msgstr "GPX-tiedostosta löytyvät jäljet:"
+msgid "HH:MM:SS.sss"
+msgstr ""
 
-msgid "Detach"
+msgid "Time on your stopwatch"
 msgstr ""
 
-msgid "implicit"
+msgid "Time window"
 msgstr ""
 
-msgid ""
-"The GPX file doesn''t contain valid trackpoints. Please use a GPX file that "
-"has trackpoints."
+msgid "seconds"
 msgstr ""
-"GPX-tiedostossa ei ole kelvollisia jälkipisteitä. Valitse GPX-tiedosto jossa "
-"on jälkipisteitä."
 
-msgid "GPX File Trouble"
+msgid "Move Threshold"
 msgstr ""
 
-msgid "unnamed"
-msgstr "nimetön"
+msgid "Catch"
+msgstr ""
 
-msgid "Public Transport: Add track stop"
+msgid "Join"
 msgstr ""
 
-msgid "Public Transport: Delete track stop"
+msgid "Create Stops from GPX"
 msgstr ""
 
-msgid "Public Transport: Detach track stop list"
+msgid "Tracks in this GPX file:"
+msgstr "GPX-tiedostosta löytyvät jäljet:"
+
+msgid "Detach"
 msgstr ""
 
-msgid "Public Transport: Edit track stop list"
+msgid "implicit"
 msgstr ""
 
-msgid "Public Transport: Relocate nodes in track stoplist"
+msgid "State"
+msgstr "Osavaltio"
+
+msgid "[incomplete]"
 msgstr ""
 
-msgid "Public Transport: sort track stop list"
+msgid "[empty way]"
 msgstr ""
 
-msgid "Public Transport: Suggest stops"
+msgid "[gap]"
 msgstr ""
 
 msgid "Stopname"
 msgstr ""
 
-msgid "Public Transport: Detach waypoints"
+msgid " [ID] {0}"
 msgstr ""
 
-msgid "Public Transport: Disable waypoints"
+msgid ""
+"The GPX file doesn''t contain valid trackpoints. Please use a GPX file that "
+"has trackpoints."
 msgstr ""
+"GPX-tiedostossa ei ole kelvollisia jälkipisteitä. Valitse GPX-tiedosto jossa "
+"on jälkipisteitä."
 
-msgid "Public Transport: Enable waypoints"
+msgid "GPX File Trouble"
 msgstr ""
 
-msgid "Public Transport: Edit waypoint name"
-msgstr ""
+msgid "unnamed"
+msgstr "nimetön"
 
 msgid "Distance between stops"
 msgstr ""
@@ -34708,6 +34785,9 @@ msgstr ""
 msgid "JOSM Tag Editor Plugin"
 msgstr ""
 
+msgid "Presets"
+msgstr "Esivalinnat"
+
 msgid "Abort tag editing and close dialog"
 msgstr ""
 
@@ -36698,6 +36778,26 @@ msgid_plural "Overwrite ''{0}'' tags {1} from {2} with new value ''{3}''?"
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Download from Sophox API"
+msgstr ""
+
+msgid ""
+"Find places of education at least 2km, and at most 3km from the center of "
+"the selection"
+msgstr ""
+
+msgid "Show/hide Sophox snippet list"
+msgstr ""
+
+msgid "help"
+msgstr ""
+
+msgid "Server: "
+msgstr ""
+
+msgid "Wikidata+OSM server"
+msgstr ""
+
 msgid "Search Wikidata items"
 msgstr ""
 
@@ -36773,26 +36873,6 @@ msgstr ""
 "Lisää valittua artikkelia vastaava wikipedia -tagi valittuihin "
 "karttakohteisiin"
 
-msgid "Download from Wikosm API"
-msgstr ""
-
-msgid ""
-"Find places of education at least 2km, and at most 3km from the center of "
-"the selection"
-msgstr ""
-
-msgid "Show/hide Wikosm snippet list"
-msgstr ""
-
-msgid "help"
-msgstr ""
-
-msgid "Server: "
-msgstr ""
-
-msgid "Wikidata+OSM server"
-msgstr ""
-
 msgid "The Ultimate WMS Super-speed Turbo Challenge II"
 msgstr ""
 
diff --git a/i18n/po/fil.po b/i18n/po/fil.po
index 26f8be6..a1354d8 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-10-30 03:38+0100\n"
+"POT-Creation-Date: 2017-11-26 00:06+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-10-30 05:10+0000\n"
-"X-Generator: Launchpad (build 18493)\n"
+"X-Launchpad-Export-Date: 2017-11-26 05:13+0000\n"
+"X-Generator: Launchpad (build 18509)\n"
 "Language: fil\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -421,12 +421,15 @@ msgstr ""
 msgid "Delete the active layer. Does not delete the associated file."
 msgstr ""
 
-msgid "Toggle dialogs panel"
+msgid "Dialogs panel"
 msgstr ""
 
 msgid "Toggle dialogs panel, maximize mapview"
 msgstr ""
 
+msgid "Toggle dialogs panel"
+msgstr ""
+
 msgid "Distribute Nodes"
 msgstr ""
 
@@ -6488,6 +6491,9 @@ msgstr ""
 msgid "Coordinates (projected): "
 msgstr ""
 
+msgid "UTM Zone"
+msgstr ""
+
 msgid "Part of: "
 msgstr ""
 
@@ -8786,6 +8792,11 @@ msgstr ""
 msgid "Check \"Save\" to save the layer to the file specified on the left."
 msgstr ""
 
+msgid ""
+"A background upload is already in progress. Kindly wait for it to finish "
+"before uploading new changes"
+msgstr ""
+
 msgid "I would like someone to review my edits."
 msgstr ""
 
@@ -9894,6 +9905,9 @@ msgstr ""
 msgid "Save Layer"
 msgstr ""
 
+msgid "Trying to set a read only data layer as edit layer"
+msgstr ""
+
 msgid "{0} note"
 msgid_plural "{0} notes"
 msgstr[0] ""
@@ -10724,11 +10738,6 @@ msgstr ""
 msgid "Failed to parse Mappaint styles from ''{0}''. Error was: {1}"
 msgstr ""
 
-msgid ""
-"Detected deprecated ''{0}'' in ''{1}'' which will be removed shortly. Use "
-"''{2}'' instead."
-msgstr ""
-
 msgid "Failed to locate image ''{0}''"
 msgstr ""
 
@@ -11893,6 +11902,9 @@ msgstr ""
 msgid "Show object ID in selection lists"
 msgstr ""
 
+msgid "Show node coordinates in selection lists"
+msgstr ""
+
 msgid "Show localized name in selection lists"
 msgstr ""
 
@@ -12649,9 +12661,6 @@ msgstr ""
 msgid "UTM"
 msgstr ""
 
-msgid "UTM Zone"
-msgstr ""
-
 msgid "North"
 msgstr ""
 
@@ -13119,9 +13128,6 @@ msgstr ""
 msgid "Error parsing {0}: "
 msgstr ""
 
-msgid "Presets"
-msgstr ""
-
 msgid "Search for objects by preset..."
 msgstr ""
 
@@ -15663,6 +15669,18 @@ msgstr ""
 msgid "korean"
 msgstr ""
 
+msgid "donut"
+msgstr ""
+
+msgid "mediterranean"
+msgstr ""
+
+msgid "friture"
+msgstr ""
+
+msgid "crepe"
+msgstr ""
+
 msgid "Internet access"
 msgstr ""
 
@@ -18505,7 +18523,16 @@ msgstr ""
 msgid "Tents allowed"
 msgstr ""
 
-msgid "Camping Site"
+msgid "Campsite"
+msgstr ""
+
+msgid "Caravans allowed"
+msgstr ""
+
+msgid "Backcountry"
+msgstr ""
+
+msgid "Group only access"
 msgstr ""
 
 msgid "Food+Drinks"
@@ -23334,6 +23361,14 @@ msgid ""
 "resolution or better, and refreshed more frequently with ongoing updates."
 msgstr ""
 
+msgid "DigitalGlobe Premium Imagery Vintage"
+msgstr ""
+
+msgid ""
+"Imagery boundaries and capture dates. Labels appear at zoom level 14 and "
+"higher."
+msgstr ""
+
 msgid "DigitalGlobe Standard Imagery"
 msgstr ""
 
@@ -23343,6 +23378,9 @@ msgid ""
 "Landsat. Average age is 2.31 years, with some areas updated 2x per year."
 msgstr ""
 
+msgid "DigitalGlobe Standard Imagery Vintage"
+msgstr ""
+
 msgid "Esri World Imagery"
 msgstr ""
 
@@ -23406,6 +23444,12 @@ msgstr ""
 msgid "Strava cycling and running heatmap"
 msgstr ""
 
+msgid "Strava water sports heatmap"
+msgstr ""
+
+msgid "Strava winter sports heatmap"
+msgstr ""
+
 msgid "Locator Overlay"
 msgstr ""
 
@@ -23810,6 +23854,9 @@ msgstr ""
 msgid "SPW(allonie) most recent aerial imagery"
 msgstr ""
 
+msgid "SPW(allonie) 2016 aerial imagery"
+msgstr ""
+
 msgid "SPW(allonie) 2015 aerial imagery"
 msgstr ""
 
@@ -23855,6 +23902,14 @@ msgstr ""
 msgid "Addresses data from IBGE"
 msgstr ""
 
+msgid "Street names IBGE Salvador-BA"
+msgstr ""
+
+msgid ""
+"Streets geometry and names of Salvador, Bahia. Source: Faces de Logradouro - "
+"IBGE."
+msgstr ""
+
 msgid "Rio Mosaic 2013"
 msgstr ""
 
@@ -24585,6 +24640,9 @@ msgstr ""
 msgid "Japan GSI ortho Imagery"
 msgstr ""
 
+msgid "Japan GSI Standard Map"
+msgstr ""
+
 msgid "imagico.de OSM images for mapping: Aral Sea (low water level)"
 msgstr ""
 
@@ -24614,7 +24672,7 @@ msgstr ""
 msgid "20cm ortho - Latvia - Coastline"
 msgstr ""
 
-msgid "1.cikla ortofotokarte - Latvia"
+msgid "Orthophoto 1st cycle (1994-1999) - Latvia"
 msgstr ""
 
 msgid "ORT10LT (Lithuania)"
@@ -24623,6 +24681,9 @@ msgstr ""
 msgid "geoportail.lu all layers"
 msgstr ""
 
+msgid "geoportail.lu ortho latest"
+msgstr ""
+
 msgid "geoportail.lu ortho 2016"
 msgstr ""
 
@@ -26113,6 +26174,9 @@ msgstr ""
 msgid "{0} on a node. Should be used on a way."
 msgstr ""
 
+msgid "{0} on a node. Should be used on a way or relation."
+msgstr ""
+
 msgid "{0} on a node. Should be drawn as an area."
 msgstr ""
 
@@ -26340,6 +26404,9 @@ msgstr ""
 msgid "Nodes duplicating parent way tags"
 msgstr ""
 
+msgid "{0} together with {1} and {2}. Remove {0}."
+msgstr ""
+
 msgid ""
 "wikipedia tag has no language given, use ''wikipedia''=''language:page "
 "title''"
@@ -27104,6 +27171,21 @@ msgstr ""
 msgid "Importing..."
 msgstr ""
 
+msgid "Shape is started incorrectly"
+msgstr ""
+
+msgid "Can''t load SVG diagram"
+msgstr ""
+
+msgid "Can''t find root SVG element"
+msgstr ""
+
+msgid "Import primitives"
+msgstr ""
+
+msgid "Cannot find configuration file!"
+msgstr ""
+
 msgid "DXF files [ImportDxf plugin] (*.dxf)"
 msgstr ""
 
@@ -27743,6 +27825,9 @@ msgstr ""
 msgid "Download mode"
 msgstr ""
 
+msgid "Number of images to be pre-fetched (forwards and backwards)"
+msgstr ""
+
 msgid "You are logged in as ''{0}''."
 msgstr ""
 
@@ -27953,8 +28038,17 @@ msgid "only when manually requested"
 msgstr ""
 
 msgid ""
-"The downloaded OSM area is too big. Download mode has been changed to OSM "
-"area until the layer is restarted."
+"The Mapillary layer has stopped downloading images, because the requested "
+"area is too big!"
+msgstr ""
+
+msgid ""
+"To solve this problem, you could zoom in and load a smaller area of the map."
+msgstr ""
+
+msgid ""
+"To solve this problem, you could switch to download mode ''{0}'' and load "
+"Mapillary images for a smaller portion of the map."
 msgstr ""
 
 msgid "Downloading"
@@ -31266,19 +31360,6 @@ msgstr ""
 msgid "Merge Overlap (combine)"
 msgstr ""
 
-msgid ""
-"<html>A role based relation membership was copied to all new ways.<br>You "
-"should verify this and correct it when necessary.</html>"
-msgstr ""
-
-msgid ""
-"<html>A relation membership was copied to all new ways.<br>You should verify "
-"this and correct it when necessary.</html>"
-msgstr ""
-
-msgid "Split way"
-msgstr ""
-
 msgid "Michigan Left"
 msgstr ""
 
@@ -32733,254 +32814,254 @@ msgstr ""
 msgid "PT: Route passes a oneway road in the wrong direction"
 msgstr ""
 
-msgid "moved"
+msgid "Create Stops from GTFS ..."
 msgstr ""
 
-msgid "rail"
+msgid "Create Stops from a GTFS file"
 msgstr ""
 
-msgid "Can''t parse a time from this string."
+msgid "Select GTFS file (stops.txt)"
 msgstr ""
 
-msgid "Invalid value"
+msgid "File \"{0}\" does not exist"
 msgstr ""
 
-msgid "added"
+msgid "IOException \"{0}\" occurred"
 msgstr ""
 
-msgid "Public Transport: Enable GTFSStops"
+msgid ""
+"There exists no dataset. Try to download data from the server or open an OSM "
+"file."
 msgstr ""
 
-msgid "Public Transport: Catch GTFS stops"
+msgid "No data found"
 msgstr ""
 
-msgid "skipped"
+msgid "The GTFS file was empty."
 msgstr ""
 
-msgid "Public Transport: Disable GTFS"
+msgid "[ID] {0}"
 msgstr ""
 
-msgid "Create Stops from GTFS ..."
+msgid "Route patterns ..."
 msgstr ""
 
-msgid "Create Stops from a GTFS file"
+msgid "Edit Route patterns for public transport"
 msgstr ""
 
-msgid "Select GTFS file (stops.txt)"
+msgid "Route Patterns"
 msgstr ""
 
-msgid "File \"{0}\" does not exist"
+msgid "Overview"
 msgstr ""
 
-msgid "IOException \"{0}\" occurred"
+msgid "Itinerary"
 msgstr ""
 
-msgid ""
-"There exists no dataset. Try to download data from the server or open an OSM "
-"file."
+msgid "Stops"
 msgstr ""
 
-msgid "No data found"
+msgid "Meta"
 msgstr ""
 
-msgid "The GTFS file was empty."
+msgid "Existing route patterns:"
 msgstr ""
 
-msgid "Create Stops from GTFS"
+msgid "Reflect"
 msgstr ""
 
-msgid "GTFS-Stops"
+msgid "Required tags:"
 msgstr ""
 
-msgid "Type of stops to add"
+msgid "Common tags:"
 msgstr ""
 
-msgid "Time on your GPS device"
+msgid "Additional tags:"
 msgstr ""
 
-msgid "HH:MM:SS.sss"
+msgid "Add a new Tag"
 msgstr ""
 
-msgid "Time on your stopwatch"
+msgid "Name/Id"
 msgstr ""
 
-msgid "Time window"
+msgid "Find"
 msgstr ""
 
-msgid "seconds"
+msgid "Show"
 msgstr ""
 
-msgid "Move Threshold"
+msgid "Mark"
 msgstr ""
 
-msgid "Suggest Stops"
+msgid "Ref"
 msgstr ""
 
-msgid "Find"
+msgid "Stops are possible on the"
 msgstr ""
 
-msgid "Show"
+msgid "right hand side"
 msgstr ""
 
-msgid "Mark"
+msgid "left hand side"
 msgstr ""
 
-msgid "Catch"
+msgid "Maximum distance from route"
 msgstr ""
 
-msgid "Join"
+msgid "Suggest Stops"
 msgstr ""
 
-msgid "Public Transport: Join GTFS stops"
+msgid "Create Stops from GPX ..."
 msgstr ""
 
-msgid "State"
+msgid "Create Stops from a GPX file"
 msgstr ""
 
-msgid "[incomplete]"
+msgid "Select GPX file"
 msgstr ""
 
-msgid "[empty way]"
+msgid "The GPX file contained no tracks or waypoints."
 msgstr ""
 
-msgid "[ID] {0}"
+msgid "moved"
 msgstr ""
 
-msgid "[gap]"
+msgid "added"
 msgstr ""
 
-msgid "Route patterns ..."
+msgid "Public Transport: Enable GTFSStops"
 msgstr ""
 
-msgid "Edit Route patterns for public transport"
+msgid "Public Transport: Catch GTFS stops"
 msgstr ""
 
-msgid "Route Patterns"
+msgid "skipped"
 msgstr ""
 
-msgid "Overview"
+msgid "Public Transport: Disable GTFS"
 msgstr ""
 
-msgid "Itinerary"
+msgid "Public Transport: Join GTFS stops"
 msgstr ""
 
-msgid "Stops"
+msgid "Public Transport: Change stop type"
 msgstr ""
 
-msgid "Meta"
+msgid "Public Transport: Add track stop"
 msgstr ""
 
-msgid "Existing route patterns:"
+msgid "Public Transport: Delete track stop"
 msgstr ""
 
-msgid "Reflect"
+msgid "Public Transport: Detach track stop list"
 msgstr ""
 
-msgid "Required tags:"
+msgid "Public Transport: Edit track stop list"
 msgstr ""
 
-msgid "Common tags:"
+msgid "Public Transport: Relocate nodes in track stoplist"
 msgstr ""
 
-msgid "Additional tags:"
+msgid "Public Transport: sort track stop list"
 msgstr ""
 
-msgid "Add a new Tag"
+msgid "Public Transport: Suggest stops"
 msgstr ""
 
-msgid "Name/Id"
+msgid "Public Transport: Detach waypoints"
 msgstr ""
 
-msgid "Ref"
+msgid "Public Transport: Disable waypoints"
 msgstr ""
 
-msgid "Stops are possible on the"
+msgid "Public Transport: Enable waypoints"
 msgstr ""
 
-msgid "right hand side"
+msgid "Public Transport: Edit waypoint name"
 msgstr ""
 
-msgid "left hand side"
+msgid "rail"
 msgstr ""
 
-msgid "Maximum distance from route"
+msgid "Can''t parse a time from this string."
 msgstr ""
 
-msgid " [ID] {0}"
+msgid "Invalid value"
 msgstr ""
 
-msgid "Public Transport: Change stop type"
+msgid "Create Stops from GTFS"
 msgstr ""
 
-msgid "Create Stops from GPX ..."
+msgid "GTFS-Stops"
 msgstr ""
 
-msgid "Create Stops from a GPX file"
+msgid "Type of stops to add"
 msgstr ""
 
-msgid "Select GPX file"
+msgid "Time on your GPS device"
 msgstr ""
 
-msgid "The GPX file contained no tracks or waypoints."
+msgid "HH:MM:SS.sss"
 msgstr ""
 
-msgid "Create Stops from GPX"
+msgid "Time on your stopwatch"
 msgstr ""
 
-msgid "Tracks in this GPX file:"
+msgid "Time window"
 msgstr ""
 
-msgid "Detach"
+msgid "seconds"
 msgstr ""
 
-msgid "implicit"
+msgid "Move Threshold"
 msgstr ""
 
-msgid ""
-"The GPX file doesn''t contain valid trackpoints. Please use a GPX file that "
-"has trackpoints."
+msgid "Catch"
 msgstr ""
 
-msgid "GPX File Trouble"
+msgid "Join"
 msgstr ""
 
-msgid "unnamed"
+msgid "Create Stops from GPX"
 msgstr ""
 
-msgid "Public Transport: Add track stop"
+msgid "Tracks in this GPX file:"
 msgstr ""
 
-msgid "Public Transport: Delete track stop"
+msgid "Detach"
 msgstr ""
 
-msgid "Public Transport: Detach track stop list"
+msgid "implicit"
 msgstr ""
 
-msgid "Public Transport: Edit track stop list"
+msgid "State"
 msgstr ""
 
-msgid "Public Transport: Relocate nodes in track stoplist"
+msgid "[incomplete]"
 msgstr ""
 
-msgid "Public Transport: sort track stop list"
+msgid "[empty way]"
 msgstr ""
 
-msgid "Public Transport: Suggest stops"
+msgid "[gap]"
 msgstr ""
 
 msgid "Stopname"
 msgstr ""
 
-msgid "Public Transport: Detach waypoints"
+msgid " [ID] {0}"
 msgstr ""
 
-msgid "Public Transport: Disable waypoints"
+msgid ""
+"The GPX file doesn''t contain valid trackpoints. Please use a GPX file that "
+"has trackpoints."
 msgstr ""
 
-msgid "Public Transport: Enable waypoints"
+msgid "GPX File Trouble"
 msgstr ""
 
-msgid "Public Transport: Edit waypoint name"
+msgid "unnamed"
 msgstr ""
 
 msgid "Distance between stops"
@@ -33709,6 +33790,9 @@ msgstr ""
 msgid "JOSM Tag Editor Plugin"
 msgstr ""
 
+msgid "Presets"
+msgstr ""
+
 msgid "Abort tag editing and close dialog"
 msgstr ""
 
@@ -35634,6 +35718,26 @@ msgid_plural "Overwrite ''{0}'' tags {1} from {2} with new value ''{3}''?"
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Download from Sophox API"
+msgstr ""
+
+msgid ""
+"Find places of education at least 2km, and at most 3km from the center of "
+"the selection"
+msgstr ""
+
+msgid "Show/hide Sophox snippet list"
+msgstr ""
+
+msgid "help"
+msgstr ""
+
+msgid "Server: "
+msgstr ""
+
+msgid "Wikidata+OSM server"
+msgstr ""
+
 msgid "Search Wikidata items"
 msgstr ""
 
@@ -35707,26 +35811,6 @@ msgid ""
 "objects"
 msgstr ""
 
-msgid "Download from Wikosm API"
-msgstr ""
-
-msgid ""
-"Find places of education at least 2km, and at most 3km from the center of "
-"the selection"
-msgstr ""
-
-msgid "Show/hide Wikosm snippet list"
-msgstr ""
-
-msgid "help"
-msgstr ""
-
-msgid "Server: "
-msgstr ""
-
-msgid "Wikidata+OSM server"
-msgstr ""
-
 msgid "The Ultimate WMS Super-speed Turbo Challenge II"
 msgstr ""
 
diff --git a/i18n/po/fo.po b/i18n/po/fo.po
index 1503869..9f07a0c 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-10-30 03:38+0100\n"
+"POT-Creation-Date: 2017-11-26 00:06+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-10-30 04:42+0000\n"
-"X-Generator: Launchpad (build 18493)\n"
+"X-Launchpad-Export-Date: 2017-11-26 04:42+0000\n"
+"X-Generator: Launchpad (build 18509)\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
 msgstr "{0}: valmøguleiki ''{1}'' er tvítýddur"
@@ -420,12 +420,15 @@ msgstr ""
 msgid "Delete the active layer. Does not delete the associated file."
 msgstr ""
 
-msgid "Toggle dialogs panel"
+msgid "Dialogs panel"
 msgstr ""
 
 msgid "Toggle dialogs panel, maximize mapview"
 msgstr ""
 
+msgid "Toggle dialogs panel"
+msgstr ""
+
 msgid "Distribute Nodes"
 msgstr ""
 
@@ -6487,6 +6490,9 @@ msgstr ""
 msgid "Coordinates (projected): "
 msgstr ""
 
+msgid "UTM Zone"
+msgstr ""
+
 msgid "Part of: "
 msgstr ""
 
@@ -8785,6 +8791,11 @@ msgstr ""
 msgid "Check \"Save\" to save the layer to the file specified on the left."
 msgstr ""
 
+msgid ""
+"A background upload is already in progress. Kindly wait for it to finish "
+"before uploading new changes"
+msgstr ""
+
 msgid "I would like someone to review my edits."
 msgstr ""
 
@@ -9893,6 +9904,9 @@ msgstr ""
 msgid "Save Layer"
 msgstr ""
 
+msgid "Trying to set a read only data layer as edit layer"
+msgstr ""
+
 msgid "{0} note"
 msgid_plural "{0} notes"
 msgstr[0] ""
@@ -10723,11 +10737,6 @@ msgstr ""
 msgid "Failed to parse Mappaint styles from ''{0}''. Error was: {1}"
 msgstr ""
 
-msgid ""
-"Detected deprecated ''{0}'' in ''{1}'' which will be removed shortly. Use "
-"''{2}'' instead."
-msgstr ""
-
 msgid "Failed to locate image ''{0}''"
 msgstr ""
 
@@ -11892,6 +11901,9 @@ msgstr ""
 msgid "Show object ID in selection lists"
 msgstr ""
 
+msgid "Show node coordinates in selection lists"
+msgstr ""
+
 msgid "Show localized name in selection lists"
 msgstr ""
 
@@ -12648,9 +12660,6 @@ msgstr ""
 msgid "UTM"
 msgstr ""
 
-msgid "UTM Zone"
-msgstr ""
-
 msgid "North"
 msgstr ""
 
@@ -13118,9 +13127,6 @@ msgstr ""
 msgid "Error parsing {0}: "
 msgstr ""
 
-msgid "Presets"
-msgstr ""
-
 msgid "Search for objects by preset..."
 msgstr ""
 
@@ -15662,6 +15668,18 @@ msgstr ""
 msgid "korean"
 msgstr ""
 
+msgid "donut"
+msgstr ""
+
+msgid "mediterranean"
+msgstr ""
+
+msgid "friture"
+msgstr ""
+
+msgid "crepe"
+msgstr ""
+
 msgid "Internet access"
 msgstr ""
 
@@ -18504,7 +18522,16 @@ msgstr ""
 msgid "Tents allowed"
 msgstr ""
 
-msgid "Camping Site"
+msgid "Campsite"
+msgstr ""
+
+msgid "Caravans allowed"
+msgstr ""
+
+msgid "Backcountry"
+msgstr ""
+
+msgid "Group only access"
 msgstr ""
 
 msgid "Food+Drinks"
@@ -23333,6 +23360,14 @@ msgid ""
 "resolution or better, and refreshed more frequently with ongoing updates."
 msgstr ""
 
+msgid "DigitalGlobe Premium Imagery Vintage"
+msgstr ""
+
+msgid ""
+"Imagery boundaries and capture dates. Labels appear at zoom level 14 and "
+"higher."
+msgstr ""
+
 msgid "DigitalGlobe Standard Imagery"
 msgstr ""
 
@@ -23342,6 +23377,9 @@ msgid ""
 "Landsat. Average age is 2.31 years, with some areas updated 2x per year."
 msgstr ""
 
+msgid "DigitalGlobe Standard Imagery Vintage"
+msgstr ""
+
 msgid "Esri World Imagery"
 msgstr ""
 
@@ -23405,6 +23443,12 @@ msgstr ""
 msgid "Strava cycling and running heatmap"
 msgstr ""
 
+msgid "Strava water sports heatmap"
+msgstr ""
+
+msgid "Strava winter sports heatmap"
+msgstr ""
+
 msgid "Locator Overlay"
 msgstr ""
 
@@ -23809,6 +23853,9 @@ msgstr ""
 msgid "SPW(allonie) most recent aerial imagery"
 msgstr ""
 
+msgid "SPW(allonie) 2016 aerial imagery"
+msgstr ""
+
 msgid "SPW(allonie) 2015 aerial imagery"
 msgstr ""
 
@@ -23854,6 +23901,14 @@ msgstr ""
 msgid "Addresses data from IBGE"
 msgstr ""
 
+msgid "Street names IBGE Salvador-BA"
+msgstr ""
+
+msgid ""
+"Streets geometry and names of Salvador, Bahia. Source: Faces de Logradouro - "
+"IBGE."
+msgstr ""
+
 msgid "Rio Mosaic 2013"
 msgstr ""
 
@@ -24584,6 +24639,9 @@ msgstr ""
 msgid "Japan GSI ortho Imagery"
 msgstr ""
 
+msgid "Japan GSI Standard Map"
+msgstr ""
+
 msgid "imagico.de OSM images for mapping: Aral Sea (low water level)"
 msgstr ""
 
@@ -24613,7 +24671,7 @@ msgstr ""
 msgid "20cm ortho - Latvia - Coastline"
 msgstr ""
 
-msgid "1.cikla ortofotokarte - Latvia"
+msgid "Orthophoto 1st cycle (1994-1999) - Latvia"
 msgstr ""
 
 msgid "ORT10LT (Lithuania)"
@@ -24622,6 +24680,9 @@ msgstr ""
 msgid "geoportail.lu all layers"
 msgstr ""
 
+msgid "geoportail.lu ortho latest"
+msgstr ""
+
 msgid "geoportail.lu ortho 2016"
 msgstr ""
 
@@ -26112,6 +26173,9 @@ msgstr ""
 msgid "{0} on a node. Should be used on a way."
 msgstr ""
 
+msgid "{0} on a node. Should be used on a way or relation."
+msgstr ""
+
 msgid "{0} on a node. Should be drawn as an area."
 msgstr ""
 
@@ -26339,6 +26403,9 @@ msgstr ""
 msgid "Nodes duplicating parent way tags"
 msgstr ""
 
+msgid "{0} together with {1} and {2}. Remove {0}."
+msgstr ""
+
 msgid ""
 "wikipedia tag has no language given, use ''wikipedia''=''language:page "
 "title''"
@@ -27103,6 +27170,21 @@ msgstr ""
 msgid "Importing..."
 msgstr ""
 
+msgid "Shape is started incorrectly"
+msgstr ""
+
+msgid "Can''t load SVG diagram"
+msgstr ""
+
+msgid "Can''t find root SVG element"
+msgstr ""
+
+msgid "Import primitives"
+msgstr ""
+
+msgid "Cannot find configuration file!"
+msgstr ""
+
 msgid "DXF files [ImportDxf plugin] (*.dxf)"
 msgstr ""
 
@@ -27742,6 +27824,9 @@ msgstr ""
 msgid "Download mode"
 msgstr ""
 
+msgid "Number of images to be pre-fetched (forwards and backwards)"
+msgstr ""
+
 msgid "You are logged in as ''{0}''."
 msgstr ""
 
@@ -27952,8 +28037,17 @@ msgid "only when manually requested"
 msgstr ""
 
 msgid ""
-"The downloaded OSM area is too big. Download mode has been changed to OSM "
-"area until the layer is restarted."
+"The Mapillary layer has stopped downloading images, because the requested "
+"area is too big!"
+msgstr ""
+
+msgid ""
+"To solve this problem, you could zoom in and load a smaller area of the map."
+msgstr ""
+
+msgid ""
+"To solve this problem, you could switch to download mode ''{0}'' and load "
+"Mapillary images for a smaller portion of the map."
 msgstr ""
 
 msgid "Downloading"
@@ -31265,19 +31359,6 @@ msgstr ""
 msgid "Merge Overlap (combine)"
 msgstr ""
 
-msgid ""
-"<html>A role based relation membership was copied to all new ways.<br>You "
-"should verify this and correct it when necessary.</html>"
-msgstr ""
-
-msgid ""
-"<html>A relation membership was copied to all new ways.<br>You should verify "
-"this and correct it when necessary.</html>"
-msgstr ""
-
-msgid "Split way"
-msgstr ""
-
 msgid "Michigan Left"
 msgstr ""
 
@@ -32732,254 +32813,254 @@ msgstr ""
 msgid "PT: Route passes a oneway road in the wrong direction"
 msgstr ""
 
-msgid "moved"
+msgid "Create Stops from GTFS ..."
 msgstr ""
 
-msgid "rail"
+msgid "Create Stops from a GTFS file"
 msgstr ""
 
-msgid "Can''t parse a time from this string."
+msgid "Select GTFS file (stops.txt)"
 msgstr ""
 
-msgid "Invalid value"
+msgid "File \"{0}\" does not exist"
 msgstr ""
 
-msgid "added"
+msgid "IOException \"{0}\" occurred"
 msgstr ""
 
-msgid "Public Transport: Enable GTFSStops"
+msgid ""
+"There exists no dataset. Try to download data from the server or open an OSM "
+"file."
 msgstr ""
 
-msgid "Public Transport: Catch GTFS stops"
+msgid "No data found"
 msgstr ""
 
-msgid "skipped"
+msgid "The GTFS file was empty."
 msgstr ""
 
-msgid "Public Transport: Disable GTFS"
+msgid "[ID] {0}"
 msgstr ""
 
-msgid "Create Stops from GTFS ..."
+msgid "Route patterns ..."
 msgstr ""
 
-msgid "Create Stops from a GTFS file"
+msgid "Edit Route patterns for public transport"
 msgstr ""
 
-msgid "Select GTFS file (stops.txt)"
+msgid "Route Patterns"
 msgstr ""
 
-msgid "File \"{0}\" does not exist"
+msgid "Overview"
 msgstr ""
 
-msgid "IOException \"{0}\" occurred"
+msgid "Itinerary"
 msgstr ""
 
-msgid ""
-"There exists no dataset. Try to download data from the server or open an OSM "
-"file."
+msgid "Stops"
 msgstr ""
 
-msgid "No data found"
+msgid "Meta"
 msgstr ""
 
-msgid "The GTFS file was empty."
+msgid "Existing route patterns:"
 msgstr ""
 
-msgid "Create Stops from GTFS"
+msgid "Reflect"
 msgstr ""
 
-msgid "GTFS-Stops"
+msgid "Required tags:"
 msgstr ""
 
-msgid "Type of stops to add"
+msgid "Common tags:"
 msgstr ""
 
-msgid "Time on your GPS device"
+msgid "Additional tags:"
 msgstr ""
 
-msgid "HH:MM:SS.sss"
+msgid "Add a new Tag"
 msgstr ""
 
-msgid "Time on your stopwatch"
+msgid "Name/Id"
 msgstr ""
 
-msgid "Time window"
+msgid "Find"
 msgstr ""
 
-msgid "seconds"
+msgid "Show"
 msgstr ""
 
-msgid "Move Threshold"
+msgid "Mark"
 msgstr ""
 
-msgid "Suggest Stops"
+msgid "Ref"
 msgstr ""
 
-msgid "Find"
+msgid "Stops are possible on the"
 msgstr ""
 
-msgid "Show"
+msgid "right hand side"
 msgstr ""
 
-msgid "Mark"
+msgid "left hand side"
 msgstr ""
 
-msgid "Catch"
+msgid "Maximum distance from route"
 msgstr ""
 
-msgid "Join"
+msgid "Suggest Stops"
 msgstr ""
 
-msgid "Public Transport: Join GTFS stops"
+msgid "Create Stops from GPX ..."
 msgstr ""
 
-msgid "State"
+msgid "Create Stops from a GPX file"
 msgstr ""
 
-msgid "[incomplete]"
+msgid "Select GPX file"
 msgstr ""
 
-msgid "[empty way]"
+msgid "The GPX file contained no tracks or waypoints."
 msgstr ""
 
-msgid "[ID] {0}"
+msgid "moved"
 msgstr ""
 
-msgid "[gap]"
+msgid "added"
 msgstr ""
 
-msgid "Route patterns ..."
+msgid "Public Transport: Enable GTFSStops"
 msgstr ""
 
-msgid "Edit Route patterns for public transport"
+msgid "Public Transport: Catch GTFS stops"
 msgstr ""
 
-msgid "Route Patterns"
+msgid "skipped"
 msgstr ""
 
-msgid "Overview"
+msgid "Public Transport: Disable GTFS"
 msgstr ""
 
-msgid "Itinerary"
+msgid "Public Transport: Join GTFS stops"
 msgstr ""
 
-msgid "Stops"
+msgid "Public Transport: Change stop type"
 msgstr ""
 
-msgid "Meta"
+msgid "Public Transport: Add track stop"
 msgstr ""
 
-msgid "Existing route patterns:"
+msgid "Public Transport: Delete track stop"
 msgstr ""
 
-msgid "Reflect"
+msgid "Public Transport: Detach track stop list"
 msgstr ""
 
-msgid "Required tags:"
+msgid "Public Transport: Edit track stop list"
 msgstr ""
 
-msgid "Common tags:"
+msgid "Public Transport: Relocate nodes in track stoplist"
 msgstr ""
 
-msgid "Additional tags:"
+msgid "Public Transport: sort track stop list"
 msgstr ""
 
-msgid "Add a new Tag"
+msgid "Public Transport: Suggest stops"
 msgstr ""
 
-msgid "Name/Id"
+msgid "Public Transport: Detach waypoints"
 msgstr ""
 
-msgid "Ref"
+msgid "Public Transport: Disable waypoints"
 msgstr ""
 
-msgid "Stops are possible on the"
+msgid "Public Transport: Enable waypoints"
 msgstr ""
 
-msgid "right hand side"
+msgid "Public Transport: Edit waypoint name"
 msgstr ""
 
-msgid "left hand side"
+msgid "rail"
 msgstr ""
 
-msgid "Maximum distance from route"
+msgid "Can''t parse a time from this string."
 msgstr ""
 
-msgid " [ID] {0}"
+msgid "Invalid value"
 msgstr ""
 
-msgid "Public Transport: Change stop type"
+msgid "Create Stops from GTFS"
 msgstr ""
 
-msgid "Create Stops from GPX ..."
+msgid "GTFS-Stops"
 msgstr ""
 
-msgid "Create Stops from a GPX file"
+msgid "Type of stops to add"
 msgstr ""
 
-msgid "Select GPX file"
+msgid "Time on your GPS device"
 msgstr ""
 
-msgid "The GPX file contained no tracks or waypoints."
+msgid "HH:MM:SS.sss"
 msgstr ""
 
-msgid "Create Stops from GPX"
+msgid "Time on your stopwatch"
 msgstr ""
 
-msgid "Tracks in this GPX file:"
+msgid "Time window"
 msgstr ""
 
-msgid "Detach"
+msgid "seconds"
 msgstr ""
 
-msgid "implicit"
+msgid "Move Threshold"
 msgstr ""
 
-msgid ""
-"The GPX file doesn''t contain valid trackpoints. Please use a GPX file that "
-"has trackpoints."
+msgid "Catch"
 msgstr ""
 
-msgid "GPX File Trouble"
+msgid "Join"
 msgstr ""
 
-msgid "unnamed"
+msgid "Create Stops from GPX"
 msgstr ""
 
-msgid "Public Transport: Add track stop"
+msgid "Tracks in this GPX file:"
 msgstr ""
 
-msgid "Public Transport: Delete track stop"
+msgid "Detach"
 msgstr ""
 
-msgid "Public Transport: Detach track stop list"
+msgid "implicit"
 msgstr ""
 
-msgid "Public Transport: Edit track stop list"
+msgid "State"
 msgstr ""
 
-msgid "Public Transport: Relocate nodes in track stoplist"
+msgid "[incomplete]"
 msgstr ""
 
-msgid "Public Transport: sort track stop list"
+msgid "[empty way]"
 msgstr ""
 
-msgid "Public Transport: Suggest stops"
+msgid "[gap]"
 msgstr ""
 
 msgid "Stopname"
 msgstr ""
 
-msgid "Public Transport: Detach waypoints"
+msgid " [ID] {0}"
 msgstr ""
 
-msgid "Public Transport: Disable waypoints"
+msgid ""
+"The GPX file doesn''t contain valid trackpoints. Please use a GPX file that "
+"has trackpoints."
 msgstr ""
 
-msgid "Public Transport: Enable waypoints"
+msgid "GPX File Trouble"
 msgstr ""
 
-msgid "Public Transport: Edit waypoint name"
+msgid "unnamed"
 msgstr ""
 
 msgid "Distance between stops"
@@ -33708,6 +33789,9 @@ msgstr ""
 msgid "JOSM Tag Editor Plugin"
 msgstr ""
 
+msgid "Presets"
+msgstr ""
+
 msgid "Abort tag editing and close dialog"
 msgstr ""
 
@@ -35633,6 +35717,26 @@ msgid_plural "Overwrite ''{0}'' tags {1} from {2} with new value ''{3}''?"
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Download from Sophox API"
+msgstr ""
+
+msgid ""
+"Find places of education at least 2km, and at most 3km from the center of "
+"the selection"
+msgstr ""
+
+msgid "Show/hide Sophox snippet list"
+msgstr ""
+
+msgid "help"
+msgstr ""
+
+msgid "Server: "
+msgstr ""
+
+msgid "Wikidata+OSM server"
+msgstr ""
+
 msgid "Search Wikidata items"
 msgstr ""
 
@@ -35706,26 +35810,6 @@ msgid ""
 "objects"
 msgstr ""
 
-msgid "Download from Wikosm API"
-msgstr ""
-
-msgid ""
-"Find places of education at least 2km, and at most 3km from the center of "
-"the selection"
-msgstr ""
-
-msgid "Show/hide Wikosm snippet list"
-msgstr ""
-
-msgid "help"
-msgstr ""
-
-msgid "Server: "
-msgstr ""
-
-msgid "Wikidata+OSM server"
-msgstr ""
-
 msgid "The Ultimate WMS Super-speed Turbo Challenge II"
 msgstr ""
 
diff --git a/i18n/po/fr.po b/i18n/po/fr.po
index fc2bebe..9af7656 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-10-30 03:38+0100\n"
-"PO-Revision-Date: 2017-10-19 06:28+0000\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"
 "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-10-30 04:43+0000\n"
-"X-Generator: Launchpad (build 18493)\n"
+"X-Launchpad-Export-Date: 2017-11-26 04:43+0000\n"
+"X-Generator: Launchpad (build 18509)\n"
 "Language: fr\n"
 "X-Poedit-Bookmarks: -1,-1,-1,2669,-1,-1,-1,-1,-1,-1\n"
 
@@ -260,7 +260,7 @@ msgid "Two parallels ways found. Abort."
 msgstr "Deux voies parallèles trouvées. Annule."
 
 msgid "data"
-msgstr "données"
+msgstr "Données"
 
 msgid "layer"
 msgstr "calque"
@@ -457,12 +457,15 @@ msgstr "Supprimer le calque"
 msgid "Delete the active layer. Does not delete the associated file."
 msgstr "Supprime le calque actif, mais ne supprime pas le fichier associé."
 
-msgid "Toggle dialogs panel"
-msgstr "Afficher/Masquer le panneau des fenêtres latérales"
+msgid "Dialogs panel"
+msgstr "Panneau de dialogue"
 
 msgid "Toggle dialogs panel, maximize mapview"
 msgstr "Affiche/Masque le panneau des fenêtres latérales, maximise la carte"
 
+msgid "Toggle dialogs panel"
+msgstr "Afficher/Masquer le panneau des fenêtres latérales"
+
 msgid "Distribute Nodes"
 msgstr "Répartir les noeuds"
 
@@ -487,6 +490,7 @@ msgstr "Télécharger les données"
 
 msgid "Download map data from a server of your choice"
 msgstr ""
+"Télécharger les données cartographiques depuis un serveur de votre choix"
 
 msgid ""
 "<html>This action will require {0} individual<br>download requests. Do you "
@@ -538,7 +542,9 @@ msgid "Follow line"
 msgstr "Suivre le chemin"
 
 msgid "Continues drawing a line that shares nodes with another line."
-msgstr "Continuer le chemin avec les nœuds d’un autre chemin."
+msgstr ""
+"Continuer le tracé d''un chemin en réutilisant les nœuds d''un autre chemin "
+"avec qui il partage des nœuds."
 
 msgid "Follow"
 msgstr "Suivre"
@@ -2535,7 +2541,7 @@ msgid "MapCSS selector"
 msgstr "Sélecteur MapCSS"
 
 msgid "Selection settings"
-msgstr ""
+msgstr "Paramètres de sélection"
 
 msgid "Additional settings"
 msgstr "Paramètres supplémentaires"
@@ -2547,7 +2553,7 @@ msgid "Invalid search expression"
 msgstr "L’expression de recherche n’est pas valide"
 
 msgid "Search by preset"
-msgstr ""
+msgstr "Recherche par préréglage"
 
 msgid "Filter"
 msgstr "Filtrer"
@@ -2571,7 +2577,7 @@ msgstr ""
 " {0}"
 
 msgid "Search hints"
-msgstr ""
+msgstr "Critères de recherche"
 
 msgid "basics"
 msgstr "bases"
@@ -2654,10 +2660,11 @@ msgid "object without useful tags"
 msgstr "objet sans attribut utile"
 
 msgid "all objects that use the address preset"
-msgstr ""
+msgstr "Tous les objets qui utilisent le préréglage d''adresse"
 
 msgid "all objects that use any preset under the Geography/Nature group"
 msgstr ""
+"Tous les objets qui utilisent un préréglage du groupe Géographie/Nature"
 
 msgid "metadata"
 msgstr "métadonnées"
@@ -3358,7 +3365,7 @@ msgid "E"
 msgstr "E"
 
 msgid "Unable to parse as coordinate value: ''{0}''"
-msgstr ""
+msgstr "Echec d analyse en tant que coordonnée: ''{0}''"
 
 msgid "Date of imagery: {0}"
 msgstr "Date des images: {0}"
@@ -3734,7 +3741,7 @@ msgid "Range of numbers expected"
 msgstr "Série de nombres attendus"
 
 msgid "Unknown preset name: "
-msgstr ""
+msgstr "Nom de préréglage inconnu "
 
 msgid "Failed to parse MapCSS selector"
 msgstr "Échec dans l''analyse du sélecteur MapCSS"
@@ -3856,16 +3863,19 @@ msgid "areatext"
 msgstr "zone de texte"
 
 msgid "Failed to create missing preferences directory: {0}"
-msgstr ""
+msgstr "Échec de la création du répertoire de préférences manquant: {0}"
 
 msgid "<html>Failed to create missing preferences directory: {0}</html>"
 msgstr ""
+"<html>Échec de la création du répertoire de préférences manquant: {0}</html>"
 
 msgid "Failed to create missing user data directory: {0}"
-msgstr ""
+msgstr "Echec de création du répertoire de donnée utilisateur manquant: {0}"
 
 msgid "<html>Failed to create missing user data directory: {0}</html>"
 msgstr ""
+"<html>Echec de création du répertoire de donnée utilisateur manquant: "
+"{0}</html>"
 
 msgid "Failed to create missing cache directory: {0}"
 msgstr "Impossible de créer le dossier de cache manquant: {0}"
@@ -4082,55 +4092,65 @@ msgid "Error: {0}"
 msgstr "Erreur: {0}"
 
 msgid "JOSM projection command line interface"
-msgstr ""
+msgstr "Interface en ligne de commande des projections JOSM"
 
 msgid "Description"
 msgstr "Description"
 
 msgid "Converts coordinates from one coordinate reference system to another."
 msgstr ""
+"Converti les coordonnées depuis un système de référence de coordonnées vers "
+"un autre"
 
 msgid "Options"
-msgstr ""
+msgstr "Options"
 
 msgid "Show this help"
 msgstr "Afficher cette aide"
 
 msgid "Switch input and output crs"
 msgstr ""
+"Echange le système de référence de coordonnée d''entrée avec celui de sortie"
 
 msgid "Switch order of input coordinates (east/north, lon/lat)"
 msgstr ""
+"Intervertit l''orde des coordonnées d''entrée (est/nord, longitude/latitude)"
 
 msgid "Switch order of output coordinates (east/north, lon/lat)"
 msgstr ""
+"Intervertit l''orde des coordonnées de sortie (est/nord, longitude/latitude)"
 
 msgid "<crs>"
-msgstr ""
+msgstr "<Système de référence de coordonnée>"
 
 msgid ""
 "The format for input and output coordinate reference system is similar to "
 "that of the PROJ.4 software."
 msgstr ""
+"Le format du système de référence de coordonnée d''entrée et de sortie est "
+"similaire a celui du logiciel PROJ.4."
 
 msgid "[file]"
-msgstr ""
+msgstr "[fichier]"
 
 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 ""
+"Lit les données d''entrée depuis un ou plusieurs fichiers listés en tant que "
+"paramètres positionnels. Quand aucun fichier n''est précisé, ou si le nom de "
+"fichier est \"-\", les données sont lues depuis  l''entrée standard."
 
 msgid "Examples"
 msgstr "Exemples :"
 
 msgid ""
 "Expected two coordinates, separated by white space, found {0} in ''{1}''"
-msgstr ""
+msgstr "Attend 2 coordonnées ,séparées par un espace,  trouve {0} in \"{1}\""
 
 msgid "Unable to parse number ''{0}''"
-msgstr ""
+msgstr "Echec d analyse du nombre \"{0}\""
 
 msgid "GRS80"
 msgstr "GRS80"
@@ -4576,7 +4596,7 @@ msgid "Multipolygon is not closed"
 msgstr "Le multipolygone n’est pas fermé"
 
 msgid "Self-intersecting polygon ring"
-msgstr ""
+msgstr "Contour du polygone en intersection avec lui même"
 
 msgid "Multipolygon rings share node(s)"
 msgstr "Des membres d’un multipolygone partagent des nœuds"
@@ -4753,8 +4773,8 @@ msgid ""
 "Type ''{0}'' of relation member with role ''{1}'' does not match accepted "
 "types ''{2}'' in template {3}"
 msgstr ""
-"Le type '' {0} '' du membre de la relation avec le rôle '' {1} '' ne "
-"correspond pas aux types acceptés '' {2} '' dans le modèle {3}"
+"Le type ''{0}'' du membre de la relation avec le rôle ''{1}'' ne correspond "
+"pas aux types approuvés ''{2}'' du modèle {3}"
 
 msgid "<empty>"
 msgstr "<vide>"
@@ -4875,13 +4895,13 @@ msgid "FIXMES"
 msgstr "FIXME"
 
 msgid "Check property keys."
-msgstr "Vérifier les clés."
+msgstr "Vérifier les clés de propriété"
 
 msgid "Validate that property keys are valid checking against list of words."
 msgstr "Valider les clés par rapport à une liste de mots."
 
 msgid "Use complex property checker."
-msgstr "Utiliser un vérificateur d’attributs complexe."
+msgstr "Utiliser un vérificateur d’attributs complexes."
 
 msgid "Validate property values and tags using complex rules."
 msgstr "Valider les attributs en utilisant des règles complexes."
@@ -4893,7 +4913,7 @@ msgid "Data sources ({0})"
 msgstr "Source de données ({0})"
 
 msgid "Check property values."
-msgstr "Vérifier les valeurs."
+msgstr "Vérifier les valeurs d attributs"
 
 msgid "Validate that property values are valid checking against presets."
 msgstr "Valider les valeurs par rapport au modèle d’attributs."
@@ -5264,7 +5284,7 @@ msgid "Would you like to update now ?"
 msgstr "Voulez-vous mettre à jour maintenant ?"
 
 msgid "Starting file watcher"
-msgstr ""
+msgstr "Démarrage de l''observateur de fichier"
 
 msgid "Executing platform startup hook"
 msgstr "Initialisation spécifique à la plateforme"
@@ -5303,23 +5323,28 @@ msgid "usage"
 msgstr "usage"
 
 msgid "commands"
-msgstr ""
+msgstr "Commandes"
 
 msgid "launch JOSM (default, performed when no command is specified)"
 msgstr ""
+"Lance JOSM (par défaut, exécutée quand aucune commande n''est spécifiée)"
 
 msgid "render data and save the result to an image file"
-msgstr ""
+msgstr "Rend les données et sauvegarde le résultat dans un fichier image"
 
 msgid "convert coordinates from one coordinate reference system to another"
 msgstr ""
+"Convertit les coordonnées depuis un système de référence de coordonnées vers "
+"un autre"
 
 msgid ""
 "For details on the {0} and {1} commands, run them with the {2} option."
 msgstr ""
+"Pour obtenir des détails sur les commandes {0} et {1}, lancez les avec l "
+"option {2}"
 
 msgid "The remainder of this help page documents the {0} command."
-msgstr ""
+msgstr "Le reste de cette page d aide documente la commande {0}"
 
 msgid "options"
 msgstr "options"
@@ -5411,8 +5436,8 @@ msgid ""
 "Set the preferences+data+cache directory (cache directory will be "
 "josm.home/cache)"
 msgstr ""
-"Définissez les préférences + données + répertoire de cache (le répertoire de "
-"cache sera josm.home/cache)"
+"Règle les préférences des répertoires +données+cache (le répertoire de cache "
+"sera josm.home/cache)"
 
 msgid ""
 "-Djosm.home has lower precedence, i.e. the specific setting overrides the "
@@ -5710,7 +5735,7 @@ msgid "{0} ({1})"
 msgstr "{0} ({1})"
 
 msgid "The (compass) heading of the line segment being drawn."
-msgstr "Orientation du segment de chemin."
+msgstr "Orientation du segment de chemin qui est en cours de tracé"
 
 msgid "The angle between the previous and the current way segment."
 msgstr "Angle entre le segment de chemin précédent et l’actuel."
@@ -5794,7 +5819,7 @@ msgid "Shrink"
 msgstr "Rétrécir"
 
 msgid "Show downloaded area"
-msgstr ""
+msgstr "Montrer la zone téléchargée"
 
 msgid ""
 "<html>Please select a <strong>range of OSM tiles</strong> at a given zoom "
@@ -7080,6 +7105,9 @@ msgstr "Coordonnées : "
 msgid "Coordinates (projected): "
 msgstr "Coordonnées (projetées): "
 
+msgid "UTM Zone"
+msgstr "Zone :"
+
 msgid "Part of: "
 msgstr "Fait partie de: "
 
@@ -7795,7 +7823,7 @@ msgid "Update the changeset from the OSM server"
 msgstr "Mettre à jour le groupe de modifications"
 
 msgid "View changeset"
-msgstr ""
+msgstr "Voir le groupe de modifications"
 
 msgid ""
 "Select the primitives in the content of this changeset in the current data "
@@ -8805,7 +8833,7 @@ msgstr ""
 "réessayer.</html>"
 
 msgid "Select the currently edited relation"
-msgstr ""
+msgstr "Sélectionne la relation en cours d édition"
 
 msgid "Select objects for selected relation members"
 msgstr "Sélectionner les objets des membres"
@@ -8878,7 +8906,7 @@ msgid "Wrong number of arguments for bookmark"
 msgstr "Le nombre d’argument n’est pas valide pour le signet"
 
 msgid "Home location"
-msgstr ""
+msgstr "Emplacement du dossier personnel"
 
 msgid "Error reading bookmark entry: %s"
 msgstr "Une erreur est survenue lors de la lecture du signet : %s"
@@ -8918,7 +8946,7 @@ msgid "Rename the currently selected bookmark"
 msgstr "Renommer le signet"
 
 msgid "Download bookmarks for my {0} last changesets"
-msgstr ""
+msgstr "Télécharge les favoris pour mes {0} derniers groupes de modification"
 
 msgid "min lat"
 msgstr "Latitude minimale :"
@@ -9087,7 +9115,7 @@ msgid "Your saved queries:"
 msgstr "Vos requêtes sauvegardées :"
 
 msgid "Show/hide Overpass snippet list"
-msgstr ""
+msgstr "Affiche/Cache la liste des requêtes Overpass"
 
 msgid "Overpass query:"
 msgstr "Requête Overpass :"
@@ -9103,13 +9131,13 @@ msgid "Download all data?"
 msgstr "Télécharger toutes les données?"
 
 msgid "Add new snippet"
-msgstr ""
+msgstr "Ajoute une nouvelle requête"
 
 msgid "Delete selected snippet"
-msgstr ""
+msgstr "Supprime la requête sélectionnée"
 
 msgid "Edit selected snippet"
-msgstr ""
+msgstr "Edite la requête sélectionnée"
 
 msgid "Overpass Turbo Query Wizard"
 msgstr "Assistant de requête Overpass Turbo"
@@ -9121,7 +9149,7 @@ msgid "Build query and execute"
 msgstr "Construire la requête et l’exécuter"
 
 msgid "Search :"
-msgstr ""
+msgstr "Rechercher :"
 
 msgid "The Overpass wizard could not parse the following query:"
 msgstr "L’assistant Overpass n’a pu analyser la requête suivante :"
@@ -9133,6 +9161,8 @@ msgid ""
 "Allows you to interact with <i>Overpass API</i> by writing declarative, "
 "human-readable terms."
 msgstr ""
+"Vous permet d interagir avec <i>Overpass API</i> en écrivant des termes "
+"déclaratifs compréhensibles par l utilisateur"
 
 msgid ""
 "The <i>Query Wizard</i> tool will transform those to a valid overpass query."
@@ -9147,46 +9177,61 @@ msgid "<a href=\"{0}\">OSM Wiki</a>."
 msgstr "<a href=\"{0}\">Wiki OSM</a>."
 
 msgid "Hints"
-msgstr ""
+msgstr "Critères"
 
 msgid "Download objects of a certain type."
-msgstr ""
+msgstr "Télécharge les objets d un certain type"
 
 msgid "Download object by specifying a specific location. For example,"
 msgstr ""
+"Télécharge les objets en spécifiant une localisation particulière. Par "
+"exemple,"
 
 msgid "{0} all objects having {1} as attribute are downloaded."
-msgstr ""
+msgstr "{0} tous les objets possédant l attribut {1} sont téléchargés"
 
 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} tous les objets situés autour de Berlin possédant la paire clef/valeur "
+"correspondante. Note, la valeur par défaut du rayon de recerche est fixée a "
+"1000m mais elle peut être changée dans la requête générée."
 
 msgid ""
 "{0} all objects within the current selection that have {1} as attribute."
 msgstr ""
+"{0} tous les objets dans la sélection courante qui possèdent l attribut {1}"
 
 msgid ""
 "Instead of <i>location</i> any valid place name can be used like address, "
 "city, etc."
 msgstr ""
+"N importe quel nom de lieu valide tel qu une adresse, une ville etc peut "
+"être utilisé a la place de <i>localisation<i>."
 
 msgid ""
 "<span>Download objects that have some concrete key/value pair, only the key "
 "with any contents for the value, the value matching some regular expression. "
 "\"Not equal\" operators are supported as well.</span>"
 msgstr ""
+"<span>Télécharge les objets qui possèdent des paires clefs/valeurs, "
+"seulement la clef avec n importe quelle valeur, avec des valeurs respectant "
+"une expression régulière. Les opérateurs \"Non égal\" sont aussi "
+"supportés.</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 ""
+"Les opérateurs logique de base peuvent etre utilisés pour créer des requêtes "
+"plus sophistiquées. \"||\" peut être utilisé a la place de \"or\" - \"|\", "
+"et \"&&\" a la place de \"and\" - \"&\"."
 
 msgid "Class Type"
 msgstr "Classe"
@@ -9244,10 +9289,10 @@ msgid "Please select an item first"
 msgstr "Veuillez d’abord sélectionner un élément"
 
 msgid "Edit item"
-msgstr ""
+msgstr "Éditer l''élément"
 
 msgid "Add snippet"
-msgstr ""
+msgstr "Ajouter un élément"
 
 msgid "Query cannot be empty"
 msgstr "La requête ne peut être vide"
@@ -9259,7 +9304,7 @@ msgid "Item with this name already exists"
 msgstr "Un élément de ce nom existe déjà"
 
 msgid "The item cannot be created with provided name"
-msgstr ""
+msgstr "L élément ne peut pas être créé avec le nom fourni"
 
 msgid "The item cannot be created with an empty query"
 msgstr "L’élément ne peut être créé avec une requête vide"
@@ -9423,10 +9468,10 @@ msgid "Open a history browser with the history of this node"
 msgstr "Ouvrir un navigateur avec l’historique de ce nœud"
 
 msgid "View changeset in web browser"
-msgstr ""
+msgstr "Voir le groupe de modification dans le navigateur web"
 
 msgid "Open {0}"
-msgstr ""
+msgstr "Ouvrir {0}"
 
 msgid "Way {0}"
 msgstr "Chemin {0}"
@@ -9438,7 +9483,7 @@ msgid "Object"
 msgstr "Objet"
 
 msgid "Open Changeset Manager"
-msgstr ""
+msgstr "Ouvrir le gestionnaire de groupe de modifications"
 
 msgid "Changeset comment"
 msgstr "Commentaire de groupe de modifications"
@@ -9615,6 +9660,11 @@ msgstr ""
 "Cocher \"Enregistrer\" pour sauvegarder le calque dans le fichier spécifié à "
 "gauche."
 
+msgid ""
+"A background upload is already in progress. Kindly wait for it to finish "
+"before uploading new changes"
+msgstr ""
+
 msgid "I would like someone to review my edits."
 msgstr "J’aimerais que quelqu’un vérifie mes modifications."
 
@@ -10651,7 +10701,7 @@ msgid "Open OSM file"
 msgstr "Ouvrir un fichier OSM"
 
 msgid "Validation Error Files"
-msgstr ""
+msgstr "Fichiers d erreur de validation"
 
 msgid "WMS Files (*.wms)"
 msgstr "Fichiers WMS (*.wms)"
@@ -10889,6 +10939,9 @@ msgstr "Changer à nouveau la projection ou retirer la couche"
 msgid "Save Layer"
 msgstr "Enregistrer le calque"
 
+msgid "Trying to set a read only data layer as edit layer"
+msgstr ""
+
 msgid "{0} note"
 msgid_plural "{0} notes"
 msgstr[0] "{0} note"
@@ -10904,7 +10957,7 @@ msgid "Changes need uploading?"
 msgstr "Les changements nécessitent-ils un envoi des données ?"
 
 msgid "Save Note file"
-msgstr ""
+msgstr "Enregistrer un fichier de note"
 
 msgid "outside downloaded area"
 msgstr "en dehors de la zone téléchargée"
@@ -10982,7 +11035,7 @@ msgid "No validation errors"
 msgstr "Aucune erreur de validation"
 
 msgid "Save Validation errors file"
-msgstr ""
+msgstr "Enregistrer un fichier d erreurs de validation"
 
 msgid "Set WMS Bookmark"
 msgstr "Placer un signet WMS"
@@ -10993,12 +11046,12 @@ msgid ""
 msgstr ""
 "Reprojection du calque {0} de {1} à {2}. Pour une meilleure qualité d''image "
 "et de meilleures performances, basculez vers l''une des projections "
-"supportées: {3}"
+"supportées : {3}"
 
 msgid "Unable to find supported projection for layer {0}. Using {1}."
 msgstr ""
-"Impossible de trouver la projection prise en charge pour la couche {0}. En "
-"utilisant {1}."
+"Impossible de trouver une projection prise en charge pour le calque {0}. {1} "
+"sera utilisé."
 
 msgid "Correlate to GPX"
 msgstr "Corréler au format GPX"
@@ -11619,49 +11672,53 @@ msgid "Error - file not found: ''{0}''"
 msgstr "Erreur - fichier non trouvé: ''{0}''"
 
 msgid "Expected integer number for option {0}, but got ''{1}''"
-msgstr ""
+msgstr "Nombre entier attendu pour l option {0}, mais \"{1}\" reçu"
 
 msgid "Expected integer number >= 0 for option {0}, but got ''{1}''"
-msgstr ""
+msgstr "Nombre entier >= 0 attendu pour l option {0}, mais \"{1}\" reçu"
 
 msgid "Unable to parse {0} parameter: {1}"
-msgstr ""
+msgstr "Echec d analyse du parametre {0}: {1}"
 
 msgid ""
 "Expected key and value, separated by '':'' character for option {0}, but got "
 "''{1}''"
 msgstr ""
+"Paire clef/valeur, séparée par le caractère \":\", attendue pour l option "
+"{0}, mais \"{1}\" reçu"
 
 msgid "Expected floating point number for option {0}, but got ''{1}''"
-msgstr ""
+msgstr "Nombre flottant attendu pour l option {0}, mais \"{1}\" reçu"
 
 msgid ""
 "Expected two coordinates, separated by comma, for option {0}, but got ''{1}''"
 msgstr ""
+"Deux coordonnées, séparées par une virgule, attendues pour l option {0}, "
+"mais \"{1}\" reçu"
 
 msgid "In option {0}: {1}"
-msgstr ""
+msgstr "Pour l option {0}: {1}"
 
 msgid "Expected floating point number > 0 for option {0}, but got ''{1}''"
-msgstr ""
+msgstr "Nombre flottant > 0 attendu pour l option {0}, mais \"{1}\" reçu"
 
 msgid "Expected integer number > 0 for option {0}, but got ''{1}''"
-msgstr ""
+msgstr "Nombre entier > 0 attendu pour l option {0}, mais \"{1}\" reçu"
 
 msgid "JOSM rendering command line interface"
-msgstr ""
+msgstr "Interface en ligne de commande du rendu JOSM"
 
 msgid "Renders data and saves the result to an image file."
-msgstr ""
+msgstr "Rend les données et enregistre le résultat dans un fichier image."
 
 msgid "Input data file name (.osm)"
-msgstr ""
+msgstr "Nom de fichier de données d entrée (.osm)"
 
 msgid "Output image file name (.png); defaults to ''{0}''"
-msgstr ""
+msgstr "Nom du fichier d image de sortie (.png); par default a \"{0}\""
 
 msgid "Style file to use for rendering (.mapcss or .zip)"
-msgstr ""
+msgstr "Fichier de style a utiliser pour le rendu (.mapcss ou .zip)"
 
 msgid "This option can be repeated to load multiple styles."
 msgstr "Cette option peut être répétée pour charger différents styles."
@@ -11669,13 +11726,17 @@ msgstr "Cette option peut être répétée pour charger différents styles."
 msgid ""
 "Style setting (in JOSM accessible in the style list dialog right click menu)"
 msgstr ""
+"Réglage de style (accessible dans JOSM par le menu contextuel de la liste de "
+"Style)"
 
 msgid "Applies to the last style loaded with the {0} option."
-msgstr ""
+msgstr "S applique au dernier syle chargé avec l option {0}."
 
 msgid ""
 "Select zoom level to render. (integer value, 0=entire earth, 18=street level)"
 msgstr ""
+"Sélectionne le niveau de zoom a rendre. (valeur entière, 0 = terre entière, "
+"18= niveau de la rue)"
 
 msgid "Select the map scale"
 msgstr "Sélectionnez l’échelle de la carte"
@@ -11688,29 +11749,33 @@ msgstr ""
 "100 m sur le terrain; résolution de l’affichage: 96 dpi)"
 
 msgid "Options {0} and {1} are mutually exclusive."
-msgstr ""
+msgstr "Les options {0} et {1} sont mutuellement exclusives"
 
 msgid "Area to render, default value is ''{0}''"
-msgstr ""
+msgstr "Surface a rendre, la valeur par défaut est \"{0}\""
 
 msgid ""
 "With keyword ''{0}'', the downloaded area in the .osm input file will be "
 "used (if recorded)."
 msgstr ""
+"Avec le mot clef \"{0}\", la zone téléchargée dans le fichier .osm sera "
+"utilisée ( si enregistrée)."
 
 msgid "Specify bottom left corner of the rendering area"
-msgstr ""
+msgstr "Specifie le coin inférieur gauche de la zone de rendu"
 
 msgid ""
 "Used in combination with width and height options to determine the area to "
 "render."
 msgstr ""
+"Utilisé en combinaison avec les options de largeur et hauteur pour "
+"déterminer la zone a rendre."
 
 msgid "Width of the rendered area, in meter"
-msgstr ""
+msgstr "Largeur de la zone a rendre, en mètre"
 
 msgid "Height of the rendered area, in meter"
-msgstr ""
+msgstr "Hauteur de la zone a rendre, en mètre"
 
 msgid "Width of the target image, in pixel"
 msgstr "Largeur de l’image cible, en pixels"
@@ -11719,53 +11784,67 @@ msgid "Height of the target image, in pixel"
 msgstr "Hauteur de l’image cible, en pixels"
 
 msgid "Projection to use, default value ''{0}'' (web-Mercator)"
-msgstr ""
+msgstr "Projection a utiliser, valeur par défaut \"{0}\" (web-Mercator)"
 
 msgid ""
 "Maximum image width/height in pixel (''{0}'' means no limit), default value: "
 "{1}"
 msgstr ""
+"Largeur/hauteur maximum en pixel (\"{0}\" signifie pas de limite), valeur "
+"par défaut: {1}"
 
 msgid ""
 "To specify the rendered area and scale, the options can be combined in "
 "various ways"
 msgstr ""
+"Pour spécifier la zone a rendre et l échelle, les options peuvent etre "
+"combinées de plusieurs façons"
 
 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 ""
+"Si ni \"{0}\" ni \"{1}\" n est précisé, la valeur par défaut {2} prend effet "
+"et les limites de la zone téléchargée dans le fichier d entrée .osm sont "
+"utilisées."
 
 msgid ""
 "Argument {0} given, but scale cannot be determined from remaining arguments"
 msgstr ""
+"Argument {0} spécifié, mais l échelle ne peut être déterminée depuis les "
+"arguments restant"
 
 msgid "Argument {0} given, expected {1} or {2}"
-msgstr ""
+msgstr "Argument {0} spécifié, {1} ou {2} attendu"
 
 msgid "{0} mode, but no bounds found in osm data input file"
 msgstr ""
+"mode {0}, mais pas de limites trouvées dans le fichier de donnée d entrée osm"
 
 msgid ""
 "Unable to determine scale, one of the options {0}, {1}, {2} or {3} expected"
 msgstr ""
+"Impossible de déterminer l éechelle, une des options {0}, {1}, {2} ou {3} "
+"attendue"
 
 msgid "Missing argument - input data file ({0})"
-msgstr ""
+msgstr "Argument manquant - fichier de donnée d entrée ({0})"
 
 msgid "In .osm data file ''{0}'' - "
-msgstr ""
+msgstr "Dans le fichier de donnée .osm \"{0}\" - "
 
 msgid "Missing argument - at least one style expected ({0})"
-msgstr ""
+msgstr "Argument manquant - au moins un style attendu ({0})"
 
 msgid ""
 "Image dimensions ({0}x{1}) exceeds maximum image size {2} (use option {3} to "
 "change limit)"
 msgstr ""
+"Les dimensions de l image ({0}x{1}) dépassent la taille d image maximum {2} "
+"(Utilisez l option {3} pour changer la limite)"
 
 msgid "Style setting not found: ''{0}''"
-msgstr ""
+msgstr "Réglage de style non trouvé: \"{0}\""
 
 msgid ""
 "There was an error when loading this style. Select ''Info'' from the right "
@@ -11778,7 +11857,7 @@ msgstr[0] ""
 "\"Informations\" pour plus de détails."
 msgstr[1] ""
 "Il y a eu {0} erreurs durant le chargement du modèle. Cliquez sur "
-"\"Informations\" pour plus de détails."
+"\"Informations\" dans le menu contextuel pour plus de détails."
 
 msgid "loading style ''{0}''..."
 msgstr "Chargement du modèle ''{0}''…"
@@ -11791,11 +11870,6 @@ msgid "Failed to parse Mappaint styles from ''{0}''. Error was: {1}"
 msgstr ""
 "Echec de lʼanalyse des styles Mappaint de ''{0}''. Lʼerreur était: {1}"
 
-msgid ""
-"Detected deprecated ''{0}'' in ''{1}'' which will be removed shortly. Use "
-"''{2}'' instead."
-msgstr ""
-
 msgid "Failed to locate image ''{0}''"
 msgstr "Impossible de trouver l''image \"{0}\""
 
@@ -12755,7 +12829,7 @@ msgid "Display discardable keys"
 msgstr "Afficher les clés inutiles"
 
 msgid "Use auto filters"
-msgstr ""
+msgstr "Utiliser les filtres automatiques"
 
 msgid "Rule"
 msgstr "Règle"
@@ -12829,6 +12903,8 @@ msgstr ""
 msgid ""
 "Display buttons to automatically filter numeric values of a predefined tag"
 msgstr ""
+"Affichage des bouttons pour filtrer automatiquement les valeurs numériques d "
+"un attribut prédéféni"
 
 msgid "Options that affect drawing performance"
 msgstr "Options affectant les performances de rendu"
@@ -12916,7 +12992,7 @@ msgstr "Piétons"
 
 msgctxt "Heat map"
 msgid "User Normal"
-msgstr "utilisateur normal"
+msgstr "Utilisateur Normal"
 
 msgctxt "Heat map"
 msgid "User Light"
@@ -13118,6 +13194,9 @@ msgstr "Afficher l’écran de démarrage"
 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 ""
+
 msgid "Show localized name in selection lists"
 msgstr "Afficher les noms traduits dans la fenêtre de sélection"
 
@@ -13178,8 +13257,8 @@ msgid ""
 "Divide intervals between native resolution levels to smaller steps if they "
 "are much larger than zoom ratio"
 msgstr ""
-"Diviser les intervalles entre les niveaux de résolution native avec des "
-"étapes plus petites si elles sont beaucoup plus grandes que le taux de zoom"
+"Diviser les intervalles entre les niveaux de résolution native en paliers "
+"plus petits si elles sont beaucoup plus grandes que le taux de zoom"
 
 msgid "Zoom steps to get double scale"
 msgstr "Crans de zoom pour doubler l’échelle"
@@ -13938,9 +14017,6 @@ msgstr "Système géodésique :"
 msgid "UTM"
 msgstr "UTM"
 
-msgid "UTM Zone"
-msgstr "Zone :"
-
 msgid "North"
 msgstr "Nord :"
 
@@ -14363,7 +14439,7 @@ msgid "Show the informational tests in the upload check windows."
 msgstr "Afficher les tests d’information dans la fenêtre d’envoi."
 
 msgid "On demand"
-msgstr "Sur demande"
+msgstr "A la demande"
 
 msgid "On upload"
 msgstr "À l’envoi"
@@ -14464,9 +14540,6 @@ msgstr "Sous élément prédéfini sans parent"
 msgid "Error parsing {0}: "
 msgstr "Erreur d’analyse de {0} : "
 
-msgid "Presets"
-msgstr "Attributs"
-
 msgid "Search for objects by preset..."
 msgstr "Rechercher des objets par attribut..."
 
@@ -14648,7 +14721,7 @@ msgid "Add a new source to the list."
 msgstr "Ajouter une nouvelle source à la liste"
 
 msgid "Edit the selected source."
-msgstr "Modifier la source."
+msgstr "Modifier la source sélectionnée"
 
 msgid "Delete the selected source from the list."
 msgstr "Supprimer la source séléctionnée de la liste."
@@ -15698,12 +15771,14 @@ msgstr "fichier .jos attendu à l’’intérieur de l’’archive .joz"
 
 msgid "Failed to create missing plugin preferences directory: {0}"
 msgstr ""
+"Echec de création du répertoire de préférence manquant du plugin: {0}"
 
 msgid "Failed to create missing plugin user data directory: {0}"
 msgstr ""
+"Echec de création du répertoire de donnée utilisateur manquant du plugin: {0}"
 
 msgid "Failed to create missing plugin cache directory: {0}"
-msgstr ""
+msgstr "Echec de création du répertoire de cache manquant du plugin: {0}"
 
 msgid "Skip download"
 msgstr "Abandonner le téléchargement"
@@ -17235,7 +17310,7 @@ msgstr "non"
 
 msgctxt "sidewalk"
 msgid "separate"
-msgstr ""
+msgstr "Séparé"
 
 msgid "Service type"
 msgstr "Type de service"
@@ -17306,7 +17381,7 @@ msgid "Minimum age"
 msgstr "Âge minimum"
 
 msgid "Maximum age"
-msgstr ""
+msgstr "Age maximal"
 
 msgid "Reference"
 msgstr "Référence"
@@ -17434,6 +17509,18 @@ msgstr "végétarienne"
 msgid "korean"
 msgstr "coréenne"
 
+msgid "donut"
+msgstr "beignet"
+
+msgid "mediterranean"
+msgstr "méditerranéen"
+
+msgid "friture"
+msgstr "fiture"
+
+msgid "crepe"
+msgstr "crèpe"
+
 msgid "Internet access"
 msgstr "Accès Internet"
 
@@ -17954,7 +18041,7 @@ msgstr "plateforme"
 
 msgctxt "power"
 msgid "rooftop"
-msgstr ""
+msgstr "toit"
 
 msgctxt "power"
 msgid "kiosk"
@@ -18180,7 +18267,7 @@ msgid "Destination"
 msgstr "Destination"
 
 msgid "Destination reference"
-msgstr "Destination"
+msgstr "Référence de destination"
 
 msgid "Placement"
 msgstr "Localisation"
@@ -19204,7 +19291,7 @@ msgid "infiltration"
 msgstr "infiltration"
 
 msgid "detention"
-msgstr ""
+msgstr "Rétention"
 
 msgid "Reservoir"
 msgstr "Réservoir"
@@ -19341,6 +19428,8 @@ msgid ""
 "An area of water mostly surrounded by land but with level connection to the "
 "ocean or a lake."
 msgstr ""
+"Une étendue d''eau principalement entourée de terre mais reliée a l''océan "
+"ou à un lac."
 
 msgid "Shipping"
 msgstr "Navigation"
@@ -19778,10 +19867,10 @@ msgid "1/50 mix (mofa/moped)"
 msgstr "Mélange 1/50 (cyclomoteur)"
 
 msgid "Additives:"
-msgstr ""
+msgstr "Additifs"
 
 msgid "Diesel Exhaust Fluid (AdBlue/AUS32)"
-msgstr ""
+msgstr "Fluide d échappement Diesel (AdBlue/AUS32)"
 
 msgid "Fuel cards:"
 msgstr "Carte essence:"
@@ -19890,16 +19979,16 @@ msgstr "Garagiste"
 
 msgctxt "shop=car_repair"
 msgid "Service"
-msgstr ""
+msgstr "Service"
 
 msgid "dealer"
-msgstr ""
+msgstr "Distributeur"
 
 msgid "repair"
-msgstr ""
+msgstr "Réparation"
 
 msgid "parts"
-msgstr ""
+msgstr "Pièces détachées"
 
 msgid "tyres"
 msgstr "pneus"
@@ -20216,7 +20305,7 @@ msgid "Beacon"
 msgstr "Balise"
 
 msgid "Navigationaid"
-msgstr ""
+msgstr "Aide a la navigation"
 
 msgid "Windsock"
 msgstr "Manche à air"
@@ -20306,8 +20395,17 @@ msgstr "Alimentation électrique"
 msgid "Tents allowed"
 msgstr "Tentes autorisées"
 
-msgid "Camping Site"
-msgstr "Camping"
+msgid "Campsite"
+msgstr "Terrain de camping"
+
+msgid "Caravans allowed"
+msgstr "Caravanes autorisées"
+
+msgid "Backcountry"
+msgstr "Camp isolé"
+
+msgid "Group only access"
+msgstr "Accès réservé aux groupes"
 
 msgid "Food+Drinks"
 msgstr "Restauration"
@@ -21017,7 +21115,7 @@ msgid "Nursing Home"
 msgstr "Maison de soins"
 
 msgid "Nursing Home (Legacy)"
-msgstr ""
+msgstr "Maison de retraite"
 
 msgid "Group Home"
 msgstr "Résidence collective"
@@ -21366,7 +21464,7 @@ msgid "Par"
 msgstr "Par"
 
 msgid "Handicap rating"
-msgstr ""
+msgstr "Handicap"
 
 msgctxt "golf"
 msgid "Pin"
@@ -21382,11 +21480,11 @@ msgstr "Nature"
 
 msgctxt "golf"
 msgid "Frontal Water hazard"
-msgstr ""
+msgstr "Obstacle d eau frontal"
 
 msgctxt "golf"
 msgid "Lateral water hazard"
-msgstr "Risque lié à l’eau"
+msgstr "Obstacle d eau lateral"
 
 msgctxt "golf"
 msgid "Green"
@@ -21398,11 +21496,11 @@ msgstr "Fairway"
 
 msgctxt "golf"
 msgid "Rough"
-msgstr ""
+msgstr "Rough"
 
 msgctxt "golf"
 msgid "Driving range"
-msgstr ""
+msgstr "Practice"
 
 msgid "Miniature Golf"
 msgstr "Minigolf"
@@ -21939,7 +22037,7 @@ msgstr "marches"
 
 msgctxt "entrance"
 msgid "home"
-msgstr ""
+msgstr "Entrée d un lieu privé"
 
 msgid "Entrance number"
 msgstr "Numéro dʼentrée"
@@ -21963,7 +22061,7 @@ msgid "Flagpole"
 msgstr "Mât"
 
 msgid "Cross"
-msgstr ""
+msgstr "Croix"
 
 msgid "Works"
 msgstr "Usine"
@@ -22142,7 +22240,7 @@ msgstr "Phare"
 
 msgctxt "man_made"
 msgid "Beacon"
-msgstr ""
+msgstr "Balise"
 
 msgid "Street Lamp"
 msgstr "Lampadaire"
@@ -22738,23 +22836,23 @@ msgid "Power Switch"
 msgstr "Interrupteur"
 
 msgid "Type of switch"
-msgstr ""
+msgstr "Type d appareil de connection"
 
 msgctxt "power"
 msgid "mechanical"
-msgstr ""
+msgstr "mécanique"
 
 msgctxt "power"
 msgid "circuit_breaker"
-msgstr ""
+msgstr "disjoncteur"
 
 msgctxt "power"
 msgid "disconnector"
-msgstr ""
+msgstr "sectionneur"
 
 msgctxt "power"
 msgid "earthing"
-msgstr ""
+msgstr "sectionneur relié a la terre"
 
 msgid "Power Converter"
 msgstr "Convertisseur"
@@ -23023,13 +23121,13 @@ msgid "Pole"
 msgstr "Poteau électrique"
 
 msgid "Pole with Switch"
-msgstr ""
+msgstr "Poteau avec sectionneur"
 
 msgid "Pole Attributes:"
 msgstr "Attributs du pylône"
 
 msgid "Switch Attributes:"
-msgstr ""
+msgstr "Attributs de l appareil de connection"
 
 msgid "Pole with Transformer"
 msgstr "Poteau avec transformateur"
@@ -23147,10 +23245,10 @@ msgid "Palaeontological Site"
 msgstr "Site paléontologique"
 
 msgid "Grave"
-msgstr ""
+msgstr "Tombe"
 
 msgid "Tomb"
-msgstr "Tombe"
+msgstr "Tombeau"
 
 msgctxt "tomb"
 msgid "tumulus"
@@ -23158,7 +23256,7 @@ msgstr "tumulus"
 
 msgctxt "tomb"
 msgid "rock-cut"
-msgstr ""
+msgstr "Tombe creusée dans la roche"
 
 msgctxt "tomb"
 msgid "hypogeum"
@@ -23166,7 +23264,7 @@ msgstr "hypogée"
 
 msgctxt "tomb"
 msgid "war_grave"
-msgstr ""
+msgstr "Cimetière militaire"
 
 msgctxt "tomb"
 msgid "mausoleum"
@@ -23174,7 +23272,7 @@ msgstr "mausolée"
 
 msgctxt "tomb"
 msgid "columbarium"
-msgstr ""
+msgstr "Columbarium"
 
 msgctxt "tomb"
 msgid "crypt"
@@ -23190,7 +23288,7 @@ msgstr "sarcophage"
 
 msgctxt "tomb"
 msgid "vault"
-msgstr ""
+msgstr "Caveau"
 
 msgid "Monument"
 msgstr "Grand monument commémoratif"
@@ -23272,7 +23370,7 @@ msgid "Dairy"
 msgstr "Laiterie"
 
 msgid "Cheese"
-msgstr ""
+msgstr "Fromage"
 
 msgid "Deli (Fine Food)"
 msgstr "Épicerie fine"
@@ -23509,7 +23607,7 @@ msgid "Variety Store"
 msgstr "Divers"
 
 msgid "Charity"
-msgstr ""
+msgstr "Association caritative"
 
 msgid "Bookmaker"
 msgstr "Bookmaker"
@@ -23973,7 +24071,7 @@ msgid "Suburb"
 msgstr "Banlieue"
 
 msgid "Quarter"
-msgstr ""
+msgstr "Quartier"
 
 msgid "Neighbourhood"
 msgstr "Voisinage"
@@ -24342,7 +24440,7 @@ msgid "Plant Nursery"
 msgstr "Pépinière"
 
 msgid "Salt Pond"
-msgstr ""
+msgstr "Saline"
 
 msgid "Aquaculture"
 msgstr "Aquaculture"
@@ -24409,11 +24507,11 @@ msgstr "briqueterie"
 
 msgctxt "industrial"
 msgid "depot"
-msgstr ""
+msgstr "Depot"
 
 msgctxt "industrial"
 msgid "distributor"
-msgstr ""
+msgstr "Distributeur"
 
 msgctxt "industrial"
 msgid "factory"
@@ -24425,11 +24523,11 @@ msgstr "broyeur"
 
 msgctxt "industrial"
 msgid "heating_station"
-msgstr ""
+msgstr "Usine de chauffage"
 
 msgctxt "industrial"
 msgid "machine_shop"
-msgstr ""
+msgstr "Entreprise d usinage"
 
 msgctxt "industrial"
 msgid "mine"
@@ -24437,7 +24535,7 @@ msgstr "mine"
 
 msgctxt "industrial"
 msgid "oil"
-msgstr ""
+msgstr "Pétrolier"
 
 msgctxt "industrial"
 msgid "port"
@@ -24445,15 +24543,15 @@ msgstr "port"
 
 msgctxt "industrial"
 msgid "salt_pond"
-msgstr ""
+msgstr "saline"
 
 msgctxt "industrial"
 msgid "sawmill"
-msgstr ""
+msgstr "scierie"
 
 msgctxt "industrial"
 msgid "scrap_yard"
-msgstr ""
+msgstr "Casse Ferrailleur"
 
 msgctxt "industrial"
 msgid "shipyard"
@@ -24465,7 +24563,7 @@ msgstr "abattoir"
 
 msgctxt "industrial"
 msgid "warehouse"
-msgstr ""
+msgstr "entrepôt"
 
 msgid "Garages"
 msgstr "Garages"
@@ -24540,10 +24638,10 @@ msgid "Country code"
 msgstr "Indicatif du pays"
 
 msgid "Unit/Suite"
-msgstr ""
+msgstr "Unité/Suite"
 
 msgid "House name"
-msgstr "Nom"
+msgstr "Nom de maison"
 
 msgid "Subdistrict"
 msgstr "Sousdistrict"
@@ -24842,10 +24940,10 @@ msgid "Outline of building"
 msgstr "Grandes lignes du bâtiment"
 
 msgid "Inner segment"
-msgstr "Segment interne"
+msgstr "Segment intérieur"
 
 msgid "Roof ridge"
-msgstr "Arête de toit"
+msgstr "Faîtage"
 
 msgid "Roof edge"
 msgstr "Bord de toit"
@@ -24957,19 +25055,19 @@ msgstr "Itinéraire cycliste"
 
 msgctxt "network"
 msgid "international"
-msgstr ""
+msgstr "international"
 
 msgctxt "network"
 msgid "national"
-msgstr ""
+msgstr "national"
 
 msgctxt "network"
 msgid "regional"
-msgstr ""
+msgstr "régional"
 
 msgctxt "network"
 msgid "local"
-msgstr ""
+msgstr "local"
 
 msgid "Mountain Biking Route"
 msgstr "Itinéraire de vélo tout-terrain (VTT)"
@@ -25168,15 +25266,36 @@ msgid ""
 "select regions filled with +Vivid or custom area of interest imagery, 50cm "
 "resolution or better, and refreshed more frequently with ongoing updates."
 msgstr ""
+"DigitalGlobe-Premium est une mosaique composée de fond de carte Digital "
+"Globe avec certaines régions ou zone d intérêt utilisant l imagerie +Vivid , "
+"résolution 50cm ou mieux, et actualiséesplus fréquemment avec les mises a "
+"jour en cours de réalisation"
+
+msgid "DigitalGlobe Premium Imagery Vintage"
+msgstr "DigitalGlobe Premium imagerie Vintage"
+
+msgid ""
+"Imagery boundaries and capture dates. Labels appear at zoom level 14 and "
+"higher."
+msgstr ""
+"Limites d imagerie et dates de prise de vue. Les labels apparaissent au "
+"niveau de zoom 14 et supérieur."
 
 msgid "DigitalGlobe Standard Imagery"
-msgstr "Imagerie Standart DigitalGlobe"
+msgstr "Imagerie Standard 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 ""
+"DigitalGlobe-Standard est un assemblage organisé d''imagerie couvrant 86% de "
+"la surface de la Terre, avec une résolution de 30-60cm lorsque disponible, "
+"sauf zones d''ombres couvertes par Landsat. L''âge moyen est de 2.31 ans, "
+"certaines zones mises à jour 2x par an."
+
+msgid "DigitalGlobe Standard Imagery Vintage"
+msgstr "DigitalGlobe Standard imagerie Vintage"
 
 msgid "Esri World Imagery"
 msgstr "Images mondiales Esri"
@@ -25212,7 +25331,7 @@ msgid "Public GPS traces uploaded to OpenStreetMap."
 msgstr "Traces GPS publiques téléchargées sur OpenStreetMap."
 
 msgid "OpenTopoMap"
-msgstr ""
+msgstr "OpenTopoMap"
 
 msgid "Public Transport (ÖPNV)"
 msgstr "Transport Public (ÖPNV)"
@@ -25227,7 +25346,7 @@ msgid "Stamen Terrain"
 msgstr "Stamen Terrain"
 
 msgid "Cambodia, Laos, Thailand, Vietnam, Malaysia, Myanmar bilingual"
-msgstr ""
+msgstr "Cambodge, Laos, Thailande, Vietnam, Malaisie, Birmanie bilingue"
 
 msgid "OpenPT Map (overlay)"
 msgstr "Surcouche OpenPT Map"
@@ -25241,6 +25360,12 @@ msgstr "Carte de chaleur piéton de Strava"
 msgid "Strava cycling and running heatmap"
 msgstr "Strava − Carte de chaleur vélo et course à pied"
 
+msgid "Strava water sports heatmap"
+msgstr "Carte d activité Strava de sport d eau"
+
+msgid "Strava winter sports heatmap"
+msgstr "Carte d activité Strava de sport d hiver"
+
 msgid "Locator Overlay"
 msgstr "Surcouche Localisation"
 
@@ -25306,11 +25431,13 @@ msgstr ""
 "par les nuages et la neige (couleur vraie)"
 
 msgid "Municipality of Tirana (Open Labs GeoPortal)"
-msgstr ""
+msgstr "Municipalité de Tirana (Géoportail Open Labs)"
 
 msgid ""
 "Streets & Builings provided by the Muncipality of Tirana hosted by Open Labs"
 msgstr ""
+"Rues et batiments fournis par la municipalité de Tirana hébergés par Open "
+"Labs"
 
 msgid "imagico.de OSM images for mapping: Southern Transantarctic Mountains"
 msgstr ""
@@ -25355,34 +25482,34 @@ msgid "IGN topographical map (WMS)"
 msgstr "Carte topographique IGN (WMS)"
 
 msgid "IGN orthophoto AMBA a (WMTS)"
-msgstr ""
+msgstr "Orthophoto IGN AMBA a (WMTS)"
 
 msgid "IGN orthophoto AMBA b (WMTS)"
-msgstr ""
+msgstr "Orthophoto IGN AMBA b (WMTS)"
 
 msgid "IGN orthophoto AMBA c (WMTS)"
-msgstr ""
+msgstr "Orthophoto IGN AMBA c (WMTS)"
 
 msgid "IGN orthophoto AMBA d (WMTS)"
-msgstr ""
+msgstr "Orthophoto IGN AMBA d (WMTS)"
 
 msgid "IGN orthophoto AMBA e (WMTS)"
-msgstr ""
+msgstr "Orthophoto IGN AMBA e (WMTS)"
 
 msgid "IGN orthophoto AMBA f (WMTS)"
-msgstr ""
+msgstr "Orthophoto IGN AMBA f (WMTS)"
 
 msgid "IGN orthophoto AMBA 4 (WMTS)"
-msgstr ""
+msgstr "Orthophoto IGN AMBA 4 (WMTS)"
 
 msgid "IGN orthophoto AMBA 5 (WMTS)"
-msgstr ""
+msgstr "Orthophoto IGN AMBA 5 (WMTS)"
 
 msgid "IGN orthophoto AMBA 6 (WMTS)"
-msgstr ""
+msgstr "Orthophoto IGN AMBA 6 (WMTS)"
 
 msgid "IGN orthophoto AMBA 7 (WMTS)"
-msgstr ""
+msgstr "Orthophoto IGN AMBA 7 (WMTS)"
 
 msgid "IGN orthophoto Barranqueras (WMTS)"
 msgstr "Orthophoto IGN de Barranqueras (WMTS)"
@@ -25488,7 +25615,7 @@ msgstr ""
 "Imagerie imagico.de pour la cartographie OSM: Bahía Blanca (marée basse)"
 
 msgid "Tidal flats and islands at the coast (true color)"
-msgstr ""
+msgstr "Estrans et iles de la cote (vraies couleurs)"
 
 msgid "imagico.de OSM images for mapping: Bahía Blanca (high tide)"
 msgstr ""
@@ -25516,7 +25643,7 @@ msgid "LPI NSW Administrative Boundaries County"
 msgstr "LPI NSW Limites administratives County"
 
 msgid "LPI NSW Administrative Boundaries Parish"
-msgstr "LPI NSW Limite administrative paroisiale"
+msgstr "LPI NSW Limites administratives paroissiales"
 
 msgid "LPI NSW Administrative Boundaries State Forest"
 msgstr "LPI NSW Limites administratives State Forest"
@@ -25525,7 +25652,7 @@ msgid "LPI NSW Administrative Boundaries NPWS Reserve"
 msgstr "LPI NSW Limite administrative réserve NPWS"
 
 msgid "imagico.de OSM images for mapping: Northwest Heard Island"
-msgstr ""
+msgstr "Imagico.de OSM images pour la cartographie: Île Heard du nord-ouest"
 
 msgid ""
 "Glaciers of Northwest Heard Island (mapped meanwhile) (false color IR)"
@@ -25592,13 +25719,13 @@ msgid "VoGIS: Echtfarbenbild Winter 2015 (20cm)"
 msgstr "VoGIS : « Couleurs vraies » Hiver 2015 (20 cm)"
 
 msgid "VoGIS: Echtfarbenbild 2015 (10cm)"
-msgstr "VoGIS: L’image couleur 2015 (10cm)"
+msgstr "VoGIS : « Image en Couleurs vraies » 2015 (10 cm)"
 
 msgid "VoGIS: Flächenwidmungsplan"
 msgstr "VoGIS : Plan de zonage"
 
 msgid "VoGIS: Höhen und Gelände"
-msgstr "VoGIS: hauteur et terrain"
+msgstr "VoGIS: Hauteurs et terrain"
 
 msgid "imagico.de OSM images for mapping: Rila and Pirin Mountains"
 msgstr ""
@@ -25664,6 +25791,9 @@ msgstr "Imagerie numérique SPW(allonie) PICC"
 msgid "SPW(allonie) most recent aerial imagery"
 msgstr "Imagerie aérienne SPW(allonie) images les plus récentes"
 
+msgid "SPW(allonie) 2016 aerial imagery"
+msgstr "SPW(allonie) Imagerie aérienne 2016"
+
 msgid "SPW(allonie) 2015 aerial imagery"
 msgstr "Imagerie aérienne SPW(allonie) 2015"
 
@@ -25674,7 +25804,7 @@ msgid "SPW(allonie) 2009-2010 aerial imagery"
 msgstr "Imagerie aérienne SPW(allonie) 2009-2010"
 
 msgid "SPW(allonie) shaded relief"
-msgstr ""
+msgstr "Relief SPW(allonie)"
 
 msgid "TEC bus lines"
 msgstr "Lignes du réseau TEC"
@@ -25713,6 +25843,16 @@ msgstr "IBGE District fédéral"
 msgid "Addresses data from IBGE"
 msgstr "Données d’adresses de IBGE"
 
+msgid "Street names IBGE Salvador-BA"
+msgstr "Nom de rues IBGE Salvador-BA"
+
+msgid ""
+"Streets geometry and names of Salvador, Bahia. Source: Faces de Logradouro - "
+"IBGE."
+msgstr ""
+"Géométrie et nom des rues de Salvador,Bahia. Sources: Faces dr Logradouro - "
+"IBGE."
+
 msgid "Rio Mosaic 2013"
 msgstr "Mosaïque Rio 2013"
 
@@ -25798,34 +25938,34 @@ msgid "DER-ES"
 msgstr "DER-ES"
 
 msgid "IBGE-BC250 Isolated Rural Location"
-msgstr ""
+msgstr "IBGE-BC250 Lieux ruraux isolés"
 
 msgid "IBGE-BC250 Landing strip"
-msgstr ""
+msgstr "IBGE-BC250 Pistes d atterissage"
 
 msgid "IBGE-BC250 River drains"
-msgstr ""
+msgstr "IBGE-BC250 Rivières Fossés"
 
 msgid "IBGE-BC250 Highways stretches"
-msgstr ""
+msgstr "IBGE-BC250 Portions de route"
 
 msgid "IBGE-BC250 Indigenous Lands"
-msgstr ""
+msgstr "IBGE-BC250 Territoires indigènes"
 
 msgid "IBGE-BC250 Public Land (Military)"
-msgstr ""
+msgstr "IBGE-BC250 Terrain gouvernemental (Militaire)"
 
 msgid "IBGE-BC250 Units of Sustainable Use - APA"
-msgstr ""
+msgstr "IBGE-BC250 Unités d utilisation durable"
 
 msgid "IBGE-BC250 Villages"
-msgstr ""
+msgstr "IBGE-BC250 Villages"
 
 msgid "IBGE-BCIM Stations for Electrical Power Generation"
-msgstr ""
+msgstr "IBGE-BCIM Centrales de production d électrécité"
 
 msgid "IBGE-BCIM Municipalities"
-msgstr ""
+msgstr "IBGE-BCIM Municipalités"
 
 msgid "Geobase Hydrography"
 msgstr "Hydrographie Geobase"
@@ -25860,24 +26000,32 @@ msgstr "Surcouche Routes Kelowna"
 
 msgid "imagico.de OSM images for mapping: Eastern Devon Island coast"
 msgstr ""
+"imagico.de imagerie pour la cartographie OSM: côte Est de l''Île Devon"
 
 msgid "Coastline mostly mapped meanwhile (false color IR)"
 msgstr "Le littoral est principalement mappé entre-temps (fausse couleur IR)"
 
 msgid "imagico.de OSM images for mapping: Northern Ellesmere Island"
 msgstr ""
+"imagico.de imagerie pour la cartographie OSM: Nord de l’Île d’Ellesmere"
 
 msgid ""
 "Assembled from July 2012 ASTER imagery (true color with estimated blue)"
 msgstr ""
+"Assemblé à partir de l imagerie ASTER Juillet 2012 (vraie couleurs avec bleu "
+"estimé)"
 
 msgid ""
 "imagico.de OSM images for mapping: Northern Ellesmere Island July 2016"
 msgstr ""
+"imagico.de imagerie pour la cartographie OSM: Nord de l’Île d’Ellesmere "
+"Juillet 2016"
 
 msgid ""
 "Assembled from July 2016 ASTER imagery (true color with estimated blue)"
 msgstr ""
+"Assemblé a partir de l imagerie ASTER Juillet 2016 (vraies couleurs avec "
+"bleu estimé)"
 
 msgid "imagico.de OSM images for mapping: Fogo, Cape Verde"
 msgstr "Imagerie imagico.de pour la cartographie OSM: Fogo, Cap-Vert"
@@ -25892,6 +26040,9 @@ msgid ""
 "A lot of very coarse coastlines could be improved here, much snow cover "
 "though so no use for glacier mapping (false color IR)"
 msgstr ""
+"Un grand nombre de lignes de côte très grossières pourraient être "
+"améliorées, couverture neigeuse importante donc ne pas utiliser pour "
+"cartographier les glaciers (fausses couleurs infrarouges)"
 
 msgid "imagico.de OSM images for mapping: Volcán Calbuco"
 msgstr "Imagerie imagico.de pour la cartographie OSM: volcan Calbuco"
@@ -25912,34 +26063,34 @@ msgid "Czech pLPIS"
 msgstr "République tchèque pLPIS"
 
 msgid "Praha IPR latest orthophoto"
-msgstr ""
+msgstr "Dernière orthophoto Praha IPR"
 
 msgid "Praha IPR low-vegetation orthophoto"
-msgstr ""
+msgstr "Orthophoto Praha IPR végétation basse"
 
 msgid "SDFE aerial imagery"
 msgstr "Imagerie aérienne SDFE"
 
 msgid "SDFE Cadastral Parcels INSPIRE View"
-msgstr ""
+msgstr "Vue INSPIRE des parcelles cadastrales SDFE"
 
 msgid "SDFE DTK Kort25"
-msgstr ""
+msgstr "SDFE DTK Kort25"
 
 msgid "SDFE Terrain Shadow Map (40 cm)"
-msgstr ""
+msgstr "SDFE Terrain Shadow Map (40 cm)"
 
 msgid "SDFE Surface Shadow Map (40 cm)"
-msgstr ""
+msgstr "SDFE Surface Shadow Map (40 cm)"
 
 msgid "SDFE Skærmkort"
-msgstr ""
+msgstr "SDFE Skærmkort"
 
 msgid "Stevns"
 msgstr "Stevns"
 
 msgid "Vejmidte"
-msgstr ""
+msgstr "Vejmidte"
 
 msgid "imagico.de OSM images for mapping: El Altar"
 msgstr "Imagerie imagico.de pour la cartographie OSM: El Altar"
@@ -25948,6 +26099,8 @@ msgid ""
 "2007 ASTER image offering better glacier coverage than common sources (true "
 "color with estimated blue)"
 msgstr ""
+"Imagerie ASTER 2007 offrant une meilleur couverture des glaciers que les "
+"sources habituelles (vraies couleurs avec bleu estimé)"
 
 msgid "imagico.de OSM images for mapping: Darwin and Wolf islands, Galapagos"
 msgstr ""
@@ -25957,6 +26110,8 @@ msgid ""
 "Recent image, only old and poor images in other sources currently (true "
 "color)"
 msgstr ""
+"Imagerie récente, seulement de vieilles et pauvres images dans les autres "
+"sources actuelles (vraies couleurs)"
 
 msgid "Estonia Basemap (Maaamet)"
 msgstr "Carte de base estonienne (Maaamet)"
@@ -25995,10 +26150,10 @@ msgid "Cadastre"
 msgstr "Cadastre"
 
 msgid "French land registry"
-msgstr ""
+msgstr "Cadastre France"
 
 msgid "CRAIG - Auvergne 2016 - 25 cm"
-msgstr ""
+msgstr "CRAIG - Auvergne 2016 - 25 cm"
 
 msgid "CRAIG - Auvergne 2013 - 25 cm"
 msgstr "CRAIG - Auvergne 2013 - 25 cm"
@@ -26092,10 +26247,10 @@ msgid "Berlin aerial photograph 2017"
 msgstr "Photographie aérienne de Berlin 2017"
 
 msgid "Deutsche Bahn VzG lines Nov 2013"
-msgstr ""
+msgstr "Lignes VzG Deutsche Bahn 2013"
 
 msgid "Deutsche Bahn VzG lines Nov 2015"
-msgstr ""
+msgstr "Lignes VzG Deutsche Bahn 2015"
 
 msgid "Erlangen aerial imagery (2016 5.0 cm)"
 msgstr "Erlangen imagerie aérienne (2016 5.0 cm)"
@@ -26123,27 +26278,37 @@ msgstr "Metropole Ruhr: Luftbilder (10 cm)"
 msgid ""
 "imagico.de OSM images for mapping: Northern German west coast tidalflats"
 msgstr ""
+"Images OSM imagico.de pour la cartographie: Estrans de la cote Ouest d "
+"Allemagne du Nord"
 
 msgid ""
 "Up-to-date low tide imagery of the coast for updating mapping of tidalflats "
 "and shoals (true color)"
 msgstr ""
+"Imagerie de marée basse a jour pour mettre a jour la cartographie des "
+"estrans et des haut-fonds (vraies couleurs)"
 
 msgid ""
 "imagico.de OSM images for mapping: Northern German west coast tidalflats "
 "(infrared)"
 msgstr ""
+"Images OSM de imagico.de pour la cartographie: estrans de la côte ouest d "
+"Allemagne du nord (infrarouge)"
 
 msgid ""
 "Up-to-date low tide imagery of the coast for updating mapping of tidalflats "
 "and shoals (false color IR)"
 msgstr ""
+"Imagerie a jour de la cote a marée basse pour mettre a jour la cartographie "
+"des estrans et hauts-fonds (fausses couleurs infrarouges)"
 
 msgid "imagico.de OSM images for mapping: North Sea Coast 2016"
 msgstr ""
+"Images OSM de imagico.de pour la cartographie: Côte de la Mer du Nord 2016"
 
 msgid "imagico.de OSM images for mapping: North Sea Coast 2017"
 msgstr ""
+"Images OSM de imagico.de pour la cartographie: Côte de la Mer du Nord 2017"
 
 msgid "Saxony latest aerial imagery"
 msgstr "Dernière image aérienne de la Saxe"
@@ -26158,7 +26323,7 @@ msgid "Saxony historical aerial imagery 2005"
 msgstr "Image aérienne historique de la Saxe 2005"
 
 msgid "Saxony WebAtlasSN"
-msgstr ""
+msgstr "WebAtlasSN de Saxe"
 
 msgid "Saxony topographic map"
 msgstr "Carte topographique de la Saxe"
@@ -26167,10 +26332,10 @@ msgid "Saxony digital terrain model"
 msgstr "Modèle digitale du terrain de la Saxe"
 
 msgid "Mainz all aerial imageries"
-msgstr ""
+msgstr "Toute l imagerie aérienne de Mayence"
 
 msgid "Mainz latest aerial imagery"
-msgstr ""
+msgstr "Dernière imagerie aérienne de Mayence"
 
 msgid "Munich latest aerial imagery 60cm"
 msgstr "Munich: dernière image aérienne 60 cm"
@@ -26179,73 +26344,96 @@ msgid "imagico.de OSM images for mapping: Qasigiannguit"
 msgstr "Imagerie imagico.de pour la cartographie OSM: Qasigiannguit"
 
 msgid "Icebridge DMS image of the settlement - alignment might be poor"
-msgstr ""
+msgstr "Icebridge DMS image de la colonie - l alignement peut être faible"
 
 msgid "imagico.de OSM images for mapping: Thule Air Base"
 msgstr "Imagerie imagico.de pour la cartographie OSM: base aérienne de Thulé"
 
 msgid "Icebridge DMS image - alignment might be poor"
-msgstr ""
+msgstr "Icebridge DSM image - l alignement peut être faible"
 
 msgid "imagico.de OSM images for mapping: Kangerlussuaq Autumn"
 msgstr ""
+"Imagerie OSM de imagico.de pour la cartographie: Kangerlussuaq Automne"
 
 msgid ""
 "Icebridge DMS image of the airport and settlement - alignment might be poor"
 msgstr ""
+"Icebridge DSM image de la colonie et de l aéroport - l alignement peut être "
+"faible"
 
 msgid "imagico.de OSM images for mapping: Kangerlussuaq Spring"
 msgstr ""
+"Imagerie OSM de imagico.de pour la cartographie: Kangerlussuaq Printemps"
 
 msgid ""
 "Icebridge DMS image of the airport and roads - alignment might be poor"
 msgstr ""
+"Icebridge DSM imagerie de l aéroport et des routes - l alignement peut être "
+"faible"
 
 msgid ""
 "imagico.de OSM images for mapping: Thule Airbase DMS low altitude overflight "
 "September 2015"
 msgstr ""
+"Imagerie OSM de imagico.de pour la cartographie: DMS base aérienne de "
+"Thule,survol a basse altitude Septembre 2015"
 
 msgid ""
 "Icebridge DMS aerial images from Thule Airbase - alignment might be poor"
 msgstr ""
+"Icebridge DSM imagerie de la base aėrienne de Thule - l alignement peut être "
+"faible"
 
 msgid ""
 "imagico.de OSM images for mapping: Thule Airbase DMS overflight September "
 "2015"
 msgstr ""
+"Images OSM de imagico.de pour la cartographie: Base aérienne de Thule, "
+"survol Septembre 2015"
 
 msgid ""
 "imagico.de OSM images for mapping: Thule Airbase DMS overflight October 2015"
 msgstr ""
+"Images OSM de imagico.de pour la cartographie: base aérienne de Thule, "
+"survol Octobre 2015"
 
 msgid "imagico.de OSM images for mapping: Greenland mosaic"
-msgstr ""
+msgstr "Images OSM de imagico.de pour la cartographie: mosaïque du Groenland"
 
 msgid "Landsat mosaic of Greenland (true color)"
-msgstr ""
+msgstr "Mosaïque Landsat du Groenland (vraies couleurs)"
 
 msgid "imagico.de OSM images for mapping: May 2013 off-nadir Landsat"
 msgstr ""
+"Images OSM de imagico.de pour la cartographie: mai 2013 off-nadir Landsat"
 
 msgid ""
 "First available image north of the regular Landsat limit, mostly with "
 "seasonal snow cover so difficult to interpret (true color)"
 msgstr ""
+"Première image disponible au nord de la limite normale de Landsat, "
+"principalemeny avec la couverture neigeuse saisonnière dobc difficile a "
+"interpréter (vraies couleurs)"
 
 msgid "imagico.de OSM images for mapping: Landsat off-nadir July 2016"
 msgstr ""
+"Images OSM de imagico.de pour la cartographie: Landsat off-nadir Juillet 2016"
 
 msgid "Latest images north of the regular Landsat limit (true color)"
 msgstr ""
+"Dernières images au nord de la limite standard de Landsat (vraie couleur)"
 
 msgid "imagico.de OSM images for mapping: Northern Greenland ASTER"
 msgstr ""
+"Imagerie OSM de imagico.de pour la cartographie: Nord Groenland ASTER"
 
 msgid ""
 "Assembled from mostly 2012 ASTER imagery, some 2005 images mainly in the "
 "northeast (true color with estimated blue)"
 msgstr ""
+"Assemblėe principalement a partir de l imagerie ASTER 2012, quelques images "
+"de 2005 principalement dans le nord-est (vraie couleur avec bleu estimé)"
 
 msgid "Drone Imagery (Haiti)"
 msgstr "Imagerie drone (Haïti)"
@@ -26269,37 +26457,37 @@ msgid "Szeged orthophoto 2011"
 msgstr "Orthophoto de Szeged 2011"
 
 msgid "Inner part of Szeged"
-msgstr ""
+msgstr "Partie intérieure de Szeged"
 
 msgid "Törökbálint orthophoto 2013"
 msgstr "Orthophoto de Törökbálint 2013"
 
 msgid "5 cm resolution bald image"
-msgstr ""
+msgstr "Imagerie désertique 5cm de résolution"
 
 msgid "Törökbálint orthophoto 2015"
 msgstr "Orthophoto de Törökbálint 2015"
 
 msgid "Danube flood orthophoto 2013"
-msgstr ""
+msgstr "Innondation du Danube othophoto 2013"
 
 msgid "Riverbank of Danube at Budapest, Szentendre and Szigetmonostor"
-msgstr ""
+msgstr "Berges du Danube a Budapest, Szentebdre et Szigetmonostor"
 
 msgid "Budapest district XI orthophoto 2015"
-msgstr ""
+msgstr "District XI de Budapest orthophoto 2015"
 
 msgid "Budapest district XI orthophoto 2017"
-msgstr ""
+msgstr "District XI de Budapest orthophoto 2017"
 
 msgid "Sóskút, Pusztazámor, Tárnok, Diósd orthophoto 2017"
-msgstr ""
+msgstr "Sóskút, Pusztazámor, Tárnok, Diósd orthophoto 2017"
 
 msgid "5 cm resolution bald image of 4 settlement"
-msgstr ""
+msgstr "Imagerie dėsertique de 4 colonies 5cm de rėsolution"
 
 msgid "openstreetmap.hu orthophotos"
-msgstr ""
+msgstr "Orthophotos de openstreetmap.hu"
 
 msgid "OpenStreetMap Hungary (hiking routes)"
 msgstr "OpenStreetMap Hongrie (chemins de randonnée)"
@@ -26311,7 +26499,7 @@ msgid "imagico.de OSM images for mapping: Eastern Iceland"
 msgstr "Imagerie imagico.de pour la cartographie OSM: Est de l’Islande"
 
 msgid "Missing islets and inaccurate coast (true color)"
-msgstr ""
+msgstr "Ilôts manquant et côte inexacte/imprécise (vraie couleur)"
 
 msgid "imagico.de OSM images for mapping: Rann of Kutch"
 msgstr "Imagerie imagico.de pour la cartographie OSM: Rann de Kutch"
@@ -26320,6 +26508,8 @@ msgid ""
 "Land/water distinction difficult to properly map based on Bing/Mapbox images "
 "(false color IR)"
 msgstr ""
+"Distinction Terre/Eau difficile pour cartogrophier correctement sur les "
+"images Bing/Mapbox (fausses couleurs infrarouge)"
 
 msgid "imagico.de OSM images for mapping: Sudirman Range 2015"
 msgstr ""
@@ -26329,33 +26519,41 @@ msgid ""
 "Older image of the Sudirman Range with no fresh snow showing glacier extent "
 "(true color)"
 msgstr ""
+"Plus anciennes images de la chaîne du Sudirman sans neige fraiche montrant l "
+"étendue des glaciers (vraies couleurs)"
 
 msgid "imagico.de OSM images for mapping: Southeastern Sulawesi"
-msgstr ""
+msgstr "Images OSM de imagico.de pour la cartographie: Sud Est de Célèbes"
 
 msgid ""
 "Missing islands and coarse coastline due to cloud cover in Bing, lakes could "
 "also use additional detail (true color)"
 msgstr ""
+"Iles manquantes et ligne de côte grossière a cause de la couverture nuageuse "
+"dans Bing, les lacs pourraient aussi utiliser des détails additionnels "
+"(vraies couleurs)"
 
 msgid "imagico.de OSM images for mapping: Bakun Reservoir"
 msgstr "Imagerie imagico.de pour la cartographie OSM: Barrage de Bakun"
 
 msgid "Missing in older pre-2011 images (true color)"
-msgstr ""
+msgstr "Manquant dans les anciennes images pre 2011 (vraies couleurs)"
 
 msgid "imagico.de OSM images for mapping: Batam"
 msgstr "Imagerie imagico.de pour la cartographie OSM: Batam"
 
 msgid "Missing Islands in OSM (true color)"
-msgstr ""
+msgstr "Iles manquantes dans OSM (vraies couleurs)"
 
 msgid "imagico.de OSM images for mapping: Sudirman Range 2016"
 msgstr ""
+"Images OSM de imagico.de pour la cartographie: Chaîne du Sudirman 2016"
 
 msgid ""
 "Cloud free image of the Sudirman Range but with fresh snow (true color)"
 msgstr ""
+"Images sans nuages de la chaîne du Sudirman mais avec de la neige fraiche "
+"(vraies couleurs)"
 
 msgid "Ireland British War Office 1:25k GSGS 3906"
 msgstr "Irlande Bureau de la guerre britannique 1:25k GSGS 3906"
@@ -26391,19 +26589,19 @@ msgid "OSMIE Dail Election Areas"
 msgstr "Zone d''élection Dail OSMIE"
 
 msgid "OSMIE T.ie Land not in Counties"
-msgstr ""
+msgstr "0SMIE T.ie Terres non dans les Comtés"
 
 msgid "Israel Hiking"
-msgstr ""
+msgstr "Randonnée en Israel"
 
 msgid "Israel Hiking map"
-msgstr ""
+msgstr "Carte de Randonnée en Israel"
 
 msgid "Israel MTB"
-msgstr ""
+msgstr "Israel VTT"
 
 msgid "Israel MTB map"
-msgstr ""
+msgstr "Israel carte de VTT"
 
 msgid "Lodi - Italy"
 msgstr "Lodi - Italie"
@@ -26436,6 +26634,8 @@ msgid ""
 "Orthophoto of South Tyrol from 2011 with up to 20cm resolution (larger "
 "valleys)"
 msgstr ""
+"Orthophoto du Sud Tyrol de 2011 avec jusqu a 20cm de rėsolution (vallés les "
+"plus larges)"
 
 msgid "South Tyrol Orthofoto 2014"
 msgstr "Orthophoto du Sud Tyrol 2014"
@@ -26447,30 +26647,37 @@ msgid "South Tyrol Topomap"
 msgstr "Carte topographique Sud Tyrol"
 
 msgid "Topographical basemap of South Tyrol"
-msgstr ""
+msgstr "Fond de carte topographique du Sud Tyrol"
 
 msgid "Japan GSI ortho Imagery"
+msgstr "Imagerie ortho du Japon GSI"
+
+msgid "Japan GSI Standard Map"
 msgstr ""
 
 msgid "imagico.de OSM images for mapping: Aral Sea (low water level)"
 msgstr ""
+"Images OSM de imagico.de pour la cartographie: Mer d Aral (niveau d eau bas)"
 
 msgid "Water and wetland extents, dams etc. (true color)"
-msgstr ""
+msgstr "Eau et zones humides,barrages etc (vraies couleurs)"
 
 msgid "imagico.de OSM images for mapping: Aral Sea (high water level)"
 msgstr ""
+"Images OSM de imagico.de pour la cartographie: Mer d Aral (haut niveau d eau)"
 
 msgid ""
 "Water and wetland extents, dams etc. - some remaining winter ice in the "
 "north (true color)"
 msgstr ""
+"Etendues d eau et zones humides,barrages etc - quelques glaces d hiver "
+"persistentes dans le nord (vraies couleurs)"
 
 msgid "imagico.de OSM images for mapping: Mount Kenya 2016"
 msgstr "Imagerie imagico.de pour la cartographie OSM: Mont Kenya 2016"
 
 msgid "Up-to-date image for glacier mapping (true color)"
-msgstr ""
+msgstr "Images a jour pour la cartographie des glaciers (vraies couleurs)"
 
 msgid "USSR - Latvia"
 msgstr "USSR - Lettonie"
@@ -26481,17 +26688,20 @@ msgstr "50 cm ortho - Lettonie"
 msgid "20cm ortho - Latvia - Coastline"
 msgstr "20 cm ortho - Lettonie - Ligne de côte"
 
-msgid "1.cikla ortofotokarte - Latvia"
+msgid "Orthophoto 1st cycle (1994-1999) - Latvia"
 msgstr ""
 
 msgid "ORT10LT (Lithuania)"
-msgstr "ORT10LT (Lithuanie)"
+msgstr "ORT10LT (Lituanie)"
 
 msgid "geoportail.lu all layers"
 msgstr "geoportail.lu toutes les couches"
 
+msgid "geoportail.lu ortho latest"
+msgstr ""
+
 msgid "geoportail.lu ortho 2016"
-msgstr "geoportail.lu ortho 2016"
+msgstr ""
 
 msgid "Luxembourg Inspire Railway"
 msgstr "Luxembourg Inspire Chemin de fer"
@@ -26506,41 +26716,45 @@ msgid "Niger Delta Oct 2012 Landsat"
 msgstr "Delta du Niger Oct 2012 Landsat"
 
 msgid "INEGI Digital Map of Mexico (WMS)"
-msgstr ""
+msgstr "INEGI Carte numérique de Mexico (WMS)"
 
 msgid "PDOK aerial imagery Beeldmateriaal.nl 25cm"
-msgstr ""
+msgstr "PDOK imagerie aérienne Beeldmateriaal.nl 25cm"
 
 msgid ""
 "Nationwide data set 25cm resolution color aerial imagery of the most recent "
 "year."
 msgstr ""
+"Imagerie aérienne de l année la plus récente en couleur 25 cm de resolution "
+"a l ėchelle du pays"
 
 msgid "PDOK aerial imagery Beeldmateriaal.nl 25cm (WMTS)"
-msgstr ""
+msgstr "PDOK imagerie aérienne  Beeldmateriaal.nl 25cm (WMTS)"
 
 msgid "LINZ NZ Aerial Imagery"
-msgstr ""
+msgstr "LINZ NZ imagerie aérienne"
 
 msgid "LINZ NZ Topo50 Gridless Maps"
-msgstr ""
+msgstr "LINZ NZ Carte Topo50 sans grille"
 
 msgid "Svalbard -Orthophoto 2009/2011 EPSG:25833"
-msgstr ""
+msgstr "Svalbard -Orthophoto 2009/2011 EPSG:25833"
 
 msgid "imagico.de OSM images for mapping: Svalbard mosaic"
-msgstr ""
+msgstr "Images OSM de imagico.de pour la cartographie: mosaïque de Svalbard"
 
 msgid "Sentinel-2 mosaic of Svalbard (true color)"
-msgstr ""
+msgstr "Sentinel-2 mosaïque de Svalbard (vraie couleur)"
 
 msgid "imagico.de OSM images for mapping: Western Karakoram"
-msgstr ""
+msgstr "Images OSM de imagico.de pour la cartographie: Ouest de Karakoram"
 
 msgid ""
 "Represents approximately minimum snow cover so can be well used for glacier "
 "mapping (true color)"
 msgstr ""
+"Représente approximativement le minimum de couverture neigeuse donc peut "
+"être utilisée pour la cartographie des glaciers (vraies couleurs)"
 
 msgid "Gaza Strip - Pléiades - 2014/07/06"
 msgstr "Bande de Gaza - Pléiades - 2014/07/06"
@@ -26557,24 +26771,31 @@ msgid ""
 "New locks with less clouds than in the Sentinel-2 image - make sure to check "
 "image alignment (true color)"
 msgstr ""
+"Nouvelles prises avec moins de nuages que dans l imagerie Sentinel-2 - s "
+"assurer de vérifier l alignement de l image (vraies couleurs)"
 
 msgid "imagico.de OSM images for mapping: Panama Canal"
 msgstr "Imagerie imagico.de pour la cartographie OSM: Canal de Panama"
 
 msgid "Images of the new locks (but partly cloudy) (true color)"
 msgstr ""
+"Images de nouvelles prises (mais partiellement nuageuses) (vraies couleurs)"
 
 msgid "imagico.de OSM images for mapping: Vanatinai"
 msgstr "Imagerie imagico.de pour la cartographie OSM: Vanatinai"
 
 msgid "Coarse coastline due to cloud cover in Bing/Mapbox (true color)"
 msgstr ""
+"Ligne de côte grossière a cause de la couverture nuageuse de Bing/Mapbox "
+"(vraies couleurs)"
 
 msgid "imagico.de OSM images for mapping: New Ireland"
 msgstr "Imagerie imagico.de pour la cartographie OSM: Nouvelle-Irlande"
 
 msgid "Many missing islands in OSM (mostly mapped meanwhile) (true color)"
 msgstr ""
+"Beaucoup d îles manquantes dans OSM (la plupart mappées entretemps) (vraies "
+"couleurs)"
 
 msgid "imagico.de OSM images for mapping: Coropuna"
 msgstr "Imagerie imagico.de pour la cartographie OSM: Coropuna"
@@ -26586,22 +26807,22 @@ msgstr ""
 "glacier Quelccaya"
 
 msgid "Poor and outdated imagery in other sources (true color)"
-msgstr ""
+msgstr "Imagerie pauvre et dépassée dans d autres sources (vraies couleurs)"
 
 msgid "Pangasinán/Bulacan (Philippines HiRes)"
-msgstr ""
+msgstr "Pangasinán/Bulacan (Philippines HiRes)"
 
 msgid "Geoportal 2: Ortofotomapa (aerial image)"
 msgstr "Geoportal 2 : Ortofotomapa (image aérienne)"
 
 msgid "Geoportal 2: Ortofotomapa (aerial image) WMTS"
-msgstr ""
+msgstr "Geoportal 2: Ortofotomapa (imagerie aérienne) WMTS"
 
 msgid "Geoportal 2: PRNG (geo names)"
-msgstr ""
+msgstr "Geoportal 2: PRNG (geo names)"
 
 msgid "Geoportal 2: ISOK hillshade"
-msgstr ""
+msgstr "Geoportal 2: ISOK hillshade"
 
 msgid "Będzin: Ortofotomapa 2013 (aerial image)"
 msgstr "Będzin : Ortofotomapa 2013 (image aérienne)"
@@ -26613,7 +26834,7 @@ msgid "Bytom: Ortofotomapa 2012 (aerial image)"
 msgstr "Bytom : Ortofotomapa 2012 (image aérienne)"
 
 msgid "Bytom: Fotoplan 2014 (aerial image)"
-msgstr ""
+msgstr "Bytom: Fotoplan 2014 (image aérienne)"
 
 msgid "Bytom: Budynki (buildings)"
 msgstr "Bytom : Budynki (bâtiments)"
@@ -26628,10 +26849,10 @@ msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
 msgstr "Częstochowa : Ortofotomapa 2011 (image aérienne)"
 
 msgid "Częstochowa: Ortofotomapa 2013 (aerial image)"
-msgstr ""
+msgstr "Częstochowa: Ortofotomapa 2013 (image aérienne)"
 
 msgid "Częstochowa: Ortofotomapa 2014 (aerial image)"
-msgstr ""
+msgstr "Częstochowa: Ortofotomapa 2014 (image aérienne)"
 
 msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
 msgstr "Gliwice : Ortofotomapa 2013 (image aérienne)"
@@ -26664,7 +26885,7 @@ msgid "Powiat poznański: Budynki (buildings)"
 msgstr "Powiat poznański: Budynki (bâtiments)"
 
 msgid "Powiat poznański: Ortofotomapa (Aerial image)"
-msgstr ""
+msgstr "Powiat poznański: Ortofotomapa (image aérienne)"
 
 msgid "Powiat ropczycko-sędziszowski: Budynki (buildings)"
 msgstr "Powiat de Ropczycko-Sędziszowski: bâtiments"
@@ -26679,7 +26900,7 @@ msgid "Powiat stalowowolski: Budynki (buildings)"
 msgstr "Powiat stalowowolski: Budynki (bâtiments)"
 
 msgid "Poznań: Ortofotomapa 2014 (aerial image)"
-msgstr ""
+msgstr "Poznań: Ortofotomapa 2014 (image aérienne)"
 
 msgid "Przemyśl: Budynki (buildings)"
 msgstr "Przemyśl: Budynki (bâtiments)"
@@ -26703,13 +26924,13 @@ msgid "Siemianowice Śląskie: Budynki (buildings)"
 msgstr "Siemianowice Śląskie: bâtiments"
 
 msgid "Świętochłowice: Ortofotomapa 2008 (aerial image)"
-msgstr ""
+msgstr "Świętochłowice: Ortofotomapa 2008 (image aérienne)"
 
 msgid "Świętochłowice: Ortofotomapa 2009 (aerial image)"
 msgstr "Świętochłowice: Ortofotomapa 2009 (image aérienne)"
 
 msgid "Świętochłowice: Ortofotomapa 2012 (aerial image)"
-msgstr ""
+msgstr "Świętochłowice: Ortofotomapa 2012 (image aérienne)"
 
 msgid "Zabrze: Ortofotomapa 2011 (aerial image)"
 msgstr "Zabrze: Ortofotomapa 2011 (image aérienne)"
@@ -26727,7 +26948,7 @@ msgid "imagico.de OSM images for mapping: Kerch Strait"
 msgstr "Imagerie imagico.de pour la cartographie OSM: Détroit de Kertch"
 
 msgid "State of bridge construction in August 2016 (true color)"
-msgstr ""
+msgstr "Etat de la construction du pont en Aout 2016 (vraies couleurs)"
 
 msgid "imagico.de OSM images for mapping: Pechora Sea Coast"
 msgstr "Imagerie imagico.de pour la cartographie OSM: Côte de Petchora"
@@ -26741,6 +26962,7 @@ msgstr "Imagerie imagico.de pour la cartographie OSM: Île Ouchakov août 2016"
 
 msgid "Up-to-date late summer imagery with few clouds (true color)"
 msgstr ""
+"Dernière imagerie d été à jour avec quelques nuages (vraies couleurs)"
 
 msgid "imagico.de OSM images for mapping: Northern Dvina delta at low tide"
 msgstr ""
@@ -26748,23 +26970,27 @@ msgstr ""
 "septentrionale à marée basse"
 
 msgid "Beaches, tidal flats and other costal forms (true color)"
-msgstr ""
+msgstr "Plages, estrans et autres formes côtières (vraies couleurs)"
 
 msgid ""
 "imagico.de OSM images for mapping: Northern and Polar Ural mountains August "
 "2016"
 msgstr ""
+"Images OSM de imagico.de pour la cartographie: Nord et montagnes polaires d "
+"Oural Aout 2016"
 
 msgid ""
 "Up-to-date late summer imagery with few clouds - caution: not all visible "
 "snow is glaciers (true color)"
 msgstr ""
+"Dernière imagerie d été a jour avec quelques nuages - attention: toute la "
+"neige visible n est pas des glaciers (vraies couleurs)"
 
 msgid "imagico.de OSM images for mapping: Vostochny Cosmodrome"
 msgstr "Imagerie imagico.de pour la cartographie OSM: Cosmodrome Vostochny"
 
 msgid "Recent image showing newest features (true color)"
-msgstr ""
+msgstr "Image récente montrant de nouvelles particularités (vraies couleurs)"
 
 msgid "Freemap.sk Car"
 msgstr "Freemap.sk Voiture"
@@ -26782,10 +27008,10 @@ msgid "Slovakia Historic Maps"
 msgstr "Cartes historiques de la Slovaquie"
 
 msgid "RABA-KGZ: Slovenia farmland use"
-msgstr ""
+msgstr "RABA-KGZ: terres cultivées de Slovénie"
 
 msgid "RABA-KGZ: Slovenia built-up areas"
-msgstr ""
+msgstr "RABA-KGZ: zones construites de Slovénie"
 
 msgid "City of Cape Town 2013 Aerial"
 msgstr "Métropole du Cap 2013 aérien"
@@ -26794,6 +27020,9 @@ msgid ""
 "OpenStreetMap use only. City of Cape Town Aerial ortho-photography of the "
 "municipal area. 12cm ground sample distance"
 msgstr ""
+"Utilisation seulement pour OpenStreetMap. ortho photographie aérienne de l "
+"aire municipale de la ville de Cape Town. distance d echantillonage au sol "
+"12cm"
 
 msgid "City of Cape Town 2015 Aerial"
 msgstr "Métropole du Cap 2015 aérien"
@@ -26802,24 +27031,28 @@ msgid ""
 "OpenStreetMap use only. City of Cape Town Aerial ortho-photography of the "
 "municipal area. 8cm ground sample distance"
 msgstr ""
+"Utilisation seulement pour OpenStreetMap. ortho photographie aérienne de l "
+"aire municipale de la ville de Cape Town. distance d echantillonage au sol "
+"8cm"
 
 msgid "South Africa CD:NGI Aerial"
 msgstr "Afrique du Sud CD:NGI Aérien"
 
 msgid "imagico.de OSM images for mapping: Leskov Island ASTER"
-msgstr ""
+msgstr "Imagerie OSM de imagico.de pour la cartographie: Ile de Leskov ASTER"
 
 msgid "Missing in other image sources (true color with estimated blue)"
 msgstr ""
+"Manquant dans les autres sources d image (vraies couleurs avec bleu estimé)"
 
 msgid "imagico.de OSM images for mapping: Scott Island"
 msgstr "Imagerie imagico.de pour la cartographie OSM: Île Scott"
 
 msgid "Missing in other image sources (true color)"
-msgstr ""
+msgstr "Manquant dans les autres sources d image (vraies couleurs)"
 
 msgid "imagico.de OSM images for mapping: Leskov Island Landsat"
-msgstr ""
+msgstr "Images OSM de imagico.de pour la cartographie: Ile Leskov Landsat"
 
 msgid "imagico.de OSM images for mapping: Clerke Rocks"
 msgstr "Imagerie imagico.de pour la cartographie OSM: Clerke Rocks"
@@ -26853,6 +27086,7 @@ msgstr "Imagerie imagico.de pour la cartographie OSM: Pont d’Adam"
 
 msgid "Supplementing incomplete coverage in other sources (true color)"
 msgstr ""
+"Complément a la couverture incomplète des autres sources (vraies couleurs)"
 
 msgid "Kanton Aargau 25cm (AGIS 2011)"
 msgstr "Canton d''Argovie 25 cm (AGIS 2011)"
@@ -26861,10 +27095,10 @@ msgid "Kanton Aargau 25cm (AGIS 2014)"
 msgstr "Canton d''Argovie 25 cm (AGIS 2014)"
 
 msgid "Kanton Aargau 25cm (AGIS 2016)"
-msgstr ""
+msgstr "Kanton Aargau 25cm (AGIS 2016)"
 
 msgid "Kanton Zürich Orthophotos 2014/2015 10cm"
-msgstr ""
+msgstr "Orthophotos du Canton de Zürich 2014/2015 10cm"
 
 msgid "Stadt Uster Orthophoto 2008 10cm"
 msgstr "Orthophotographie de la ville d''Uster, 2008 10 cm"
@@ -26874,15 +27108,16 @@ msgstr "Carte de ville de Zurich"
 
 msgid "Stadt Zürich Übersichtsplan (Strassen, Gebäude, Hausnummer)"
 msgstr ""
+"Plan général de la ville de Zürich (Rues, batiments, numero de maisons)"
 
 msgid "Stadt Zürich Luftbild 2011"
-msgstr ""
+msgstr "Vue aérienne de la ville de Zürich 2011"
 
 msgid "Canton Solothurn latest aerial imagery SOGIS RGB"
-msgstr ""
+msgstr "Dernière image aérienne du canton de Solothurn SOGIS RGB"
 
 msgid "Canton Solothurn latest aerial imagery SOGIS Infrared"
-msgstr ""
+msgstr "Dernière image aérienne du Canton de Solothurn SOGIS Infrarouge"
 
 msgid "Canton de Génève 5cm (SITG 2011)"
 msgstr "Canton de Génève 5 cm (SITG 2011)"
@@ -26924,10 +27159,10 @@ msgid "Fiez Orthophoto 2013"
 msgstr "Fiez Orthophoto 2013"
 
 msgid "Kanton Basel-Stadt 2015"
-msgstr ""
+msgstr "Canton de Bâle-Ville 2015"
 
 msgid "Kanton Basel-Stadt 2017"
-msgstr ""
+msgstr "Canton de Bâle-Ville 2017"
 
 msgid "Kanton Basel-Landschaft 10cm (2015)"
 msgstr "Kanton Basel-Landschaft 10cm (2015)"
@@ -26941,24 +27176,26 @@ msgid ""
 "Up-to-date image for glacier mapping - beware of some fresh snow at higher "
 "altitudes (true color)"
 msgstr ""
+"Image a jour pour la cartographie des glaciers - attention a la neige "
+"fraiche en haute altitude (vraies couleurs)"
 
 msgid "Taiwan e-Map Open Data"
 msgstr "Taïwan e-Map Données Ouvertes"
 
 msgid "Taiwan e-Map Open Data (with Contour Line)"
-msgstr ""
+msgstr "Taiwan e-Map Open Data (with Contour Line)"
 
 msgid "The emap from Taiwan National Land Surveying and Mapping Center"
-msgstr ""
+msgstr "eCarte du Taiwan National Land Surveying and Mapping Center"
 
 msgid "Taiwan Village Boundaries"
 msgstr "Délimitations des villages taiwanais"
 
 msgid "Taiwan Land-Section Data"
-msgstr ""
+msgstr "Taiwan Land-Section Data"
 
 msgid "NLSC Open Data WMTS"
-msgstr ""
+msgstr "NLSC Open Data WMTS"
 
 msgid "imagico.de OSM images for mapping: Mount Kilimanjaro 2016"
 msgstr "Imagerie imagico.de pour la cartographie OSM: Mont Kilimandjaro 2016"
@@ -26967,7 +27204,7 @@ msgid "Aşgabat (high resolution)"
 msgstr "Aşgabat (haute résolution)"
 
 msgid "MSR Maps Topo"
-msgstr ""
+msgstr "Carte topographique MSR"
 
 msgid "MSR Maps Urban"
 msgstr "MSR Carte urbaine"
@@ -26976,48 +27213,59 @@ msgid "USGS Topographic Maps"
 msgstr "Cartes topographiques de l''USGS"
 
 msgid "USGS Large Scale Imagery"
-msgstr ""
+msgstr "USGS Imagerie a Grande Echelle"
 
 msgid "TIGER Roads 2012"
-msgstr ""
+msgstr "TIGER Routes 2012"
 
 msgid "TIGER Roads 2014"
-msgstr ""
+msgstr "TIGER Routes 2014"
 
 msgid ""
 "At zoom level 16+, public domain map data from the US Census. At lower "
 "zooms, only changes since 2006 minus changes already incorporated into "
 "OpenStreetMap"
 msgstr ""
+"AU niveau de zoom 16+, données de carte du domaine publique par l US Census. "
+"Aux niveaux de zoom faibles, seulement les changements depuis 2006 moins les "
+"changements deja intégrées dans OpenStreetMap"
 
 msgid "TIGER Roads 2017"
-msgstr ""
+msgstr "TIGER Routes 2017"
 
 msgid ""
 "Yellow = Public domain map data from the US Census. Red = Data not found in "
 "OpenStreetMap"
 msgstr ""
+"Jaune = données de cartes du domaine public par l US Census. Rouge = Données "
+"non trouvées dans OpenStreetMap"
 
 msgid "MassGIS L3 Parcels"
-msgstr ""
+msgstr "MassGIS L3 Parcelles"
 
 msgid "NC Latest Orthoimagery"
-msgstr ""
+msgstr "NC dernière ortho imagerie"
 
 msgid ""
 "Most recent true color imagery for the state of North Carolina. The imagery "
 "has a pixel resolution of 6 inches and is comprised of imagery flown in "
 "2010, 2012, 2013, and 2014"
 msgstr ""
+"Imagerie en vraies couleurs la plus récente pour l Etat de Caroline du Nord. "
+"L imagerie a une resolution de 6 inches par pixel et fait partie des "
+"imageries de 2010, 2012, 2013 et 2014"
 
 msgid "NC Combined Orthoimagery"
-msgstr ""
+msgstr "NC Orthoimagerie combinée"
 
 msgid ""
 "This service represents orthoimagery collected from 1995-2013 for the state "
 "of North Carolina. The coverage area and pixel resolution varies for each "
 "year."
 msgstr ""
+"Ce service représente l orthoimagerie collectée de 1995 a 2013 pour l Etat "
+"de Caroline du Nord. La zone de couverture et la resolution varient pour "
+"chaque année"
 
 msgid "U.S. Forest Service roads"
 msgstr "Service forestier des routes (États-Unis)"
@@ -27029,6 +27277,8 @@ msgid ""
 "Recent summer image of the Alaska Range for mapping natural features (true "
 "color)"
 msgstr ""
+"Image d été récente de la chaine d Alaska pour cartographier les "
+"caractéristiques naturelles (vraies couleurs)"
 
 msgid "imagico.de OSM images for mapping: Bogoslof Island"
 msgstr "Imagerie imagico.de pour la cartographie OSM: Île Bogoslof"
@@ -27040,7 +27290,7 @@ msgid "imagico.de OSM images for mapping: Cook Inlet"
 msgstr "Imagerie imagico.de pour la cartographie: Golfe de Cook"
 
 msgid "Tidal flats and glaciers in surrounding mountains (true color)"
-msgstr ""
+msgstr "Estrans et glaciers dans les montagnes alentours (vraies couleurs)"
 
 msgid "NJ 2015 Aerial Imagery (Infrared)"
 msgstr "Imagerie aérienne (infrarouge) du New Jersey 2015"
@@ -27048,6 +27298,8 @@ msgstr "Imagerie aérienne (infrarouge) du New Jersey 2015"
 msgid ""
 "Digital orthophotography of New Jersey, Near Infrared, 1 foot resolution"
 msgstr ""
+"Orthophotographie numerique du New Jersey, Proche infrarouge, resolution de "
+"1 pied"
 
 msgid "NJ 2015 Aerial Imagery (Natural Color)"
 msgstr "Imagerie aérienne (couleurs naturelles) du New Jersey 2015"
@@ -27055,36 +27307,43 @@ msgstr "Imagerie aérienne (couleurs naturelles) du New Jersey 2015"
 msgid ""
 "Digital orthophotography of New Jersey, Natural Color, 1 foot resolution"
 msgstr ""
+"Orthophotographie numérique, Couleurs naturelles, résolution de 1 pied"
 
 msgid "San Juan Metro Area: 2013 USACE Orthophotos"
-msgstr ""
+msgstr "Métropole de San Juan: 2013 USACE Orthophotos"
 
 msgid "PR/USVI 2017 NOAA Hurricane Maria imagery"
-msgstr ""
+msgstr "PR/USVI 2017 NOAA Imagerie de l ouragan Maria"
 
 msgid "WA 2013 aerial imagery for San Juan County"
-msgstr ""
+msgstr "WA 2013 imagerie aérienne du Comté de San Juan"
 
 msgid ""
 "Public domain aerial imagery taken in May/June 2013 from San Juan County, "
 "WA. Resolution is 9 inch."
 msgstr ""
+"Imagerie aérienne du comté de San Juan dans le domaine public prises en "
+"Mai/Juin 2013, WA. Résolution de 9 inch."
 
 msgid "WA 2016 aerial imagery for San Juan County"
-msgstr ""
+msgstr "WA 2016 imagerie aérienne pour le Comté de San Juan"
 
 msgid ""
 "Public domain aerial imagery taken in May, June, and July from San Juan "
 "County, WA. Resolution is 6 inch countywide."
 msgstr ""
+"Imagerie aérienne dans le domaine public prise en Mai, Juin et Juillet "
+"depuis le comté de San Juan, WA. Résolution is de 6 inch sur le comté"
 
 msgid "WA Vector Streetmap for San Juan County"
-msgstr ""
+msgstr "WA Carte vectorielle des rues du Comté de San Juan"
 
 msgid ""
 "Public domain street and address data from the San Juan County, WA. Updated "
 "at least quarterly."
 msgstr ""
+"Données du domain publique des rues et addresses du comté de San Juan, WA. "
+"Mise a jour au moins trimestrielle."
 
 msgid "Texas Orthophoto"
 msgstr "Texas Orthophoto"
@@ -27093,14 +27352,14 @@ msgid "Philadelphia 2015 Imagery"
 msgstr "Imagerie de Philadelphie 2015"
 
 msgid "MD Latest 6 Inch Aerial Imagery"
-msgstr ""
+msgstr "MD dernière Imagerie Aérienne de résolution 6 inch"
 
 msgid "Six Inch resolution aerial imagery for the State of Maryland"
 msgstr ""
 "Imagerie aérienne pour l’État du Maryland, avec une résolution de 6 pouces"
 
 msgid "MD Three Inch Aerial Imagery"
-msgstr ""
+msgstr "MD imagerie aérienne de 3 pouces"
 
 msgid ""
 "Three Inch Resolution Imagery for the cities of Rockville, Gaithersburg and "
@@ -27110,12 +27369,14 @@ msgstr ""
 "résolution de 3 pouces"
 
 msgid "MD Transportation Basemap"
-msgstr ""
+msgstr "MD Fond de carte Transport"
 
 msgid ""
 "Maryland State Highway Administration road features and additional Maryland "
 "focused landmarks"
 msgstr ""
+"Caractéristiques routières de l Etat du Maryland et monuments/repères "
+"additionnels du Maryland"
 
 msgid "Delaware 2012 Orthophotography"
 msgstr "Orthophotographie du Delaware 2012"
@@ -27125,6 +27386,10 @@ msgid ""
 "4-band true color and near infrared (R, G, B, IR) orthoimages covering New "
 "Castle, Kent and Sussex Counties in Delaware."
 msgstr ""
+"Ce jeu de données est composé d orthoimages en 4 bandes de vraies couleurs "
+"et proche infrarouge (Rouge, Vert, Bleu, Infrarouge) et résolution de 0,3m "
+"par pixel ( approximativement 1 pied) couvrant New Castle, Kent et comtés du "
+"Sussex dans le Delaware."
 
 msgid "imagico.de OSM images for mapping: Rwenzori Mountains"
 msgstr "Imagerie imagico.de pour la cartographie OSM: Monts Rwenzori"
@@ -27133,6 +27398,8 @@ msgid ""
 "Recent image of most of the remaining Rwenzori Mountains glaciers (false "
 "color IR)"
 msgstr ""
+"Imagerie récente dela plupart des glaciers restant dans les montagnes de "
+"Rwenzori (fausses couleurs infrarouges)"
 
 msgid "imagico.de OSM images for mapping: Rwenzori Mountains 2016"
 msgstr "Imagerie imagico.de pour la cartographie OSM: Monts Rwenzori 2016"
@@ -27149,22 +27416,22 @@ msgid "Ukraine - Kyiv 2014 (DZK)"
 msgstr "Ukraine - Kiev 2014 (DZK)"
 
 msgid "7th Series (OS7)"
-msgstr ""
+msgstr "7ème Séries (OS7)"
 
 msgid "OS New Popular Edition historic"
-msgstr ""
+msgstr "OS New Popular Edition historic"
 
 msgid "OS OpenData StreetView"
-msgstr ""
+msgstr "OS OpenData StreetView"
 
 msgid "OS OpenData Locator"
-msgstr ""
+msgstr "OS OpenData Locator"
 
 msgid "Surrey Air Survey"
-msgstr ""
+msgstr "Surrey levé aérien"
 
 msgid "NLS - OS 6-inch Scotland 1842-82"
-msgstr ""
+msgstr "NLS - OS 6-pouces Ecosse 1842-82"
 
 msgid "NLS - OS 1:25k 1st Series 1937-61"
 msgstr "NLS - OS 1:25k 1res Séries 1937-61"
@@ -27173,16 +27440,16 @@ msgid "NLS - OS 1-inch 7th Series 1955-61"
 msgstr "NLS - OS 1-inch 7e Séries 1955-61"
 
 msgid "NLS - OS 25-inch (Scotland) 1892-1905"
-msgstr ""
+msgstr "NLS - OS 25-pouces (Ecosse) 1892-1905"
 
 msgid "OS 1:25k historic (OSM-Limited)"
-msgstr ""
+msgstr "OS 1:25k historic (Limité a OSM)"
 
 msgid "OS Scottish Popular historic"
-msgstr ""
+msgstr "OS Histoire populaire Ecossaise"
 
 msgid "NLS - Bartholomew Half Inch, 1897-1907"
-msgstr ""
+msgstr "NLS - Bartholomew Half Inch, 1897-1907"
 
 msgid "OS Town Plans, Aberdeen 1866-1867 (NLS)"
 msgstr "Plans de ville Ordnance Survey, Aberdeen 1866-1867 (NLS)"
@@ -27443,7 +27710,7 @@ msgstr ""
 "Bibliothèque Nationale d’Écosse."
 
 msgid "OS Town Plans, Edinburgh 1940s-1960s (NLS)"
-msgstr ""
+msgstr "OS Plans de ville, Édimbourg 1940s-1960s (NLS)"
 
 msgid ""
 "Detailed town plan of Edinburgh 1940s-1960s, courtesy of National Library of "
@@ -27767,7 +28034,7 @@ msgstr ""
 "Bibliothèque Nationale d’Écosse."
 
 msgid "OS Town Plans, Paisley 1858 (NLS)"
-msgstr ""
+msgstr "OS Plans de ville, Paisley 1858 (NLS)"
 
 msgid ""
 "Detailed town plan of Paisley 1858, courtesy of National Library of Scotland."
@@ -27953,7 +28220,7 @@ msgid "Landsat 233055"
 msgstr "Landsat 233055"
 
 msgid "Recent Landsat imagery"
-msgstr ""
+msgstr "Imagerie Landsat récente"
 
 msgid "Even housenumber in odd address interpolation."
 msgstr "Numéro de rue pair dans une interpolation d''adresses impaires."
@@ -27969,6 +28236,8 @@ msgid ""
 "Object has no {0}, however, it has {1} and {2} whose value looks like a "
 "housenumber."
 msgstr ""
+"L objet n a pas de {0}, cependant il a {1} et {2} dont les valeurs "
+"ressemblent a un numéro de maison."
 
 msgid "Same value of {0} and {1}"
 msgstr "Même valeur pour {0} et {1}"
@@ -27992,7 +28261,7 @@ msgid "suspicious tag combination"
 msgstr "combinaison suspecte d’attributs"
 
 msgid "two objects, one with {0} and one with {1} + {2} + {3}"
-msgstr ""
+msgstr "Deux objets, un avec {0} et un avec {1} + {2} + {3}"
 
 msgid "incomplete object: only {0}"
 msgstr "élément incomplet : uniquement {0}"
@@ -28028,31 +28297,37 @@ msgid "{0} and {1} together with {2} and conflicting values"
 msgstr "{0} et {1} tous deux avec {2} et valeurs conflictuelles"
 
 msgid "{0} on a relation without {1}"
-msgstr ""
+msgstr "{0} sur une relation sans {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 ""
+"Long cours d eau avec {0} mais sans tag qui précise que c est un tunnel ou "
+"un souterrain. Supprimez {1} ou ajoutez un tag tunnel si applicable. "
+"Verifiez aussi les ponts enjambant le cours d eau et leurs {1} tags."
 
 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 ""
+"Petit cours d eau avec {0} mais sans tag qui précise que c est un tunnel ou "
+"un souterrain. Supprimez {1} ou ajoutez un tag tunnel si applicable. "
+"Verifiez aussi les ponts enjambant le cours d eau et leurs {1} tags."
 
 msgid "{0} together with {1} and {2}. Remove {1} and {2}"
 msgstr "{0} combiné à {1} et {2}. Retirer {1} et {2}"
 
 msgid "Different number of lanes in the keys {0} and {1}"
-msgstr ""
+msgstr "Nombre de voies différents dans les clefs {0} et {1}"
 
 msgid "possibly missing {0} tag"
 msgstr "Oubli possible de tag {0}"
 
 msgid "street with odd number of {0}, but without {1} and {2} or {3}"
-msgstr ""
+msgstr "Rue avec un nombre impair de {0}, mais sans {1} et {2} or {3}"
 
 msgid "{0} is deprecated"
 msgstr "{0} est déprécié"
@@ -28172,11 +28447,14 @@ msgstr "Mauvaise valeur: {0}"
 msgid "{0} on a node. Should be used on a way."
 msgstr "{0} sur un nœud. Devrait être employé sur un chemin."
 
+msgid "{0} on a node. Should be used on a way or relation."
+msgstr "{0} sur un noeud. Devrait être utilisé sur un chemin ou une relation"
+
 msgid "{0} on a node. Should be drawn as an area."
 msgstr "{0} sur un nœud. Devrait former une aire."
 
 msgid "{0} on a node. Should be used in a relation"
-msgstr ""
+msgstr "{0} sur un noeud. Devrait être utilisé dans une relation"
 
 msgid "{0} on a way. Should be used on a node."
 msgstr "{0} sur un chemin. Devrait être employé sur un nœud."
@@ -28185,12 +28463,14 @@ msgid "{0} on a way. Should be used in a relation"
 msgstr "{0} sur un chemin. Devrait être employé dans une relation."
 
 msgid "node connects highway and building"
-msgstr ""
+msgstr "le noeud connecte une route au bâtiment"
 
 msgid ""
 "Object at Position 0.00E 0.00N. There is nothing at this position except an "
 "already mapped weather buoy."
 msgstr ""
+"Objet a la position 0.00E 0.00N. Il n y a rien a cette position excepté une "
+"bouée météo déjà cartographiée"
 
 msgid "{0} together with {1} on a node. Remove {0}."
 msgstr "{0} avec {1} sur un nœud. Retirer {0}."
@@ -28251,7 +28531,7 @@ msgstr ""
 "d''écoulement est improbable."
 
 msgid "Coastline inside {1}"
-msgstr ""
+msgstr "Ligne de cote a l intérieur de {1}"
 
 msgid "{0} should be on the node where {1} and {2} intersect"
 msgstr "{0} devrait être sur le nœud où {1} et {2} se croisent"
@@ -28260,12 +28540,17 @@ msgid ""
 "{0} is the tag for the linear waterway. To tag the water area use {1} + {2} "
 "instead."
 msgstr ""
+"{0} est le tag pour la représentation linéaire des cours d eau. Pour tagger "
+"une surface d eau utilisez plutot {1} + {2}."
 
 msgid "Ferry route is not connected to the road network or branches."
 msgstr ""
+"La ligne du Ferry n est pas connectée au réseau routier ou a des branches."
 
 msgid "Ferry route is not connected to a ferry terminal or branches."
 msgstr ""
+"La ligne de Ferry n est pas connectée a un terminal de Ferry ou a des "
+"branches."
 
 msgid "abbreviated street name"
 msgstr "abbréviation du nom de rue"
@@ -28283,13 +28568,15 @@ msgid "highway without a reference"
 msgstr "route sans référence"
 
 msgid "Unspecific highway type"
-msgstr ""
+msgstr "Type de route imprécis"
 
 msgid "{0} used with {1}"
 msgstr "{0} utilisé avec {1}"
 
 msgid "{0} is deprecated, use {1} instead. Also check similar tags like {2}"
 msgstr ""
+"{0} est obsolète, utiliser {1} à la place. Vérifier aussi les clés "
+"similaires comme {2}"
 
 msgid ""
 "Value of ''{0}'' should either be ''{1}'' or ''{2}''. For sidewalks use "
@@ -28314,10 +28601,10 @@ msgid "numerical key"
 msgstr "clé numérique"
 
 msgid "{0} value with + sign"
-msgstr ""
+msgstr "valeur {0} avec le signe +"
 
 msgid "{0} should be an integer value between -5 and 5"
-msgstr ""
+msgstr "{0} doit être un nombre entier entre -5 et 5"
 
 msgid "{0} should have numbers only with optional .5 increments"
 msgstr "{0} doit être numérique avec des incréments optionnels de 0,5"
@@ -28368,7 +28655,7 @@ msgid "unusual value of {0}"
 msgstr "valeur inhabituelle de {0}"
 
 msgid "{0} must be a numeric value, in meters and without units"
-msgstr ""
+msgstr "{0} doit être une valeur numérique, en mètres et sans unité"
 
 msgid "relation without type"
 msgstr "relation sans type"
@@ -28377,7 +28664,7 @@ msgid "{0} relation without {0} tag"
 msgstr "{0} relation sans {0} attribut"
 
 msgid "way with {0} is part of a bicycle route relation"
-msgstr ""
+msgstr "Le chemin avec {0} fait partie d une relation véloroute"
 
 msgid "religion without denomination"
 msgstr "religion sans dénomination"
@@ -28401,39 +28688,45 @@ msgid "{0} is unnecessary"
 msgstr "{0} n’est pas nécessaire"
 
 msgid "unnecessary tag"
-msgstr ""
+msgstr "clé superflue"
 
 msgid "{0} is unnecessary for {1}"
 msgstr "{0} est non nécessaire pour {1}"
 
 msgid "{0} makes no sense"
-msgstr ""
+msgstr "{0} n''a aucun sens"
 
 msgid "Nodes duplicating parent way tags"
 msgstr "Nœuds dupliquant les attributs du chemin parent"
 
+msgid "{0} together with {1} and {2}. Remove {0}."
+msgstr "{0} impliqué par {1} et {2}. Supprimez {0}."
+
 msgid ""
 "wikipedia tag has no language given, use ''wikipedia''=''language:page "
 "title''"
 msgstr ""
+"Le tag wikipedia n a pas de langage précisé, utilisez "
+"\"wikipedia\"=\"langage:titre de la page\""
 
 msgid "wikipedia tag has an unknown language prefix"
-msgstr ""
+msgstr "la clé wikipedia contient un préfixe de langue inconnu"
 
 msgid "wikipedia tag format is deprecated"
-msgstr ""
+msgstr "Le format du tag wikipedia est obsolète"
 
 msgid "''wikipedia''=''language:page title''"
 msgstr "''wikipedia''=''langue:page de titre''"
 
 msgid "wikipedia ''{0}'' language is obsolete, use ''{1}'' instead"
-msgstr ""
+msgstr "Le langage wikipedia \"{0}\" est obsolète, utilisez plutot \"{1}\""
 
 msgid "wikipedia ''{0}'' language is invalid, use ''{1}'' instead"
-msgstr ""
+msgstr "Le langage wikipedia \"{0}\" est invalide, utilisez plutot \"{1}\""
 
 msgid "{0} tag should not have URL-encoded values like ''%27''"
 msgstr ""
+"Le tag {0} ne devrait pas avoir de valeurs d URL encodées comme ''%27''"
 
 msgid "wikipedia title should not start with a space after language code"
 msgstr ""
@@ -28441,7 +28734,7 @@ msgstr ""
 "langue"
 
 msgid "wikipedia title should not have ''{0}'' prefix"
-msgstr ""
+msgstr "Le titre wikipedia ne doit pas avoir de préfixe \"{0}\""
 
 msgid "wikipedia page title should have first letter capitalized"
 msgstr ""
@@ -28454,7 +28747,7 @@ msgstr ""
 "underscores ('' _ '' → '' '')"
 
 msgid "wikipedia language seems to be duplicated, e.g. en:en:Foo"
-msgstr ""
+msgstr "la langue wikipedia semble être dupliquée, p. ex. fr: fr: Foo"
 
 msgid "wikidata tag must be in Qnnnn format, where n is a digit"
 msgstr "La balise wikidata doit être au format Qnnnn, où n est un chiffre"
@@ -28470,6 +28763,8 @@ msgid ""
 "wikipedia tag is not set, but a ''{0}'' tag is. Make sure to use "
 "wikipedia=language:value together with wikidata tag."
 msgstr ""
+"Le tag wikipedia n est pas défini, mais le tag \"{0}\" l est. Assurez vous d "
+"utiliser wikipedia=langage:value avec le tag wikidata"
 
 msgid "Hide icons at low zoom"
 msgstr "Cacher les icônes à un faible zoom"
@@ -29367,6 +29662,21 @@ msgstr "Envoyer les traces vers openstreetmap.org"
 msgid "Importing..."
 msgstr "Importation…"
 
+msgid "Shape is started incorrectly"
+msgstr "La forme commence de manière incorrecte"
+
+msgid "Can''t load SVG diagram"
+msgstr "Echec de chargement du diagramme SVG"
+
+msgid "Can''t find root SVG element"
+msgstr "Impossible de trouver l élément SVG racine"
+
+msgid "Import primitives"
+msgstr "Primitives d import"
+
+msgid "Cannot find configuration file!"
+msgstr "Impossible de trouver le fichier de configuration!"
+
 msgid "DXF files [ImportDxf plugin] (*.dxf)"
 msgstr "Fichiers DXF [plugin ImportDxf] (*.dxf)"
 
@@ -29751,7 +30061,7 @@ msgid "Mapillary layer"
 msgstr "Calque Mapillary"
 
 msgid "{0} sequences, each containing between {1} and {2} images (ø {3})"
-msgstr ""
+msgstr "{0} séquences, chacune contenant entre {1} et {2} images  (ø {3})"
 
 msgid "{0} imported images"
 msgstr "{0} images importées"
@@ -29763,7 +30073,7 @@ msgid "{0} images in total"
 msgstr "{0} images au total"
 
 msgid "{0} images in {1} sequences"
-msgstr ""
+msgstr "{0} images dans {1} séquences"
 
 msgid "Mapillary object layer"
 msgstr "Calque d''objets Mapillary"
@@ -29814,22 +30124,24 @@ msgid "Submit the current changeset"
 msgstr "Soumettez l’ensemble des modifications actuelles"
 
 msgid "Submit the current changeset to Mapillary"
-msgstr ""
+msgstr "Soumettre le groupe de modification courant a Mapillary"
 
 msgid "rejected"
-msgstr ""
+msgstr "rejeté"
 
 msgid "pending"
 msgstr "en attente"
 
 msgid "approved"
-msgstr ""
+msgstr "approuvé"
 
 msgid "{0} images submitted, Changeset key: {1}, State: {2}"
-msgstr ""
+msgstr "{0} images soumises, Groupe de modification clef: {1}, Etat: {2}"
 
 msgid "Changeset upload failed with {0} error ''{1} {2}''!"
 msgstr ""
+"Le téléversement du groupe de modification a échoué avec {0} erreurs \"{1} "
+"{2}\"!"
 
 msgid ""
 "An exception occured while trying to submit a changeset. If this happens "
@@ -29861,7 +30173,7 @@ msgid "Zoom to the currently selected Mapillary image"
 msgstr "Zoomer sur l’image Mapillary actuellement sélectionnée"
 
 msgid "Current Mapillary changeset"
-msgstr ""
+msgstr "Groupe de modification Mapillary courant"
 
 msgid "Open Mapillary changeset dialog"
 msgstr "Ouvrir la boite de dialogue des modifications Mapillary"
@@ -30029,10 +30341,14 @@ msgstr "Couper les séquences aux limites de téléchargement"
 
 msgid "Enable experimental beta-features (might be unstable)"
 msgstr ""
+"Activer les beta-fonctionnalités expérimentales (peuvent être instables)"
 
 msgid "Download mode"
 msgstr "Mode téléchargement"
 
+msgid "Number of images to be pre-fetched (forwards and backwards)"
+msgstr "Nombre d images a pré-charger (vers l avant, vers l arrière)"
+
 msgid "You are logged in as ''{0}''."
 msgstr "Vous êtes connecté en tant que ''{0}''."
 
@@ -30067,25 +30383,28 @@ msgstr "Avancer"
 
 msgid "Which image layers do you want to import into the Mapillary layer?"
 msgstr ""
+"Quelles couches d''image souhaitez-vous importer dans la couche Mapillary?"
 
 msgid "Import"
 msgstr "Importer"
 
 msgid "Could not import a geotagged image to the Mapillary layer!"
 msgstr ""
+"On ne peut pas importer une image géotagguée dans la couche Mapillary!"
 
 msgid "{0} ({1} images)"
-msgstr ""
+msgstr "{0} ({1} images)"
 
 msgid ""
 "From which source do you want to import images to the Mapillary layer?"
 msgstr ""
+"De quelle source souhaitez-vous importer des images vers la couche Mapillary?"
 
 msgid "There are currently no layers with geotagged images!"
-msgstr ""
+msgstr "Il n''y a actuellement aucun calque avec des images géoréférencées!"
 
 msgid "Images from my file system"
-msgstr ""
+msgstr "Images provenant de mon système de fichiers"
 
 msgid "Select the images you want to import"
 msgstr "Sélectionnez les images que vous souhaitez importer"
@@ -30097,27 +30416,29 @@ msgid "Select directory to import images from"
 msgstr "Sélectionnez le répertoire pour importer des images de"
 
 msgid "From existing image layer"
-msgstr ""
+msgstr "À partir de couche d image existante"
 
 msgid "Import exception"
-msgstr ""
+msgstr "Exception d import"
 
 msgid "Could not import the image ''{0}''!"
 msgstr "Impossible d’importer l’image ''{0}''!"
 
 msgid "Could not import the directory ''{0}''!"
-msgstr ""
+msgstr "Impossible d importer le répertoire \"{0}\"!"
 
 msgid ""
 "A tag with key <i>{0}</i> is already present on the selected OSM object."
 msgstr ""
+"Un tag avec la clé <i> {0} </ i> est déjà présent sur l''objet OSM "
+"sélectionné."
 
 msgid ""
 "Do you really want to replace the current value <i>{0}</i> with the new "
 "value <i>{1}</i>?"
 msgstr ""
-"Voulez-vous vraiment remplacer la valeur actuelle <i> {0} </ i> par la "
-"nouvelle valeur <i> {1} </ i>?"
+"Voulez-vous vraiment remplacer la valeur actuelle <i>{0}</ i> par la "
+"nouvelle valeur <i>{1}</ i>?"
 
 msgid "Tag conflict"
 msgstr "Tag en conflit"
@@ -30130,17 +30451,22 @@ msgid ""
 "(like the image key) and actions for the currently selected Mapillary image "
 "(like viewing it in a browser)."
 msgstr ""
+"Le plugin Mapillary utilise maintenant un panneau séparé pour afficher des "
+"informations supplémentaires (comme la clé d''image) et les actions pour "
+"l''image Mapillary sélectionnée (comme l''afficher dans un navigateur)."
 
 msgid ""
 "It can be activated by clicking the left button at the bottom of this "
 "message or the button in the toolbar on the left, which uses the same icon."
 msgstr ""
+"Il peut être activé en cliquant sur le bouton gauche en bas de ce message ou "
+"sur le bouton dans la barre d''outils à gauche, qui utilise la même icône."
 
 msgid "I got it, close this."
 msgstr "J’ai compris. Fermez cela."
 
 msgid "Image info"
-msgstr ""
+msgstr "Informations de l image"
 
 msgid "Displays detail information on the currently selected Mapillary image"
 msgstr ""
@@ -30148,10 +30474,10 @@ msgstr ""
 "sélectionnée"
 
 msgid "Show detections on top of image"
-msgstr ""
+msgstr "Montre les détections en haut de l image"
 
 msgid "View in browser"
-msgstr ""
+msgstr "Voir dans le navigateur"
 
 msgid "Copy key"
 msgstr "Copier la clé"
@@ -30160,10 +30486,10 @@ msgid "Add Mapillary tag"
 msgstr "Ajouter un tag Mapillary"
 
 msgid "Image detections"
-msgstr ""
+msgstr "Détections d image"
 
 msgid "Image actions"
-msgstr ""
+msgstr "Actions sur l’image"
 
 msgid "Image key"
 msgstr "Clé de l’image"
@@ -30172,7 +30498,7 @@ msgid "Sequence key"
 msgstr "Clé de la séquence"
 
 msgid "{0} detections"
-msgstr ""
+msgstr "{0} détections"
 
 msgid "image has no key"
 msgstr "L,’image n’a pas de clé"
@@ -30184,7 +30510,7 @@ msgid "sequence has no key"
 msgstr "La séquence n’a pas de clé"
 
 msgid "Could not open the URL {0} in a browser"
-msgstr ""
+msgstr "Impossible d ouvrir l URL {0} dans un navigateur"
 
 msgid "Downloading map objects…"
 msgstr "Téléchargement des objets de la carte…"
@@ -30233,13 +30559,16 @@ msgid "2 images unjoined"
 msgstr "2 images désassemblées"
 
 msgid "Could not read from URL {0}!"
-msgstr ""
+msgstr "Impossible de lire depuis l URL {0}!"
 
 msgid ""
 "{0}\n"
 "Could not read map objects from URL\n"
 "{1}!"
 msgstr ""
+"{0}\n"
+"Impossible de lire les objets de la carte depuis l URL\n"
+"{1}!"
 
 msgid "everything in the visible area"
 msgstr "Tout est dans la zone visible"
@@ -30251,9 +30580,25 @@ msgid "only when manually requested"
 msgstr "Uniquement lorsque demandé manuellement"
 
 msgid ""
-"The downloaded OSM area is too big. Download mode has been changed to OSM "
-"area until the layer is restarted."
+"The Mapillary layer has stopped downloading images, because the requested "
+"area is too big!"
+msgstr ""
+"Le calque Mapillary a arrêté de télécharger les images parce que la zone "
+"demandée est trop grande!"
+
+msgid ""
+"To solve this problem, you could zoom in and load a smaller area of the map."
+msgstr ""
+"Pour résoudre ce problème, vous pouvez zoomer et charger une zone plus "
+"restreinte de la carte."
+
+msgid ""
+"To solve this problem, you could switch to download mode ''{0}'' and load "
+"Mapillary images for a smaller portion of the map."
 msgstr ""
+"Pour résoudre ce problème, vous pouvez passer sur le mode de téléchargement "
+"\"{0}\" et charger les images Mapillary pour une zone de la carte plus "
+"restreinte."
 
 msgid "Downloading"
 msgstr "Téléchargement en cours"
@@ -30277,7 +30622,7 @@ msgid "Total Mapillary images: {0}"
 msgstr "Nombre total de photos : {0}"
 
 msgid "Submitting Mapillary Changeset"
-msgstr ""
+msgstr "Groupe de modification Mpaillary en cours d envoi"
 
 msgid "No images found"
 msgstr "Aucune image trouvée"
@@ -30290,9 +30635,10 @@ msgstr "Envoi terminé"
 
 msgid "You are not logged in, please log in to Mapillary in the preferences"
 msgstr ""
+"Vous n êtes pas connecté, connectez vous a Mapillary dans les préférences"
 
 msgid "Not Logged in to Mapillary"
-msgstr ""
+msgstr "Non connecté a Mapillary"
 
 msgid "Uploading: {0}"
 msgstr "Envoi en cours : {0}"
@@ -30914,7 +31260,7 @@ msgid "Name:"
 msgstr "Nom :"
 
 msgid "update building info"
-msgstr ""
+msgstr "Mise a jour des informations du batiment"
 
 msgid "Tag Element"
 msgstr "Ajouter des attributs à l’élément"
@@ -30940,18 +31286,18 @@ msgid "Area Selector"
 msgstr "Sélecteur d’aire"
 
 msgid "Trying to detect an area at:"
-msgstr ""
+msgstr "Essaye de détecter une suface a:"
 
 msgid "create building"
-msgstr ""
+msgstr "Crée un batiment"
 
 msgid "replace building"
-msgstr ""
+msgstr "Remplace le batiment"
 
 msgid "Add address"
 msgid_plural "Add addresses"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Ajouter une addresse"
+msgstr[1] "Ajouter des adresses"
 
 msgid "Unable to detect a polygon where you clicked."
 msgstr ""
@@ -31001,6 +31347,8 @@ msgid ""
 "Maximum distance in meters between a point and the line to be considered as "
 "a member of this line (Default: {0})."
 msgstr ""
+"Distance maximum en mètres entre un point et une ligne pour être considéré "
+"comme un membre de cette ligne (Par défaut: {0})."
 
 msgid "Distance Tolerance"
 msgstr "Tolérance de distance"
@@ -31056,7 +31404,7 @@ msgid "Merge nodes with existing nodes"
 msgstr "Fusionner les nœuds avec les nœuds existants"
 
 msgid "use austria address helper"
-msgstr ""
+msgstr "Utiliser l assistant d addresse d Autriche"
 
 msgid ""
 "Automatically try to find the correct address via Austria Address Helper "
@@ -31066,10 +31414,10 @@ msgstr ""
 "Address Helper"
 
 msgid "Replace existing buildings"
-msgstr ""
+msgstr "Remplace les batiments existants"
 
 msgid "Replace an existing building with the new one."
-msgstr ""
+msgstr "Remplace un batiment existant par le nouveau"
 
 msgid "Debug"
 msgstr "Débogueur"
@@ -31088,29 +31436,40 @@ msgid ""
 "name of a village, hamlet, territorial zone or any object other than a "
 "street, please choose \"place\".</html>"
 msgstr ""
+"<html>Nous ne pouvons pas automatiquement déterminer si <strong>{0}</strong> "
+"(partie de l adresse {0} {1}, {2} {3}) est un nom de <strong>rue</strong> ou "
+"de <strong>lieu</strong>. Si <strong>{0}</strong> est une vraie rue, merci "
+"de choisir \"rue\" ci-dessous. Si, <strong>{0}</strong> est le nom d un "
+"village, hameau, ou un objet autre qu une rue, merci de choisir "
+"\"lieu\".</html>"
 
 msgid "<html>{0} is a <strong>street</strong>.</html>"
-msgstr ""
+msgstr "<html>{0} est une <strong>rue</strong>.</html>"
 
 msgid "<html>{0} is a <strong>place</strong>.</html>"
-msgstr ""
+msgstr "<html>{0} est un <strong>lieu</strong>.</html>"
 
 msgid ""
 "<html>Remember my choice for <strong>{0}</strong> in {1} {2} for this "
 "session.</html>"
 msgstr ""
+"Copy text \t\r\n"
+"<html>Se rappeler mon choix pour <strong>{0}</strong> dans {1} {2} pour "
+"cette session.</html>"
 
 msgid "Fetch Address"
-msgstr ""
+msgstr "Récupération d Adresse"
 
 msgid "Austria Address Helper<br>Please select exactly one object."
 msgstr ""
+"Assistant d adresse en Autriche<br> Merci de sélectionner exactement un "
+"objet."
 
 msgid "Austria Address Helper"
-msgstr ""
+msgstr "Assistant d Adresse d Autriche"
 
 msgid "No address type selected. Aborting."
-msgstr ""
+msgstr "Pas de type d adresse sélectionné. Abandon."
 
 msgid "Successfully added address to selected object:"
 msgstr "Adresse ajoutée avec succès à l’objet sélectionné:"
@@ -31126,7 +31485,7 @@ msgid "An unexpected exception occurred:"
 msgstr "Une erreur inattendue s’est produite:"
 
 msgid "Building Generalization"
-msgstr ""
+msgstr "Généralisation de batiment"
 
 msgid ""
 "Beginners draw outlines often very inaccurate. Such buildings shall be "
@@ -31409,34 +31768,42 @@ msgid "Add \"source=...\" to elements?"
 msgstr "Voulez-vous ajouter une source aux objets ?"
 
 msgid "Download from Cadastre"
-msgstr ""
+msgstr "Téléchargement depuis le Cadastre"
 
 msgid "Objects:"
 msgstr "Objets:"
 
 msgid "Select to download buildings in the selected download area."
 msgstr ""
+"Sélectionner pour télécharger les batiments dans la zone de téléchargement "
+"sélectionnée"
 
 msgid "address"
 msgstr "adresse"
 
 msgid "Select to download addresses in the selected download area."
-msgstr ""
+msgstr "Sélectionner pour télécharger les adresses dans la zone sélectionnée"
 
 msgid "symbol"
 msgstr "symbole"
 
 msgid "Select to download symbols in the selected download area."
 msgstr ""
+"Sélectionnez pour télécharget les symboles dans la zone de téléchargement "
+"sélectionnée."
 
 msgid "Select to download water bodies in the selected download area."
 msgstr ""
+"Sélectionnez pour télécharger les éléments d eau dans la zone de "
+"téléchargement sélectionnée."
 
 msgid "parcel"
 msgstr "parcelle"
 
 msgid "Select to download cadastral parcels in the selected download area."
 msgstr ""
+"Sėlectionnez pour télécharger les parcelles cadastrales dans la zone de "
+"téléchargement sélectionnée."
 
 msgid "parcel number"
 msgstr "Numéro de parcelle"
@@ -31444,18 +31811,24 @@ msgstr "Numéro de parcelle"
 msgid ""
 "Select to download cadastral parcel numbers in the selected download area."
 msgstr ""
+"Sélectionnez pour télécharger les numéros de parcelles cadastrales dans la "
+"zone de téléchargement sélectionnée."
 
 msgid "section"
 msgstr "section"
 
 msgid "Select to download cadastral sections in the selected download area."
 msgstr ""
+"Sėlectionnez pour télécharger les sections cadastrales dans la zone de "
+"téléchargement sélectionnée."
 
 msgid "locality"
 msgstr "lieu-dit"
 
 msgid "Select to download localities in the selected download area."
 msgstr ""
+"Sélectionnez pour télécharger les lieux-dits dans la zone de téléchargement "
+"sélectionnée."
 
 msgid "commune"
 msgstr "commune"
@@ -31463,22 +31836,26 @@ msgstr "commune"
 msgid ""
 "Select to download municipality boundary in the selected download area."
 msgstr ""
+"Sélectionnez pour tėlécharger les limites de commune dans la zone de "
+"téléchargement sélectionnée."
 
 msgid ""
 "<html>Nothing is enabled.<br>Please choose something to download.</html>"
 msgstr ""
+"<html>Rien n est activé.<br>Merci de choisir quelque chose à "
+"télécharger.</html>"
 
 msgid "Download cadastre data"
-msgstr ""
+msgstr "Téléchargement des données du cadastre"
 
 msgid "Recipient"
-msgstr ""
+msgstr "Destinataire"
 
 msgid "Diffusion restriction"
 msgstr "Restriction de diffusion"
 
 msgid "Cadastre Edigeo files"
-msgstr ""
+msgstr "Fichiers Edigeo du cadastre"
 
 msgid "Replace original background by JOSM background color."
 msgstr "Remplacer la couleur de fond par celle de JOSM"
@@ -31973,10 +32350,10 @@ msgid "Conflation: {0}"
 msgstr "Assemblage : {0}"
 
 msgid "Conflate {0} objects"
-msgstr ""
+msgstr "Combine {0} objets"
 
 msgid "Conflate ({0})"
-msgstr ""
+msgstr "Combine ({0})"
 
 msgid "Zoom to selected primitive(s)"
 msgstr "Agrandir pour sélectionner les primitives"
@@ -31988,16 +32365,16 @@ msgid "Select the primitives currently selected in the list"
 msgstr "Sélectionner les primitives actuellement retenues dans la liste"
 
 msgid "Generating matches"
-msgstr ""
+msgstr "Génération de correspondances"
 
 msgid "Finding matches"
-msgstr ""
+msgstr "Recherche des concordances"
 
 msgid "Sorting scores"
-msgstr ""
+msgstr "Tri des concordances"
 
 msgid "Discarding inferior matches"
-msgstr ""
+msgstr "Rejet des concordances mineures"
 
 msgid "Subject"
 msgstr "Objet"
@@ -32016,18 +32393,22 @@ msgstr[1] "{0} objets ajoutés au calque sujet"
 msgid "Moved {0} conflation match to unmatched list"
 msgid_plural "Moved {0} conflation matches to unmatched list"
 msgstr[0] ""
+"Dėplacement de {0} correspondance de conflation vers la liste de non "
+"correspondance"
 msgstr[1] ""
+"Dėplacement de {0} correspondances de conflation vers la liste de non "
+"correspondance"
 
 msgid "Delete {0} conflation match"
 msgid_plural "Delete {0} conflation matches"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Suppression d {0} correspondance de conflation"
+msgstr[1] "Suppression de {0} correspondances de conflation"
 
 msgid "Remove {0} unmatched objects"
 msgstr "Supprimer {0} objets sans correspondance"
 
 msgid "Interrupted Sequence ({0}/{1}): {2}"
-msgstr ""
+msgstr "Séquence interrompue ({0}/{1}):{2}"
 
 msgid " Max: "
 msgstr " Max: "
@@ -32039,107 +32420,115 @@ msgid "Filter by window. Buffer: "
 msgstr "Filtrer par fenêtre. Tampon: "
 
 msgid "Union up to "
-msgstr ""
+msgstr "Union jusqu à "
 
 msgid " adjacent Reference features"
-msgstr ""
+msgstr " références de caractéristiques adjacentes"
 
 msgid "Weight"
 msgstr "Poids"
 
 msgid "Standard Distance"
-msgstr ""
+msgstr "distance standard"
 
 msgid "below"
-msgstr ""
+msgstr "en-dessous"
 
 msgid "Maximum Distance"
 msgstr "Distance maximum"
 
 msgid "Centroid Distance"
-msgstr ""
+msgstr "Distance du centroïde"
 
 msgid "Hausdorff Distance (Centroids Aligned)"
-msgstr ""
+msgstr "Distance de Hausdorff (Centroïdes alignés)"
 
 msgid "Symmetric Difference"
-msgstr ""
+msgstr "Différence de Symétrie"
 
 msgid "Symmetric Difference (Centroids Aligned)"
-msgstr ""
+msgstr "Différence de Symétrie (Centroïdes alignés)"
 
 msgid "Compactness"
-msgstr ""
+msgstr "Concentration"
 
 msgid "Angle Histogram. Bins: "
-msgstr ""
+msgstr "Histogramme d angles. Corbeilles: "
 
 msgid "Tags (Exact Match): "
-msgstr ""
+msgstr "Attributs (Correspondance exacte): "
 
 msgid "Tags (Levenshtein Distance): "
-msgstr ""
+msgstr "Attributs (Distance de Levenshtein): "
 
 msgid "List of tags to match"
-msgstr ""
+msgstr "Liste des attributs a faire cirrespondre"
 
 msgid "Identical Elements Filter"
-msgstr ""
+msgstr "Filtre des éléments identiques"
 
 msgid "Avoid matching an element with itself"
-msgstr ""
+msgstr "Eviter la correpondance d un élément avec lui même"
 
 msgid ""
 "Filtering will speed up the matching process. Filter By Window weeds out "
 "matches between features whose envelopes do not overlap. Filter By Area is "
 "used to weed out very small and very large features."
 msgstr ""
+"Le filtrage va accélérer le processus de correspondance. Le filtrage par "
+"fenêtre éliminie les correspondances dont l enveloppe ne se recouvre pas. Le "
+"filtrage par surface est utilisé pour éliminer les caractéristiques très "
+"petites et très étendues."
 
 msgid ""
 "Better matches may be found by creating temporary unions of features sharing "
 "a common edge."
 msgstr ""
+"Les meilleures correspondances peuvent être trouvées en regroupant "
+"temporairement les objets partageant un coté commun."
 
 msgid "Matching"
-msgstr ""
+msgstr "Correspond"
 
 msgid "Filtering"
-msgstr ""
+msgstr "Filtrer"
 
 msgid "Unioning"
-msgstr ""
+msgstr "regrouper"
 
 msgid "Programming"
-msgstr ""
+msgstr "Programmer"
 
 msgid "Replace Geometry"
 msgstr "Remplacer la géométrie"
 
 msgid "Merge Tags"
-msgstr ""
+msgstr "Fusionner les étiquettes"
 
 msgid "List of tags to merge"
-msgstr ""
+msgstr "list des étiquettes à fusionner"
 
 msgid "except"
-msgstr ""
+msgstr "exepté"
 
 msgid "List of tags to NOT merge (they will be ignored)"
-msgstr ""
+msgstr "list des étiquettes à ne PAS fusionner (ils serront ignorés)"
 
 msgid "Overwrite tags without confirmation"
-msgstr ""
+msgstr "écrasser les étiquettes sans confirmation"
 
 msgid ""
 "List of tags to overwrite on conflict using reference layer without "
 "confirmation"
 msgstr ""
+"list des étiquettes à écrasser en cas de conflit en utilisant la couche de "
+"référence sans confirmation"
 
 msgid "Simple Example"
-msgstr ""
+msgstr "Exemple simple"
 
 msgid "Advanced Example"
-msgstr ""
+msgstr "Exemple avancé"
 
 msgid "<Please select data>"
 msgstr "<Veuillez sélectionner des données>"
@@ -32192,12 +32581,16 @@ msgstr "Geler la sélection de référence"
 
 msgid "Reference and subject sets should better be different."
 msgstr ""
+"Il serait préférable que l ensemble de référence et l ensemble sujet soient "
+"diffėrents."
 
 msgid "Relations are not supported yet, please do not select them."
 msgstr ""
+"Les relations ne sont pas encore supportées, merci de ne pas les "
+"sélectionner."
 
 msgid "Disambiguating"
-msgstr ""
+msgstr "Désambiguïser"
 
 msgid "One to One"
 msgstr "Un à un"
@@ -32206,16 +32599,16 @@ msgid "Distance"
 msgstr "Distance"
 
 msgid "Standard"
-msgstr ""
+msgstr "Standard"
 
 msgid "Centroid"
-msgstr ""
+msgstr "Barycentre"
 
 msgid "Hausdorff"
-msgstr ""
+msgstr "Hausdorff"
 
 msgid "List of tags to match (default: none)"
-msgstr ""
+msgstr "Liste d attributs à faire correspondre (par défaut aucun)"
 
 msgid "Download OSM data continuously"
 msgstr "Télécharger les données OSM en continu"
@@ -32485,7 +32878,7 @@ msgid "Loading json file..."
 msgstr "Chargement du fichier json..."
 
 msgid "Data Layer from GeoJSON: "
-msgstr ""
+msgstr "Couche de données GeoJSON: "
 
 msgid "Error loading geojson file {0}"
 msgstr "Erreur lors du chargement du fichier geojson {0}"
@@ -32990,27 +33383,29 @@ msgid "Open Imagery XML file"
 msgstr "Ouvrir un fichier d’’imagerie XML"
 
 msgid "Export tiles"
-msgstr ""
+msgstr "Exporter les tuiles"
 
 msgid "Export cached tiles to file system."
-msgstr ""
+msgstr "Exporter les tuiles mises en cache vers le système de fichiers."
 
 msgid "Exporting cached tiles"
-msgstr ""
+msgstr "Exportez les tuiles mises en cache"
 
 msgid "Failed to write image file {0}: {1}"
-msgstr ""
+msgstr "Échec d’écriture du fichier image « {0} » : {1}"
 
 msgid "Failed to write image file {0}."
-msgstr ""
+msgstr "Échec d’écriture du fichier image « {0} »."
 
 msgid "Exported {0} tile from layer {1}."
 msgid_plural "Exported {0} tiles from layer {1}."
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "{0} tuile exportée depuis la couche {1}."
+msgstr[1] "{0} tuiles exportées depuis la couche {1}."
 
 msgid "Export file system path already exists but is not a directory."
 msgstr ""
+"Le chemin d’exportation du système de fichiers existe déjà, mais n’est pas "
+"un répertoire."
 
 msgid "Failed to create export directory: {0}"
 msgstr "Échec de la création du répertoire d’exportation: {0}"
@@ -33019,34 +33414,34 @@ msgid "Failed to create export directory."
 msgstr "Échec de la création du répertoire d’exportation."
 
 msgid "Append cache name"
-msgstr ""
+msgstr "Ajouter le nom du cache"
 
 msgid "Export Tiles"
-msgstr ""
+msgstr "Exporterer les tuiles"
 
 msgid "Cache name:"
-msgstr ""
+msgstr "Nom de cache:"
 
 msgid "Object count:"
-msgstr ""
+msgstr "Nombre d objets:"
 
 msgid "file system path"
-msgstr ""
+msgstr "chemin du fichier sur le système"
 
 msgid "File system path the tiles are exported to."
-msgstr ""
+msgstr "Emplacement du système de fichier ou les tuiles sont exportées."
 
 msgid "Export directory:"
 msgstr "Répertoire d’exportation:"
 
 msgid "Append cache name to export directory."
-msgstr ""
+msgstr "Ajouter le nom de cache au répertoire d export"
 
 msgid "Tiles will be exported to directory {0}"
-msgstr ""
+msgstr "Les tuiles seront exportées vers le répertoire {0}"
 
 msgid "No export directory set."
-msgstr ""
+msgstr "Aucun répertoire d’export indiqué"
 
 msgid "Calibration Layer"
 msgstr "Calque de calibration"
@@ -33296,52 +33691,56 @@ msgid "SVG files [ImportVec plugin] (*.svg)"
 msgstr "Fichiers SVG [greffon ImportVec] (*.svg)"
 
 msgid "Improve Way"
-msgstr ""
+msgstr "Amélioration de chemin"
 
 msgid "Improve Way mode"
-msgstr ""
+msgstr "Mode amélioration de chemin"
 
 msgid "Mode: Enable way accuracy helpers"
-msgstr ""
+msgstr "Mode: activer les assistants de précision de chemin"
 
 msgid "improve way accuracy helper turn angle text"
 msgstr ""
+"Assistant d amélioration de précision des chemins texte d angle de virage"
 
 msgid "improve way accuracy helper distance text"
-msgstr ""
+msgstr "Assistant d amélioration de précision des chemins texte de distance"
 
 msgid "improve way accuracy helper arc fill"
 msgstr ""
+"Remolissage d arc de l assistant d amélioration de précision des chemins"
 
 msgid "improve way accuracy helper arc stroke"
-msgstr ""
+msgstr "Trait d arc de l assistant d amélioration de précision des chemins"
 
 msgid "improve way accuracy helper perpendicular line"
 msgstr ""
+"Ligne perpendiculaire de l assistant d amélioration de précision des chemins"
 
 msgid "improve way accuracy helper equal angle circle"
 msgstr ""
+"Angle égal de cercle de l assistant d amélioration de précision des chemins"
 
 msgid "Concourse wizard ..."
-msgstr ""
+msgstr "Assistant de hall ..."
 
 msgid "Opens up a wizard to create a concourse"
-msgstr ""
+msgstr "Ouvre un assistant pour créer un hall"
 
 msgid "Vertical layer:"
-msgstr ""
+msgstr "Calque vertical:"
 
 msgid "Structure type:"
-msgstr ""
+msgstr "Type de structure"
 
 msgid "Offset into background:"
-msgstr ""
+msgstr "Compensation dans l arrière plan"
 
 msgid "Indoor Mapping Helper"
 msgstr "Assistant de cartographie en intérieur"
 
 msgid "POWER"
-msgstr ""
+msgstr "Activer"
 
 msgid "Activates the plug-in"
 msgstr "Active le greffon"
@@ -33362,22 +33761,25 @@ msgid "The object preset you want to tag."
 msgstr "L’objet sélectionné que vous voulez taguer."
 
 msgid "Sets the name tag when the room-object is selected."
-msgstr ""
+msgstr "Définit le nom lorsque l’objet-pièce est sélectionné."
 
 msgid "Sets the ref tag when the room-object is selected."
-msgstr ""
+msgstr "Définit le tag de référence lorsque l’objet-pièce est sélectionné."
 
 msgid "Apply Tags"
 msgstr "Appliquer le tag"
 
 msgid "Fitting"
-msgstr ""
+msgstr "Ajustement"
 
 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>Pensez à commencer à ajuster  votre plan de batiment dès "
+"maintenant.<br> Pour celà utilisez le greffon PicLayer, que vous pouvez "
+"installer<br> en utilisant le gestionnaire de greffon de JOSM.</html>"
 
 msgid "Level Selection"
 msgstr "Sélection du niveau"
@@ -33386,7 +33788,7 @@ msgid "Lowest Level"
 msgstr "Le plus bas niveau"
 
 msgid "The lowest level of your building."
-msgstr ""
+msgstr "Le plus bas niveau du bâtiment"
 
 msgid "Highest Level"
 msgstr "Le plus haut niveau"
@@ -33504,7 +33906,7 @@ msgid "Check "
 msgstr "Vérifier "
 
 msgid "check the subset for junction properties"
-msgstr ""
+msgstr "Vérifiez le sous-ensemble pour les propriétés de jonction"
 
 msgid "Search "
 msgstr "Chercher "
@@ -33541,50 +33943,55 @@ msgid ""
 "Check the direction of the selected stream/river. Is it correct?\n"
 " Progress: "
 msgstr ""
+"Vérifiez la direction du ruisseau/de la rivière sélectionnée. Est elle "
+"correcte?\n"
+" Progress: "
 
 msgid "Correct"
-msgstr ""
+msgstr "Correct"
 
 msgid "Wrong"
-msgstr ""
+msgstr "Faux"
 
 msgid "<HTML><U>C</U>orrect direction</HTML>"
-msgstr ""
+msgstr "<HTML><U>B</U>onne direction</HTML>"
 
 msgid "Direction of river is correct."
-msgstr ""
+msgstr "Le sens d’écoulement de l’eau est correct"
 
 msgid "<HTML><U>W</U>rong dirrection</HTML>"
-msgstr ""
+msgstr "<HTML><U>M</U>auvaise direction</HTML>"
 
 msgid "Direction of river is wrong."
 msgstr "Le sens de l’écoulement de l’eau est incorrect"
 
 msgid "<HTML><U>I</U>gnore this way</HTML>"
-msgstr ""
+msgstr "<HTML><U>I</U>gnorer ce chemin</HTML>"
 
 msgid "Ignore direction of this way."
-msgstr ""
+msgstr "Ignorer la direction de ce chemin"
 
 msgid "Check direction of streams"
-msgstr ""
+msgstr "Vérifiez le sens de l’écoulement de l’eau"
 
 msgid "Check direction of streams and rivers"
-msgstr ""
+msgstr "Vérifier la direction des ruisseaux et rivières"
 
 msgid "No more directions to check!"
-msgstr ""
+msgstr "Plus de directions à vérifier!"
 
 msgid "Replace way"
 msgstr "Remplacer le chemin"
 
 msgid "Replace way of selected way with a new way"
-msgstr ""
+msgstr "Remplacer le chemin sélectionné par un nouveau chemin"
 
 msgid ""
 "This tool replaces coastline of one way with another, and so requires "
 "exactly two coatline ways to be selected."
 msgstr ""
+"Cette outil remplace une ligne de côte d un chemin par un autre, et donc "
+"demande de sélectionner 2 chemins de ligne de côte."
 
 msgid "Direction index ''{0}'' not found"
 msgstr "Index de direction ''{0}'' non trouvé"
@@ -33889,24 +34296,6 @@ msgstr "Fusionner la superposition de chemins"
 msgid "Merge Overlap (combine)"
 msgstr "Fusionner la superposition (combiner)"
 
-msgid ""
-"<html>A role based relation membership was copied to all new ways.<br>You "
-"should verify this and correct it when necessary.</html>"
-msgstr ""
-"<html>L’appartenance à une relation fondée sur un rôle a été copiée vers "
-"tous les nouveaux chemins.<br>Vous devriez vérifier et corriger si "
-"nécessaire.</html>"
-
-msgid ""
-"<html>A relation membership was copied to all new ways.<br>You should verify "
-"this and correct it when necessary.</html>"
-msgstr ""
-"<html>L’appartenance à une relation a été copiée vers tous les nouveaux "
-"chemins.<br>Vous devriez vérifier et corriger si nécessaire.</html>"
-
-msgid "Split way"
-msgstr "Diviser le chemin"
-
 msgid "Michigan Left"
 msgstr "Michigan Left"
 
@@ -34061,7 +34450,7 @@ msgstr ""
 "de {0})"
 
 msgid "OSM Server Files o5m compressed"
-msgstr ""
+msgstr "Fichiers de serveur OSM osm5 compressé"
 
 msgid "Invalid changeset id: {0}"
 msgstr "Identifiant de groupe de modifications invalide : {0}"
@@ -34070,10 +34459,10 @@ msgid "Invalid timestamp: {0}"
 msgstr "Horodatage invalide : {0}"
 
 msgid "wrong header byte "
-msgstr ""
+msgstr "Mauvais octet d en tête "
 
 msgid "unsupported header"
-msgstr ""
+msgstr "En-tête non supportée"
 
 msgid "Reading OSM data..."
 msgstr "Lecture de données OSM en cours"
@@ -34867,10 +35256,10 @@ msgid "Writing position information to image files..."
 msgstr "Écriture des informations sur la position dans les fichiers image…"
 
 msgid "Retry"
-msgstr ""
+msgstr "Réessayer"
 
 msgid "Unable to process file ''{0}'':"
-msgstr ""
+msgstr "Impossible de traiter le fichier \"{0}\" :"
 
 msgid "File could not be deleted!"
 msgstr "Le fichier ne peut pas être supprimé !"
@@ -35008,7 +35397,7 @@ msgid "Problem occurred"
 msgstr "Un problème est survenu"
 
 msgid "Import World File Calibration..."
-msgstr ""
+msgstr "Import du fichier mondial de calibration..."
 
 msgid "Loads calibration data from a world file"
 msgstr "Charge les données de calibrage depuis un fichier mondial"
@@ -35032,10 +35421,10 @@ msgid "Saving file failed: {0}"
 msgstr "L’enregistrement du fichier a échoué : {0}"
 
 msgid "Export World file Calibration..."
-msgstr ""
+msgstr "Exporte le fichier mondial de calibration..."
 
 msgid "Saves calibration data to a world file"
-msgstr ""
+msgstr "Enregistrer les données de calibrage dans un fichier mondial"
 
 msgid "New picture layer from clipboard"
 msgstr "Nouveau calque depuis le presse-papier"
@@ -35300,9 +35689,11 @@ msgid ""
 "The relation has incomplete members. Do you want to download them and "
 "continue with the sorting?"
 msgstr ""
+"La relation a des membres incomplets. Voulez-vous les télécharger et "
+"continuer avec le tri?"
 
 msgid "Incomplete Members"
-msgstr ""
+msgstr "Membres incomplets"
 
 msgid "Do you want to make the roundabout round?"
 msgstr "Voulez-vous arrondir le rond-point?"
@@ -35317,7 +35708,7 @@ msgid "Remember my choice and do not ask me again in this session"
 msgstr "Se souvenir de mon choix et ne plus me demandez pour cette session"
 
 msgid "PT_Assistant Fetch Request"
-msgstr ""
+msgstr "Requête de récupération de PT_Assistant"
 
 msgid ""
 "Route relations have incomplete members.\n"
@@ -35336,6 +35727,7 @@ msgstr "Inclure les tests stop_area"
 
 msgid "PT_Assistant plugin found that this relation (id={0}) has errors:"
 msgstr ""
+"Le greffon PT_Assistant trouve que la relation (id={0}) a des erreurs:"
 
 msgid "{0} direction error"
 msgid_plural "{0} direction errors"
@@ -35348,16 +35740,16 @@ msgstr[0] "{0} erreur de type de route"
 msgstr[1] "{0} erreurs de type de route"
 
 msgid "How do you want to proceed?"
-msgstr ""
+msgstr "Comment voulez vous procéder?"
 
 msgid "PT_Assistant Proceed Request"
-msgstr ""
+msgstr "PT_Assistant traite la requête"
 
 msgid "Bicycle and foot routes Tests"
-msgstr ""
+msgstr "Tests des véloroutes et des itinéraires pédestres"
 
 msgid "PT: There is a gap in the "
-msgstr ""
+msgstr "PT: Prėsence d un yrou dans le "
 
 msgid "PT: Stop_position is not part of a way"
 msgstr "PT: La position d’arrêt ne fait pas partie d’un chemin"
@@ -35367,12 +35759,14 @@ msgstr "PT: La plate-forme ne devrait pas faire partie d’un chemin"
 
 msgid "PT: Stop position or platform is not part of a stop area relation"
 msgstr ""
+"PT: Stop La position ou la plate-forme ne fait pas partie d’une relation de "
+"zone d’arrêt"
 
 msgid "PT_Assistant Message"
-msgstr ""
+msgstr "Message de PT_Assistant"
 
 msgid "Public Transport Assistant tests"
-msgstr ""
+msgstr "Tests de Public Transport Assistant"
 
 msgid ""
 "Check if route relations are compatible with public transport version 2"
@@ -35388,10 +35782,12 @@ msgid "Fix error"
 msgstr "Correction d’erreur"
 
 msgid "PT: dummy test warning"
-msgstr ""
+msgstr "PT: avertissement du test dummy"
 
 msgid "PT: Route needs to be sorted, found tag fixme:relation=order members"
 msgstr ""
+"PT: les routes ont besoin d être triées, attribut fixme:relation=order "
+"members trouvé:"
 
 msgid "PT: Route contains a gap that can be fixed by sorting"
 msgstr "PT: L’itinéraire contient un trou qui peut être corrigé par un tri"
@@ -35400,25 +35796,31 @@ msgid ""
 "PT: Route gaps can decrease by sorting members. Further validations will be "
 "required"
 msgstr ""
+"PT: Les interruptions de la route peuvent être réduites en triant les "
+"membres. D autres validations seront requises"
 
 msgid "PT: Route gap can be closed by adding a single way"
-msgstr ""
+msgstr "PT: L’écart d’itinéraire peut être fermé en ajoutant un seul chemin"
 
 msgid ""
 "PT: The name of the first stop does not match the \"from\" tag of the route "
 "relation"
 msgstr ""
+"PT: le nom du 1er arrêt ne correspond pas à l attribut \"from\" de la "
+"relation route"
 
 msgid ""
 "PT: The name of the last stop does not match the \"to\" tag of the route "
 "relation"
 msgstr ""
+"PT: le nom du dernier arrêt ne correspond pas à l attribut \"to\" de la "
+"relation route"
 
 msgid "PT: The first stop of the route does not match the first way"
-msgstr ""
+msgstr "PT: le premier arrêt de la route ne correspond pas au premier chemin"
 
 msgid "PT: The last stop of the route does not match the last way"
-msgstr ""
+msgstr "PT: le dernier arrêt de la route ne correspond pas au dernier chemin"
 
 msgid "PT: Route should start and end with a stop_position"
 msgstr "PT: l’itinéraire doit commencer et se terminer par stop_position"
@@ -35427,7 +35829,7 @@ msgid "PT: First or last way needs to be split"
 msgstr "PT: Le premier ou la dernier chemin doit être divisé"
 
 msgid "PT: Stop not served"
-msgstr ""
+msgstr "PT: arrêt non desservi"
 
 msgid "PT: Problem in the route segment with no automatic fix"
 msgstr ""
@@ -35472,33 +35874,6 @@ msgid "PT: Route passes a oneway road in the wrong direction"
 msgstr ""
 "PT: l’itinéraire passe une route à sens unique dans la mauvaise direction"
 
-msgid "moved"
-msgstr "déplacé"
-
-msgid "rail"
-msgstr "par rail"
-
-msgid "Can''t parse a time from this string."
-msgstr "Impossible de lire l’heure depuis cette chaîne."
-
-msgid "Invalid value"
-msgstr "Valeur invalide"
-
-msgid "added"
-msgstr "ajouté"
-
-msgid "Public Transport: Enable GTFSStops"
-msgstr "Transport public : activer les arrêts GTFS"
-
-msgid "Public Transport: Catch GTFS stops"
-msgstr "Transport public : récupérer les arrêts GTFS"
-
-msgid "skipped"
-msgstr "ignoré"
-
-msgid "Public Transport: Disable GTFS"
-msgstr "Transport en commun: Désactiver GTFS"
-
 msgid "Create Stops from GTFS ..."
 msgstr "Créer des arrêts depuis un fichier GTFS"
 
@@ -35527,69 +35902,9 @@ msgstr "Pas de données trouvées"
 msgid "The GTFS file was empty."
 msgstr "Le fichier GTFS était vide."
 
-msgid "Create Stops from GTFS"
-msgstr "Créer les arrêts depuis GTFS"
-
-msgid "GTFS-Stops"
-msgstr "Arrêts GTFS"
-
-msgid "Type of stops to add"
-msgstr "Type d’arrêts à ajouter"
-
-msgid "Time on your GPS device"
-msgstr "Heure de votre appareil GPS"
-
-msgid "HH:MM:SS.sss"
-msgstr "HH:MM:SS.sss"
-
-msgid "Time on your stopwatch"
-msgstr "Heure à votre montre"
-
-msgid "Time window"
-msgstr "Fenêtre de temps"
-
-msgid "seconds"
-msgstr "secondes"
-
-msgid "Move Threshold"
-msgstr "Déplacer le seuil"
-
-msgid "Suggest Stops"
-msgstr "Suggérer des arrêts"
-
-msgid "Find"
-msgstr "Rechercher"
-
-msgid "Show"
-msgstr "Afficher"
-
-msgid "Mark"
-msgstr "Marquer"
-
-msgid "Catch"
-msgstr "Récupérer"
-
-msgid "Join"
-msgstr "Joindre"
-
-msgid "Public Transport: Join GTFS stops"
-msgstr "Transport public : joindre des arrêts GTFS"
-
-msgid "State"
-msgstr "Département"
-
-msgid "[incomplete]"
-msgstr "[incomplet]"
-
-msgid "[empty way]"
-msgstr "[chemin vide]"
-
 msgid "[ID] {0}"
 msgstr "[Id] {0}"
 
-msgid "[gap]"
-msgstr "[écart]"
-
 msgid "Route patterns ..."
 msgstr "Dessins de l’itinéraire…"
 
@@ -35632,6 +35947,15 @@ msgstr "Ajout d’un nouvel Attribut"
 msgid "Name/Id"
 msgstr "Nom/Id"
 
+msgid "Find"
+msgstr "Rechercher"
+
+msgid "Show"
+msgstr "Afficher"
+
+msgid "Mark"
+msgstr "Marquer"
+
 msgid "Ref"
 msgstr "Réf"
 
@@ -35647,11 +35971,8 @@ msgstr "côté de la main gauche"
 msgid "Maximum distance from route"
 msgstr "Distance maximale depuis la route"
 
-msgid " [ID] {0}"
-msgstr " [Id] {0}"
-
-msgid "Public Transport: Change stop type"
-msgstr "Transport public : modifier le type d’arrêt"
+msgid "Suggest Stops"
+msgstr "Suggérer des arrêts"
 
 msgid "Create Stops from GPX ..."
 msgstr "Créer des arrêts depuis un fichier GPX"
@@ -35665,30 +35986,29 @@ msgstr "Sélection du fichier GPX"
 msgid "The GPX file contained no tracks or waypoints."
 msgstr "Le fichier GPX ne contient aucune trace ou de point de passage."
 
-msgid "Create Stops from GPX"
-msgstr "Création d’arrêts à partir du fichier GPX"
+msgid "moved"
+msgstr "déplacé"
 
-msgid "Tracks in this GPX file:"
-msgstr "Parcours dans le fichier GPX :"
+msgid "added"
+msgstr "ajouté"
 
-msgid "Detach"
-msgstr "Détacher"
+msgid "Public Transport: Enable GTFSStops"
+msgstr "Transport public : activer les arrêts GTFS"
 
-msgid "implicit"
-msgstr "implicite"
+msgid "Public Transport: Catch GTFS stops"
+msgstr "Transport public : récupérer les arrêts GTFS"
 
-msgid ""
-"The GPX file doesn''t contain valid trackpoints. Please use a GPX file that "
-"has trackpoints."
-msgstr ""
-"Le fichier GPX ne contient aucun point valide. Veuillez utiliser un fichier "
-"GPX avec des points de passage."
+msgid "skipped"
+msgstr "ignoré"
 
-msgid "GPX File Trouble"
-msgstr "Problème avec le fichier GPX"
+msgid "Public Transport: Disable GTFS"
+msgstr "Transport en commun: Désactiver GTFS"
 
-msgid "unnamed"
-msgstr "sans-nom"
+msgid "Public Transport: Join GTFS stops"
+msgstr "Transport public : joindre des arrêts GTFS"
+
+msgid "Public Transport: Change stop type"
+msgstr "Transport public : modifier le type d’arrêt"
 
 msgid "Public Transport: Add track stop"
 msgstr "Transport public : ajouter un butoir"
@@ -35711,9 +36031,6 @@ msgstr "Transport public : trier la liste des arrêts"
 msgid "Public Transport: Suggest stops"
 msgstr "Transport public : suggérer des arrêts"
 
-msgid "Stopname"
-msgstr "Nom de l’’arrêt"
-
 msgid "Public Transport: Detach waypoints"
 msgstr "Transport public : détacher des points de chemins"
 
@@ -35726,6 +36043,91 @@ msgstr "Transport public : activer les points de chemins"
 msgid "Public Transport: Edit waypoint name"
 msgstr "Transport public : modifier le nom d’un point de chemin"
 
+msgid "rail"
+msgstr "par rail"
+
+msgid "Can''t parse a time from this string."
+msgstr "Impossible de lire l’heure depuis cette chaîne."
+
+msgid "Invalid value"
+msgstr "Valeur invalide"
+
+msgid "Create Stops from GTFS"
+msgstr "Créer les arrêts depuis GTFS"
+
+msgid "GTFS-Stops"
+msgstr "Arrêts GTFS"
+
+msgid "Type of stops to add"
+msgstr "Type d’arrêts à ajouter"
+
+msgid "Time on your GPS device"
+msgstr "Heure de votre appareil GPS"
+
+msgid "HH:MM:SS.sss"
+msgstr "HH:MM:SS.sss"
+
+msgid "Time on your stopwatch"
+msgstr "Heure à votre montre"
+
+msgid "Time window"
+msgstr "Fenêtre de temps"
+
+msgid "seconds"
+msgstr "secondes"
+
+msgid "Move Threshold"
+msgstr "Déplacer le seuil"
+
+msgid "Catch"
+msgstr "Récupérer"
+
+msgid "Join"
+msgstr "Joindre"
+
+msgid "Create Stops from GPX"
+msgstr "Création d’arrêts à partir du fichier GPX"
+
+msgid "Tracks in this GPX file:"
+msgstr "Parcours dans le fichier GPX :"
+
+msgid "Detach"
+msgstr "Détacher"
+
+msgid "implicit"
+msgstr "implicite"
+
+msgid "State"
+msgstr "Département"
+
+msgid "[incomplete]"
+msgstr "[incomplet]"
+
+msgid "[empty way]"
+msgstr "[chemin vide]"
+
+msgid "[gap]"
+msgstr "[écart]"
+
+msgid "Stopname"
+msgstr "Nom de l’’arrêt"
+
+msgid " [ID] {0}"
+msgstr " [Id] {0}"
+
+msgid ""
+"The GPX file doesn''t contain valid trackpoints. Please use a GPX file that "
+"has trackpoints."
+msgstr ""
+"Le fichier GPX ne contient aucun point valide. Veuillez utiliser un fichier "
+"GPX avec des points de passage."
+
+msgid "GPX File Trouble"
+msgstr "Problème avec le fichier GPX"
+
+msgid "unnamed"
+msgstr "sans-nom"
+
 msgid "Distance between stops"
 msgstr "Distance entre les arrêts"
 
@@ -35877,7 +36279,7 @@ msgid "Two rings are equal, and this must not be."
 msgstr "Deux cercles sont identiques, ce qui n’est pas admis."
 
 msgid "Multipolygon from rings"
-msgstr ""
+msgstr "Multipolygone a partir d anneaux"
 
 msgid "Node without ''house'' role found"
 msgstr "Noeud sans \"house\" trouvé"
@@ -36003,7 +36405,7 @@ msgid "Create Roundabout"
 msgstr "Créer un rond-point"
 
 msgid "Roundabout Expander"
-msgstr ""
+msgstr "Aggrandisseur de rond point"
 
 msgid "Road Sign Plugin"
 msgstr "Greffon Signalisation Routière"
@@ -36263,16 +36665,16 @@ msgid "Select a map object"
 msgstr "Sélectionner un objet cartographique"
 
 msgid "Please enter minimal distance in metres"
-msgstr ""
+msgstr "Veuillez entrer la distance minimale (en mètres)"
 
 msgid "Please enter numeric angle in degrees"
-msgstr ""
+msgstr "Veuillez entrer l’angle (en degrés)"
 
 msgid "Shape actions panel"
-msgstr ""
+msgstr "Panneau d action sur les formes"
 
 msgid "Shape mode control panel"
-msgstr ""
+msgstr "Panneau de controle du mode de forme"
 
 msgid "Rotate Mode:"
 msgstr "Mode rotation :"
@@ -36299,19 +36701,19 @@ msgid "Select road"
 msgstr "Sélectionner la route"
 
 msgid "Select none"
-msgstr ""
+msgstr "Aucune sélection"
 
 msgid "Min Distance:"
 msgstr "Distance minimale :"
 
 msgid "Input min distance"
-msgstr ""
+msgstr "Distance minimum d entrée"
 
 msgid "Align all buildings"
 msgstr "Aligner tous les bâtiments"
 
 msgid "Delete overlay"
-msgstr ""
+msgstr "Supprimer le recouvrement"
 
 msgid "Simplify Area"
 msgstr "Simplifier la zone"
@@ -36504,6 +36906,9 @@ msgstr "Ouvre la fenêtre de modification des attributs"
 msgid "JOSM Tag Editor Plugin"
 msgstr "Greffon d’édition des attributs JOSM"
 
+msgid "Presets"
+msgstr "Attributs"
+
 msgid "Abort tag editing and close dialog"
 msgstr "Annuler les modification et fermer la fenêtre"
 
@@ -36626,7 +37031,7 @@ msgid "Terrace"
 msgstr "Bâtiments mitoyens"
 
 msgid "Pass over element without marking it"
-msgstr ""
+msgstr "Passer par dessus l élément sans le marquer"
 
 msgid "Mark element done"
 msgstr "Marquer l''élément comme fait"
@@ -36709,7 +37114,7 @@ msgid "Auto delete layer"
 msgstr "Supprimer automatiquement le calque"
 
 msgid "Set default url"
-msgstr ""
+msgstr "Définir l’URL par défaut"
 
 msgid "Select the checkbox to:"
 msgstr "Sélectionnez la case à cocher pour:"
@@ -36736,13 +37141,13 @@ msgid "Select a task ..."
 msgstr "Sélectionne une tâche..."
 
 msgid "Setting default URL"
-msgstr ""
+msgstr "Définition de l’URL par défaut"
 
 msgid "Enter the new URL"
-msgstr ""
+msgstr "Entrer la nouvelle URL"
 
 msgid "Setting new URL: "
-msgstr ""
+msgstr "Définir une nouvelle URL: "
 
 msgid "Set download area (m²)"
 msgstr "Régler la zone de téléchargement (m²)"
@@ -37186,42 +37591,47 @@ msgid "Create a new signing key"
 msgstr "Créer une nouvelle clé de signature"
 
 msgid "Turn lanes tagging - editor"
-msgstr ""
+msgstr "Editeur d attributs de voies de changement de direction"
 
 msgid "Turn lanes tagging - Editor"
-msgstr ""
+msgstr "Editeur d attributs de voies de changement de direction"
 
 msgid "turn lanes tagging - editor"
-msgstr ""
+msgstr "Editeur d attributs de voies de changement de direction"
 
 msgid "Turn Lanes Editor"
-msgstr ""
+msgstr "Editeur de voies de changement de direction"
 
 msgid " The number of lanes has fixed according number of turns"
-msgstr " Le nombre de lanes a été corrigé en fonction du nombre de virages"
+msgstr ""
+" Le nombre de voiew a été corrigé en fonction du nombre de bifurcations"
 
 msgid " The number of lanes:forward has fixed according number of turns"
 msgstr ""
+" Le nombre de lanes:forward a été fixé selon le nombre de voies de "
+"bifurcation"
 
 msgid " The number of lanes:both_ways has fixed according number of turns"
 msgstr ""
-" Le nombre de lanes:both_ways a été corrigé en fonction du nombre de virages"
+" Le nombre de lanes:both_ways a été corrigé en fonction du nombre de "
+"bifurcations"
 
 msgid " The number of lanes:backward has fixed according number of turns"
 msgstr ""
-" Le nombre de lanes:backward a été corrigé en fonction du nombre de virages"
+" Le nombre de lanes:backward a été corrigé en fonction du nombre de "
+"bifurcation"
 
 msgid "check the right direction of the way"
 msgstr "vérifiez la bonne direction du chemin"
 
 msgid "Unidirectional road"
-msgstr "Construire une voie dans un sens de circulation"
+msgstr "Route à sens unique"
 
 msgid "Build unidirectional road"
 msgstr "Construire une route unidirectionnelle"
 
 msgid "Bidirectional road"
-msgstr "Voie dans les deux sens de circulation"
+msgstr "Route à double sens"
 
 msgid "Build bidirectional road"
 msgstr "Construire une route bidirectionnelle"
@@ -37233,34 +37643,34 @@ msgid "use \"none\" instead of empty values"
 msgstr "utilisez \"none\" à la place des valeurs vides"
 
 msgid "Preset turn lanes"
-msgstr ""
+msgstr "Pré-réglages des voies de changement de direction"
 
 msgid "Recently turn lanes edits"
-msgstr ""
+msgstr "Modification récentes des voies de changement de direction"
 
 msgid "Forward"
 msgstr "Avancer"
 
 msgid "Both way lane"
-msgstr ""
+msgstr "Voie a double direction"
 
 msgid "Backward"
 msgstr "Retour arrière"
 
 msgid "Number of backward lanes"
-msgstr ""
+msgstr "Nombre de voies en sens inverse"
 
 msgid "Number of forward lanes"
-msgstr ""
+msgstr "Nombre de voies dans le même sens"
 
 msgid "Both way"
-msgstr ""
+msgstr "Double direction"
 
 msgid "Number of lanes"
 msgstr "Nombre de voies"
 
 msgid "Directional"
-msgstr ""
+msgstr "Directionnel"
 
 msgid "Turn lanes"
 msgstr "Voies de bifurcation"
@@ -38333,32 +38743,33 @@ msgid "Replace geometry for way {0}"
 msgstr "Remplacer la géométrie du chemin {0}"
 
 msgid "Replace Membership"
-msgstr ""
+msgstr "Remplacer les membres"
 
 msgid ""
 "In relations where the selected object is member of, replace it with a new "
 "one"
-msgstr ""
+msgstr "Dans la relation dont l objet est membre, le remplace par un nouveau"
 
 msgid "Replaced ''{0}'' by ''{1}'' in {2} relation"
 msgid_plural "Replaced ''{0}'' by ''{1}'' in {2} relations"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Remplace \"{0}\" par \"{1}\" in {2} relation"
+msgstr[1] "Remplace \"{0}\" par \"{1}\" in {2} relations"
 
 msgid "The first selected object ''{0}'' is not part of any relation"
 msgstr ""
+"Le premier objet \"{0}\" sélectionné ne fait partie d aucune relation"
 
 msgid "Range of child primitives count"
-msgstr ""
+msgstr "Intervalle de compteur de primitives filles"
 
 msgid "Range of parent primitives count"
-msgstr ""
+msgstr "Intervalle de compteur de primitives parentes"
 
 msgid "Range of referencing relation count"
-msgstr ""
+msgstr "Intervalle de compteur de relations référentes"
 
 msgid "Range of attached ways count"
-msgstr ""
+msgstr "Intervalle de compteurs de chemins attachés"
 
 msgid "Adjacent nodes"
 msgstr "Nœuds adjacents"
@@ -38714,17 +39125,39 @@ msgstr[0] ""
 msgstr[1] ""
 "Ecraser ''{0}'' attributs {1} de {2} avec la nouvelle valeur ''{3}'' ?"
 
-msgid "Search Wikidata items"
+msgid "Download from Sophox API"
+msgstr "Télécharger à partir de l’API Sophox"
+
+msgid ""
+"Find places of education at least 2km, and at most 3km from the center of "
+"the selection"
+msgstr ""
+"Trouver les lieux d éducation à au moins 2km et au plus 3km du centre de la "
+"sélection"
+
+msgid "Show/hide Sophox snippet list"
 msgstr ""
 
+msgid "help"
+msgstr "Aide"
+
+msgid "Server: "
+msgstr "Serveur: "
+
+msgid "Wikidata+OSM server"
+msgstr "Serveur Wikidata + OSM"
+
+msgid "Search Wikidata items"
+msgstr "Rechercher les éléments Wikidata"
+
 msgid "Target key: "
 msgstr "Clé cible: "
 
 msgid "Search Wikipedia category"
-msgstr ""
+msgstr "Chercher la catégorie Wikipedia"
 
 msgid "Load category"
-msgstr "Catéforie de téléchargement"
+msgstr "Charger la catégorie"
 
 msgid "Fetch Wikipedia articles with coordinates"
 msgstr "Récupérer les articles Wikipédia avec des coordonnées"
@@ -38752,7 +39185,7 @@ msgid "Wikidata"
 msgstr "Wikidata"
 
 msgid "Fetches all coordinates from Wikidata in the current view"
-msgstr ""
+msgstr "Obtenir toutes les coordonnées de Wikidata dans la vue actuelle"
 
 msgid "Fetches all coordinates from Wikipedia in the current view"
 msgstr "Récupère toutes les coordonnées de Wikipédia dans la vue courante"
@@ -38792,26 +39225,6 @@ msgstr ""
 "Ajoute un tag \"wikipedia\" correspondant à cet article sur les objets "
 "sélectionnés"
 
-msgid "Download from Wikosm API"
-msgstr ""
-
-msgid ""
-"Find places of education at least 2km, and at most 3km from the center of "
-"the selection"
-msgstr ""
-
-msgid "Show/hide Wikosm snippet list"
-msgstr ""
-
-msgid "help"
-msgstr ""
-
-msgid "Server: "
-msgstr "Serveur: "
-
-msgid "Wikidata+OSM server"
-msgstr ""
-
 msgid "The Ultimate WMS Super-speed Turbo Challenge II"
 msgstr "L’’Ultimate WMS Super-speed Turbo Challenge II"
 
@@ -38864,7 +39277,7 @@ msgid "View Wikidata page"
 msgstr "Voir la page Wikidata"
 
 msgid "View Wikispecies page"
-msgstr ""
+msgstr "Voir la page Wikispecies"
 
 msgid "View UNESCO sheet"
 msgstr "Afficher la fiche UNESCO"
@@ -38873,16 +39286,16 @@ msgid "View %name% image"
 msgstr "Afficher %name% de l’image"
 
 msgid "View %name% sheet of river"
-msgstr ""
+msgstr "Voir la feuille %name% de la rivière"
 
 msgid "View %name% municipality sheet"
-msgstr ""
+msgstr "Voir la feuille %name% de la commune"
 
 msgid "View %name% sheet on osm.fr"
-msgstr ""
+msgstr "Voir la feuille %name% sur osm.fr"
 
 msgid "View %name% map of municipalities"
-msgstr ""
+msgstr "Voir la carte %name% des communes"
 
 msgid "View %name% list of municipalities"
 msgstr "Afficher %name% de la liste des communes"
@@ -38891,28 +39304,28 @@ msgid "View %name% map of cantons"
 msgstr "Afficher %name% des cantons"
 
 msgid "View %name% list of cantons"
-msgstr ""
+msgstr "Voir la %name% liste des cantons"
 
 msgid "View %name% map of arrondissements"
-msgstr ""
+msgstr "Voir la carte %name% des arrondissements"
 
 msgid "View %name% list of arrondissements"
-msgstr ""
+msgstr "Voir la liste %name% des arrondissements"
 
 msgid "View %name% map of departments"
-msgstr ""
+msgstr "Voir la carte %name% des départements"
 
 msgid "View %name% list of departments"
-msgstr ""
+msgstr "Voir la liste %name% des départements"
 
 msgid "View %name% map of regions"
-msgstr ""
+msgstr "Voir la carte %name% des régions"
 
 msgid "View %name% list of regions"
-msgstr ""
+msgstr "Voir la liste %name% des régions"
 
 msgid "View %name% sheet of church"
-msgstr ""
+msgstr "Voir la feuille %name% des églises"
 
 msgid "View Mérimée sheet of monument"
 msgstr "Voir la fiche Mérimée du monument"
@@ -38921,22 +39334,22 @@ msgid "View Mérimée list for this municipality"
 msgstr "Voir la liste Mérimée pour cette municipalité"
 
 msgid "View %name% sheet of geodesic site"
-msgstr ""
+msgstr "Voir la feuille %name% du site géodésique"
 
 msgid "View UAI sheet of school/college"
 msgstr "Voir la liste des références UAI des écoles"
 
 msgid "View %name% sheet of hospital/home"
-msgstr ""
+msgstr "Voir la feuille %name% de l hopital/accueil"
 
 msgid "View INSEE explanation of %name% code"
-msgstr ""
+msgstr "Voir l explication INSEE du code %name%"
 
 msgid "Get identification card (pdf) for this establishment"
-msgstr ""
+msgstr "Obtenir une carte d’identité (pdf) de cet établissement"
 
 msgid "View %name% page of this post office"
-msgstr ""
+msgstr "Voir la page %name% de ce bureau de poste"
 
 msgid "View %name% sheet of memorial"
-msgstr ""
+msgstr "Voir la feuille %name% de ce mémorial"
diff --git a/i18n/po/ga.po b/i18n/po/ga.po
index e8e2ad1..33f18d5 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-10-30 03:38+0100\n"
+"POT-Creation-Date: 2017-11-26 00:06+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-10-30 04:44+0000\n"
-"X-Generator: Launchpad (build 18493)\n"
+"X-Launchpad-Export-Date: 2017-11-26 04:45+0000\n"
+"X-Generator: Launchpad (build 18509)\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
 msgstr ""
@@ -420,12 +420,15 @@ msgstr ""
 msgid "Delete the active layer. Does not delete the associated file."
 msgstr ""
 
-msgid "Toggle dialogs panel"
+msgid "Dialogs panel"
 msgstr ""
 
 msgid "Toggle dialogs panel, maximize mapview"
 msgstr ""
 
+msgid "Toggle dialogs panel"
+msgstr ""
+
 msgid "Distribute Nodes"
 msgstr ""
 
@@ -6487,6 +6490,9 @@ msgstr ""
 msgid "Coordinates (projected): "
 msgstr ""
 
+msgid "UTM Zone"
+msgstr ""
+
 msgid "Part of: "
 msgstr ""
 
@@ -8785,6 +8791,11 @@ msgstr ""
 msgid "Check \"Save\" to save the layer to the file specified on the left."
 msgstr ""
 
+msgid ""
+"A background upload is already in progress. Kindly wait for it to finish "
+"before uploading new changes"
+msgstr ""
+
 msgid "I would like someone to review my edits."
 msgstr ""
 
@@ -9893,6 +9904,9 @@ msgstr ""
 msgid "Save Layer"
 msgstr ""
 
+msgid "Trying to set a read only data layer as edit layer"
+msgstr ""
+
 msgid "{0} note"
 msgid_plural "{0} notes"
 msgstr[0] ""
@@ -10723,11 +10737,6 @@ msgstr ""
 msgid "Failed to parse Mappaint styles from ''{0}''. Error was: {1}"
 msgstr ""
 
-msgid ""
-"Detected deprecated ''{0}'' in ''{1}'' which will be removed shortly. Use "
-"''{2}'' instead."
-msgstr ""
-
 msgid "Failed to locate image ''{0}''"
 msgstr ""
 
@@ -11892,6 +11901,9 @@ msgstr ""
 msgid "Show object ID in selection lists"
 msgstr ""
 
+msgid "Show node coordinates in selection lists"
+msgstr ""
+
 msgid "Show localized name in selection lists"
 msgstr ""
 
@@ -12648,9 +12660,6 @@ msgstr ""
 msgid "UTM"
 msgstr ""
 
-msgid "UTM Zone"
-msgstr ""
-
 msgid "North"
 msgstr ""
 
@@ -13118,9 +13127,6 @@ msgstr ""
 msgid "Error parsing {0}: "
 msgstr ""
 
-msgid "Presets"
-msgstr ""
-
 msgid "Search for objects by preset..."
 msgstr ""
 
@@ -15662,6 +15668,18 @@ msgstr ""
 msgid "korean"
 msgstr ""
 
+msgid "donut"
+msgstr ""
+
+msgid "mediterranean"
+msgstr ""
+
+msgid "friture"
+msgstr ""
+
+msgid "crepe"
+msgstr ""
+
 msgid "Internet access"
 msgstr ""
 
@@ -18504,7 +18522,16 @@ msgstr ""
 msgid "Tents allowed"
 msgstr ""
 
-msgid "Camping Site"
+msgid "Campsite"
+msgstr ""
+
+msgid "Caravans allowed"
+msgstr ""
+
+msgid "Backcountry"
+msgstr ""
+
+msgid "Group only access"
 msgstr ""
 
 msgid "Food+Drinks"
@@ -23333,6 +23360,14 @@ msgid ""
 "resolution or better, and refreshed more frequently with ongoing updates."
 msgstr ""
 
+msgid "DigitalGlobe Premium Imagery Vintage"
+msgstr ""
+
+msgid ""
+"Imagery boundaries and capture dates. Labels appear at zoom level 14 and "
+"higher."
+msgstr ""
+
 msgid "DigitalGlobe Standard Imagery"
 msgstr ""
 
@@ -23342,6 +23377,9 @@ msgid ""
 "Landsat. Average age is 2.31 years, with some areas updated 2x per year."
 msgstr ""
 
+msgid "DigitalGlobe Standard Imagery Vintage"
+msgstr ""
+
 msgid "Esri World Imagery"
 msgstr ""
 
@@ -23405,6 +23443,12 @@ msgstr ""
 msgid "Strava cycling and running heatmap"
 msgstr ""
 
+msgid "Strava water sports heatmap"
+msgstr ""
+
+msgid "Strava winter sports heatmap"
+msgstr ""
+
 msgid "Locator Overlay"
 msgstr ""
 
@@ -23809,6 +23853,9 @@ msgstr ""
 msgid "SPW(allonie) most recent aerial imagery"
 msgstr ""
 
+msgid "SPW(allonie) 2016 aerial imagery"
+msgstr ""
+
 msgid "SPW(allonie) 2015 aerial imagery"
 msgstr ""
 
@@ -23854,6 +23901,14 @@ msgstr ""
 msgid "Addresses data from IBGE"
 msgstr ""
 
+msgid "Street names IBGE Salvador-BA"
+msgstr ""
+
+msgid ""
+"Streets geometry and names of Salvador, Bahia. Source: Faces de Logradouro - "
+"IBGE."
+msgstr ""
+
 msgid "Rio Mosaic 2013"
 msgstr ""
 
@@ -24584,6 +24639,9 @@ msgstr ""
 msgid "Japan GSI ortho Imagery"
 msgstr ""
 
+msgid "Japan GSI Standard Map"
+msgstr ""
+
 msgid "imagico.de OSM images for mapping: Aral Sea (low water level)"
 msgstr ""
 
@@ -24613,7 +24671,7 @@ msgstr ""
 msgid "20cm ortho - Latvia - Coastline"
 msgstr ""
 
-msgid "1.cikla ortofotokarte - Latvia"
+msgid "Orthophoto 1st cycle (1994-1999) - Latvia"
 msgstr ""
 
 msgid "ORT10LT (Lithuania)"
@@ -24622,6 +24680,9 @@ msgstr ""
 msgid "geoportail.lu all layers"
 msgstr ""
 
+msgid "geoportail.lu ortho latest"
+msgstr ""
+
 msgid "geoportail.lu ortho 2016"
 msgstr ""
 
@@ -26112,6 +26173,9 @@ msgstr ""
 msgid "{0} on a node. Should be used on a way."
 msgstr ""
 
+msgid "{0} on a node. Should be used on a way or relation."
+msgstr ""
+
 msgid "{0} on a node. Should be drawn as an area."
 msgstr ""
 
@@ -26339,6 +26403,9 @@ msgstr ""
 msgid "Nodes duplicating parent way tags"
 msgstr ""
 
+msgid "{0} together with {1} and {2}. Remove {0}."
+msgstr ""
+
 msgid ""
 "wikipedia tag has no language given, use ''wikipedia''=''language:page "
 "title''"
@@ -27103,6 +27170,21 @@ msgstr ""
 msgid "Importing..."
 msgstr ""
 
+msgid "Shape is started incorrectly"
+msgstr ""
+
+msgid "Can''t load SVG diagram"
+msgstr ""
+
+msgid "Can''t find root SVG element"
+msgstr ""
+
+msgid "Import primitives"
+msgstr ""
+
+msgid "Cannot find configuration file!"
+msgstr ""
+
 msgid "DXF files [ImportDxf plugin] (*.dxf)"
 msgstr ""
 
@@ -27742,6 +27824,9 @@ msgstr ""
 msgid "Download mode"
 msgstr ""
 
+msgid "Number of images to be pre-fetched (forwards and backwards)"
+msgstr ""
+
 msgid "You are logged in as ''{0}''."
 msgstr ""
 
@@ -27952,8 +28037,17 @@ msgid "only when manually requested"
 msgstr ""
 
 msgid ""
-"The downloaded OSM area is too big. Download mode has been changed to OSM "
-"area until the layer is restarted."
+"The Mapillary layer has stopped downloading images, because the requested "
+"area is too big!"
+msgstr ""
+
+msgid ""
+"To solve this problem, you could zoom in and load a smaller area of the map."
+msgstr ""
+
+msgid ""
+"To solve this problem, you could switch to download mode ''{0}'' and load "
+"Mapillary images for a smaller portion of the map."
 msgstr ""
 
 msgid "Downloading"
@@ -31265,19 +31359,6 @@ msgstr ""
 msgid "Merge Overlap (combine)"
 msgstr ""
 
-msgid ""
-"<html>A role based relation membership was copied to all new ways.<br>You "
-"should verify this and correct it when necessary.</html>"
-msgstr ""
-
-msgid ""
-"<html>A relation membership was copied to all new ways.<br>You should verify "
-"this and correct it when necessary.</html>"
-msgstr ""
-
-msgid "Split way"
-msgstr ""
-
 msgid "Michigan Left"
 msgstr ""
 
@@ -32732,254 +32813,254 @@ msgstr ""
 msgid "PT: Route passes a oneway road in the wrong direction"
 msgstr ""
 
-msgid "moved"
+msgid "Create Stops from GTFS ..."
 msgstr ""
 
-msgid "rail"
+msgid "Create Stops from a GTFS file"
 msgstr ""
 
-msgid "Can''t parse a time from this string."
+msgid "Select GTFS file (stops.txt)"
 msgstr ""
 
-msgid "Invalid value"
+msgid "File \"{0}\" does not exist"
 msgstr ""
 
-msgid "added"
+msgid "IOException \"{0}\" occurred"
 msgstr ""
 
-msgid "Public Transport: Enable GTFSStops"
+msgid ""
+"There exists no dataset. Try to download data from the server or open an OSM "
+"file."
 msgstr ""
 
-msgid "Public Transport: Catch GTFS stops"
+msgid "No data found"
 msgstr ""
 
-msgid "skipped"
+msgid "The GTFS file was empty."
 msgstr ""
 
-msgid "Public Transport: Disable GTFS"
+msgid "[ID] {0}"
 msgstr ""
 
-msgid "Create Stops from GTFS ..."
+msgid "Route patterns ..."
 msgstr ""
 
-msgid "Create Stops from a GTFS file"
+msgid "Edit Route patterns for public transport"
 msgstr ""
 
-msgid "Select GTFS file (stops.txt)"
+msgid "Route Patterns"
 msgstr ""
 
-msgid "File \"{0}\" does not exist"
+msgid "Overview"
 msgstr ""
 
-msgid "IOException \"{0}\" occurred"
+msgid "Itinerary"
 msgstr ""
 
-msgid ""
-"There exists no dataset. Try to download data from the server or open an OSM "
-"file."
+msgid "Stops"
 msgstr ""
 
-msgid "No data found"
+msgid "Meta"
 msgstr ""
 
-msgid "The GTFS file was empty."
+msgid "Existing route patterns:"
 msgstr ""
 
-msgid "Create Stops from GTFS"
+msgid "Reflect"
 msgstr ""
 
-msgid "GTFS-Stops"
+msgid "Required tags:"
 msgstr ""
 
-msgid "Type of stops to add"
+msgid "Common tags:"
 msgstr ""
 
-msgid "Time on your GPS device"
+msgid "Additional tags:"
 msgstr ""
 
-msgid "HH:MM:SS.sss"
+msgid "Add a new Tag"
 msgstr ""
 
-msgid "Time on your stopwatch"
+msgid "Name/Id"
 msgstr ""
 
-msgid "Time window"
+msgid "Find"
 msgstr ""
 
-msgid "seconds"
+msgid "Show"
 msgstr ""
 
-msgid "Move Threshold"
+msgid "Mark"
 msgstr ""
 
-msgid "Suggest Stops"
+msgid "Ref"
 msgstr ""
 
-msgid "Find"
+msgid "Stops are possible on the"
 msgstr ""
 
-msgid "Show"
+msgid "right hand side"
 msgstr ""
 
-msgid "Mark"
+msgid "left hand side"
 msgstr ""
 
-msgid "Catch"
+msgid "Maximum distance from route"
 msgstr ""
 
-msgid "Join"
+msgid "Suggest Stops"
 msgstr ""
 
-msgid "Public Transport: Join GTFS stops"
+msgid "Create Stops from GPX ..."
 msgstr ""
 
-msgid "State"
+msgid "Create Stops from a GPX file"
 msgstr ""
 
-msgid "[incomplete]"
+msgid "Select GPX file"
 msgstr ""
 
-msgid "[empty way]"
+msgid "The GPX file contained no tracks or waypoints."
 msgstr ""
 
-msgid "[ID] {0}"
+msgid "moved"
 msgstr ""
 
-msgid "[gap]"
+msgid "added"
 msgstr ""
 
-msgid "Route patterns ..."
+msgid "Public Transport: Enable GTFSStops"
 msgstr ""
 
-msgid "Edit Route patterns for public transport"
+msgid "Public Transport: Catch GTFS stops"
 msgstr ""
 
-msgid "Route Patterns"
+msgid "skipped"
 msgstr ""
 
-msgid "Overview"
+msgid "Public Transport: Disable GTFS"
 msgstr ""
 
-msgid "Itinerary"
+msgid "Public Transport: Join GTFS stops"
 msgstr ""
 
-msgid "Stops"
+msgid "Public Transport: Change stop type"
 msgstr ""
 
-msgid "Meta"
+msgid "Public Transport: Add track stop"
 msgstr ""
 
-msgid "Existing route patterns:"
+msgid "Public Transport: Delete track stop"
 msgstr ""
 
-msgid "Reflect"
+msgid "Public Transport: Detach track stop list"
 msgstr ""
 
-msgid "Required tags:"
+msgid "Public Transport: Edit track stop list"
 msgstr ""
 
-msgid "Common tags:"
+msgid "Public Transport: Relocate nodes in track stoplist"
 msgstr ""
 
-msgid "Additional tags:"
+msgid "Public Transport: sort track stop list"
 msgstr ""
 
-msgid "Add a new Tag"
+msgid "Public Transport: Suggest stops"
 msgstr ""
 
-msgid "Name/Id"
+msgid "Public Transport: Detach waypoints"
 msgstr ""
 
-msgid "Ref"
+msgid "Public Transport: Disable waypoints"
 msgstr ""
 
-msgid "Stops are possible on the"
+msgid "Public Transport: Enable waypoints"
 msgstr ""
 
-msgid "right hand side"
+msgid "Public Transport: Edit waypoint name"
 msgstr ""
 
-msgid "left hand side"
+msgid "rail"
 msgstr ""
 
-msgid "Maximum distance from route"
+msgid "Can''t parse a time from this string."
 msgstr ""
 
-msgid " [ID] {0}"
+msgid "Invalid value"
 msgstr ""
 
-msgid "Public Transport: Change stop type"
+msgid "Create Stops from GTFS"
 msgstr ""
 
-msgid "Create Stops from GPX ..."
+msgid "GTFS-Stops"
 msgstr ""
 
-msgid "Create Stops from a GPX file"
+msgid "Type of stops to add"
 msgstr ""
 
-msgid "Select GPX file"
+msgid "Time on your GPS device"
 msgstr ""
 
-msgid "The GPX file contained no tracks or waypoints."
+msgid "HH:MM:SS.sss"
 msgstr ""
 
-msgid "Create Stops from GPX"
+msgid "Time on your stopwatch"
 msgstr ""
 
-msgid "Tracks in this GPX file:"
+msgid "Time window"
 msgstr ""
 
-msgid "Detach"
+msgid "seconds"
 msgstr ""
 
-msgid "implicit"
+msgid "Move Threshold"
 msgstr ""
 
-msgid ""
-"The GPX file doesn''t contain valid trackpoints. Please use a GPX file that "
-"has trackpoints."
+msgid "Catch"
 msgstr ""
 
-msgid "GPX File Trouble"
+msgid "Join"
 msgstr ""
 
-msgid "unnamed"
+msgid "Create Stops from GPX"
 msgstr ""
 
-msgid "Public Transport: Add track stop"
+msgid "Tracks in this GPX file:"
 msgstr ""
 
-msgid "Public Transport: Delete track stop"
+msgid "Detach"
 msgstr ""
 
-msgid "Public Transport: Detach track stop list"
+msgid "implicit"
 msgstr ""
 
-msgid "Public Transport: Edit track stop list"
+msgid "State"
 msgstr ""
 
-msgid "Public Transport: Relocate nodes in track stoplist"
+msgid "[incomplete]"
 msgstr ""
 
-msgid "Public Transport: sort track stop list"
+msgid "[empty way]"
 msgstr ""
 
-msgid "Public Transport: Suggest stops"
+msgid "[gap]"
 msgstr ""
 
 msgid "Stopname"
 msgstr ""
 
-msgid "Public Transport: Detach waypoints"
+msgid " [ID] {0}"
 msgstr ""
 
-msgid "Public Transport: Disable waypoints"
+msgid ""
+"The GPX file doesn''t contain valid trackpoints. Please use a GPX file that "
+"has trackpoints."
 msgstr ""
 
-msgid "Public Transport: Enable waypoints"
+msgid "GPX File Trouble"
 msgstr ""
 
-msgid "Public Transport: Edit waypoint name"
+msgid "unnamed"
 msgstr ""
 
 msgid "Distance between stops"
@@ -33708,6 +33789,9 @@ msgstr ""
 msgid "JOSM Tag Editor Plugin"
 msgstr ""
 
+msgid "Presets"
+msgstr ""
+
 msgid "Abort tag editing and close dialog"
 msgstr ""
 
@@ -35633,6 +35717,26 @@ msgid_plural "Overwrite ''{0}'' tags {1} from {2} with new value ''{3}''?"
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Download from Sophox API"
+msgstr ""
+
+msgid ""
+"Find places of education at least 2km, and at most 3km from the center of "
+"the selection"
+msgstr ""
+
+msgid "Show/hide Sophox snippet list"
+msgstr ""
+
+msgid "help"
+msgstr ""
+
+msgid "Server: "
+msgstr ""
+
+msgid "Wikidata+OSM server"
+msgstr ""
+
 msgid "Search Wikidata items"
 msgstr ""
 
@@ -35706,26 +35810,6 @@ msgid ""
 "objects"
 msgstr ""
 
-msgid "Download from Wikosm API"
-msgstr ""
-
-msgid ""
-"Find places of education at least 2km, and at most 3km from the center of "
-"the selection"
-msgstr ""
-
-msgid "Show/hide Wikosm snippet list"
-msgstr ""
-
-msgid "help"
-msgstr ""
-
-msgid "Server: "
-msgstr ""
-
-msgid "Wikidata+OSM server"
-msgstr ""
-
 msgid "The Ultimate WMS Super-speed Turbo Challenge II"
 msgstr ""
 
diff --git a/i18n/po/gl.po b/i18n/po/gl.po
index 7cd236b..815ec3b 100644
--- a/i18n/po/gl.po
+++ b/i18n/po/gl.po
@@ -8,16 +8,16 @@ msgid ""
 msgstr ""
 "Project-Id-Version: josm\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2017-10-30 03:38+0100\n"
-"PO-Revision-Date: 2016-01-01 15:11+0000\n"
-"Last-Translator: Marcos Lans <Unknown>\n"
+"POT-Creation-Date: 2017-11-26 00:06+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"
 "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-10-30 04:45+0000\n"
-"X-Generator: Launchpad (build 18493)\n"
+"X-Launchpad-Export-Date: 2017-11-26 04:46+0000\n"
+"X-Generator: Launchpad (build 18509)\n"
 "Language: gl\n"
 "X-Poedit-Language: Galician\n"
 
@@ -442,12 +442,15 @@ msgstr ""
 msgid "Delete the active layer. Does not delete the associated file."
 msgstr ""
 
-msgid "Toggle dialogs panel"
-msgstr "Alternar o panel de diálogos."
+msgid "Dialogs panel"
+msgstr ""
 
 msgid "Toggle dialogs panel, maximize mapview"
 msgstr "Alternar o panel de diálogos, maximizar a vista do mapa."
 
+msgid "Toggle dialogs panel"
+msgstr "Alternar o panel de diálogos."
+
 msgid "Distribute Nodes"
 msgstr ""
 
@@ -465,7 +468,7 @@ msgid ""
 msgstr ""
 
 msgid "Download data"
-msgstr "Descargar data"
+msgstr "Descargar datos"
 
 msgid "Download map data from a server of your choice"
 msgstr ""
@@ -639,10 +642,9 @@ msgstr "Confirmación de unión de zonas"
 msgid "The selected way has nodes outside of the downloaded data region."
 msgid_plural ""
 "The selected ways have nodes outside of the downloaded data region."
-msgstr[0] ""
-"A vía seleccionada só ten nodos fora da rexión de datos descargados"
+msgstr[0] "A vía seleccionada ten nodos fora da rexión de datos descargados."
 msgstr[1] ""
-"As vías seleccionadas só teñen nodos fora da rexión de datos descargados"
+"As vías seleccionadas teñen nodos fora da rexión de datos descargados"
 
 msgid "This can lead to nodes being deleted accidentally."
 msgstr "Isto pode levar a unha eliminación accidental dos nodos"
@@ -1257,7 +1259,7 @@ msgid "Save the current data to a new file."
 msgstr "Gardar os datos actuais nun novo ficheiro."
 
 msgid "Search Notes..."
-msgstr ""
+msgstr "Buscar notas..."
 
 msgid "Download notes from the note search API"
 msgstr ""
@@ -1266,10 +1268,10 @@ msgid "Search the OSM API for notes containing words:"
 msgstr ""
 
 msgid "Search for notes"
-msgstr ""
+msgstr "Procurar notas"
 
 msgid "You must enter a search term"
-msgstr ""
+msgstr "Debes introducir un termo de busca"
 
 msgid "Select All"
 msgstr "Escoller Todo"
@@ -1443,13 +1445,13 @@ msgid "Segment {0}: {1}"
 msgstr ""
 
 msgid "Search preset"
-msgstr ""
+msgstr "Buscar predefinido"
 
 msgid "Show preset search dialog"
 msgstr ""
 
 msgid "Search presets"
-msgstr ""
+msgstr "Buscar predefinidos"
 
 msgid "Discourage upload"
 msgstr ""
@@ -1509,13 +1511,13 @@ msgstr ""
 "obterán as súas propias copias e todos os nodos serán seleccionados."
 
 msgid "Existing node"
-msgstr ""
+msgstr "Nodo existente"
 
 msgid "Both nodes"
-msgstr ""
+msgstr "Ambos nodos"
 
 msgid "New node"
-msgstr ""
+msgstr "Nodo novo"
 
 msgid "Tags / Memberships"
 msgstr ""
@@ -1597,7 +1599,7 @@ msgid "Undo the last action."
 msgstr "Desfacer a última acción."
 
 msgid "Undo ..."
-msgstr ""
+msgstr "Desfacer ..."
 
 msgid "Undo {0}"
 msgstr ""
@@ -1631,7 +1633,7 @@ msgstr ""
 "Non se atopou ningún obxecto co identificador {0} no conxunto de datos actual"
 
 msgid "Update selection"
-msgstr "Subir selección"
+msgstr "Actualizar selección"
 
 msgid ""
 "Updates the currently selected objects from the server (re-downloads data)"
@@ -1643,7 +1645,7 @@ msgid "There are no selected objects to update."
 msgstr "Non hai obxectos escollido para actualizar."
 
 msgid "Selection empty"
-msgstr "Selección valeira"
+msgstr "Selección baleira"
 
 msgid "Upload data"
 msgstr "Subir datos"
@@ -1681,10 +1683,10 @@ msgid "Upload note changes to server"
 msgstr ""
 
 msgid "Upload notes"
-msgstr ""
+msgstr "Subir notas"
 
 msgid "Uploading notes to server"
-msgstr ""
+msgstr "Subindo notas o servidor"
 
 msgid "Upload selection"
 msgstr "Subir seleccion"
@@ -1850,7 +1852,7 @@ msgid "Errors during download"
 msgstr "Erros durante a descarga"
 
 msgid "Download GPS"
-msgstr ""
+msgstr "Descargar GPS"
 
 msgid "Downloading GPS data"
 msgstr "Descargando datos GPS"
@@ -1865,10 +1867,10 @@ msgid "Download OSM Notes"
 msgstr ""
 
 msgid "Downloading Notes"
-msgstr ""
+msgstr "Descargando notas"
 
 msgid "Notes"
-msgstr "Anotacións"
+msgstr "Notas"
 
 msgid "{0} note has been downloaded."
 msgid_plural "{0} notes have been downloaded."
@@ -1884,7 +1886,7 @@ msgid ""
 msgstr ""
 
 msgid "More notes to download"
-msgstr ""
+msgstr "Máis notas para descargar"
 
 msgid "Download OSM Notes within Bounds"
 msgstr ""
@@ -2007,7 +2009,7 @@ msgid "Error during download"
 msgstr "Erro durante a descarga"
 
 msgid "Add a new Note"
-msgstr ""
+msgstr "Engadir unha nota nova"
 
 msgid "Add note mode"
 msgstr ""
@@ -2016,7 +2018,7 @@ msgid "Click the location where you wish to create a new note"
 msgstr ""
 
 msgid "Create new note"
-msgstr ""
+msgstr "Crear unha nota nova"
 
 msgid "Create note"
 msgstr ""
@@ -2025,7 +2027,7 @@ msgid "Enter a detailed comment to create a note"
 msgstr ""
 
 msgid "You must enter a comment to create a new note"
-msgstr ""
+msgstr "Debes introducir un comentario para crear unha nota nova"
 
 msgid "Delete Mode"
 msgstr "Eliminar o modo"
@@ -2323,7 +2325,7 @@ msgid "Add all objects selected in the current dataset after the last member"
 msgstr ""
 
 msgid "Add selection to relation"
-msgstr ""
+msgstr "Engadir selección á relación"
 
 msgid ""
 "{0}Add selection to relation{1}: Verify every single relation to avoid "
@@ -2369,13 +2371,13 @@ msgstr[0] ""
 msgstr[1] ""
 
 msgid "Confirmation"
-msgstr ""
+msgstr "Confirmación"
 
 msgid "List of recent relations"
-msgstr ""
+msgstr "Listaxe de relacións recentes"
 
 msgid "Open recent relation"
-msgstr ""
+msgstr "Abrir relación recente"
 
 msgid "Relation Editor: {0}"
 msgstr ""
@@ -2438,7 +2440,7 @@ msgid "remove from selection"
 msgstr "retirar da selección"
 
 msgid "find in selection"
-msgstr "buscar a seleccion"
+msgstr "buscar na seleccion"
 
 msgid "case sensitive"
 msgstr "sensíbel a maiúsculas"
@@ -2453,7 +2455,7 @@ msgid "add toolbar button"
 msgstr ""
 
 msgid "standard"
-msgstr ""
+msgstr "estándar"
 
 msgid "regular expression"
 msgstr "expresión regular"
@@ -2462,7 +2464,7 @@ msgid "MapCSS selector"
 msgstr ""
 
 msgid "Selection settings"
-msgstr ""
+msgstr "Axustes de selección"
 
 msgid "Additional settings"
 msgstr ""
@@ -2600,7 +2602,7 @@ msgid "objects with last modification timestamp within range"
 msgstr ""
 
 msgid "properties"
-msgstr ""
+msgstr "propiedades"
 
 msgid ""
 "ways with at least 20 nodes, or relations containing at least 20 nodes"
@@ -2623,7 +2625,7 @@ msgid "ways with a length of 200 m or more"
 msgstr ""
 
 msgid "state"
-msgstr ""
+msgstr "estado"
 
 msgid "all modified objects"
 msgstr ""
@@ -2662,7 +2664,7 @@ msgid "every n-th member of relation and/or every n-th node of way"
 msgstr ""
 
 msgid "view"
-msgstr ""
+msgstr "vista"
 
 msgid "objects in current view"
 msgstr ""
@@ -2671,7 +2673,7 @@ msgid "objects (and all its way nodes / relation members) in current view"
 msgstr ""
 
 msgid "objects in downloaded area"
-msgstr ""
+msgstr "obxectos na área descargada"
 
 msgid "objects (and all its way nodes / relation members) in downloaded area"
 msgstr ""
@@ -3181,7 +3183,7 @@ msgid "Imperial"
 msgstr "Imperial"
 
 msgid "Nautical Mile"
-msgstr ""
+msgstr "Milla náutica"
 
 msgid "Expected non-empty value for parameter ''{0}'', got ''{1}''"
 msgstr ""
@@ -3234,7 +3236,7 @@ msgid "Unable to parse as coordinate value: ''{0}''"
 msgstr ""
 
 msgid "Date of imagery: {0}"
-msgstr ""
+msgstr "Data da imaxe: {0}"
 
 msgid "This imagery is marked as best in this region in other editors."
 msgstr ""
@@ -3249,7 +3251,7 @@ msgid "Update default entries"
 msgstr ""
 
 msgid "Update imagery ''{0}''"
-msgstr ""
+msgstr "Actualizar imaxes ''{0}''"
 
 msgid "Drop old imagery ''{0}''"
 msgstr ""
@@ -3272,13 +3274,13 @@ msgid ""
 msgstr ""
 
 msgid "Select WMTS layer"
-msgstr ""
+msgstr "Seleccionar capa WMTS"
 
 msgid "Layer name"
-msgstr ""
+msgstr "Nome da capa"
 
 msgid "Projection"
-msgstr ""
+msgstr "Proxección"
 
 msgid "Matrix set identifier"
 msgstr ""
@@ -3381,7 +3383,7 @@ msgid "incomplete"
 msgstr "incompleto"
 
 msgid "House {0}"
-msgstr ""
+msgstr "Casa {0}"
 
 msgid "House number {0} at {1}"
 msgstr ""
@@ -3477,7 +3479,7 @@ msgid "closedway"
 msgstr "vía pechada"
 
 msgid "multipolygon"
-msgstr ""
+msgstr "multipolígono"
 
 msgid ""
 "Tag collection cannot be applied to a primitive because there are keys with "
@@ -3621,7 +3623,7 @@ msgstr "RX"
 
 msgctxt "search"
 msgid "CSS"
-msgstr ""
+msgstr "CSS"
 
 msgctxt "search"
 msgid "A"
@@ -3723,28 +3725,28 @@ msgid "value expected"
 msgstr ""
 
 msgid "Short Description:"
-msgstr ""
+msgstr "Descrición curta:"
 
 msgid "URL:"
-msgstr ""
+msgstr "URL :"
 
 msgid "Author:"
-msgstr ""
+msgstr "Autor:"
 
 msgid "Webpage:"
-msgstr ""
+msgstr "Páxina web:"
 
 msgid "Description:"
-msgstr ""
+msgstr "Descrición:"
 
 msgid "Version:"
-msgstr ""
+msgstr "Versión:"
 
 msgid "Minimum JOSM Version:"
 msgstr ""
 
 msgid "by {0}"
-msgstr ""
+msgstr "por {0}"
 
 msgid "JOSM default (MapCSS)"
 msgstr ""
@@ -3754,7 +3756,7 @@ msgid ""
 msgstr ""
 
 msgid "Potlatch 2"
-msgstr ""
+msgstr "Potlatch 2"
 
 msgid "the main Potlatch 2 style"
 msgstr ""
@@ -3784,7 +3786,7 @@ msgid "Checks for deprecated features"
 msgstr ""
 
 msgid "Geometry"
-msgstr ""
+msgstr "Xeometría"
 
 msgid "Checks for geometry errors"
 msgstr ""
@@ -3802,7 +3804,7 @@ msgid "Checks for wrong multiple values"
 msgstr ""
 
 msgid "Numeric values"
-msgstr ""
+msgstr "Valores númericos"
 
 msgid "Checks for wrong numeric values"
 msgstr ""
@@ -3820,7 +3822,7 @@ msgid "Checks for errors on relations"
 msgstr ""
 
 msgid "Territories"
-msgstr ""
+msgstr "Territorios"
 
 msgid "Checks for territories-specific features"
 msgstr ""
@@ -3896,7 +3898,7 @@ msgid "Unexpected number of arguments for parameter ''+bounds'' (must be 4)"
 msgstr ""
 
 msgid "Unknown parameter ''{0}''"
-msgstr ""
+msgstr "Parámetro descoñecido ''{0}''"
 
 msgid "Expected number argument for parameter ''{0}''"
 msgstr ""
@@ -3912,7 +3914,7 @@ msgid "Custom Projection"
 msgstr ""
 
 msgid "Error: {0}"
-msgstr ""
+msgstr "Erro: {0}"
 
 msgid "JOSM projection command line interface"
 msgstr ""
@@ -3924,7 +3926,7 @@ msgid "Converts coordinates from one coordinate reference system to another."
 msgstr ""
 
 msgid "Options"
-msgstr ""
+msgstr "Opcións"
 
 msgid "Show this help"
 msgstr "Amosar esta axuda"
@@ -3966,13 +3968,13 @@ msgid "Unable to parse number ''{0}''"
 msgstr ""
 
 msgid "GRS80"
-msgstr ""
+msgstr "GRS80"
 
 msgid "WGS84"
-msgstr ""
+msgstr "WGS84"
 
 msgid "Albers Equal Area"
-msgstr ""
+msgstr "Albers Equal Area"
 
 msgid "Parameter ''{0}'' required."
 msgstr ""
@@ -3981,13 +3983,13 @@ msgid "standard parallels are opposite"
 msgstr ""
 
 msgid "Cassini-Soldner"
-msgstr ""
+msgstr "Cassini-Soldner"
 
 msgid "Double Stereographic"
 msgstr ""
 
 msgid "Lambert Azimuthal Equal Area"
-msgstr ""
+msgstr "Lambert Azimuthal Equal Area"
 
 msgid "Lambert Conformal Conic"
 msgstr ""
@@ -4017,13 +4019,13 @@ msgid "Polar Stereographic: Parameter ''{0}'' must be 90 or -90."
 msgstr ""
 
 msgid "Sinusoidal"
-msgstr ""
+msgstr "Sinusoidal"
 
 msgid "Swiss Oblique Mercator"
 msgstr ""
 
 msgid "Transverse Mercator"
-msgstr ""
+msgstr "Transverse Mercator"
 
 msgid ""
 "Error initializing test {0}:\n"
@@ -4112,7 +4114,7 @@ msgid "Way contains more than {0} nodes. It should be split or simplified"
 msgstr ""
 
 msgid "Barriers and entrances"
-msgstr ""
+msgstr "Barreiras e entradas"
 
 msgid "Checks for errors in barriers and entrances."
 msgstr ""
@@ -4121,7 +4123,7 @@ msgid "Barrier entrance not set on a barrier"
 msgstr ""
 
 msgid "Coastlines"
-msgstr ""
+msgstr "Costas"
 
 msgid "This test checks that coastlines are correct."
 msgstr "Esta proba comproba que as liñas de costa sexan correctas."
@@ -4230,7 +4232,7 @@ msgid "Nodes at same position"
 msgstr "Nodos na mesma posición"
 
 msgid "Duplicated relations"
-msgstr ""
+msgstr "Relacións duplicadas"
 
 msgid ""
 "This test checks that there are no relations with same tags and same members "
@@ -4288,7 +4290,7 @@ msgid "Checks for errors in internet-related tags."
 msgstr ""
 
 msgid "''{0}'': {1}"
-msgstr ""
+msgstr "''{0}'': {1}"
 
 msgid "Lane tags"
 msgstr ""
@@ -4300,7 +4302,7 @@ msgid "Number of {0} greater than {1}"
 msgstr ""
 
 msgid "{0}+{1}"
-msgstr ""
+msgstr "{0}+{1}"
 
 msgid "Number of lane dependent values inconsistent"
 msgstr ""
@@ -4333,7 +4335,7 @@ msgid "Fix of {0}"
 msgstr ""
 
 msgid " or "
-msgstr ""
+msgstr " ou "
 
 msgid "{0}, use {1} instead"
 msgstr ""
@@ -4505,7 +4507,7 @@ msgid "Way contains segment twice"
 msgstr ""
 
 msgid "Power lines"
-msgstr ""
+msgstr "Liñas eléctricas"
 
 msgid ""
 "Checks for nodes in power lines that do not have a power=tower/pole tag."
@@ -4515,7 +4517,7 @@ msgid "Missing power tower/pole within power line"
 msgstr ""
 
 msgid "Public Transport Route"
-msgstr ""
+msgstr "Ruta de transporte público"
 
 msgid "Route relation contains a ''{0}'' role"
 msgstr ""
@@ -4666,7 +4668,7 @@ msgid "Value ''{0}'' for key ''{1}'' not in presets."
 msgstr ""
 
 msgid "FIXMES"
-msgstr "FIXMES"
+msgstr ""
 
 msgid "Check property keys."
 msgstr ""
@@ -4816,7 +4818,7 @@ msgid "Unconnected railways"
 msgstr ""
 
 msgid "Unconnected waterways"
-msgstr ""
+msgstr "Vías acuáticas non conectadas"
 
 msgid "Unconnected natural lands and landuses"
 msgstr ""
@@ -4961,7 +4963,7 @@ msgid "Conflict"
 msgstr "Conflito"
 
 msgid "Authentication Failed"
-msgstr "Fallou a autentificación"
+msgstr "Fallou a autenticación"
 
 msgid "Access to redacted version ''{0}'' of {1} {2} is forbidden."
 msgstr ""
@@ -4979,7 +4981,7 @@ msgid "Communication with OSM server failed"
 msgstr "A Comunicacion con OSM fallou"
 
 msgid "Authentication failed"
-msgstr "Autenticazón fallida"
+msgstr "Fallou a autenticación"
 
 msgid "Unknown host"
 msgstr "Maquina descoñecida"
@@ -5009,7 +5011,7 @@ msgstr ""
 
 msgctxt "menu"
 msgid "Imagery"
-msgstr ""
+msgstr "Imaxes"
 
 msgctxt "layer"
 msgid "Offset"
@@ -5070,7 +5072,7 @@ msgid "Initializing validator"
 msgstr "Inicializando validador"
 
 msgid "Initializing presets"
-msgstr "Inicializando predeterminados"
+msgstr "Inicializando predefinidos"
 
 msgid "Initializing map styles"
 msgstr "Inicializando estilos de mapa"
@@ -5241,7 +5243,7 @@ msgid ""
 msgstr ""
 
 msgid "Updating plugins"
-msgstr ""
+msgstr "Actualizando complementos"
 
 msgid "Installing updated plugins"
 msgstr "Instalando os complementos actualizados"
@@ -5330,38 +5332,38 @@ msgstr ""
 
 msgctxt "menu"
 msgid "Edit"
-msgstr ""
+msgstr "Editar"
 
 msgctxt "menu"
 msgid "View"
-msgstr ""
+msgstr "Vista"
 
 msgctxt "menu"
 msgid "Tools"
-msgstr ""
+msgstr "Ferramentas"
 
 msgctxt "menu"
 msgid "More tools"
-msgstr ""
+msgstr "Máis ferramentas"
 
 msgctxt "menu"
 msgid "Data"
-msgstr ""
+msgstr "Datos"
 
 msgctxt "menu"
 msgid "Selection"
-msgstr ""
+msgstr "Selección"
 
 msgctxt "menu"
 msgid "Presets"
-msgstr ""
+msgstr "Predefinidos"
 
 msgid "More..."
-msgstr ""
+msgstr "Máis…"
 
 msgctxt "menu"
 msgid "GPS"
-msgstr ""
+msgstr "GPS"
 
 msgctxt "menu"
 msgid "Windows"
@@ -5369,13 +5371,13 @@ msgstr ""
 
 msgctxt "menu"
 msgid "Help"
-msgstr ""
+msgstr "Axuda"
 
 msgid "Menu: {0}"
 msgstr "Menú: {0}"
 
 msgid "Main toolbar"
-msgstr ""
+msgstr "Barra de ferramentas principal"
 
 msgid ""
 "Toggles the visibility of the main toolbar (i.e., the horizontal toolbar)"
@@ -5394,14 +5396,14 @@ msgid "Click to open the tagging presets tab in the preferences"
 msgstr ""
 
 msgid "Imagery preferences"
-msgstr ""
+msgstr "Preferencias de imaxes"
 
 msgid "Click to open the imagery tab in the preferences"
 msgstr ""
 
 msgctxt "menu"
 msgid "Audio"
-msgstr ""
+msgstr "Son"
 
 msgid "Do not hide toolbar"
 msgstr ""
@@ -5575,7 +5577,7 @@ msgid "Please enter a tile address"
 msgstr "Introduza o enderezo da tesela"
 
 msgid "The current value isn''t a valid tile address"
-msgstr "O valor actual non é in enderezo de tesela válido."
+msgstr "O valor actual non é un enderezo de tesela válido"
 
 msgid "Please enter a tile index"
 msgstr "Introduza un índice de tesela"
@@ -5659,7 +5661,7 @@ msgid ""
 msgstr ""
 
 msgid "Update JOSM"
-msgstr ""
+msgstr "Actualizar JOSM"
 
 msgid "Conflict background: no conflict"
 msgstr ""
@@ -6186,7 +6188,7 @@ msgid "<i>missing</i>"
 msgstr ""
 
 msgid ", "
-msgstr ""
+msgstr ", "
 
 msgid "Choose a value"
 msgstr "Escolla un valor"
@@ -6717,7 +6719,7 @@ msgid "has direction keys"
 msgstr ""
 
 msgid "State: "
-msgstr ""
+msgstr "Estado: "
 
 msgid "Data Set: "
 msgstr ""
@@ -6738,7 +6740,7 @@ msgid "In changeset: "
 msgstr ""
 
 msgid "Tags: "
-msgstr ""
+msgstr "Etiquetas: "
 
 msgid "Centroid: "
 msgstr ""
@@ -6769,6 +6771,9 @@ msgstr ""
 msgid "Coordinates (projected): "
 msgstr ""
 
+msgid "UTM Zone"
+msgstr "UTM Zona"
+
 msgid "Part of: "
 msgstr ""
 
@@ -9001,7 +9006,7 @@ msgid "<b>Source</b>:"
 msgstr ""
 
 msgid "<b>Imagery</b>:"
-msgstr ""
+msgstr "<b>Imaxes</b>"
 
 msgid ""
 "<html>Version <strong>{0}</strong> currently edited in layer ''{1}''</html>"
@@ -9145,6 +9150,11 @@ msgstr ""
 msgid "Check \"Save\" to save the layer to the file specified on the left."
 msgstr ""
 
+msgid ""
+"A background upload is already in progress. Kindly wait for it to finish "
+"before uploading new changes"
+msgstr ""
+
 msgid "I would like someone to review my edits."
 msgstr ""
 
@@ -9286,7 +9296,7 @@ msgid ""
 msgstr ""
 
 msgid "Authenticate"
-msgstr "Autenticar"
+msgstr ""
 
 msgid "Authenticate with the supplied username and password"
 msgstr ""
@@ -9390,7 +9400,7 @@ msgid "Select filename"
 msgstr "Escolla o nome de ficheiro"
 
 msgid "Open Recent"
-msgstr ""
+msgstr "Abrir recente"
 
 msgid "List of recently opened files"
 msgstr ""
@@ -10144,7 +10154,7 @@ msgid ""
 msgstr ""
 
 msgid "http://wiki.openstreetmap.org/wiki/Using_Imagery"
-msgstr ""
+msgstr "http://wiki.openstreetmap.org/wiki/Using_Imagery"
 
 msgid "Details..."
 msgstr ""
@@ -10270,6 +10280,9 @@ msgstr ""
 msgid "Save Layer"
 msgstr "Gardar capa"
 
+msgid "Trying to set a read only data layer as edit layer"
+msgstr ""
+
 msgid "{0} note"
 msgid_plural "{0} notes"
 msgstr[0] ""
@@ -11114,11 +11127,6 @@ msgstr ""
 msgid "Failed to parse Mappaint styles from ''{0}''. Error was: {1}"
 msgstr ""
 
-msgid ""
-"Detected deprecated ''{0}'' in ''{1}'' which will be removed shortly. Use "
-"''{2}'' instead."
-msgstr ""
-
 msgid "Failed to locate image ''{0}''"
 msgstr ""
 
@@ -12331,6 +12339,9 @@ msgstr "Mostrar a pantalla de benvida ao iniciar"
 msgid "Show object ID in selection lists"
 msgstr "Amosar a ID do obxecto nas listas de selección"
 
+msgid "Show node coordinates in selection lists"
+msgstr ""
+
 msgid "Show localized name in selection lists"
 msgstr "Amosar nomes localizados en listas escollidas"
 
@@ -13096,9 +13107,6 @@ msgstr "UTM sistema xeodésico"
 msgid "UTM"
 msgstr "UTM"
 
-msgid "UTM Zone"
-msgstr "UTM Zona"
-
 msgid "North"
 msgstr "Norte"
 
@@ -13214,7 +13222,7 @@ msgid "Configure your identity and how to authenticate at the OSM server"
 msgstr "Configure a súa identidade e como autenticarse no servidor OSM"
 
 msgid "Use Basic Authentication"
-msgstr "Usar autentcación básica"
+msgstr "Usar autenticación básica"
 
 msgid ""
 "Select to use HTTP basic authentication with your OSM username and password"
@@ -13566,9 +13574,6 @@ msgstr ""
 msgid "Error parsing {0}: "
 msgstr "Erro analizando {0}: "
 
-msgid "Presets"
-msgstr "Axustes prestablecidos"
-
 msgid "Search for objects by preset..."
 msgstr ""
 
@@ -15552,7 +15557,7 @@ msgstr ""
 
 msgctxt "Relation type"
 msgid "bridge"
-msgstr ""
+msgstr "ponte"
 
 msgctxt "Relation type"
 msgid "destination_sign"
@@ -15600,7 +15605,7 @@ msgstr ""
 
 msgctxt "Relation type"
 msgid "waterway"
-msgstr "Vía acuática"
+msgstr "vía acuática"
 
 msgctxt "Place type"
 msgid "city"
@@ -16165,7 +16170,7 @@ msgid "seafood"
 msgstr ""
 
 msgid "spanish"
-msgstr ""
+msgstr "española"
 
 msgid "vietnamese"
 msgstr ""
@@ -16185,6 +16190,18 @@ msgstr ""
 msgid "korean"
 msgstr ""
 
+msgid "donut"
+msgstr ""
+
+msgid "mediterranean"
+msgstr ""
+
+msgid "friture"
+msgstr ""
+
+msgid "crepe"
+msgstr ""
+
 msgid "Internet access"
 msgstr "Acceso a internet"
 
@@ -16266,11 +16283,11 @@ msgstr ""
 
 msgctxt "sport"
 msgid "beachvolleyball"
-msgstr ""
+msgstr "volei-praia"
 
 msgctxt "sport"
 msgid "billiards"
-msgstr ""
+msgstr "billar"
 
 msgctxt "sport"
 msgid "boules"
@@ -16350,7 +16367,7 @@ msgstr ""
 
 msgctxt "sport"
 msgid "motocross"
-msgstr ""
+msgstr "motocross"
 
 msgctxt "sport"
 msgid "motor"
@@ -16496,7 +16513,7 @@ msgid "Population"
 msgstr ""
 
 msgid "Postal Code"
-msgstr ""
+msgstr "Código postal"
 
 msgid "Website"
 msgstr "Páxina web:"
@@ -16734,13 +16751,13 @@ msgid "electricity"
 msgstr ""
 
 msgid "hot water"
-msgstr ""
+msgstr "auga quente"
 
 msgid "hot air"
 msgstr ""
 
 msgid "cold water"
-msgstr ""
+msgstr "auga fría"
 
 msgid "cold air"
 msgstr ""
@@ -17066,7 +17083,7 @@ msgid "driveway"
 msgstr "camiño de entrada(a unha casa , graraxe, finca …)"
 
 msgid "parking_aisle"
-msgstr "corredor de aparcamento"
+msgstr "corredor de aparcadoiro"
 
 msgid "drive-through"
 msgstr ""
@@ -17075,7 +17092,7 @@ msgid "emergency_access"
 msgstr ""
 
 msgid "Parking Aisle"
-msgstr "Corredor de aparcamento"
+msgstr "Corredor de aparcadoiro"
 
 msgid "Escape"
 msgstr ""
@@ -17554,7 +17571,7 @@ msgid "Optional crossing attributes:"
 msgstr ""
 
 msgid "Pedestrian crossing type"
-msgstr "Tipo de cruce peatonal"
+msgstr "Tipo de cruzamento peonal"
 
 msgid "uncontrolled"
 msgstr "sin supervisión"
@@ -17569,7 +17586,7 @@ msgid "unmarked"
 msgstr "sen marcar"
 
 msgid "Crossing type name (UK)"
-msgstr "Tipo de nome de cruce (Reino Unido)"
+msgstr "Nome do tipo de cruzamento (Reino Unido)"
 
 msgid "zebra"
 msgstr "cebra"
@@ -17596,13 +17613,13 @@ msgid "Sound signals"
 msgstr ""
 
 msgid "Crossing attendant"
-msgstr "Guarda cruces"
+msgstr "Garda cruzamentos"
 
 msgid "Cross by bicycle"
-msgstr "Cruce de bicicletas"
+msgstr "Cruzamento de bicicletas"
 
 msgid "Cross on horseback"
-msgstr "Cruce de cabalos"
+msgstr "Cruzamento de cabalos"
 
 msgid "Optional values for specific countries"
 msgstr ""
@@ -17620,7 +17637,7 @@ msgid "clockwise"
 msgstr "no sentido das agullas do reloxo"
 
 msgid "Pedestrian Crossing"
-msgstr "Cruce peatonal"
+msgstr "Cruzamento peonal"
 
 msgid "Tactile Paving"
 msgstr "Pavimento táctil"
@@ -17875,11 +17892,11 @@ msgstr ""
 
 msgctxt "main group"
 msgid "Water"
-msgstr ""
+msgstr "Auga"
 
 msgctxt "sub group"
 msgid "Water"
-msgstr ""
+msgstr "Auga"
 
 msgid "Drain"
 msgstr "Desaugue"
@@ -17920,7 +17937,7 @@ msgid "Groyne"
 msgstr "Rompeolas"
 
 msgid "Breakwater"
-msgstr ""
+msgstr "Rompeolas"
 
 msgid "Culvert"
 msgstr ""
@@ -17954,7 +17971,7 @@ msgstr "Depósito de auga"
 
 msgctxt "natural"
 msgid "Water"
-msgstr ""
+msgstr "Auga"
 
 msgid "A body of standing water, such as a lake or pond."
 msgstr ""
@@ -17987,10 +18004,10 @@ msgid "lock"
 msgstr ""
 
 msgid "wastewater"
-msgstr ""
+msgstr "augas residuais"
 
 msgid "Salt Water"
-msgstr ""
+msgstr "Auga salgada"
 
 msgid "Is the water body intermittent (disappears seasonally)?"
 msgstr ""
@@ -18068,7 +18085,7 @@ msgid ""
 msgstr ""
 
 msgid "Shipping"
-msgstr "Gastos de envío"
+msgstr "Navegación"
 
 msgid "Ferry Terminal"
 msgstr "Terminal de ferry"
@@ -18336,10 +18353,10 @@ msgid "double_half"
 msgstr ""
 
 msgid "Crossing"
-msgstr "Paso a nivel peatonal"
+msgstr "Paso a nivel peonal"
 
 msgid "Crossing type"
-msgstr "Tipo de paso"
+msgstr "Tipo de cruzamento"
 
 msgid "Turntable"
 msgstr "Plataforma de xiro"
@@ -18429,7 +18446,7 @@ msgid "Pylon"
 msgstr ""
 
 msgid "Parking"
-msgstr "Aparcamento"
+msgstr "Aparcadoiro"
 
 msgid "Park and Ride"
 msgstr "Aparcamento disuasorio (Park & Ride)"
@@ -18474,7 +18491,7 @@ msgid "Covered (with roof)"
 msgstr ""
 
 msgid "Parking Entrance"
-msgstr ""
+msgstr "Entrada do aparcadoiro"
 
 msgid "Fuel"
 msgstr "Gasolineira"
@@ -18981,13 +18998,13 @@ msgid "Number of apartments"
 msgstr ""
 
 msgid "Chalet"
-msgstr "Cabaña ou bungalow"
+msgstr "Cabana ou bungalow"
 
 msgid "Hostel"
 msgstr "Albergue"
 
 msgid "Alpine Hut"
-msgstr "Cabaña alpina"
+msgstr "Cabana alpina"
 
 msgid "Wilderness Hut"
 msgstr ""
@@ -19028,8 +19045,17 @@ msgstr "Fuente de Tensión"
 msgid "Tents allowed"
 msgstr ""
 
-msgid "Camping Site"
-msgstr "Lugar de acampada"
+msgid "Campsite"
+msgstr ""
+
+msgid "Caravans allowed"
+msgstr ""
+
+msgid "Backcountry"
+msgstr ""
+
+msgid "Group only access"
+msgstr ""
 
 msgid "Food+Drinks"
 msgstr "Comida+Bebidas"
@@ -19090,6 +19116,7 @@ msgstr "Oficina de información"
 
 msgid "An office where you can get information about a town or region."
 msgstr ""
+"Unha oficina onde podes obter información sobre unha cidade ou rexión."
 
 msgid "Map"
 msgstr "Mapa"
@@ -19686,7 +19713,7 @@ msgid "Count"
 msgstr ""
 
 msgid "Water Tank"
-msgstr ""
+msgstr "Tanque de auga"
 
 msgid "Volume (in liters)"
 msgstr ""
@@ -20218,7 +20245,7 @@ msgid "swimming_pool"
 msgstr ""
 
 msgid "water_park"
-msgstr ""
+msgstr "parque acuático"
 
 msgid "Scuba Diving"
 msgstr ""
@@ -20350,10 +20377,10 @@ msgid "Volleyball"
 msgstr "Voleibol"
 
 msgid "Beach Volleyball"
-msgstr ""
+msgstr "Voleibol praia"
 
 msgid "Billiards"
-msgstr ""
+msgstr "Billar"
 
 msgid "golf_course"
 msgstr "campo de golf"
@@ -20428,7 +20455,7 @@ msgstr ""
 
 msgctxt "building"
 msgid "garages"
-msgstr ""
+msgstr "garaxes"
 
 msgctxt "building"
 msgid "school"
@@ -20472,7 +20499,7 @@ msgstr ""
 
 msgctxt "building"
 msgid "office"
-msgstr ""
+msgstr "oficina"
 
 msgctxt "building"
 msgid "university"
@@ -20680,7 +20707,7 @@ msgid "Flagpole"
 msgstr ""
 
 msgid "Cross"
-msgstr ""
+msgstr "Cruz"
 
 msgid "Works"
 msgstr "Fábrica"
@@ -20726,7 +20753,7 @@ msgstr ""
 
 msgctxt "content"
 msgid "water"
-msgstr ""
+msgstr "auga"
 
 msgctxt "content"
 msgid "wine"
@@ -20824,7 +20851,7 @@ msgstr "Tubería"
 
 msgctxt "pipeline"
 msgid "underwater"
-msgstr "baixo auga"
+msgstr "subacuático"
 
 msgctxt "pipeline"
 msgid "overground"
@@ -20843,16 +20870,16 @@ msgid "Water Works"
 msgstr "Traballos Acuáticos"
 
 msgid "Wastewater Treatment Plant"
-msgstr ""
+msgstr "Planta de tratamento de augas residuais"
 
 msgid "Watermill"
-msgstr ""
+msgstr "Muíño de auga"
 
 msgid "Fountain"
 msgstr "Fonte"
 
 msgid "Water Well"
-msgstr ""
+msgstr "Pozo de auga"
 
 msgid "Lighthouse"
 msgstr "Faro"
@@ -20871,13 +20898,13 @@ msgid "Monitoring:"
 msgstr ""
 
 msgid "Water level"
-msgstr ""
+msgstr "Nivel de auga"
 
 msgid "Tide Level"
 msgstr ""
 
 msgid "Groundwater"
-msgstr ""
+msgstr "Augas subterráneas"
 
 msgid "Traffic"
 msgstr ""
@@ -20943,7 +20970,7 @@ msgid "Zone"
 msgstr ""
 
 msgid "parking"
-msgstr ""
+msgstr "aparcadoiro"
 
 msgid "traffic"
 msgstr ""
@@ -20991,7 +21018,7 @@ msgid "Inclination in degrees"
 msgstr ""
 
 msgid "Bridges"
-msgstr ""
+msgstr "Pontes"
 
 msgid "aqueduct"
 msgstr ""
@@ -21120,7 +21147,7 @@ msgid "Range"
 msgstr ""
 
 msgid "Power"
-msgstr "Potencia"
+msgstr "Enerxía"
 
 msgid "Power Plant"
 msgstr ""
@@ -21810,7 +21837,7 @@ msgstr ""
 
 msgctxt "power cable"
 msgid "underwater"
-msgstr ""
+msgstr "subacuático"
 
 msgctxt "power cable"
 msgid "overground"
@@ -21954,7 +21981,7 @@ msgid "wayside_shrine"
 msgstr ""
 
 msgid "Boundary Stone"
-msgstr "Perdra Histórica"
+msgstr "Pedra histórica"
 
 msgid "Shops"
 msgstr "Tendas"
@@ -21972,7 +21999,7 @@ msgid "Kiosk"
 msgstr "Quiosco"
 
 msgid "Bakery"
-msgstr ""
+msgstr "Panadería"
 
 msgid "Butcher"
 msgstr "Carnicería"
@@ -21984,7 +22011,7 @@ msgid "Dairy"
 msgstr ""
 
 msgid "Cheese"
-msgstr ""
+msgstr "Queixo"
 
 msgid "Deli (Fine Food)"
 msgstr "Deli (Boa comida)"
@@ -21999,7 +22026,7 @@ msgid "Tea"
 msgstr ""
 
 msgid "Coffee"
-msgstr ""
+msgstr "Café"
 
 msgid "Public Market"
 msgstr ""
@@ -22041,7 +22068,7 @@ msgid "Laundry"
 msgstr "Lavandería"
 
 msgid "Tailor"
-msgstr ""
+msgstr "Xastre"
 
 msgid "Fabric"
 msgstr "Fabrica"
@@ -22071,7 +22098,7 @@ msgid "Video Games"
 msgstr ""
 
 msgid "Music"
-msgstr ""
+msgstr "Música"
 
 msgid "Cash"
 msgstr "Cartos en efectivo"
@@ -22260,7 +22287,7 @@ msgid "cigarettes"
 msgstr "estanco"
 
 msgid "coffee"
-msgstr ""
+msgstr "café"
 
 msgid "condoms"
 msgstr "gomas do pito"
@@ -22278,13 +22305,13 @@ msgid "food"
 msgstr "Alimentación"
 
 msgid "milk"
-msgstr ""
+msgstr "leite"
 
 msgid "newspapers"
 msgstr ""
 
 msgid "parking_tickets"
-msgstr "Tickets de aparcamento"
+msgstr "Tickets de aparcadoiro"
 
 msgid "parcel_pickup"
 msgstr ""
@@ -22413,7 +22440,7 @@ msgid "Litecoin"
 msgstr ""
 
 msgid "Offices"
-msgstr ""
+msgstr "Oficinas"
 
 msgctxt "office"
 msgid "Accountant"
@@ -22453,7 +22480,7 @@ msgstr ""
 
 msgctxt "office"
 msgid "Foundation"
-msgstr ""
+msgstr "Fundación"
 
 msgctxt "office"
 msgid "Government"
@@ -22481,23 +22508,23 @@ msgstr ""
 
 msgctxt "office"
 msgid "Lawyer"
-msgstr ""
+msgstr "Avogado"
 
 msgctxt "office"
 msgid "Newspaper"
-msgstr ""
+msgstr "Xornal"
 
 msgctxt "office"
 msgid "Non-governmental organisation (NGO)"
-msgstr ""
+msgstr "Organización non gobernamental (ONG)"
 
 msgctxt "office"
 msgid "Notary"
-msgstr ""
+msgstr "Notaría"
 
 msgctxt "office"
 msgid "Political party"
-msgstr ""
+msgstr "Partido político"
 
 msgctxt "office"
 msgid "Religion"
@@ -22597,13 +22624,13 @@ msgid "Boundaries"
 msgstr "Fronteiras"
 
 msgid "Administrative"
-msgstr "Administrativo"
+msgstr "Administrativa"
 
 msgid "Administrative level"
 msgstr "Nivel administrativo"
 
 msgid "Maritime"
-msgstr ""
+msgstr "Marítima"
 
 msgid "Political"
 msgstr "Política"
@@ -22621,10 +22648,10 @@ msgid "ward"
 msgstr ""
 
 msgid "National Park"
-msgstr ""
+msgstr "Parque nacional"
 
 msgid "Protected Area"
-msgstr ""
+msgstr "Área protexida"
 
 msgid "Protect Class"
 msgstr ""
@@ -22658,7 +22685,7 @@ msgstr "País"
 
 msgctxt "place"
 msgid "State"
-msgstr ""
+msgstr "Estado/Provincia"
 
 msgid "Region"
 msgstr "Rexión"
@@ -22747,13 +22774,13 @@ msgid "scoria"
 msgstr ""
 
 msgid "Ridge"
-msgstr ""
+msgstr "Cume"
 
 msgid "A mountain or hill ridge."
 msgstr ""
 
 msgid "Valley"
-msgstr ""
+msgstr "Val"
 
 msgid "A low area between hills."
 msgstr ""
@@ -22779,7 +22806,7 @@ msgid "Islet"
 msgstr "Illote"
 
 msgid "Reef"
-msgstr ""
+msgstr "Baixío"
 
 msgid "coral"
 msgstr ""
@@ -22815,7 +22842,7 @@ msgid "Forest"
 msgstr "Monte"
 
 msgid "Cutline"
-msgstr ""
+msgstr "Cortalume"
 
 msgctxt "cutline"
 msgid "border"
@@ -22979,7 +23006,7 @@ msgid "Meadow"
 msgstr "Prado"
 
 msgid "Orchard"
-msgstr ""
+msgstr "Pomar"
 
 msgid "Trees"
 msgstr ""
@@ -23036,10 +23063,10 @@ msgid "Plant Nursery"
 msgstr ""
 
 msgid "Salt Pond"
-msgstr ""
+msgstr "Salina"
 
 msgid "Aquaculture"
-msgstr ""
+msgstr "Acuicultura"
 
 msgid "shrimp"
 msgstr ""
@@ -23069,7 +23096,7 @@ msgid "Recreation Ground"
 msgstr "Terra de recreo"
 
 msgid "Residential Area"
-msgstr ""
+msgstr "Área residencial"
 
 msgid "Graveyard"
 msgstr "Camposanto (para os cementerios próximos ás igrexas)"
@@ -23078,7 +23105,7 @@ msgid "Cemetery"
 msgstr "Cemiterio"
 
 msgid "Religious"
-msgstr ""
+msgstr "Relixioso"
 
 msgid "Retail"
 msgstr "Comercios"
@@ -23091,7 +23118,7 @@ msgstr "Industrial"
 
 msgctxt "industrial"
 msgid "bakery"
-msgstr ""
+msgstr "panadería"
 
 msgctxt "industrial"
 msgid "brewery"
@@ -23162,7 +23189,7 @@ msgid "warehouse"
 msgstr ""
 
 msgid "Garages"
-msgstr ""
+msgstr "Garaxes"
 
 msgid "Railway Land"
 msgstr ""
@@ -23213,7 +23240,7 @@ msgid "Common name abbreviation"
 msgstr ""
 
 msgid "Address"
-msgstr ""
+msgstr "Enderezo"
 
 msgid "House number"
 msgstr "Número de casa"
@@ -23250,7 +23277,7 @@ msgstr ""
 
 msgctxt "addr:"
 msgid "State"
-msgstr ""
+msgstr "Estado/Provincia"
 
 msgid "AL"
 msgstr ""
@@ -23415,7 +23442,7 @@ msgid "VI"
 msgstr ""
 
 msgid "Address Interpolation"
-msgstr "Interpolar enderezos"
+msgstr "Interpolar enderezo"
 
 msgid "Numbering scheme"
 msgstr "Esquema numérico"
@@ -23479,7 +23506,7 @@ msgid "An important hint for other mappers (not for the end user)."
 msgstr ""
 
 msgid "Fixme"
-msgstr ""
+msgstr "Arranxame"
 
 msgctxt "fixme=*"
 msgid ""
@@ -23500,16 +23527,16 @@ msgid "Boundary type"
 msgstr "Tipo de límite"
 
 msgid "administrative"
-msgstr "administrativo"
+msgstr "administrativa"
 
 msgid "maritime"
-msgstr ""
+msgstr "marítima"
 
 msgid "national_park"
 msgstr ""
 
 msgid "political"
-msgstr "político"
+msgstr "política"
 
 msgid "postal_code"
 msgstr ""
@@ -23774,7 +23801,7 @@ msgid "position of sign"
 msgstr ""
 
 msgid "Waterway"
-msgstr ""
+msgstr "Vía fluvial"
 
 msgid "Subtype of waterway (largest one of members)"
 msgstr ""
@@ -23857,6 +23884,14 @@ msgid ""
 "resolution or better, and refreshed more frequently with ongoing updates."
 msgstr ""
 
+msgid "DigitalGlobe Premium Imagery Vintage"
+msgstr ""
+
+msgid ""
+"Imagery boundaries and capture dates. Labels appear at zoom level 14 and "
+"higher."
+msgstr ""
+
 msgid "DigitalGlobe Standard Imagery"
 msgstr ""
 
@@ -23866,6 +23901,9 @@ msgid ""
 "Landsat. Average age is 2.31 years, with some areas updated 2x per year."
 msgstr ""
 
+msgid "DigitalGlobe Standard Imagery Vintage"
+msgstr ""
+
 msgid "Esri World Imagery"
 msgstr ""
 
@@ -23929,6 +23967,12 @@ msgstr ""
 msgid "Strava cycling and running heatmap"
 msgstr ""
 
+msgid "Strava water sports heatmap"
+msgstr ""
+
+msgid "Strava winter sports heatmap"
+msgstr ""
+
 msgid "Locator Overlay"
 msgstr ""
 
@@ -24333,6 +24377,9 @@ msgstr ""
 msgid "SPW(allonie) most recent aerial imagery"
 msgstr ""
 
+msgid "SPW(allonie) 2016 aerial imagery"
+msgstr ""
+
 msgid "SPW(allonie) 2015 aerial imagery"
 msgstr ""
 
@@ -24378,6 +24425,14 @@ msgstr ""
 msgid "Addresses data from IBGE"
 msgstr ""
 
+msgid "Street names IBGE Salvador-BA"
+msgstr ""
+
+msgid ""
+"Streets geometry and names of Salvador, Bahia. Source: Faces de Logradouro - "
+"IBGE."
+msgstr ""
+
 msgid "Rio Mosaic 2013"
 msgstr ""
 
@@ -25108,6 +25163,9 @@ msgstr ""
 msgid "Japan GSI ortho Imagery"
 msgstr ""
 
+msgid "Japan GSI Standard Map"
+msgstr ""
+
 msgid "imagico.de OSM images for mapping: Aral Sea (low water level)"
 msgstr ""
 
@@ -25137,7 +25195,7 @@ msgstr ""
 msgid "20cm ortho - Latvia - Coastline"
 msgstr ""
 
-msgid "1.cikla ortofotokarte - Latvia"
+msgid "Orthophoto 1st cycle (1994-1999) - Latvia"
 msgstr ""
 
 msgid "ORT10LT (Lithuania)"
@@ -25146,6 +25204,9 @@ msgstr ""
 msgid "geoportail.lu all layers"
 msgstr ""
 
+msgid "geoportail.lu ortho latest"
+msgstr ""
+
 msgid "geoportail.lu ortho 2016"
 msgstr ""
 
@@ -26636,6 +26697,9 @@ msgstr ""
 msgid "{0} on a node. Should be used on a way."
 msgstr ""
 
+msgid "{0} on a node. Should be used on a way or relation."
+msgstr ""
+
 msgid "{0} on a node. Should be drawn as an area."
 msgstr ""
 
@@ -26863,6 +26927,9 @@ msgstr ""
 msgid "Nodes duplicating parent way tags"
 msgstr ""
 
+msgid "{0} together with {1} and {2}. Remove {0}."
+msgstr ""
+
 msgid ""
 "wikipedia tag has no language given, use ''wikipedia''=''language:page "
 "title''"
@@ -27657,6 +27724,21 @@ msgstr ""
 msgid "Importing..."
 msgstr "Importando…"
 
+msgid "Shape is started incorrectly"
+msgstr ""
+
+msgid "Can''t load SVG diagram"
+msgstr ""
+
+msgid "Can''t find root SVG element"
+msgstr ""
+
+msgid "Import primitives"
+msgstr ""
+
+msgid "Cannot find configuration file!"
+msgstr ""
+
 msgid "DXF files [ImportDxf plugin] (*.dxf)"
 msgstr ""
 
@@ -27823,7 +27905,7 @@ msgid "Eps={0}, {1} points, {2} p/km"
 msgstr ""
 
 msgid "Fix addresses"
-msgstr ""
+msgstr "Arranxa enderezos"
 
 msgid "Show dialog with incomplete addresses"
 msgstr ""
@@ -27832,7 +27914,7 @@ msgid "Include objects used for guesses"
 msgstr ""
 
 msgid "Fix street addresses"
-msgstr ""
+msgstr "Arranxa enderezos de rúas"
 
 msgid "Find and fix addresses without (valid) streets."
 msgstr ""
@@ -27880,7 +27962,7 @@ msgid "Complete Addresses"
 msgstr ""
 
 msgid "Incomplete Addresses"
-msgstr ""
+msgstr "Enderezos incompletos"
 
 msgid "Selected Addresses"
 msgstr ""
@@ -27895,7 +27977,7 @@ msgid "Segments"
 msgstr "Segmentos"
 
 msgid "Show incomplete addresses"
-msgstr ""
+msgstr "Mostra enderezos incompletos"
 
 msgid "items"
 msgstr "elementos"
@@ -27923,7 +28005,7 @@ msgid "Assign address to street"
 msgstr "Asignar enderezo á rúa"
 
 msgid "Assign the selected address(es) to the selected street."
-msgstr ""
+msgstr "Asignar o enderezo(s) seleccionados á rúa seleccionada."
 
 msgid "Set street name"
 msgstr ""
@@ -28177,13 +28259,13 @@ msgid "Uneven road"
 msgstr ""
 
 msgid "No parking"
-msgstr ""
+msgstr "Non aparcar"
 
 msgid "No overtaking"
 msgstr ""
 
 msgid "Pedestrian crossing"
-msgstr ""
+msgstr "Cruzamento peonal"
 
 msgid "No turn"
 msgstr ""
@@ -28296,6 +28378,9 @@ msgstr ""
 msgid "Download mode"
 msgstr ""
 
+msgid "Number of images to be pre-fetched (forwards and backwards)"
+msgstr ""
+
 msgid "You are logged in as ''{0}''."
 msgstr ""
 
@@ -28506,8 +28591,17 @@ msgid "only when manually requested"
 msgstr ""
 
 msgid ""
-"The downloaded OSM area is too big. Download mode has been changed to OSM "
-"area until the layer is restarted."
+"The Mapillary layer has stopped downloading images, because the requested "
+"area is too big!"
+msgstr ""
+
+msgid ""
+"To solve this problem, you could zoom in and load a smaller area of the map."
+msgstr ""
+
+msgid ""
+"To solve this problem, you could switch to download mode ''{0}'' and load "
+"Mapillary images for a smaller portion of the map."
 msgstr ""
 
 msgid "Downloading"
@@ -28736,7 +28830,7 @@ msgid "City:"
 msgstr "Cidade:"
 
 msgid "State:"
-msgstr "Estado:"
+msgstr "Estado/Provincia:"
 
 msgid "Post Code:"
 msgstr ""
@@ -29068,7 +29162,7 @@ msgid "Tag Building"
 msgstr ""
 
 msgid "Tools: {0}"
-msgstr ""
+msgstr "Ferramentas: {0}"
 
 msgid "Area Selection"
 msgstr ""
@@ -31840,23 +31934,6 @@ msgstr ""
 msgid "Merge Overlap (combine)"
 msgstr ""
 
-msgid ""
-"<html>A role based relation membership was copied to all new ways.<br>You "
-"should verify this and correct it when necessary.</html>"
-msgstr ""
-"<html> Unha parte baseada na relación de membros foi copiada a todas as "
-"rutas.<br>Debería verificar esto e corrixilo cando sexa necesario.</html>"
-
-msgid ""
-"<html>A relation membership was copied to all new ways.<br>You should verify "
-"this and correct it when necessary.</html>"
-msgstr ""
-"<html>Unha relación de membros foi copiada a todas as rutas..<br>Debería "
-"verificar esto e corrixilo cando sexa necesario.</html>"
-
-msgid "Split way"
-msgstr ""
-
 msgid "Michigan Left"
 msgstr ""
 
@@ -33313,33 +33390,6 @@ msgstr ""
 msgid "PT: Route passes a oneway road in the wrong direction"
 msgstr ""
 
-msgid "moved"
-msgstr ""
-
-msgid "rail"
-msgstr "ferrocarril"
-
-msgid "Can''t parse a time from this string."
-msgstr ""
-
-msgid "Invalid value"
-msgstr ""
-
-msgid "added"
-msgstr ""
-
-msgid "Public Transport: Enable GTFSStops"
-msgstr ""
-
-msgid "Public Transport: Catch GTFS stops"
-msgstr ""
-
-msgid "skipped"
-msgstr ""
-
-msgid "Public Transport: Disable GTFS"
-msgstr ""
-
 msgid "Create Stops from GTFS ..."
 msgstr ""
 
@@ -33366,69 +33416,9 @@ msgstr ""
 msgid "The GTFS file was empty."
 msgstr ""
 
-msgid "Create Stops from GTFS"
-msgstr ""
-
-msgid "GTFS-Stops"
-msgstr ""
-
-msgid "Type of stops to add"
-msgstr ""
-
-msgid "Time on your GPS device"
-msgstr ""
-
-msgid "HH:MM:SS.sss"
-msgstr ""
-
-msgid "Time on your stopwatch"
-msgstr ""
-
-msgid "Time window"
-msgstr ""
-
-msgid "seconds"
-msgstr ""
-
-msgid "Move Threshold"
-msgstr ""
-
-msgid "Suggest Stops"
-msgstr ""
-
-msgid "Find"
-msgstr ""
-
-msgid "Show"
-msgstr "Amosar"
-
-msgid "Mark"
-msgstr ""
-
-msgid "Catch"
-msgstr ""
-
-msgid "Join"
-msgstr ""
-
-msgid "Public Transport: Join GTFS stops"
-msgstr ""
-
-msgid "State"
-msgstr "Estado"
-
-msgid "[incomplete]"
-msgstr ""
-
-msgid "[empty way]"
-msgstr ""
-
 msgid "[ID] {0}"
 msgstr ""
 
-msgid "[gap]"
-msgstr ""
-
 msgid "Route patterns ..."
 msgstr ""
 
@@ -33471,6 +33461,15 @@ msgstr ""
 msgid "Name/Id"
 msgstr ""
 
+msgid "Find"
+msgstr ""
+
+msgid "Show"
+msgstr "Amosar"
+
+msgid "Mark"
+msgstr ""
+
 msgid "Ref"
 msgstr ""
 
@@ -33486,10 +33485,7 @@ msgstr ""
 msgid "Maximum distance from route"
 msgstr ""
 
-msgid " [ID] {0}"
-msgstr ""
-
-msgid "Public Transport: Change stop type"
+msgid "Suggest Stops"
 msgstr ""
 
 msgid "Create Stops from GPX ..."
@@ -33504,28 +33500,29 @@ msgstr ""
 msgid "The GPX file contained no tracks or waypoints."
 msgstr ""
 
-msgid "Create Stops from GPX"
+msgid "moved"
 msgstr ""
 
-msgid "Tracks in this GPX file:"
-msgstr "Camiños neste ficheiro GPX:"
+msgid "added"
+msgstr ""
 
-msgid "Detach"
+msgid "Public Transport: Enable GTFSStops"
 msgstr ""
 
-msgid "implicit"
+msgid "Public Transport: Catch GTFS stops"
 msgstr ""
 
-msgid ""
-"The GPX file doesn''t contain valid trackpoints. Please use a GPX file that "
-"has trackpoints."
+msgid "skipped"
 msgstr ""
 
-msgid "GPX File Trouble"
+msgid "Public Transport: Disable GTFS"
 msgstr ""
 
-msgid "unnamed"
-msgstr "sen nome"
+msgid "Public Transport: Join GTFS stops"
+msgstr ""
+
+msgid "Public Transport: Change stop type"
+msgstr ""
 
 msgid "Public Transport: Add track stop"
 msgstr "Transporte público: engadir fin de camiño"
@@ -33548,9 +33545,6 @@ msgstr "Transporte público: ordenar a lista de fins de camiño"
 msgid "Public Transport: Suggest stops"
 msgstr ""
 
-msgid "Stopname"
-msgstr ""
-
 msgid "Public Transport: Detach waypoints"
 msgstr "Transporte público: separar puntos de referencia"
 
@@ -33563,6 +33557,89 @@ msgstr "Transporte público: activar puntos de referencia"
 msgid "Public Transport: Edit waypoint name"
 msgstr "Transporte público: editar o nome do punto de referencia"
 
+msgid "rail"
+msgstr "ferrocarril"
+
+msgid "Can''t parse a time from this string."
+msgstr ""
+
+msgid "Invalid value"
+msgstr ""
+
+msgid "Create Stops from GTFS"
+msgstr ""
+
+msgid "GTFS-Stops"
+msgstr ""
+
+msgid "Type of stops to add"
+msgstr ""
+
+msgid "Time on your GPS device"
+msgstr ""
+
+msgid "HH:MM:SS.sss"
+msgstr ""
+
+msgid "Time on your stopwatch"
+msgstr ""
+
+msgid "Time window"
+msgstr ""
+
+msgid "seconds"
+msgstr ""
+
+msgid "Move Threshold"
+msgstr ""
+
+msgid "Catch"
+msgstr ""
+
+msgid "Join"
+msgstr ""
+
+msgid "Create Stops from GPX"
+msgstr ""
+
+msgid "Tracks in this GPX file:"
+msgstr "Camiños neste ficheiro GPX:"
+
+msgid "Detach"
+msgstr ""
+
+msgid "implicit"
+msgstr ""
+
+msgid "State"
+msgstr "Estado/Provincia"
+
+msgid "[incomplete]"
+msgstr ""
+
+msgid "[empty way]"
+msgstr ""
+
+msgid "[gap]"
+msgstr ""
+
+msgid "Stopname"
+msgstr ""
+
+msgid " [ID] {0}"
+msgstr ""
+
+msgid ""
+"The GPX file doesn''t contain valid trackpoints. Please use a GPX file that "
+"has trackpoints."
+msgstr ""
+
+msgid "GPX File Trouble"
+msgstr ""
+
+msgid "unnamed"
+msgstr "sen nome"
+
 msgid "Distance between stops"
 msgstr ""
 
@@ -34291,6 +34368,9 @@ msgstr "Lanza o diálogo do editor de etiquetas"
 msgid "JOSM Tag Editor Plugin"
 msgstr "Complemento de etiquetas de JOSM"
 
+msgid "Presets"
+msgstr "Predefinidos"
+
 msgid "Abort tag editing and close dialog"
 msgstr "Cancelar edición de etiquetas e pechar o diálogo"
 
@@ -36230,6 +36310,26 @@ msgid_plural "Overwrite ''{0}'' tags {1} from {2} with new value ''{3}''?"
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Download from Sophox API"
+msgstr ""
+
+msgid ""
+"Find places of education at least 2km, and at most 3km from the center of "
+"the selection"
+msgstr ""
+
+msgid "Show/hide Sophox snippet list"
+msgstr ""
+
+msgid "help"
+msgstr ""
+
+msgid "Server: "
+msgstr ""
+
+msgid "Wikidata+OSM server"
+msgstr ""
+
 msgid "Search Wikidata items"
 msgstr ""
 
@@ -36303,26 +36403,6 @@ msgid ""
 "objects"
 msgstr ""
 
-msgid "Download from Wikosm API"
-msgstr ""
-
-msgid ""
-"Find places of education at least 2km, and at most 3km from the center of "
-"the selection"
-msgstr ""
-
-msgid "Show/hide Wikosm snippet list"
-msgstr ""
-
-msgid "help"
-msgstr ""
-
-msgid "Server: "
-msgstr ""
-
-msgid "Wikidata+OSM server"
-msgstr ""
-
 msgid "The Ultimate WMS Super-speed Turbo Challenge II"
 msgstr ""
 
diff --git a/i18n/po/he.po b/i18n/po/he.po
index a4384e7..9024c97 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-10-30 03:38+0100\n"
+"POT-Creation-Date: 2017-11-26 00:06+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-10-30 04:46+0000\n"
-"X-Generator: Launchpad (build 18493)\n"
+"X-Launchpad-Export-Date: 2017-11-26 04:47+0000\n"
+"X-Generator: Launchpad (build 18509)\n"
 "Language: he\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -426,12 +426,15 @@ msgstr "מחיקת שכבה"
 msgid "Delete the active layer. Does not delete the associated file."
 msgstr "מחיקת שכבה פעילה. הפעולה לא תמחק את הקובץ השייך לשכבה."
 
-msgid "Toggle dialogs panel"
+msgid "Dialogs panel"
 msgstr ""
 
 msgid "Toggle dialogs panel, maximize mapview"
 msgstr ""
 
+msgid "Toggle dialogs panel"
+msgstr ""
+
 msgid "Distribute Nodes"
 msgstr "פזר נקודות"
 
@@ -6515,6 +6518,9 @@ msgstr ""
 msgid "Coordinates (projected): "
 msgstr ""
 
+msgid "UTM Zone"
+msgstr ""
+
 msgid "Part of: "
 msgstr ""
 
@@ -8815,6 +8821,11 @@ msgstr ""
 msgid "Check \"Save\" to save the layer to the file specified on the left."
 msgstr ""
 
+msgid ""
+"A background upload is already in progress. Kindly wait for it to finish "
+"before uploading new changes"
+msgstr ""
+
 msgid "I would like someone to review my edits."
 msgstr ""
 
@@ -9925,6 +9936,9 @@ msgstr ""
 msgid "Save Layer"
 msgstr "שמור שכבה"
 
+msgid "Trying to set a read only data layer as edit layer"
+msgstr ""
+
 msgid "{0} note"
 msgid_plural "{0} notes"
 msgstr[0] ""
@@ -10765,11 +10779,6 @@ msgstr ""
 msgid "Failed to parse Mappaint styles from ''{0}''. Error was: {1}"
 msgstr ""
 
-msgid ""
-"Detected deprecated ''{0}'' in ''{1}'' which will be removed shortly. Use "
-"''{2}'' instead."
-msgstr ""
-
 msgid "Failed to locate image ''{0}''"
 msgstr ""
 
@@ -11934,6 +11943,9 @@ msgstr "הצג מסך פתיחה בפתיחה"
 msgid "Show object ID in selection lists"
 msgstr ""
 
+msgid "Show node coordinates in selection lists"
+msgstr ""
+
 msgid "Show localized name in selection lists"
 msgstr ""
 
@@ -12690,9 +12702,6 @@ msgstr ""
 msgid "UTM"
 msgstr ""
 
-msgid "UTM Zone"
-msgstr ""
-
 msgid "North"
 msgstr ""
 
@@ -13160,9 +13169,6 @@ msgstr ""
 msgid "Error parsing {0}: "
 msgstr "שגיאה בניתוח {0}: "
 
-msgid "Presets"
-msgstr ""
-
 msgid "Search for objects by preset..."
 msgstr ""
 
@@ -15706,6 +15712,18 @@ msgstr ""
 msgid "korean"
 msgstr ""
 
+msgid "donut"
+msgstr ""
+
+msgid "mediterranean"
+msgstr ""
+
+msgid "friture"
+msgstr ""
+
+msgid "crepe"
+msgstr ""
+
 msgid "Internet access"
 msgstr ""
 
@@ -18548,7 +18566,16 @@ msgstr ""
 msgid "Tents allowed"
 msgstr ""
 
-msgid "Camping Site"
+msgid "Campsite"
+msgstr ""
+
+msgid "Caravans allowed"
+msgstr ""
+
+msgid "Backcountry"
+msgstr ""
+
+msgid "Group only access"
 msgstr ""
 
 msgid "Food+Drinks"
@@ -23377,6 +23404,14 @@ msgid ""
 "resolution or better, and refreshed more frequently with ongoing updates."
 msgstr ""
 
+msgid "DigitalGlobe Premium Imagery Vintage"
+msgstr ""
+
+msgid ""
+"Imagery boundaries and capture dates. Labels appear at zoom level 14 and "
+"higher."
+msgstr ""
+
 msgid "DigitalGlobe Standard Imagery"
 msgstr ""
 
@@ -23386,6 +23421,9 @@ msgid ""
 "Landsat. Average age is 2.31 years, with some areas updated 2x per year."
 msgstr ""
 
+msgid "DigitalGlobe Standard Imagery Vintage"
+msgstr ""
+
 msgid "Esri World Imagery"
 msgstr ""
 
@@ -23449,6 +23487,12 @@ msgstr ""
 msgid "Strava cycling and running heatmap"
 msgstr ""
 
+msgid "Strava water sports heatmap"
+msgstr ""
+
+msgid "Strava winter sports heatmap"
+msgstr ""
+
 msgid "Locator Overlay"
 msgstr ""
 
@@ -23853,6 +23897,9 @@ msgstr ""
 msgid "SPW(allonie) most recent aerial imagery"
 msgstr ""
 
+msgid "SPW(allonie) 2016 aerial imagery"
+msgstr ""
+
 msgid "SPW(allonie) 2015 aerial imagery"
 msgstr ""
 
@@ -23898,6 +23945,14 @@ msgstr ""
 msgid "Addresses data from IBGE"
 msgstr ""
 
+msgid "Street names IBGE Salvador-BA"
+msgstr ""
+
+msgid ""
+"Streets geometry and names of Salvador, Bahia. Source: Faces de Logradouro - "
+"IBGE."
+msgstr ""
+
 msgid "Rio Mosaic 2013"
 msgstr ""
 
@@ -24628,6 +24683,9 @@ msgstr ""
 msgid "Japan GSI ortho Imagery"
 msgstr ""
 
+msgid "Japan GSI Standard Map"
+msgstr ""
+
 msgid "imagico.de OSM images for mapping: Aral Sea (low water level)"
 msgstr ""
 
@@ -24657,7 +24715,7 @@ msgstr ""
 msgid "20cm ortho - Latvia - Coastline"
 msgstr ""
 
-msgid "1.cikla ortofotokarte - Latvia"
+msgid "Orthophoto 1st cycle (1994-1999) - Latvia"
 msgstr ""
 
 msgid "ORT10LT (Lithuania)"
@@ -24666,6 +24724,9 @@ msgstr ""
 msgid "geoportail.lu all layers"
 msgstr ""
 
+msgid "geoportail.lu ortho latest"
+msgstr ""
+
 msgid "geoportail.lu ortho 2016"
 msgstr ""
 
@@ -26156,6 +26217,9 @@ msgstr ""
 msgid "{0} on a node. Should be used on a way."
 msgstr ""
 
+msgid "{0} on a node. Should be used on a way or relation."
+msgstr ""
+
 msgid "{0} on a node. Should be drawn as an area."
 msgstr ""
 
@@ -26383,6 +26447,9 @@ msgstr ""
 msgid "Nodes duplicating parent way tags"
 msgstr ""
 
+msgid "{0} together with {1} and {2}. Remove {0}."
+msgstr ""
+
 msgid ""
 "wikipedia tag has no language given, use ''wikipedia''=''language:page "
 "title''"
@@ -27147,6 +27214,21 @@ msgstr ""
 msgid "Importing..."
 msgstr ""
 
+msgid "Shape is started incorrectly"
+msgstr ""
+
+msgid "Can''t load SVG diagram"
+msgstr ""
+
+msgid "Can''t find root SVG element"
+msgstr ""
+
+msgid "Import primitives"
+msgstr ""
+
+msgid "Cannot find configuration file!"
+msgstr ""
+
 msgid "DXF files [ImportDxf plugin] (*.dxf)"
 msgstr ""
 
@@ -27786,6 +27868,9 @@ msgstr ""
 msgid "Download mode"
 msgstr ""
 
+msgid "Number of images to be pre-fetched (forwards and backwards)"
+msgstr ""
+
 msgid "You are logged in as ''{0}''."
 msgstr ""
 
@@ -27996,8 +28081,17 @@ msgid "only when manually requested"
 msgstr ""
 
 msgid ""
-"The downloaded OSM area is too big. Download mode has been changed to OSM "
-"area until the layer is restarted."
+"The Mapillary layer has stopped downloading images, because the requested "
+"area is too big!"
+msgstr ""
+
+msgid ""
+"To solve this problem, you could zoom in and load a smaller area of the map."
+msgstr ""
+
+msgid ""
+"To solve this problem, you could switch to download mode ''{0}'' and load "
+"Mapillary images for a smaller portion of the map."
 msgstr ""
 
 msgid "Downloading"
@@ -31312,19 +31406,6 @@ msgstr ""
 msgid "Merge Overlap (combine)"
 msgstr ""
 
-msgid ""
-"<html>A role based relation membership was copied to all new ways.<br>You "
-"should verify this and correct it when necessary.</html>"
-msgstr ""
-
-msgid ""
-"<html>A relation membership was copied to all new ways.<br>You should verify "
-"this and correct it when necessary.</html>"
-msgstr ""
-
-msgid "Split way"
-msgstr ""
-
 msgid "Michigan Left"
 msgstr ""
 
@@ -32780,255 +32861,255 @@ msgstr ""
 msgid "PT: Route passes a oneway road in the wrong direction"
 msgstr ""
 
-msgid "moved"
+msgid "Create Stops from GTFS ..."
 msgstr ""
 
-msgid "rail"
+msgid "Create Stops from a GTFS file"
 msgstr ""
 
-msgid "Can''t parse a time from this string."
+msgid "Select GTFS file (stops.txt)"
 msgstr ""
 
-msgid "Invalid value"
+msgid "File \"{0}\" does not exist"
 msgstr ""
 
-msgid "added"
+msgid "IOException \"{0}\" occurred"
 msgstr ""
 
-msgid "Public Transport: Enable GTFSStops"
+msgid ""
+"There exists no dataset. Try to download data from the server or open an OSM "
+"file."
 msgstr ""
 
-msgid "Public Transport: Catch GTFS stops"
+msgid "No data found"
 msgstr ""
 
-msgid "skipped"
+msgid "The GTFS file was empty."
 msgstr ""
 
-msgid "Public Transport: Disable GTFS"
+msgid "[ID] {0}"
 msgstr ""
 
-msgid "Create Stops from GTFS ..."
+msgid "Route patterns ..."
 msgstr ""
 
-msgid "Create Stops from a GTFS file"
+msgid "Edit Route patterns for public transport"
 msgstr ""
 
-msgid "Select GTFS file (stops.txt)"
+msgid "Route Patterns"
 msgstr ""
 
-msgid "File \"{0}\" does not exist"
+msgid "Overview"
 msgstr ""
 
-msgid "IOException \"{0}\" occurred"
+msgid "Itinerary"
 msgstr ""
 
-msgid ""
-"There exists no dataset. Try to download data from the server or open an OSM "
-"file."
+msgid "Stops"
 msgstr ""
 
-msgid "No data found"
+msgid "Meta"
 msgstr ""
 
-msgid "The GTFS file was empty."
+msgid "Existing route patterns:"
 msgstr ""
 
-msgid "Create Stops from GTFS"
+msgid "Reflect"
 msgstr ""
 
-msgid "GTFS-Stops"
+msgid "Required tags:"
 msgstr ""
 
-msgid "Type of stops to add"
+msgid "Common tags:"
 msgstr ""
 
-msgid "Time on your GPS device"
+msgid "Additional tags:"
 msgstr ""
 
-msgid "HH:MM:SS.sss"
+msgid "Add a new Tag"
 msgstr ""
 
-msgid "Time on your stopwatch"
+msgid "Name/Id"
 msgstr ""
 
-msgid "Time window"
+msgid "Find"
 msgstr ""
 
-msgid "seconds"
+msgid "Show"
 msgstr ""
 
-msgid "Move Threshold"
+msgid "Mark"
 msgstr ""
 
-msgid "Suggest Stops"
+msgid "Ref"
 msgstr ""
 
-msgid "Find"
+msgid "Stops are possible on the"
 msgstr ""
 
-msgid "Show"
+msgid "right hand side"
 msgstr ""
 
-msgid "Mark"
+msgid "left hand side"
 msgstr ""
 
-msgid "Catch"
+msgid "Maximum distance from route"
 msgstr ""
 
-msgid "Join"
+msgid "Suggest Stops"
 msgstr ""
 
-msgid "Public Transport: Join GTFS stops"
+msgid "Create Stops from GPX ..."
 msgstr ""
 
-msgid "State"
-msgstr "מדינה"
-
-msgid "[incomplete]"
+msgid "Create Stops from a GPX file"
 msgstr ""
 
-msgid "[empty way]"
+msgid "Select GPX file"
 msgstr ""
 
-msgid "[ID] {0}"
+msgid "The GPX file contained no tracks or waypoints."
 msgstr ""
 
-msgid "[gap]"
+msgid "moved"
 msgstr ""
 
-msgid "Route patterns ..."
+msgid "added"
 msgstr ""
 
-msgid "Edit Route patterns for public transport"
+msgid "Public Transport: Enable GTFSStops"
 msgstr ""
 
-msgid "Route Patterns"
+msgid "Public Transport: Catch GTFS stops"
 msgstr ""
 
-msgid "Overview"
+msgid "skipped"
 msgstr ""
 
-msgid "Itinerary"
+msgid "Public Transport: Disable GTFS"
 msgstr ""
 
-msgid "Stops"
+msgid "Public Transport: Join GTFS stops"
 msgstr ""
 
-msgid "Meta"
+msgid "Public Transport: Change stop type"
 msgstr ""
 
-msgid "Existing route patterns:"
+msgid "Public Transport: Add track stop"
 msgstr ""
 
-msgid "Reflect"
+msgid "Public Transport: Delete track stop"
 msgstr ""
 
-msgid "Required tags:"
+msgid "Public Transport: Detach track stop list"
 msgstr ""
 
-msgid "Common tags:"
+msgid "Public Transport: Edit track stop list"
 msgstr ""
 
-msgid "Additional tags:"
+msgid "Public Transport: Relocate nodes in track stoplist"
 msgstr ""
 
-msgid "Add a new Tag"
+msgid "Public Transport: sort track stop list"
 msgstr ""
 
-msgid "Name/Id"
+msgid "Public Transport: Suggest stops"
 msgstr ""
 
-msgid "Ref"
+msgid "Public Transport: Detach waypoints"
 msgstr ""
 
-msgid "Stops are possible on the"
+msgid "Public Transport: Disable waypoints"
 msgstr ""
 
-msgid "right hand side"
+msgid "Public Transport: Enable waypoints"
 msgstr ""
 
-msgid "left hand side"
+msgid "Public Transport: Edit waypoint name"
 msgstr ""
 
-msgid "Maximum distance from route"
+msgid "rail"
 msgstr ""
 
-msgid " [ID] {0}"
+msgid "Can''t parse a time from this string."
 msgstr ""
 
-msgid "Public Transport: Change stop type"
+msgid "Invalid value"
 msgstr ""
 
-msgid "Create Stops from GPX ..."
+msgid "Create Stops from GTFS"
 msgstr ""
 
-msgid "Create Stops from a GPX file"
+msgid "GTFS-Stops"
 msgstr ""
 
-msgid "Select GPX file"
+msgid "Type of stops to add"
 msgstr ""
 
-msgid "The GPX file contained no tracks or waypoints."
+msgid "Time on your GPS device"
 msgstr ""
 
-msgid "Create Stops from GPX"
+msgid "HH:MM:SS.sss"
 msgstr ""
 
-msgid "Tracks in this GPX file:"
+msgid "Time on your stopwatch"
 msgstr ""
 
-msgid "Detach"
+msgid "Time window"
 msgstr ""
 
-msgid "implicit"
+msgid "seconds"
 msgstr ""
 
-msgid ""
-"The GPX file doesn''t contain valid trackpoints. Please use a GPX file that "
-"has trackpoints."
+msgid "Move Threshold"
 msgstr ""
 
-msgid "GPX File Trouble"
+msgid "Catch"
 msgstr ""
 
-msgid "unnamed"
-msgstr "ללא שם"
+msgid "Join"
+msgstr ""
 
-msgid "Public Transport: Add track stop"
+msgid "Create Stops from GPX"
 msgstr ""
 
-msgid "Public Transport: Delete track stop"
+msgid "Tracks in this GPX file:"
 msgstr ""
 
-msgid "Public Transport: Detach track stop list"
+msgid "Detach"
 msgstr ""
 
-msgid "Public Transport: Edit track stop list"
+msgid "implicit"
 msgstr ""
 
-msgid "Public Transport: Relocate nodes in track stoplist"
+msgid "State"
+msgstr "מדינה"
+
+msgid "[incomplete]"
 msgstr ""
 
-msgid "Public Transport: sort track stop list"
+msgid "[empty way]"
 msgstr ""
 
-msgid "Public Transport: Suggest stops"
+msgid "[gap]"
 msgstr ""
 
 msgid "Stopname"
 msgstr ""
 
-msgid "Public Transport: Detach waypoints"
+msgid " [ID] {0}"
 msgstr ""
 
-msgid "Public Transport: Disable waypoints"
+msgid ""
+"The GPX file doesn''t contain valid trackpoints. Please use a GPX file that "
+"has trackpoints."
 msgstr ""
 
-msgid "Public Transport: Enable waypoints"
+msgid "GPX File Trouble"
 msgstr ""
 
-msgid "Public Transport: Edit waypoint name"
-msgstr ""
+msgid "unnamed"
+msgstr "ללא שם"
 
 msgid "Distance between stops"
 msgstr ""
@@ -33756,6 +33837,9 @@ msgstr ""
 msgid "JOSM Tag Editor Plugin"
 msgstr ""
 
+msgid "Presets"
+msgstr ""
+
 msgid "Abort tag editing and close dialog"
 msgstr ""
 
@@ -35681,6 +35765,26 @@ msgid_plural "Overwrite ''{0}'' tags {1} from {2} with new value ''{3}''?"
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Download from Sophox API"
+msgstr ""
+
+msgid ""
+"Find places of education at least 2km, and at most 3km from the center of "
+"the selection"
+msgstr ""
+
+msgid "Show/hide Sophox snippet list"
+msgstr ""
+
+msgid "help"
+msgstr ""
+
+msgid "Server: "
+msgstr ""
+
+msgid "Wikidata+OSM server"
+msgstr ""
+
 msgid "Search Wikidata items"
 msgstr ""
 
@@ -35754,26 +35858,6 @@ msgid ""
 "objects"
 msgstr ""
 
-msgid "Download from Wikosm API"
-msgstr ""
-
-msgid ""
-"Find places of education at least 2km, and at most 3km from the center of "
-"the selection"
-msgstr ""
-
-msgid "Show/hide Wikosm snippet list"
-msgstr ""
-
-msgid "help"
-msgstr ""
-
-msgid "Server: "
-msgstr ""
-
-msgid "Wikidata+OSM server"
-msgstr ""
-
 msgid "The Ultimate WMS Super-speed Turbo Challenge II"
 msgstr ""
 
diff --git a/i18n/po/hi.po b/i18n/po/hi.po
index a6c1ded..5cae627 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-10-30 03:38+0100\n"
+"POT-Creation-Date: 2017-11-26 00:06+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-10-30 04:47+0000\n"
-"X-Generator: Launchpad (build 18493)\n"
+"X-Launchpad-Export-Date: 2017-11-26 04:48+0000\n"
+"X-Generator: Launchpad (build 18509)\n"
 "Language: hi\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -421,12 +421,15 @@ msgstr ""
 msgid "Delete the active layer. Does not delete the associated file."
 msgstr ""
 
-msgid "Toggle dialogs panel"
+msgid "Dialogs panel"
 msgstr ""
 
 msgid "Toggle dialogs panel, maximize mapview"
 msgstr ""
 
+msgid "Toggle dialogs panel"
+msgstr ""
+
 msgid "Distribute Nodes"
 msgstr ""
 
@@ -6488,6 +6491,9 @@ msgstr ""
 msgid "Coordinates (projected): "
 msgstr ""
 
+msgid "UTM Zone"
+msgstr ""
+
 msgid "Part of: "
 msgstr ""
 
@@ -8786,6 +8792,11 @@ msgstr ""
 msgid "Check \"Save\" to save the layer to the file specified on the left."
 msgstr ""
 
+msgid ""
+"A background upload is already in progress. Kindly wait for it to finish "
+"before uploading new changes"
+msgstr ""
+
 msgid "I would like someone to review my edits."
 msgstr ""
 
@@ -9894,6 +9905,9 @@ msgstr ""
 msgid "Save Layer"
 msgstr ""
 
+msgid "Trying to set a read only data layer as edit layer"
+msgstr ""
+
 msgid "{0} note"
 msgid_plural "{0} notes"
 msgstr[0] ""
@@ -10724,11 +10738,6 @@ msgstr ""
 msgid "Failed to parse Mappaint styles from ''{0}''. Error was: {1}"
 msgstr ""
 
-msgid ""
-"Detected deprecated ''{0}'' in ''{1}'' which will be removed shortly. Use "
-"''{2}'' instead."
-msgstr ""
-
 msgid "Failed to locate image ''{0}''"
 msgstr ""
 
@@ -11893,6 +11902,9 @@ msgstr ""
 msgid "Show object ID in selection lists"
 msgstr ""
 
+msgid "Show node coordinates in selection lists"
+msgstr ""
+
 msgid "Show localized name in selection lists"
 msgstr ""
 
@@ -12649,9 +12661,6 @@ msgstr ""
 msgid "UTM"
 msgstr ""
 
-msgid "UTM Zone"
-msgstr ""
-
 msgid "North"
 msgstr ""
 
@@ -13119,9 +13128,6 @@ msgstr ""
 msgid "Error parsing {0}: "
 msgstr ""
 
-msgid "Presets"
-msgstr ""
-
 msgid "Search for objects by preset..."
 msgstr ""
 
@@ -15663,6 +15669,18 @@ msgstr ""
 msgid "korean"
 msgstr ""
 
+msgid "donut"
+msgstr ""
+
+msgid "mediterranean"
+msgstr ""
+
+msgid "friture"
+msgstr ""
+
+msgid "crepe"
+msgstr ""
+
 msgid "Internet access"
 msgstr ""
 
@@ -18505,7 +18523,16 @@ msgstr ""
 msgid "Tents allowed"
 msgstr ""
 
-msgid "Camping Site"
+msgid "Campsite"
+msgstr ""
+
+msgid "Caravans allowed"
+msgstr ""
+
+msgid "Backcountry"
+msgstr ""
+
+msgid "Group only access"
 msgstr ""
 
 msgid "Food+Drinks"
@@ -23334,6 +23361,14 @@ msgid ""
 "resolution or better, and refreshed more frequently with ongoing updates."
 msgstr ""
 
+msgid "DigitalGlobe Premium Imagery Vintage"
+msgstr ""
+
+msgid ""
+"Imagery boundaries and capture dates. Labels appear at zoom level 14 and "
+"higher."
+msgstr ""
+
 msgid "DigitalGlobe Standard Imagery"
 msgstr ""
 
@@ -23343,6 +23378,9 @@ msgid ""
 "Landsat. Average age is 2.31 years, with some areas updated 2x per year."
 msgstr ""
 
+msgid "DigitalGlobe Standard Imagery Vintage"
+msgstr ""
+
 msgid "Esri World Imagery"
 msgstr ""
 
@@ -23406,6 +23444,12 @@ msgstr ""
 msgid "Strava cycling and running heatmap"
 msgstr ""
 
+msgid "Strava water sports heatmap"
+msgstr ""
+
+msgid "Strava winter sports heatmap"
+msgstr ""
+
 msgid "Locator Overlay"
 msgstr ""
 
@@ -23810,6 +23854,9 @@ msgstr ""
 msgid "SPW(allonie) most recent aerial imagery"
 msgstr ""
 
+msgid "SPW(allonie) 2016 aerial imagery"
+msgstr ""
+
 msgid "SPW(allonie) 2015 aerial imagery"
 msgstr ""
 
@@ -23855,6 +23902,14 @@ msgstr ""
 msgid "Addresses data from IBGE"
 msgstr ""
 
+msgid "Street names IBGE Salvador-BA"
+msgstr ""
+
+msgid ""
+"Streets geometry and names of Salvador, Bahia. Source: Faces de Logradouro - "
+"IBGE."
+msgstr ""
+
 msgid "Rio Mosaic 2013"
 msgstr ""
 
@@ -24585,6 +24640,9 @@ msgstr ""
 msgid "Japan GSI ortho Imagery"
 msgstr ""
 
+msgid "Japan GSI Standard Map"
+msgstr ""
+
 msgid "imagico.de OSM images for mapping: Aral Sea (low water level)"
 msgstr ""
 
@@ -24614,7 +24672,7 @@ msgstr ""
 msgid "20cm ortho - Latvia - Coastline"
 msgstr ""
 
-msgid "1.cikla ortofotokarte - Latvia"
+msgid "Orthophoto 1st cycle (1994-1999) - Latvia"
 msgstr ""
 
 msgid "ORT10LT (Lithuania)"
@@ -24623,6 +24681,9 @@ msgstr ""
 msgid "geoportail.lu all layers"
 msgstr ""
 
+msgid "geoportail.lu ortho latest"
+msgstr ""
+
 msgid "geoportail.lu ortho 2016"
 msgstr ""
 
@@ -26113,6 +26174,9 @@ msgstr ""
 msgid "{0} on a node. Should be used on a way."
 msgstr ""
 
+msgid "{0} on a node. Should be used on a way or relation."
+msgstr ""
+
 msgid "{0} on a node. Should be drawn as an area."
 msgstr ""
 
@@ -26340,6 +26404,9 @@ msgstr ""
 msgid "Nodes duplicating parent way tags"
 msgstr ""
 
+msgid "{0} together with {1} and {2}. Remove {0}."
+msgstr ""
+
 msgid ""
 "wikipedia tag has no language given, use ''wikipedia''=''language:page "
 "title''"
@@ -27104,6 +27171,21 @@ msgstr ""
 msgid "Importing..."
 msgstr ""
 
+msgid "Shape is started incorrectly"
+msgstr ""
+
+msgid "Can''t load SVG diagram"
+msgstr ""
+
+msgid "Can''t find root SVG element"
+msgstr ""
+
+msgid "Import primitives"
+msgstr ""
+
+msgid "Cannot find configuration file!"
+msgstr ""
+
 msgid "DXF files [ImportDxf plugin] (*.dxf)"
 msgstr ""
 
@@ -27743,6 +27825,9 @@ msgstr ""
 msgid "Download mode"
 msgstr ""
 
+msgid "Number of images to be pre-fetched (forwards and backwards)"
+msgstr ""
+
 msgid "You are logged in as ''{0}''."
 msgstr ""
 
@@ -27953,8 +28038,17 @@ msgid "only when manually requested"
 msgstr ""
 
 msgid ""
-"The downloaded OSM area is too big. Download mode has been changed to OSM "
-"area until the layer is restarted."
+"The Mapillary layer has stopped downloading images, because the requested "
+"area is too big!"
+msgstr ""
+
+msgid ""
+"To solve this problem, you could zoom in and load a smaller area of the map."
+msgstr ""
+
+msgid ""
+"To solve this problem, you could switch to download mode ''{0}'' and load "
+"Mapillary images for a smaller portion of the map."
 msgstr ""
 
 msgid "Downloading"
@@ -31266,19 +31360,6 @@ msgstr ""
 msgid "Merge Overlap (combine)"
 msgstr ""
 
-msgid ""
-"<html>A role based relation membership was copied to all new ways.<br>You "
-"should verify this and correct it when necessary.</html>"
-msgstr ""
-
-msgid ""
-"<html>A relation membership was copied to all new ways.<br>You should verify "
-"this and correct it when necessary.</html>"
-msgstr ""
-
-msgid "Split way"
-msgstr ""
-
 msgid "Michigan Left"
 msgstr ""
 
@@ -32733,254 +32814,254 @@ msgstr ""
 msgid "PT: Route passes a oneway road in the wrong direction"
 msgstr ""
 
-msgid "moved"
+msgid "Create Stops from GTFS ..."
 msgstr ""
 
-msgid "rail"
+msgid "Create Stops from a GTFS file"
 msgstr ""
 
-msgid "Can''t parse a time from this string."
+msgid "Select GTFS file (stops.txt)"
 msgstr ""
 
-msgid "Invalid value"
+msgid "File \"{0}\" does not exist"
 msgstr ""
 
-msgid "added"
+msgid "IOException \"{0}\" occurred"
 msgstr ""
 
-msgid "Public Transport: Enable GTFSStops"
+msgid ""
+"There exists no dataset. Try to download data from the server or open an OSM "
+"file."
 msgstr ""
 
-msgid "Public Transport: Catch GTFS stops"
+msgid "No data found"
 msgstr ""
 
-msgid "skipped"
+msgid "The GTFS file was empty."
 msgstr ""
 
-msgid "Public Transport: Disable GTFS"
+msgid "[ID] {0}"
 msgstr ""
 
-msgid "Create Stops from GTFS ..."
+msgid "Route patterns ..."
 msgstr ""
 
-msgid "Create Stops from a GTFS file"
+msgid "Edit Route patterns for public transport"
 msgstr ""
 
-msgid "Select GTFS file (stops.txt)"
+msgid "Route Patterns"
 msgstr ""
 
-msgid "File \"{0}\" does not exist"
+msgid "Overview"
 msgstr ""
 
-msgid "IOException \"{0}\" occurred"
+msgid "Itinerary"
 msgstr ""
 
-msgid ""
-"There exists no dataset. Try to download data from the server or open an OSM "
-"file."
+msgid "Stops"
 msgstr ""
 
-msgid "No data found"
+msgid "Meta"
 msgstr ""
 
-msgid "The GTFS file was empty."
+msgid "Existing route patterns:"
 msgstr ""
 
-msgid "Create Stops from GTFS"
+msgid "Reflect"
 msgstr ""
 
-msgid "GTFS-Stops"
+msgid "Required tags:"
 msgstr ""
 
-msgid "Type of stops to add"
+msgid "Common tags:"
 msgstr ""
 
-msgid "Time on your GPS device"
+msgid "Additional tags:"
 msgstr ""
 
-msgid "HH:MM:SS.sss"
+msgid "Add a new Tag"
 msgstr ""
 
-msgid "Time on your stopwatch"
+msgid "Name/Id"
 msgstr ""
 
-msgid "Time window"
+msgid "Find"
 msgstr ""
 
-msgid "seconds"
+msgid "Show"
 msgstr ""
 
-msgid "Move Threshold"
+msgid "Mark"
 msgstr ""
 
-msgid "Suggest Stops"
+msgid "Ref"
 msgstr ""
 
-msgid "Find"
+msgid "Stops are possible on the"
 msgstr ""
 
-msgid "Show"
+msgid "right hand side"
 msgstr ""
 
-msgid "Mark"
+msgid "left hand side"
 msgstr ""
 
-msgid "Catch"
+msgid "Maximum distance from route"
 msgstr ""
 
-msgid "Join"
+msgid "Suggest Stops"
 msgstr ""
 
-msgid "Public Transport: Join GTFS stops"
+msgid "Create Stops from GPX ..."
 msgstr ""
 
-msgid "State"
+msgid "Create Stops from a GPX file"
 msgstr ""
 
-msgid "[incomplete]"
+msgid "Select GPX file"
 msgstr ""
 
-msgid "[empty way]"
+msgid "The GPX file contained no tracks or waypoints."
 msgstr ""
 
-msgid "[ID] {0}"
+msgid "moved"
 msgstr ""
 
-msgid "[gap]"
+msgid "added"
 msgstr ""
 
-msgid "Route patterns ..."
+msgid "Public Transport: Enable GTFSStops"
 msgstr ""
 
-msgid "Edit Route patterns for public transport"
+msgid "Public Transport: Catch GTFS stops"
 msgstr ""
 
-msgid "Route Patterns"
+msgid "skipped"
 msgstr ""
 
-msgid "Overview"
+msgid "Public Transport: Disable GTFS"
 msgstr ""
 
-msgid "Itinerary"
+msgid "Public Transport: Join GTFS stops"
 msgstr ""
 
-msgid "Stops"
+msgid "Public Transport: Change stop type"
 msgstr ""
 
-msgid "Meta"
+msgid "Public Transport: Add track stop"
 msgstr ""
 
-msgid "Existing route patterns:"
+msgid "Public Transport: Delete track stop"
 msgstr ""
 
-msgid "Reflect"
+msgid "Public Transport: Detach track stop list"
 msgstr ""
 
-msgid "Required tags:"
+msgid "Public Transport: Edit track stop list"
 msgstr ""
 
-msgid "Common tags:"
+msgid "Public Transport: Relocate nodes in track stoplist"
 msgstr ""
 
-msgid "Additional tags:"
+msgid "Public Transport: sort track stop list"
 msgstr ""
 
-msgid "Add a new Tag"
+msgid "Public Transport: Suggest stops"
 msgstr ""
 
-msgid "Name/Id"
+msgid "Public Transport: Detach waypoints"
 msgstr ""
 
-msgid "Ref"
+msgid "Public Transport: Disable waypoints"
 msgstr ""
 
-msgid "Stops are possible on the"
+msgid "Public Transport: Enable waypoints"
 msgstr ""
 
-msgid "right hand side"
+msgid "Public Transport: Edit waypoint name"
 msgstr ""
 
-msgid "left hand side"
+msgid "rail"
 msgstr ""
 
-msgid "Maximum distance from route"
+msgid "Can''t parse a time from this string."
 msgstr ""
 
-msgid " [ID] {0}"
+msgid "Invalid value"
 msgstr ""
 
-msgid "Public Transport: Change stop type"
+msgid "Create Stops from GTFS"
 msgstr ""
 
-msgid "Create Stops from GPX ..."
+msgid "GTFS-Stops"
 msgstr ""
 
-msgid "Create Stops from a GPX file"
+msgid "Type of stops to add"
 msgstr ""
 
-msgid "Select GPX file"
+msgid "Time on your GPS device"
 msgstr ""
 
-msgid "The GPX file contained no tracks or waypoints."
+msgid "HH:MM:SS.sss"
 msgstr ""
 
-msgid "Create Stops from GPX"
+msgid "Time on your stopwatch"
 msgstr ""
 
-msgid "Tracks in this GPX file:"
+msgid "Time window"
 msgstr ""
 
-msgid "Detach"
+msgid "seconds"
 msgstr ""
 
-msgid "implicit"
+msgid "Move Threshold"
 msgstr ""
 
-msgid ""
-"The GPX file doesn''t contain valid trackpoints. Please use a GPX file that "
-"has trackpoints."
+msgid "Catch"
 msgstr ""
 
-msgid "GPX File Trouble"
+msgid "Join"
 msgstr ""
 
-msgid "unnamed"
+msgid "Create Stops from GPX"
 msgstr ""
 
-msgid "Public Transport: Add track stop"
+msgid "Tracks in this GPX file:"
 msgstr ""
 
-msgid "Public Transport: Delete track stop"
+msgid "Detach"
 msgstr ""
 
-msgid "Public Transport: Detach track stop list"
+msgid "implicit"
 msgstr ""
 
-msgid "Public Transport: Edit track stop list"
+msgid "State"
 msgstr ""
 
-msgid "Public Transport: Relocate nodes in track stoplist"
+msgid "[incomplete]"
 msgstr ""
 
-msgid "Public Transport: sort track stop list"
+msgid "[empty way]"
 msgstr ""
 
-msgid "Public Transport: Suggest stops"
+msgid "[gap]"
 msgstr ""
 
 msgid "Stopname"
 msgstr ""
 
-msgid "Public Transport: Detach waypoints"
+msgid " [ID] {0}"
 msgstr ""
 
-msgid "Public Transport: Disable waypoints"
+msgid ""
+"The GPX file doesn''t contain valid trackpoints. Please use a GPX file that "
+"has trackpoints."
 msgstr ""
 
-msgid "Public Transport: Enable waypoints"
+msgid "GPX File Trouble"
 msgstr ""
 
-msgid "Public Transport: Edit waypoint name"
+msgid "unnamed"
 msgstr ""
 
 msgid "Distance between stops"
@@ -33709,6 +33790,9 @@ msgstr ""
 msgid "JOSM Tag Editor Plugin"
 msgstr ""
 
+msgid "Presets"
+msgstr ""
+
 msgid "Abort tag editing and close dialog"
 msgstr ""
 
@@ -35634,6 +35718,26 @@ msgid_plural "Overwrite ''{0}'' tags {1} from {2} with new value ''{3}''?"
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Download from Sophox API"
+msgstr ""
+
+msgid ""
+"Find places of education at least 2km, and at most 3km from the center of "
+"the selection"
+msgstr ""
+
+msgid "Show/hide Sophox snippet list"
+msgstr ""
+
+msgid "help"
+msgstr ""
+
+msgid "Server: "
+msgstr ""
+
+msgid "Wikidata+OSM server"
+msgstr ""
+
 msgid "Search Wikidata items"
 msgstr ""
 
@@ -35707,26 +35811,6 @@ msgid ""
 "objects"
 msgstr ""
 
-msgid "Download from Wikosm API"
-msgstr ""
-
-msgid ""
-"Find places of education at least 2km, and at most 3km from the center of "
-"the selection"
-msgstr ""
-
-msgid "Show/hide Wikosm snippet list"
-msgstr ""
-
-msgid "help"
-msgstr ""
-
-msgid "Server: "
-msgstr ""
-
-msgid "Wikidata+OSM server"
-msgstr ""
-
 msgid "The Ultimate WMS Super-speed Turbo Challenge II"
 msgstr ""
 
diff --git a/i18n/po/hr.po b/i18n/po/hr.po
index 5e1db7d..a9c7c82 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-10-30 03:38+0100\n"
+"POT-Creation-Date: 2017-11-26 00:06+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-10-30 05:00+0000\n"
-"X-Generator: Launchpad (build 18493)\n"
+"X-Launchpad-Export-Date: 2017-11-26 05:02+0000\n"
+"X-Generator: Launchpad (build 18509)\n"
 "Language: hr\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -431,12 +431,15 @@ msgstr ""
 msgid "Delete the active layer. Does not delete the associated file."
 msgstr ""
 
-msgid "Toggle dialogs panel"
+msgid "Dialogs panel"
 msgstr ""
 
 msgid "Toggle dialogs panel, maximize mapview"
 msgstr ""
 
+msgid "Toggle dialogs panel"
+msgstr ""
+
 msgid "Distribute Nodes"
 msgstr ""
 
@@ -6606,6 +6609,9 @@ msgstr "Koordinate: "
 msgid "Coordinates (projected): "
 msgstr ""
 
+msgid "UTM Zone"
+msgstr ""
+
 msgid "Part of: "
 msgstr ""
 
@@ -8920,6 +8926,11 @@ msgstr ""
 msgid "Check \"Save\" to save the layer to the file specified on the left."
 msgstr ""
 
+msgid ""
+"A background upload is already in progress. Kindly wait for it to finish "
+"before uploading new changes"
+msgstr ""
+
 msgid "I would like someone to review my edits."
 msgstr ""
 
@@ -10040,6 +10051,9 @@ msgstr ""
 msgid "Save Layer"
 msgstr "Snimi sloj"
 
+msgid "Trying to set a read only data layer as edit layer"
+msgstr ""
+
 msgid "{0} note"
 msgid_plural "{0} notes"
 msgstr[0] ""
@@ -10874,11 +10888,6 @@ msgstr ""
 msgid "Failed to parse Mappaint styles from ''{0}''. Error was: {1}"
 msgstr ""
 
-msgid ""
-"Detected deprecated ''{0}'' in ''{1}'' which will be removed shortly. Use "
-"''{2}'' instead."
-msgstr ""
-
 msgid "Failed to locate image ''{0}''"
 msgstr ""
 
@@ -12043,6 +12052,9 @@ msgstr ""
 msgid "Show object ID in selection lists"
 msgstr ""
 
+msgid "Show node coordinates in selection lists"
+msgstr ""
+
 msgid "Show localized name in selection lists"
 msgstr ""
 
@@ -12799,9 +12811,6 @@ msgstr ""
 msgid "UTM"
 msgstr ""
 
-msgid "UTM Zone"
-msgstr ""
-
 msgid "North"
 msgstr ""
 
@@ -13269,9 +13278,6 @@ msgstr ""
 msgid "Error parsing {0}: "
 msgstr ""
 
-msgid "Presets"
-msgstr ""
-
 msgid "Search for objects by preset..."
 msgstr ""
 
@@ -15813,6 +15819,18 @@ msgstr ""
 msgid "korean"
 msgstr ""
 
+msgid "donut"
+msgstr ""
+
+msgid "mediterranean"
+msgstr ""
+
+msgid "friture"
+msgstr ""
+
+msgid "crepe"
+msgstr ""
+
 msgid "Internet access"
 msgstr ""
 
@@ -18655,7 +18673,16 @@ msgstr ""
 msgid "Tents allowed"
 msgstr ""
 
-msgid "Camping Site"
+msgid "Campsite"
+msgstr ""
+
+msgid "Caravans allowed"
+msgstr ""
+
+msgid "Backcountry"
+msgstr ""
+
+msgid "Group only access"
 msgstr ""
 
 msgid "Food+Drinks"
@@ -23484,6 +23511,14 @@ msgid ""
 "resolution or better, and refreshed more frequently with ongoing updates."
 msgstr ""
 
+msgid "DigitalGlobe Premium Imagery Vintage"
+msgstr ""
+
+msgid ""
+"Imagery boundaries and capture dates. Labels appear at zoom level 14 and "
+"higher."
+msgstr ""
+
 msgid "DigitalGlobe Standard Imagery"
 msgstr ""
 
@@ -23493,6 +23528,9 @@ msgid ""
 "Landsat. Average age is 2.31 years, with some areas updated 2x per year."
 msgstr ""
 
+msgid "DigitalGlobe Standard Imagery Vintage"
+msgstr ""
+
 msgid "Esri World Imagery"
 msgstr ""
 
@@ -23556,6 +23594,12 @@ msgstr ""
 msgid "Strava cycling and running heatmap"
 msgstr ""
 
+msgid "Strava water sports heatmap"
+msgstr ""
+
+msgid "Strava winter sports heatmap"
+msgstr ""
+
 msgid "Locator Overlay"
 msgstr ""
 
@@ -23960,6 +24004,9 @@ msgstr ""
 msgid "SPW(allonie) most recent aerial imagery"
 msgstr ""
 
+msgid "SPW(allonie) 2016 aerial imagery"
+msgstr ""
+
 msgid "SPW(allonie) 2015 aerial imagery"
 msgstr ""
 
@@ -24005,6 +24052,14 @@ msgstr ""
 msgid "Addresses data from IBGE"
 msgstr ""
 
+msgid "Street names IBGE Salvador-BA"
+msgstr ""
+
+msgid ""
+"Streets geometry and names of Salvador, Bahia. Source: Faces de Logradouro - "
+"IBGE."
+msgstr ""
+
 msgid "Rio Mosaic 2013"
 msgstr ""
 
@@ -24735,6 +24790,9 @@ msgstr ""
 msgid "Japan GSI ortho Imagery"
 msgstr ""
 
+msgid "Japan GSI Standard Map"
+msgstr ""
+
 msgid "imagico.de OSM images for mapping: Aral Sea (low water level)"
 msgstr ""
 
@@ -24764,7 +24822,7 @@ msgstr ""
 msgid "20cm ortho - Latvia - Coastline"
 msgstr ""
 
-msgid "1.cikla ortofotokarte - Latvia"
+msgid "Orthophoto 1st cycle (1994-1999) - Latvia"
 msgstr ""
 
 msgid "ORT10LT (Lithuania)"
@@ -24773,6 +24831,9 @@ msgstr ""
 msgid "geoportail.lu all layers"
 msgstr ""
 
+msgid "geoportail.lu ortho latest"
+msgstr ""
+
 msgid "geoportail.lu ortho 2016"
 msgstr ""
 
@@ -26263,6 +26324,9 @@ msgstr ""
 msgid "{0} on a node. Should be used on a way."
 msgstr ""
 
+msgid "{0} on a node. Should be used on a way or relation."
+msgstr ""
+
 msgid "{0} on a node. Should be drawn as an area."
 msgstr ""
 
@@ -26490,6 +26554,9 @@ msgstr ""
 msgid "Nodes duplicating parent way tags"
 msgstr ""
 
+msgid "{0} together with {1} and {2}. Remove {0}."
+msgstr ""
+
 msgid ""
 "wikipedia tag has no language given, use ''wikipedia''=''language:page "
 "title''"
@@ -27254,6 +27321,21 @@ msgstr ""
 msgid "Importing..."
 msgstr ""
 
+msgid "Shape is started incorrectly"
+msgstr ""
+
+msgid "Can''t load SVG diagram"
+msgstr ""
+
+msgid "Can''t find root SVG element"
+msgstr ""
+
+msgid "Import primitives"
+msgstr ""
+
+msgid "Cannot find configuration file!"
+msgstr ""
+
 msgid "DXF files [ImportDxf plugin] (*.dxf)"
 msgstr ""
 
@@ -27893,6 +27975,9 @@ msgstr ""
 msgid "Download mode"
 msgstr ""
 
+msgid "Number of images to be pre-fetched (forwards and backwards)"
+msgstr ""
+
 msgid "You are logged in as ''{0}''."
 msgstr ""
 
@@ -28103,8 +28188,17 @@ msgid "only when manually requested"
 msgstr ""
 
 msgid ""
-"The downloaded OSM area is too big. Download mode has been changed to OSM "
-"area until the layer is restarted."
+"The Mapillary layer has stopped downloading images, because the requested "
+"area is too big!"
+msgstr ""
+
+msgid ""
+"To solve this problem, you could zoom in and load a smaller area of the map."
+msgstr ""
+
+msgid ""
+"To solve this problem, you could switch to download mode ''{0}'' and load "
+"Mapillary images for a smaller portion of the map."
 msgstr ""
 
 msgid "Downloading"
@@ -31416,23 +31510,6 @@ msgstr ""
 msgid "Merge Overlap (combine)"
 msgstr ""
 
-msgid ""
-"<html>A role based relation membership was copied to all new ways.<br>You "
-"should verify this and correct it when necessary.</html>"
-msgstr ""
-"<html>Relacija bazirana na ulozi je kopirana na sve nove puteve.<br>Trebali "
-"bi provjeriti ovo i ispraviti ako je potrebno.</html>"
-
-msgid ""
-"<html>A relation membership was copied to all new ways.<br>You should verify "
-"this and correct it when necessary.</html>"
-msgstr ""
-"<html>Članstvo u relaciji je kopirano na sve nove puteve.<br>Trebali bi "
-"provjeriti ovo i ispraviti ako je potrebno.</html>"
-
-msgid "Split way"
-msgstr ""
-
 msgid "Michigan Left"
 msgstr ""
 
@@ -32887,33 +32964,6 @@ msgstr ""
 msgid "PT: Route passes a oneway road in the wrong direction"
 msgstr ""
 
-msgid "moved"
-msgstr "pomaknuto"
-
-msgid "rail"
-msgstr ""
-
-msgid "Can''t parse a time from this string."
-msgstr ""
-
-msgid "Invalid value"
-msgstr "Pogrešna vrijednost"
-
-msgid "added"
-msgstr "dodano"
-
-msgid "Public Transport: Enable GTFSStops"
-msgstr ""
-
-msgid "Public Transport: Catch GTFS stops"
-msgstr ""
-
-msgid "skipped"
-msgstr ""
-
-msgid "Public Transport: Disable GTFS"
-msgstr ""
-
 msgid "Create Stops from GTFS ..."
 msgstr ""
 
@@ -32940,34 +32990,49 @@ msgstr ""
 msgid "The GTFS file was empty."
 msgstr ""
 
-msgid "Create Stops from GTFS"
+msgid "[ID] {0}"
+msgstr "[ID] {0}"
+
+msgid "Route patterns ..."
 msgstr ""
 
-msgid "GTFS-Stops"
+msgid "Edit Route patterns for public transport"
 msgstr ""
 
-msgid "Type of stops to add"
+msgid "Route Patterns"
 msgstr ""
 
-msgid "Time on your GPS device"
+msgid "Overview"
 msgstr ""
 
-msgid "HH:MM:SS.sss"
+msgid "Itinerary"
 msgstr ""
 
-msgid "Time on your stopwatch"
+msgid "Stops"
 msgstr ""
 
-msgid "Time window"
+msgid "Meta"
 msgstr ""
 
-msgid "seconds"
-msgstr "sekunde"
+msgid "Existing route patterns:"
+msgstr ""
 
-msgid "Move Threshold"
+msgid "Reflect"
 msgstr ""
 
-msgid "Suggest Stops"
+msgid "Required tags:"
+msgstr ""
+
+msgid "Common tags:"
+msgstr ""
+
+msgid "Additional tags:"
+msgstr ""
+
+msgid "Add a new Tag"
+msgstr ""
+
+msgid "Name/Id"
 msgstr ""
 
 msgid "Find"
@@ -32979,162 +33044,174 @@ msgstr "Pokaži"
 msgid "Mark"
 msgstr ""
 
-msgid "Catch"
-msgstr "Uhvati"
-
-msgid "Join"
-msgstr "Spoji"
-
-msgid "Public Transport: Join GTFS stops"
+msgid "Ref"
 msgstr ""
 
-msgid "State"
+msgid "Stops are possible on the"
 msgstr ""
 
-msgid "[incomplete]"
-msgstr "[nepotpun]"
-
-msgid "[empty way]"
-msgstr "[prazan put]"
-
-msgid "[ID] {0}"
-msgstr "[ID] {0}"
+msgid "right hand side"
+msgstr ""
 
-msgid "[gap]"
+msgid "left hand side"
 msgstr ""
 
-msgid "Route patterns ..."
+msgid "Maximum distance from route"
 msgstr ""
 
-msgid "Edit Route patterns for public transport"
+msgid "Suggest Stops"
 msgstr ""
 
-msgid "Route Patterns"
+msgid "Create Stops from GPX ..."
 msgstr ""
 
-msgid "Overview"
+msgid "Create Stops from a GPX file"
 msgstr ""
 
-msgid "Itinerary"
+msgid "Select GPX file"
 msgstr ""
 
-msgid "Stops"
+msgid "The GPX file contained no tracks or waypoints."
 msgstr ""
 
-msgid "Meta"
+msgid "moved"
+msgstr "pomaknuto"
+
+msgid "added"
+msgstr "dodano"
+
+msgid "Public Transport: Enable GTFSStops"
 msgstr ""
 
-msgid "Existing route patterns:"
+msgid "Public Transport: Catch GTFS stops"
 msgstr ""
 
-msgid "Reflect"
+msgid "skipped"
 msgstr ""
 
-msgid "Required tags:"
+msgid "Public Transport: Disable GTFS"
 msgstr ""
 
-msgid "Common tags:"
+msgid "Public Transport: Join GTFS stops"
 msgstr ""
 
-msgid "Additional tags:"
+msgid "Public Transport: Change stop type"
 msgstr ""
 
-msgid "Add a new Tag"
+msgid "Public Transport: Add track stop"
 msgstr ""
 
-msgid "Name/Id"
+msgid "Public Transport: Delete track stop"
 msgstr ""
 
-msgid "Ref"
+msgid "Public Transport: Detach track stop list"
 msgstr ""
 
-msgid "Stops are possible on the"
+msgid "Public Transport: Edit track stop list"
 msgstr ""
 
-msgid "right hand side"
+msgid "Public Transport: Relocate nodes in track stoplist"
 msgstr ""
 
-msgid "left hand side"
+msgid "Public Transport: sort track stop list"
 msgstr ""
 
-msgid "Maximum distance from route"
+msgid "Public Transport: Suggest stops"
 msgstr ""
 
-msgid " [ID] {0}"
-msgstr " [ID] {0}"
+msgid "Public Transport: Detach waypoints"
+msgstr ""
 
-msgid "Public Transport: Change stop type"
+msgid "Public Transport: Disable waypoints"
 msgstr ""
 
-msgid "Create Stops from GPX ..."
+msgid "Public Transport: Enable waypoints"
 msgstr ""
 
-msgid "Create Stops from a GPX file"
+msgid "Public Transport: Edit waypoint name"
 msgstr ""
 
-msgid "Select GPX file"
+msgid "rail"
 msgstr ""
 
-msgid "The GPX file contained no tracks or waypoints."
+msgid "Can''t parse a time from this string."
 msgstr ""
 
-msgid "Create Stops from GPX"
+msgid "Invalid value"
+msgstr "Pogrešna vrijednost"
+
+msgid "Create Stops from GTFS"
 msgstr ""
 
-msgid "Tracks in this GPX file:"
+msgid "GTFS-Stops"
 msgstr ""
 
-msgid "Detach"
+msgid "Type of stops to add"
 msgstr ""
 
-msgid "implicit"
+msgid "Time on your GPS device"
 msgstr ""
 
-msgid ""
-"The GPX file doesn''t contain valid trackpoints. Please use a GPX file that "
-"has trackpoints."
+msgid "HH:MM:SS.sss"
 msgstr ""
 
-msgid "GPX File Trouble"
+msgid "Time on your stopwatch"
 msgstr ""
 
-msgid "unnamed"
+msgid "Time window"
 msgstr ""
 
-msgid "Public Transport: Add track stop"
+msgid "seconds"
+msgstr "sekunde"
+
+msgid "Move Threshold"
 msgstr ""
 
-msgid "Public Transport: Delete track stop"
+msgid "Catch"
+msgstr "Uhvati"
+
+msgid "Join"
+msgstr "Spoji"
+
+msgid "Create Stops from GPX"
 msgstr ""
 
-msgid "Public Transport: Detach track stop list"
+msgid "Tracks in this GPX file:"
 msgstr ""
 
-msgid "Public Transport: Edit track stop list"
+msgid "Detach"
 msgstr ""
 
-msgid "Public Transport: Relocate nodes in track stoplist"
+msgid "implicit"
 msgstr ""
 
-msgid "Public Transport: sort track stop list"
+msgid "State"
 msgstr ""
 
-msgid "Public Transport: Suggest stops"
+msgid "[incomplete]"
+msgstr "[nepotpun]"
+
+msgid "[empty way]"
+msgstr "[prazan put]"
+
+msgid "[gap]"
 msgstr ""
 
 msgid "Stopname"
 msgstr ""
 
-msgid "Public Transport: Detach waypoints"
-msgstr ""
+msgid " [ID] {0}"
+msgstr " [ID] {0}"
 
-msgid "Public Transport: Disable waypoints"
+msgid ""
+"The GPX file doesn''t contain valid trackpoints. Please use a GPX file that "
+"has trackpoints."
 msgstr ""
 
-msgid "Public Transport: Enable waypoints"
+msgid "GPX File Trouble"
 msgstr ""
 
-msgid "Public Transport: Edit waypoint name"
+msgid "unnamed"
 msgstr ""
 
 msgid "Distance between stops"
@@ -33863,6 +33940,9 @@ msgstr ""
 msgid "JOSM Tag Editor Plugin"
 msgstr ""
 
+msgid "Presets"
+msgstr ""
+
 msgid "Abort tag editing and close dialog"
 msgstr ""
 
@@ -35790,6 +35870,26 @@ msgid_plural "Overwrite ''{0}'' tags {1} from {2} with new value ''{3}''?"
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Download from Sophox API"
+msgstr ""
+
+msgid ""
+"Find places of education at least 2km, and at most 3km from the center of "
+"the selection"
+msgstr ""
+
+msgid "Show/hide Sophox snippet list"
+msgstr ""
+
+msgid "help"
+msgstr ""
+
+msgid "Server: "
+msgstr ""
+
+msgid "Wikidata+OSM server"
+msgstr ""
+
 msgid "Search Wikidata items"
 msgstr ""
 
@@ -35863,26 +35963,6 @@ msgid ""
 "objects"
 msgstr ""
 
-msgid "Download from Wikosm API"
-msgstr ""
-
-msgid ""
-"Find places of education at least 2km, and at most 3km from the center of "
-"the selection"
-msgstr ""
-
-msgid "Show/hide Wikosm snippet list"
-msgstr ""
-
-msgid "help"
-msgstr ""
-
-msgid "Server: "
-msgstr ""
-
-msgid "Wikidata+OSM server"
-msgstr ""
-
 msgid "The Ultimate WMS Super-speed Turbo Challenge II"
 msgstr ""
 
diff --git a/i18n/po/ht.po b/i18n/po/ht.po
index c94e546..e9f9cc4 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-10-30 03:38+0100\n"
+"POT-Creation-Date: 2017-11-26 00:06+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-10-30 04:46+0000\n"
-"X-Generator: Launchpad (build 18493)\n"
+"X-Launchpad-Export-Date: 2017-11-26 04:47+0000\n"
+"X-Generator: Launchpad (build 18509)\n"
 "Language: \n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -421,12 +421,15 @@ msgstr ""
 msgid "Delete the active layer. Does not delete the associated file."
 msgstr ""
 
-msgid "Toggle dialogs panel"
+msgid "Dialogs panel"
 msgstr ""
 
 msgid "Toggle dialogs panel, maximize mapview"
 msgstr ""
 
+msgid "Toggle dialogs panel"
+msgstr ""
+
 msgid "Distribute Nodes"
 msgstr ""
 
@@ -6488,6 +6491,9 @@ msgstr ""
 msgid "Coordinates (projected): "
 msgstr ""
 
+msgid "UTM Zone"
+msgstr ""
+
 msgid "Part of: "
 msgstr ""
 
@@ -8786,6 +8792,11 @@ msgstr ""
 msgid "Check \"Save\" to save the layer to the file specified on the left."
 msgstr ""
 
+msgid ""
+"A background upload is already in progress. Kindly wait for it to finish "
+"before uploading new changes"
+msgstr ""
+
 msgid "I would like someone to review my edits."
 msgstr ""
 
@@ -9894,6 +9905,9 @@ msgstr ""
 msgid "Save Layer"
 msgstr ""
 
+msgid "Trying to set a read only data layer as edit layer"
+msgstr ""
+
 msgid "{0} note"
 msgid_plural "{0} notes"
 msgstr[0] ""
@@ -10724,11 +10738,6 @@ msgstr ""
 msgid "Failed to parse Mappaint styles from ''{0}''. Error was: {1}"
 msgstr ""
 
-msgid ""
-"Detected deprecated ''{0}'' in ''{1}'' which will be removed shortly. Use "
-"''{2}'' instead."
-msgstr ""
-
 msgid "Failed to locate image ''{0}''"
 msgstr ""
 
@@ -11893,6 +11902,9 @@ msgstr ""
 msgid "Show object ID in selection lists"
 msgstr ""
 
+msgid "Show node coordinates in selection lists"
+msgstr ""
+
 msgid "Show localized name in selection lists"
 msgstr ""
 
@@ -12649,9 +12661,6 @@ msgstr ""
 msgid "UTM"
 msgstr ""
 
-msgid "UTM Zone"
-msgstr ""
-
 msgid "North"
 msgstr ""
 
@@ -13119,9 +13128,6 @@ msgstr ""
 msgid "Error parsing {0}: "
 msgstr ""
 
-msgid "Presets"
-msgstr ""
-
 msgid "Search for objects by preset..."
 msgstr ""
 
@@ -15663,6 +15669,18 @@ msgstr ""
 msgid "korean"
 msgstr ""
 
+msgid "donut"
+msgstr ""
+
+msgid "mediterranean"
+msgstr ""
+
+msgid "friture"
+msgstr ""
+
+msgid "crepe"
+msgstr ""
+
 msgid "Internet access"
 msgstr ""
 
@@ -18505,7 +18523,16 @@ msgstr ""
 msgid "Tents allowed"
 msgstr ""
 
-msgid "Camping Site"
+msgid "Campsite"
+msgstr ""
+
+msgid "Caravans allowed"
+msgstr ""
+
+msgid "Backcountry"
+msgstr ""
+
+msgid "Group only access"
 msgstr ""
 
 msgid "Food+Drinks"
@@ -23334,6 +23361,14 @@ msgid ""
 "resolution or better, and refreshed more frequently with ongoing updates."
 msgstr ""
 
+msgid "DigitalGlobe Premium Imagery Vintage"
+msgstr ""
+
+msgid ""
+"Imagery boundaries and capture dates. Labels appear at zoom level 14 and "
+"higher."
+msgstr ""
+
 msgid "DigitalGlobe Standard Imagery"
 msgstr ""
 
@@ -23343,6 +23378,9 @@ msgid ""
 "Landsat. Average age is 2.31 years, with some areas updated 2x per year."
 msgstr ""
 
+msgid "DigitalGlobe Standard Imagery Vintage"
+msgstr ""
+
 msgid "Esri World Imagery"
 msgstr ""
 
@@ -23406,6 +23444,12 @@ msgstr ""
 msgid "Strava cycling and running heatmap"
 msgstr ""
 
+msgid "Strava water sports heatmap"
+msgstr ""
+
+msgid "Strava winter sports heatmap"
+msgstr ""
+
 msgid "Locator Overlay"
 msgstr ""
 
@@ -23810,6 +23854,9 @@ msgstr ""
 msgid "SPW(allonie) most recent aerial imagery"
 msgstr ""
 
+msgid "SPW(allonie) 2016 aerial imagery"
+msgstr ""
+
 msgid "SPW(allonie) 2015 aerial imagery"
 msgstr ""
 
@@ -23855,6 +23902,14 @@ msgstr ""
 msgid "Addresses data from IBGE"
 msgstr ""
 
+msgid "Street names IBGE Salvador-BA"
+msgstr ""
+
+msgid ""
+"Streets geometry and names of Salvador, Bahia. Source: Faces de Logradouro - "
+"IBGE."
+msgstr ""
+
 msgid "Rio Mosaic 2013"
 msgstr ""
 
@@ -24585,6 +24640,9 @@ msgstr ""
 msgid "Japan GSI ortho Imagery"
 msgstr ""
 
+msgid "Japan GSI Standard Map"
+msgstr ""
+
 msgid "imagico.de OSM images for mapping: Aral Sea (low water level)"
 msgstr ""
 
@@ -24614,7 +24672,7 @@ msgstr ""
 msgid "20cm ortho - Latvia - Coastline"
 msgstr ""
 
-msgid "1.cikla ortofotokarte - Latvia"
+msgid "Orthophoto 1st cycle (1994-1999) - Latvia"
 msgstr ""
 
 msgid "ORT10LT (Lithuania)"
@@ -24623,6 +24681,9 @@ msgstr ""
 msgid "geoportail.lu all layers"
 msgstr ""
 
+msgid "geoportail.lu ortho latest"
+msgstr ""
+
 msgid "geoportail.lu ortho 2016"
 msgstr ""
 
@@ -26113,6 +26174,9 @@ msgstr ""
 msgid "{0} on a node. Should be used on a way."
 msgstr ""
 
+msgid "{0} on a node. Should be used on a way or relation."
+msgstr ""
+
 msgid "{0} on a node. Should be drawn as an area."
 msgstr ""
 
@@ -26340,6 +26404,9 @@ msgstr ""
 msgid "Nodes duplicating parent way tags"
 msgstr ""
 
+msgid "{0} together with {1} and {2}. Remove {0}."
+msgstr ""
+
 msgid ""
 "wikipedia tag has no language given, use ''wikipedia''=''language:page "
 "title''"
@@ -27104,6 +27171,21 @@ msgstr ""
 msgid "Importing..."
 msgstr ""
 
+msgid "Shape is started incorrectly"
+msgstr ""
+
+msgid "Can''t load SVG diagram"
+msgstr ""
+
+msgid "Can''t find root SVG element"
+msgstr ""
+
+msgid "Import primitives"
+msgstr ""
+
+msgid "Cannot find configuration file!"
+msgstr ""
+
 msgid "DXF files [ImportDxf plugin] (*.dxf)"
 msgstr ""
 
@@ -27743,6 +27825,9 @@ msgstr ""
 msgid "Download mode"
 msgstr ""
 
+msgid "Number of images to be pre-fetched (forwards and backwards)"
+msgstr ""
+
 msgid "You are logged in as ''{0}''."
 msgstr ""
 
@@ -27953,8 +28038,17 @@ msgid "only when manually requested"
 msgstr ""
 
 msgid ""
-"The downloaded OSM area is too big. Download mode has been changed to OSM "
-"area until the layer is restarted."
+"The Mapillary layer has stopped downloading images, because the requested "
+"area is too big!"
+msgstr ""
+
+msgid ""
+"To solve this problem, you could zoom in and load a smaller area of the map."
+msgstr ""
+
+msgid ""
+"To solve this problem, you could switch to download mode ''{0}'' and load "
+"Mapillary images for a smaller portion of the map."
 msgstr ""
 
 msgid "Downloading"
@@ -31266,19 +31360,6 @@ msgstr ""
 msgid "Merge Overlap (combine)"
 msgstr ""
 
-msgid ""
-"<html>A role based relation membership was copied to all new ways.<br>You "
-"should verify this and correct it when necessary.</html>"
-msgstr ""
-
-msgid ""
-"<html>A relation membership was copied to all new ways.<br>You should verify "
-"this and correct it when necessary.</html>"
-msgstr ""
-
-msgid "Split way"
-msgstr ""
-
 msgid "Michigan Left"
 msgstr ""
 
@@ -32733,254 +32814,254 @@ msgstr ""
 msgid "PT: Route passes a oneway road in the wrong direction"
 msgstr ""
 
-msgid "moved"
+msgid "Create Stops from GTFS ..."
 msgstr ""
 
-msgid "rail"
+msgid "Create Stops from a GTFS file"
 msgstr ""
 
-msgid "Can''t parse a time from this string."
+msgid "Select GTFS file (stops.txt)"
 msgstr ""
 
-msgid "Invalid value"
+msgid "File \"{0}\" does not exist"
 msgstr ""
 
-msgid "added"
+msgid "IOException \"{0}\" occurred"
 msgstr ""
 
-msgid "Public Transport: Enable GTFSStops"
+msgid ""
+"There exists no dataset. Try to download data from the server or open an OSM "
+"file."
 msgstr ""
 
-msgid "Public Transport: Catch GTFS stops"
+msgid "No data found"
 msgstr ""
 
-msgid "skipped"
+msgid "The GTFS file was empty."
 msgstr ""
 
-msgid "Public Transport: Disable GTFS"
+msgid "[ID] {0}"
 msgstr ""
 
-msgid "Create Stops from GTFS ..."
+msgid "Route patterns ..."
 msgstr ""
 
-msgid "Create Stops from a GTFS file"
+msgid "Edit Route patterns for public transport"
 msgstr ""
 
-msgid "Select GTFS file (stops.txt)"
+msgid "Route Patterns"
 msgstr ""
 
-msgid "File \"{0}\" does not exist"
+msgid "Overview"
 msgstr ""
 
-msgid "IOException \"{0}\" occurred"
+msgid "Itinerary"
 msgstr ""
 
-msgid ""
-"There exists no dataset. Try to download data from the server or open an OSM "
-"file."
+msgid "Stops"
 msgstr ""
 
-msgid "No data found"
+msgid "Meta"
 msgstr ""
 
-msgid "The GTFS file was empty."
+msgid "Existing route patterns:"
 msgstr ""
 
-msgid "Create Stops from GTFS"
+msgid "Reflect"
 msgstr ""
 
-msgid "GTFS-Stops"
+msgid "Required tags:"
 msgstr ""
 
-msgid "Type of stops to add"
+msgid "Common tags:"
 msgstr ""
 
-msgid "Time on your GPS device"
+msgid "Additional tags:"
 msgstr ""
 
-msgid "HH:MM:SS.sss"
+msgid "Add a new Tag"
 msgstr ""
 
-msgid "Time on your stopwatch"
+msgid "Name/Id"
 msgstr ""
 
-msgid "Time window"
+msgid "Find"
 msgstr ""
 
-msgid "seconds"
+msgid "Show"
 msgstr ""
 
-msgid "Move Threshold"
+msgid "Mark"
 msgstr ""
 
-msgid "Suggest Stops"
+msgid "Ref"
 msgstr ""
 
-msgid "Find"
+msgid "Stops are possible on the"
 msgstr ""
 
-msgid "Show"
+msgid "right hand side"
 msgstr ""
 
-msgid "Mark"
+msgid "left hand side"
 msgstr ""
 
-msgid "Catch"
+msgid "Maximum distance from route"
 msgstr ""
 
-msgid "Join"
+msgid "Suggest Stops"
 msgstr ""
 
-msgid "Public Transport: Join GTFS stops"
+msgid "Create Stops from GPX ..."
 msgstr ""
 
-msgid "State"
+msgid "Create Stops from a GPX file"
 msgstr ""
 
-msgid "[incomplete]"
+msgid "Select GPX file"
 msgstr ""
 
-msgid "[empty way]"
+msgid "The GPX file contained no tracks or waypoints."
 msgstr ""
 
-msgid "[ID] {0}"
+msgid "moved"
 msgstr ""
 
-msgid "[gap]"
+msgid "added"
 msgstr ""
 
-msgid "Route patterns ..."
+msgid "Public Transport: Enable GTFSStops"
 msgstr ""
 
-msgid "Edit Route patterns for public transport"
+msgid "Public Transport: Catch GTFS stops"
 msgstr ""
 
-msgid "Route Patterns"
+msgid "skipped"
 msgstr ""
 
-msgid "Overview"
+msgid "Public Transport: Disable GTFS"
 msgstr ""
 
-msgid "Itinerary"
+msgid "Public Transport: Join GTFS stops"
 msgstr ""
 
-msgid "Stops"
+msgid "Public Transport: Change stop type"
 msgstr ""
 
-msgid "Meta"
+msgid "Public Transport: Add track stop"
 msgstr ""
 
-msgid "Existing route patterns:"
+msgid "Public Transport: Delete track stop"
 msgstr ""
 
-msgid "Reflect"
+msgid "Public Transport: Detach track stop list"
 msgstr ""
 
-msgid "Required tags:"
+msgid "Public Transport: Edit track stop list"
 msgstr ""
 
-msgid "Common tags:"
+msgid "Public Transport: Relocate nodes in track stoplist"
 msgstr ""
 
-msgid "Additional tags:"
+msgid "Public Transport: sort track stop list"
 msgstr ""
 
-msgid "Add a new Tag"
+msgid "Public Transport: Suggest stops"
 msgstr ""
 
-msgid "Name/Id"
+msgid "Public Transport: Detach waypoints"
 msgstr ""
 
-msgid "Ref"
+msgid "Public Transport: Disable waypoints"
 msgstr ""
 
-msgid "Stops are possible on the"
+msgid "Public Transport: Enable waypoints"
 msgstr ""
 
-msgid "right hand side"
+msgid "Public Transport: Edit waypoint name"
 msgstr ""
 
-msgid "left hand side"
+msgid "rail"
 msgstr ""
 
-msgid "Maximum distance from route"
+msgid "Can''t parse a time from this string."
 msgstr ""
 
-msgid " [ID] {0}"
+msgid "Invalid value"
 msgstr ""
 
-msgid "Public Transport: Change stop type"
+msgid "Create Stops from GTFS"
 msgstr ""
 
-msgid "Create Stops from GPX ..."
+msgid "GTFS-Stops"
 msgstr ""
 
-msgid "Create Stops from a GPX file"
+msgid "Type of stops to add"
 msgstr ""
 
-msgid "Select GPX file"
+msgid "Time on your GPS device"
 msgstr ""
 
-msgid "The GPX file contained no tracks or waypoints."
+msgid "HH:MM:SS.sss"
 msgstr ""
 
-msgid "Create Stops from GPX"
+msgid "Time on your stopwatch"
 msgstr ""
 
-msgid "Tracks in this GPX file:"
+msgid "Time window"
 msgstr ""
 
-msgid "Detach"
+msgid "seconds"
 msgstr ""
 
-msgid "implicit"
+msgid "Move Threshold"
 msgstr ""
 
-msgid ""
-"The GPX file doesn''t contain valid trackpoints. Please use a GPX file that "
-"has trackpoints."
+msgid "Catch"
 msgstr ""
 
-msgid "GPX File Trouble"
+msgid "Join"
 msgstr ""
 
-msgid "unnamed"
+msgid "Create Stops from GPX"
 msgstr ""
 
-msgid "Public Transport: Add track stop"
+msgid "Tracks in this GPX file:"
 msgstr ""
 
-msgid "Public Transport: Delete track stop"
+msgid "Detach"
 msgstr ""
 
-msgid "Public Transport: Detach track stop list"
+msgid "implicit"
 msgstr ""
 
-msgid "Public Transport: Edit track stop list"
+msgid "State"
 msgstr ""
 
-msgid "Public Transport: Relocate nodes in track stoplist"
+msgid "[incomplete]"
 msgstr ""
 
-msgid "Public Transport: sort track stop list"
+msgid "[empty way]"
 msgstr ""
 
-msgid "Public Transport: Suggest stops"
+msgid "[gap]"
 msgstr ""
 
 msgid "Stopname"
 msgstr ""
 
-msgid "Public Transport: Detach waypoints"
+msgid " [ID] {0}"
 msgstr ""
 
-msgid "Public Transport: Disable waypoints"
+msgid ""
+"The GPX file doesn''t contain valid trackpoints. Please use a GPX file that "
+"has trackpoints."
 msgstr ""
 
-msgid "Public Transport: Enable waypoints"
+msgid "GPX File Trouble"
 msgstr ""
 
-msgid "Public Transport: Edit waypoint name"
+msgid "unnamed"
 msgstr ""
 
 msgid "Distance between stops"
@@ -33709,6 +33790,9 @@ msgstr ""
 msgid "JOSM Tag Editor Plugin"
 msgstr ""
 
+msgid "Presets"
+msgstr ""
+
 msgid "Abort tag editing and close dialog"
 msgstr ""
 
@@ -35634,6 +35718,26 @@ msgid_plural "Overwrite ''{0}'' tags {1} from {2} with new value ''{3}''?"
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Download from Sophox API"
+msgstr ""
+
+msgid ""
+"Find places of education at least 2km, and at most 3km from the center of "
+"the selection"
+msgstr ""
+
+msgid "Show/hide Sophox snippet list"
+msgstr ""
+
+msgid "help"
+msgstr ""
+
+msgid "Server: "
+msgstr ""
+
+msgid "Wikidata+OSM server"
+msgstr ""
+
 msgid "Search Wikidata items"
 msgstr ""
 
@@ -35707,26 +35811,6 @@ msgid ""
 "objects"
 msgstr ""
 
-msgid "Download from Wikosm API"
-msgstr ""
-
-msgid ""
-"Find places of education at least 2km, and at most 3km from the center of "
-"the selection"
-msgstr ""
-
-msgid "Show/hide Wikosm snippet list"
-msgstr ""
-
-msgid "help"
-msgstr ""
-
-msgid "Server: "
-msgstr ""
-
-msgid "Wikidata+OSM server"
-msgstr ""
-
 msgid "The Ultimate WMS Super-speed Turbo Challenge II"
 msgstr ""
 
diff --git a/i18n/po/hu.po b/i18n/po/hu.po
index 8f96dce..96aeea8 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-10-30 03:38+0100\n"
-"PO-Revision-Date: 2017-09-30 19:17+0000\n"
-"Last-Translator: Gábor Babos <Unknown>\n"
+"POT-Creation-Date: 2017-11-26 00:06+0100\n"
+"PO-Revision-Date: 2017-11-13 21:35+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-10-30 04:47+0000\n"
-"X-Generator: Launchpad (build 18493)\n"
+"X-Launchpad-Export-Date: 2017-11-26 04:48+0000\n"
+"X-Generator: Launchpad (build 18509)\n"
 "Language: hu\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -449,12 +449,15 @@ msgstr "Réteg törlése"
 msgid "Delete the active layer. Does not delete the associated file."
 msgstr "Törli az aktív réteget, de nem törli a hozzá tartozó fájlt."
 
-msgid "Toggle dialogs panel"
-msgstr "Párbeszédpanelek megjelenítése"
+msgid "Dialogs panel"
+msgstr "Dialógusok panel"
 
 msgid "Toggle dialogs panel, maximize mapview"
 msgstr "Párbeszédpanelek megjelenítése, vagy térképnézet maximalizálása"
 
+msgid "Toggle dialogs panel"
+msgstr "Párbeszédpanelek megjelenítése"
+
 msgid "Distribute Nodes"
 msgstr "Pontok egyenletes elosztása"
 
@@ -4027,42 +4030,44 @@ msgid "Custom Projection"
 msgstr "egyéni vetület"
 
 msgid "Error: {0}"
-msgstr ""
+msgstr "Hiba: {0}"
 
 msgid "JOSM projection command line interface"
-msgstr ""
+msgstr "JOSM vetületi parancssori interfész"
 
 msgid "Description"
 msgstr "Leírás"
 
 msgid "Converts coordinates from one coordinate reference system to another."
-msgstr ""
+msgstr "Koordinátákat konvertál egyik vetületből a másikba"
 
 msgid "Options"
-msgstr ""
+msgstr "Opciók"
 
 msgid "Show this help"
 msgstr "Ezen súgó megjelenítése"
 
 msgid "Switch input and output crs"
-msgstr ""
+msgstr "Be- és kimeneti koordinátarendszer felcserélése"
 
 msgid "Switch order of input coordinates (east/north, lon/lat)"
-msgstr ""
+msgstr "Megcseréli a bemeneti koordináták sorrendjét (kelet/észak, lon/lat)"
 
 msgid "Switch order of output coordinates (east/north, lon/lat)"
-msgstr ""
+msgstr "Megcseréli a kimeneti koordináták sorrendjét (kelet/észak, lon/lat)"
 
 msgid "<crs>"
-msgstr ""
+msgstr "<koordinátarendszer>"
 
 msgid ""
 "The format for input and output coordinate reference system is similar to "
 "that of the PROJ.4 software."
 msgstr ""
+"A be- és kimeneti koordinátarendszer formátuma hasonló a PROJ.4 szoftverben "
+"használthoz."
 
 msgid "[file]"
-msgstr ""
+msgstr "[fájl]"
 
 msgid ""
 "Reads input data from one or more files listed as positional arguments. When "
@@ -5724,7 +5729,7 @@ msgid "Shrink"
 msgstr "Kicsinyít"
 
 msgid "Show downloaded area"
-msgstr ""
+msgstr "Letöltött terület megjelenítése"
 
 msgid ""
 "<html>Please select a <strong>range of OSM tiles</strong> at a given zoom "
@@ -6990,6 +6995,9 @@ msgstr "Koordináták: "
 msgid "Coordinates (projected): "
 msgstr "Koordináták (vetített): "
 
+msgid "UTM Zone"
+msgstr "UTM zóna"
+
 msgid "Part of: "
 msgstr "Része: "
 
@@ -7701,7 +7709,7 @@ msgid "Update the changeset from the OSM server"
 msgstr "Módosításcsomag frissítése az OSM szerverről"
 
 msgid "View changeset"
-msgstr ""
+msgstr "Módosításcsomag megtekintése"
 
 msgid ""
 "Select the primitives in the content of this changeset in the current data "
@@ -8713,7 +8721,7 @@ msgstr ""
 "próbáld újra.</html>"
 
 msgid "Select the currently edited relation"
-msgstr ""
+msgstr "A jelenleg szerkesztett kapcsolat kijelölése"
 
 msgid "Select objects for selected relation members"
 msgstr "A kijelölt kapcsolattagoknak megfelelő objektumok kijelölése"
@@ -9344,10 +9352,10 @@ msgid "Open a history browser with the history of this node"
 msgstr "Előzményböngésző megnyitása a pont előzményeivel"
 
 msgid "View changeset in web browser"
-msgstr ""
+msgstr "Módosításcsomag megtekintése böngészőben"
 
 msgid "Open {0}"
-msgstr ""
+msgstr "{0} megnyitása"
 
 msgid "Way {0}"
 msgstr "{0} vonal"
@@ -9359,7 +9367,7 @@ msgid "Object"
 msgstr "Objektum"
 
 msgid "Open Changeset Manager"
-msgstr ""
+msgstr "Módosításcsomag kezelő megnyitása"
 
 msgid "Changeset comment"
 msgstr "Módosításcsomag megjegyzése"
@@ -9538,9 +9546,14 @@ msgid "Check \"Save\" to save the layer to the file specified on the left."
 msgstr ""
 "A \"Mentést\" választva elmenti a réteget a bal oldalon megadott fájlba."
 
-msgid "I would like someone to review my edits."
+msgid ""
+"A background upload is already in progress. Kindly wait for it to finish "
+"before uploading new changes"
 msgstr ""
 
+msgid "I would like someone to review my edits."
+msgstr "Szeretném, hogy valaki átnézze a szerkesztéseimet."
+
 msgid "Provide a brief comment for the changes you are uploading:"
 msgstr "Adj egy rövid magyarázatot a feltöltendő változtatásokhoz:"
 
@@ -10773,6 +10786,9 @@ msgstr "Módosítsd a vetületet, vagy távolítsd el a réteget."
 msgid "Save Layer"
 msgstr "Réteg mentése"
 
+msgid "Trying to set a read only data layer as edit layer"
+msgstr ""
+
 msgid "{0} note"
 msgid_plural "{0} notes"
 msgstr[0] "{0} jegyzet"
@@ -11492,7 +11508,7 @@ msgid "Select the map painting styles"
 msgstr "Térképrajz stílusának kijelölése"
 
 msgid "Error - file not found: ''{0}''"
-msgstr ""
+msgstr "Hiba, a fájl nem található: „{0}”"
 
 msgid "Expected integer number for option {0}, but got ''{1}''"
 msgstr ""
@@ -11664,11 +11680,6 @@ msgstr ""
 msgid "Failed to parse Mappaint styles from ''{0}''. Error was: {1}"
 msgstr "Nem sikerült értelmezni a térképstílusokat itt: \"{0}\". Hiba: {1}"
 
-msgid ""
-"Detected deprecated ''{0}'' in ''{1}'' which will be removed shortly. Use "
-"''{2}'' instead."
-msgstr ""
-
 msgid "Failed to locate image ''{0}''"
 msgstr "A kép nem található ''{0}''"
 
@@ -12980,6 +12991,9 @@ msgstr "Nyitóképernyő megjelenítése indításkor"
 msgid "Show object ID in selection lists"
 msgstr "Objektum-ID megjelentése a kijelölési listában"
 
+msgid "Show node coordinates in selection lists"
+msgstr ""
+
 msgid "Show localized name in selection lists"
 msgstr "Lokalizált nevek a kijelölési listában"
 
@@ -13795,9 +13809,6 @@ msgstr "UTM Geodéziai rendszer"
 msgid "UTM"
 msgstr "UTM"
 
-msgid "UTM Zone"
-msgstr "UTM zóna"
-
 msgid "North"
 msgstr "Északi"
 
@@ -14321,9 +14332,6 @@ msgstr "al-elem beállítása szülő nélkül"
 msgid "Error parsing {0}: "
 msgstr "Értelmezési hiba {0}: "
 
-msgid "Presets"
-msgstr "Előbeállítások"
-
 msgid "Search for objects by preset..."
 msgstr "Objektum keresése címke alapján…"
 
@@ -17225,6 +17233,18 @@ msgstr "vegetáriánus"
 msgid "korean"
 msgstr "koreai"
 
+msgid "donut"
+msgstr "fánk"
+
+msgid "mediterranean"
+msgstr "mediterrán"
+
+msgid "friture"
+msgstr ""
+
+msgid "crepe"
+msgstr "palacsinta"
+
 msgid "Internet access"
 msgstr "Internetcsatlakozás"
 
@@ -19130,6 +19150,8 @@ msgid ""
 "An area of water mostly surrounded by land but with level connection to the "
 "ocean or a lake."
 msgstr ""
+"Egy vízfelület, amit nagyrészt szárazföld vesz körbe, de szintben "
+"kapcsolódik egy tengerhez vagy tóhoz."
 
 msgid "Shipping"
 msgstr "Hajózás"
@@ -19567,7 +19589,7 @@ msgid "1/50 mix (mofa/moped)"
 msgstr "1:50 keverék (moped)"
 
 msgid "Additives:"
-msgstr ""
+msgstr "Adalékok:"
 
 msgid "Diesel Exhaust Fluid (AdBlue/AUS32)"
 msgstr ""
@@ -20095,9 +20117,18 @@ msgstr "Áramellátás"
 msgid "Tents allowed"
 msgstr "Sátrazás lehetséges"
 
-msgid "Camping Site"
+msgid "Campsite"
 msgstr "Kemping"
 
+msgid "Caravans allowed"
+msgstr "Lakókocsi engedélyezett"
+
+msgid "Backcountry"
+msgstr ""
+
+msgid "Group only access"
+msgstr "Csak csoportos"
+
 msgid "Food+Drinks"
 msgstr "Étel-ital"
 
@@ -22531,7 +22562,7 @@ msgstr ""
 
 msgctxt "power"
 msgid "mechanical"
-msgstr ""
+msgstr "mechanikus"
 
 msgctxt "power"
 msgid "circuit_breaker"
@@ -22543,7 +22574,7 @@ msgstr ""
 
 msgctxt "power"
 msgid "earthing"
-msgstr ""
+msgstr "földelés"
 
 msgid "Power Converter"
 msgstr "Egyenirányító"
@@ -22938,46 +22969,46 @@ msgid "Palaeontological Site"
 msgstr "Őslénytani lelőhely"
 
 msgid "Grave"
-msgstr ""
+msgstr "Sír"
 
 msgid "Tomb"
 msgstr ""
 
 msgctxt "tomb"
 msgid "tumulus"
-msgstr ""
+msgstr "halomsír"
 
 msgctxt "tomb"
 msgid "rock-cut"
-msgstr ""
+msgstr "sziklába vájt"
 
 msgctxt "tomb"
 msgid "hypogeum"
-msgstr ""
+msgstr "katakomba"
 
 msgctxt "tomb"
 msgid "war_grave"
-msgstr ""
+msgstr "katonasír"
 
 msgctxt "tomb"
 msgid "mausoleum"
-msgstr ""
+msgstr "mauzóleum"
 
 msgctxt "tomb"
 msgid "columbarium"
-msgstr ""
+msgstr "kolumbárium"
 
 msgctxt "tomb"
 msgid "crypt"
-msgstr ""
+msgstr "kripta"
 
 msgctxt "tomb"
 msgid "pyramid"
-msgstr ""
+msgstr "piramis"
 
 msgctxt "tomb"
 msgid "sarcophagus"
-msgstr ""
+msgstr "szarkofág"
 
 msgctxt "tomb"
 msgid "vault"
@@ -24957,6 +24988,14 @@ msgid ""
 "resolution or better, and refreshed more frequently with ongoing updates."
 msgstr ""
 
+msgid "DigitalGlobe Premium Imagery Vintage"
+msgstr ""
+
+msgid ""
+"Imagery boundaries and capture dates. Labels appear at zoom level 14 and "
+"higher."
+msgstr ""
+
 msgid "DigitalGlobe Standard Imagery"
 msgstr ""
 
@@ -24966,6 +25005,9 @@ msgid ""
 "Landsat. Average age is 2.31 years, with some areas updated 2x per year."
 msgstr ""
 
+msgid "DigitalGlobe Standard Imagery Vintage"
+msgstr ""
+
 msgid "Esri World Imagery"
 msgstr ""
 
@@ -25029,6 +25071,12 @@ msgstr "Strava futó hőtérkép"
 msgid "Strava cycling and running heatmap"
 msgstr "Strava kerékpáros és futó hőtérkép"
 
+msgid "Strava water sports heatmap"
+msgstr ""
+
+msgid "Strava winter sports heatmap"
+msgstr ""
+
 msgid "Locator Overlay"
 msgstr "Kereső rátét"
 
@@ -25437,6 +25485,9 @@ msgstr "SPW(allonie) PICC numerical imagery"
 msgid "SPW(allonie) most recent aerial imagery"
 msgstr "SPW(allonie) legfrissebb légifelvétel"
 
+msgid "SPW(allonie) 2016 aerial imagery"
+msgstr ""
+
 msgid "SPW(allonie) 2015 aerial imagery"
 msgstr "SPW(allonie) 2015 légifelvétel"
 
@@ -25482,6 +25533,14 @@ msgstr ""
 msgid "Addresses data from IBGE"
 msgstr ""
 
+msgid "Street names IBGE Salvador-BA"
+msgstr ""
+
+msgid ""
+"Streets geometry and names of Salvador, Bahia. Source: Faces de Logradouro - "
+"IBGE."
+msgstr ""
+
 msgid "Rio Mosaic 2013"
 msgstr "Rio Mosaic 2013"
 
@@ -26225,6 +26284,9 @@ msgstr ""
 msgid "Japan GSI ortho Imagery"
 msgstr "Japán GSI ortofotó"
 
+msgid "Japan GSI Standard Map"
+msgstr ""
+
 msgid "imagico.de OSM images for mapping: Aral Sea (low water level)"
 msgstr ""
 
@@ -26254,8 +26316,8 @@ msgstr "50cm ortofotó - Latvia"
 msgid "20cm ortho - Latvia - Coastline"
 msgstr "20cm ortofotó - Latvia - Coastline"
 
-msgid "1.cikla ortofotokarte - Latvia"
-msgstr "1.cikla ortofotó - Lettország"
+msgid "Orthophoto 1st cycle (1994-1999) - Latvia"
+msgstr ""
 
 msgid "ORT10LT (Lithuania)"
 msgstr "ORT10LT (Lithuania)"
@@ -26263,8 +26325,11 @@ msgstr "ORT10LT (Lithuania)"
 msgid "geoportail.lu all layers"
 msgstr "geoportail.lu összes réteg"
 
+msgid "geoportail.lu ortho latest"
+msgstr ""
+
 msgid "geoportail.lu ortho 2016"
-msgstr "geoportail.lu ortofotó 2016"
+msgstr ""
 
 msgid "Luxembourg Inspire Railway"
 msgstr "Luxembourg Inspire Vasúti"
@@ -27789,6 +27854,9 @@ msgstr ""
 msgid "{0} on a node. Should be used on a way."
 msgstr "{0} egy ponton. Vonalon kellene használni."
 
+msgid "{0} on a node. Should be used on a way or relation."
+msgstr ""
+
 msgid "{0} on a node. Should be drawn as an area."
 msgstr "{0} egy ponton. Területként kellene megrajzolni."
 
@@ -28033,6 +28101,9 @@ msgstr "semmi értelme a következőnek: {0}"
 msgid "Nodes duplicating parent way tags"
 msgstr "A pontok megismétlik a szülővonal címkéit"
 
+msgid "{0} together with {1} and {2}. Remove {0}."
+msgstr ""
+
 msgid ""
 "wikipedia tag has no language given, use ''wikipedia''=''language:page "
 "title''"
@@ -28971,6 +29042,21 @@ msgstr "Nyomvonal feltöltése az openstreetmap.org-ra"
 msgid "Importing..."
 msgstr "Betöltés…"
 
+msgid "Shape is started incorrectly"
+msgstr ""
+
+msgid "Can''t load SVG diagram"
+msgstr ""
+
+msgid "Can''t find root SVG element"
+msgstr ""
+
+msgid "Import primitives"
+msgstr ""
+
+msgid "Cannot find configuration file!"
+msgstr ""
+
 msgid "DXF files [ImportDxf plugin] (*.dxf)"
 msgstr "DXF fájlok [ImportDxf bővítmény] (*.dxf)"
 
@@ -29624,6 +29710,9 @@ msgstr ""
 msgid "Download mode"
 msgstr "Letöltési mód"
 
+msgid "Number of images to be pre-fetched (forwards and backwards)"
+msgstr ""
+
 msgid "You are logged in as ''{0}''."
 msgstr "Be vagy jelentkezve \"{0}\" néven."
 
@@ -29835,11 +29924,18 @@ msgid "only when manually requested"
 msgstr "csak kézi lekérésre"
 
 msgid ""
-"The downloaded OSM area is too big. Download mode has been changed to OSM "
-"area until the layer is restarted."
+"The Mapillary layer has stopped downloading images, because the requested "
+"area is too big!"
+msgstr ""
+
+msgid ""
+"To solve this problem, you could zoom in and load a smaller area of the map."
+msgstr ""
+
+msgid ""
+"To solve this problem, you could switch to download mode ''{0}'' and load "
+"Mapillary images for a smaller portion of the map."
 msgstr ""
-"A letöltött OSM terület túl nagy. A letöltési mód a réteg újrakezdéséig "
-"módosítva lett OSM területre."
 
 msgid "Downloading"
 msgstr "Letöltés"
@@ -33233,23 +33329,6 @@ msgstr ""
 msgid "Merge Overlap (combine)"
 msgstr ""
 
-msgid ""
-"<html>A role based relation membership was copied to all new ways.<br>You "
-"should verify this and correct it when necessary.</html>"
-msgstr ""
-"<html>Egy szerep alapú kapcsolat tagsága másolásra került az összes új "
-"vonalra<br>Ellenőrizd és javítsd, ha szükséges.</html>"
-
-msgid ""
-"<html>A relation membership was copied to all new ways.<br>You should verify "
-"this and correct it when necessary.</html>"
-msgstr ""
-"<html>Egy kapcsolat tagsága másolásra került az összes új "
-"vonalra<br>Ellenőrizd és javítsd, ha szükséges.</html>"
-
-msgid "Split way"
-msgstr "Vonal kettévágása"
-
 msgid "Michigan Left"
 msgstr ""
 
@@ -34784,33 +34863,6 @@ msgstr "PT: az út építés alatt áll"
 msgid "PT: Route passes a oneway road in the wrong direction"
 msgstr "PT: az útvonal egyirányú úton halad ellentétes irányba"
 
-msgid "moved"
-msgstr "mozgatott"
-
-msgid "rail"
-msgstr "sín"
-
-msgid "Can''t parse a time from this string."
-msgstr "Ebből a karakterláncból nem lehet időt bedolgozni."
-
-msgid "Invalid value"
-msgstr "Helytelen érték"
-
-msgid "added"
-msgstr "hozzáadott"
-
-msgid "Public Transport: Enable GTFSStops"
-msgstr "Tömegközlekedés: GTFSStops engedélyezése"
-
-msgid "Public Transport: Catch GTFS stops"
-msgstr "Tömegközlekedés: GTFSStops elkapása"
-
-msgid "skipped"
-msgstr "kihagyott"
-
-msgid "Public Transport: Disable GTFS"
-msgstr "Tömegközlekedés: GTFSStops tiltása"
-
 msgid "Create Stops from GTFS ..."
 msgstr "Megálló készítés GTFS-ből…"
 
@@ -34839,69 +34891,9 @@ msgstr "Nem található adat"
 msgid "The GTFS file was empty."
 msgstr "A GTFS fájl üres volt."
 
-msgid "Create Stops from GTFS"
-msgstr "Megálló készítés GTFS-ből"
-
-msgid "GTFS-Stops"
-msgstr "GTFS megállók"
-
-msgid "Type of stops to add"
-msgstr "Hozzáadandó megálló típusok"
-
-msgid "Time on your GPS device"
-msgstr "Idő a GPS-készülékeden"
-
-msgid "HH:MM:SS.sss"
-msgstr "HH:MM:SS.sss"
-
-msgid "Time on your stopwatch"
-msgstr "Idő a stopperórádon"
-
-msgid "Time window"
-msgstr "Időablak"
-
-msgid "seconds"
-msgstr "másodpercek"
-
-msgid "Move Threshold"
-msgstr "Küszöbérték mozdítás"
-
-msgid "Suggest Stops"
-msgstr "Javaslat megállókra"
-
-msgid "Find"
-msgstr "Keres"
-
-msgid "Show"
-msgstr "Mutat"
-
-msgid "Mark"
-msgstr "Jelöl"
-
-msgid "Catch"
-msgstr "Elkap"
-
-msgid "Join"
-msgstr "Összekapcsolás"
-
-msgid "Public Transport: Join GTFS stops"
-msgstr "Tömegközlekedés: GTFSStops összekapcsolása"
-
-msgid "State"
-msgstr "Állam"
-
-msgid "[incomplete]"
-msgstr "[befejezetlen]"
-
-msgid "[empty way]"
-msgstr "[üres út]"
-
 msgid "[ID] {0}"
 msgstr "[ID] {0}"
 
-msgid "[gap]"
-msgstr "[eltérés]"
-
 msgid "Route patterns ..."
 msgstr "Útvonalminták…"
 
@@ -34944,6 +34936,15 @@ msgstr "Új címke hozzáadása"
 msgid "Name/Id"
 msgstr "Név/Azon."
 
+msgid "Find"
+msgstr "Keres"
+
+msgid "Show"
+msgstr "Mutat"
+
+msgid "Mark"
+msgstr "Jelöl"
+
 msgid "Ref"
 msgstr "Referencia"
 
@@ -34959,11 +34960,8 @@ msgstr "bal oldali"
 msgid "Maximum distance from route"
 msgstr "Maximális távolság az úttól"
 
-msgid " [ID] {0}"
-msgstr " [ID] {0}"
-
-msgid "Public Transport: Change stop type"
-msgstr "Tömegközlekedés: Megállótípus módosítása"
+msgid "Suggest Stops"
+msgstr "Javaslat megállókra"
 
 msgid "Create Stops from GPX ..."
 msgstr "Megállók készítése GPX-ből…"
@@ -34977,30 +34975,29 @@ msgstr "GPX-fájl kijelölése"
 msgid "The GPX file contained no tracks or waypoints."
 msgstr "A GPX-fájl nem tartalmazott nyomvonalat vagy útpontot."
 
-msgid "Create Stops from GPX"
-msgstr "Megállók készítése GPX-ből"
+msgid "moved"
+msgstr "mozgatott"
 
-msgid "Tracks in this GPX file:"
-msgstr "Nyomvonalak a GPX-ben:"
+msgid "added"
+msgstr "hozzáadott"
 
-msgid "Detach"
-msgstr "Leválasztás"
+msgid "Public Transport: Enable GTFSStops"
+msgstr "Tömegközlekedés: GTFSStops engedélyezése"
 
-msgid "implicit"
-msgstr ""
+msgid "Public Transport: Catch GTFS stops"
+msgstr "Tömegközlekedés: GTFSStops elkapása"
 
-msgid ""
-"The GPX file doesn''t contain valid trackpoints. Please use a GPX file that "
-"has trackpoints."
-msgstr ""
-"A GPX-fájl nem tartalmaz érvényes nyomvonalpontot. Kérlek, használj olyan "
-"GPX-et, amiben van nyomvonalpont."
+msgid "skipped"
+msgstr "kihagyott"
 
-msgid "GPX File Trouble"
-msgstr "GPX-fájl gond"
+msgid "Public Transport: Disable GTFS"
+msgstr "Tömegközlekedés: GTFSStops tiltása"
 
-msgid "unnamed"
-msgstr "névtelen"
+msgid "Public Transport: Join GTFS stops"
+msgstr "Tömegközlekedés: GTFSStops összekapcsolása"
+
+msgid "Public Transport: Change stop type"
+msgstr "Tömegközlekedés: Megállótípus módosítása"
 
 msgid "Public Transport: Add track stop"
 msgstr ""
@@ -35023,9 +35020,6 @@ msgstr ""
 msgid "Public Transport: Suggest stops"
 msgstr ""
 
-msgid "Stopname"
-msgstr ""
-
 msgid "Public Transport: Detach waypoints"
 msgstr ""
 
@@ -35038,6 +35032,91 @@ msgstr ""
 msgid "Public Transport: Edit waypoint name"
 msgstr ""
 
+msgid "rail"
+msgstr "sín"
+
+msgid "Can''t parse a time from this string."
+msgstr "Ebből a karakterláncból nem lehet időt bedolgozni."
+
+msgid "Invalid value"
+msgstr "Helytelen érték"
+
+msgid "Create Stops from GTFS"
+msgstr "Megálló készítés GTFS-ből"
+
+msgid "GTFS-Stops"
+msgstr "GTFS megállók"
+
+msgid "Type of stops to add"
+msgstr "Hozzáadandó megálló típusok"
+
+msgid "Time on your GPS device"
+msgstr "Idő a GPS-készülékeden"
+
+msgid "HH:MM:SS.sss"
+msgstr "HH:MM:SS.sss"
+
+msgid "Time on your stopwatch"
+msgstr "Idő a stopperórádon"
+
+msgid "Time window"
+msgstr "Időablak"
+
+msgid "seconds"
+msgstr "másodpercek"
+
+msgid "Move Threshold"
+msgstr "Küszöbérték mozdítás"
+
+msgid "Catch"
+msgstr "Elkap"
+
+msgid "Join"
+msgstr "Összekapcsolás"
+
+msgid "Create Stops from GPX"
+msgstr "Megállók készítése GPX-ből"
+
+msgid "Tracks in this GPX file:"
+msgstr "Nyomvonalak a GPX-ben:"
+
+msgid "Detach"
+msgstr "Leválasztás"
+
+msgid "implicit"
+msgstr ""
+
+msgid "State"
+msgstr "Állam"
+
+msgid "[incomplete]"
+msgstr "[befejezetlen]"
+
+msgid "[empty way]"
+msgstr "[üres út]"
+
+msgid "[gap]"
+msgstr "[eltérés]"
+
+msgid "Stopname"
+msgstr ""
+
+msgid " [ID] {0}"
+msgstr " [ID] {0}"
+
+msgid ""
+"The GPX file doesn''t contain valid trackpoints. Please use a GPX file that "
+"has trackpoints."
+msgstr ""
+"A GPX-fájl nem tartalmaz érvényes nyomvonalpontot. Kérlek, használj olyan "
+"GPX-et, amiben van nyomvonalpont."
+
+msgid "GPX File Trouble"
+msgstr "GPX-fájl gond"
+
+msgid "unnamed"
+msgstr "névtelen"
+
 msgid "Distance between stops"
 msgstr "Megállók közti távolság"
 
@@ -35783,6 +35862,9 @@ msgstr ""
 msgid "JOSM Tag Editor Plugin"
 msgstr ""
 
+msgid "Presets"
+msgstr "Előbeállítások"
+
 msgid "Abort tag editing and close dialog"
 msgstr ""
 
@@ -37875,6 +37957,26 @@ msgid_plural "Overwrite ''{0}'' tags {1} from {2} with new value ''{3}''?"
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Download from Sophox API"
+msgstr ""
+
+msgid ""
+"Find places of education at least 2km, and at most 3km from the center of "
+"the selection"
+msgstr ""
+
+msgid "Show/hide Sophox snippet list"
+msgstr ""
+
+msgid "help"
+msgstr ""
+
+msgid "Server: "
+msgstr ""
+
+msgid "Wikidata+OSM server"
+msgstr ""
+
 msgid "Search Wikidata items"
 msgstr "Wikidata elemek keresése"
 
@@ -37951,26 +38053,6 @@ msgid ""
 msgstr ""
 "Egy, az objektumok cimkéjével megegyező ''wikipedia'' szócikket ad hozzá"
 
-msgid "Download from Wikosm API"
-msgstr ""
-
-msgid ""
-"Find places of education at least 2km, and at most 3km from the center of "
-"the selection"
-msgstr ""
-
-msgid "Show/hide Wikosm snippet list"
-msgstr ""
-
-msgid "help"
-msgstr ""
-
-msgid "Server: "
-msgstr ""
-
-msgid "Wikidata+OSM server"
-msgstr ""
-
 msgid "The Ultimate WMS Super-speed Turbo Challenge II"
 msgstr "Az - Ultimate WMS Super-speed Turbo Challenge II -"
 
diff --git a/i18n/po/hy.po b/i18n/po/hy.po
index 9c51c42..1038dbd 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-10-30 03:38+0100\n"
+"POT-Creation-Date: 2017-11-26 00:06+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-10-30 04:35+0000\n"
-"X-Generator: Launchpad (build 18493)\n"
+"X-Launchpad-Export-Date: 2017-11-26 04:35+0000\n"
+"X-Generator: Launchpad (build 18509)\n"
 "Language: hy\n"
 
 msgid "Cancel"
@@ -421,12 +421,15 @@ msgstr ""
 msgid "Delete the active layer. Does not delete the associated file."
 msgstr ""
 
-msgid "Toggle dialogs panel"
+msgid "Dialogs panel"
 msgstr ""
 
 msgid "Toggle dialogs panel, maximize mapview"
 msgstr ""
 
+msgid "Toggle dialogs panel"
+msgstr ""
+
 msgid "Distribute Nodes"
 msgstr ""
 
@@ -6488,6 +6491,9 @@ msgstr ""
 msgid "Coordinates (projected): "
 msgstr ""
 
+msgid "UTM Zone"
+msgstr ""
+
 msgid "Part of: "
 msgstr ""
 
@@ -8786,6 +8792,11 @@ msgstr ""
 msgid "Check \"Save\" to save the layer to the file specified on the left."
 msgstr ""
 
+msgid ""
+"A background upload is already in progress. Kindly wait for it to finish "
+"before uploading new changes"
+msgstr ""
+
 msgid "I would like someone to review my edits."
 msgstr ""
 
@@ -9894,6 +9905,9 @@ msgstr ""
 msgid "Save Layer"
 msgstr ""
 
+msgid "Trying to set a read only data layer as edit layer"
+msgstr ""
+
 msgid "{0} note"
 msgid_plural "{0} notes"
 msgstr[0] ""
@@ -10724,11 +10738,6 @@ msgstr ""
 msgid "Failed to parse Mappaint styles from ''{0}''. Error was: {1}"
 msgstr ""
 
-msgid ""
-"Detected deprecated ''{0}'' in ''{1}'' which will be removed shortly. Use "
-"''{2}'' instead."
-msgstr ""
-
 msgid "Failed to locate image ''{0}''"
 msgstr ""
 
@@ -11893,6 +11902,9 @@ msgstr ""
 msgid "Show object ID in selection lists"
 msgstr ""
 
+msgid "Show node coordinates in selection lists"
+msgstr ""
+
 msgid "Show localized name in selection lists"
 msgstr ""
 
@@ -12649,9 +12661,6 @@ msgstr ""
 msgid "UTM"
 msgstr ""
 
-msgid "UTM Zone"
-msgstr ""
-
 msgid "North"
 msgstr ""
 
@@ -13119,9 +13128,6 @@ msgstr ""
 msgid "Error parsing {0}: "
 msgstr ""
 
-msgid "Presets"
-msgstr ""
-
 msgid "Search for objects by preset..."
 msgstr ""
 
@@ -15663,6 +15669,18 @@ msgstr ""
 msgid "korean"
 msgstr ""
 
+msgid "donut"
+msgstr ""
+
+msgid "mediterranean"
+msgstr ""
+
+msgid "friture"
+msgstr ""
+
+msgid "crepe"
+msgstr ""
+
 msgid "Internet access"
 msgstr ""
 
@@ -18505,7 +18523,16 @@ msgstr ""
 msgid "Tents allowed"
 msgstr ""
 
-msgid "Camping Site"
+msgid "Campsite"
+msgstr ""
+
+msgid "Caravans allowed"
+msgstr ""
+
+msgid "Backcountry"
+msgstr ""
+
+msgid "Group only access"
 msgstr ""
 
 msgid "Food+Drinks"
@@ -23334,6 +23361,14 @@ msgid ""
 "resolution or better, and refreshed more frequently with ongoing updates."
 msgstr ""
 
+msgid "DigitalGlobe Premium Imagery Vintage"
+msgstr ""
+
+msgid ""
+"Imagery boundaries and capture dates. Labels appear at zoom level 14 and "
+"higher."
+msgstr ""
+
 msgid "DigitalGlobe Standard Imagery"
 msgstr ""
 
@@ -23343,6 +23378,9 @@ msgid ""
 "Landsat. Average age is 2.31 years, with some areas updated 2x per year."
 msgstr ""
 
+msgid "DigitalGlobe Standard Imagery Vintage"
+msgstr ""
+
 msgid "Esri World Imagery"
 msgstr ""
 
@@ -23406,6 +23444,12 @@ msgstr ""
 msgid "Strava cycling and running heatmap"
 msgstr ""
 
+msgid "Strava water sports heatmap"
+msgstr ""
+
+msgid "Strava winter sports heatmap"
+msgstr ""
+
 msgid "Locator Overlay"
 msgstr ""
 
@@ -23810,6 +23854,9 @@ msgstr ""
 msgid "SPW(allonie) most recent aerial imagery"
 msgstr ""
 
+msgid "SPW(allonie) 2016 aerial imagery"
+msgstr ""
+
 msgid "SPW(allonie) 2015 aerial imagery"
 msgstr ""
 
@@ -23855,6 +23902,14 @@ msgstr ""
 msgid "Addresses data from IBGE"
 msgstr ""
 
+msgid "Street names IBGE Salvador-BA"
+msgstr ""
+
+msgid ""
+"Streets geometry and names of Salvador, Bahia. Source: Faces de Logradouro - "
+"IBGE."
+msgstr ""
+
 msgid "Rio Mosaic 2013"
 msgstr ""
 
@@ -24585,6 +24640,9 @@ msgstr ""
 msgid "Japan GSI ortho Imagery"
 msgstr ""
 
+msgid "Japan GSI Standard Map"
+msgstr ""
+
 msgid "imagico.de OSM images for mapping: Aral Sea (low water level)"
 msgstr ""
 
@@ -24614,7 +24672,7 @@ msgstr ""
 msgid "20cm ortho - Latvia - Coastline"
 msgstr ""
 
-msgid "1.cikla ortofotokarte - Latvia"
+msgid "Orthophoto 1st cycle (1994-1999) - Latvia"
 msgstr ""
 
 msgid "ORT10LT (Lithuania)"
@@ -24623,6 +24681,9 @@ msgstr ""
 msgid "geoportail.lu all layers"
 msgstr ""
 
+msgid "geoportail.lu ortho latest"
+msgstr ""
+
 msgid "geoportail.lu ortho 2016"
 msgstr ""
 
@@ -26113,6 +26174,9 @@ msgstr ""
 msgid "{0} on a node. Should be used on a way."
 msgstr ""
 
+msgid "{0} on a node. Should be used on a way or relation."
+msgstr ""
+
 msgid "{0} on a node. Should be drawn as an area."
 msgstr ""
 
@@ -26340,6 +26404,9 @@ msgstr ""
 msgid "Nodes duplicating parent way tags"
 msgstr ""
 
+msgid "{0} together with {1} and {2}. Remove {0}."
+msgstr ""
+
 msgid ""
 "wikipedia tag has no language given, use ''wikipedia''=''language:page "
 "title''"
@@ -27104,6 +27171,21 @@ msgstr ""
 msgid "Importing..."
 msgstr ""
 
+msgid "Shape is started incorrectly"
+msgstr ""
+
+msgid "Can''t load SVG diagram"
+msgstr ""
+
+msgid "Can''t find root SVG element"
+msgstr ""
+
+msgid "Import primitives"
+msgstr ""
+
+msgid "Cannot find configuration file!"
+msgstr ""
+
 msgid "DXF files [ImportDxf plugin] (*.dxf)"
 msgstr ""
 
@@ -27743,6 +27825,9 @@ msgstr ""
 msgid "Download mode"
 msgstr ""
 
+msgid "Number of images to be pre-fetched (forwards and backwards)"
+msgstr ""
+
 msgid "You are logged in as ''{0}''."
 msgstr ""
 
@@ -27953,8 +28038,17 @@ msgid "only when manually requested"
 msgstr ""
 
 msgid ""
-"The downloaded OSM area is too big. Download mode has been changed to OSM "
-"area until the layer is restarted."
+"The Mapillary layer has stopped downloading images, because the requested "
+"area is too big!"
+msgstr ""
+
+msgid ""
+"To solve this problem, you could zoom in and load a smaller area of the map."
+msgstr ""
+
+msgid ""
+"To solve this problem, you could switch to download mode ''{0}'' and load "
+"Mapillary images for a smaller portion of the map."
 msgstr ""
 
 msgid "Downloading"
@@ -31266,19 +31360,6 @@ msgstr ""
 msgid "Merge Overlap (combine)"
 msgstr ""
 
-msgid ""
-"<html>A role based relation membership was copied to all new ways.<br>You "
-"should verify this and correct it when necessary.</html>"
-msgstr ""
-
-msgid ""
-"<html>A relation membership was copied to all new ways.<br>You should verify "
-"this and correct it when necessary.</html>"
-msgstr ""
-
-msgid "Split way"
-msgstr ""
-
 msgid "Michigan Left"
 msgstr ""
 
@@ -32733,254 +32814,254 @@ msgstr ""
 msgid "PT: Route passes a oneway road in the wrong direction"
 msgstr ""
 
-msgid "moved"
+msgid "Create Stops from GTFS ..."
 msgstr ""
 
-msgid "rail"
+msgid "Create Stops from a GTFS file"
 msgstr ""
 
-msgid "Can''t parse a time from this string."
+msgid "Select GTFS file (stops.txt)"
 msgstr ""
 
-msgid "Invalid value"
+msgid "File \"{0}\" does not exist"
 msgstr ""
 
-msgid "added"
+msgid "IOException \"{0}\" occurred"
 msgstr ""
 
-msgid "Public Transport: Enable GTFSStops"
+msgid ""
+"There exists no dataset. Try to download data from the server or open an OSM "
+"file."
 msgstr ""
 
-msgid "Public Transport: Catch GTFS stops"
+msgid "No data found"
 msgstr ""
 
-msgid "skipped"
+msgid "The GTFS file was empty."
 msgstr ""
 
-msgid "Public Transport: Disable GTFS"
+msgid "[ID] {0}"
 msgstr ""
 
-msgid "Create Stops from GTFS ..."
+msgid "Route patterns ..."
 msgstr ""
 
-msgid "Create Stops from a GTFS file"
+msgid "Edit Route patterns for public transport"
 msgstr ""
 
-msgid "Select GTFS file (stops.txt)"
+msgid "Route Patterns"
 msgstr ""
 
-msgid "File \"{0}\" does not exist"
+msgid "Overview"
 msgstr ""
 
-msgid "IOException \"{0}\" occurred"
+msgid "Itinerary"
 msgstr ""
 
-msgid ""
-"There exists no dataset. Try to download data from the server or open an OSM "
-"file."
+msgid "Stops"
 msgstr ""
 
-msgid "No data found"
+msgid "Meta"
 msgstr ""
 
-msgid "The GTFS file was empty."
+msgid "Existing route patterns:"
 msgstr ""
 
-msgid "Create Stops from GTFS"
+msgid "Reflect"
 msgstr ""
 
-msgid "GTFS-Stops"
+msgid "Required tags:"
 msgstr ""
 
-msgid "Type of stops to add"
+msgid "Common tags:"
 msgstr ""
 
-msgid "Time on your GPS device"
+msgid "Additional tags:"
 msgstr ""
 
-msgid "HH:MM:SS.sss"
+msgid "Add a new Tag"
 msgstr ""
 
-msgid "Time on your stopwatch"
+msgid "Name/Id"
 msgstr ""
 
-msgid "Time window"
+msgid "Find"
 msgstr ""
 
-msgid "seconds"
+msgid "Show"
 msgstr ""
 
-msgid "Move Threshold"
+msgid "Mark"
 msgstr ""
 
-msgid "Suggest Stops"
+msgid "Ref"
 msgstr ""
 
-msgid "Find"
+msgid "Stops are possible on the"
 msgstr ""
 
-msgid "Show"
+msgid "right hand side"
 msgstr ""
 
-msgid "Mark"
+msgid "left hand side"
 msgstr ""
 
-msgid "Catch"
+msgid "Maximum distance from route"
 msgstr ""
 
-msgid "Join"
+msgid "Suggest Stops"
 msgstr ""
 
-msgid "Public Transport: Join GTFS stops"
+msgid "Create Stops from GPX ..."
 msgstr ""
 
-msgid "State"
+msgid "Create Stops from a GPX file"
 msgstr ""
 
-msgid "[incomplete]"
+msgid "Select GPX file"
 msgstr ""
 
-msgid "[empty way]"
+msgid "The GPX file contained no tracks or waypoints."
 msgstr ""
 
-msgid "[ID] {0}"
+msgid "moved"
 msgstr ""
 
-msgid "[gap]"
+msgid "added"
 msgstr ""
 
-msgid "Route patterns ..."
+msgid "Public Transport: Enable GTFSStops"
 msgstr ""
 
-msgid "Edit Route patterns for public transport"
+msgid "Public Transport: Catch GTFS stops"
 msgstr ""
 
-msgid "Route Patterns"
+msgid "skipped"
 msgstr ""
 
-msgid "Overview"
+msgid "Public Transport: Disable GTFS"
 msgstr ""
 
-msgid "Itinerary"
+msgid "Public Transport: Join GTFS stops"
 msgstr ""
 
-msgid "Stops"
+msgid "Public Transport: Change stop type"
 msgstr ""
 
-msgid "Meta"
+msgid "Public Transport: Add track stop"
 msgstr ""
 
-msgid "Existing route patterns:"
+msgid "Public Transport: Delete track stop"
 msgstr ""
 
-msgid "Reflect"
+msgid "Public Transport: Detach track stop list"
 msgstr ""
 
-msgid "Required tags:"
+msgid "Public Transport: Edit track stop list"
 msgstr ""
 
-msgid "Common tags:"
+msgid "Public Transport: Relocate nodes in track stoplist"
 msgstr ""
 
-msgid "Additional tags:"
+msgid "Public Transport: sort track stop list"
 msgstr ""
 
-msgid "Add a new Tag"
+msgid "Public Transport: Suggest stops"
 msgstr ""
 
-msgid "Name/Id"
+msgid "Public Transport: Detach waypoints"
 msgstr ""
 
-msgid "Ref"
+msgid "Public Transport: Disable waypoints"
 msgstr ""
 
-msgid "Stops are possible on the"
+msgid "Public Transport: Enable waypoints"
 msgstr ""
 
-msgid "right hand side"
+msgid "Public Transport: Edit waypoint name"
 msgstr ""
 
-msgid "left hand side"
+msgid "rail"
 msgstr ""
 
-msgid "Maximum distance from route"
+msgid "Can''t parse a time from this string."
 msgstr ""
 
-msgid " [ID] {0}"
+msgid "Invalid value"
 msgstr ""
 
-msgid "Public Transport: Change stop type"
+msgid "Create Stops from GTFS"
 msgstr ""
 
-msgid "Create Stops from GPX ..."
+msgid "GTFS-Stops"
 msgstr ""
 
-msgid "Create Stops from a GPX file"
+msgid "Type of stops to add"
 msgstr ""
 
-msgid "Select GPX file"
+msgid "Time on your GPS device"
 msgstr ""
 
-msgid "The GPX file contained no tracks or waypoints."
+msgid "HH:MM:SS.sss"
 msgstr ""
 
-msgid "Create Stops from GPX"
+msgid "Time on your stopwatch"
 msgstr ""
 
-msgid "Tracks in this GPX file:"
+msgid "Time window"
 msgstr ""
 
-msgid "Detach"
+msgid "seconds"
 msgstr ""
 
-msgid "implicit"
+msgid "Move Threshold"
 msgstr ""
 
-msgid ""
-"The GPX file doesn''t contain valid trackpoints. Please use a GPX file that "
-"has trackpoints."
+msgid "Catch"
 msgstr ""
 
-msgid "GPX File Trouble"
+msgid "Join"
 msgstr ""
 
-msgid "unnamed"
+msgid "Create Stops from GPX"
 msgstr ""
 
-msgid "Public Transport: Add track stop"
+msgid "Tracks in this GPX file:"
 msgstr ""
 
-msgid "Public Transport: Delete track stop"
+msgid "Detach"
 msgstr ""
 
-msgid "Public Transport: Detach track stop list"
+msgid "implicit"
 msgstr ""
 
-msgid "Public Transport: Edit track stop list"
+msgid "State"
 msgstr ""
 
-msgid "Public Transport: Relocate nodes in track stoplist"
+msgid "[incomplete]"
 msgstr ""
 
-msgid "Public Transport: sort track stop list"
+msgid "[empty way]"
 msgstr ""
 
-msgid "Public Transport: Suggest stops"
+msgid "[gap]"
 msgstr ""
 
 msgid "Stopname"
 msgstr ""
 
-msgid "Public Transport: Detach waypoints"
+msgid " [ID] {0}"
 msgstr ""
 
-msgid "Public Transport: Disable waypoints"
+msgid ""
+"The GPX file doesn''t contain valid trackpoints. Please use a GPX file that "
+"has trackpoints."
 msgstr ""
 
-msgid "Public Transport: Enable waypoints"
+msgid "GPX File Trouble"
 msgstr ""
 
-msgid "Public Transport: Edit waypoint name"
+msgid "unnamed"
 msgstr ""
 
 msgid "Distance between stops"
@@ -33709,6 +33790,9 @@ msgstr ""
 msgid "JOSM Tag Editor Plugin"
 msgstr ""
 
+msgid "Presets"
+msgstr ""
+
 msgid "Abort tag editing and close dialog"
 msgstr ""
 
@@ -35634,6 +35718,26 @@ msgid_plural "Overwrite ''{0}'' tags {1} from {2} with new value ''{3}''?"
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Download from Sophox API"
+msgstr ""
+
+msgid ""
+"Find places of education at least 2km, and at most 3km from the center of "
+"the selection"
+msgstr ""
+
+msgid "Show/hide Sophox snippet list"
+msgstr ""
+
+msgid "help"
+msgstr ""
+
+msgid "Server: "
+msgstr ""
+
+msgid "Wikidata+OSM server"
+msgstr ""
+
 msgid "Search Wikidata items"
 msgstr ""
 
@@ -35707,26 +35811,6 @@ msgid ""
 "objects"
 msgstr ""
 
-msgid "Download from Wikosm API"
-msgstr ""
-
-msgid ""
-"Find places of education at least 2km, and at most 3km from the center of "
-"the selection"
-msgstr ""
-
-msgid "Show/hide Wikosm snippet list"
-msgstr ""
-
-msgid "help"
-msgstr ""
-
-msgid "Server: "
-msgstr ""
-
-msgid "Wikidata+OSM server"
-msgstr ""
-
 msgid "The Ultimate WMS Super-speed Turbo Challenge II"
 msgstr ""
 
diff --git a/i18n/po/ia.po b/i18n/po/ia.po
index 2523911..ed4ef84 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-10-30 03:38+0100\n"
+"POT-Creation-Date: 2017-11-26 00:06+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-10-30 04:48+0000\n"
-"X-Generator: Launchpad (build 18493)\n"
+"X-Launchpad-Export-Date: 2017-11-26 04:49+0000\n"
+"X-Generator: Launchpad (build 18509)\n"
 "Language: ia\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -421,12 +421,15 @@ msgstr ""
 msgid "Delete the active layer. Does not delete the associated file."
 msgstr ""
 
-msgid "Toggle dialogs panel"
+msgid "Dialogs panel"
 msgstr ""
 
 msgid "Toggle dialogs panel, maximize mapview"
 msgstr ""
 
+msgid "Toggle dialogs panel"
+msgstr ""
+
 msgid "Distribute Nodes"
 msgstr ""
 
@@ -6488,6 +6491,9 @@ msgstr ""
 msgid "Coordinates (projected): "
 msgstr ""
 
+msgid "UTM Zone"
+msgstr ""
+
 msgid "Part of: "
 msgstr ""
 
@@ -8786,6 +8792,11 @@ msgstr ""
 msgid "Check \"Save\" to save the layer to the file specified on the left."
 msgstr ""
 
+msgid ""
+"A background upload is already in progress. Kindly wait for it to finish "
+"before uploading new changes"
+msgstr ""
+
 msgid "I would like someone to review my edits."
 msgstr ""
 
@@ -9894,6 +9905,9 @@ msgstr ""
 msgid "Save Layer"
 msgstr ""
 
+msgid "Trying to set a read only data layer as edit layer"
+msgstr ""
+
 msgid "{0} note"
 msgid_plural "{0} notes"
 msgstr[0] ""
@@ -10724,11 +10738,6 @@ msgstr ""
 msgid "Failed to parse Mappaint styles from ''{0}''. Error was: {1}"
 msgstr ""
 
-msgid ""
-"Detected deprecated ''{0}'' in ''{1}'' which will be removed shortly. Use "
-"''{2}'' instead."
-msgstr ""
-
 msgid "Failed to locate image ''{0}''"
 msgstr ""
 
@@ -11893,6 +11902,9 @@ msgstr ""
 msgid "Show object ID in selection lists"
 msgstr ""
 
+msgid "Show node coordinates in selection lists"
+msgstr ""
+
 msgid "Show localized name in selection lists"
 msgstr ""
 
@@ -12649,9 +12661,6 @@ msgstr ""
 msgid "UTM"
 msgstr ""
 
-msgid "UTM Zone"
-msgstr ""
-
 msgid "North"
 msgstr ""
 
@@ -13119,9 +13128,6 @@ msgstr ""
 msgid "Error parsing {0}: "
 msgstr ""
 
-msgid "Presets"
-msgstr ""
-
 msgid "Search for objects by preset..."
 msgstr ""
 
@@ -15663,6 +15669,18 @@ msgstr ""
 msgid "korean"
 msgstr ""
 
+msgid "donut"
+msgstr ""
+
+msgid "mediterranean"
+msgstr ""
+
+msgid "friture"
+msgstr ""
+
+msgid "crepe"
+msgstr ""
+
 msgid "Internet access"
 msgstr ""
 
@@ -18505,7 +18523,16 @@ msgstr ""
 msgid "Tents allowed"
 msgstr ""
 
-msgid "Camping Site"
+msgid "Campsite"
+msgstr ""
+
+msgid "Caravans allowed"
+msgstr ""
+
+msgid "Backcountry"
+msgstr ""
+
+msgid "Group only access"
 msgstr ""
 
 msgid "Food+Drinks"
@@ -23334,6 +23361,14 @@ msgid ""
 "resolution or better, and refreshed more frequently with ongoing updates."
 msgstr ""
 
+msgid "DigitalGlobe Premium Imagery Vintage"
+msgstr ""
+
+msgid ""
+"Imagery boundaries and capture dates. Labels appear at zoom level 14 and "
+"higher."
+msgstr ""
+
 msgid "DigitalGlobe Standard Imagery"
 msgstr ""
 
@@ -23343,6 +23378,9 @@ msgid ""
 "Landsat. Average age is 2.31 years, with some areas updated 2x per year."
 msgstr ""
 
+msgid "DigitalGlobe Standard Imagery Vintage"
+msgstr ""
+
 msgid "Esri World Imagery"
 msgstr ""
 
@@ -23406,6 +23444,12 @@ msgstr ""
 msgid "Strava cycling and running heatmap"
 msgstr ""
 
+msgid "Strava water sports heatmap"
+msgstr ""
+
+msgid "Strava winter sports heatmap"
+msgstr ""
+
 msgid "Locator Overlay"
 msgstr ""
 
@@ -23810,6 +23854,9 @@ msgstr ""
 msgid "SPW(allonie) most recent aerial imagery"
 msgstr ""
 
+msgid "SPW(allonie) 2016 aerial imagery"
+msgstr ""
+
 msgid "SPW(allonie) 2015 aerial imagery"
 msgstr ""
 
@@ -23855,6 +23902,14 @@ msgstr ""
 msgid "Addresses data from IBGE"
 msgstr ""
 
+msgid "Street names IBGE Salvador-BA"
+msgstr ""
+
+msgid ""
+"Streets geometry and names of Salvador, Bahia. Source: Faces de Logradouro - "
+"IBGE."
+msgstr ""
+
 msgid "Rio Mosaic 2013"
 msgstr ""
 
@@ -24585,6 +24640,9 @@ msgstr ""
 msgid "Japan GSI ortho Imagery"
 msgstr ""
 
+msgid "Japan GSI Standard Map"
+msgstr ""
+
 msgid "imagico.de OSM images for mapping: Aral Sea (low water level)"
 msgstr ""
 
@@ -24614,7 +24672,7 @@ msgstr ""
 msgid "20cm ortho - Latvia - Coastline"
 msgstr ""
 
-msgid "1.cikla ortofotokarte - Latvia"
+msgid "Orthophoto 1st cycle (1994-1999) - Latvia"
 msgstr ""
 
 msgid "ORT10LT (Lithuania)"
@@ -24623,6 +24681,9 @@ msgstr ""
 msgid "geoportail.lu all layers"
 msgstr ""
 
+msgid "geoportail.lu ortho latest"
+msgstr ""
+
 msgid "geoportail.lu ortho 2016"
 msgstr ""
 
@@ -26113,6 +26174,9 @@ msgstr ""
 msgid "{0} on a node. Should be used on a way."
 msgstr ""
 
+msgid "{0} on a node. Should be used on a way or relation."
+msgstr ""
+
 msgid "{0} on a node. Should be drawn as an area."
 msgstr ""
 
@@ -26340,6 +26404,9 @@ msgstr ""
 msgid "Nodes duplicating parent way tags"
 msgstr ""
 
+msgid "{0} together with {1} and {2}. Remove {0}."
+msgstr ""
+
 msgid ""
 "wikipedia tag has no language given, use ''wikipedia''=''language:page "
 "title''"
@@ -27104,6 +27171,21 @@ msgstr ""
 msgid "Importing..."
 msgstr ""
 
+msgid "Shape is started incorrectly"
+msgstr ""
+
+msgid "Can''t load SVG diagram"
+msgstr ""
+
+msgid "Can''t find root SVG element"
+msgstr ""
+
+msgid "Import primitives"
+msgstr ""
+
+msgid "Cannot find configuration file!"
+msgstr ""
+
 msgid "DXF files [ImportDxf plugin] (*.dxf)"
 msgstr ""
 
@@ -27743,6 +27825,9 @@ msgstr ""
 msgid "Download mode"
 msgstr ""
 
+msgid "Number of images to be pre-fetched (forwards and backwards)"
+msgstr ""
+
 msgid "You are logged in as ''{0}''."
 msgstr ""
 
@@ -27953,8 +28038,17 @@ msgid "only when manually requested"
 msgstr ""
 
 msgid ""
-"The downloaded OSM area is too big. Download mode has been changed to OSM "
-"area until the layer is restarted."
+"The Mapillary layer has stopped downloading images, because the requested "
+"area is too big!"
+msgstr ""
+
+msgid ""
+"To solve this problem, you could zoom in and load a smaller area of the map."
+msgstr ""
+
+msgid ""
+"To solve this problem, you could switch to download mode ''{0}'' and load "
+"Mapillary images for a smaller portion of the map."
 msgstr ""
 
 msgid "Downloading"
@@ -31266,19 +31360,6 @@ msgstr ""
 msgid "Merge Overlap (combine)"
 msgstr ""
 
-msgid ""
-"<html>A role based relation membership was copied to all new ways.<br>You "
-"should verify this and correct it when necessary.</html>"
-msgstr ""
-
-msgid ""
-"<html>A relation membership was copied to all new ways.<br>You should verify "
-"this and correct it when necessary.</html>"
-msgstr ""
-
-msgid "Split way"
-msgstr ""
-
 msgid "Michigan Left"
 msgstr ""
 
@@ -32733,254 +32814,254 @@ msgstr ""
 msgid "PT: Route passes a oneway road in the wrong direction"
 msgstr ""
 
-msgid "moved"
+msgid "Create Stops from GTFS ..."
 msgstr ""
 
-msgid "rail"
+msgid "Create Stops from a GTFS file"
 msgstr ""
 
-msgid "Can''t parse a time from this string."
+msgid "Select GTFS file (stops.txt)"
 msgstr ""
 
-msgid "Invalid value"
+msgid "File \"{0}\" does not exist"
 msgstr ""
 
-msgid "added"
+msgid "IOException \"{0}\" occurred"
 msgstr ""
 
-msgid "Public Transport: Enable GTFSStops"
+msgid ""
+"There exists no dataset. Try to download data from the server or open an OSM "
+"file."
 msgstr ""
 
-msgid "Public Transport: Catch GTFS stops"
+msgid "No data found"
 msgstr ""
 
-msgid "skipped"
+msgid "The GTFS file was empty."
 msgstr ""
 
-msgid "Public Transport: Disable GTFS"
+msgid "[ID] {0}"
 msgstr ""
 
-msgid "Create Stops from GTFS ..."
+msgid "Route patterns ..."
 msgstr ""
 
-msgid "Create Stops from a GTFS file"
+msgid "Edit Route patterns for public transport"
 msgstr ""
 
-msgid "Select GTFS file (stops.txt)"
+msgid "Route Patterns"
 msgstr ""
 
-msgid "File \"{0}\" does not exist"
+msgid "Overview"
 msgstr ""
 
-msgid "IOException \"{0}\" occurred"
+msgid "Itinerary"
 msgstr ""
 
-msgid ""
-"There exists no dataset. Try to download data from the server or open an OSM "
-"file."
+msgid "Stops"
 msgstr ""
 
-msgid "No data found"
+msgid "Meta"
 msgstr ""
 
-msgid "The GTFS file was empty."
+msgid "Existing route patterns:"
 msgstr ""
 
-msgid "Create Stops from GTFS"
+msgid "Reflect"
 msgstr ""
 
-msgid "GTFS-Stops"
+msgid "Required tags:"
 msgstr ""
 
-msgid "Type of stops to add"
+msgid "Common tags:"
 msgstr ""
 
-msgid "Time on your GPS device"
+msgid "Additional tags:"
 msgstr ""
 
-msgid "HH:MM:SS.sss"
+msgid "Add a new Tag"
 msgstr ""
 
-msgid "Time on your stopwatch"
+msgid "Name/Id"
 msgstr ""
 
-msgid "Time window"
+msgid "Find"
 msgstr ""
 
-msgid "seconds"
+msgid "Show"
 msgstr ""
 
-msgid "Move Threshold"
+msgid "Mark"
 msgstr ""
 
-msgid "Suggest Stops"
+msgid "Ref"
 msgstr ""
 
-msgid "Find"
+msgid "Stops are possible on the"
 msgstr ""
 
-msgid "Show"
+msgid "right hand side"
 msgstr ""
 
-msgid "Mark"
+msgid "left hand side"
 msgstr ""
 
-msgid "Catch"
+msgid "Maximum distance from route"
 msgstr ""
 
-msgid "Join"
+msgid "Suggest Stops"
 msgstr ""
 
-msgid "Public Transport: Join GTFS stops"
+msgid "Create Stops from GPX ..."
 msgstr ""
 
-msgid "State"
+msgid "Create Stops from a GPX file"
 msgstr ""
 
-msgid "[incomplete]"
+msgid "Select GPX file"
 msgstr ""
 
-msgid "[empty way]"
+msgid "The GPX file contained no tracks or waypoints."
 msgstr ""
 
-msgid "[ID] {0}"
+msgid "moved"
 msgstr ""
 
-msgid "[gap]"
+msgid "added"
 msgstr ""
 
-msgid "Route patterns ..."
+msgid "Public Transport: Enable GTFSStops"
 msgstr ""
 
-msgid "Edit Route patterns for public transport"
+msgid "Public Transport: Catch GTFS stops"
 msgstr ""
 
-msgid "Route Patterns"
+msgid "skipped"
 msgstr ""
 
-msgid "Overview"
+msgid "Public Transport: Disable GTFS"
 msgstr ""
 
-msgid "Itinerary"
+msgid "Public Transport: Join GTFS stops"
 msgstr ""
 
-msgid "Stops"
+msgid "Public Transport: Change stop type"
 msgstr ""
 
-msgid "Meta"
+msgid "Public Transport: Add track stop"
 msgstr ""
 
-msgid "Existing route patterns:"
+msgid "Public Transport: Delete track stop"
 msgstr ""
 
-msgid "Reflect"
+msgid "Public Transport: Detach track stop list"
 msgstr ""
 
-msgid "Required tags:"
+msgid "Public Transport: Edit track stop list"
 msgstr ""
 
-msgid "Common tags:"
+msgid "Public Transport: Relocate nodes in track stoplist"
 msgstr ""
 
-msgid "Additional tags:"
+msgid "Public Transport: sort track stop list"
 msgstr ""
 
-msgid "Add a new Tag"
+msgid "Public Transport: Suggest stops"
 msgstr ""
 
-msgid "Name/Id"
+msgid "Public Transport: Detach waypoints"
 msgstr ""
 
-msgid "Ref"
+msgid "Public Transport: Disable waypoints"
 msgstr ""
 
-msgid "Stops are possible on the"
+msgid "Public Transport: Enable waypoints"
 msgstr ""
 
-msgid "right hand side"
+msgid "Public Transport: Edit waypoint name"
 msgstr ""
 
-msgid "left hand side"
+msgid "rail"
 msgstr ""
 
-msgid "Maximum distance from route"
+msgid "Can''t parse a time from this string."
 msgstr ""
 
-msgid " [ID] {0}"
+msgid "Invalid value"
 msgstr ""
 
-msgid "Public Transport: Change stop type"
+msgid "Create Stops from GTFS"
 msgstr ""
 
-msgid "Create Stops from GPX ..."
+msgid "GTFS-Stops"
 msgstr ""
 
-msgid "Create Stops from a GPX file"
+msgid "Type of stops to add"
 msgstr ""
 
-msgid "Select GPX file"
+msgid "Time on your GPS device"
 msgstr ""
 
-msgid "The GPX file contained no tracks or waypoints."
+msgid "HH:MM:SS.sss"
 msgstr ""
 
-msgid "Create Stops from GPX"
+msgid "Time on your stopwatch"
 msgstr ""
 
-msgid "Tracks in this GPX file:"
+msgid "Time window"
 msgstr ""
 
-msgid "Detach"
+msgid "seconds"
 msgstr ""
 
-msgid "implicit"
+msgid "Move Threshold"
 msgstr ""
 
-msgid ""
-"The GPX file doesn''t contain valid trackpoints. Please use a GPX file that "
-"has trackpoints."
+msgid "Catch"
 msgstr ""
 
-msgid "GPX File Trouble"
+msgid "Join"
 msgstr ""
 
-msgid "unnamed"
+msgid "Create Stops from GPX"
 msgstr ""
 
-msgid "Public Transport: Add track stop"
+msgid "Tracks in this GPX file:"
 msgstr ""
 
-msgid "Public Transport: Delete track stop"
+msgid "Detach"
 msgstr ""
 
-msgid "Public Transport: Detach track stop list"
+msgid "implicit"
 msgstr ""
 
-msgid "Public Transport: Edit track stop list"
+msgid "State"
 msgstr ""
 
-msgid "Public Transport: Relocate nodes in track stoplist"
+msgid "[incomplete]"
 msgstr ""
 
-msgid "Public Transport: sort track stop list"
+msgid "[empty way]"
 msgstr ""
 
-msgid "Public Transport: Suggest stops"
+msgid "[gap]"
 msgstr ""
 
 msgid "Stopname"
 msgstr ""
 
-msgid "Public Transport: Detach waypoints"
+msgid " [ID] {0}"
 msgstr ""
 
-msgid "Public Transport: Disable waypoints"
+msgid ""
+"The GPX file doesn''t contain valid trackpoints. Please use a GPX file that "
+"has trackpoints."
 msgstr ""
 
-msgid "Public Transport: Enable waypoints"
+msgid "GPX File Trouble"
 msgstr ""
 
-msgid "Public Transport: Edit waypoint name"
+msgid "unnamed"
 msgstr ""
 
 msgid "Distance between stops"
@@ -33709,6 +33790,9 @@ msgstr ""
 msgid "JOSM Tag Editor Plugin"
 msgstr ""
 
+msgid "Presets"
+msgstr ""
+
 msgid "Abort tag editing and close dialog"
 msgstr ""
 
@@ -35634,6 +35718,26 @@ msgid_plural "Overwrite ''{0}'' tags {1} from {2} with new value ''{3}''?"
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Download from Sophox API"
+msgstr ""
+
+msgid ""
+"Find places of education at least 2km, and at most 3km from the center of "
+"the selection"
+msgstr ""
+
+msgid "Show/hide Sophox snippet list"
+msgstr ""
+
+msgid "help"
+msgstr ""
+
+msgid "Server: "
+msgstr ""
+
+msgid "Wikidata+OSM server"
+msgstr ""
+
 msgid "Search Wikidata items"
 msgstr ""
 
@@ -35707,26 +35811,6 @@ msgid ""
 "objects"
 msgstr ""
 
-msgid "Download from Wikosm API"
-msgstr ""
-
-msgid ""
-"Find places of education at least 2km, and at most 3km from the center of "
-"the selection"
-msgstr ""
-
-msgid "Show/hide Wikosm snippet list"
-msgstr ""
-
-msgid "help"
-msgstr ""
-
-msgid "Server: "
-msgstr ""
-
-msgid "Wikidata+OSM server"
-msgstr ""
-
 msgid "The Ultimate WMS Super-speed Turbo Challenge II"
 msgstr ""
 
diff --git a/i18n/po/id.po b/i18n/po/id.po
index 9ba8a4c..20db94d 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-10-30 03:38+0100\n"
-"PO-Revision-Date: 2016-03-10 03:36+0000\n"
-"Last-Translator: Ezagren <ezagren at gmail.com>\n"
+"POT-Creation-Date: 2017-11-26 00:06+0100\n"
+"PO-Revision-Date: 2017-11-24 08:03+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-10-30 04:48+0000\n"
-"X-Generator: Launchpad (build 18493)\n"
+"X-Launchpad-Export-Date: 2017-11-26 04:49+0000\n"
+"X-Generator: Launchpad (build 18509)\n"
 "Language: id\n"
 "X-Language: id_ID\n"
 
@@ -57,7 +57,7 @@ msgid "Opening link not supported on current platform (''{0}'')"
 msgstr "Membuka tautan tidak dapat dilakukan pada platform ini (''{0}'')"
 
 msgid "Failed to save default preferences."
-msgstr ""
+msgstr "Gagal untuk menyimpan pengaturan bawaan"
 
 msgid "About"
 msgstr "Tentang"
@@ -108,7 +108,7 @@ msgid "Report bug"
 msgstr "Melaporkan bug"
 
 msgid "Failed to locate resource ''{0}''."
-msgstr ""
+msgstr "Gagal untuk mencari sumber \"{0}\"."
 
 msgid "Failed to load resource ''{0}'', error is {1}."
 msgstr "Gagal untuk mengupload sumber \"{0}\", kesalahan adalah {1}."
@@ -120,7 +120,9 @@ msgid_plural ""
 "You are about to launch {0} browser windows.<br>This may both clutter your "
 "screen with browser windows<br>and take some time to finish."
 msgstr[0] ""
-msgstr[1] ""
+"Anda akan menjalankan {0} jendela browser.<br>Hal ini mungkin akan "
+"mengacaukan tampilan layar jendela browser Anda<br> dan membutuhkan beberapa "
+"saat untuk menyelesaikannya."
 
 msgid "Continue"
 msgstr "Lanjutkan"
@@ -240,13 +242,13 @@ msgid "Please select at least three nodes."
 msgstr "Mohon pilih paling sedikit tiga node."
 
 msgid "Can not align a polygon. Abort."
-msgstr ""
+msgstr "Tidak dapat menyelaraskan poligon. Batalkan."
 
 msgid "Intersection of three or more ways can not be solved. Abort."
 msgstr "Persilangan lebih dari tiga jalan tak dapat diselesaikan. Aborsi."
 
 msgid "Two parallels ways found. Abort."
-msgstr ""
+msgstr "Dua garis paralel ditemukan. Batalkan."
 
 msgid "data"
 msgstr "data"
@@ -434,19 +436,22 @@ msgid "Delete relation?"
 msgstr "Hapus relasi?"
 
 msgid "Delete Layer"
-msgstr ""
+msgstr "Hapus layer"
 
 msgid "Delete the active layer. Does not delete the associated file."
-msgstr ""
+msgstr "Hapus layer aktif. Tidak termasuk menghapus file terkait."
 
-msgid "Toggle dialogs panel"
-msgstr "Mengatur panel dialog"
+msgid "Dialogs panel"
+msgstr "Panel dialog"
 
 msgid "Toggle dialogs panel, maximize mapview"
 msgstr "Mengatur panel dialog, memaksimalkan tampilan peta"
 
+msgid "Toggle dialogs panel"
+msgstr "Mengatur panel dialog"
+
 msgid "Distribute Nodes"
-msgstr ""
+msgstr "Mendistribusikan titik"
 
 msgid "Distribute the selected nodes to equal distances along a line."
 msgstr ""
@@ -465,7 +470,7 @@ msgid "Download data"
 msgstr "Download data"
 
 msgid "Download map data from a server of your choice"
-msgstr ""
+msgstr "Download data peta dari server pilihan Anda"
 
 msgid ""
 "<html>This action will require {0} individual<br>download requests. Do you "
@@ -475,13 +480,13 @@ msgstr ""
 "individu.Apakah Anda ingin<br>melanjutkan?</html>"
 
 msgid "Download notes in current view"
-msgstr ""
+msgstr "Download catatan di tampilan saat ini"
 
 msgid "Download in current view"
-msgstr ""
+msgstr "Download dalam tampilan saat ini"
 
 msgid "Download map data from the OSM server in current view"
-msgstr ""
+msgstr "Download data peta dari server OSM dalam tampilan saat ini"
 
 msgid "Download object..."
 msgstr "Download objek..."
@@ -499,7 +504,7 @@ msgid "Duplicate"
 msgstr "Duplikat"
 
 msgid "Duplicate selection."
-msgstr ""
+msgstr "Gandakan pilihan."
 
 msgid "Exit"
 msgstr "Keluar"
@@ -657,7 +662,7 @@ msgid "No intersection found. Nothing was changed."
 msgstr "Persimpangan tidak ditemukan. Tidak ada yang diubah."
 
 msgid "Move tags from ways to relations"
-msgstr ""
+msgstr "Pindahkan tags dari garis ke relasi"
 
 msgid "Reverting changes"
 msgstr "Mengembalikan perubahan"
@@ -857,6 +862,8 @@ msgid ""
 "Please select at least two nodes to merge or one node that is close to "
 "another node."
 msgstr ""
+"Harap pilih setidaknya dua titik untuk menggabungkan atau satu titik yang "
+"berdekatan dengan titik lainnya."
 
 msgid "Abort Merging"
 msgstr "Batalkan Penggabungan"
@@ -872,8 +879,7 @@ msgstr ""
 
 msgid "Merge {0} node"
 msgid_plural "Merge {0} nodes"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Gabungkan {0} titik"
 
 msgid "Merge selection"
 msgstr "Gabungkan yang terpilih"
@@ -989,7 +995,7 @@ msgid "Opening file ''{0}'' ..."
 msgstr "Membuka berkas \"{0}\" ..."
 
 msgid "Which tasks to perform?"
-msgstr ""
+msgstr "Tasks mana yang ingin dijalankan?"
 
 msgid "Ok"
 msgstr "Ok"
@@ -1242,13 +1248,13 @@ msgid "Download notes from the note search API"
 msgstr ""
 
 msgid "Search the OSM API for notes containing words:"
-msgstr ""
+msgstr "Cari OSM API untuk catatan yang mengandung kata-kata:"
 
 msgid "Search for notes"
-msgstr ""
+msgstr "Cari catatan"
 
 msgid "You must enter a search term"
-msgstr ""
+msgstr "Anda harus memasukan kondisi pencarian"
 
 msgid "Select All"
 msgstr "Pilih Semua"
@@ -1382,6 +1388,7 @@ msgstr "Pisahkan sebuah jalur pada node terpilih"
 
 msgid "Cannot split since another split operation is already in progress"
 msgstr ""
+"Tidak dapat memisahkan karena operasi pemisahan lainnya sedang berjalan"
 
 msgid ""
 "The current selection cannot be used for splitting - no node is selected."
@@ -1413,7 +1420,7 @@ msgid " [id: {0}]"
 msgstr " [id: {0}]"
 
 msgid "Segment {0}: {1}"
-msgstr ""
+msgstr "Segmen {0}: {1}"
 
 msgid "Search preset"
 msgstr "Cari Preset"
@@ -1425,7 +1432,7 @@ msgid "Search presets"
 msgstr "Cari preset"
 
 msgid "Discourage upload"
-msgstr ""
+msgstr "Membuang pengunggahan"
 
 msgid "UnGlue Ways"
 msgstr "Memisahkan titik/garis"
@@ -1485,22 +1492,22 @@ msgstr ""
 "salinan sendiri dan semua node akan dipilih."
 
 msgid "Existing node"
-msgstr ""
+msgstr "Titik yang ada"
 
 msgid "Both nodes"
-msgstr ""
+msgstr "Kedua titik"
 
 msgid "New node"
-msgstr ""
+msgstr "Titik baru"
 
 msgid "Tags / Memberships"
 msgstr ""
 
 msgid "Unglue"
-msgstr ""
+msgstr "Memisahkan"
 
 msgid "Where should the tags of the node be put?"
-msgstr ""
+msgstr "Dimana seharusnya tag dari titik ini diletakkan?"
 
 msgid "Where should the memberships of this node be put?"
 msgstr ""
@@ -1539,37 +1546,35 @@ msgstr ""
 
 msgid "Unglueing affected {0} relation: {1}"
 msgid_plural "Unglueing affected {0} relations: {1}"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Memisahkan relasi: {1} terdampak {0}"
 
 msgid "Ensure that the relation has not been broken!"
 msgid_plural "Ensure that the relations have not been broken!"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Pastikan relasi tidak rusak"
 
 msgid "Disconnect Node from Way"
-msgstr ""
+msgstr "Pisahkan titik dari garis"
 
 msgid "Disconnect nodes from a way they currently belong to"
-msgstr ""
+msgstr "Pisahkan titik dari garis dimana mereka berada sebelumnya"
 
 msgid "Select at least one node to be disconnected."
-msgstr ""
+msgstr "Pilih setidaknya dua titik untuk dipisahkan"
 
 msgid "Selected node cannot be disconnected from anything."
 msgid_plural "Selected nodes cannot be disconnected from anything."
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Titik terpilih tidak bisa dipisahkan dari apapun."
 
 msgid ""
 "The affected way would disappear after disconnecting the selected node."
 msgid_plural ""
 "The affected way would disappear after disconnecting the selected nodes."
 msgstr[0] ""
-msgstr[1] ""
+"Garis yang terpengaruh akan hilang setelah terputus dengan titik yang "
+"dipilih."
 
 msgid "Some irrelevant nodes have been removed from the selection"
-msgstr ""
+msgstr "Beberapa titik yang tidak relevan telah dihapus dari pemilihan"
 
 msgid "Undo"
 msgstr "Ulangi"
@@ -1662,13 +1667,13 @@ msgid "Nothing to upload. Get some data first."
 msgstr "Tidak ada yang dapat diupload. Ambil beberapa data terlebih dahulu."
 
 msgid "Upload note changes to server"
-msgstr ""
+msgstr "Upload perubahan catatan ke server"
 
 msgid "Upload notes"
-msgstr ""
+msgstr "Upload catatan"
 
 msgid "Uploading notes to server"
-msgstr ""
+msgstr "Mengunggah catatan ke server"
 
 msgid "Upload selection"
 msgstr "Upload pilihan"
@@ -1850,18 +1855,17 @@ msgid "Markers from {0}"
 msgstr "Penanda dari {0}"
 
 msgid "Download OSM Notes"
-msgstr ""
+msgstr "Download Catatan OSM"
 
 msgid "Downloading Notes"
-msgstr ""
+msgstr "Mengunduh Catatan"
 
 msgid "Notes"
 msgstr "Catatan"
 
 msgid "{0} note has been downloaded."
 msgid_plural "{0} notes have been downloaded."
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "{0} catatan telah diunduh"
 
 msgid ""
 "Since the download limit was {0}, there might be more notes to download."
@@ -1870,15 +1874,16 @@ msgstr ""
 msgid ""
 "Request a smaller area to make sure that all notes are being downloaded."
 msgstr ""
+"Minta area yang lebih kecil untuk memastikan seluruh catatan sedang diunduh"
 
 msgid "More notes to download"
-msgstr ""
+msgstr "Lebih banyak catatan untuk diunduh"
 
 msgid "Download OSM Notes within Bounds"
-msgstr ""
+msgstr "Download OSM Notes dengan Batas"
 
 msgid "Download OSM Note by ID"
-msgstr ""
+msgstr "Download OSM Note berdasarkan ID"
 
 msgid "Download Compressed OSM Change"
 msgstr "Download Perubahan OSM yang dikompresi"
@@ -1890,7 +1895,7 @@ msgid "Download Compressed OSM"
 msgstr "Download OSM yang dikompresi"
 
 msgid "Download OSM object by ID"
-msgstr ""
+msgstr "Download OSM object berdasarkan ID"
 
 msgid "Download OSM"
 msgstr "Unduh data OSM"
@@ -1937,7 +1942,7 @@ msgid "({0}/{1}) Loading parents of relation {2}"
 msgstr "({0}/{1}) Memuat parent hubungan {2}"
 
 msgid "Download session"
-msgstr ""
+msgstr "Download sesi"
 
 msgid "Download {0} of {1} ({2} left)"
 msgstr "Download {0} dari {1} {2} tersisa"
@@ -1993,25 +1998,25 @@ msgid "Error during download"
 msgstr "Kesalahan pada saat download"
 
 msgid "Add a new Note"
-msgstr ""
+msgstr "Tambahkan Note baru"
 
 msgid "Add note mode"
-msgstr ""
+msgstr "Tambahkan mode note"
 
 msgid "Click the location where you wish to create a new note"
-msgstr ""
+msgstr "Klik lokasi dimana Anda ingin membuat catatan baru"
 
 msgid "Create new note"
-msgstr ""
+msgstr "Buat note baru"
 
 msgid "Create note"
-msgstr ""
+msgstr "Buat note"
 
 msgid "Enter a detailed comment to create a note"
 msgstr ""
 
 msgid "You must enter a comment to create a new note"
-msgstr ""
+msgstr "Anda harus menambahkan komentar untuk membuat note"
 
 msgid "Delete Mode"
 msgstr "Modus Hapus"
@@ -2272,7 +2277,8 @@ msgid_plural ""
 "an error.\n"
 "Really move them?"
 msgstr[0] ""
-msgstr[1] ""
+"Anda memindahkan lebih dari {0} elemen. Memindahkan banyak elemen sering "
+"memunculkan error. Yakin ingin memindahkan?"
 
 msgid "Move elements"
 msgstr "Pindahkan elemen"
@@ -2377,10 +2383,10 @@ msgid "Confirmation"
 msgstr ""
 
 msgid "List of recent relations"
-msgstr ""
+msgstr "Daftar relasi terakhir"
 
 msgid "Open recent relation"
-msgstr ""
+msgstr "Buka relasi terakhir"
 
 msgid "Relation Editor: {0}"
 msgstr "Penyusun relasi: {0}"
@@ -2470,10 +2476,10 @@ msgid "MapCSS selector"
 msgstr ""
 
 msgid "Selection settings"
-msgstr ""
+msgstr "Pengaturan seleksi"
 
 msgid "Additional settings"
-msgstr ""
+msgstr "Pengaturan tambahan"
 
 msgid "Search syntax"
 msgstr ""
@@ -2482,7 +2488,7 @@ msgid "Invalid search expression"
 msgstr "Ekspresi pencarian tidak berlaku"
 
 msgid "Search by preset"
-msgstr ""
+msgstr "Cari berdasarkan preset"
 
 msgid "Filter"
 msgstr "Saring"
@@ -2506,7 +2512,7 @@ msgstr ""
 " {0}"
 
 msgid "Search hints"
-msgstr ""
+msgstr "Cari petunjuk"
 
 msgid "basics"
 msgstr "dasar-dasar"
@@ -2572,7 +2578,7 @@ msgid "objects"
 msgstr "Objek-objek"
 
 msgid "all nodes"
-msgstr ""
+msgstr "Seluruh titik"
 
 msgid "all ways"
 msgstr "seluruh way/garis"
@@ -2631,7 +2637,7 @@ msgid "closed ways with an area of 100 m²"
 msgstr "garis tertutup dengan area 100 m²"
 
 msgid "ways with a length of 200 m or more"
-msgstr ""
+msgstr "jalan dengan panjang lebih dari 200 meter atau lebih"
 
 msgid "state"
 msgstr "Provinsi"
@@ -2650,6 +2656,7 @@ msgstr "Seluruh objek yang tidak lengkap"
 
 msgid "all deleted objects (checkbox <b>{0}</b> must be enabled)"
 msgstr ""
+"Seluruh objek yang telah dihapus (checkbox <b>{0}<b> must be enabled)"
 
 msgid "related objects"
 msgstr "objek tekait"
@@ -2711,8 +2718,7 @@ msgstr "Mencari"
 
 msgid "Searching in {0} object"
 msgid_plural "Searching in {0} objects"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Mencari dalam {0} objek"
 
 msgid "Automatically truncating value of tag ''{0}'' on deleted object {1}"
 msgstr ""
@@ -2763,10 +2769,10 @@ msgid "Uploading modified notes"
 msgstr ""
 
 msgid "Note {0} failed: {1}"
-msgstr ""
+msgstr "Note{0} gagal:{1}"
 
 msgid "Notes failed to upload"
-msgstr ""
+msgstr "Notes gagal upload"
 
 msgid ""
 "The following are results of automatic validation. Try fixing these, but be "
@@ -2829,7 +2835,7 @@ msgid "Change relation {0}"
 msgstr "Ubah relasi {0}"
 
 msgid "Change nodes of {0}"
-msgstr ""
+msgstr "Perubahan titik dari {0}"
 
 msgid "Remove \"{0}\" for node ''{1}''"
 msgstr "Hapus \"{0}\" untuk node ''{1}''"
@@ -2851,8 +2857,7 @@ msgstr "Atur {0}={1} untuk relasi ''{2}''"
 
 msgid "Remove \"{0}\" for {1} object"
 msgid_plural "Remove \"{0}\" for {1} objects"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Hapus \"{0}\" untuk {1} objek"
 
 msgid "Set {0}={1} for {2} object"
 msgid_plural "Set {0}={1} for {2} objects"
@@ -2919,7 +2924,7 @@ msgid_plural "Purged {0} objects"
 msgstr[0] "Objek {0} diberikan"
 
 msgid "Removed nodes from {0}"
-msgstr ""
+msgstr "Hapus titik dari {0}"
 
 msgid "Rotate {0} node"
 msgid_plural "Rotate {0} nodes"
@@ -2931,8 +2936,7 @@ msgstr[0] "Skala {0} node/titik"
 
 msgid "Selected {0} object"
 msgid_plural "Selected {0} objects"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Pilih {0} objek"
 
 msgid "Sequence: {0}"
 msgstr "Urutan: {0}"
@@ -2960,8 +2964,7 @@ msgstr ""
 
 msgid "Split way {0} into {1} part"
 msgid_plural "Split way {0} into {1} parts"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Membagi garis {0} menjadi {1} bagian"
 
 msgid "Transform {0} node"
 msgid_plural "Transform {0} nodes"
@@ -3013,18 +3016,15 @@ msgstr "Menyelesaikan konflik dalam anggota relasi {0}"
 
 msgid "Resolve {0} tag conflict in node {1}"
 msgid_plural "Resolve {0} tag conflicts in node {1}"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Menyelesaikan {0} konflik tag pada node {1}"
 
 msgid "Resolve {0} tag conflict in way {1}"
 msgid_plural "Resolve {0} tag conflicts in way {1}"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Menyelesaikan {0} konflilk tag pada garis {1}"
 
 msgid "Resolve {0} tag conflict in relation {1}"
 msgid_plural "Resolve {0} tag conflicts in relation {1}"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Menyelesaikan {0} konflik tag pada relasi {1}"
 
 msgid "Resolve version conflict for node {0}"
 msgstr "Menyelesaikan konflik versi untuk node/titik {0}"
@@ -3070,10 +3070,10 @@ msgid "Do not apply changes"
 msgstr "Jangan terapkan perubahan"
 
 msgid "Please select which changes you want to apply."
-msgstr ""
+msgstr "Silakan pilih perubahan mana yang ingin diterapkan"
 
 msgid "Tags of "
-msgstr ""
+msgstr "Tag dari "
 
 msgid "Roles in relations referring to"
 msgstr "Peran dalam relasi yang merujuk kepada"
@@ -3088,7 +3088,7 @@ msgid "Illegal longitude value ''{0}''"
 msgstr "Nilai bujur tidak sah \"{0}\""
 
 msgid "Unable to delete temporary file {0}"
-msgstr ""
+msgstr "Tidak dapat menghapus temporary file {0}"
 
 msgid "Unable to set file non-readable {0}"
 msgstr ""
@@ -3246,22 +3246,22 @@ msgid "Unable to parse as coordinate value: ''{0}''"
 msgstr ""
 
 msgid "Date of imagery: {0}"
-msgstr ""
+msgstr "Tanggal citra: {0}"
 
 msgid "This imagery is marked as best in this region in other editors."
 msgstr ""
 
 msgid "{0} mirror server {1}"
-msgstr ""
+msgstr "{0} mirror server {1}"
 
 msgid "{0} mirror server"
-msgstr ""
+msgstr "{0} mirror server"
 
 msgid "Update default entries"
 msgstr ""
 
 msgid "Update imagery ''{0}''"
-msgstr ""
+msgstr "Perbarui citra \"{0}\""
 
 msgid "Drop old imagery ''{0}''"
 msgstr ""
@@ -3285,10 +3285,10 @@ msgid ""
 msgstr ""
 
 msgid "Select WMTS layer"
-msgstr ""
+msgstr "Pilih layer WMTS"
 
 msgid "Layer name"
-msgstr ""
+msgstr "Nama layer"
 
 msgid "Projection"
 msgstr "Proyeksi"
@@ -3310,6 +3310,8 @@ msgid ""
 "Can''t use layer {0} because no supported formats where found. Layer is "
 "available in formats: {1}"
 msgstr ""
+"Tidak dapat menggunakan layer {0} karena tidak ada format yang didukung. "
+"Layer tersedia dalam format: {1}"
 
 msgid ""
 "Only square tiles are supported. {0}x{1} returned by server for TileMatrix "
@@ -3385,7 +3387,7 @@ msgid "Merging data..."
 msgstr "Menggabungkan data..."
 
 msgid "Test ''{0}'' completed in {1}"
-msgstr ""
+msgstr "Test \"{0}\" selesai dalam {1}"
 
 msgid "incomplete"
 msgstr "tidak lengkap"
@@ -3444,8 +3446,7 @@ msgstr "Error pada filter"
 
 msgid "<p><b>{0}</b> object hidden"
 msgid_plural "<p><b>{0}</b> objects hidden"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "<p><b>{0}<b/> objek tersembunyi"
 
 msgid "<b>{0}</b> object disabled"
 msgid_plural "<b>{0}</b> objects disabled"
@@ -3596,7 +3597,7 @@ msgid "Range of numbers expected"
 msgstr "Jarak pada angka diharapkan"
 
 msgid "Unknown preset name: "
-msgstr ""
+msgstr "Nama preset tidak diketahui: "
 
 msgid "Failed to parse MapCSS selector"
 msgstr ""
@@ -3786,13 +3787,13 @@ msgid "Addresses"
 msgstr "Alamat"
 
 msgid "Checks for errors on addresses"
-msgstr ""
+msgstr "Memeriksa kesalahan pada alamat"
 
 msgid "Tag combinations"
-msgstr ""
+msgstr "Kombinasi tag"
 
 msgid "Checks for missing tag or suspicious combinations"
-msgstr ""
+msgstr "Periksa untuk missing tag atau suspicious combinations"
 
 msgid "Deprecated features"
 msgstr ""
@@ -3801,16 +3802,16 @@ msgid "Checks for deprecated features"
 msgstr ""
 
 msgid "Geometry"
-msgstr ""
+msgstr "Geometri"
 
 msgid "Checks for geometry errors"
-msgstr ""
+msgstr "Memeriksa kesalahan geometri"
 
 msgid "Highways"
 msgstr "Jalan Raya"
 
 msgid "Checks for errors on highways"
-msgstr ""
+msgstr "Memerika  error pada highway"
 
 msgid "Multiple values"
 msgstr ""
@@ -3828,13 +3829,13 @@ msgid "Religion"
 msgstr "Agama"
 
 msgid "Checks for errors on religious objects"
-msgstr ""
+msgstr "Memeriksa kesalahan pada objek keagamaan"
 
 msgid "Relations"
 msgstr "Relasi"
 
 msgid "Checks for errors on relations"
-msgstr ""
+msgstr "Memeriksa kesalahan pada relasi"
 
 msgid "Territories"
 msgstr ""
@@ -3846,13 +3847,13 @@ msgid "Unnecessary tags"
 msgstr ""
 
 msgid "Checks for unnecessary tags"
-msgstr ""
+msgstr "Memeriksa tag tidak dibutuhkan"
 
 msgid "Wikipedia"
 msgstr "Wikipedia"
 
 msgid "Checks for wrong wikipedia tags"
-msgstr ""
+msgstr "Memeriksa kesalahan tag wikipedia"
 
 msgid "UTM projection (''+proj=utm'') requires ''+zone=...'' parameter."
 msgstr ""
@@ -3945,6 +3946,7 @@ msgstr "Deskripsi"
 
 msgid "Converts coordinates from one coordinate reference system to another."
 msgstr ""
+"Konversi koordinat dari satu sistem referensi koordinat ke yang lainnya."
 
 msgid "Options"
 msgstr ""
@@ -3962,7 +3964,7 @@ msgid "Switch order of output coordinates (east/north, lon/lat)"
 msgstr ""
 
 msgid "<crs>"
-msgstr ""
+msgstr "<crs>"
 
 msgid ""
 "The format for input and output coordinate reference system is similar to "
@@ -4068,7 +4070,7 @@ msgid "Running test {0}"
 msgstr "Melakukan tes {0}"
 
 msgid "E-mail address is invalid"
-msgstr ""
+msgstr "Alamat e-mail tidak valid"
 
 msgid "E-mail address contains an invalid username: {0}"
 msgstr ""
@@ -4080,7 +4082,7 @@ msgid "Email validator"
 msgstr ""
 
 msgid "URL is invalid"
-msgstr ""
+msgstr "URL tidak valid"
 
 msgid "URL contains an invalid protocol: {0}"
 msgstr ""
@@ -4130,9 +4132,12 @@ msgstr ""
 msgid ""
 "Way contains more than {0} nodes. It should be replaced by a multipolygon"
 msgstr ""
+"Garis mengandung lebih dari {0} nodes. Seharusnya dibuat sebagai sebuah "
+"multipoligon."
 
 msgid "Way contains more than {0} nodes. It should be split or simplified"
 msgstr ""
+"Garis mengandung lebih dari {0} nodes. Sebaiknya dipisah atau disederhanakan."
 
 msgid "Barriers and entrances"
 msgstr ""
@@ -4162,7 +4167,7 @@ msgid "Reversed coastline"
 msgstr "Garis pantai yang berubah arah"
 
 msgid "invalid coastline"
-msgstr ""
+msgstr "garis pantai tidak valid"
 
 msgid "Conditional Keys"
 msgstr ""
@@ -4186,7 +4191,7 @@ msgid "Crossing ways"
 msgstr "garis yang bersimpangan/berpotongan"
 
 msgid "Crossing buildings"
-msgstr ""
+msgstr "Bangunan bersinggungan"
 
 msgid "Crossing waterways"
 msgstr "Melewati sungai"
@@ -4195,10 +4200,10 @@ msgid "Crossing waterway/highway"
 msgstr "Pertemuan sungai dengan jalan"
 
 msgid "Crossing boundaries"
-msgstr ""
+msgstr "Batas bersinggungan"
 
 msgid "Crossing barriers"
-msgstr ""
+msgstr "Pembatas berpotongan"
 
 msgid "Self crossing"
 msgstr ""
@@ -4304,7 +4309,7 @@ msgid "Missing pedestrian crossing information"
 msgstr ""
 
 msgid "Unknown country code: {0}"
-msgstr ""
+msgstr "Kode negara tidak diketahui: {0}"
 
 msgid "Unknown source:maxspeed context: {0}"
 msgstr ""
@@ -4316,7 +4321,7 @@ msgid "Checks for errors in internet-related tags."
 msgstr ""
 
 msgid "''{0}'': {1}"
-msgstr ""
+msgstr "\"{0}\": {1}"
 
 msgid "Lane tags"
 msgstr ""
@@ -4328,7 +4333,7 @@ msgid "Number of {0} greater than {1}"
 msgstr ""
 
 msgid "{0}+{1}"
-msgstr ""
+msgstr "{0}+{1}"
 
 msgid "Number of lane dependent values inconsistent"
 msgstr ""
@@ -4550,7 +4555,7 @@ msgid "Missing power tower/pole within power line"
 msgstr "kehilangan menara listrik/tiang dalam jaringan listrik"
 
 msgid "Public Transport Route"
-msgstr ""
+msgstr "Rute Transportasi Publik"
 
 msgid "Route relation contains a ''{0}'' role"
 msgstr ""
@@ -4568,7 +4573,7 @@ msgid "Relation checker"
 msgstr "Hubungan pemeriksa"
 
 msgid "Checks for errors in relations."
-msgstr ""
+msgstr "Memeriksa kesalahan dalam relasi."
 
 msgid ""
 "Route scheme is unspecified. Add {0} ({1}=public_transport; {2}=legacy)"
@@ -4680,7 +4685,7 @@ msgid "Property values contain HTML entity"
 msgstr "Nilai properti mengandung  HTML"
 
 msgid "Misspelled property key"
-msgstr ""
+msgstr "Salah pengejaan properti key"
 
 msgid "Key ''{0}'' looks like ''{1}''."
 msgstr ""
@@ -4692,7 +4697,7 @@ msgid "Key ''{0}'' not in presets."
 msgstr "Key \"{0}\" tidak ada  pada preset"
 
 msgid "Misspelled property value"
-msgstr ""
+msgstr "Salah pengejaan nilai properti"
 
 msgid "Value ''{0}'' for key ''{1}'' looks like ''{2}''."
 msgstr ""
@@ -4722,7 +4727,7 @@ msgid "TagChecker source"
 msgstr "Sumber tagchecker"
 
 msgid "Data sources ({0})"
-msgstr ""
+msgstr "Sumber Data ({0})"
 
 msgid "Check property values."
 msgstr "Periksa value properti"
@@ -4738,7 +4743,7 @@ msgstr ""
 "Lihat pada titik atau garis dengan FIXME pada beberapa nilai properti"
 
 msgid "Fix tags"
-msgstr ""
+msgstr "Memperbaiki tags"
 
 msgid "Could not find element type"
 msgstr "Tidak dapat menemukan tipe elemen"
@@ -4845,19 +4850,19 @@ msgid "waterway type {0}"
 msgstr "tipe jalur air {0}"
 
 msgid "boundary type {0}"
-msgstr ""
+msgstr "tipe batas {0}"
 
 msgid "area"
 msgstr "area"
 
 msgid "Unconnected highways"
-msgstr ""
+msgstr "Jalan tidak terhubung"
 
 msgid "Unconnected railways"
-msgstr ""
+msgstr "Jalur kereta tidak terhubung"
 
 msgid "Unconnected waterways"
-msgstr ""
+msgstr "Jalan air tidak terhubung"
 
 msgid "Unconnected natural lands and landuses"
 msgstr ""
@@ -4953,13 +4958,13 @@ msgid "Reversed land: land not on left side"
 msgstr "Daratan terbalik: daratan tidak berada di sisi kiri"
 
 msgid "Show this dialog again the next time"
-msgstr ""
+msgstr "Munculkan dialog ini lagi pada saat berikutnya"
 
 msgid "Do not show again (this operation)"
-msgstr ""
+msgstr "Jangan munculkan lagi (operasi ini)"
 
 msgid "Do not show again (this session)"
-msgstr ""
+msgstr "Jangan munculkan lagi (sesi ini)"
 
 msgid "Do not show again (remembers choice)"
 msgstr "Jangan tunjukkan lagi (ingat pilihan)"
@@ -5051,30 +5056,34 @@ msgstr "Pergeseran citra"
 
 msgctxt "menu"
 msgid "Imagery"
-msgstr ""
+msgstr "Citra Satelit"
 
 msgctxt "layer"
 msgid "Offset"
 msgstr "Offset"
 
 msgid "Outdated Java version"
-msgstr ""
+msgstr "Versi Java belum diperbarui"
 
 msgid "Update Java"
-msgstr ""
+msgstr "Perbarui Java"
 
 msgid "You are running version {0} of Java."
-msgstr ""
+msgstr "Anda menjalankan Java versi {0}"
 
 msgid ""
 "This version is no longer supported by {0} since {1} and is not recommended "
 "for use."
 msgstr ""
+"Versi ini tidak lagi didukung oleh {0} sejak {1} dan tidak direkomendasikan "
+"untuk digunakan."
 
 msgid ""
 "JOSM will soon stop working with this version; we highly recommend you to "
 "update to Java {0}."
 msgstr ""
+"JOSM tidak akan bekerja lagi pada versi ini; kami sangat merekomendasikan "
+"anda untuk memperbarui Java {0}."
 
 msgid ""
 "You may face critical Java bugs; we highly recommend you to update to Java "
@@ -5082,7 +5091,7 @@ msgid ""
 msgstr ""
 
 msgid "Would you like to update now ?"
-msgstr ""
+msgstr "Apakah Anda ingin memperbarui sekarang?"
 
 msgid "Starting file watcher"
 msgstr ""
@@ -5124,7 +5133,7 @@ msgid "usage"
 msgstr "penggunaan"
 
 msgid "commands"
-msgstr ""
+msgstr "perintah"
 
 msgid "launch JOSM (default, performed when no command is specified)"
 msgstr ""
@@ -5134,6 +5143,8 @@ msgstr ""
 
 msgid "convert coordinates from one coordinate reference system to another"
 msgstr ""
+"Konversi koordinat dari satu sistem referensi koordinat ke sistem koordinat "
+"lainnya."
 
 msgid ""
 "For details on the {0} and {1} commands, run them with the {2} option."
@@ -5190,7 +5201,7 @@ msgid "Print debugging messages to console"
 msgstr ""
 
 msgid "Skip loading plugins"
-msgstr ""
+msgstr "Lewati memuat plugins"
 
 msgid "Disable access to the given resource(s), separated by comma"
 msgstr ""
@@ -5263,7 +5274,7 @@ msgid "Log level is at {0} ({1}, {2})"
 msgstr ""
 
 msgid "Plugin loading skipped"
-msgstr ""
+msgstr "Memuat plugin dilewati"
 
 msgid "Enabled detailed debug level (trace)"
 msgstr ""
@@ -5338,10 +5349,10 @@ msgstr ""
 "mengembalikan data?"
 
 msgid "Change proxy settings"
-msgstr ""
+msgstr "Ubah pengaturan proxy"
 
 msgid "Proxy errors occurred"
-msgstr ""
+msgstr "Terjadi kesalahan proxy"
 
 msgid ""
 "JOSM tried to access the following resources:<br>{0}but <b>failed</b> to do "
@@ -5350,7 +5361,7 @@ msgid ""
 msgstr ""
 
 msgid "Network errors occurred"
-msgstr ""
+msgstr "Terjadi kesalahan jaringan"
 
 msgid ""
 "JOSM tried to access the following resources:<br>{0}but <b>failed</b> to do "
@@ -5358,14 +5369,17 @@ msgid ""
 "missing proxy configuration.<br>Would you like to change your proxy settings "
 "now?"
 msgstr ""
+"JOSM mencoba untuk mengakses resources berikut:<b>{0}tapi <b>gagal</b> untuk "
+"melakukannya, karena terjadi kesalahan berikut:<b>{1}Hal ini bisa disebabkan "
+"karena adanya kesalahan pengaturan proxy.<br>Apakah Anda ingin mengganti "
+"pengaturan proxy Anda sekarang?"
 
 msgid "You have {0} unread message."
 msgid_plural "You have {0} unread messages."
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Anda mempunyai {0} pesan belum terbaca."
 
 msgid "Click here to see your inbox."
-msgstr ""
+msgstr "Klik disini untuk melihat kotak masuk Anda."
 
 msgctxt "menu"
 msgid "File"
@@ -5431,13 +5445,13 @@ msgid "Toggles the visibility of the edit toolbar (i.e., the vertical tool)"
 msgstr "Matikan visibilitas dari edit toolbar. (contoh tool vertikal)"
 
 msgid "Preset preferences"
-msgstr ""
+msgstr "Preferensi preset"
 
 msgid "Click to open the tagging presets tab in the preferences"
 msgstr ""
 
 msgid "Imagery preferences"
-msgstr ""
+msgstr "Preferensi citra"
 
 msgid "Click to open the imagery tab in the preferences"
 msgstr ""
@@ -5550,10 +5564,10 @@ msgid "Username"
 msgstr "Username"
 
 msgid "Created date"
-msgstr ""
+msgstr "Tanggal pembuatan"
 
 msgid "Last change date"
-msgstr ""
+msgstr "Tanggal perubahan terakhir"
 
 msgid "Select note sorting method"
 msgstr ""
@@ -5571,19 +5585,21 @@ msgid " ({0})"
 msgstr " ({0})"
 
 msgid "<h2>Filter active: {0}</h2>"
-msgstr ""
+msgstr "<h2>Penyaringan aktif: {0}</h2>"
 
 msgid "</p><p>Click again on filter button to see all objects.</p></html>"
 msgstr ""
+"</p><p>Klik lagi pada tombol penyaringan untuk melihat seluruh "
+"objek</p></html>"
 
 msgid "Enlarge"
-msgstr ""
+msgstr "Memperbesar"
 
 msgid "Shrink"
-msgstr ""
+msgstr "Memperkecil"
 
 msgid "Show downloaded area"
-msgstr ""
+msgstr "Tampilkan area yang sudah diunduh"
 
 msgid ""
 "<html>Please select a <strong>range of OSM tiles</strong> at a given zoom "
@@ -5630,6 +5646,8 @@ msgstr ""
 msgid ""
 "Opening the bug report failed. Please report manually using this website:"
 msgstr ""
+"Gagal membuka laporan bug. Silakan laporkan secara manual menggunakan "
+"website ini:"
 
 msgid "You have encountered a bug in JOSM"
 msgstr "Anda mengalami bug di JOSM"
@@ -5644,13 +5662,13 @@ msgid "Debug information"
 msgstr ""
 
 msgid "Manually report at:"
-msgstr ""
+msgstr "Lapor manual di:"
 
 msgid "Is JOSM up to date?"
-msgstr ""
+msgstr "Apakah JOSM sudah versi terbaru?"
 
 msgid "Send bug report"
-msgstr ""
+msgstr "Kirim laporan bug"
 
 msgid ""
 "If you are running the latest version of JOSM and the plugins, please file a "
@@ -5670,7 +5688,7 @@ msgid "Suppress further error dialogs for this session."
 msgstr "Menekan dialog kesalahan lebih lanjut untuk sesi ini."
 
 msgid "Ignore this error."
-msgstr ""
+msgstr "Abaikan kesalahan ini."
 
 msgid "Include the system status report."
 msgstr ""
@@ -5682,19 +5700,21 @@ msgid "Include all stack traces."
 msgstr ""
 
 msgid "Your current version of JOSM is {0}"
-msgstr ""
+msgstr "Versi JOSM Anda saat ini adalah {0}"
 
 msgid "JOSM is searching for updates..."
-msgstr ""
+msgstr "JOSM sedang mencari pembaharuan"
 
 msgid "An error occured while checking if your JOSM instance is up to date."
 msgstr ""
 
 msgid "JOSM is up to date."
-msgstr ""
+msgstr "JOSM sudah versi terbaru"
 
 msgid "JOSM is out of date. The current version is {0}. Try updating JOSM."
 msgstr ""
+"JOSM sudah kadaluarsa. Versi saat ini adalah {0}. Cobalah untuk perbarui "
+"JOSM."
 
 msgid ""
 "Before you file a bug report make sure you have updated to the latest "
@@ -5702,7 +5722,7 @@ msgid ""
 msgstr ""
 
 msgid "Update JOSM"
-msgstr ""
+msgstr "Perbarui JOSM"
 
 msgid "Conflict background: no conflict"
 msgstr "Latar belakang konflik:tidak konflik"
@@ -5862,7 +5882,7 @@ msgstr ""
 "Salin elemen yang saya pilih ke akhir daftar elemen yang digabungkan."
 
 msgid "> before"
-msgstr ""
+msgstr "> sebelum"
 
 msgid ""
 "Copy my selected elements before the first selected element in the list of "
@@ -5872,7 +5892,7 @@ msgstr ""
 "digabungkan."
 
 msgid "> after"
-msgstr ""
+msgstr "> setelah"
 
 msgid ""
 "Copy my selected elements after the first selected element in the list of "
@@ -5882,7 +5902,7 @@ msgstr ""
 "digabungkan."
 
 msgid "< top"
-msgstr ""
+msgstr "< top"
 
 msgid ""
 "Copy their selected element to the start of the list of merged elements."
@@ -5890,7 +5910,7 @@ msgstr ""
 "Salin elemen yang mereka pilih ke awal dari daftar elemen yang digabungkan."
 
 msgid "< bottom"
-msgstr ""
+msgstr "< bawah"
 
 msgid ""
 "Copy their selected elements to the end of the list of merged elements."
@@ -5898,7 +5918,7 @@ msgstr ""
 "Salin elemen yang mereka pilih ke akhir daftar elemen yang digabungkan."
 
 msgid "< before"
-msgstr ""
+msgstr "< sebelum"
 
 msgid ""
 "Copy their selected elements before the first selected element in the list "
@@ -5908,7 +5928,7 @@ msgstr ""
 "digabungkan."
 
 msgid "< after"
-msgstr ""
+msgstr "< setelah"
 
 msgid ""
 "Copy their selected element after the first selected element in the list of "
@@ -6213,7 +6233,11 @@ msgid_plural ""
 "may have unwanted tags.<br/>If you want to continue, you are shown a dialog "
 "to fix the conflicting tags.<br/><br/>Do you want to continue?"
 msgstr[0] ""
-msgstr[1] ""
+"Anda akan menggabungkan {0} objek, namun terjadi konflik pada tag-tag "
+"berikut yang digunakan :<br/>{1}Jika objek digabungkan, kemungkinan hasilnya "
+"akan memiliki tag yang tidak diinginkan.<br/>Jika Anda ingin melanjutkan, "
+"Anda akan diperlihatkan kotak dialog untuk memperbaik tag yang terjadi "
+"konflik.<br/><br/>Apakah Anda ingin melanjutkan?"
 
 msgid "<i>missing</i>"
 msgstr "<i>menghilang</i>"
@@ -6242,6 +6266,7 @@ msgstr "Nilai ''{0}'' yang akan digantikan dengan key ''{1}''"
 msgid ""
 "All numeric values sumed as ''{0}'' are going to be applied for key ''{1}''"
 msgstr ""
+"Seluruh nilai numerik berjumlah {0} akan diterapkan untuk key \"{1}\""
 
 msgid "The key ''{0}'' and all its values are going to be removed"
 msgstr "key ''{0}'' dan semua nilai akan dihapus"
@@ -6521,11 +6546,10 @@ msgstr "Selasaikan konfllik"
 
 msgid "Conflict: {0} unresolved"
 msgid_plural "Conflicts: {0} unresolved"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Konflik: {0} belum terselesaikan"
 
 msgid "Rel.:{0} / Ways:{1} / Nodes:{2}"
-msgstr ""
+msgstr "Rel.:{0} / Ways:{1} / Nodes:{2}"
 
 msgid "Resolve"
 msgstr "Selesaikan"
@@ -6534,16 +6558,17 @@ msgid "Open a merge dialog of all selected items in the list above."
 msgstr "Buka gabungan dialog dari semua item yang dipilih pada daftar diatas"
 
 msgid "Resolve to my versions"
-msgstr ""
+msgstr "Selesaikan ke versi saya"
 
 msgid "Resolves all unresolved conflicts to ''my'' version"
-msgstr ""
+msgstr "Selesaikan semua konflik yang belum terselesaikan ke versi \"saya\""
 
 msgid "Resolve to their versions"
-msgstr ""
+msgstr "Selesaikan ke versi mereka"
 
 msgid "Resolves all unresolved conflicts to ''their'' version"
 msgstr ""
+"Selesaikan semua konflik yang belum terselesaikan ke versi \"mereka\""
 
 msgid "There was {0} conflict detected."
 msgid_plural "There were {0} conflicts detected."
@@ -6596,13 +6621,11 @@ msgstr "Menyelesaikan konflik untuk ''{0}''"
 
 msgid "Please confirm to remove <strong>{0} object</strong>."
 msgid_plural "Please confirm to remove <strong>{0} objects</strong>."
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Konfirmasi untuk menghapus <strong>{0} objek</strong>"
 
 msgid "{0} relation is affected."
 msgid_plural "{0} relations are affected."
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "{0} relasi terpengaruh."
 
 msgid "Deleting {0} object"
 msgid_plural "Deleting {0} objects"
@@ -6789,6 +6812,9 @@ msgstr "Koordinat: "
 msgid "Coordinates (projected): "
 msgstr "Koordinat (proyek): "
 
+msgid "UTM Zone"
+msgstr "Zona UTM"
+
 msgid "Part of: "
 msgstr "Bagian dari: "
 
@@ -6855,8 +6881,7 @@ msgstr ""
 
 msgid "{0} user last edited the selection:"
 msgid_plural "{0} users last edited the selection:"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "{0} pengguna terakhir mengedit seleksi:"
 
 msgid "mapcss"
 msgstr "mapcss"
@@ -6865,11 +6890,13 @@ msgid "unknown"
 msgstr "tidak diketahui"
 
 msgid "Enter the coordinates for the new node."
-msgstr ""
+msgstr "Masukkan koordinat untuk node baru."
 
 msgid ""
 "You can separate longitude and latitude with space, comma or semicolon."
 msgstr ""
+"Anda dapat memisahkan garis bujur dan garis lintang dengan spasi, koma atau "
+"titik koma."
 
 msgid ""
 "Use positive numbers or N, E characters to indicate North or East cardinal "
@@ -6882,23 +6909,27 @@ msgid ""
 msgstr ""
 
 msgid "Coordinate value can be in one of three formats:"
-msgstr ""
+msgstr "Nilai koordinat dapat dalam satu dari tiga format berikut:"
 
 msgid "<i>degrees</i><tt>°</tt>"
-msgstr ""
+msgstr "<i>derajat</i><tt>°</tt>"
 
 msgid "<i>degrees</i><tt>°</tt> <i>minutes</i><tt>'</tt>"
-msgstr ""
+msgstr "<i>derajat</i><tt>°</tt> <i>menit</i><tt>'</tt>"
 
 msgid ""
 "<i>degrees</i><tt>°</tt> <i>minutes</i><tt>'</tt> "
 "<i>seconds</i><tt>&quot</tt>"
 msgstr ""
+"<i>derajat</i><tt>°</tt> <i>menit</i><tt>'</tt> "
+"<i>detik</i><tt>&quot</tt>"
 
 msgid ""
 "Symbols <tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
 "<tt>″</tt> are optional."
 msgstr ""
+"Simbol <tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
+"<tt>″</tt> opsional."
 
 msgid ""
 "You can also use the syntax <tt>lat=\"...\" lon=\"...\"</tt> or "
@@ -6906,7 +6937,7 @@ msgid ""
 msgstr ""
 
 msgid "Some examples:"
-msgstr ""
+msgstr "Contohnya seperti:"
 
 msgid "Projected coordinates:"
 msgstr "Koordinat Proyeksi"
@@ -6947,20 +6978,22 @@ msgid "this layer is not currently active (click to activate)"
 msgstr "Layer ini yang saat ini tidak aktif (klik untuk aktivasi)"
 
 msgid "scale follows native resolution of this layer"
-msgstr ""
+msgstr "skala mengikuti resolusi asli dari layer ini"
 
 msgid ""
 "scale follows native resolution of another layer (click to set this layer)"
 msgstr ""
+"skala mengikuti resolusi asli dari layer lain (klik untuk mengatur lapisan "
+"ini)"
 
 msgid "this layer has no native resolution"
-msgstr ""
+msgstr "layer ini tidak memiliki skala asli"
 
 msgid "Information about layer"
 msgstr "Infomasi tentang layer"
 
 msgid "Map paint preferences"
-msgstr ""
+msgstr "Preferensi Gambar Peta"
 
 msgid "Map Paint Styles"
 msgstr "Gaya Gambar Peta"
@@ -7038,64 +7071,64 @@ msgid "No"
 msgstr "Tidak"
 
 msgid "Style settings"
-msgstr ""
+msgstr "Pengaturan gaya"
 
 msgid "Customize the style"
-msgstr ""
+msgstr "Kustumisasi gaya"
 
 msgid "Search menu items"
-msgstr ""
+msgstr "Cari menu item"
 
 msgid "Mini map"
-msgstr ""
+msgstr "Peta mini"
 
 msgid "Displays a small map of the current edit location"
-msgstr ""
+msgstr "Tampillkan peta mini dari lokasi edit saat ini"
 
 msgid "List of notes"
-msgstr ""
+msgstr "Daftar catatan"
 
 msgid "Add comment"
-msgstr ""
+msgstr "Tambahkan komentar"
 
 msgid "Comment"
 msgstr "Komentar"
 
 msgid "Comment on note"
-msgstr ""
+msgstr "Komentar pada catatan"
 
 msgid "Add comment to note:"
-msgstr ""
+msgstr "Tambahkan komentar pada catatan:"
 
 msgid "Close note"
-msgstr ""
+msgstr "Tutup catatan"
 
 msgid "Close note with message:"
-msgstr ""
+msgstr "Tutup catatan dengan pesan:"
 
 msgid "Create a new note"
-msgstr ""
+msgstr "Buat catatan baru"
 
 msgid "Create"
 msgstr "Buat"
 
 msgid "Reopen note"
-msgstr ""
+msgstr "Buka ulang catatan"
 
 msgid "Reopen"
-msgstr ""
+msgstr "Buka ulang"
 
 msgid "Reopen note with message:"
-msgstr ""
+msgstr "Buka ulang catatan dengan pesan:"
 
 msgid "Sort notes"
-msgstr ""
+msgstr "Sortir catatan"
 
 msgid "Sort"
 msgstr "sortir"
 
 msgid "Open the note in an external browser"
-msgstr ""
+msgstr "Buka catatan di browser eksternal"
 
 msgid "Object type:"
 msgstr "Tipe objek:"
@@ -7114,7 +7147,7 @@ msgid "Enter the ID of the object that should be downloaded"
 msgstr "Masukan objek ID yang akan didownload"
 
 msgid "Object IDs can be separated by comma or space, for instance: {0}"
-msgstr ""
+msgstr "Object ID dapat dipisahkan koma atau spasi, sebagai contoh: {0}"
 
 msgid ""
 "In mixed mode, specify objects like this: {0}<br/>({1} stands for "
@@ -7128,6 +7161,8 @@ msgid ""
 "Invalid ID list specified\n"
 "Cannot continue."
 msgstr ""
+"Daftar ID yang tidak valid\n"
+"Tidak dapat melanjutkan."
 
 msgid "Open a list of all relations."
 msgstr "Buka daftar dari semua relasi"
@@ -7242,7 +7277,7 @@ msgid "Validation results"
 msgstr "Hasil validasi"
 
 msgid "Lookup"
-msgstr ""
+msgstr "Mencari"
 
 msgid "Looks up the selected primitives in the error list."
 msgstr ""
@@ -7296,10 +7331,10 @@ msgid "Display the objects created, updated, and deleted by the changeset"
 msgstr "Memperlihatkan objek yang dibuat, diperbarui, dan dihapus oleh set"
 
 msgid "Discussion"
-msgstr ""
+msgstr "Diskusi"
 
 msgid "Display the public discussion around this changeset"
-msgstr ""
+msgstr "Tampilkan diskusi publik di sekitar changeset ini"
 
 msgid "Changeset Management Dialog"
 msgstr "Pengaturan dialog perubahan set"
@@ -7336,7 +7371,7 @@ msgid "Download the content of the selected changesets from the server"
 msgstr "Unduh isi set perubahan yang dipilih dari server"
 
 msgid "Download changed objects"
-msgstr ""
+msgstr "Unduh objek yang sudah diubah"
 
 msgid ""
 "Download the current version of the changed objects in the selected "
@@ -7404,7 +7439,7 @@ msgid "Download objects"
 msgstr "Download objek"
 
 msgid "Download the current version of the selected objects"
-msgstr ""
+msgstr "Unduh versi saat ini dari objek yang dipilih"
 
 msgid "Select in layer"
 msgstr "Tunjukkan pada layer"
@@ -7470,7 +7505,7 @@ msgid "Update the changeset from the OSM server"
 msgstr "Perbarui changset dalam detil tampilan panel dari cache lokal"
 
 msgid "View changeset"
-msgstr ""
+msgstr "Tampilkan changeset"
 
 msgid ""
 "Select the primitives in the content of this changeset in the current data "
@@ -7491,10 +7526,10 @@ msgstr ""
 "Perbesar konten/isi objek  dari set perubahan pada data layer saat ini"
 
 msgid "Update changeset discussion"
-msgstr ""
+msgstr "Perbarui diskusi changeset"
 
 msgid "Update the changeset discussion from the OSM server"
-msgstr ""
+msgstr "Perbarui diskusi changeset dari server OSM"
 
 msgid "Date"
 msgstr "Tanggal"
@@ -7811,10 +7846,10 @@ msgid "Copy {1} of {0}"
 msgstr "Menyalin {1} dari {0}"
 
 msgid "Change visibility of the selected layer."
-msgstr ""
+msgstr "Ubah visibilitas dari layer terpilih."
 
 msgid "Show layer"
-msgstr ""
+msgstr "Munculkan layer"
 
 msgid "Adjust opacity of the layer."
 msgstr "mengatur tingkat transparan dari layer"
@@ -7823,22 +7858,22 @@ msgid "Opacity"
 msgstr "Tingkat transparan"
 
 msgid "Adjust gamma value of the layer."
-msgstr ""
+msgstr "Atur nilai gamma dari layer."
 
 msgid "Gamma"
-msgstr ""
+msgstr "Gamma"
 
 msgid "Adjust sharpness/blur value of the layer."
-msgstr ""
+msgstr "Atur nilai ketajaman/keburaman dari layer."
 
 msgid "Sharpness"
-msgstr ""
+msgstr "Ketajaman"
 
 msgid "Adjust colorfulness of the layer."
-msgstr ""
+msgstr "Atur tingkat pewarnaan dari layer."
 
 msgid "Colorfulness"
-msgstr ""
+msgstr "Tingkat pewarnaan"
 
 msgid "Color"
 msgstr "Warna"
@@ -7874,26 +7909,24 @@ msgid "Discardable key: background"
 msgstr ""
 
 msgid "{0} ''{1}''"
-msgstr ""
+msgstr "{0} ''{1}''"
 
 msgid "{0} different"
 msgid_plural "{0} different"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "{0} berbeda"
 
 msgid ", {0} unset"
 msgid_plural ", {0} unset"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] ", {0} belum diatur"
 
 msgid "Select objects for which to change tags."
 msgstr ""
 
 msgid "Tags/Memberships"
-msgstr ""
+msgstr "Tags/Memberships"
 
 msgid "Tags for selected objects."
-msgstr ""
+msgstr "*Tags* untuk objek yang dipilih."
 
 msgid "<different>"
 msgstr "<perbedaan>"
@@ -7905,19 +7938,19 @@ msgid "Position"
 msgstr "Posisi"
 
 msgid "Tag filter"
-msgstr ""
+msgstr "Penyaringan tag"
 
 msgid "Objects: {2} / Tags: {0} / Memberships: {1}"
-msgstr ""
+msgstr "Objek: {2} / Tags: {0} / Memberships: {1}"
 
 msgid "Tags: {0} / Memberships: {1}"
-msgstr ""
+msgstr "Tags: {0} / Memberships: {1}"
 
 msgid "Delete the selected key in all objects"
 msgstr "Hapus key yang dipilih pada semua objek"
 
 msgid "Delete Tags"
-msgstr ""
+msgstr "Hapus *Tags*"
 
 msgid "Change relation"
 msgstr "Ubah relasi"
@@ -7938,19 +7971,19 @@ msgid "Edit the value of the selected key for all objects"
 msgstr "Edit value pada key yang dipilih untuk semua objek"
 
 msgid "Edit Tags"
-msgstr ""
+msgstr "Ubah Tag"
 
 msgid "Go to OSM wiki for tag help"
-msgstr ""
+msgstr "Baca OSM wiki untuk bantuan tag"
 
 msgid "Launch browser with wiki help for selected object"
 msgstr "Luncurkan browser dengan bantuan wiki untuk objek yang dipilih"
 
 msgid "Go to Taginfo"
-msgstr ""
+msgstr "Pergi ke Taginfo"
 
 msgid "Launch browser with Taginfo statistics for selected object"
-msgstr ""
+msgstr "Jalankan browser dengan statistik Taginfo untuk objek terpilih"
 
 msgid "Paste Value"
 msgstr "Tempel Value"
@@ -7965,19 +7998,19 @@ msgid "Copy the value of the selected tag to clipboard"
 msgstr "salin nilai dari tag yang dipilih pada data layer"
 
 msgid "Copy selected Key(s)/Value(s)"
-msgstr ""
+msgstr "Copy Key(s)/Value(s) terpilih"
 
 msgid "Copy the key and value of the selected tag(s) to clipboard"
-msgstr ""
+msgstr "Copy key dan value dari tag terpilih ke clipboard"
 
 msgid "Copy all Keys/Values"
 msgstr "Salin semua key/value"
 
 msgid "Copy the key and value of all the tags to clipboard"
-msgstr ""
+msgstr "Copy key dan value dari seluruh tag ke clipboard"
 
 msgid "Copy Tags"
-msgstr ""
+msgstr "Copy Tags"
 
 msgid "Search Key/Value/Type"
 msgstr "Cari Key/Value/Tipe"
@@ -8016,7 +8049,7 @@ msgid "An empty value deletes the tag."
 msgstr "Menghapus value kosong pada tag"
 
 msgid "You changed the key from ''{0}'' to ''{1}''."
-msgstr ""
+msgstr "Anda mengubah key dari ''{0}'' ke ''{1}''."
 
 msgid "Change properties of up to {0} object"
 msgid_plural "Change properties of up to {0} objects"
@@ -8042,7 +8075,7 @@ msgid "Set number of recently added tags"
 msgstr "Mengatur jumlah tag/label yang baru ditambahkan"
 
 msgid "Remember last used tags after a restart"
-msgstr ""
+msgstr "Ingat tag terakhir digunakan setelah restart"
 
 msgid "Recent tags with existing key"
 msgstr ""
@@ -8069,7 +8102,7 @@ msgid "to apply first suggestion"
 msgstr ""
 
 msgid "to add without closing the dialog"
-msgstr ""
+msgstr "untuk menambahkan tanpa menutup dialog"
 
 msgid "to add first suggestion without closing the dialog"
 msgstr ""
@@ -8096,10 +8129,10 @@ msgid "The key ''{0}'' is already used"
 msgstr "Key \"{0}\" yang sudah digunakan"
 
 msgid "Ignore key ''{0}''"
-msgstr ""
+msgstr "Abaikan key ''{0}''"
 
 msgid "Ignore tag ''{0}''"
-msgstr ""
+msgstr "Abaikan *tag* \"{0}\""
 
 msgid "Edit ignore list"
 msgstr ""
@@ -8246,7 +8279,7 @@ msgid "Refers to"
 msgstr "menunjukkan ke"
 
 msgid "Cannot add {0} since it is not part of dataset"
-msgstr ""
+msgstr "Tidak dapat menambahkan {0} karena bukan bagian dari dataset"
 
 msgid "Download referring relations"
 msgstr "download relasi yang ditunjuk"
@@ -8382,18 +8415,20 @@ msgid "Refresh"
 msgstr "Perbaharui"
 
 msgid "Yes, discard changes and reload"
-msgstr ""
+msgstr "Ya, buang perubahan dan muat ulang"
 
 msgid "Click to discard the changes and reload data from layer"
-msgstr ""
+msgstr "Klik untuk buang perubahan dan muat ulang dari layer"
 
 msgid ""
 "<html>You have unsaved changes in this editor window.<br><br>Do you want to "
 "discard these changes and reload data from layer?</html>"
 msgstr ""
+"<html>Anda belum menyimpan perubahan di jendela editor.<br><br>Apakah Anda "
+"ingin buang perubahan dan muat ulang dari layer?</html>"
 
 msgid "Click to close window"
-msgstr ""
+msgstr "Klik untuk menutup jendela"
 
 msgid "No, continue editing"
 msgstr "Tidak, lanjutkan mengedit"
@@ -8402,9 +8437,11 @@ msgid ""
 "<html>Relation has been deleted outside editor.<br><br>Do you want to close "
 "this window?</html>"
 msgstr ""
+"<html>Relasi telah dihapus di luar editor.<br><br>Apakah Anda ingin menutup "
+"jendela ini?</html>"
 
 msgid "Deleted relation"
-msgstr ""
+msgstr "Relasi terhapus"
 
 msgid "Relation Editor: Remove"
 msgstr "Editor relasi:Hapus"
@@ -8455,7 +8492,7 @@ msgstr ""
 "coba lagi.</html>"
 
 msgid "Select the currently edited relation"
-msgstr ""
+msgstr "Pilih relasi yang diedit saat ini"
 
 msgid "Select objects for selected relation members"
 msgstr "memilih objek yang dipilih  relasi member"
@@ -8519,7 +8556,7 @@ msgid "way is not connected to previous or next relation member"
 msgstr "way/garis terhubung dengan relasi member sebelum atau selanjutnya"
 
 msgid "{0} - {1} ({2})"
-msgstr ""
+msgstr "{0} - {1} ({2})"
 
 msgid "Wrong number of arguments for bookmark"
 msgstr "Jumlah argumen untuk bookmark salah"
@@ -8625,10 +8662,10 @@ msgstr ""
 "dapat membuka secara manual dari Menu file atau toolbar.</html>"
 
 msgid "Zoom to downloaded data"
-msgstr ""
+msgstr "Perbesar untuk mengunduh data"
 
 msgid "Select to zoom to entire newly downloaded data."
-msgstr ""
+msgstr "Pilih untuk memperbesar seluruh data yang baru diunduh."
 
 msgid ""
 "Use left click&drag to select area, arrows or right mouse button to scroll "
@@ -8666,7 +8703,7 @@ msgid "Download referrers (parent relations and ways)"
 msgstr "Download referensi (parents relation and ways)"
 
 msgid "Download from OSM"
-msgstr ""
+msgstr "Unduh dari OSM"
 
 msgid "Data Sources and Types:"
 msgstr "Sumber data dan jenis:"
@@ -8706,21 +8743,23 @@ msgid "Download area ok, size probably acceptable to server"
 msgstr "Download sudah ok, ukuran mungkin akan diterima oleh server"
 
 msgid "Download from Overpass API"
-msgstr ""
+msgstr "Download dari Overpass API"
 
 msgid ""
 "Place your Overpass query below or generate one using the Overpass Turbo "
 "Query Wizard"
 msgstr ""
+"Tulis kueri Overpass ANda di bawah atau buat menggunakan Overpass Turbo "
+"Query Wizard"
 
 msgid "Build an Overpass query using the Overpass Turbo Query Wizard tool"
-msgstr ""
+msgstr "Buat sebuah kueri Overpass menggunakan Overpass Turbo Query Wizard"
 
 msgid "Query Wizard"
 msgstr ""
 
 msgid "Your saved queries:"
-msgstr ""
+msgstr "Kueri tersimpan:"
 
 msgid "Show/hide Overpass snippet list"
 msgstr ""
@@ -8732,9 +8771,11 @@ msgid ""
 "You entered an empty query. Do you want to download all data in this area "
 "instead?"
 msgstr ""
+"Anda memasukan kueri kosong. Apakah Anda ingin download seluruh data di area "
+"ini?"
 
 msgid "Download all data?"
-msgstr ""
+msgstr "Unduh semua data?"
 
 msgid "Add new snippet"
 msgstr ""
@@ -8746,19 +8787,19 @@ msgid "Edit selected snippet"
 msgstr ""
 
 msgid "Overpass Turbo Query Wizard"
-msgstr ""
+msgstr "Overpass Turbo Query Wizard"
 
 msgid "Build query"
-msgstr ""
+msgstr "Buat kueri"
 
 msgid "Build query and execute"
-msgstr ""
+msgstr "Buat kueri dan jalankan"
 
 msgid "Search :"
-msgstr ""
+msgstr "Cari :"
 
 msgid "The Overpass wizard could not parse the following query:"
-msgstr ""
+msgstr "Overpass wizard tidak dapat mengurai kueri berikut:"
 
 msgid "Parse error"
 msgstr ""
@@ -8773,22 +8814,22 @@ msgid ""
 msgstr ""
 
 msgid "For more detailed description see "
-msgstr ""
+msgstr "Untuk deskripsi detil lihat "
 
 msgid "<a href=\"{0}\">OSM Wiki</a>."
-msgstr ""
+msgstr "<a href=\"{0}\">OSM Wiki</a>."
 
 msgid "Hints"
-msgstr ""
+msgstr "Petunjuk"
 
 msgid "Download objects of a certain type."
-msgstr ""
+msgstr "Download objek untuk tipe tertentu."
 
 msgid "Download object by specifying a specific location. For example,"
-msgstr ""
+msgstr "Download objek berdasarkan lokasi spesifik. Sebagai contoh,"
 
 msgid "{0} all objects having {1} as attribute are downloaded."
-msgstr ""
+msgstr "{0} seluruh objek mempunyai {1} sebagai atribut terunduh."
 
 msgid ""
 "{0} all object with the corresponding key/value pair located around Berlin. "
@@ -8799,11 +8840,14 @@ msgstr ""
 msgid ""
 "{0} all objects within the current selection that have {1} as attribute."
 msgstr ""
+"{0} seluruh objek dalam pilihan saat ini yang memiliki {1} sebagai atribut."
 
 msgid ""
 "Instead of <i>location</i> any valid place name can be used like address, "
 "city, etc."
 msgstr ""
+"Daripada <i>location</i> nama tempat apapun yang valid dapat digunakan, "
+"seperti alamat, kota, dan sebagainya."
 
 msgid ""
 "<span>Download objects that have some concrete key/value pair, only the key "
@@ -8851,10 +8895,10 @@ msgid "Querying name server ..."
 msgstr "query nama server ..."
 
 msgid "Error occured with query ''{0}'': ''{1}''"
-msgstr ""
+msgstr "Kesalahan terjadi dengan kueri ''{0}'': ''{1}''"
 
 msgid "Name server returned invalid data. Please try again."
-msgstr ""
+msgstr "Nama server mengembalikan data yang tidak valid. Silakan coba lagi."
 
 msgid "Bad response"
 msgstr ""
@@ -8872,28 +8916,28 @@ msgid "history"
 msgstr "Sejarah"
 
 msgid "Please select an item first"
-msgstr ""
+msgstr "Pertama silahkan pilih item"
 
 msgid "Edit item"
-msgstr ""
+msgstr "Ubah item"
 
 msgid "Add snippet"
 msgstr ""
 
 msgid "Query cannot be empty"
-msgstr ""
+msgstr "Kueri tidak boleh kosong"
 
 msgid "This name can be used for the item"
-msgstr ""
+msgstr "Nama ini dapat digunakan untuk item"
 
 msgid "Item with this name already exists"
-msgstr ""
+msgstr "Item dengan nama ini sudah ada"
 
 msgid "The item cannot be created with provided name"
-msgstr ""
+msgstr "Item tidak dapat dibuat dengan nama yang tersedia"
 
 msgid "The item cannot be created with an empty query"
-msgstr ""
+msgstr "Item tidak dapat dibuat dengan kueri kosong"
 
 msgid "JOSM Help Browser"
 msgstr "JOSM membutuhkan pencarian"
@@ -9056,10 +9100,10 @@ msgid "Open a history browser with the history of this node"
 msgstr "membuka riwayat pencarian dengan riwayat dari node/titik"
 
 msgid "View changeset in web browser"
-msgstr ""
+msgstr "Lihat changeset di browser internet"
 
 msgid "Open {0}"
-msgstr ""
+msgstr "Buka {0}"
 
 msgid "Way {0}"
 msgstr "way/garis {0}"
@@ -9071,22 +9115,22 @@ msgid "Object"
 msgstr "Objek"
 
 msgid "Open Changeset Manager"
-msgstr ""
+msgstr "Buka Changeset Manager"
 
 msgid "Changeset comment"
-msgstr ""
+msgstr "Komentar changeset"
 
 msgid "Changeset source"
-msgstr ""
+msgstr "Sumber changeset"
 
 msgid "Imagery used"
-msgstr ""
+msgstr "Citra satelit yang digunakan"
 
 msgid "<b>Source</b>:"
-msgstr ""
+msgstr "<b>Sumber</b>:"
 
 msgid "<b>Imagery</b>:"
-msgstr ""
+msgstr "<b>Citra</b>:"
 
 msgid ""
 "<html>Version <strong>{0}</strong> currently edited in layer ''{1}''</html>"
@@ -9100,11 +9144,10 @@ msgstr ""
 
 msgid "This changeset has {0} comment"
 msgid_plural "This changeset has {0} comments"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Changeset ini memiliki {0} komentar"
 
 msgid "Changeset"
-msgstr ""
+msgstr "Changeset"
 
 msgid "Changeset info"
 msgstr "Info set perubahan"
@@ -9116,13 +9159,13 @@ msgid "Show changeset {0}"
 msgstr "menunjukkan set perubahan {0}"
 
 msgid "User info"
-msgstr ""
+msgstr "Informasi pengguna"
 
 msgid "Launch browser with information about the user"
-msgstr ""
+msgstr "Jalankan browser dengan informasi tentang pengguna"
 
 msgid "Show user {0}"
-msgstr ""
+msgstr "Tunjukan user {0}"
 
 msgid "Ver"
 msgstr "Ver"
@@ -9134,7 +9177,7 @@ msgid "B"
 msgstr "B"
 
 msgid "Editor"
-msgstr ""
+msgstr "Editor"
 
 msgid ""
 "Failed to update primitive with id {0} because current edit layer is null"
@@ -9235,14 +9278,19 @@ msgid ""
 msgstr ""
 
 msgid "Check \"Upload\" to upload the changes to the OSM server."
-msgstr ""
+msgstr "Cek \"Upload\" untuk mengunggah perubahan ke server OSM."
 
 msgid "Check \"Save\" to save the layer to the file specified on the left."
 msgstr ""
 
-msgid "I would like someone to review my edits."
+msgid ""
+"A background upload is already in progress. Kindly wait for it to finish "
+"before uploading new changes"
 msgstr ""
 
+msgid "I would like someone to review my edits."
+msgstr "Saya ingin seseorang untuk memeriksa perubahan yang saya buat"
+
 msgid "Provide a brief comment for the changes you are uploading:"
 msgstr "Berikan komentar singkat untuk perubahan yang Anda unggah:"
 
@@ -9250,13 +9298,13 @@ msgid "Enter an upload comment"
 msgstr "Masukan komentar unggah"
 
 msgid "Specify the data source for the changes"
-msgstr ""
+msgstr "Menentukan sumber data untuk perubahan"
 
 msgid "obtain from current layers"
-msgstr ""
+msgstr "Dapatkan dari layer sekarang"
 
 msgid "Enter a source"
-msgstr ""
+msgstr "Masukan sumber"
 
 msgid "Changeset id:"
 msgstr "Id changeset:"
@@ -9521,7 +9569,7 @@ msgid "Unsaved changes - Save/Upload before deleting?"
 msgstr "Perubahan tidak tersimpan - Simpan/Unggah sebelum dihapus?"
 
 msgid "Unsaved changes - Save/Upload before restarting?"
-msgstr ""
+msgstr "Perubahan belum disimpan - Simpang/Unggah sebelum mengulang kembali?"
 
 msgid "Uploading and saving modified layers ..."
 msgstr "Mengunggah dan menyimpan lapisan yang termodifikasi..."
@@ -9582,10 +9630,11 @@ msgstr ""
 "Keluar dari JOSM tanpa menyimpan. Perubahan yang tidak disimpan akan hilang."
 
 msgid "Restart now!"
-msgstr ""
+msgstr "Mengulang kembali sekarang!"
 
 msgid "Restart JOSM without saving. Unsaved changes are lost."
 msgstr ""
+"Mengulang kembali JOSM tanpa menyimpan. Perubahan yang belum disimpan hilang."
 
 msgid "Delete now!"
 msgstr "Hapus sekarang!"
@@ -9607,6 +9656,8 @@ msgstr ""
 
 msgid "Restart JOSM with saving. Unsaved changes are uploaded and/or saved."
 msgstr ""
+"Mengulang kembali JOSM dengan menyimpan. Perubahan yang beum disimpan sudah "
+"diunggah dan/atau disimpan."
 
 msgid "Perform actions before deleting"
 msgstr "Melakukan tindakan sebelum menghapus"
@@ -9757,7 +9808,7 @@ msgid "Illegal chunk size"
 msgstr "Ukuran potongan yang ilegal"
 
 msgid "{0}={1}"
-msgstr ""
+msgstr "{0}={1}"
 
 msgid ""
 "<html>The following changeset tag contains an empty "
@@ -9769,7 +9820,7 @@ msgstr[0] ""
 msgstr[1] ""
 
 msgid "Empty metadata"
-msgstr ""
+msgstr "Metadata kosong"
 
 msgid "Cancel the upload and resume editing"
 msgstr "Batalkan unggah dan lanjutkan editing"
@@ -9781,6 +9832,7 @@ msgid ""
 "Object ''{0}'' is already deleted on the server. Skipping this object and "
 "retrying to upload."
 msgstr ""
+"Objek \"{0}\" telah dihapus di server. Lewati objek ini dan coba upload lagi."
 
 msgid "Preparing objects to upload ..."
 msgstr "mempersiapkan objek untuk mengupload ..."
@@ -9919,7 +9971,7 @@ msgstr ""
 "Pengecualian: {0}"
 
 msgid "Upload successful!"
-msgstr ""
+msgstr "Unggah berhasil!"
 
 msgid ""
 "<html>Mark modified objects <strong>from the current selection</strong> to "
@@ -10300,6 +10352,8 @@ msgid ""
 "Aerial imagery \"{0}\" might be misaligned. Please check its offset using "
 "GPS tracks!"
 msgstr ""
+"Foto udara \"{0}\" bisa saja bergeser. Silakan periksa kembali pergeserannya "
+"menggunakan trek GPS!"
 
 msgid "http://wiki.openstreetmap.org/wiki/Using_Imagery"
 msgstr "http://wiki.openstreetmap.org/wiki/Using_Imagery"
@@ -10308,7 +10362,7 @@ msgid "Details..."
 msgstr "Perincian..."
 
 msgid "Do not show this message again"
-msgstr ""
+msgstr "Jangan tampilkan pesan ini lagi"
 
 msgid "Hide this message and never show it again"
 msgstr "Sembunyikan pesan ini dan jangan pernah munculkan lagi"
@@ -10328,13 +10382,13 @@ msgid "Unable to delete old backup file {0}"
 msgstr "Tidak dapat menghapus berkas cadangan yang lama {0}"
 
 msgid "Your work has been saved automatically."
-msgstr ""
+msgstr "Pekerjaan anda sudah disimpan secara otomatis."
 
 msgid "Restoring files"
 msgstr "Mengembalikan file"
 
 msgid "Unable to delete backup file {0}"
-msgstr ""
+msgstr "Tidak dapat menghapus file cadangan {0}"
 
 msgid "Unable to delete PID file {0}"
 msgstr ""
@@ -10389,10 +10443,10 @@ msgid "Id"
 msgstr "ID"
 
 msgid "Min. zoom"
-msgstr ""
+msgstr "Perbesaran minimal"
 
 msgid "Max. zoom"
-msgstr ""
+msgstr "Perbesaran maksimal"
 
 msgid "Unsupported imagery type: {0}"
 msgstr ""
@@ -10404,7 +10458,7 @@ msgid "Jump to next marker"
 msgstr "Lompat ke penanda selanjutnya"
 
 msgid "Previous marker"
-msgstr ""
+msgstr "Penanda sebelumnya"
 
 msgid "Jump to previous marker"
 msgstr "Lompat ke penanda sebelumnya"
@@ -10416,14 +10470,17 @@ msgid "The layer {0} does not support the new projection {1}."
 msgstr ""
 
 msgid "Supported projections are: {0}"
-msgstr ""
+msgstr "Proyeksi yang didukung adalah: {0}"
 
 msgid "Change the projection again or remove the layer."
-msgstr ""
+msgstr "Ubah proyeksi lagi atau hapus layer."
 
 msgid "Save Layer"
 msgstr "Simpan Layer"
 
+msgid "Trying to set a read only data layer as edit layer"
+msgstr ""
+
 msgid "{0} note"
 msgid_plural "{0} notes"
 msgstr[0] ""
@@ -10436,7 +10493,7 @@ msgid "Total notes:"
 msgstr ""
 
 msgid "Changes need uploading?"
-msgstr ""
+msgstr "Perubahan perlu diunggah?"
 
 msgid "Save Note file"
 msgstr ""
@@ -10734,8 +10791,7 @@ msgstr[0] "{0} ditemukan untuk GPS ditandai"
 
 msgid "{0} has updated GPS data."
 msgid_plural "{0} have updated GPS data."
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "{0} telah memperbarui data GPS."
 
 msgid "Delete image file from disk"
 msgstr "Hapus file gambar dari disk"
@@ -10790,7 +10846,7 @@ msgid "Show first Image"
 msgstr ""
 
 msgid "Show last Image"
-msgstr ""
+msgstr "Tampilkan gambar terakhir"
 
 msgid "Center view"
 msgstr "Tampak tengah"
@@ -10812,6 +10868,8 @@ msgid ""
 "\n"
 "Speed: {0} km/h"
 msgstr ""
+"\n"
+"Kecepatan: {0} km/h"
 
 msgid ""
 "\n"
@@ -10971,10 +11029,10 @@ msgid "Direction"
 msgstr "Arah"
 
 msgid "Velocity, {0}"
-msgstr ""
+msgstr "Kecepatan, {0}"
 
 msgid "Audio files (*.wav, *.mp3, *.aac, *.aif, *.aiff)"
-msgstr ""
+msgstr "File audio (*.wav, *.mp3, *.aac, *.aif, *.aiff)"
 
 msgid "Import Audio"
 msgstr "Impor Audio"
@@ -11052,7 +11110,7 @@ msgid "Load all error tiles"
 msgstr ""
 
 msgid "Show errors"
-msgstr ""
+msgstr "Tunjukkan kesalahan"
 
 msgid "Change resolution"
 msgstr "Mengubah resolusi"
@@ -11132,7 +11190,7 @@ msgid "Select the map painting styles"
 msgstr "memilih model pewarnaan peta"
 
 msgid "Error - file not found: ''{0}''"
-msgstr ""
+msgstr "Error - file tidak ditemukan; \"{0}\""
 
 msgid "Expected integer number for option {0}, but got ''{1}''"
 msgstr ""
@@ -11194,7 +11252,7 @@ msgid ""
 msgstr ""
 
 msgid "Select the map scale"
-msgstr ""
+msgstr "Pilih skala peta"
 
 msgid ""
 "A value of 10000 denotes a scale of 1:10000 (1 cm on the map equals 100 m on "
@@ -11233,7 +11291,7 @@ msgid "Height of the target image, in pixel"
 msgstr ""
 
 msgid "Projection to use, default value ''{0}'' (web-Mercator)"
-msgstr ""
+msgstr "Proyeksi yang digunakan, nilai standar \"{0}\" (web-Mercator)"
 
 msgid ""
 "Maximum image width/height in pixel (''{0}'' means no limit), default value: "
@@ -11300,11 +11358,6 @@ msgstr ""
 msgid "Failed to parse Mappaint styles from ''{0}''. Error was: {1}"
 msgstr ""
 
-msgid ""
-"Detected deprecated ''{0}'' in ''{1}'' which will be removed shortly. Use "
-"''{2}'' instead."
-msgstr ""
-
 msgid "Failed to locate image ''{0}''"
 msgstr "Gagal untuk menemukan gambar \"{0}\""
 
@@ -12607,6 +12660,9 @@ msgstr "Tampilkan splash screen pada startup"
 msgid "Show object ID in selection lists"
 msgstr "Tampilkan objek ID pada daftar pilihan"
 
+msgid "Show node coordinates in selection lists"
+msgstr ""
+
 msgid "Show localized name in selection lists"
 msgstr "Tampilkan penempatan nama pada daftar pilihan"
 
@@ -12755,7 +12811,7 @@ msgid "1. Enter getCapabilities URL"
 msgstr ""
 
 msgid "2. Enter name for this layer"
-msgstr ""
+msgstr "2. Masukkan nama untuk layer ini"
 
 msgid "{0} cache, total cache size: {1} bytes"
 msgstr ""
@@ -13037,7 +13093,7 @@ msgstr ""
 "{1}</table></html>"
 
 msgid "Sort presets menu alphabetically"
-msgstr ""
+msgstr "Urutkan menu berdasarkan abjad"
 
 msgid "Tagging Presets"
 msgstr "Tagging presets"
@@ -13167,16 +13223,16 @@ msgid "Configure the list of sites where plugins are downloaded from"
 msgstr "mengkonfigurasi daftar dari situs plugin yang didownload dari"
 
 msgid "Load from list..."
-msgstr ""
+msgstr "Muat dari daftar..."
 
 msgid "Load plugins from a list of plugins"
-msgstr ""
+msgstr "Muat plugins dari daftar plugins"
 
 msgid "Disable all other plugins"
-msgstr ""
+msgstr "Menonaktifkan semua *plugin* lainnya"
 
 msgid "Enter a list of plugins you want to download."
-msgstr ""
+msgstr "Masukan daftar *plugins* yang ingin anda unduh."
 
 msgid ""
 "You should add one plugin id per line, version information is ignored."
@@ -13186,10 +13242,10 @@ msgid "You can copy+paste the list of a status report here."
 msgstr ""
 
 msgid "Load plugins from list"
-msgstr ""
+msgstr "Muat plugins dari daftar"
 
 msgid "The following plugins were not found. Continue anyway?"
-msgstr ""
+msgstr "Plugins berikut tidak ditemukan. Tetap lanjutkan?"
 
 msgid "Add JOSM Plugin description URL."
 msgstr "Tambahkan deskripsi URL JOSM plugin"
@@ -13409,9 +13465,6 @@ msgstr "Sistem Geodetik UTM"
 msgid "UTM"
 msgstr "UTM"
 
-msgid "UTM Zone"
-msgstr "Zona UTM"
-
 msgid "North"
 msgstr "Utara"
 
@@ -13449,7 +13502,7 @@ msgid "Enable remote control"
 msgstr "memperbolehkan remote kontrol digunakan"
 
 msgid "Enable HTTPS support"
-msgstr ""
+msgstr "Aktifkan HTTPS support"
 
 msgid "Install..."
 msgstr ""
@@ -13468,7 +13521,7 @@ msgid "Certificate:"
 msgstr ""
 
 msgid "Certificate has been successfully installed."
-msgstr ""
+msgstr "Sertifikat telah sukses dipasang."
 
 msgid "Certificate is already installed. Nothing to do."
 msgstr ""
@@ -13574,10 +13627,10 @@ msgid "Failed to save OSM credentials to credential manager."
 msgstr ""
 
 msgid "Periodically check for new messages"
-msgstr ""
+msgstr "Periksa pesan baru secara periodik"
 
 msgid "Check interval (minutes):"
-msgstr ""
+msgstr "Periksa interval (menit):"
 
 msgid "Max age for closed notes (days):"
 msgstr ""
@@ -13640,13 +13693,13 @@ msgid "Please enter the OSM API URL."
 msgstr "Mohon masukkan OSM API URL"
 
 msgid "Use Overpass server for object downloads"
-msgstr ""
+msgstr "Gunakan server Overpass untuk mengunduh objek"
 
 msgid "Overpass server: "
-msgstr ""
+msgstr "Server Overpass: "
 
 msgid "Overpass server"
-msgstr ""
+msgstr "Server Overpass"
 
 msgid "Proxy settings"
 msgstr "Pengaturan proxy"
@@ -13865,6 +13918,7 @@ msgstr ""
 msgid ""
 "The preset <i>{0}</i> cannot be applied since the selection is unsuitable!"
 msgstr ""
+"Preset <i>{0}</i> tidak dapat diterapkan karena pilihan tidak sesuai!"
 
 msgid "Change {0} object"
 msgid_plural "Change {0} objects"
@@ -13877,7 +13931,7 @@ msgid "Selection unsuitable!"
 msgstr "Pilihan cocok!"
 
 msgid "Change Tags"
-msgstr ""
+msgstr "Ubah Tag"
 
 msgid "Add or remove toolbar button"
 msgstr ""
@@ -13906,14 +13960,11 @@ msgstr "Preset sub elemen tanpa induk"
 msgid "Error parsing {0}: "
 msgstr "Kesalahan mengurai {0}: "
 
-msgid "Presets"
-msgstr "Presets"
-
 msgid "Search for objects by preset..."
-msgstr ""
+msgstr "Mencari objek berdasarkan preset..."
 
 msgid "Search for objects by preset"
-msgstr ""
+msgstr "Mencari objek berdasarkan preset"
 
 msgid "Show only applicable to selection"
 msgstr "Tampilkan hanya berlaku pada pilihan"
@@ -13922,7 +13973,7 @@ msgid "Search in tags"
 msgstr "Cari pada tag"
 
 msgid "Add toolbar button"
-msgstr ""
+msgstr "Tambahkan tombol toolbar"
 
 msgid "{0}:"
 msgstr "{0}:"
@@ -14308,13 +14359,13 @@ msgid "Unknown mode {0}."
 msgstr "Mode tidak diketahui {0}."
 
 msgid "get number of unread messages"
-msgstr ""
+msgstr "Dapatkan jumlah pesan yang belum dibaca"
 
 msgid "Message notifier"
-msgstr ""
+msgstr "Pemberitahu pesan"
 
 msgid "{0} not available (offline mode)"
-msgstr ""
+msgstr "{0} tidak tersedia (mode offline)"
 
 msgid "Fetching a package of nodes from ''{0}''"
 msgstr "Mengambil paket node/titik dari ''{0}''"
@@ -14355,10 +14406,10 @@ msgid "Null pointer exception, possibly some missing tags."
 msgstr "Pengecualian pointer nol, Kemungkinan ada tag yang hilang"
 
 msgid "OSM API"
-msgstr ""
+msgstr "OSM API"
 
 msgid "JOSM website"
-msgstr ""
+msgstr "Website JOSM"
 
 msgid "Unable to access ''{0}'': {1} not available (offline mode)"
 msgstr ""
@@ -14850,10 +14901,10 @@ msgid "Remote Control has been asked to load data from the API."
 msgstr "Remote kontrol meminta untuk memuat data dari API"
 
 msgid "The latitudes must be between {0} and {1}"
-msgstr ""
+msgstr "Garis lintang harus berada di antara {0} dan {1}"
 
 msgid "The longitudes must be between {0} and {1}"
-msgstr ""
+msgstr "Garis bujur harus berada di antara {0} dan {1}"
 
 msgid "The minima must be less than the maxima"
 msgstr ""
@@ -14862,7 +14913,7 @@ msgid "Remote Control has been asked to load the following data:"
 msgstr ""
 
 msgid "Loading data"
-msgstr ""
+msgstr "Memuat data"
 
 msgid ""
 "Remote Control has been asked to load objects (specified by their id) from "
@@ -15092,7 +15143,7 @@ msgstr ""
 "dinonaktifkan.<br>Hapus dari pengaturan?</html>"
 
 msgid "Plugin update"
-msgstr ""
+msgstr "Perbarui plugin"
 
 msgid ""
 "You updated your JOSM software.<br>To prevent problems the plugins should be "
@@ -15165,8 +15216,7 @@ msgstr[1] ""
 
 msgid "Click to continue without this plugin"
 msgid_plural "Click to continue without these plugins"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Klik untuk melanjutkan tanpa plugin ini"
 
 msgid ""
 "<html>Plugin {0} requires JOSM version {1}. The current JOSM version is "
@@ -15206,7 +15256,7 @@ msgid_plural "The plugins are not going to be loaded."
 msgstr[0] "Plugin ini tidak akan dimuat."
 
 msgid "Determining plugins to load..."
-msgstr ""
+msgstr "Menentukan plugin untuk dimuat..."
 
 msgid "Removing deprecated plugins..."
 msgstr "Menghapus plugin usang ..."
@@ -15232,10 +15282,10 @@ msgid "Plugin update failed"
 msgstr "Update plugin gagal"
 
 msgid "Failed to find plugin {0}"
-msgstr ""
+msgstr "Gagal mencari plugin {0}"
 
 msgid "Failed to download plugin information list"
-msgstr ""
+msgstr "Gagal download daftar informasi plugin"
 
 msgid "Disable plugin"
 msgstr "Plugin tidak memungkinkan"
@@ -15250,12 +15300,14 @@ msgid "Click to keep the plugin ''{0}''"
 msgstr "Klik untuk menyimpan plugin ''{0}''"
 
 msgid "Failed to delete outdated plugin ''{0}''."
-msgstr ""
+msgstr "Gagal menghapus plugin yang sudah usang \"{0}\""
 
 msgid ""
 "Failed to install already downloaded plugin ''{0}''. Skipping installation. "
 "JOSM is still going to load the old plugin version."
 msgstr ""
+"Gagal untuk memasang plugin yang sudah diunduh \"{0}\". Melewati pemasangan. "
+"JOSM tetap akan memuat plugin versi lama."
 
 msgid ""
 "Failed to install plugin ''{0}'' from temporary download file ''{1}''. {2}"
@@ -15267,10 +15319,10 @@ msgid ""
 msgstr ""
 
 msgid "Update plugin"
-msgstr ""
+msgstr "Perbarui plugin"
 
 msgid "Click to update the plugin ''{0}''"
-msgstr ""
+msgstr "Klik untuk perbarui plugin \"{0}\""
 
 msgid "Click to disable the plugin ''{0}''"
 msgstr "Klik menonaktifkan plugin ''{0}''"
@@ -15363,7 +15415,7 @@ msgid "Plugin list download error"
 msgstr ""
 
 msgid "JOSM failed to download plugin list:"
-msgstr ""
+msgstr "JOSM gagal mengunduh daftar plugin:"
 
 msgid "Details:"
 msgstr ""
@@ -15706,13 +15758,13 @@ msgstr ""
 "objek ini.<br><br>Pesan kesalahan:<br>{0}</html>"
 
 msgid "latitude"
-msgstr ""
+msgstr "Garis lintang"
 
 msgid "URL does not contain valid {0}"
 msgstr ""
 
 msgid "longitude"
-msgstr ""
+msgstr "Garus bujur"
 
 msgid "zoom"
 msgstr ""
@@ -15757,6 +15809,10 @@ msgid ""
 "http://forum.openstreetmap.org/viewtopic.php?id=25677).\n"
 "Currently you have {1,number,#}MB memory allocated for JOSM"
 msgstr ""
+"Untuk menambahkan layer lain Anda harus menyediakan setidaknya "
+"{0,number,#}MB memori untuk JOSM menggunakan -Xmx{0,number,#}M opsi (lihat "
+"http://forum.openstreetmap.org/viewtopic.php?id=25677).\n"
+"Saat ini Anda memiliki {1,number,#}MB memori tersedia untuk JOSM"
 
 msgid ""
 "Failed to open URL. There is currently no platform set. Please set a "
@@ -15766,10 +15822,10 @@ msgstr ""
 "platform terlebih dahulu."
 
 msgid "Opening URL: {0}"
-msgstr ""
+msgstr "Membuka URL: {0}"
 
 msgid "URL does not contain {0}/{1}/{2}"
-msgstr ""
+msgstr "URL tidak mengandung {0}/{1}/{2}"
 
 msgid "reserved"
 msgstr ""
@@ -15830,7 +15886,7 @@ msgid "Value is too long (max {0} characters):"
 msgstr "Value terlalu panjang (maksimal {0} karakter):"
 
 msgid "Unable to delete file {0}"
-msgstr ""
+msgstr "Tidak dapat menghapus file {0}"
 
 msgid "Unable to create directory {0}"
 msgstr ""
@@ -15951,7 +16007,7 @@ msgstr ""
 
 msgctxt "landuse"
 msgid "cemetery"
-msgstr ""
+msgstr "kuburan"
 
 msgctxt "landuse"
 msgid "residential"
@@ -15999,15 +16055,15 @@ msgstr ""
 
 msgctxt "amenity"
 msgid "fire_station"
-msgstr ""
+msgstr "stasiun pemadam kebakaran"
 
 msgctxt "leisure"
 msgid "park"
-msgstr ""
+msgstr "taman"
 
 msgctxt "leisure"
 msgid "track"
-msgstr ""
+msgstr "jalur"
 
 msgctxt "building"
 msgid "industrial"
@@ -16063,7 +16119,7 @@ msgstr "Situs"
 
 msgctxt "Relation type"
 msgid "street"
-msgstr ""
+msgstr "jalan"
 
 msgctxt "Relation type"
 msgid "tunnel"
@@ -16327,13 +16383,13 @@ msgid "Wheels: city bike, wheelchair, scooter"
 msgstr ""
 
 msgid "bad"
-msgstr ""
+msgstr "buruk"
 
 msgid "Robust Wheels: trekking bike, car, rickshaw"
 msgstr ""
 
 msgid "very_bad"
-msgstr ""
+msgstr "sangat buruk"
 
 msgid "High Clearance: light duty off-road vehicle"
 msgstr ""
@@ -16351,7 +16407,7 @@ msgid "Specialized off-road: tractor, ATV"
 msgstr ""
 
 msgid "impassable"
-msgstr ""
+msgstr "tidak dapat dilewati"
 
 msgid "No wheeled vehicle"
 msgstr ""
@@ -16630,7 +16686,7 @@ msgid "ice_cream"
 msgstr "es_krim"
 
 msgid "international"
-msgstr ""
+msgstr "Internasional"
 
 msgid "seafood"
 msgstr ""
@@ -16642,20 +16698,32 @@ msgid "vietnamese"
 msgstr ""
 
 msgid "fish"
-msgstr ""
+msgstr "ikan"
 
 msgid "noodle"
-msgstr ""
+msgstr "mie"
 
 msgid "barbecue"
 msgstr ""
 
 msgid "vegetarian"
-msgstr ""
+msgstr "vegetarian"
 
 msgid "korean"
 msgstr ""
 
+msgid "donut"
+msgstr "donat"
+
+msgid "mediterranean"
+msgstr ""
+
+msgid "friture"
+msgstr ""
+
+msgid "crepe"
+msgstr ""
+
 msgid "Internet access"
 msgstr "Akses Internet"
 
@@ -16713,11 +16781,11 @@ msgstr ""
 
 msgctxt "sport"
 msgid "archery"
-msgstr ""
+msgstr "panahan"
 
 msgctxt "sport"
 msgid "athletics"
-msgstr ""
+msgstr "atletik"
 
 msgctxt "sport"
 msgid "american_football"
@@ -16733,15 +16801,15 @@ msgstr ""
 
 msgctxt "sport"
 msgid "basketball"
-msgstr ""
+msgstr "bola basket"
 
 msgctxt "sport"
 msgid "beachvolleyball"
-msgstr ""
+msgstr "bola voli pantai"
 
 msgctxt "sport"
 msgid "billiards"
-msgstr ""
+msgstr "biliar"
 
 msgctxt "sport"
 msgid "boules"
@@ -16757,7 +16825,7 @@ msgstr ""
 
 msgctxt "sport"
 msgid "canoe"
-msgstr ""
+msgstr "kano"
 
 msgctxt "sport"
 msgid "climbing"
@@ -16773,7 +16841,7 @@ msgstr ""
 
 msgctxt "sport"
 msgid "cycling"
-msgstr ""
+msgstr "bersepeda"
 
 msgctxt "sport"
 msgid "dog_racing"
@@ -16793,7 +16861,7 @@ msgstr ""
 
 msgctxt "sport"
 msgid "golf"
-msgstr ""
+msgstr "golf"
 
 msgctxt "sport"
 msgid "gymnastics"
@@ -16857,7 +16925,7 @@ msgstr ""
 
 msgctxt "sport"
 msgid "shooting"
-msgstr ""
+msgstr "menembak"
 
 msgctxt "sport"
 msgid "skateboard"
@@ -16873,23 +16941,23 @@ msgstr ""
 
 msgctxt "sport"
 msgid "soccer"
-msgstr ""
+msgstr "sepak bola"
 
 msgctxt "sport"
 msgid "swimming"
-msgstr ""
+msgstr "renang"
 
 msgctxt "sport"
 msgid "table_tennis"
-msgstr ""
+msgstr "tenis meja"
 
 msgctxt "sport"
 msgid "tennis"
-msgstr ""
+msgstr "tenis"
 
 msgctxt "sport"
 msgid "volleyball"
-msgstr ""
+msgstr "bola voli"
 
 msgctxt "sport"
 msgid "9pin"
@@ -16903,13 +16971,13 @@ msgid "Fee"
 msgstr "Biaya"
 
 msgid "06:00-20:00"
-msgstr ""
+msgstr "06:00-20:00"
 
 msgid "Mo-Fr 09:00-18:00,Sa 08:00-14:00"
-msgstr ""
+msgstr "Senin-Jumat 09:00-18:00,Sabtu 08:00-14:00"
 
 msgid "May-Sep 09:30-12:30,14:15-19:30"
-msgstr ""
+msgstr "Mei-Sep 09:30-12:30,14:15-19:30"
 
 msgctxt "parking"
 msgid "multi-storey"
@@ -16925,7 +16993,7 @@ msgstr ""
 
 msgctxt "parking"
 msgid "rooftop"
-msgstr ""
+msgstr "atap"
 
 msgid "Reference number"
 msgstr "Nomor referensi"
@@ -17271,7 +17339,7 @@ msgid "Intermittent"
 msgstr ""
 
 msgid "Seasonal"
-msgstr ""
+msgstr "musiman"
 
 msgid "In the tidal range"
 msgstr ""
@@ -17292,10 +17360,10 @@ msgid "Boat"
 msgstr ""
 
 msgid "Motorboat"
-msgstr ""
+msgstr "perahu motor"
 
 msgid "Canoe"
-msgstr ""
+msgstr "Kano"
 
 msgid "Substance"
 msgstr ""
@@ -17332,7 +17400,7 @@ msgstr ""
 
 msgctxt "mounting/support"
 msgid "ground"
-msgstr ""
+msgstr "permukaan tanah"
 
 msgid "IATA"
 msgstr "IATA"
@@ -17475,7 +17543,7 @@ msgid "Unclassified"
 msgstr "Tidak dapat dikenal"
 
 msgid "Street has no name"
-msgstr ""
+msgstr "Jalan tidak memiliki nama"
 
 msgid "Passing Places"
 msgstr "Lewati Tempat"
@@ -17484,14 +17552,14 @@ msgid "Residential"
 msgstr "Permukiman"
 
 msgid "Bicycle Road"
-msgstr ""
+msgstr "Jalan sepeda"
 
 msgid "Highway type"
 msgstr "Jenis jalan"
 
 msgctxt "Highway"
 msgid "residential"
-msgstr ""
+msgstr "Permukiman"
 
 msgctxt "Highway"
 msgid "service"
@@ -17499,7 +17567,7 @@ msgstr ""
 
 msgctxt "Highway"
 msgid "unclassified"
-msgstr ""
+msgstr "tidak terklasifikasi"
 
 msgctxt "Highway"
 msgid "path"
@@ -17735,7 +17803,7 @@ msgstr "Bundaran"
 
 msgctxt "Highway"
 msgid "construction"
-msgstr ""
+msgstr "konstruksi"
 
 msgid "Ford"
 msgstr "Ford"
@@ -17977,10 +18045,10 @@ msgid "Luggage ramp"
 msgstr ""
 
 msgid "automatic"
-msgstr ""
+msgstr "otomatis"
 
 msgid "manual"
-msgstr ""
+msgstr "manual"
 
 msgid "Handrail"
 msgstr ""
@@ -18167,7 +18235,7 @@ msgid "Highway milestone"
 msgstr ""
 
 msgid "Distance (kilometers)"
-msgstr ""
+msgstr "Jarak (kilometer)"
 
 msgctxt "junction=yes"
 msgid "Named Junction"
@@ -18179,7 +18247,7 @@ msgid ""
 msgstr ""
 
 msgid "Elevator"
-msgstr ""
+msgstr "Elevator"
 
 msgid "Grit Bin"
 msgstr "Grit Bin"
@@ -18295,11 +18363,11 @@ msgstr ""
 
 msgctxt "swing_gate"
 msgid "single"
-msgstr ""
+msgstr "tunggal"
 
 msgctxt "swing_gate"
 msgid "double"
-msgstr ""
+msgstr "ganda"
 
 msgid "Hampshire Gate"
 msgstr "Hampshire Gate"
@@ -18354,11 +18422,11 @@ msgstr "Pelindung longsor"
 
 msgctxt "main group"
 msgid "Water"
-msgstr ""
+msgstr "Air"
 
 msgctxt "sub group"
 msgid "Water"
-msgstr ""
+msgstr "Air"
 
 msgid "Drain"
 msgstr "Saluran"
@@ -18384,7 +18452,7 @@ msgstr "Mata Air"
 msgid ""
 "A point where groundwater naturally flows to the surface of the earth from "
 "underground."
-msgstr ""
+msgstr "Titik dimana air tanah mengalir dari dalam tanah ke permukaan"
 
 msgid "Waterfall"
 msgstr "Air terjun"
@@ -18411,7 +18479,7 @@ msgid "retention"
 msgstr ""
 
 msgid "infiltration"
-msgstr ""
+msgstr "infiltrasi"
 
 msgid "detention"
 msgstr ""
@@ -18433,22 +18501,22 @@ msgstr "Ditutupi Waduk"
 
 msgctxt "natural"
 msgid "Water"
-msgstr ""
+msgstr "Air"
 
 msgid "A body of standing water, such as a lake or pond."
 msgstr ""
 
 msgid "Water Body"
-msgstr ""
+msgstr "Badan Air"
 
 msgid "canal"
 msgstr "kanal"
 
 msgid "lake"
-msgstr ""
+msgstr "danau"
 
 msgid "lagoon"
-msgstr ""
+msgstr "laguna"
 
 msgid "oxbow"
 msgstr ""
@@ -18524,7 +18592,7 @@ msgid "Mud"
 msgstr "lumpur"
 
 msgid "Large area covered with mud."
-msgstr ""
+msgstr "Area besar tertutup lumpur"
 
 msgid "Beach"
 msgstr "Pantai"
@@ -18533,7 +18601,7 @@ msgid "A flat area of sand, gravel or pebble next to water."
 msgstr ""
 
 msgid "swimming"
-msgstr ""
+msgstr "renang"
 
 msgid "surfing"
 msgstr ""
@@ -18557,15 +18625,15 @@ msgstr "Kargo"
 
 msgctxt "cargo"
 msgid "passengers"
-msgstr ""
+msgstr "penumpang"
 
 msgctxt "cargo"
 msgid "vehicle"
-msgstr ""
+msgstr "kendaraan"
 
 msgctxt "cargo"
 msgid "bicycle"
-msgstr ""
+msgstr "sepeda"
 
 msgctxt "cargo"
 msgid "hgv"
@@ -18708,7 +18776,7 @@ msgid "Mooring"
 msgstr ""
 
 msgid "commercial"
-msgstr ""
+msgstr "komersil"
 
 msgid "Floating"
 msgstr ""
@@ -18796,11 +18864,11 @@ msgstr "Halangan"
 
 msgctxt "crossing:barrier"
 msgid "yes"
-msgstr ""
+msgstr "ya"
 
 msgctxt "crossing:barrier"
 msgid "no"
-msgstr ""
+msgstr "tidak"
 
 msgctxt "crossing:barrier"
 msgid "half"
@@ -18944,7 +19012,7 @@ msgid "See the Wiki for other capacity:[types]=*."
 msgstr "Lihat wiki untuk kapasitas:[tipe]=*. lainnya"
 
 msgid "Parking Space"
-msgstr ""
+msgstr "Tempat Parkir"
 
 msgid "Capacity"
 msgstr "Kapasitas"
@@ -18953,7 +19021,7 @@ msgid "Covered (with roof)"
 msgstr "Tertutup (dengan atap)"
 
 msgid "Parking Entrance"
-msgstr ""
+msgstr "Jalan Masuk Parkir"
 
 msgid "Fuel"
 msgstr "Bahan Bakar"
@@ -19010,10 +19078,10 @@ msgid "Types of vehicles which can be charged:"
 msgstr ""
 
 msgid "Scooter"
-msgstr ""
+msgstr "Skuter"
 
 msgid "Truck"
-msgstr ""
+msgstr "Truk"
 
 msgid "Number of Sockets:"
 msgstr ""
@@ -19058,19 +19126,19 @@ msgid "NEMA 5-20"
 msgstr ""
 
 msgid "Authentication:"
-msgstr ""
+msgstr "Otentikasi:"
 
 msgid "Phone call"
-msgstr ""
+msgstr "Panggilan telepon"
 
 msgid "Short message"
-msgstr ""
+msgstr "Pesan singkat"
 
 msgid "NFC"
 msgstr ""
 
 msgid "Membership card"
-msgstr ""
+msgstr "Kartu keanggotaan"
 
 msgid "Wash"
 msgstr "Cuci"
@@ -19082,7 +19150,7 @@ msgid "Car Dealer"
 msgstr "Penjual Mobil"
 
 msgid "Second hand"
-msgstr ""
+msgstr "Bekas"
 
 msgid "only"
 msgstr "hanya"
@@ -19101,16 +19169,16 @@ msgid "repair"
 msgstr ""
 
 msgid "parts"
-msgstr ""
+msgstr "bagian"
 
 msgid "tyres"
-msgstr ""
+msgstr "ban"
 
 msgid "Parts"
 msgstr "Bagian"
 
 msgid "Tires"
-msgstr ""
+msgstr "ban"
 
 msgid "Rental"
 msgstr "Penyewaan"
@@ -19203,7 +19271,7 @@ msgid "Bicycles are washed (for a fee)"
 msgstr "Sepeda dicuci (untuk biaya)"
 
 msgid "Public Bicycle Repair Station"
-msgstr ""
+msgstr "Bengkel Sepeda Umum"
 
 msgid "Chain tool"
 msgstr ""
@@ -19314,7 +19382,7 @@ msgid "Shelter"
 msgstr "Halte"
 
 msgid "Waste Basket/Trash Can"
-msgstr ""
+msgstr "Tempat Sampah"
 
 msgctxt "railway"
 msgid "Station"
@@ -19399,18 +19467,18 @@ msgid "Apron"
 msgstr "Tepi"
 
 msgid "Plane Parking Position"
-msgstr ""
+msgstr "Posisi Parkir Pesawat"
 
 msgid "Hangar"
 msgstr "Hangar"
 
 msgctxt "building"
 msgid "hangar"
-msgstr ""
+msgstr "hanggar"
 
 msgctxt "building"
 msgid "yes"
-msgstr ""
+msgstr "ya"
 
 msgctxt "airmark"
 msgid "Beacon"
@@ -19445,7 +19513,7 @@ msgid "Rooms"
 msgstr ""
 
 msgid "Beds"
-msgstr ""
+msgstr "Kasur"
 
 msgid "Motel"
 msgstr "Motel"
@@ -19454,10 +19522,10 @@ msgid "Guest House/Bed & Breakfast"
 msgstr ""
 
 msgid "Apartment"
-msgstr ""
+msgstr "Apartemen"
 
 msgid "Number of apartments"
-msgstr ""
+msgstr "Jumlah apartemen"
 
 msgid "Chalet"
 msgstr "Kakus"
@@ -19478,16 +19546,16 @@ msgid "Shower"
 msgstr ""
 
 msgid "seasonal"
-msgstr ""
+msgstr "musiman"
 
 msgid "Reservation"
-msgstr ""
+msgstr "reservasi"
 
 msgid "required"
-msgstr ""
+msgstr "dibutuhkan"
 
 msgid "recommended"
-msgstr ""
+msgstr "direkomendasikan"
 
 msgid "members_only"
 msgstr ""
@@ -19507,8 +19575,17 @@ msgstr "Penyimpan Energi"
 msgid "Tents allowed"
 msgstr "Tenda diperbolehkan"
 
-msgid "Camping Site"
-msgstr "Situs Perkemahan"
+msgid "Campsite"
+msgstr ""
+
+msgid "Caravans allowed"
+msgstr ""
+
+msgid "Backcountry"
+msgstr ""
+
+msgid "Group only access"
+msgstr ""
 
 msgid "Food+Drinks"
 msgstr "Makanan+Minuman"
@@ -19529,7 +19606,7 @@ msgid "Delivery"
 msgstr ""
 
 msgid "Mo-Su 12:00-22:00"
-msgstr ""
+msgstr "Senin-Minggu 12:00-22:00"
 
 msgid "Fast Food"
 msgstr "Makanan Cepat Saji"
@@ -19541,7 +19618,7 @@ msgid "Cafe"
 msgstr "Kafe"
 
 msgid "Ice cream"
-msgstr ""
+msgstr "Es krim"
 
 msgid "Pub"
 msgstr "Pub"
@@ -19569,12 +19646,14 @@ msgstr "Kantor Informasi"
 
 msgid "An office where you can get information about a town or region."
 msgstr ""
+"Suatu kantor dimana Anda bisa mendapatkan informasi mengenai seuatu kota "
+"atau wilayah."
 
 msgid "Map"
 msgstr "Peta"
 
 msgid "A board with a map."
-msgstr ""
+msgstr "Suatu papan dengan peta."
 
 msgid "Detail Grade"
 msgstr "Kelas Detil"
@@ -19628,7 +19707,7 @@ msgid "Information Board"
 msgstr "Papan Informasi"
 
 msgid "A board with information."
-msgstr ""
+msgstr "Suatu papan yang berisi informasi."
 
 msgid "Board Content"
 msgstr "Isi Papan"
@@ -19646,7 +19725,7 @@ msgid "plants"
 msgstr "Tanaman"
 
 msgid "geology"
-msgstr ""
+msgstr "geologi"
 
 msgid "Guidepost"
 msgstr "Pos Panduan"
@@ -19683,16 +19762,16 @@ msgid "Leisure"
 msgstr "Kesenggangan"
 
 msgid "Movie Theater/Cinema"
-msgstr ""
+msgstr "Bioskop"
 
 msgid "Drive-in theater"
 msgstr ""
 
 msgid "3D"
-msgstr ""
+msgstr "3D"
 
 msgid "Number of screens"
-msgstr ""
+msgstr "Jumlah layar"
 
 msgid "Zoo"
 msgstr "Kebun Binatang"
@@ -19707,7 +19786,7 @@ msgid "wall"
 msgstr "tembok"
 
 msgid "Amusement/Theme Park"
-msgstr ""
+msgstr "Taman Hiburan"
 
 msgid "Water Park"
 msgstr "Taman Air"
@@ -19716,13 +19795,13 @@ msgid "Beach Resort"
 msgstr ""
 
 msgid "Swimming Pool"
-msgstr ""
+msgstr "Kolam Renang"
 
 msgid "Used for the water area only."
 msgstr ""
 
 msgid "Fitness Station"
-msgstr ""
+msgstr "Pusat Kebugaran"
 
 msgid "Sauna"
 msgstr "Sauna"
@@ -19740,7 +19819,7 @@ msgid "Fireplace"
 msgstr "Perapian"
 
 msgid "Picnic Table"
-msgstr ""
+msgstr "Meja Piknik"
 
 msgid "Public Grill"
 msgstr "Tempat Pembakaran Umum"
@@ -19762,10 +19841,10 @@ msgid "Bird Hide"
 msgstr ""
 
 msgid "Night Club"
-msgstr ""
+msgstr "Klub Malam"
 
 msgid "Casino"
-msgstr ""
+msgstr "Kasino"
 
 msgid "Strip Club"
 msgstr ""
@@ -19804,16 +19883,16 @@ msgid "Artist Name"
 msgstr ""
 
 msgid "Studio"
-msgstr ""
+msgstr "Studio"
 
 msgid "audio"
 msgstr "suara"
 
 msgid "radio"
-msgstr ""
+msgstr "radio"
 
 msgid "television"
-msgstr ""
+msgstr "televisi"
 
 msgid "video"
 msgstr "video"
@@ -19825,38 +19904,38 @@ msgid "Church"
 msgstr "Gereja"
 
 msgid "Building type"
-msgstr ""
+msgstr "tipe bangunan"
 
 msgid "basilica"
 msgstr ""
 
 msgid "cathedral"
-msgstr ""
+msgstr "katedral"
 
 msgid "chapel"
-msgstr ""
+msgstr "kapel"
 
 msgid "church"
 msgstr "gereja"
 
 msgid "temple"
-msgstr ""
+msgstr "candi"
 
 msgctxt "christian"
 msgid "anglican"
-msgstr ""
+msgstr "anglikan"
 
 msgctxt "christian"
 msgid "baptist"
-msgstr ""
+msgstr "baptis"
 
 msgctxt "christian"
 msgid "catholic"
-msgstr ""
+msgstr "katolik"
 
 msgctxt "christian"
 msgid "evangelical"
-msgstr ""
+msgstr "evangelis"
 
 msgctxt "christian"
 msgid "greek_catholic"
@@ -19868,11 +19947,11 @@ msgstr ""
 
 msgctxt "christian"
 msgid "jehovahs_witness"
-msgstr ""
+msgstr "saksi_jehovah"
 
 msgctxt "christian"
 msgid "lutheran"
-msgstr ""
+msgstr "lutheran"
 
 msgctxt "christian"
 msgid "methodist"
@@ -19888,11 +19967,11 @@ msgstr ""
 
 msgctxt "christian"
 msgid "orthodox"
-msgstr ""
+msgstr "ortodok"
 
 msgctxt "christian"
 msgid "pentecostal"
-msgstr ""
+msgstr "pentakosta"
 
 msgctxt "christian"
 msgid "presbyterian"
@@ -19900,7 +19979,7 @@ msgstr ""
 
 msgctxt "christian"
 msgid "protestant"
-msgstr ""
+msgstr "protestan"
 
 msgctxt "christian"
 msgid "quaker"
@@ -19908,7 +19987,7 @@ msgstr ""
 
 msgctxt "christian"
 msgid "roman_catholic"
-msgstr ""
+msgstr "katolik roma"
 
 msgctxt "christian"
 msgid "russian_orthodox"
@@ -19923,34 +20002,34 @@ msgid "spiritist"
 msgstr ""
 
 msgid "Mosque"
-msgstr ""
+msgstr "Masjid"
 
 msgid "mosque"
-msgstr ""
+msgstr "masjid"
 
 msgid "ibadi"
 msgstr ""
 
 msgid "Synagogue"
-msgstr ""
+msgstr "sinagoge"
 
 msgid "synagogue"
-msgstr ""
+msgstr "sinagoge"
 
 msgctxt "jewish"
 msgid "orthodox"
-msgstr ""
+msgstr "ortodok"
 
 msgctxt "jewish"
 msgid "conservative"
-msgstr ""
+msgstr "konservatif"
 
 msgctxt "jewish"
 msgid "reform"
 msgstr ""
 
 msgid "Buddhist Temple"
-msgstr ""
+msgstr "Candi Buddha"
 
 msgid "theravada"
 msgstr ""
@@ -19962,7 +20041,7 @@ msgid "vajrayana"
 msgstr ""
 
 msgid "Hindu Temple"
-msgstr ""
+msgstr "Candi Hindu"
 
 msgid "vaishnavism"
 msgstr ""
@@ -19980,13 +20059,13 @@ msgid "Shinto Shrine"
 msgstr ""
 
 msgid "Other Place of Worship"
-msgstr ""
+msgstr "Tempat Ibadah Lain"
 
 msgid "Public Building"
 msgstr "Bangunan Publik"
 
 msgid "Town Hall"
-msgstr ""
+msgstr "Balai Kota"
 
 msgid "Community Centre"
 msgstr "Pusat Komunitas"
@@ -20034,10 +20113,10 @@ msgid "License Classes"
 msgstr "Kelas Lisensi"
 
 msgid "A;A1;B;BE;C"
-msgstr ""
+msgstr "A;A1;B;BE;C"
 
 msgid "A;A1;B;B1;C;C1;D;D1;BE;CE;C1E;DE;D1E"
-msgstr ""
+msgstr ";A1;B;B1;C;C1;D;D1;BE;CE;C1E;DE;D1E"
 
 msgid "Health"
 msgstr "Kesehatan"
@@ -20049,7 +20128,7 @@ msgid "Clinic"
 msgstr "Klinik"
 
 msgid "Doctor''s Office"
-msgstr ""
+msgstr "Kantor Dokter"
 
 msgid "Dentist"
 msgstr "Dokter Gigi"
@@ -20073,7 +20152,7 @@ msgid "Point Name"
 msgstr "Nama titik"
 
 msgid "Emergency Phone Number"
-msgstr ""
+msgstr "Nomer Telepon Darurat"
 
 msgid "(Use number as shown on plate.)"
 msgstr ""
@@ -20082,7 +20161,7 @@ msgid "Veterinary"
 msgstr "Dokter Hewan"
 
 msgid "Emergency"
-msgstr ""
+msgstr "Darurat"
 
 msgid "Ambulance Station"
 msgstr ""
@@ -20091,13 +20170,13 @@ msgid "Automated Defibrillator"
 msgstr ""
 
 msgid "Location description"
-msgstr ""
+msgstr "Deskripsi lokasi"
 
 msgid "Phone Number"
 msgstr "NomorTelepon"
 
 msgid "Located inside a building?"
-msgstr ""
+msgstr "Berlokasi di dalam bangunan"
 
 msgid "Last check date (YYYY-MM-DD)"
 msgstr ""
@@ -20106,13 +20185,13 @@ msgid "Last check note"
 msgstr ""
 
 msgid "Fire Extinguisher"
-msgstr ""
+msgstr "pemadam api"
 
 msgid "Indoor"
 msgstr "Dalam ruangan"
 
 msgid "Fire Hose"
-msgstr ""
+msgstr "Selang Pemadam Api"
 
 msgid "Fire Hydrant"
 msgstr "Hidran Kebakaran"
@@ -20137,7 +20216,7 @@ msgid "Diameter (in mm)"
 msgstr "Diameter (dalam mm)"
 
 msgid "Hydrant Position"
-msgstr ""
+msgstr "Posisi Hidran"
 
 msgctxt "hydrant position"
 msgid "lane"
@@ -20165,37 +20244,37 @@ msgid "Count"
 msgstr "Jumlah"
 
 msgid "Water Tank"
-msgstr ""
+msgstr "Tangki Air"
 
 msgid "Volume (in liters)"
-msgstr ""
+msgstr "Volume (dalam liter)"
 
 msgid "Assembly Point"
-msgstr ""
+msgstr "Titik Kumpul"
 
 msgid "Emergency Phone"
 msgstr "Telepon Darurat"
 
 msgid "Siren"
-msgstr ""
+msgstr "Sirine"
 
 msgid "pneumatic"
 msgstr ""
 
 msgid "electronic"
-msgstr ""
+msgstr "elektronik"
 
 msgid "mechanical"
 msgstr ""
 
 msgid "Purpose"
-msgstr ""
+msgstr "Kegunaan"
 
 msgid "tornado"
 msgstr ""
 
 msgid "fire"
-msgstr ""
+msgstr "api"
 
 msgid "air_raid"
 msgstr ""
@@ -20204,10 +20283,10 @@ msgid "civil_defense"
 msgstr ""
 
 msgid "Range (in meters)"
-msgstr ""
+msgstr "Jarak (dalam meter)"
 
 msgid "Social Facility"
-msgstr ""
+msgstr "Fasilitas Sosial"
 
 msgid "Nursing Home"
 msgstr "Rumah perawatan"
@@ -20225,29 +20304,29 @@ msgid "Assisted Living"
 msgstr ""
 
 msgid "Outreach"
-msgstr ""
+msgstr "diluar jangkauan"
 
 msgctxt "social_facility"
 msgid "Shelter"
 msgstr ""
 
 msgid "Food Bank"
-msgstr ""
+msgstr "Tempat Penyimpanan Makanan"
 
 msgid "Toilets/Restrooms"
-msgstr ""
+msgstr "Toilet/kamar kecil"
 
 msgctxt "restroom"
 msgid "Female"
-msgstr ""
+msgstr "Wanita"
 
 msgctxt "restroom"
 msgid "Male"
-msgstr ""
+msgstr "Pria"
 
 msgctxt "restroom"
 msgid "Unisex"
-msgstr ""
+msgstr "unisex"
 
 msgid "flush"
 msgstr ""
@@ -20271,17 +20350,17 @@ msgid "seated;urinal"
 msgstr ""
 
 msgid "squat"
-msgstr ""
+msgstr "jongkok"
 
 msgid "urinal"
 msgstr ""
 
 msgctxt "toilets"
 msgid "Diaper"
-msgstr ""
+msgstr "popok"
 
 msgid "room"
-msgstr ""
+msgstr "ruangan"
 
 msgid "Post Box"
 msgstr "Kotak Pos"
@@ -20295,7 +20374,7 @@ msgstr ""
 
 msgctxt "post_box"
 msgid "lamp"
-msgstr ""
+msgstr "lampu"
 
 msgctxt "post_box"
 msgid "wall"
@@ -20322,10 +20401,10 @@ msgid "Telephone cards"
 msgstr "Kartu Telepon"
 
 msgid "Internet Cafe"
-msgstr ""
+msgstr "Warung Internet/Warnet"
 
 msgid "Internet Access"
-msgstr ""
+msgstr "Akses Internet"
 
 msgid "Clock"
 msgstr "Jam"
@@ -20337,7 +20416,7 @@ msgid "analog"
 msgstr ""
 
 msgid "digital"
-msgstr ""
+msgstr "digital"
 
 msgid "sundial"
 msgstr ""
@@ -20391,7 +20470,7 @@ msgid "Glass"
 msgstr "Kaca"
 
 msgid "Glass Bottles"
-msgstr ""
+msgstr "Botol Kaca"
 
 msgid "Green Waste"
 msgstr ""
@@ -20400,10 +20479,10 @@ msgid "Paper"
 msgstr "Kertas"
 
 msgid "Plastic"
-msgstr ""
+msgstr "Plastik"
 
 msgid "Plastic Bottles"
-msgstr ""
+msgstr "Botol Plastik"
 
 msgid "Plastic Packaging"
 msgstr ""
@@ -20424,7 +20503,7 @@ msgid "Recycling Centre"
 msgstr ""
 
 msgid "Waste Disposal/Dumpster"
-msgstr ""
+msgstr "Pembuangan Limbah/Tempat Sampah"
 
 msgid "Sanitary Dump Station"
 msgstr ""
@@ -20527,7 +20606,7 @@ msgid "Sports Centre"
 msgstr "Pusat Olahraga"
 
 msgid "Fitness Centre"
-msgstr ""
+msgstr "Pusat Kebugaran"
 
 msgid "Pitch"
 msgstr "lapangan"
@@ -20612,15 +20691,15 @@ msgstr ""
 
 msgctxt "running"
 msgid "sports_centre"
-msgstr ""
+msgstr "pusat_olahraga"
 
 msgctxt "running"
 msgid "fitness_centre"
-msgstr ""
+msgstr "pusat_kebugaran"
 
 msgctxt "running"
 msgid "stadium"
-msgstr ""
+msgstr "stadion"
 
 msgctxt "running"
 msgid "track"
@@ -20771,7 +20850,7 @@ msgstr ""
 
 msgctxt "piste:grooming"
 msgid "scooter"
-msgstr ""
+msgstr "skuter"
 
 msgctxt "piste:grooming"
 msgid "backcountry"
@@ -20829,10 +20908,10 @@ msgid "Volleyball"
 msgstr "Bola Voli"
 
 msgid "Beach Volleyball"
-msgstr ""
+msgstr "Bola Voli Pantai"
 
 msgid "Billiards"
-msgstr ""
+msgstr "Biliar"
 
 msgid "golf_course"
 msgstr "kursus_golf"
@@ -20862,7 +20941,7 @@ msgid "Racquetball"
 msgstr ""
 
 msgid "Table Tennis/Ping-Pong"
-msgstr ""
+msgstr "Tenis Meja/Ping-Pong"
 
 msgid "Tennis"
 msgstr "Tenis"
@@ -20899,19 +20978,19 @@ msgstr "Buatan Manusia"
 
 msgctxt "building"
 msgid "roof"
-msgstr ""
+msgstr "atap"
 
 msgctxt "building"
 msgid "garage"
-msgstr ""
+msgstr "garasi"
 
 msgctxt "building"
 msgid "garages"
-msgstr ""
+msgstr "garasi"
 
 msgctxt "building"
 msgid "school"
-msgstr ""
+msgstr "Sekolah"
 
 msgctxt "building"
 msgid "commercial"
@@ -20919,7 +20998,7 @@ msgstr ""
 
 msgctxt "building"
 msgid "service"
-msgstr ""
+msgstr "Jalan layanan"
 
 msgctxt "building"
 msgid "train_station"
@@ -20947,39 +21026,39 @@ msgstr ""
 
 msgctxt "building"
 msgid "greenhouse"
-msgstr ""
+msgstr "rumah kaca"
 
 msgctxt "building"
 msgid "office"
-msgstr ""
+msgstr "kantor"
 
 msgctxt "building"
 msgid "university"
-msgstr ""
+msgstr "universitas"
 
 msgctxt "building"
 msgid "college"
-msgstr ""
+msgstr "perguruan tinggi"
 
 msgctxt "building"
 msgid "hospital"
-msgstr ""
+msgstr "rumah sakit"
 
 msgctxt "building"
 msgid "kindergarten"
-msgstr ""
+msgstr "taman kanak-kanak"
 
 msgctxt "building"
 msgid "manufacture"
-msgstr ""
+msgstr "manufaktur"
 
 msgctxt "building"
 msgid "warehouse"
-msgstr ""
+msgstr "gudang"
 
 msgctxt "building"
 msgid "retail"
-msgstr ""
+msgstr "ritel"
 
 msgctxt "building"
 msgid "shed"
@@ -20987,7 +21066,7 @@ msgstr ""
 
 msgctxt "building"
 msgid "storage_tank"
-msgstr ""
+msgstr "tanki penyimpanan"
 
 msgctxt "building"
 msgid "supermarket"
@@ -21023,11 +21102,11 @@ msgstr ""
 
 msgctxt "building"
 msgid "church"
-msgstr ""
+msgstr "gereja"
 
 msgctxt "building"
 msgid "temple"
-msgstr ""
+msgstr "candi"
 
 msgctxt "building"
 msgid "mosque"
@@ -21047,18 +21126,18 @@ msgstr ""
 
 msgctxt "building"
 msgid "ruins"
-msgstr ""
+msgstr "reruntuhan"
 
 msgctxt "building"
 msgid "Levels"
-msgstr ""
+msgstr "Tingkat"
 
 msgid "Residential Building"
 msgstr "Bangunan Permukiman"
 
 msgctxt "building"
 msgid "residential"
-msgstr ""
+msgstr "Permukiman"
 
 msgctxt "building"
 msgid "apartments"
@@ -21070,7 +21149,7 @@ msgstr ""
 
 msgctxt "building"
 msgid "hotel"
-msgstr ""
+msgstr "hotel"
 
 msgctxt "building"
 msgid "hut"
@@ -21082,7 +21161,7 @@ msgstr ""
 
 msgctxt "building"
 msgid "dormitory"
-msgstr ""
+msgstr "asrama"
 
 msgctxt "building"
 msgid "terrace"
@@ -21094,10 +21173,10 @@ msgstr ""
 
 msgctxt "building"
 msgid "farm"
-msgstr ""
+msgstr "pertanian"
 
 msgid "Building part"
-msgstr ""
+msgstr "Bagian bangunan"
 
 msgctxt "building"
 msgid "Skipped Levels"
@@ -21119,19 +21198,19 @@ msgstr ""
 
 msgctxt "entrance"
 msgid "service"
-msgstr ""
+msgstr "Jalan layanan"
 
 msgctxt "entrance"
 msgid "exit"
-msgstr ""
+msgstr "exit"
 
 msgctxt "entrance"
 msgid "emergency"
-msgstr ""
+msgstr "darurat"
 
 msgctxt "entrance"
 msgid "staircase"
-msgstr ""
+msgstr "tangga"
 
 msgctxt "entrance"
 msgid "home"
@@ -21177,11 +21256,11 @@ msgid "Silo"
 msgstr ""
 
 msgid "Storage Tank"
-msgstr ""
+msgstr "Tanki penyimpanan"
 
 msgctxt "content"
 msgid "fuel"
-msgstr ""
+msgstr "Bahan bakar"
 
 msgctxt "content"
 msgid "manure"
@@ -21189,7 +21268,7 @@ msgstr ""
 
 msgctxt "content"
 msgid "oil"
-msgstr ""
+msgstr "minyak"
 
 msgctxt "content"
 msgid "sewage"
@@ -21205,11 +21284,11 @@ msgstr ""
 
 msgctxt "content"
 msgid "water"
-msgstr ""
+msgstr "air"
 
 msgctxt "content"
 msgid "wine"
-msgstr ""
+msgstr "anggur"
 
 msgid "Bunker Silo"
 msgstr ""
@@ -21350,25 +21429,25 @@ msgid "Monitoring:"
 msgstr ""
 
 msgid "Water level"
-msgstr ""
+msgstr "Batas air"
 
 msgid "Tide Level"
 msgstr ""
 
 msgid "Groundwater"
-msgstr ""
+msgstr "Air tanah"
 
 msgid "Traffic"
 msgstr ""
 
 msgid "Air Quality"
-msgstr ""
+msgstr "Kualitas udara"
 
 msgid "Noise"
 msgstr ""
 
 msgid "GPS Signals"
-msgstr ""
+msgstr "Sinyal GPS"
 
 msgid "GLONASS Signals"
 msgstr ""
@@ -21377,40 +21456,40 @@ msgid "Galileo Signals"
 msgstr ""
 
 msgid "Weather"
-msgstr ""
+msgstr "Cuaca"
 
 msgid "Radiation"
-msgstr ""
+msgstr "Radiasi"
 
 msgid "Seismic Activity"
-msgstr ""
+msgstr "Aktivitas seismik"
 
 msgid "Recording:"
 msgstr ""
 
 msgid "Automated"
-msgstr ""
+msgstr "Otomatis"
 
 msgid "Manually"
-msgstr ""
+msgstr "Manual"
 
 msgid "Remote"
 msgstr ""
 
 msgid "Display:"
-msgstr ""
+msgstr "Tampilan:"
 
 msgid "Analog"
-msgstr ""
+msgstr "Analog"
 
 msgid "Digital"
-msgstr ""
+msgstr "Digital"
 
 msgid "Survey Point"
 msgstr "Titik Survey"
 
 msgid "Surveillance Camera"
-msgstr ""
+msgstr "Kamera Pengawasan"
 
 msgid "indoor"
 msgstr "indoor"
@@ -21419,22 +21498,22 @@ msgid "outdoor"
 msgstr "diluar"
 
 msgid "Zone"
-msgstr ""
+msgstr "Zona"
 
 msgid "parking"
-msgstr ""
+msgstr "parkir"
 
 msgid "traffic"
-msgstr ""
+msgstr "lalu lintas"
 
 msgid "shop"
 msgstr "toko"
 
 msgid "bank"
-msgstr ""
+msgstr "bank"
 
 msgid "Camera"
-msgstr ""
+msgstr "Kamera"
 
 msgctxt "camera:type"
 msgid "fixed"
@@ -21449,15 +21528,15 @@ msgid "dome"
 msgstr ""
 
 msgid "Mounted on"
-msgstr ""
+msgstr "Dipasang di"
 
 msgctxt "camera:mount"
 msgid "wall"
-msgstr ""
+msgstr "dinding"
 
 msgctxt "camera:mount"
 msgid "pole"
-msgstr ""
+msgstr "tiang"
 
 msgctxt "camera:mount"
 msgid "ceiling"
@@ -21494,7 +21573,7 @@ msgid "viaduct"
 msgstr "jembatan di atas jalan"
 
 msgid "Structure"
-msgstr ""
+msgstr "Struktur"
 
 msgid "arch"
 msgstr ""
@@ -21506,10 +21585,10 @@ msgid "truss"
 msgstr ""
 
 msgid "floating"
-msgstr ""
+msgstr "mengambang"
 
 msgid "suspension"
-msgstr ""
+msgstr "suspensi"
 
 msgid "cable-stayed"
 msgstr ""
@@ -21561,16 +21640,16 @@ msgstr ""
 
 msgctxt "preset group"
 msgid "Military"
-msgstr ""
+msgstr "Militer"
 
 msgid "Airfield"
-msgstr ""
+msgstr "Lapangan udara"
 
 msgid "Barracks"
-msgstr ""
+msgstr "Barak"
 
 msgid "Bunker"
-msgstr ""
+msgstr "bunker"
 
 msgid "pillbox"
 msgstr ""
@@ -21583,14 +21662,14 @@ msgstr ""
 
 msgctxt "bunker"
 msgid "underground"
-msgstr ""
+msgstr "bawah tanah"
 
 msgctxt "bunker"
 msgid "overground"
-msgstr ""
+msgstr "di atas tanah"
 
 msgid "Historic"
-msgstr ""
+msgstr "Tempat Bersejarah"
 
 msgid "Ruins"
 msgstr "benteng"
@@ -21614,10 +21693,10 @@ msgid "Biofuel Power Generator"
 msgstr ""
 
 msgid "Generator Type"
-msgstr ""
+msgstr "Tipe Generator"
 
 msgid "gas_turbine"
-msgstr ""
+msgstr "turbin gas"
 
 msgid "reciprocating_engine"
 msgstr ""
@@ -21640,7 +21719,7 @@ msgstr ""
 
 msgctxt "generator method"
 msgid "combustion"
-msgstr ""
+msgstr "pembakaran"
 
 msgctxt "generator method"
 msgid "gasification"
@@ -21781,7 +21860,7 @@ msgid "gasification"
 msgstr ""
 
 msgid "Water Turbine"
-msgstr ""
+msgstr "Turbin Air"
 
 msgctxt "generator method"
 msgid "run-of-the-river"
@@ -21793,13 +21872,13 @@ msgstr ""
 
 msgctxt "generator method"
 msgid "water-storage"
-msgstr ""
+msgstr "penyimpanan-air"
 
 msgid "francis_turbine"
 msgstr ""
 
 msgid "all methods"
-msgstr ""
+msgstr "semua metode"
 
 msgid "hydrodynamic_screw"
 msgstr ""
@@ -21849,7 +21928,7 @@ msgid "heat_pump"
 msgstr ""
 
 msgid "Wind Turbine"
-msgstr ""
+msgstr "Turbin Angin"
 
 msgid "Power Substation"
 msgstr "Gardu Listrik"
@@ -21859,11 +21938,11 @@ msgstr ""
 
 msgctxt "power"
 msgid "transmission"
-msgstr ""
+msgstr "Transmisi"
 
 msgctxt "power"
 msgid "distribution"
-msgstr ""
+msgstr "distribusi"
 
 msgctxt "power"
 msgid "minor_distribution"
@@ -21875,11 +21954,11 @@ msgstr ""
 
 msgctxt "power"
 msgid "compensation"
-msgstr ""
+msgstr "kompensasi"
 
 msgctxt "power"
 msgid "transition"
-msgstr ""
+msgstr "transisi"
 
 msgctxt "power"
 msgid "traction"
@@ -21887,7 +21966,7 @@ msgstr ""
 
 msgctxt "power"
 msgid "industrial"
-msgstr ""
+msgstr "industri"
 
 msgid "Gas insulated"
 msgstr ""
@@ -21900,7 +21979,7 @@ msgstr ""
 
 msgctxt "power"
 msgid "generator"
-msgstr ""
+msgstr "generator"
 
 msgctxt "power"
 msgid "auto"
@@ -21912,7 +21991,7 @@ msgstr ""
 
 msgctxt "power"
 msgid "yes"
-msgstr ""
+msgstr "ya"
 
 msgid "Power Switchgear"
 msgstr ""
@@ -22053,7 +22132,7 @@ msgstr ""
 
 msgctxt "color"
 msgid "red/white"
-msgstr ""
+msgstr "merah/putih"
 
 msgid "Portal design"
 msgstr ""
@@ -22285,11 +22364,11 @@ msgstr ""
 
 msgctxt "power cable"
 msgid "underground"
-msgstr ""
+msgstr "bawah tanah"
 
 msgctxt "power cable"
 msgid "underwater"
-msgstr ""
+msgstr "di bawah air"
 
 msgctxt "power cable"
 msgid "overground"
@@ -22341,10 +22420,10 @@ msgid "Palaeontological Site"
 msgstr "Situs Palaeontological"
 
 msgid "Grave"
-msgstr ""
+msgstr "kuburan"
 
 msgid "Tomb"
-msgstr ""
+msgstr "makam"
 
 msgctxt "tomb"
 msgid "tumulus"
@@ -22394,7 +22473,7 @@ msgstr "tugu"
 
 msgctxt "memorial"
 msgid "statue"
-msgstr ""
+msgstr "patung"
 
 msgctxt "memorial"
 msgid "bust"
@@ -22410,7 +22489,7 @@ msgstr ""
 
 msgctxt "memorial"
 msgid "stone"
-msgstr ""
+msgstr "batu"
 
 msgctxt "memorial"
 msgid "war_memorial"
@@ -22426,7 +22505,7 @@ msgid "Wayside Shrine"
 msgstr "Kuil"
 
 msgid "Place of worship"
-msgstr ""
+msgstr "Tempat Beribadah"
 
 msgctxt "building"
 msgid "wayside_shrine"
@@ -22451,7 +22530,7 @@ msgid "Kiosk"
 msgstr "Kios"
 
 msgid "Bakery"
-msgstr ""
+msgstr "Toko Roti"
 
 msgid "Butcher"
 msgstr "Pemotong Daging"
@@ -22463,19 +22542,19 @@ msgid "Dairy"
 msgstr ""
 
 msgid "Cheese"
-msgstr ""
+msgstr "Susu"
 
 msgid "Deli (Fine Food)"
 msgstr "Deli (Fine Food)"
 
 msgid "Pastry"
-msgstr ""
+msgstr "Kue"
 
 msgid "Confectionery"
 msgstr ""
 
 msgid "Tea"
-msgstr ""
+msgstr "Teh"
 
 msgid "Coffee"
 msgstr ""
@@ -22505,7 +22584,7 @@ msgid "Beverages"
 msgstr "Minuman"
 
 msgid "Wine"
-msgstr ""
+msgstr "Anggur"
 
 msgid "Boutique"
 msgstr "Butik"
@@ -22547,10 +22626,10 @@ msgid "Video"
 msgstr "Video"
 
 msgid "Video Games"
-msgstr ""
+msgstr "Video Game"
 
 msgid "Music"
-msgstr ""
+msgstr "Musik"
 
 msgid "Cash"
 msgstr "Kas"
@@ -22589,10 +22668,10 @@ msgid "Frame"
 msgstr "Frame"
 
 msgid "Bed"
-msgstr ""
+msgstr "Kasur"
 
 msgid "Interior Decoration"
-msgstr ""
+msgstr "Dekorasi Interior"
 
 msgid "Antiques"
 msgstr ""
@@ -22604,7 +22683,7 @@ msgid "Stationery"
 msgstr "kertas surat"
 
 msgid "Copy Shop"
-msgstr ""
+msgstr "Toko fotokopi"
 
 msgid "Book Store"
 msgstr "Toko Buku"
@@ -22613,7 +22692,7 @@ msgid "Newspaper Stand"
 msgstr ""
 
 msgid "Ticket"
-msgstr ""
+msgstr "Tiket"
 
 msgid "For the body"
 msgstr ""
@@ -22622,31 +22701,31 @@ msgid "Chemist"
 msgstr "Chemist"
 
 msgid "Cosmetics"
-msgstr ""
+msgstr "Kosmetik"
 
 msgid "Perfumery"
-msgstr ""
+msgstr "Parfum"
 
 msgid "Beauty"
-msgstr ""
+msgstr "Kecantikan"
 
 msgid "Tobacco"
-msgstr ""
+msgstr "Rokok"
 
 msgid "Hairdresser/Barber"
-msgstr ""
+msgstr "Salon"
 
 msgid "Female"
-msgstr ""
+msgstr "Wanita"
 
 msgid "Male"
-msgstr ""
+msgstr "Pria"
 
 msgid "Unisex"
 msgstr ""
 
 msgid "Tattoo"
-msgstr ""
+msgstr "Tato"
 
 msgid "Optician"
 msgstr "Optician"
@@ -22658,7 +22737,7 @@ msgid "Medical Supply"
 msgstr ""
 
 msgid "Jewellery"
-msgstr ""
+msgstr "Perhiasan"
 
 msgid "Erotic"
 msgstr "Erotic"
@@ -22694,34 +22773,34 @@ msgid "Toys"
 msgstr "Mainan"
 
 msgid "Gift/Souvenir"
-msgstr ""
+msgstr "Hadiah"
 
 msgid "Variety Store"
 msgstr "Berbagai Toko"
 
 msgid "Charity"
-msgstr ""
+msgstr "Amal"
 
 msgid "Bookmaker"
 msgstr ""
 
 msgid "Lottery"
-msgstr ""
+msgstr "Lotre"
 
 msgid "Bag"
-msgstr ""
+msgstr "Tas"
 
 msgid "Pet"
-msgstr ""
+msgstr "Peliharaan"
 
 msgid "Photo"
-msgstr ""
+msgstr "Foto"
 
 msgid "Funeral Directors"
 msgstr ""
 
 msgid "Vending Machine"
-msgstr ""
+msgstr "Mesin Penjual Otomatis"
 
 msgid "Vending products"
 msgstr "Vending products"
@@ -22739,7 +22818,7 @@ msgid "cigarettes"
 msgstr "rokok"
 
 msgid "coffee"
-msgstr ""
+msgstr "kopi"
 
 msgid "condoms"
 msgstr "kondom"
@@ -22757,10 +22836,10 @@ msgid "food"
 msgstr "makanan"
 
 msgid "milk"
-msgstr ""
+msgstr "susu"
 
 msgid "newspapers"
-msgstr ""
+msgstr "surat kabar"
 
 msgid "parking_tickets"
 msgstr "Tiket_parkir"
@@ -22793,7 +22872,7 @@ msgid "toys"
 msgstr "mainan"
 
 msgid "Payment Methods"
-msgstr ""
+msgstr "Metode Pembayaran"
 
 msgid "Debit cards"
 msgstr "Kartu Debit"
@@ -22808,7 +22887,7 @@ msgid "Girocard"
 msgstr ""
 
 msgid "Laser"
-msgstr ""
+msgstr "Laser"
 
 msgid "Maestro"
 msgstr ""
@@ -22900,59 +22979,59 @@ msgstr ""
 
 msgctxt "office"
 msgid "Administrative"
-msgstr ""
+msgstr "Administratif"
 
 msgctxt "office"
 msgid "Advertising agency"
-msgstr ""
+msgstr "Agen periklanan"
 
 msgctxt "office"
 msgid "Architect"
-msgstr ""
+msgstr "Arsitek"
 
 msgctxt "office"
 msgid "Association"
-msgstr ""
+msgstr "Asosiasi"
 
 msgctxt "office"
 msgid "Private company"
-msgstr ""
+msgstr "Perusahaan swasta"
 
 msgctxt "office"
 msgid "Educational institution"
-msgstr ""
+msgstr "Institusi pendidikan"
 
 msgctxt "office"
 msgid "Employment agency"
-msgstr ""
+msgstr "Agensi pekerjaan"
 
 msgctxt "office"
 msgid "Estate agent"
-msgstr ""
+msgstr "Agen perumahan"
 
 msgctxt "office"
 msgid "Foundation"
-msgstr ""
+msgstr "Yayasan"
 
 msgctxt "office"
 msgid "Government"
-msgstr ""
+msgstr "Pemerintahan"
 
 msgid "ministry"
-msgstr ""
+msgstr "kementrian"
 
 msgid "prosecutor"
-msgstr ""
+msgstr "jaksa"
 
 msgid "tax"
-msgstr ""
+msgstr "pajak"
 
 msgid "register_office"
 msgstr ""
 
 msgctxt "office"
 msgid "Insurance"
-msgstr ""
+msgstr "Asuransi"
 
 msgctxt "office"
 msgid "It specialist"
@@ -22960,42 +23039,42 @@ msgstr ""
 
 msgctxt "office"
 msgid "Lawyer"
-msgstr ""
+msgstr "Pengacara"
 
 msgctxt "office"
 msgid "Newspaper"
-msgstr ""
+msgstr "Surat kabar"
 
 msgctxt "office"
 msgid "Non-governmental organisation (NGO)"
-msgstr ""
+msgstr "Organisasi Non-pemerintahan (NGO)"
 
 msgctxt "office"
 msgid "Notary"
-msgstr ""
+msgstr "Notaris"
 
 msgctxt "office"
 msgid "Political party"
-msgstr ""
+msgstr "Partai politik"
 
 msgctxt "office"
 msgid "Religion"
-msgstr ""
+msgstr "Keagamaan"
 
 msgctxt "office"
 msgid "Research"
-msgstr ""
+msgstr "Riset/Penelitian"
 
 msgctxt "office"
 msgid "Tax advisor"
-msgstr ""
+msgstr "Penasihan pajak"
 
 msgctxt "office"
 msgid "Telecommunication"
-msgstr ""
+msgstr "telekomunikasi"
 
 msgid "Craft"
-msgstr ""
+msgstr "Kerajinan"
 
 msgid "Beekeeper"
 msgstr ""
@@ -23019,16 +23098,16 @@ msgid "Locksmith"
 msgstr ""
 
 msgid "Electrician"
-msgstr ""
+msgstr "Tukang listrik"
 
 msgid "Plumber"
-msgstr ""
+msgstr "tukang ledeng"
 
 msgid "Hvac"
 msgstr ""
 
 msgid "Painter"
-msgstr ""
+msgstr "Pelukis"
 
 msgid "Tiler"
 msgstr ""
@@ -23037,25 +23116,25 @@ msgid "Window construction"
 msgstr ""
 
 msgid "Carpenter"
-msgstr ""
+msgstr "Tukang kayu"
 
 msgid "Roofer"
 msgstr ""
 
 msgid "Photographer"
-msgstr ""
+msgstr "Fotografer"
 
 msgid "Handicraft"
-msgstr ""
+msgstr "Kerajinan tangan"
 
 msgid "Pottery"
-msgstr ""
+msgstr "tembikar"
 
 msgid "Gardener"
-msgstr ""
+msgstr "Tukang kebun"
 
 msgid "Shoemaker"
-msgstr ""
+msgstr "Tukang sepatu"
 
 msgid "Sawmill"
 msgstr ""
@@ -23064,7 +23143,7 @@ msgid "Stonemason"
 msgstr ""
 
 msgid "Blacksmith"
-msgstr ""
+msgstr "Pandai besi"
 
 msgid "Metal construction"
 msgstr ""
@@ -23100,7 +23179,7 @@ msgid "ward"
 msgstr ""
 
 msgid "National Park"
-msgstr ""
+msgstr "Taman Nasional"
 
 msgid "Protected Area"
 msgstr ""
@@ -23208,19 +23287,19 @@ msgid "A volcano, either dormant, extinct or active."
 msgstr ""
 
 msgid "Current Status"
-msgstr ""
+msgstr "Status terkini"
 
 msgid "dormant"
 msgstr ""
 
 msgid "extinct"
-msgstr ""
+msgstr "punah"
 
 msgid "stratovolcano"
 msgstr ""
 
 msgid "shield"
-msgstr ""
+msgstr "pelindung"
 
 msgid "scoria"
 msgstr ""
@@ -23261,13 +23340,13 @@ msgid "Reef"
 msgstr ""
 
 msgid "coral"
-msgstr ""
+msgstr "koral"
 
 msgid "oyster"
-msgstr ""
+msgstr "tiram"
 
 msgid "rock"
-msgstr ""
+msgstr "batu"
 
 msgid "Nature"
 msgstr "Alami"
@@ -23314,7 +23393,7 @@ msgstr ""
 
 msgctxt "cutline"
 msgid "pipeline"
-msgstr ""
+msgstr "pipa"
 
 msgctxt "cutline"
 msgid "piste"
@@ -23322,7 +23401,7 @@ msgstr ""
 
 msgctxt "cutline"
 msgid "section"
-msgstr ""
+msgstr "bagian"
 
 msgid "Grassland"
 msgstr "Padang Rumput"
@@ -23412,10 +23491,10 @@ msgid ""
 msgstr ""
 
 msgid "Tourism attraction"
-msgstr ""
+msgstr "Atraksi wisata"
 
 msgid "Stone"
-msgstr ""
+msgstr "Batu"
 
 msgid ""
 "A single notable free-standing rock, which may differ from the composition "
@@ -23448,7 +23527,7 @@ msgstr ""
 
 msgctxt "crop"
 msgid "wheat"
-msgstr ""
+msgstr "gandum"
 
 msgctxt "crop"
 msgid "hop"
@@ -23461,49 +23540,49 @@ msgid "Orchard"
 msgstr ""
 
 msgid "Trees"
-msgstr ""
+msgstr "Pepohonan"
 
 msgid "olive_trees"
 msgstr ""
 
 msgid "apple_trees"
-msgstr ""
+msgstr "pohon apel"
 
 msgid "oil_palms"
-msgstr ""
+msgstr "kelapa sawit"
 
 msgid "orange_trees"
-msgstr ""
+msgstr "pohon jeruk"
 
 msgid "almond_trees"
-msgstr ""
+msgstr "pohon almond"
 
 msgid "banana_plants"
-msgstr ""
+msgstr "pohon pisang"
 
 msgid "coconut_palms"
-msgstr ""
+msgstr "pohon kelapa"
 
 msgid "hazel_plants"
 msgstr ""
 
 msgid "cherry_trees"
-msgstr ""
+msgstr "pohon ceri"
 
 msgid "persimmon_trees"
 msgstr ""
 
 msgid "walnut_trees"
-msgstr ""
+msgstr "pohon kenari"
 
 msgid "plum_trees"
 msgstr ""
 
 msgid "peach_trees"
-msgstr ""
+msgstr "pohon persik"
 
 msgid "tea_plants"
-msgstr ""
+msgstr "tanaman teh"
 
 msgid "Vineyard"
 msgstr "Perkebunan Anggur"
@@ -23521,7 +23600,7 @@ msgid "Aquaculture"
 msgstr ""
 
 msgid "shrimp"
-msgstr ""
+msgstr "udang"
 
 msgid "mussels"
 msgstr ""
@@ -23548,7 +23627,7 @@ msgid "Recreation Ground"
 msgstr "Recreation Ground"
 
 msgid "Residential Area"
-msgstr ""
+msgstr "Area Pemukiman"
 
 msgid "Graveyard"
 msgstr "Pemakaman Kecil"
@@ -23570,11 +23649,11 @@ msgstr "Industri"
 
 msgctxt "industrial"
 msgid "bakery"
-msgstr ""
+msgstr "toko roti"
 
 msgctxt "industrial"
 msgid "brewery"
-msgstr ""
+msgstr "pabrik bir"
 
 msgctxt "industrial"
 msgid "brickyard"
@@ -23590,7 +23669,7 @@ msgstr ""
 
 msgctxt "industrial"
 msgid "factory"
-msgstr ""
+msgstr "pabrik"
 
 msgctxt "industrial"
 msgid "grinding_mill"
@@ -23610,7 +23689,7 @@ msgstr ""
 
 msgctxt "industrial"
 msgid "oil"
-msgstr ""
+msgstr "minyak"
 
 msgctxt "industrial"
 msgid "port"
@@ -23638,7 +23717,7 @@ msgstr ""
 
 msgctxt "industrial"
 msgid "warehouse"
-msgstr ""
+msgstr "gudang"
 
 msgid "Garages"
 msgstr "Garages"
@@ -23650,7 +23729,7 @@ msgid "Military"
 msgstr "Militer"
 
 msgid "Construction Area"
-msgstr ""
+msgstr "Area Konstruksi"
 
 msgid "Brownfield"
 msgstr "Brownfield"
@@ -23668,16 +23747,16 @@ msgid "Annotation"
 msgstr "Keterangan"
 
 msgid "Alternative name"
-msgstr ""
+msgstr "Nama alternatif"
 
 msgid "Historical name"
-msgstr ""
+msgstr "Nama sejarah"
 
 msgid "Local name"
-msgstr ""
+msgstr "Nama lokal"
 
 msgid "Regional name"
-msgstr ""
+msgstr "Nama regional"
 
 msgid "National name"
 msgstr ""
@@ -23686,13 +23765,13 @@ msgid "International name"
 msgstr ""
 
 msgid "Official name"
-msgstr ""
+msgstr "Nama resmi"
 
 msgid "Common name abbreviation"
 msgstr ""
 
 msgid "Address"
-msgstr ""
+msgstr "Alamat"
 
 msgid "House number"
 msgstr "Nomor Rumah"
@@ -23701,7 +23780,7 @@ msgid "Street name"
 msgstr "Nama Jalan"
 
 msgid "Place name"
-msgstr ""
+msgstr "Nama tempat"
 
 msgid "City name"
 msgstr "Nama Kota"
@@ -23719,17 +23798,17 @@ msgid "House name"
 msgstr "Nama Rumah"
 
 msgid "Subdistrict"
-msgstr ""
+msgstr "Kecamatan"
 
 msgid "District"
-msgstr ""
+msgstr "Kabupaten"
 
 msgid "Province"
-msgstr ""
+msgstr "Provinsi"
 
 msgctxt "addr:"
 msgid "State"
-msgstr ""
+msgstr "Negara Bagian"
 
 msgid "AL"
 msgstr ""
@@ -23915,10 +23994,10 @@ msgid "actual"
 msgstr ""
 
 msgid "estimate"
-msgstr ""
+msgstr "memperkirakan"
 
 msgid "potential"
-msgstr ""
+msgstr "potensi"
 
 msgid "Contact (Common Schema)"
 msgstr ""
@@ -23951,14 +24030,14 @@ msgstr ""
 
 msgctxt "the tag note=*"
 msgid "Note"
-msgstr ""
+msgstr "Catatan"
 
 msgctxt "note=*"
 msgid "An important hint for other mappers (not for the end user)."
 msgstr ""
 
 msgid "Fixme"
-msgstr ""
+msgstr "Perbaiki"
 
 msgctxt "fixme=*"
 msgid ""
@@ -23985,13 +24064,13 @@ msgid "maritime"
 msgstr ""
 
 msgid "national_park"
-msgstr ""
+msgstr "taman nasional"
 
 msgid "political"
 msgstr "Politik"
 
 msgid "postal_code"
-msgstr ""
+msgstr "kode pos"
 
 msgid "protected_area"
 msgstr ""
@@ -24018,7 +24097,7 @@ msgid "Roof edge"
 msgstr ""
 
 msgid "Building level"
-msgstr ""
+msgstr "Tingkat bangunan"
 
 msgid "Site"
 msgstr "Site"
@@ -24122,15 +24201,15 @@ msgid "Routes"
 msgstr ""
 
 msgid "Bicycle Route"
-msgstr ""
+msgstr "Rute sepeda"
 
 msgctxt "network"
 msgid "international"
-msgstr ""
+msgstr "internasional"
 
 msgctxt "network"
 msgid "national"
-msgstr ""
+msgstr "nasional"
 
 msgctxt "network"
 msgid "regional"
@@ -24138,16 +24217,16 @@ msgstr ""
 
 msgctxt "network"
 msgid "local"
-msgstr ""
+msgstr "lokal"
 
 msgid "Mountain Biking Route"
-msgstr ""
+msgstr "Rute Sepeda Gunung"
 
 msgid "Hiking Route"
-msgstr ""
+msgstr "Rute Pendakian"
 
 msgid "infrastructure"
-msgstr ""
+msgstr "infrastruktur"
 
 msgid "natural"
 msgstr "alami"
@@ -24156,7 +24235,7 @@ msgid "Walking Route"
 msgstr ""
 
 msgid "Riding Route"
-msgstr ""
+msgstr "Rute Berkendara"
 
 msgid "Piste Route"
 msgstr ""
@@ -24180,7 +24259,7 @@ msgid "alpine"
 msgstr ""
 
 msgid "Detour Route"
-msgstr ""
+msgstr "rute memutar"
 
 msgid "Ref of the way this is a detour to"
 msgstr ""
@@ -24225,7 +24304,7 @@ msgid "anything related to the street"
 msgstr "suatu relasi termasuk bagian dari jalan"
 
 msgid "Destination Sign"
-msgstr ""
+msgstr "Rambu Tujuan"
 
 msgid "Destination written on sign (w/o distance)"
 msgstr "petunjuk tujuan ditulis (w/o jarak)"
@@ -24318,19 +24397,19 @@ msgid "edge ways parallel to ''through''"
 msgstr ""
 
 msgid "Landsat"
-msgstr ""
+msgstr "Landsat"
 
 msgid "Bing aerial imagery"
-msgstr ""
+msgstr "Citra satelit Bing"
 
 msgid "HDM (Humanitarian OpenStreetMap Team)"
-msgstr ""
+msgstr "HDM (Humanitarian OpenStreetMap Team)"
 
 msgid "Mapbox Satellite"
-msgstr ""
+msgstr "Satelit Mapbox"
 
 msgid "DigitalGlobe Premium Imagery"
-msgstr ""
+msgstr "Digital Globe Premium Imagery"
 
 msgid ""
 "DigitalGlobe-Premium is a mosaic composed of DigitalGlobe basemap with "
@@ -24338,26 +24417,37 @@ msgid ""
 "resolution or better, and refreshed more frequently with ongoing updates."
 msgstr ""
 
-msgid "DigitalGlobe Standard Imagery"
+msgid "DigitalGlobe Premium Imagery Vintage"
 msgstr ""
 
 msgid ""
+"Imagery boundaries and capture dates. Labels appear at zoom level 14 and "
+"higher."
+msgstr ""
+
+msgid "DigitalGlobe Standard Imagery"
+msgstr "DigitalGlobe Standard Imagery"
+
+msgid ""
 "DigitalGlobe-Standard is a curated set of imagery covering 86% of the "
 "earth’s landmass, with 30-60cm or resolution where available, backfilled by "
 "Landsat. Average age is 2.31 years, with some areas updated 2x per year."
 msgstr ""
 
-msgid "Esri World Imagery"
+msgid "DigitalGlobe Standard Imagery Vintage"
 msgstr ""
 
+msgid "Esri World Imagery"
+msgstr "Esri World Imagery"
+
 msgid "OpenCycleMap"
-msgstr ""
+msgstr "OpenCycleMap"
 
 msgid "Thunderforest Landscape"
 msgstr ""
 
 msgid "OpenSeaMap"
-msgstr ""
+msgstr "OpenSeaMap"
 
 msgid "OpenStreetMap Carto (Standard)"
 msgstr ""
@@ -24375,13 +24465,13 @@ msgid "OpenStreetMap (German Style)"
 msgstr ""
 
 msgid "OpenStreetMap GPS Traces"
-msgstr ""
+msgstr "Jejak GPS OpenStreetMap"
 
 msgid "Public GPS traces uploaded to OpenStreetMap."
-msgstr ""
+msgstr "Jejak GPS publik diunggah ke OpenStreetMap"
 
 msgid "OpenTopoMap"
-msgstr ""
+msgstr "OpenTopoMap"
 
 msgid "Public Transport (ÖPNV)"
 msgstr ""
@@ -24410,6 +24500,12 @@ msgstr ""
 msgid "Strava cycling and running heatmap"
 msgstr ""
 
+msgid "Strava water sports heatmap"
+msgstr ""
+
+msgid "Strava winter sports heatmap"
+msgstr ""
+
 msgid "Locator Overlay"
 msgstr ""
 
@@ -24814,6 +24910,9 @@ msgstr ""
 msgid "SPW(allonie) most recent aerial imagery"
 msgstr ""
 
+msgid "SPW(allonie) 2016 aerial imagery"
+msgstr ""
+
 msgid "SPW(allonie) 2015 aerial imagery"
 msgstr ""
 
@@ -24859,6 +24958,14 @@ msgstr ""
 msgid "Addresses data from IBGE"
 msgstr ""
 
+msgid "Street names IBGE Salvador-BA"
+msgstr ""
+
+msgid ""
+"Streets geometry and names of Salvador, Bahia. Source: Faces de Logradouro - "
+"IBGE."
+msgstr ""
+
 msgid "Rio Mosaic 2013"
 msgstr ""
 
@@ -25589,6 +25696,9 @@ msgstr ""
 msgid "Japan GSI ortho Imagery"
 msgstr ""
 
+msgid "Japan GSI Standard Map"
+msgstr ""
+
 msgid "imagico.de OSM images for mapping: Aral Sea (low water level)"
 msgstr ""
 
@@ -25618,7 +25728,7 @@ msgstr ""
 msgid "20cm ortho - Latvia - Coastline"
 msgstr ""
 
-msgid "1.cikla ortofotokarte - Latvia"
+msgid "Orthophoto 1st cycle (1994-1999) - Latvia"
 msgstr ""
 
 msgid "ORT10LT (Lithuania)"
@@ -25627,6 +25737,9 @@ msgstr ""
 msgid "geoportail.lu all layers"
 msgstr ""
 
+msgid "geoportail.lu ortho latest"
+msgstr ""
+
 msgid "geoportail.lu ortho 2016"
 msgstr ""
 
@@ -26926,7 +27039,7 @@ msgid "Odd housenumber in even address interpolation."
 msgstr ""
 
 msgid "Way with {0}. Tag each housenumber separately if possible."
-msgstr ""
+msgstr "Garis dengan {0}. Tag setiap nomer rumah terpisah jika memungkinkan."
 
 msgid ""
 "Object has no {0}, however, it has {1} and {2} whose value looks like a "
@@ -26937,7 +27050,7 @@ msgid "Same value of {0} and {1}"
 msgstr ""
 
 msgid "{0} without {1}"
-msgstr ""
+msgstr "{0} tanpa {1}"
 
 msgid "missing tag"
 msgstr ""
@@ -26958,10 +27071,10 @@ msgid "two objects, one with {0} and one with {1} + {2} + {3}"
 msgstr ""
 
 msgid "incomplete object: only {0}"
-msgstr ""
+msgstr "objek belum komplit: hanya {0}"
 
 msgid "incomplete object: only {0} and {1}"
-msgstr ""
+msgstr "objek belum lengkap: hanya {0} dan {1}"
 
 msgid "{0} together with addr:*"
 msgstr ""
@@ -26970,7 +27083,7 @@ msgid "{0} together with {1} and conflicting values"
 msgstr ""
 
 msgid "{0} on suspicious object"
-msgstr ""
+msgstr "{0} pada objek mencurigakan"
 
 msgid "natural water used for swimming pool"
 msgstr "air alami yang digunakan untuk kolam renang"
@@ -26979,7 +27092,7 @@ msgid "sport without physical feature"
 msgstr ""
 
 msgid "alternative name without {0}"
-msgstr ""
+msgstr "nama alternatif tanpa {0}"
 
 msgid "incomplete usage of {0} on a way without {1}"
 msgstr ""
@@ -27058,13 +27171,13 @@ msgid ""
 msgstr ""
 
 msgid "{0}={1} is unspecific. Please replace ''{1}'' by a specific value."
-msgstr ""
+msgstr "{0}={1} tidak spesifik. Tolong ganti ''{1}'' dengan nilai spesifik."
 
 msgid "{0} should be replaced with {1}"
-msgstr ""
+msgstr "{0} seharusnya digantikan dengan {1}"
 
 msgid "{0} = {1}; remove {0}"
-msgstr ""
+msgstr "{0} = {1}; hilangkan {0}"
 
 msgid ""
 "{0}={1} is unspecific. Please replace ''{1}'' by ''left'', ''right'' or "
@@ -27072,20 +27185,20 @@ msgid ""
 msgstr ""
 
 msgid "Unspecific tag {0}"
-msgstr ""
+msgstr "Tag tidak spesifik {0}"
 
 msgid "Definition of {0} is unclear"
 msgstr ""
 
 msgid "{0} + {1} + {2}"
-msgstr ""
+msgstr "{0} + {1} + {2}"
 
 msgid ""
 "{0} is not recommended. Use the Reverse Ways function from the Tools menu."
 msgstr ""
 
 msgid "{0}"
-msgstr ""
+msgstr "{0}"
 
 msgid "key with uncommon character"
 msgstr ""
@@ -27094,7 +27207,7 @@ msgid "uncommon short key"
 msgstr ""
 
 msgid "{0} is inaccurate"
-msgstr ""
+msgstr "{0} tidak akurat"
 
 msgid "{0} is deprecated for {1}"
 msgstr ""
@@ -27112,25 +27225,28 @@ msgid "misspelled value"
 msgstr ""
 
 msgid "wrong value: {0}"
-msgstr ""
+msgstr "salah nilai: {0}"
 
 msgid "{0} on a node. Should be used on a way."
-msgstr ""
+msgstr "{0} pada node. Seharusnya digunakan pada garis."
+
+msgid "{0} on a node. Should be used on a way or relation."
+msgstr "{0} pada node. Seharusnya digunakan pada garis atau relasi"
 
 msgid "{0} on a node. Should be drawn as an area."
-msgstr ""
+msgstr "{0} pada node. Seharusnya digambarkan sebagai area."
 
 msgid "{0} on a node. Should be used in a relation"
-msgstr ""
+msgstr "{0} pada node. Seharusnya digunakan pada relasi."
 
 msgid "{0} on a way. Should be used on a node."
-msgstr ""
+msgstr "{0} pada garis. Seharusnya digunakan pada node."
 
 msgid "{0} on a way. Should be used in a relation"
-msgstr ""
+msgstr "{0} pada garis. Seharusnya digunakan pada relasi."
 
 msgid "node connects highway and building"
-msgstr ""
+msgstr "titik tersambung antara jalan raya dengan bangunan"
 
 msgid ""
 "Object at Position 0.00E 0.00N. There is nothing at this position except an "
@@ -27180,7 +27296,7 @@ msgid "{0} on a small area"
 msgstr ""
 
 msgid "Too large building"
-msgstr ""
+msgstr "Bangunan terlalu besar"
 
 msgid ""
 "Node connects a power line or cable with an object which is not related to "
@@ -27330,10 +27446,10 @@ msgid "street name contains ß"
 msgstr ""
 
 msgid "{0} is unnecessary"
-msgstr ""
+msgstr "{0} tidak diperlukan"
 
 msgid "unnecessary tag"
-msgstr ""
+msgstr "tag tidak diperlukan"
 
 msgid "{0} is unnecessary for {1}"
 msgstr ""
@@ -27344,6 +27460,9 @@ msgstr ""
 msgid "Nodes duplicating parent way tags"
 msgstr "Titik duplikasi tag/label garis induk"
 
+msgid "{0} together with {1} and {2}. Remove {0}."
+msgstr ""
+
 msgid ""
 "wikipedia tag has no language given, use ''wikipedia''=''language:page "
 "title''"
@@ -28198,6 +28317,21 @@ msgstr "Menggunggah jejak ke openstreetmap.org"
 msgid "Importing..."
 msgstr "Mengimpor..."
 
+msgid "Shape is started incorrectly"
+msgstr ""
+
+msgid "Can''t load SVG diagram"
+msgstr ""
+
+msgid "Can''t find root SVG element"
+msgstr ""
+
+msgid "Import primitives"
+msgstr ""
+
+msgid "Cannot find configuration file!"
+msgstr ""
+
 msgid "DXF files [ImportDxf plugin] (*.dxf)"
 msgstr ""
 
@@ -28834,7 +28968,7 @@ msgid "Display hour when the picture was taken"
 msgstr ""
 
 msgid "Use 24 hour format"
-msgstr ""
+msgstr "Gunakan format 24 jam"
 
 msgid "Move to picture''s location with next/previous buttons"
 msgstr ""
@@ -28851,6 +28985,9 @@ msgstr ""
 msgid "Download mode"
 msgstr ""
 
+msgid "Number of images to be pre-fetched (forwards and backwards)"
+msgstr ""
+
 msgid "You are logged in as ''{0}''."
 msgstr ""
 
@@ -28870,7 +29007,7 @@ msgid "Upload selected sequence"
 msgstr ""
 
 msgid "Delete after upload"
-msgstr ""
+msgstr "Hapus setelah mengunggah"
 
 msgid "Wait for full quality pictures"
 msgstr ""
@@ -28951,7 +29088,7 @@ msgid ""
 msgstr ""
 
 msgid "I got it, close this."
-msgstr ""
+msgstr "Saya mengerti, tutup."
 
 msgid "Image info"
 msgstr ""
@@ -29008,7 +29145,7 @@ msgid "Too many map objects, zoom in to see all."
 msgstr ""
 
 msgid "Downloading map objects failed!"
-msgstr ""
+msgstr "Gagal mengunduh objek peta!"
 
 msgid "Mapillary objects"
 msgstr ""
@@ -29061,8 +29198,17 @@ msgid "only when manually requested"
 msgstr ""
 
 msgid ""
-"The downloaded OSM area is too big. Download mode has been changed to OSM "
-"area until the layer is restarted."
+"The Mapillary layer has stopped downloading images, because the requested "
+"area is too big!"
+msgstr ""
+
+msgid ""
+"To solve this problem, you could zoom in and load a smaller area of the map."
+msgstr ""
+
+msgid ""
+"To solve this problem, you could switch to download mode ''{0}'' and load "
+"Mapillary images for a smaller portion of the map."
 msgstr ""
 
 msgid "Downloading"
@@ -29075,28 +29221,28 @@ msgid "Mapillary login"
 msgstr ""
 
 msgid "Login successful, return to JOSM."
-msgstr ""
+msgstr "Berhasil masuk, kembali ke JOSM."
 
 msgid "Supported image formats (JPG and PNG)"
-msgstr ""
+msgstr "Mendukung format gambar (JPG dan PNG)"
 
 msgid "Downloading Mapillary images"
-msgstr ""
+msgstr "Mengunduh gambar Mapillary"
 
 msgid "Total Mapillary images: {0}"
-msgstr ""
+msgstr "Total gambar Mapillary: {0}"
 
 msgid "Submitting Mapillary Changeset"
 msgstr ""
 
 msgid "No images found"
-msgstr ""
+msgstr "Gambar tidak ditemukan"
 
 msgid "You have successfully uploaded {0} images to mapillary.com"
-msgstr ""
+msgstr "Anda telah berhasil mengunggah {0} gambar ke mapillary.com"
 
 msgid "Finished upload"
-msgstr ""
+msgstr "Selesai mengunggah"
 
 msgid "You are not logged in, please log in to Mapillary in the preferences"
 msgstr ""
@@ -29105,7 +29251,7 @@ msgid "Not Logged in to Mapillary"
 msgstr ""
 
 msgid "Uploading: {0}"
-msgstr ""
+msgstr "Mengunggah: {0}"
 
 msgid "NanoLog"
 msgstr "NanoLog"
@@ -29141,7 +29287,7 @@ msgid "Could not read NanoLog file:"
 msgstr ""
 
 msgid "OSM Recommendation"
-msgstr ""
+msgstr "Rekomendasi OSM"
 
 msgid "Recommend categories to your newly created instances."
 msgstr ""
@@ -29669,28 +29815,28 @@ msgid "Building address"
 msgstr "Alamat Bangunan"
 
 msgid "empty"
-msgstr ""
+msgstr "kosong"
 
 msgid "skip"
-msgstr ""
+msgstr "abaikan"
 
 msgid "House number:"
 msgstr "Nomor Rumah:"
 
 msgid "Street:"
-msgstr ""
+msgstr "Jalan:"
 
 msgid "Post code:"
-msgstr ""
+msgstr "Kode area:"
 
 msgid "Building:"
-msgstr ""
+msgstr "Bangunan"
 
 msgid "Tags:"
 msgstr ""
 
 msgid "Source:"
-msgstr ""
+msgstr "Sumber:"
 
 msgid "Name:"
 msgstr "Nama:"
@@ -29726,21 +29872,20 @@ msgid "create building"
 msgstr ""
 
 msgid "replace building"
-msgstr ""
+msgstr "mengganti bangunan"
 
 msgid "Add address"
 msgid_plural "Add addresses"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Tambah alamat"
 
 msgid "Unable to detect a polygon where you clicked."
-msgstr ""
+msgstr "Tidak dapat mendeteksi poligon ketika anda klik."
 
 msgid "Error Report"
-msgstr ""
+msgstr "Laporan Kesalahan"
 
 msgid "Something went wrong!"
-msgstr ""
+msgstr "Terdapat suatu kesalahan!"
 
 msgid "Please file a bug report on the github project page under"
 msgstr ""
@@ -29776,7 +29921,7 @@ msgid ""
 msgstr ""
 
 msgid "Distance Tolerance"
-msgstr ""
+msgstr "Toleransi jarak"
 
 msgid ""
 "Lines with a smaller angle (degrees) than this will be combined to one line "
@@ -29815,10 +29960,10 @@ msgid "Show Address Dialog after mapping an area"
 msgstr ""
 
 msgid "merge nodes"
-msgstr ""
+msgstr "menggabungkan titik"
 
 msgid "Merge nodes with existing nodes"
-msgstr ""
+msgstr "Menggabungkan titik dengan titik yang sudah ada"
 
 msgid "use austria address helper"
 msgstr ""
@@ -29829,10 +29974,10 @@ msgid ""
 msgstr ""
 
 msgid "Replace existing buildings"
-msgstr ""
+msgstr "Mengganti bangunan yang sudah ada"
 
 msgid "Replace an existing building with the new one."
-msgstr ""
+msgstr "Mengganti bangunan yang sudah ada dengan yang baru"
 
 msgid "Debug"
 msgstr ""
@@ -30183,7 +30328,7 @@ msgid "symbol"
 msgstr "simbol"
 
 msgid "Select to download symbols in the selected download area."
-msgstr ""
+msgstr "Pilih simbol unduh dalam area unduh yang  dipilih"
 
 msgid "Select to download water bodies in the selected download area."
 msgstr ""
@@ -30375,7 +30520,7 @@ msgid "Layers:"
 msgstr "Layer:"
 
 msgid "Sea, rivers, swimming pools."
-msgstr ""
+msgstr "Laut, sungai, kolam renang."
 
 msgid "Buildings, covers, underground constructions."
 msgstr "Bangunan, mencakup, kontruksi bawah tanah."
@@ -30688,7 +30833,7 @@ msgid "Reference only ({0})"
 msgstr ""
 
 msgid "Subject only ({0})"
-msgstr ""
+msgstr "Hanya subjek ({0})"
 
 msgid "Configure"
 msgstr "Konfigurasi"
@@ -30793,7 +30938,7 @@ msgid "below"
 msgstr ""
 
 msgid "Maximum Distance"
-msgstr ""
+msgstr "Jarak maksimum"
 
 msgid "Centroid Distance"
 msgstr ""
@@ -30881,7 +31026,7 @@ msgid "Advanced Example"
 msgstr ""
 
 msgid "<Please select data>"
-msgstr ""
+msgstr "<Silahkan pilih data>"
 
 msgid "Configure conflation settings"
 msgstr ""
@@ -30920,10 +31065,10 @@ msgid "Error freezing selection"
 msgstr ""
 
 msgid "Nothing is selected, please try again."
-msgstr ""
+msgstr "Tidak ada yang dipilih, silahkan coba lagi"
 
 msgid "Empty selection"
-msgstr ""
+msgstr "Pilihan kosong"
 
 msgid "Freeze reference selection"
 msgstr ""
@@ -30941,7 +31086,7 @@ msgid "One to One"
 msgstr ""
 
 msgid "Distance"
-msgstr ""
+msgstr "Jarak"
 
 msgid "Standard"
 msgstr ""
@@ -30956,7 +31101,7 @@ msgid "List of tags to match (default: none)"
 msgstr ""
 
 msgid "Download OSM data continuously"
-msgstr ""
+msgstr "Unduh data OSM terus menerus"
 
 msgid "Download map data continuously when paning and zooming."
 msgstr ""
@@ -30971,7 +31116,7 @@ msgid "Supress the default modal progress monitor when downloading."
 msgstr ""
 
 msgid "Download Settings"
-msgstr ""
+msgstr "Pengaturan unduhan"
 
 msgid "Settings for the continuous download."
 msgstr ""
@@ -31020,7 +31165,7 @@ msgid ""
 msgstr ""
 
 msgid "Max download area"
-msgstr ""
+msgstr "Maksimal area yang diunduh"
 
 msgid "The strategy for finding what areas to request from the server."
 msgstr ""
@@ -31174,7 +31319,7 @@ msgid "not logged in"
 msgstr "tidak login"
 
 msgid "Failed to log in to GeoChat:"
-msgstr ""
+msgstr "Gagal untuk masuk ke GeoChat:"
 
 msgid "Failed to send message:"
 msgstr "Gagal untuk mengirim pesan:"
@@ -31737,7 +31882,7 @@ msgid "Cache name:"
 msgstr ""
 
 msgid "Object count:"
-msgstr ""
+msgstr "Objek terhitung:"
 
 msgid "file system path"
 msgstr ""
@@ -32248,22 +32393,22 @@ msgid ""
 msgstr ""
 
 msgid "Correct"
-msgstr ""
+msgstr "Benar"
 
 msgid "Wrong"
-msgstr ""
+msgstr "Salah"
 
 msgid "<HTML><U>C</U>orrect direction</HTML>"
 msgstr ""
 
 msgid "Direction of river is correct."
-msgstr ""
+msgstr "Arah sungai benar."
 
 msgid "<HTML><U>W</U>rong dirrection</HTML>"
 msgstr ""
 
 msgid "Direction of river is wrong."
-msgstr ""
+msgstr "Arah sungai salah."
 
 msgid "<HTML><U>I</U>gnore this way</HTML>"
 msgstr ""
@@ -32604,24 +32749,6 @@ msgstr "Menggabung garis/way yang bertumpang tindih"
 msgid "Merge Overlap (combine)"
 msgstr "Menggabung yang bertumpang tindih (kombinasi)"
 
-msgid ""
-"<html>A role based relation membership was copied to all new ways.<br>You "
-"should verify this and correct it when necessary.</html>"
-msgstr ""
-"<html>Peranan berdasarkan relasi keanggotaan telah disalin pada seluruh "
-"jalur baru.<br> Anda harus melakukan verifikasi hal ini dan memperbaikinya "
-"jika diperlukan.</html>"
-
-msgid ""
-"<html>A relation membership was copied to all new ways.<br>You should verify "
-"this and correct it when necessary.</html>"
-msgstr ""
-"<html>Relasi keanggotaan telah disalin pada seluruh jalur baru.<br> Anda "
-"harus melakukan verifikasi hal ini dan memperbaikinya jika diperlukan.</html>"
-
-msgid "Split way"
-msgstr "Memisahkan garis/way"
-
 msgid "Michigan Left"
 msgstr "Michigan Left"
 
@@ -33615,7 +33742,7 @@ msgid "Edit Photo GPS Data"
 msgstr ""
 
 msgid "Please select an image first."
-msgstr ""
+msgstr "Pertama silahkan pilih gambar"
 
 msgid "(Empty values delete the according fields.)"
 msgstr ""
@@ -33627,7 +33754,7 @@ msgid "Latitude and longitude"
 msgstr ""
 
 msgid "Edit Image Coordinates"
-msgstr ""
+msgstr "Ubah koordinat gambar"
 
 msgid "Edit coordinates in separate editor"
 msgstr ""
@@ -33867,19 +33994,19 @@ msgstr ""
 "otomatis"
 
 msgid "Point info"
-msgstr ""
+msgstr "Informasi titik"
 
 msgid "Point info."
-msgstr ""
+msgstr "Informasi titik."
 
 msgid "Connecting server"
-msgstr ""
+msgstr "Menghubungkan ke server"
 
 msgid "PointInfo"
 msgstr ""
 
 msgid "Data not available."
-msgstr ""
+msgstr "Data tidak tersedia"
 
 msgid "Add new address point"
 msgstr ""
@@ -33992,7 +34119,7 @@ msgid "Do you want to download referrers of platforms and stop positions?"
 msgstr ""
 
 msgid "Remember my choice and do not ask me again in this session"
-msgstr ""
+msgstr "Ingat pilihan saya dan jangan tanya saya lagi pada sesi ini"
 
 msgid "PT_Assistant Fetch Request"
 msgstr ""
@@ -34057,7 +34184,7 @@ msgid "PT: Relation member roles do not match tags"
 msgstr ""
 
 msgid "Fix error"
-msgstr ""
+msgstr "Betulkan kesalahan"
 
 msgid "PT: dummy test warning"
 msgstr ""
@@ -34133,33 +34260,6 @@ msgstr ""
 msgid "PT: Route passes a oneway road in the wrong direction"
 msgstr ""
 
-msgid "moved"
-msgstr "Telah dipindahkan"
-
-msgid "rail"
-msgstr "rel"
-
-msgid "Can''t parse a time from this string."
-msgstr "Tidak bisa mengurai waktu dari string ini"
-
-msgid "Invalid value"
-msgstr "Nilai tidak benar"
-
-msgid "added"
-msgstr "Menambahkan"
-
-msgid "Public Transport: Enable GTFSStops"
-msgstr "Transportasi Umum: Aktifkan GTFSStops"
-
-msgid "Public Transport: Catch GTFS stops"
-msgstr "Transportasi Umum: Tangkap GTFS stops"
-
-msgid "skipped"
-msgstr "Dilewatkan"
-
-msgid "Public Transport: Disable GTFS"
-msgstr "Transportasi Umum: Matikan GTFS"
-
 msgid "Create Stops from GTFS ..."
 msgstr "Buat pemberhentian dari GTFS..."
 
@@ -34188,69 +34288,9 @@ msgstr "Data tidak ditemukan"
 msgid "The GTFS file was empty."
 msgstr "Berkas GTFS telah kosong"
 
-msgid "Create Stops from GTFS"
-msgstr "Buat pemberhentian dari GTFS"
-
-msgid "GTFS-Stops"
-msgstr "Pemberhentian-GTFS"
-
-msgid "Type of stops to add"
-msgstr "Tipe dari pemberhentian yang akan ditambahkan"
-
-msgid "Time on your GPS device"
-msgstr "Waktu pada perangkat GPS anda"
-
-msgid "HH:MM:SS.sss"
-msgstr "JJ:MM:DD.ddd"
-
-msgid "Time on your stopwatch"
-msgstr "Waktu pada stopwatch anda"
-
-msgid "Time window"
-msgstr "Jendela waktu"
-
-msgid "seconds"
-msgstr "detik"
-
-msgid "Move Threshold"
-msgstr "Ambang pergerakan"
-
-msgid "Suggest Stops"
-msgstr "Saran Pemberhentian"
-
-msgid "Find"
-msgstr "Cari"
-
-msgid "Show"
-msgstr "Tunjukkan"
-
-msgid "Mark"
-msgstr "Tandai"
-
-msgid "Catch"
-msgstr "Ambil"
-
-msgid "Join"
-msgstr "Gabung"
-
-msgid "Public Transport: Join GTFS stops"
-msgstr "Transportasi Umumr: Gabungkan pemberhentian GTFS"
-
-msgid "State"
-msgstr "Negara Bagian / Provinsi"
-
-msgid "[incomplete]"
-msgstr "[Tidak Lengkap]"
-
-msgid "[empty way]"
-msgstr "[way/garis kosong]"
-
 msgid "[ID] {0}"
 msgstr "[ID] {0}"
 
-msgid "[gap]"
-msgstr "[gap]"
-
 msgid "Route patterns ..."
 msgstr "Pola rute..."
 
@@ -34293,6 +34333,15 @@ msgstr "Tambahkan sebuah tag baru"
 msgid "Name/Id"
 msgstr "Nama/Id"
 
+msgid "Find"
+msgstr "Cari"
+
+msgid "Show"
+msgstr "Tunjukkan"
+
+msgid "Mark"
+msgstr "Tandai"
+
 msgid "Ref"
 msgstr "Referensi"
 
@@ -34308,11 +34357,8 @@ msgstr "Kemudi sisi kiri"
 msgid "Maximum distance from route"
 msgstr "Jarak maksimum dari rute"
 
-msgid " [ID] {0}"
-msgstr " [ID] {0}"
-
-msgid "Public Transport: Change stop type"
-msgstr "Transportasi umum: Uban tipe pemberhentian"
+msgid "Suggest Stops"
+msgstr "Saran Pemberhentian"
 
 msgid "Create Stops from GPX ..."
 msgstr "Membuat pemberhentian dari GPX ..."
@@ -34326,30 +34372,29 @@ msgstr "Pilih file GPX"
 msgid "The GPX file contained no tracks or waypoints."
 msgstr "File GPX tidak memiliki trek ataupun waypoint"
 
-msgid "Create Stops from GPX"
-msgstr "Membuat pemberhentian dari GPX"
+msgid "moved"
+msgstr "Telah dipindahkan"
 
-msgid "Tracks in this GPX file:"
-msgstr "Trek pada file GPX ini:"
+msgid "added"
+msgstr "Menambahkan"
 
-msgid "Detach"
-msgstr "Melepaskan"
+msgid "Public Transport: Enable GTFSStops"
+msgstr "Transportasi Umum: Aktifkan GTFSStops"
 
-msgid "implicit"
-msgstr "Implisit"
+msgid "Public Transport: Catch GTFS stops"
+msgstr "Transportasi Umum: Tangkap GTFS stops"
 
-msgid ""
-"The GPX file doesn''t contain valid trackpoints. Please use a GPX file that "
-"has trackpoints."
-msgstr ""
-"Berkas GPX tidak mengandung trackpoints yang valid. Harap gunakan berkas GPX "
-"yang mempunyai trackpoints"
+msgid "skipped"
+msgstr "Dilewatkan"
 
-msgid "GPX File Trouble"
-msgstr "Berkas GPX bermasalah"
+msgid "Public Transport: Disable GTFS"
+msgstr "Transportasi Umum: Matikan GTFS"
 
-msgid "unnamed"
-msgstr "tanpa nama"
+msgid "Public Transport: Join GTFS stops"
+msgstr "Transportasi Umumr: Gabungkan pemberhentian GTFS"
+
+msgid "Public Transport: Change stop type"
+msgstr "Transportasi umum: Uban tipe pemberhentian"
 
 msgid "Public Transport: Add track stop"
 msgstr "Transportasi Umumr: Menambahkan trek berhenti"
@@ -34372,9 +34417,6 @@ msgstr "Transportasi umum: urutkan daftar berhenti trek"
 msgid "Public Transport: Suggest stops"
 msgstr "Transportasi umum: diminta untuk berhenti"
 
-msgid "Stopname"
-msgstr "Nama pemberhentian"
-
 msgid "Public Transport: Detach waypoints"
 msgstr "Transportasi umum: Lepaskan waypoint"
 
@@ -34387,8 +34429,93 @@ msgstr "Transportasi Umum: mengaktifkan waypoint"
 msgid "Public Transport: Edit waypoint name"
 msgstr "Transportasi Umum: Edit nama waypoint"
 
-msgid "Distance between stops"
+msgid "rail"
+msgstr "rel"
+
+msgid "Can''t parse a time from this string."
+msgstr "Tidak bisa mengurai waktu dari string ini"
+
+msgid "Invalid value"
+msgstr "Nilai tidak benar"
+
+msgid "Create Stops from GTFS"
+msgstr "Buat pemberhentian dari GTFS"
+
+msgid "GTFS-Stops"
+msgstr "Pemberhentian-GTFS"
+
+msgid "Type of stops to add"
+msgstr "Tipe dari pemberhentian yang akan ditambahkan"
+
+msgid "Time on your GPS device"
+msgstr "Waktu pada perangkat GPS anda"
+
+msgid "HH:MM:SS.sss"
+msgstr "JJ:MM:DD.ddd"
+
+msgid "Time on your stopwatch"
+msgstr "Waktu pada stopwatch anda"
+
+msgid "Time window"
+msgstr "Jendela waktu"
+
+msgid "seconds"
+msgstr "detik"
+
+msgid "Move Threshold"
+msgstr "Ambang pergerakan"
+
+msgid "Catch"
+msgstr "Ambil"
+
+msgid "Join"
+msgstr "Gabung"
+
+msgid "Create Stops from GPX"
+msgstr "Membuat pemberhentian dari GPX"
+
+msgid "Tracks in this GPX file:"
+msgstr "Trek pada file GPX ini:"
+
+msgid "Detach"
+msgstr "Melepaskan"
+
+msgid "implicit"
+msgstr "Implisit"
+
+msgid "State"
+msgstr "Negara Bagian / Provinsi"
+
+msgid "[incomplete]"
+msgstr "[Tidak Lengkap]"
+
+msgid "[empty way]"
+msgstr "[way/garis kosong]"
+
+msgid "[gap]"
+msgstr "[gap]"
+
+msgid "Stopname"
+msgstr "Nama pemberhentian"
+
+msgid " [ID] {0}"
+msgstr " [ID] {0}"
+
+msgid ""
+"The GPX file doesn''t contain valid trackpoints. Please use a GPX file that "
+"has trackpoints."
 msgstr ""
+"Berkas GPX tidak mengandung trackpoints yang valid. Harap gunakan berkas GPX "
+"yang mempunyai trackpoints"
+
+msgid "GPX File Trouble"
+msgstr "Berkas GPX bermasalah"
+
+msgid "unnamed"
+msgstr "tanpa nama"
+
+msgid "Distance between stops"
+msgstr "Jarak antar pemberhentian"
 
 msgid "A valid public_transport:version=2 route is required"
 msgstr ""
@@ -34397,7 +34524,7 @@ msgid "Invalid selection"
 msgstr "Pilihan tidak valid"
 
 msgid "Public transport routes"
-msgstr ""
+msgstr "Rute transportasi umum"
 
 msgid "Toggle direction arrows"
 msgstr ""
@@ -34907,13 +35034,13 @@ msgid "Seamark Inspector"
 msgstr ""
 
 msgid "Select only one object"
-msgstr ""
+msgstr "Pilih hanya satu objek"
 
 msgid "Select a map object"
-msgstr ""
+msgstr "Pilih objek peta"
 
 msgid "Please enter minimal distance in metres"
-msgstr ""
+msgstr "Silahkan masukan minimum jarak dalam meter"
 
 msgid "Please enter numeric angle in degrees"
 msgstr ""
@@ -34928,10 +35055,10 @@ msgid "Rotate Mode:"
 msgstr ""
 
 msgid "Clockwise"
-msgstr ""
+msgstr "Searah jarum jam"
 
 msgid "Counter Clockwise"
-msgstr ""
+msgstr "Berlawanan arah jarum jam"
 
 msgid "Input angle here"
 msgstr ""
@@ -34943,10 +35070,10 @@ msgid "Align building "
 msgstr ""
 
 msgid "Select building"
-msgstr ""
+msgstr "Pilih bangunan"
 
 msgid "Select road"
-msgstr ""
+msgstr "Pilih jalan"
 
 msgid "Select none"
 msgstr ""
@@ -34958,7 +35085,7 @@ msgid "Input min distance"
 msgstr ""
 
 msgid "Align all buildings"
-msgstr ""
+msgstr "Meluruskan semua bangunan"
 
 msgid "Delete overlay"
 msgstr ""
@@ -35150,6 +35277,9 @@ msgstr "Jalankan dialog editor tag"
 msgid "JOSM Tag Editor Plugin"
 msgstr "Plugin Editor Tag JOSM"
 
+msgid "Presets"
+msgstr "Presets"
+
 msgid "Abort tag editing and close dialog"
 msgstr "Keluar dari editing tag dan tutup dialog"
 
@@ -35284,10 +35414,10 @@ msgid "Open the todo list."
 msgstr ""
 
 msgid "Zoom to the selected item in the todo list."
-msgstr ""
+msgstr "Perbesar item yang dipilih dalam daftar yang harus dikerjakan"
 
 msgid "Select all Unmarked and Zoom"
-msgstr ""
+msgstr "Pilih semua yang tidak ditandai dan perbesar"
 
 msgid "Select and zoom to all of the unmarked items in the todo list."
 msgstr ""
@@ -35315,6 +35445,7 @@ msgstr ""
 
 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 ""
@@ -35323,7 +35454,7 @@ msgid "Unmark all items in the todo list that have been marked as done."
 msgstr ""
 
 msgid "Clear the todo list"
-msgstr ""
+msgstr "Kosongkan daftar yang harus dikerjakan"
 
 msgid "Remove all items (marked and unmarked) from the todo list."
 msgstr ""
@@ -35356,7 +35487,7 @@ msgid "Skip"
 msgstr ""
 
 msgid "Skip Error"
-msgstr ""
+msgstr "Lewati kesalahan"
 
 msgid "Fixed"
 msgstr ""
@@ -35365,7 +35496,7 @@ msgid "Fixed Error"
 msgstr ""
 
 msgid "Not an error"
-msgstr ""
+msgstr "Bukan kesalahan"
 
 msgid "<html><a href=\"\">List of tasks</a></html>"
 msgstr ""
@@ -35418,10 +35549,10 @@ msgid ""
 msgstr ""
 
 msgid "Something went wrong, try again"
-msgstr ""
+msgstr "Terdapat sesuatu yang salah, coba lagi"
 
 msgid "No change to upload!"
-msgstr ""
+msgstr "Tidak ada perubahan untuk diunggah"
 
 msgid "The bounding box is too big."
 msgstr ""
@@ -35510,7 +35641,7 @@ msgid "Delete parameter \"{0}\"?"
 msgstr ""
 
 msgid "Add new"
-msgstr ""
+msgstr "Tambah baru"
 
 msgid "Add predefined"
 msgstr ""
@@ -35522,7 +35653,7 @@ msgid "Modify list of parameter for server request."
 msgstr ""
 
 msgid "Parameter:"
-msgstr ""
+msgstr "Acuan:"
 
 msgid ""
 "Tracer2Server isn''t running. Please start the Server.\n"
@@ -36724,7 +36855,7 @@ msgid "Opens specified URL browser"
 msgstr "Bukan browser URL spesifik"
 
 msgid "Utilsplugin2 settings"
-msgstr ""
+msgstr "Pengaturan *Utilspugin2*"
 
 msgid "Here you can change some preferences of Utilsplugin2 functions"
 msgstr "Disini anda dapat mengganti pengaturan dari fungsi Utilsplugin2"
@@ -36810,7 +36941,7 @@ msgid "Tag multiple objects [alpha]"
 msgstr ""
 
 msgid "Edit tags of object list in table"
-msgstr ""
+msgstr "Perbaiki *tags* dari daftar objek pada tabel"
 
 msgid "Tag multiple objects"
 msgstr ""
@@ -36819,10 +36950,10 @@ msgid "Sync with JOSM selection"
 msgstr ""
 
 msgid "Zoom to objects"
-msgstr ""
+msgstr "Perbesar ke objek"
 
 msgid "Remove tag"
-msgstr ""
+msgstr "Hapus tag"
 
 msgid "Delete tags from multiple objects"
 msgstr ""
@@ -36834,7 +36965,7 @@ msgid "Set tags for multiple objects"
 msgstr ""
 
 msgid "Delete from history"
-msgstr ""
+msgstr "Hapus dari riwayat"
 
 msgid "Find primitives with these tags"
 msgstr ""
@@ -36904,8 +37035,7 @@ msgstr ""
 
 msgid "Replaced ''{0}'' by ''{1}'' in {2} relation"
 msgid_plural "Replaced ''{0}'' by ''{1}'' in {2} relations"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Ganti \"{0}\"dengan \"{1}\"dalam {2} *relation*"
 
 msgid "The first selected object ''{0}'' is not part of any relation"
 msgstr ""
@@ -37273,6 +37403,26 @@ msgid_plural "Overwrite ''{0}'' tags {1} from {2} with new value ''{3}''?"
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Download from Sophox API"
+msgstr ""
+
+msgid ""
+"Find places of education at least 2km, and at most 3km from the center of "
+"the selection"
+msgstr ""
+
+msgid "Show/hide Sophox snippet list"
+msgstr ""
+
+msgid "help"
+msgstr ""
+
+msgid "Server: "
+msgstr ""
+
+msgid "Wikidata+OSM server"
+msgstr ""
+
 msgid "Search Wikidata items"
 msgstr ""
 
@@ -37349,26 +37499,6 @@ msgstr ""
 "Menambahkan tag \"wikipedia\" terkait dengan artikel ini kepada objek yang "
 "dipilih"
 
-msgid "Download from Wikosm API"
-msgstr ""
-
-msgid ""
-"Find places of education at least 2km, and at most 3km from the center of "
-"the selection"
-msgstr ""
-
-msgid "Show/hide Wikosm snippet list"
-msgstr ""
-
-msgid "help"
-msgstr ""
-
-msgid "Server: "
-msgstr ""
-
-msgid "Wikidata+OSM server"
-msgstr ""
-
 msgid "The Ultimate WMS Super-speed Turbo Challenge II"
 msgstr "The Ultimate WMS Super-speed Turbo Challenge II"
 
diff --git a/i18n/po/is.po b/i18n/po/is.po
index 675badf..4121f6b 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-10-30 03:38+0100\n"
+"POT-Creation-Date: 2017-11-26 00:06+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-10-30 04:47+0000\n"
-"X-Generator: Launchpad (build 18493)\n"
+"X-Launchpad-Export-Date: 2017-11-26 04:48+0000\n"
+"X-Generator: Launchpad (build 18509)\n"
 "Language: is\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -427,12 +427,15 @@ msgstr ""
 msgid "Delete the active layer. Does not delete the associated file."
 msgstr ""
 
-msgid "Toggle dialogs panel"
+msgid "Dialogs panel"
 msgstr ""
 
 msgid "Toggle dialogs panel, maximize mapview"
 msgstr ""
 
+msgid "Toggle dialogs panel"
+msgstr ""
+
 msgid "Distribute Nodes"
 msgstr ""
 
@@ -6509,6 +6512,9 @@ msgstr ""
 msgid "Coordinates (projected): "
 msgstr ""
 
+msgid "UTM Zone"
+msgstr ""
+
 msgid "Part of: "
 msgstr ""
 
@@ -8814,6 +8820,11 @@ msgstr ""
 msgid "Check \"Save\" to save the layer to the file specified on the left."
 msgstr ""
 
+msgid ""
+"A background upload is already in progress. Kindly wait for it to finish "
+"before uploading new changes"
+msgstr ""
+
 msgid "I would like someone to review my edits."
 msgstr ""
 
@@ -9929,6 +9940,9 @@ msgstr ""
 msgid "Save Layer"
 msgstr ""
 
+msgid "Trying to set a read only data layer as edit layer"
+msgstr ""
+
 msgid "{0} note"
 msgid_plural "{0} notes"
 msgstr[0] ""
@@ -10759,11 +10773,6 @@ msgstr ""
 msgid "Failed to parse Mappaint styles from ''{0}''. Error was: {1}"
 msgstr ""
 
-msgid ""
-"Detected deprecated ''{0}'' in ''{1}'' which will be removed shortly. Use "
-"''{2}'' instead."
-msgstr ""
-
 msgid "Failed to locate image ''{0}''"
 msgstr ""
 
@@ -11934,6 +11943,9 @@ msgstr ""
 msgid "Show object ID in selection lists"
 msgstr "Sýna kenni hluta í vallistum"
 
+msgid "Show node coordinates in selection lists"
+msgstr ""
+
 msgid "Show localized name in selection lists"
 msgstr ""
 
@@ -12694,9 +12706,6 @@ msgstr ""
 msgid "UTM"
 msgstr ""
 
-msgid "UTM Zone"
-msgstr ""
-
 msgid "North"
 msgstr ""
 
@@ -13164,9 +13173,6 @@ msgstr ""
 msgid "Error parsing {0}: "
 msgstr ""
 
-msgid "Presets"
-msgstr "Forstillingar"
-
 msgid "Search for objects by preset..."
 msgstr ""
 
@@ -15714,6 +15720,18 @@ msgstr ""
 msgid "korean"
 msgstr ""
 
+msgid "donut"
+msgstr ""
+
+msgid "mediterranean"
+msgstr ""
+
+msgid "friture"
+msgstr ""
+
+msgid "crepe"
+msgstr ""
+
 msgid "Internet access"
 msgstr ""
 
@@ -18556,8 +18574,17 @@ msgstr ""
 msgid "Tents allowed"
 msgstr ""
 
-msgid "Camping Site"
-msgstr "Tjaldstæði"
+msgid "Campsite"
+msgstr ""
+
+msgid "Caravans allowed"
+msgstr ""
+
+msgid "Backcountry"
+msgstr ""
+
+msgid "Group only access"
+msgstr ""
 
 msgid "Food+Drinks"
 msgstr "Matur & Drykkur"
@@ -23385,6 +23412,14 @@ msgid ""
 "resolution or better, and refreshed more frequently with ongoing updates."
 msgstr ""
 
+msgid "DigitalGlobe Premium Imagery Vintage"
+msgstr ""
+
+msgid ""
+"Imagery boundaries and capture dates. Labels appear at zoom level 14 and "
+"higher."
+msgstr ""
+
 msgid "DigitalGlobe Standard Imagery"
 msgstr ""
 
@@ -23394,6 +23429,9 @@ msgid ""
 "Landsat. Average age is 2.31 years, with some areas updated 2x per year."
 msgstr ""
 
+msgid "DigitalGlobe Standard Imagery Vintage"
+msgstr ""
+
 msgid "Esri World Imagery"
 msgstr ""
 
@@ -23457,6 +23495,12 @@ msgstr ""
 msgid "Strava cycling and running heatmap"
 msgstr ""
 
+msgid "Strava water sports heatmap"
+msgstr ""
+
+msgid "Strava winter sports heatmap"
+msgstr ""
+
 msgid "Locator Overlay"
 msgstr ""
 
@@ -23861,6 +23905,9 @@ msgstr ""
 msgid "SPW(allonie) most recent aerial imagery"
 msgstr ""
 
+msgid "SPW(allonie) 2016 aerial imagery"
+msgstr ""
+
 msgid "SPW(allonie) 2015 aerial imagery"
 msgstr ""
 
@@ -23906,6 +23953,14 @@ msgstr ""
 msgid "Addresses data from IBGE"
 msgstr ""
 
+msgid "Street names IBGE Salvador-BA"
+msgstr ""
+
+msgid ""
+"Streets geometry and names of Salvador, Bahia. Source: Faces de Logradouro - "
+"IBGE."
+msgstr ""
+
 msgid "Rio Mosaic 2013"
 msgstr ""
 
@@ -24636,6 +24691,9 @@ msgstr ""
 msgid "Japan GSI ortho Imagery"
 msgstr ""
 
+msgid "Japan GSI Standard Map"
+msgstr ""
+
 msgid "imagico.de OSM images for mapping: Aral Sea (low water level)"
 msgstr ""
 
@@ -24665,7 +24723,7 @@ msgstr ""
 msgid "20cm ortho - Latvia - Coastline"
 msgstr ""
 
-msgid "1.cikla ortofotokarte - Latvia"
+msgid "Orthophoto 1st cycle (1994-1999) - Latvia"
 msgstr ""
 
 msgid "ORT10LT (Lithuania)"
@@ -24674,6 +24732,9 @@ msgstr ""
 msgid "geoportail.lu all layers"
 msgstr ""
 
+msgid "geoportail.lu ortho latest"
+msgstr ""
+
 msgid "geoportail.lu ortho 2016"
 msgstr ""
 
@@ -26164,6 +26225,9 @@ msgstr ""
 msgid "{0} on a node. Should be used on a way."
 msgstr ""
 
+msgid "{0} on a node. Should be used on a way or relation."
+msgstr ""
+
 msgid "{0} on a node. Should be drawn as an area."
 msgstr ""
 
@@ -26391,6 +26455,9 @@ msgstr ""
 msgid "Nodes duplicating parent way tags"
 msgstr ""
 
+msgid "{0} together with {1} and {2}. Remove {0}."
+msgstr ""
+
 msgid ""
 "wikipedia tag has no language given, use ''wikipedia''=''language:page "
 "title''"
@@ -27156,6 +27223,21 @@ msgstr ""
 msgid "Importing..."
 msgstr ""
 
+msgid "Shape is started incorrectly"
+msgstr ""
+
+msgid "Can''t load SVG diagram"
+msgstr ""
+
+msgid "Can''t find root SVG element"
+msgstr ""
+
+msgid "Import primitives"
+msgstr ""
+
+msgid "Cannot find configuration file!"
+msgstr ""
+
 msgid "DXF files [ImportDxf plugin] (*.dxf)"
 msgstr ""
 
@@ -27795,6 +27877,9 @@ msgstr ""
 msgid "Download mode"
 msgstr ""
 
+msgid "Number of images to be pre-fetched (forwards and backwards)"
+msgstr ""
+
 msgid "You are logged in as ''{0}''."
 msgstr ""
 
@@ -28005,8 +28090,17 @@ msgid "only when manually requested"
 msgstr ""
 
 msgid ""
-"The downloaded OSM area is too big. Download mode has been changed to OSM "
-"area until the layer is restarted."
+"The Mapillary layer has stopped downloading images, because the requested "
+"area is too big!"
+msgstr ""
+
+msgid ""
+"To solve this problem, you could zoom in and load a smaller area of the map."
+msgstr ""
+
+msgid ""
+"To solve this problem, you could switch to download mode ''{0}'' and load "
+"Mapillary images for a smaller portion of the map."
 msgstr ""
 
 msgid "Downloading"
@@ -31318,19 +31412,6 @@ msgstr ""
 msgid "Merge Overlap (combine)"
 msgstr ""
 
-msgid ""
-"<html>A role based relation membership was copied to all new ways.<br>You "
-"should verify this and correct it when necessary.</html>"
-msgstr ""
-
-msgid ""
-"<html>A relation membership was copied to all new ways.<br>You should verify "
-"this and correct it when necessary.</html>"
-msgstr ""
-
-msgid "Split way"
-msgstr ""
-
 msgid "Michigan Left"
 msgstr ""
 
@@ -32785,255 +32866,255 @@ msgstr ""
 msgid "PT: Route passes a oneway road in the wrong direction"
 msgstr ""
 
-msgid "moved"
+msgid "Create Stops from GTFS ..."
 msgstr ""
 
-msgid "rail"
+msgid "Create Stops from a GTFS file"
 msgstr ""
 
-msgid "Can''t parse a time from this string."
+msgid "Select GTFS file (stops.txt)"
 msgstr ""
 
-msgid "Invalid value"
+msgid "File \"{0}\" does not exist"
 msgstr ""
 
-msgid "added"
+msgid "IOException \"{0}\" occurred"
 msgstr ""
 
-msgid "Public Transport: Enable GTFSStops"
+msgid ""
+"There exists no dataset. Try to download data from the server or open an OSM "
+"file."
 msgstr ""
 
-msgid "Public Transport: Catch GTFS stops"
+msgid "No data found"
 msgstr ""
 
-msgid "skipped"
+msgid "The GTFS file was empty."
 msgstr ""
 
-msgid "Public Transport: Disable GTFS"
+msgid "[ID] {0}"
 msgstr ""
 
-msgid "Create Stops from GTFS ..."
+msgid "Route patterns ..."
 msgstr ""
 
-msgid "Create Stops from a GTFS file"
+msgid "Edit Route patterns for public transport"
 msgstr ""
 
-msgid "Select GTFS file (stops.txt)"
+msgid "Route Patterns"
 msgstr ""
 
-msgid "File \"{0}\" does not exist"
+msgid "Overview"
 msgstr ""
 
-msgid "IOException \"{0}\" occurred"
+msgid "Itinerary"
 msgstr ""
 
-msgid ""
-"There exists no dataset. Try to download data from the server or open an OSM "
-"file."
+msgid "Stops"
 msgstr ""
 
-msgid "No data found"
+msgid "Meta"
 msgstr ""
 
-msgid "The GTFS file was empty."
+msgid "Existing route patterns:"
 msgstr ""
 
-msgid "Create Stops from GTFS"
+msgid "Reflect"
 msgstr ""
 
-msgid "GTFS-Stops"
+msgid "Required tags:"
 msgstr ""
 
-msgid "Type of stops to add"
+msgid "Common tags:"
 msgstr ""
 
-msgid "Time on your GPS device"
+msgid "Additional tags:"
 msgstr ""
 
-msgid "HH:MM:SS.sss"
+msgid "Add a new Tag"
 msgstr ""
 
-msgid "Time on your stopwatch"
+msgid "Name/Id"
 msgstr ""
 
-msgid "Time window"
+msgid "Find"
 msgstr ""
 
-msgid "seconds"
-msgstr ""
+msgid "Show"
+msgstr "Sýna"
 
-msgid "Move Threshold"
+msgid "Mark"
 msgstr ""
 
-msgid "Suggest Stops"
+msgid "Ref"
 msgstr ""
 
-msgid "Find"
+msgid "Stops are possible on the"
 msgstr ""
 
-msgid "Show"
-msgstr "Sýna"
-
-msgid "Mark"
+msgid "right hand side"
 msgstr ""
 
-msgid "Catch"
+msgid "left hand side"
 msgstr ""
 
-msgid "Join"
+msgid "Maximum distance from route"
 msgstr ""
 
-msgid "Public Transport: Join GTFS stops"
+msgid "Suggest Stops"
 msgstr ""
 
-msgid "State"
-msgstr "Fylki"
+msgid "Create Stops from GPX ..."
+msgstr ""
 
-msgid "[incomplete]"
+msgid "Create Stops from a GPX file"
 msgstr ""
 
-msgid "[empty way]"
+msgid "Select GPX file"
 msgstr ""
 
-msgid "[ID] {0}"
+msgid "The GPX file contained no tracks or waypoints."
 msgstr ""
 
-msgid "[gap]"
+msgid "moved"
 msgstr ""
 
-msgid "Route patterns ..."
+msgid "added"
 msgstr ""
 
-msgid "Edit Route patterns for public transport"
+msgid "Public Transport: Enable GTFSStops"
 msgstr ""
 
-msgid "Route Patterns"
+msgid "Public Transport: Catch GTFS stops"
 msgstr ""
 
-msgid "Overview"
+msgid "skipped"
 msgstr ""
 
-msgid "Itinerary"
+msgid "Public Transport: Disable GTFS"
 msgstr ""
 
-msgid "Stops"
+msgid "Public Transport: Join GTFS stops"
 msgstr ""
 
-msgid "Meta"
+msgid "Public Transport: Change stop type"
 msgstr ""
 
-msgid "Existing route patterns:"
+msgid "Public Transport: Add track stop"
 msgstr ""
 
-msgid "Reflect"
+msgid "Public Transport: Delete track stop"
 msgstr ""
 
-msgid "Required tags:"
+msgid "Public Transport: Detach track stop list"
 msgstr ""
 
-msgid "Common tags:"
+msgid "Public Transport: Edit track stop list"
 msgstr ""
 
-msgid "Additional tags:"
+msgid "Public Transport: Relocate nodes in track stoplist"
 msgstr ""
 
-msgid "Add a new Tag"
+msgid "Public Transport: sort track stop list"
 msgstr ""
 
-msgid "Name/Id"
+msgid "Public Transport: Suggest stops"
 msgstr ""
 
-msgid "Ref"
+msgid "Public Transport: Detach waypoints"
 msgstr ""
 
-msgid "Stops are possible on the"
+msgid "Public Transport: Disable waypoints"
 msgstr ""
 
-msgid "right hand side"
+msgid "Public Transport: Enable waypoints"
 msgstr ""
 
-msgid "left hand side"
+msgid "Public Transport: Edit waypoint name"
 msgstr ""
 
-msgid "Maximum distance from route"
+msgid "rail"
 msgstr ""
 
-msgid " [ID] {0}"
+msgid "Can''t parse a time from this string."
 msgstr ""
 
-msgid "Public Transport: Change stop type"
+msgid "Invalid value"
 msgstr ""
 
-msgid "Create Stops from GPX ..."
+msgid "Create Stops from GTFS"
 msgstr ""
 
-msgid "Create Stops from a GPX file"
+msgid "GTFS-Stops"
 msgstr ""
 
-msgid "Select GPX file"
+msgid "Type of stops to add"
 msgstr ""
 
-msgid "The GPX file contained no tracks or waypoints."
+msgid "Time on your GPS device"
 msgstr ""
 
-msgid "Create Stops from GPX"
+msgid "HH:MM:SS.sss"
 msgstr ""
 
-msgid "Tracks in this GPX file:"
+msgid "Time on your stopwatch"
 msgstr ""
 
-msgid "Detach"
+msgid "Time window"
 msgstr ""
 
-msgid "implicit"
+msgid "seconds"
 msgstr ""
 
-msgid ""
-"The GPX file doesn''t contain valid trackpoints. Please use a GPX file that "
-"has trackpoints."
+msgid "Move Threshold"
 msgstr ""
 
-msgid "GPX File Trouble"
+msgid "Catch"
 msgstr ""
 
-msgid "unnamed"
-msgstr "ónefnt"
+msgid "Join"
+msgstr ""
 
-msgid "Public Transport: Add track stop"
+msgid "Create Stops from GPX"
 msgstr ""
 
-msgid "Public Transport: Delete track stop"
+msgid "Tracks in this GPX file:"
 msgstr ""
 
-msgid "Public Transport: Detach track stop list"
+msgid "Detach"
 msgstr ""
 
-msgid "Public Transport: Edit track stop list"
+msgid "implicit"
 msgstr ""
 
-msgid "Public Transport: Relocate nodes in track stoplist"
+msgid "State"
+msgstr "Fylki"
+
+msgid "[incomplete]"
 msgstr ""
 
-msgid "Public Transport: sort track stop list"
+msgid "[empty way]"
 msgstr ""
 
-msgid "Public Transport: Suggest stops"
+msgid "[gap]"
 msgstr ""
 
 msgid "Stopname"
 msgstr ""
 
-msgid "Public Transport: Detach waypoints"
+msgid " [ID] {0}"
 msgstr ""
 
-msgid "Public Transport: Disable waypoints"
+msgid ""
+"The GPX file doesn''t contain valid trackpoints. Please use a GPX file that "
+"has trackpoints."
 msgstr ""
 
-msgid "Public Transport: Enable waypoints"
+msgid "GPX File Trouble"
 msgstr ""
 
-msgid "Public Transport: Edit waypoint name"
-msgstr ""
+msgid "unnamed"
+msgstr "ónefnt"
 
 msgid "Distance between stops"
 msgstr ""
@@ -33761,6 +33842,9 @@ msgstr ""
 msgid "JOSM Tag Editor Plugin"
 msgstr ""
 
+msgid "Presets"
+msgstr "Forstillingar"
+
 msgid "Abort tag editing and close dialog"
 msgstr ""
 
@@ -35686,6 +35770,26 @@ msgid_plural "Overwrite ''{0}'' tags {1} from {2} with new value ''{3}''?"
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Download from Sophox API"
+msgstr ""
+
+msgid ""
+"Find places of education at least 2km, and at most 3km from the center of "
+"the selection"
+msgstr ""
+
+msgid "Show/hide Sophox snippet list"
+msgstr ""
+
+msgid "help"
+msgstr ""
+
+msgid "Server: "
+msgstr ""
+
+msgid "Wikidata+OSM server"
+msgstr ""
+
 msgid "Search Wikidata items"
 msgstr ""
 
@@ -35759,26 +35863,6 @@ msgid ""
 "objects"
 msgstr ""
 
-msgid "Download from Wikosm API"
-msgstr ""
-
-msgid ""
-"Find places of education at least 2km, and at most 3km from the center of "
-"the selection"
-msgstr ""
-
-msgid "Show/hide Wikosm snippet list"
-msgstr ""
-
-msgid "help"
-msgstr ""
-
-msgid "Server: "
-msgstr ""
-
-msgid "Wikidata+OSM server"
-msgstr ""
-
 msgid "The Ultimate WMS Super-speed Turbo Challenge II"
 msgstr ""
 
diff --git a/i18n/po/it.po b/i18n/po/it.po
index df7d8cf..eaddaec 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-10-30 03:38+0100\n"
+"POT-Creation-Date: 2017-11-26 00:06+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-10-30 04:49+0000\n"
-"X-Generator: Launchpad (build 18493)\n"
+"X-Launchpad-Export-Date: 2017-11-26 04:50+0000\n"
+"X-Generator: Launchpad (build 18509)\n"
 "Language: it\n"
 "X-Language: it_IT\n"
 "X-Source-Language: en\n"
@@ -451,12 +451,15 @@ msgstr "Elimina livello"
 msgid "Delete the active layer. Does not delete the associated file."
 msgstr "Elimina il livello attivo. Non elimina il file associato."
 
-msgid "Toggle dialogs panel"
-msgstr "Commuta pannello finestre"
+msgid "Dialogs panel"
+msgstr ""
 
 msgid "Toggle dialogs panel, maximize mapview"
 msgstr "Commuta pannello finestre, massimizza visualizzazione mappa"
 
+msgid "Toggle dialogs panel"
+msgstr "Commuta pannello finestre"
+
 msgid "Distribute Nodes"
 msgstr "Distribuisci i nodi"
 
@@ -7145,6 +7148,9 @@ msgstr "Coordinate: "
 msgid "Coordinates (projected): "
 msgstr "Coordinate (proiezione): "
 
+msgid "UTM Zone"
+msgstr "Zona UTM"
+
 msgid "Part of: "
 msgstr "Parte di: "
 
@@ -9726,6 +9732,11 @@ msgid "Check \"Save\" to save the layer to the file specified on the left."
 msgstr ""
 "Scegli \"Salva\" per salvare il livello nel file specificato a sinistra."
 
+msgid ""
+"A background upload is already in progress. Kindly wait for it to finish "
+"before uploading new changes"
+msgstr ""
+
 msgid "I would like someone to review my edits."
 msgstr "Vorrei che qualcuno controllasse queste modifiche"
 
@@ -10998,6 +11009,9 @@ msgstr "Impostare una nuova proiezione o rimuovere il livello."
 msgid "Save Layer"
 msgstr "Salva livello"
 
+msgid "Trying to set a read only data layer as edit layer"
+msgstr ""
+
 msgid "{0} note"
 msgid_plural "{0} notes"
 msgstr[0] "{0} note"
@@ -11896,11 +11910,6 @@ msgid "Failed to parse Mappaint styles from ''{0}''. Error was: {1}"
 msgstr ""
 "Fallita l''analisi degli stili Mappaint da ''{0}''. L''errore è stato: {1}"
 
-msgid ""
-"Detected deprecated ''{0}'' in ''{1}'' which will be removed shortly. Use "
-"''{2}'' instead."
-msgstr ""
-
 msgid "Failed to locate image ''{0}''"
 msgstr "Impossibile trovare l''immagine ''{0}''"
 
@@ -13262,6 +13271,9 @@ msgstr "Mostra la finestra di avvio"
 msgid "Show object ID in selection lists"
 msgstr "Mostra l''ID dell''oggetto nelle liste di selezione"
 
+msgid "Show node coordinates in selection lists"
+msgstr ""
+
 msgid "Show localized name in selection lists"
 msgstr "Visualizza il nome localizzato nelle liste di selezione"
 
@@ -14107,9 +14119,6 @@ msgstr "UTM Sistema Geodesic"
 msgid "UTM"
 msgstr "UTM"
 
-msgid "UTM Zone"
-msgstr "Zona UTM"
-
 msgid "North"
 msgstr "Nord"
 
@@ -14645,9 +14654,6 @@ msgstr "Sotto-elemento preimpostato senza genitori"
 msgid "Error parsing {0}: "
 msgstr "Impossibile leggere {0}: "
 
-msgid "Presets"
-msgstr "Preimpostazioni"
-
 msgid "Search for objects by preset..."
 msgstr "Cerca oggetti con preimpostazioni..."
 
@@ -17605,6 +17611,18 @@ msgstr "vegetariana"
 msgid "korean"
 msgstr "coreana"
 
+msgid "donut"
+msgstr ""
+
+msgid "mediterranean"
+msgstr ""
+
+msgid "friture"
+msgstr ""
+
+msgid "crepe"
+msgstr ""
+
 msgid "Internet access"
 msgstr "Accesso ad Internet"
 
@@ -20480,8 +20498,17 @@ msgstr "Fornitura di energia elettrica"
 msgid "Tents allowed"
 msgstr "Tende ammesse"
 
-msgid "Camping Site"
-msgstr "Campeggio"
+msgid "Campsite"
+msgstr ""
+
+msgid "Caravans allowed"
+msgstr ""
+
+msgid "Backcountry"
+msgstr ""
+
+msgid "Group only access"
+msgstr ""
 
 msgid "Food+Drinks"
 msgstr "Cibo+bevande"
@@ -25335,6 +25362,14 @@ msgid ""
 "resolution or better, and refreshed more frequently with ongoing updates."
 msgstr ""
 
+msgid "DigitalGlobe Premium Imagery Vintage"
+msgstr ""
+
+msgid ""
+"Imagery boundaries and capture dates. Labels appear at zoom level 14 and "
+"higher."
+msgstr ""
+
 msgid "DigitalGlobe Standard Imagery"
 msgstr "DigitalGlobe Standard Imagery"
 
@@ -25344,6 +25379,9 @@ msgid ""
 "Landsat. Average age is 2.31 years, with some areas updated 2x per year."
 msgstr ""
 
+msgid "DigitalGlobe Standard Imagery Vintage"
+msgstr ""
+
 msgid "Esri World Imagery"
 msgstr ""
 
@@ -25407,6 +25445,12 @@ msgstr "Mappa per la corsa di Strava (c)"
 msgid "Strava cycling and running heatmap"
 msgstr ""
 
+msgid "Strava water sports heatmap"
+msgstr ""
+
+msgid "Strava winter sports heatmap"
+msgstr ""
+
 msgid "Locator Overlay"
 msgstr "Locator Overlay"
 
@@ -25811,6 +25855,9 @@ msgstr "SPW(allonie) PICC immagini numeriche"
 msgid "SPW(allonie) most recent aerial imagery"
 msgstr ""
 
+msgid "SPW(allonie) 2016 aerial imagery"
+msgstr ""
+
 msgid "SPW(allonie) 2015 aerial imagery"
 msgstr ""
 
@@ -25857,6 +25904,14 @@ msgstr ""
 msgid "Addresses data from IBGE"
 msgstr "Dati degli indirizzi da IBGE"
 
+msgid "Street names IBGE Salvador-BA"
+msgstr ""
+
+msgid ""
+"Streets geometry and names of Salvador, Bahia. Source: Faces de Logradouro - "
+"IBGE."
+msgstr ""
+
 msgid "Rio Mosaic 2013"
 msgstr "Rio Mosaic 2013"
 
@@ -26588,6 +26643,9 @@ msgstr "Mappa topografica di base del Sud Tirolo"
 msgid "Japan GSI ortho Imagery"
 msgstr "Japan GSI ortho Imagery"
 
+msgid "Japan GSI Standard Map"
+msgstr ""
+
 msgid "imagico.de OSM images for mapping: Aral Sea (low water level)"
 msgstr ""
 
@@ -26617,8 +26675,8 @@ msgstr "50cm ortofoto - Lettonia"
 msgid "20cm ortho - Latvia - Coastline"
 msgstr "20cm ortofoto - Lettonia - Linea costiera"
 
-msgid "1.cikla ortofotokarte - Latvia"
-msgstr "1.cikla ortofotokarte - Latvia"
+msgid "Orthophoto 1st cycle (1994-1999) - Latvia"
+msgstr ""
 
 msgid "ORT10LT (Lithuania)"
 msgstr "ORT10LT (Lituania)"
@@ -26626,8 +26684,11 @@ msgstr "ORT10LT (Lituania)"
 msgid "geoportail.lu all layers"
 msgstr "geoportail.lu tutti i livelli"
 
+msgid "geoportail.lu ortho latest"
+msgstr ""
+
 msgid "geoportail.lu ortho 2016"
-msgstr "geoportail.lu ortho 2016"
+msgstr ""
 
 msgid "Luxembourg Inspire Railway"
 msgstr "Lussemburgo Inspire Ferrovia"
@@ -28151,6 +28212,9 @@ msgstr "valore errato: {0}"
 msgid "{0} on a node. Should be used on a way."
 msgstr "{0} in un nodo. Dovrebbe essere usato in un tracciato."
 
+msgid "{0} on a node. Should be used on a way or relation."
+msgstr ""
+
 msgid "{0} on a node. Should be drawn as an area."
 msgstr "{0} in un nodo. Dovrebbe essere disegnata come un''area."
 
@@ -28383,6 +28447,9 @@ msgstr "{0} non ha alcun senso"
 msgid "Nodes duplicating parent way tags"
 msgstr "Nodi che duplicano le etichette del percorso a cui appartengono"
 
+msgid "{0} together with {1} and {2}. Remove {0}."
+msgstr ""
+
 msgid ""
 "wikipedia tag has no language given, use ''wikipedia''=''language:page "
 "title''"
@@ -29301,6 +29368,21 @@ msgstr "Carica i tracciati su openstreetmap.org"
 msgid "Importing..."
 msgstr "Importazione in corso..."
 
+msgid "Shape is started incorrectly"
+msgstr ""
+
+msgid "Can''t load SVG diagram"
+msgstr ""
+
+msgid "Can''t find root SVG element"
+msgstr ""
+
+msgid "Import primitives"
+msgstr ""
+
+msgid "Cannot find configuration file!"
+msgstr ""
+
 msgid "DXF files [ImportDxf plugin] (*.dxf)"
 msgstr ""
 
@@ -29958,6 +30040,9 @@ msgstr ""
 msgid "Download mode"
 msgstr ""
 
+msgid "Number of images to be pre-fetched (forwards and backwards)"
+msgstr ""
+
 msgid "You are logged in as ''{0}''."
 msgstr "Sei collegato come ''{0}''."
 
@@ -30168,8 +30253,17 @@ msgid "only when manually requested"
 msgstr "solo quando richiesto manualmente"
 
 msgid ""
-"The downloaded OSM area is too big. Download mode has been changed to OSM "
-"area until the layer is restarted."
+"The Mapillary layer has stopped downloading images, because the requested "
+"area is too big!"
+msgstr ""
+
+msgid ""
+"To solve this problem, you could zoom in and load a smaller area of the map."
+msgstr ""
+
+msgid ""
+"To solve this problem, you could switch to download mode ''{0}'' and load "
+"Mapillary images for a smaller portion of the map."
 msgstr ""
 
 msgid "Downloading"
@@ -33806,24 +33900,6 @@ msgstr "Unisci le sovrapposizioni dei percorsi."
 msgid "Merge Overlap (combine)"
 msgstr "Unisci sovrapposizioni (combina)"
 
-msgid ""
-"<html>A role based relation membership was copied to all new ways.<br>You "
-"should verify this and correct it when necessary.</html>"
-msgstr ""
-"<html>Una relazione di appartenenza basata su un ruolo è stata copiata su "
-"tutte le nuove strade<br>Verificare l''operazione e correggere dove "
-"necessario.</html>"
-
-msgid ""
-"<html>A relation membership was copied to all new ways.<br>You should verify "
-"this and correct it when necessary.</html>"
-msgstr ""
-"<html>Una relazione di appartenenza è stata copiata su tutte le nuove "
-"strade<br>Verificare l''operazione e correggere dove necessario.</html>"
-
-msgid "Split way"
-msgstr "Dividi percorso"
-
 msgid "Michigan Left"
 msgstr "Divieto di svolta a sinistra Michigan"
 
@@ -35375,33 +35451,6 @@ msgstr ""
 msgid "PT: Route passes a oneway road in the wrong direction"
 msgstr ""
 
-msgid "moved"
-msgstr "spostato"
-
-msgid "rail"
-msgstr "terza rotaia"
-
-msgid "Can''t parse a time from this string."
-msgstr "Impossibile interpretare un orario da questa stringa"
-
-msgid "Invalid value"
-msgstr "Valore non valido"
-
-msgid "added"
-msgstr "aggiunto"
-
-msgid "Public Transport: Enable GTFSStops"
-msgstr "Trasporto pubblico: Abilita fermate GTFS"
-
-msgid "Public Transport: Catch GTFS stops"
-msgstr "Trasporto pubblico: Cattura fermate GTFS"
-
-msgid "skipped"
-msgstr "tralasciato"
-
-msgid "Public Transport: Disable GTFS"
-msgstr "Trasporto pubblico: Disabilita GTFS"
-
 msgid "Create Stops from GTFS ..."
 msgstr "Crea fermate da GTFS ..."
 
@@ -35430,69 +35479,9 @@ msgstr "Nessun dato trovato"
 msgid "The GTFS file was empty."
 msgstr "Il file GTFS è vuoto."
 
-msgid "Create Stops from GTFS"
-msgstr "Crea fermate da GTFS"
-
-msgid "GTFS-Stops"
-msgstr "Fermate GTFS"
-
-msgid "Type of stops to add"
-msgstr "Tipi di fermate da aggiungere"
-
-msgid "Time on your GPS device"
-msgstr "Orario sul tuo dispositivo GPS"
-
-msgid "HH:MM:SS.sss"
-msgstr "HH:MM:SS.sss"
-
-msgid "Time on your stopwatch"
-msgstr "Orario sulla tua visualizzazione delle fermate"
-
-msgid "Time window"
-msgstr "Finestra temporale"
-
-msgid "seconds"
-msgstr "secondi"
-
-msgid "Move Threshold"
-msgstr "Sposta limite"
-
-msgid "Suggest Stops"
-msgstr "Suggerisci fermate"
-
-msgid "Find"
-msgstr "Cerca"
-
-msgid "Show"
-msgstr "Visualizza"
-
-msgid "Mark"
-msgstr "Contrassegna"
-
-msgid "Catch"
-msgstr "Cattura"
-
-msgid "Join"
-msgstr "Unisci"
-
-msgid "Public Transport: Join GTFS stops"
-msgstr "Trasporto pubblico: Unisci fermate GTFS"
-
-msgid "State"
-msgstr "Regione"
-
-msgid "[incomplete]"
-msgstr "[incompleto]"
-
-msgid "[empty way]"
-msgstr "[percorso vuoto]"
-
 msgid "[ID] {0}"
 msgstr "[ID] {0}"
 
-msgid "[gap]"
-msgstr "[lacuna]"
-
 msgid "Route patterns ..."
 msgstr "Modelli di itinerario ..."
 
@@ -35535,6 +35524,15 @@ msgstr "Aggiungi una nuova etichetta"
 msgid "Name/Id"
 msgstr "Nome/ID"
 
+msgid "Find"
+msgstr "Cerca"
+
+msgid "Show"
+msgstr "Visualizza"
+
+msgid "Mark"
+msgstr "Contrassegna"
+
 msgid "Ref"
 msgstr "Riferimento"
 
@@ -35550,11 +35548,8 @@ msgstr "lato sinistro"
 msgid "Maximum distance from route"
 msgstr "Distanza massima dall''itinerario"
 
-msgid " [ID] {0}"
-msgstr " [ID] {0}"
-
-msgid "Public Transport: Change stop type"
-msgstr "Trasporto pubblico: modifica tipo fermata"
+msgid "Suggest Stops"
+msgstr "Suggerisci fermate"
 
 msgid "Create Stops from GPX ..."
 msgstr "Crea fermate da GPX ..."
@@ -35568,30 +35563,29 @@ msgstr "Seleziona il file GPX"
 msgid "The GPX file contained no tracks or waypoints."
 msgstr "Il file GPX non contiene alcun tracciato o punto del percorso."
 
-msgid "Create Stops from GPX"
-msgstr "Crea fermate da GPX"
+msgid "moved"
+msgstr "spostato"
 
-msgid "Tracks in this GPX file:"
-msgstr "Tracciati presenti in questo file GPX:"
+msgid "added"
+msgstr "aggiunto"
 
-msgid "Detach"
-msgstr "Distacca"
+msgid "Public Transport: Enable GTFSStops"
+msgstr "Trasporto pubblico: Abilita fermate GTFS"
 
-msgid "implicit"
-msgstr "implicito"
+msgid "Public Transport: Catch GTFS stops"
+msgstr "Trasporto pubblico: Cattura fermate GTFS"
 
-msgid ""
-"The GPX file doesn''t contain valid trackpoints. Please use a GPX file that "
-"has trackpoints."
-msgstr ""
-"Il file GPX non contiene alcun punto del tracciato valido. Utilizzare un "
-"file GPX che contenga dei punti del tracciato."
+msgid "skipped"
+msgstr "tralasciato"
 
-msgid "GPX File Trouble"
-msgstr "Problema del file GPX"
+msgid "Public Transport: Disable GTFS"
+msgstr "Trasporto pubblico: Disabilita GTFS"
 
-msgid "unnamed"
-msgstr "Senza nome"
+msgid "Public Transport: Join GTFS stops"
+msgstr "Trasporto pubblico: Unisci fermate GTFS"
+
+msgid "Public Transport: Change stop type"
+msgstr "Trasporto pubblico: modifica tipo fermata"
 
 msgid "Public Transport: Add track stop"
 msgstr "Trasporto pubblico: aggiungi fermata"
@@ -35614,9 +35608,6 @@ msgstr "Trasporto pubblico: ordina lista delle fermate"
 msgid "Public Transport: Suggest stops"
 msgstr "Trasporto pubblico: Suggerisci fermate"
 
-msgid "Stopname"
-msgstr "Nome della fermata"
-
 msgid "Public Transport: Detach waypoints"
 msgstr "Trasporto pubblico: Distacca punti del percorso"
 
@@ -35629,6 +35620,91 @@ msgstr "Trasporto pubblico: Abilita punti del percorso"
 msgid "Public Transport: Edit waypoint name"
 msgstr "Trasporto pubblico: Modifica il nome del punto del percorso"
 
+msgid "rail"
+msgstr "terza rotaia"
+
+msgid "Can''t parse a time from this string."
+msgstr "Impossibile interpretare un orario da questa stringa"
+
+msgid "Invalid value"
+msgstr "Valore non valido"
+
+msgid "Create Stops from GTFS"
+msgstr "Crea fermate da GTFS"
+
+msgid "GTFS-Stops"
+msgstr "Fermate GTFS"
+
+msgid "Type of stops to add"
+msgstr "Tipi di fermate da aggiungere"
+
+msgid "Time on your GPS device"
+msgstr "Orario sul tuo dispositivo GPS"
+
+msgid "HH:MM:SS.sss"
+msgstr "HH:MM:SS.sss"
+
+msgid "Time on your stopwatch"
+msgstr "Orario sulla tua visualizzazione delle fermate"
+
+msgid "Time window"
+msgstr "Finestra temporale"
+
+msgid "seconds"
+msgstr "secondi"
+
+msgid "Move Threshold"
+msgstr "Sposta limite"
+
+msgid "Catch"
+msgstr "Cattura"
+
+msgid "Join"
+msgstr "Unisci"
+
+msgid "Create Stops from GPX"
+msgstr "Crea fermate da GPX"
+
+msgid "Tracks in this GPX file:"
+msgstr "Tracciati presenti in questo file GPX:"
+
+msgid "Detach"
+msgstr "Distacca"
+
+msgid "implicit"
+msgstr "implicito"
+
+msgid "State"
+msgstr "Regione"
+
+msgid "[incomplete]"
+msgstr "[incompleto]"
+
+msgid "[empty way]"
+msgstr "[percorso vuoto]"
+
+msgid "[gap]"
+msgstr "[lacuna]"
+
+msgid "Stopname"
+msgstr "Nome della fermata"
+
+msgid " [ID] {0}"
+msgstr " [ID] {0}"
+
+msgid ""
+"The GPX file doesn''t contain valid trackpoints. Please use a GPX file that "
+"has trackpoints."
+msgstr ""
+"Il file GPX non contiene alcun punto del tracciato valido. Utilizzare un "
+"file GPX che contenga dei punti del tracciato."
+
+msgid "GPX File Trouble"
+msgstr "Problema del file GPX"
+
+msgid "unnamed"
+msgstr "Senza nome"
+
 msgid "Distance between stops"
 msgstr "Distanza tra gli stop"
 
@@ -36403,6 +36479,9 @@ msgstr "Apre la finestra per la modifica delle etichette"
 msgid "JOSM Tag Editor Plugin"
 msgstr "Estensione JOSM per la modifica delle etichette"
 
+msgid "Presets"
+msgstr "Preimpostazioni"
+
 msgid "Abort tag editing and close dialog"
 msgstr "Annulla la modifica all''etichetta e chiudi la finestra"
 
@@ -38589,6 +38668,28 @@ msgstr[1] ""
 "Sovrascrivere le etichette ''{0}'' {1} aventi valori {2} con i nuovi valori "
 "''{3}''?"
 
+msgid "Download from Sophox API"
+msgstr ""
+
+msgid ""
+"Find places of education at least 2km, and at most 3km from the center of "
+"the selection"
+msgstr ""
+"Trova luoghi di istruzione ad almeno 2 km e al massimo 3 km dal centro della "
+"selezione"
+
+msgid "Show/hide Sophox snippet list"
+msgstr ""
+
+msgid "help"
+msgstr "aiuto"
+
+msgid "Server: "
+msgstr "Server: "
+
+msgid "Wikidata+OSM server"
+msgstr ""
+
 msgid "Search Wikidata items"
 msgstr "Cerca elementi Wikidata"
 
@@ -38670,28 +38771,6 @@ msgstr ""
 "Aggiunge un tag ''wikipedia'' corrispondente a questo articolo per gli "
 "oggetti selezionati"
 
-msgid "Download from Wikosm API"
-msgstr "Scarica dalle API Wikosm"
-
-msgid ""
-"Find places of education at least 2km, and at most 3km from the center of "
-"the selection"
-msgstr ""
-"Trova luoghi di istruzione ad almeno 2 km e al massimo 3 km dal centro della "
-"selezione"
-
-msgid "Show/hide Wikosm snippet list"
-msgstr ""
-
-msgid "help"
-msgstr "aiuto"
-
-msgid "Server: "
-msgstr "Server: "
-
-msgid "Wikidata+OSM server"
-msgstr ""
-
 msgid "The Ultimate WMS Super-speed Turbo Challenge II"
 msgstr "The Ultimate WMS Super-speed Turbo Challenge II"
 
diff --git a/i18n/po/ja.po b/i18n/po/ja.po
index ffd506a..803862e 100644
--- a/i18n/po/ja.po
+++ b/i18n/po/ja.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: josm\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2017-10-30 03:38+0100\n"
+"POT-Creation-Date: 2017-11-26 00:06+0100\n"
 "PO-Revision-Date: 2017-10-15 17:23+0000\n"
 "Last-Translator: fujimoto <fujimoto at internet.ne.jp>\n"
 "Language-Team: Japanese <tr at openstreetmap.jp>\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-10-30 04:49+0000\n"
-"X-Generator: Launchpad (build 18493)\n"
+"X-Launchpad-Export-Date: 2017-11-26 04:51+0000\n"
+"X-Generator: Launchpad (build 18509)\n"
 "X-Poedit-Country: JAPAN\n"
 "Language: ja\n"
 "X-Poedit-Language: Japanese\n"
@@ -430,12 +430,15 @@ msgstr "レイヤーを削除"
 msgid "Delete the active layer. Does not delete the associated file."
 msgstr "アクティブなレイヤーを削除します。関連するファイルは削除されません。"
 
-msgid "Toggle dialogs panel"
-msgstr "ダイアログパネルの表示/非表示"
+msgid "Dialogs panel"
+msgstr ""
 
 msgid "Toggle dialogs panel, maximize mapview"
 msgstr "ダイアログパネルの表示/非表示を切り替え、地図ビューを最大化"
 
+msgid "Toggle dialogs panel"
+msgstr "ダイアログパネルの表示/非表示"
+
 msgid "Distribute Nodes"
 msgstr "ノードを等間隔に並べる"
 
@@ -6523,6 +6526,9 @@ msgstr "座標: "
 msgid "Coordinates (projected): "
 msgstr "座標(投影後): "
 
+msgid "UTM Zone"
+msgstr "UTMゾーン"
+
 msgid "Part of: "
 msgstr "所属: "
 
@@ -8880,6 +8886,11 @@ msgstr "「アップロード」をチェックすると、 OSM サーバーに
 msgid "Check \"Save\" to save the layer to the file specified on the left."
 msgstr "「保存」をチェックすると、左に指定されたファイルにレイヤーを保存します。"
 
+msgid ""
+"A background upload is already in progress. Kindly wait for it to finish "
+"before uploading new changes"
+msgstr ""
+
 msgid "I would like someone to review my edits."
 msgstr ""
 
@@ -10006,6 +10017,9 @@ msgstr "もう一度投影法を変更するか、レイヤーを削除するか
 msgid "Save Layer"
 msgstr "レイヤーを保存"
 
+msgid "Trying to set a read only data layer as edit layer"
+msgstr ""
+
 msgid "{0} note"
 msgid_plural "{0} notes"
 msgstr[0] "{0}件のメモ"
@@ -10852,11 +10866,6 @@ msgstr "''{0}''から地図描画スタイルの読み込みに失敗しまし
 msgid "Failed to parse Mappaint styles from ''{0}''. Error was: {1}"
 msgstr "''{0}''から地図描画スタイルの解析に失敗しました。エラー: {1}"
 
-msgid ""
-"Detected deprecated ''{0}'' in ''{1}'' which will be removed shortly. Use "
-"''{2}'' instead."
-msgstr ""
-
 msgid "Failed to locate image ''{0}''"
 msgstr "イメージ ''{0}'' が見つかりません"
 
@@ -12064,6 +12073,9 @@ msgstr "起動時にスプラッシュ画面を表示"
 msgid "Show object ID in selection lists"
 msgstr "選択リストにオブジェクトIDを表示"
 
+msgid "Show node coordinates in selection lists"
+msgstr ""
+
 msgid "Show localized name in selection lists"
 msgstr "選択リストにローカライズされた名前を表示"
 
@@ -12838,9 +12850,6 @@ msgstr "UTM測地システム"
 msgid "UTM"
 msgstr "UTM"
 
-msgid "UTM Zone"
-msgstr "UTMゾーン"
-
 msgid "North"
 msgstr "北緯"
 
@@ -13321,9 +13330,6 @@ msgstr "親の無いサブ要素をプリセット"
 msgid "Error parsing {0}: "
 msgstr "走査時にエラー: {0}: "
 
-msgid "Presets"
-msgstr "プリセット"
-
 msgid "Search for objects by preset..."
 msgstr "プリセットからオブジェクトを検索..."
 
@@ -15935,6 +15941,18 @@ msgstr "べリタリアン向け"
 msgid "korean"
 msgstr "韓国料理"
 
+msgid "donut"
+msgstr ""
+
+msgid "mediterranean"
+msgstr ""
+
+msgid "friture"
+msgstr ""
+
+msgid "crepe"
+msgstr ""
+
 msgid "Internet access"
 msgstr "インターネットアクセス"
 
@@ -18779,8 +18797,17 @@ msgstr "電源"
 msgid "Tents allowed"
 msgstr "テントが許可されている"
 
-msgid "Camping Site"
-msgstr "キャンプ場"
+msgid "Campsite"
+msgstr ""
+
+msgid "Caravans allowed"
+msgstr ""
+
+msgid "Backcountry"
+msgstr ""
+
+msgid "Group only access"
+msgstr ""
 
 msgid "Food+Drinks"
 msgstr "飲食店"
@@ -23609,6 +23636,14 @@ msgid ""
 "resolution or better, and refreshed more frequently with ongoing updates."
 msgstr ""
 
+msgid "DigitalGlobe Premium Imagery Vintage"
+msgstr ""
+
+msgid ""
+"Imagery boundaries and capture dates. Labels appear at zoom level 14 and "
+"higher."
+msgstr ""
+
 msgid "DigitalGlobe Standard Imagery"
 msgstr ""
 
@@ -23618,6 +23653,9 @@ msgid ""
 "Landsat. Average age is 2.31 years, with some areas updated 2x per year."
 msgstr ""
 
+msgid "DigitalGlobe Standard Imagery Vintage"
+msgstr ""
+
 msgid "Esri World Imagery"
 msgstr ""
 
@@ -23681,6 +23719,12 @@ msgstr "Strava running heatmap"
 msgid "Strava cycling and running heatmap"
 msgstr ""
 
+msgid "Strava water sports heatmap"
+msgstr ""
+
+msgid "Strava winter sports heatmap"
+msgstr ""
+
 msgid "Locator Overlay"
 msgstr "Locator Overlay"
 
@@ -24085,6 +24129,9 @@ msgstr "SPW(allonie) PICC numerical imagery"
 msgid "SPW(allonie) most recent aerial imagery"
 msgstr ""
 
+msgid "SPW(allonie) 2016 aerial imagery"
+msgstr ""
+
 msgid "SPW(allonie) 2015 aerial imagery"
 msgstr "SPW(allonie) 2015 aerial imagery"
 
@@ -24130,6 +24177,14 @@ msgstr ""
 msgid "Addresses data from IBGE"
 msgstr ""
 
+msgid "Street names IBGE Salvador-BA"
+msgstr ""
+
+msgid ""
+"Streets geometry and names of Salvador, Bahia. Source: Faces de Logradouro - "
+"IBGE."
+msgstr ""
+
 msgid "Rio Mosaic 2013"
 msgstr ""
 
@@ -24862,6 +24917,9 @@ msgstr ""
 msgid "Japan GSI ortho Imagery"
 msgstr ""
 
+msgid "Japan GSI Standard Map"
+msgstr ""
+
 msgid "imagico.de OSM images for mapping: Aral Sea (low water level)"
 msgstr ""
 
@@ -24891,8 +24949,8 @@ msgstr "50cm ortho - Latvia"
 msgid "20cm ortho - Latvia - Coastline"
 msgstr "20cm ortho - Latvia - Coastline"
 
-msgid "1.cikla ortofotokarte - Latvia"
-msgstr "1.cikla ortofotokarte - Latvia"
+msgid "Orthophoto 1st cycle (1994-1999) - Latvia"
+msgstr ""
 
 msgid "ORT10LT (Lithuania)"
 msgstr "ORT10LT (Lithuania)"
@@ -24900,6 +24958,9 @@ msgstr "ORT10LT (Lithuania)"
 msgid "geoportail.lu all layers"
 msgstr ""
 
+msgid "geoportail.lu ortho latest"
+msgstr ""
+
 msgid "geoportail.lu ortho 2016"
 msgstr ""
 
@@ -26392,6 +26453,9 @@ msgstr ""
 msgid "{0} on a node. Should be used on a way."
 msgstr "{0}がノードに設定されています。ウェイに設定するべきです。"
 
+msgid "{0} on a node. Should be used on a way or relation."
+msgstr ""
+
 msgid "{0} on a node. Should be drawn as an area."
 msgstr "{0}がノードに設定されています。エリアとして描画するべきです。"
 
@@ -26619,6 +26683,9 @@ msgstr ""
 msgid "Nodes duplicating parent way tags"
 msgstr "親ウェイのタグが重複しているノード"
 
+msgid "{0} together with {1} and {2}. Remove {0}."
+msgstr ""
+
 msgid ""
 "wikipedia tag has no language given, use ''wikipedia''=''language:page "
 "title''"
@@ -27424,6 +27491,21 @@ msgstr "openstreetmap.org へトレースをアップロード"
 msgid "Importing..."
 msgstr "インポート中..."
 
+msgid "Shape is started incorrectly"
+msgstr ""
+
+msgid "Can''t load SVG diagram"
+msgstr ""
+
+msgid "Can''t find root SVG element"
+msgstr ""
+
+msgid "Import primitives"
+msgstr ""
+
+msgid "Cannot find configuration file!"
+msgstr ""
+
 msgid "DXF files [ImportDxf plugin] (*.dxf)"
 msgstr ""
 
@@ -28070,6 +28152,9 @@ msgstr ""
 msgid "Download mode"
 msgstr ""
 
+msgid "Number of images to be pre-fetched (forwards and backwards)"
+msgstr ""
+
 msgid "You are logged in as ''{0}''."
 msgstr "''{0}'' としてログイン中です。"
 
@@ -28280,8 +28365,17 @@ msgid "only when manually requested"
 msgstr ""
 
 msgid ""
-"The downloaded OSM area is too big. Download mode has been changed to OSM "
-"area until the layer is restarted."
+"The Mapillary layer has stopped downloading images, because the requested "
+"area is too big!"
+msgstr ""
+
+msgid ""
+"To solve this problem, you could zoom in and load a smaller area of the map."
+msgstr ""
+
+msgid ""
+"To solve this problem, you could switch to download mode ''{0}'' and load "
+"Mapillary images for a smaller portion of the map."
 msgstr ""
 
 msgid "Downloading"
@@ -31742,20 +31836,6 @@ msgstr "ウェイの重複をマージします。"
 msgid "Merge Overlap (combine)"
 msgstr "重複をマージ(結合)"
 
-msgid ""
-"<html>A role based relation membership was copied to all new ways.<br>You "
-"should verify this and correct it when necessary.</html>"
-msgstr ""
-"<html>リレーションの所属に基づくロールがすべての新しいウェイにコピーされました。<br>必要に応じて確認や修正をしてください。</html>"
-
-msgid ""
-"<html>A relation membership was copied to all new ways.<br>You should verify "
-"this and correct it when necessary.</html>"
-msgstr "<html>リレーションの所属がすべての新しいウェイにコピーされました。<br>必要に応じて確認や修正をしてください。</html>"
-
-msgid "Split way"
-msgstr "ウェイを分割"
-
 msgid "Michigan Left"
 msgstr "ミシガン左折"
 
@@ -33226,33 +33306,6 @@ msgstr ""
 msgid "PT: Route passes a oneway road in the wrong direction"
 msgstr ""
 
-msgid "moved"
-msgstr "移動"
-
-msgid "rail"
-msgstr "第三軌条"
-
-msgid "Can''t parse a time from this string."
-msgstr "この文字列から時刻を解釈できません。"
-
-msgid "Invalid value"
-msgstr "無効な値です"
-
-msgid "added"
-msgstr "追加"
-
-msgid "Public Transport: Enable GTFSStops"
-msgstr "公共交通: GTFSの停留所を有効化"
-
-msgid "Public Transport: Catch GTFS stops"
-msgstr "公共交通: GTFSの停留所を検出"
-
-msgid "skipped"
-msgstr "スキップ"
-
-msgid "Public Transport: Disable GTFS"
-msgstr "公共交通: GTFSの停留所を無効化"
-
 msgid "Create Stops from GTFS ..."
 msgstr "GTFSから停留所を作成..."
 
@@ -33279,69 +33332,9 @@ msgstr "データがありません"
 msgid "The GTFS file was empty."
 msgstr "GTFSファイルの中身がありません。"
 
-msgid "Create Stops from GTFS"
-msgstr "GTFSから停留所を作成"
-
-msgid "GTFS-Stops"
-msgstr "GTFSの停留所"
-
-msgid "Type of stops to add"
-msgstr "追加する停留所の種類"
-
-msgid "Time on your GPS device"
-msgstr "GPS機器の時刻"
-
-msgid "HH:MM:SS.sss"
-msgstr "HH:MM:SS.sss"
-
-msgid "Time on your stopwatch"
-msgstr "ストップウォッチでの時刻"
-
-msgid "Time window"
-msgstr "時刻ウィンドウ"
-
-msgid "seconds"
-msgstr "秒"
-
-msgid "Move Threshold"
-msgstr "移動の閾値"
-
-msgid "Suggest Stops"
-msgstr "提案する停留所"
-
-msgid "Find"
-msgstr "検索"
-
-msgid "Show"
-msgstr "表示"
-
-msgid "Mark"
-msgstr "マーク"
-
-msgid "Catch"
-msgstr "キャッチ"
-
-msgid "Join"
-msgstr "統合"
-
-msgid "Public Transport: Join GTFS stops"
-msgstr "公共交通: GTFSの停留所を追加"
-
-msgid "State"
-msgstr "州(state)"
-
-msgid "[incomplete]"
-msgstr "[不完全]"
-
-msgid "[empty way]"
-msgstr "[空のウェイ]"
-
 msgid "[ID] {0}"
 msgstr "[ID] {0}"
 
-msgid "[gap]"
-msgstr "[端点]"
-
 msgid "Route patterns ..."
 msgstr "ルートパターン ..."
 
@@ -33384,6 +33377,15 @@ msgstr "新しいタグを追加"
 msgid "Name/Id"
 msgstr "名前/ID"
 
+msgid "Find"
+msgstr "検索"
+
+msgid "Show"
+msgstr "表示"
+
+msgid "Mark"
+msgstr "マーク"
+
 msgid "Ref"
 msgstr "参照"
 
@@ -33399,11 +33401,8 @@ msgstr "左側"
 msgid "Maximum distance from route"
 msgstr "経路からの最大距離"
 
-msgid " [ID] {0}"
-msgstr " [ID] {0}"
-
-msgid "Public Transport: Change stop type"
-msgstr "公共交通: 停留所のタイプを変更"
+msgid "Suggest Stops"
+msgstr "提案する停留所"
 
 msgid "Create Stops from GPX ..."
 msgstr "GPXから停留所を作成..."
@@ -33417,28 +33416,29 @@ msgstr "GPXファイルを選択してください"
 msgid "The GPX file contained no tracks or waypoints."
 msgstr "GPXファイルにトラックやウェイポイントがありません。"
 
-msgid "Create Stops from GPX"
-msgstr "GPXから停留所を作成"
+msgid "moved"
+msgstr "移動"
 
-msgid "Tracks in this GPX file:"
-msgstr "トラックが含まれるGPXファイル:"
+msgid "added"
+msgstr "追加"
 
-msgid "Detach"
-msgstr "分離"
+msgid "Public Transport: Enable GTFSStops"
+msgstr "公共交通: GTFSの停留所を有効化"
 
-msgid "implicit"
-msgstr "暗黙"
+msgid "Public Transport: Catch GTFS stops"
+msgstr "公共交通: GTFSの停留所を検出"
 
-msgid ""
-"The GPX file doesn''t contain valid trackpoints. Please use a GPX file that "
-"has trackpoints."
-msgstr "GPXファイルには有効な測位点が含まれていません。測位点が含まれたGPXファイルを使用してください。"
+msgid "skipped"
+msgstr "スキップ"
 
-msgid "GPX File Trouble"
-msgstr "GPXファイルに問題が発生しました"
+msgid "Public Transport: Disable GTFS"
+msgstr "公共交通: GTFSの停留所を無効化"
 
-msgid "unnamed"
-msgstr "名前なし"
+msgid "Public Transport: Join GTFS stops"
+msgstr "公共交通: GTFSの停留所を追加"
+
+msgid "Public Transport: Change stop type"
+msgstr "公共交通: 停留所のタイプを変更"
 
 msgid "Public Transport: Add track stop"
 msgstr "公共交通: トラックの停留所を追加"
@@ -33461,9 +33461,6 @@ msgstr "公共交通: トラックの停留所一覧を並べ替え"
 msgid "Public Transport: Suggest stops"
 msgstr "公共交通: 停留所を推測"
 
-msgid "Stopname"
-msgstr "停留所名"
-
 msgid "Public Transport: Detach waypoints"
 msgstr "公共交通: ウェイポイントを切り離す"
 
@@ -33476,6 +33473,89 @@ msgstr "公共交通: ウェイポイントを有効化"
 msgid "Public Transport: Edit waypoint name"
 msgstr "公共交通: ウェイポイント名を編集"
 
+msgid "rail"
+msgstr "第三軌条"
+
+msgid "Can''t parse a time from this string."
+msgstr "この文字列から時刻を解釈できません。"
+
+msgid "Invalid value"
+msgstr "無効な値です"
+
+msgid "Create Stops from GTFS"
+msgstr "GTFSから停留所を作成"
+
+msgid "GTFS-Stops"
+msgstr "GTFSの停留所"
+
+msgid "Type of stops to add"
+msgstr "追加する停留所の種類"
+
+msgid "Time on your GPS device"
+msgstr "GPS機器の時刻"
+
+msgid "HH:MM:SS.sss"
+msgstr "HH:MM:SS.sss"
+
+msgid "Time on your stopwatch"
+msgstr "ストップウォッチでの時刻"
+
+msgid "Time window"
+msgstr "時刻ウィンドウ"
+
+msgid "seconds"
+msgstr "秒"
+
+msgid "Move Threshold"
+msgstr "移動の閾値"
+
+msgid "Catch"
+msgstr "キャッチ"
+
+msgid "Join"
+msgstr "統合"
+
+msgid "Create Stops from GPX"
+msgstr "GPXから停留所を作成"
+
+msgid "Tracks in this GPX file:"
+msgstr "トラックが含まれるGPXファイル:"
+
+msgid "Detach"
+msgstr "分離"
+
+msgid "implicit"
+msgstr "暗黙"
+
+msgid "State"
+msgstr "州(state)"
+
+msgid "[incomplete]"
+msgstr "[不完全]"
+
+msgid "[empty way]"
+msgstr "[空のウェイ]"
+
+msgid "[gap]"
+msgstr "[端点]"
+
+msgid "Stopname"
+msgstr "停留所名"
+
+msgid " [ID] {0}"
+msgstr " [ID] {0}"
+
+msgid ""
+"The GPX file doesn''t contain valid trackpoints. Please use a GPX file that "
+"has trackpoints."
+msgstr "GPXファイルには有効な測位点が含まれていません。測位点が含まれたGPXファイルを使用してください。"
+
+msgid "GPX File Trouble"
+msgstr "GPXファイルに問題が発生しました"
+
+msgid "unnamed"
+msgstr "名前なし"
+
 msgid "Distance between stops"
 msgstr ""
 
@@ -34212,6 +34292,9 @@ msgstr "タグ編集ダイアログの開始"
 msgid "JOSM Tag Editor Plugin"
 msgstr "JOSM タグ編集プラグイン"
 
+msgid "Presets"
+msgstr "プリセット"
+
 msgid "Abort tag editing and close dialog"
 msgstr "タグ編集を中断してダイアログを閉じる"
 
@@ -36217,6 +36300,26 @@ msgid_plural "Overwrite ''{0}'' tags {1} from {2} with new value ''{3}''?"
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Download from Sophox API"
+msgstr ""
+
+msgid ""
+"Find places of education at least 2km, and at most 3km from the center of "
+"the selection"
+msgstr ""
+
+msgid "Show/hide Sophox snippet list"
+msgstr ""
+
+msgid "help"
+msgstr ""
+
+msgid "Server: "
+msgstr ""
+
+msgid "Wikidata+OSM server"
+msgstr ""
+
 msgid "Search Wikidata items"
 msgstr "ウィキデータの項目を検索"
 
@@ -36290,26 +36393,6 @@ msgid ""
 "objects"
 msgstr "この文書に対応する選択されたオブジェクトに''wikipedia''タグを追加します"
 
-msgid "Download from Wikosm API"
-msgstr ""
-
-msgid ""
-"Find places of education at least 2km, and at most 3km from the center of "
-"the selection"
-msgstr ""
-
-msgid "Show/hide Wikosm snippet list"
-msgstr ""
-
-msgid "help"
-msgstr ""
-
-msgid "Server: "
-msgstr ""
-
-msgid "Wikidata+OSM server"
-msgstr ""
-
 msgid "The Ultimate WMS Super-speed Turbo Challenge II"
 msgstr "最高WMSスーパースピードターボチャレンジII"
 
diff --git a/i18n/po/ka.po b/i18n/po/ka.po
index 80eae8c..f698fb2 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-10-30 03:38+0100\n"
+"POT-Creation-Date: 2017-11-26 00:06+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-10-30 04:43+0000\n"
-"X-Generator: Launchpad (build 18493)\n"
+"X-Launchpad-Export-Date: 2017-11-26 04:44+0000\n"
+"X-Generator: Launchpad (build 18509)\n"
 "Language: ka\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -426,12 +426,15 @@ msgstr ""
 msgid "Delete the active layer. Does not delete the associated file."
 msgstr ""
 
-msgid "Toggle dialogs panel"
+msgid "Dialogs panel"
 msgstr ""
 
 msgid "Toggle dialogs panel, maximize mapview"
 msgstr ""
 
+msgid "Toggle dialogs panel"
+msgstr ""
+
 msgid "Distribute Nodes"
 msgstr ""
 
@@ -6493,6 +6496,9 @@ msgstr ""
 msgid "Coordinates (projected): "
 msgstr ""
 
+msgid "UTM Zone"
+msgstr ""
+
 msgid "Part of: "
 msgstr ""
 
@@ -8791,6 +8797,11 @@ msgstr ""
 msgid "Check \"Save\" to save the layer to the file specified on the left."
 msgstr ""
 
+msgid ""
+"A background upload is already in progress. Kindly wait for it to finish "
+"before uploading new changes"
+msgstr ""
+
 msgid "I would like someone to review my edits."
 msgstr ""
 
@@ -9899,6 +9910,9 @@ msgstr ""
 msgid "Save Layer"
 msgstr ""
 
+msgid "Trying to set a read only data layer as edit layer"
+msgstr ""
+
 msgid "{0} note"
 msgid_plural "{0} notes"
 msgstr[0] ""
@@ -10729,11 +10743,6 @@ msgstr ""
 msgid "Failed to parse Mappaint styles from ''{0}''. Error was: {1}"
 msgstr ""
 
-msgid ""
-"Detected deprecated ''{0}'' in ''{1}'' which will be removed shortly. Use "
-"''{2}'' instead."
-msgstr ""
-
 msgid "Failed to locate image ''{0}''"
 msgstr ""
 
@@ -11898,6 +11907,9 @@ msgstr ""
 msgid "Show object ID in selection lists"
 msgstr ""
 
+msgid "Show node coordinates in selection lists"
+msgstr ""
+
 msgid "Show localized name in selection lists"
 msgstr ""
 
@@ -12654,9 +12666,6 @@ msgstr ""
 msgid "UTM"
 msgstr ""
 
-msgid "UTM Zone"
-msgstr ""
-
 msgid "North"
 msgstr ""
 
@@ -13124,9 +13133,6 @@ msgstr ""
 msgid "Error parsing {0}: "
 msgstr ""
 
-msgid "Presets"
-msgstr ""
-
 msgid "Search for objects by preset..."
 msgstr ""
 
@@ -15668,6 +15674,18 @@ msgstr ""
 msgid "korean"
 msgstr ""
 
+msgid "donut"
+msgstr ""
+
+msgid "mediterranean"
+msgstr ""
+
+msgid "friture"
+msgstr ""
+
+msgid "crepe"
+msgstr ""
+
 msgid "Internet access"
 msgstr ""
 
@@ -18510,7 +18528,16 @@ msgstr ""
 msgid "Tents allowed"
 msgstr ""
 
-msgid "Camping Site"
+msgid "Campsite"
+msgstr ""
+
+msgid "Caravans allowed"
+msgstr ""
+
+msgid "Backcountry"
+msgstr ""
+
+msgid "Group only access"
 msgstr ""
 
 msgid "Food+Drinks"
@@ -23339,6 +23366,14 @@ msgid ""
 "resolution or better, and refreshed more frequently with ongoing updates."
 msgstr ""
 
+msgid "DigitalGlobe Premium Imagery Vintage"
+msgstr ""
+
+msgid ""
+"Imagery boundaries and capture dates. Labels appear at zoom level 14 and "
+"higher."
+msgstr ""
+
 msgid "DigitalGlobe Standard Imagery"
 msgstr ""
 
@@ -23348,6 +23383,9 @@ msgid ""
 "Landsat. Average age is 2.31 years, with some areas updated 2x per year."
 msgstr ""
 
+msgid "DigitalGlobe Standard Imagery Vintage"
+msgstr ""
+
 msgid "Esri World Imagery"
 msgstr ""
 
@@ -23411,6 +23449,12 @@ msgstr ""
 msgid "Strava cycling and running heatmap"
 msgstr ""
 
+msgid "Strava water sports heatmap"
+msgstr ""
+
+msgid "Strava winter sports heatmap"
+msgstr ""
+
 msgid "Locator Overlay"
 msgstr ""
 
@@ -23815,6 +23859,9 @@ msgstr ""
 msgid "SPW(allonie) most recent aerial imagery"
 msgstr ""
 
+msgid "SPW(allonie) 2016 aerial imagery"
+msgstr ""
+
 msgid "SPW(allonie) 2015 aerial imagery"
 msgstr ""
 
@@ -23860,6 +23907,14 @@ msgstr ""
 msgid "Addresses data from IBGE"
 msgstr ""
 
+msgid "Street names IBGE Salvador-BA"
+msgstr ""
+
+msgid ""
+"Streets geometry and names of Salvador, Bahia. Source: Faces de Logradouro - "
+"IBGE."
+msgstr ""
+
 msgid "Rio Mosaic 2013"
 msgstr ""
 
@@ -24590,6 +24645,9 @@ msgstr ""
 msgid "Japan GSI ortho Imagery"
 msgstr ""
 
+msgid "Japan GSI Standard Map"
+msgstr ""
+
 msgid "imagico.de OSM images for mapping: Aral Sea (low water level)"
 msgstr ""
 
@@ -24619,7 +24677,7 @@ msgstr ""
 msgid "20cm ortho - Latvia - Coastline"
 msgstr ""
 
-msgid "1.cikla ortofotokarte - Latvia"
+msgid "Orthophoto 1st cycle (1994-1999) - Latvia"
 msgstr ""
 
 msgid "ORT10LT (Lithuania)"
@@ -24628,6 +24686,9 @@ msgstr ""
 msgid "geoportail.lu all layers"
 msgstr ""
 
+msgid "geoportail.lu ortho latest"
+msgstr ""
+
 msgid "geoportail.lu ortho 2016"
 msgstr ""
 
@@ -26118,6 +26179,9 @@ msgstr ""
 msgid "{0} on a node. Should be used on a way."
 msgstr ""
 
+msgid "{0} on a node. Should be used on a way or relation."
+msgstr ""
+
 msgid "{0} on a node. Should be drawn as an area."
 msgstr ""
 
@@ -26345,6 +26409,9 @@ msgstr ""
 msgid "Nodes duplicating parent way tags"
 msgstr ""
 
+msgid "{0} together with {1} and {2}. Remove {0}."
+msgstr ""
+
 msgid ""
 "wikipedia tag has no language given, use ''wikipedia''=''language:page "
 "title''"
@@ -27109,6 +27176,21 @@ msgstr ""
 msgid "Importing..."
 msgstr ""
 
+msgid "Shape is started incorrectly"
+msgstr ""
+
+msgid "Can''t load SVG diagram"
+msgstr ""
+
+msgid "Can''t find root SVG element"
+msgstr ""
+
+msgid "Import primitives"
+msgstr ""
+
+msgid "Cannot find configuration file!"
+msgstr ""
+
 msgid "DXF files [ImportDxf plugin] (*.dxf)"
 msgstr ""
 
@@ -27748,6 +27830,9 @@ msgstr ""
 msgid "Download mode"
 msgstr ""
 
+msgid "Number of images to be pre-fetched (forwards and backwards)"
+msgstr ""
+
 msgid "You are logged in as ''{0}''."
 msgstr ""
 
@@ -27958,8 +28043,17 @@ msgid "only when manually requested"
 msgstr ""
 
 msgid ""
-"The downloaded OSM area is too big. Download mode has been changed to OSM "
-"area until the layer is restarted."
+"The Mapillary layer has stopped downloading images, because the requested "
+"area is too big!"
+msgstr ""
+
+msgid ""
+"To solve this problem, you could zoom in and load a smaller area of the map."
+msgstr ""
+
+msgid ""
+"To solve this problem, you could switch to download mode ''{0}'' and load "
+"Mapillary images for a smaller portion of the map."
 msgstr ""
 
 msgid "Downloading"
@@ -31271,19 +31365,6 @@ msgstr ""
 msgid "Merge Overlap (combine)"
 msgstr ""
 
-msgid ""
-"<html>A role based relation membership was copied to all new ways.<br>You "
-"should verify this and correct it when necessary.</html>"
-msgstr ""
-
-msgid ""
-"<html>A relation membership was copied to all new ways.<br>You should verify "
-"this and correct it when necessary.</html>"
-msgstr ""
-
-msgid "Split way"
-msgstr ""
-
 msgid "Michigan Left"
 msgstr ""
 
@@ -32738,254 +32819,254 @@ msgstr ""
 msgid "PT: Route passes a oneway road in the wrong direction"
 msgstr ""
 
-msgid "moved"
+msgid "Create Stops from GTFS ..."
 msgstr ""
 
-msgid "rail"
+msgid "Create Stops from a GTFS file"
 msgstr ""
 
-msgid "Can''t parse a time from this string."
+msgid "Select GTFS file (stops.txt)"
 msgstr ""
 
-msgid "Invalid value"
+msgid "File \"{0}\" does not exist"
 msgstr ""
 
-msgid "added"
+msgid "IOException \"{0}\" occurred"
 msgstr ""
 
-msgid "Public Transport: Enable GTFSStops"
+msgid ""
+"There exists no dataset. Try to download data from the server or open an OSM "
+"file."
 msgstr ""
 
-msgid "Public Transport: Catch GTFS stops"
+msgid "No data found"
 msgstr ""
 
-msgid "skipped"
+msgid "The GTFS file was empty."
 msgstr ""
 
-msgid "Public Transport: Disable GTFS"
+msgid "[ID] {0}"
 msgstr ""
 
-msgid "Create Stops from GTFS ..."
+msgid "Route patterns ..."
 msgstr ""
 
-msgid "Create Stops from a GTFS file"
+msgid "Edit Route patterns for public transport"
 msgstr ""
 
-msgid "Select GTFS file (stops.txt)"
+msgid "Route Patterns"
 msgstr ""
 
-msgid "File \"{0}\" does not exist"
+msgid "Overview"
 msgstr ""
 
-msgid "IOException \"{0}\" occurred"
+msgid "Itinerary"
 msgstr ""
 
-msgid ""
-"There exists no dataset. Try to download data from the server or open an OSM "
-"file."
+msgid "Stops"
 msgstr ""
 
-msgid "No data found"
+msgid "Meta"
 msgstr ""
 
-msgid "The GTFS file was empty."
+msgid "Existing route patterns:"
 msgstr ""
 
-msgid "Create Stops from GTFS"
+msgid "Reflect"
 msgstr ""
 
-msgid "GTFS-Stops"
+msgid "Required tags:"
 msgstr ""
 
-msgid "Type of stops to add"
+msgid "Common tags:"
 msgstr ""
 
-msgid "Time on your GPS device"
+msgid "Additional tags:"
 msgstr ""
 
-msgid "HH:MM:SS.sss"
+msgid "Add a new Tag"
 msgstr ""
 
-msgid "Time on your stopwatch"
+msgid "Name/Id"
 msgstr ""
 
-msgid "Time window"
+msgid "Find"
 msgstr ""
 
-msgid "seconds"
+msgid "Show"
 msgstr ""
 
-msgid "Move Threshold"
+msgid "Mark"
 msgstr ""
 
-msgid "Suggest Stops"
+msgid "Ref"
 msgstr ""
 
-msgid "Find"
+msgid "Stops are possible on the"
 msgstr ""
 
-msgid "Show"
+msgid "right hand side"
 msgstr ""
 
-msgid "Mark"
+msgid "left hand side"
 msgstr ""
 
-msgid "Catch"
+msgid "Maximum distance from route"
 msgstr ""
 
-msgid "Join"
+msgid "Suggest Stops"
 msgstr ""
 
-msgid "Public Transport: Join GTFS stops"
+msgid "Create Stops from GPX ..."
 msgstr ""
 
-msgid "State"
+msgid "Create Stops from a GPX file"
 msgstr ""
 
-msgid "[incomplete]"
+msgid "Select GPX file"
 msgstr ""
 
-msgid "[empty way]"
+msgid "The GPX file contained no tracks or waypoints."
 msgstr ""
 
-msgid "[ID] {0}"
+msgid "moved"
 msgstr ""
 
-msgid "[gap]"
+msgid "added"
 msgstr ""
 
-msgid "Route patterns ..."
+msgid "Public Transport: Enable GTFSStops"
 msgstr ""
 
-msgid "Edit Route patterns for public transport"
+msgid "Public Transport: Catch GTFS stops"
 msgstr ""
 
-msgid "Route Patterns"
+msgid "skipped"
 msgstr ""
 
-msgid "Overview"
+msgid "Public Transport: Disable GTFS"
 msgstr ""
 
-msgid "Itinerary"
+msgid "Public Transport: Join GTFS stops"
 msgstr ""
 
-msgid "Stops"
+msgid "Public Transport: Change stop type"
 msgstr ""
 
-msgid "Meta"
+msgid "Public Transport: Add track stop"
 msgstr ""
 
-msgid "Existing route patterns:"
+msgid "Public Transport: Delete track stop"
 msgstr ""
 
-msgid "Reflect"
+msgid "Public Transport: Detach track stop list"
 msgstr ""
 
-msgid "Required tags:"
+msgid "Public Transport: Edit track stop list"
 msgstr ""
 
-msgid "Common tags:"
+msgid "Public Transport: Relocate nodes in track stoplist"
 msgstr ""
 
-msgid "Additional tags:"
+msgid "Public Transport: sort track stop list"
 msgstr ""
 
-msgid "Add a new Tag"
+msgid "Public Transport: Suggest stops"
 msgstr ""
 
-msgid "Name/Id"
+msgid "Public Transport: Detach waypoints"
 msgstr ""
 
-msgid "Ref"
+msgid "Public Transport: Disable waypoints"
 msgstr ""
 
-msgid "Stops are possible on the"
+msgid "Public Transport: Enable waypoints"
 msgstr ""
 
-msgid "right hand side"
+msgid "Public Transport: Edit waypoint name"
 msgstr ""
 
-msgid "left hand side"
+msgid "rail"
 msgstr ""
 
-msgid "Maximum distance from route"
+msgid "Can''t parse a time from this string."
 msgstr ""
 
-msgid " [ID] {0}"
+msgid "Invalid value"
 msgstr ""
 
-msgid "Public Transport: Change stop type"
+msgid "Create Stops from GTFS"
 msgstr ""
 
-msgid "Create Stops from GPX ..."
+msgid "GTFS-Stops"
 msgstr ""
 
-msgid "Create Stops from a GPX file"
+msgid "Type of stops to add"
 msgstr ""
 
-msgid "Select GPX file"
+msgid "Time on your GPS device"
 msgstr ""
 
-msgid "The GPX file contained no tracks or waypoints."
+msgid "HH:MM:SS.sss"
 msgstr ""
 
-msgid "Create Stops from GPX"
+msgid "Time on your stopwatch"
 msgstr ""
 
-msgid "Tracks in this GPX file:"
+msgid "Time window"
 msgstr ""
 
-msgid "Detach"
+msgid "seconds"
 msgstr ""
 
-msgid "implicit"
+msgid "Move Threshold"
 msgstr ""
 
-msgid ""
-"The GPX file doesn''t contain valid trackpoints. Please use a GPX file that "
-"has trackpoints."
+msgid "Catch"
 msgstr ""
 
-msgid "GPX File Trouble"
+msgid "Join"
 msgstr ""
 
-msgid "unnamed"
+msgid "Create Stops from GPX"
 msgstr ""
 
-msgid "Public Transport: Add track stop"
+msgid "Tracks in this GPX file:"
 msgstr ""
 
-msgid "Public Transport: Delete track stop"
+msgid "Detach"
 msgstr ""
 
-msgid "Public Transport: Detach track stop list"
+msgid "implicit"
 msgstr ""
 
-msgid "Public Transport: Edit track stop list"
+msgid "State"
 msgstr ""
 
-msgid "Public Transport: Relocate nodes in track stoplist"
+msgid "[incomplete]"
 msgstr ""
 
-msgid "Public Transport: sort track stop list"
+msgid "[empty way]"
 msgstr ""
 
-msgid "Public Transport: Suggest stops"
+msgid "[gap]"
 msgstr ""
 
 msgid "Stopname"
 msgstr ""
 
-msgid "Public Transport: Detach waypoints"
+msgid " [ID] {0}"
 msgstr ""
 
-msgid "Public Transport: Disable waypoints"
+msgid ""
+"The GPX file doesn''t contain valid trackpoints. Please use a GPX file that "
+"has trackpoints."
 msgstr ""
 
-msgid "Public Transport: Enable waypoints"
+msgid "GPX File Trouble"
 msgstr ""
 
-msgid "Public Transport: Edit waypoint name"
+msgid "unnamed"
 msgstr ""
 
 msgid "Distance between stops"
@@ -33714,6 +33795,9 @@ msgstr ""
 msgid "JOSM Tag Editor Plugin"
 msgstr ""
 
+msgid "Presets"
+msgstr ""
+
 msgid "Abort tag editing and close dialog"
 msgstr ""
 
@@ -35639,6 +35723,26 @@ msgid_plural "Overwrite ''{0}'' tags {1} from {2} with new value ''{3}''?"
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Download from Sophox API"
+msgstr ""
+
+msgid ""
+"Find places of education at least 2km, and at most 3km from the center of "
+"the selection"
+msgstr ""
+
+msgid "Show/hide Sophox snippet list"
+msgstr ""
+
+msgid "help"
+msgstr ""
+
+msgid "Server: "
+msgstr ""
+
+msgid "Wikidata+OSM server"
+msgstr ""
+
 msgid "Search Wikidata items"
 msgstr ""
 
@@ -35712,26 +35816,6 @@ msgid ""
 "objects"
 msgstr ""
 
-msgid "Download from Wikosm API"
-msgstr ""
-
-msgid ""
-"Find places of education at least 2km, and at most 3km from the center of "
-"the selection"
-msgstr ""
-
-msgid "Show/hide Wikosm snippet list"
-msgstr ""
-
-msgid "help"
-msgstr ""
-
-msgid "Server: "
-msgstr ""
-
-msgid "Wikidata+OSM server"
-msgstr ""
-
 msgid "The Ultimate WMS Super-speed Turbo Challenge II"
 msgstr ""
 
diff --git a/i18n/po/km.po b/i18n/po/km.po
index 3690c8c..1f23aa2 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-10-30 03:38+0100\n"
+"POT-Creation-Date: 2017-11-26 00:06+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-10-30 04:50+0000\n"
-"X-Generator: Launchpad (build 18493)\n"
+"X-Launchpad-Export-Date: 2017-11-26 04:51+0000\n"
+"X-Generator: Launchpad (build 18509)\n"
 "Language: \n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -438,12 +438,15 @@ msgstr ""
 msgid "Delete the active layer. Does not delete the associated file."
 msgstr ""
 
-msgid "Toggle dialogs panel"
-msgstr "បិទ/បើក​ផ្ទាំង​ប្រអប់​បញ្ចូល"
+msgid "Dialogs panel"
+msgstr ""
 
 msgid "Toggle dialogs panel, maximize mapview"
 msgstr "បិទ/បើក​ផ្ទាំង​ប្រអប់​បញ្ចូល បង្រួម​អតិបរមា​ទិដ្ឋភាព​ផែនទី"
 
+msgid "Toggle dialogs panel"
+msgstr "បិទ/បើក​ផ្ទាំង​ប្រអប់​បញ្ចូល"
+
 msgid "Distribute Nodes"
 msgstr ""
 
@@ -6869,6 +6872,9 @@ msgstr "កូអរដោណេ៖ "
 msgid "Coordinates (projected): "
 msgstr "កូអរដោណេ (បាន​ធ្វើ​ចំណោល)៖ "
 
+msgid "UTM Zone"
+msgstr "តំបន់ UTM"
+
 msgid "Part of: "
 msgstr "ផ្នែក​នៃ៖ "
 
@@ -9362,6 +9368,11 @@ msgstr ""
 msgid "Check \"Save\" to save the layer to the file specified on the left."
 msgstr ""
 
+msgid ""
+"A background upload is already in progress. Kindly wait for it to finish "
+"before uploading new changes"
+msgstr ""
+
 msgid "I would like someone to review my edits."
 msgstr ""
 
@@ -10577,6 +10588,9 @@ msgstr ""
 msgid "Save Layer"
 msgstr "រក្សាទុក​ស្រទាប់"
 
+msgid "Trying to set a read only data layer as edit layer"
+msgstr ""
+
 msgid "{0} note"
 msgid_plural "{0} notes"
 msgstr[0] ""
@@ -11459,11 +11473,6 @@ msgid "Failed to parse Mappaint styles from ''{0}''. Error was: {1}"
 msgstr ""
 "បាន​បរាជ័យ​ក្នុង​ការ​ញែក​រចនាប័ទ្ម​គំនូរ​ផែនទី​ពី ''{0}'' ។ កំហុស​គឺ៖ {1}"
 
-msgid ""
-"Detected deprecated ''{0}'' in ''{1}'' which will be removed shortly. Use "
-"''{2}'' instead."
-msgstr ""
-
 msgid "Failed to locate image ''{0}''"
 msgstr "បាន​បរាជ័យ​កំណត់​ទីតាំង​រូបភាព ''{0}''"
 
@@ -12789,6 +12798,9 @@ msgstr "បង្ហាញ​អេក្រង់​សាច​ពេល​ច
 msgid "Show object ID in selection lists"
 msgstr "បង្ហាញ​លេខ​សម្គាល់​វត្ថុ​នៅ​ក្នុង​បញ្ជី​ជម្រើស"
 
+msgid "Show node coordinates in selection lists"
+msgstr ""
+
 msgid "Show localized name in selection lists"
 msgstr "បង្ហាញ​ឈ្មោះ​ដែល​បា​បកប្រែ​នៅ​ក្នុង​បញ្ជី​ជម្រើស"
 
@@ -13601,9 +13613,6 @@ msgstr "ប្រព័ន្ធ UTM Geodesic"
 msgid "UTM"
 msgstr "UTM"
 
-msgid "UTM Zone"
-msgstr "តំបន់ UTM"
-
 msgid "North"
 msgstr "ខាងជើង"
 
@@ -14120,9 +14129,6 @@ msgstr "ធាតុ​រង​ការ​កំណត់​ស្រេច​
 msgid "Error parsing {0}: "
 msgstr "កំហុស​ក្នុង​ការ​ញែក {0}: "
 
-msgid "Presets"
-msgstr "ការ​កំណត់​ជាមុន"
-
 msgid "Search for objects by preset..."
 msgstr ""
 
@@ -16989,6 +16995,18 @@ msgstr ""
 msgid "korean"
 msgstr ""
 
+msgid "donut"
+msgstr ""
+
+msgid "mediterranean"
+msgstr ""
+
+msgid "friture"
+msgstr ""
+
+msgid "crepe"
+msgstr ""
+
 msgid "Internet access"
 msgstr ""
 
@@ -19831,7 +19849,16 @@ msgstr ""
 msgid "Tents allowed"
 msgstr ""
 
-msgid "Camping Site"
+msgid "Campsite"
+msgstr ""
+
+msgid "Caravans allowed"
+msgstr ""
+
+msgid "Backcountry"
+msgstr ""
+
+msgid "Group only access"
 msgstr ""
 
 msgid "Food+Drinks"
@@ -24660,6 +24687,14 @@ msgid ""
 "resolution or better, and refreshed more frequently with ongoing updates."
 msgstr ""
 
+msgid "DigitalGlobe Premium Imagery Vintage"
+msgstr ""
+
+msgid ""
+"Imagery boundaries and capture dates. Labels appear at zoom level 14 and "
+"higher."
+msgstr ""
+
 msgid "DigitalGlobe Standard Imagery"
 msgstr ""
 
@@ -24669,6 +24704,9 @@ msgid ""
 "Landsat. Average age is 2.31 years, with some areas updated 2x per year."
 msgstr ""
 
+msgid "DigitalGlobe Standard Imagery Vintage"
+msgstr ""
+
 msgid "Esri World Imagery"
 msgstr ""
 
@@ -24732,6 +24770,12 @@ msgstr ""
 msgid "Strava cycling and running heatmap"
 msgstr ""
 
+msgid "Strava water sports heatmap"
+msgstr ""
+
+msgid "Strava winter sports heatmap"
+msgstr ""
+
 msgid "Locator Overlay"
 msgstr ""
 
@@ -25136,6 +25180,9 @@ msgstr ""
 msgid "SPW(allonie) most recent aerial imagery"
 msgstr ""
 
+msgid "SPW(allonie) 2016 aerial imagery"
+msgstr ""
+
 msgid "SPW(allonie) 2015 aerial imagery"
 msgstr ""
 
@@ -25181,6 +25228,14 @@ msgstr ""
 msgid "Addresses data from IBGE"
 msgstr ""
 
+msgid "Street names IBGE Salvador-BA"
+msgstr ""
+
+msgid ""
+"Streets geometry and names of Salvador, Bahia. Source: Faces de Logradouro - "
+"IBGE."
+msgstr ""
+
 msgid "Rio Mosaic 2013"
 msgstr ""
 
@@ -25911,6 +25966,9 @@ msgstr ""
 msgid "Japan GSI ortho Imagery"
 msgstr ""
 
+msgid "Japan GSI Standard Map"
+msgstr ""
+
 msgid "imagico.de OSM images for mapping: Aral Sea (low water level)"
 msgstr ""
 
@@ -25940,7 +25998,7 @@ msgstr ""
 msgid "20cm ortho - Latvia - Coastline"
 msgstr ""
 
-msgid "1.cikla ortofotokarte - Latvia"
+msgid "Orthophoto 1st cycle (1994-1999) - Latvia"
 msgstr ""
 
 msgid "ORT10LT (Lithuania)"
@@ -25949,6 +26007,9 @@ msgstr ""
 msgid "geoportail.lu all layers"
 msgstr ""
 
+msgid "geoportail.lu ortho latest"
+msgstr ""
+
 msgid "geoportail.lu ortho 2016"
 msgstr ""
 
@@ -27439,6 +27500,9 @@ msgstr ""
 msgid "{0} on a node. Should be used on a way."
 msgstr ""
 
+msgid "{0} on a node. Should be used on a way or relation."
+msgstr ""
+
 msgid "{0} on a node. Should be drawn as an area."
 msgstr ""
 
@@ -27666,6 +27730,9 @@ msgstr ""
 msgid "Nodes duplicating parent way tags"
 msgstr ""
 
+msgid "{0} together with {1} and {2}. Remove {0}."
+msgstr ""
+
 msgid ""
 "wikipedia tag has no language given, use ''wikipedia''=''language:page "
 "title''"
@@ -28516,6 +28583,21 @@ msgstr ""
 msgid "Importing..."
 msgstr ""
 
+msgid "Shape is started incorrectly"
+msgstr ""
+
+msgid "Can''t load SVG diagram"
+msgstr ""
+
+msgid "Can''t find root SVG element"
+msgstr ""
+
+msgid "Import primitives"
+msgstr ""
+
+msgid "Cannot find configuration file!"
+msgstr ""
+
 msgid "DXF files [ImportDxf plugin] (*.dxf)"
 msgstr ""
 
@@ -29155,6 +29237,9 @@ msgstr ""
 msgid "Download mode"
 msgstr ""
 
+msgid "Number of images to be pre-fetched (forwards and backwards)"
+msgstr ""
+
 msgid "You are logged in as ''{0}''."
 msgstr ""
 
@@ -29365,8 +29450,17 @@ msgid "only when manually requested"
 msgstr ""
 
 msgid ""
-"The downloaded OSM area is too big. Download mode has been changed to OSM "
-"area until the layer is restarted."
+"The Mapillary layer has stopped downloading images, because the requested "
+"area is too big!"
+msgstr ""
+
+msgid ""
+"To solve this problem, you could zoom in and load a smaller area of the map."
+msgstr ""
+
+msgid ""
+"To solve this problem, you could switch to download mode ''{0}'' and load "
+"Mapillary images for a smaller portion of the map."
 msgstr ""
 
 msgid "Downloading"
@@ -32678,19 +32772,6 @@ msgstr ""
 msgid "Merge Overlap (combine)"
 msgstr ""
 
-msgid ""
-"<html>A role based relation membership was copied to all new ways.<br>You "
-"should verify this and correct it when necessary.</html>"
-msgstr ""
-
-msgid ""
-"<html>A relation membership was copied to all new ways.<br>You should verify "
-"this and correct it when necessary.</html>"
-msgstr ""
-
-msgid "Split way"
-msgstr ""
-
 msgid "Michigan Left"
 msgstr ""
 
@@ -34145,255 +34226,255 @@ msgstr ""
 msgid "PT: Route passes a oneway road in the wrong direction"
 msgstr ""
 
-msgid "moved"
+msgid "Create Stops from GTFS ..."
 msgstr ""
 
-msgid "rail"
+msgid "Create Stops from a GTFS file"
 msgstr ""
 
-msgid "Can''t parse a time from this string."
+msgid "Select GTFS file (stops.txt)"
 msgstr ""
 
-msgid "Invalid value"
+msgid "File \"{0}\" does not exist"
 msgstr ""
 
-msgid "added"
+msgid "IOException \"{0}\" occurred"
 msgstr ""
 
-msgid "Public Transport: Enable GTFSStops"
+msgid ""
+"There exists no dataset. Try to download data from the server or open an OSM "
+"file."
 msgstr ""
 
-msgid "Public Transport: Catch GTFS stops"
+msgid "No data found"
 msgstr ""
 
-msgid "skipped"
+msgid "The GTFS file was empty."
 msgstr ""
 
-msgid "Public Transport: Disable GTFS"
+msgid "[ID] {0}"
 msgstr ""
 
-msgid "Create Stops from GTFS ..."
+msgid "Route patterns ..."
 msgstr ""
 
-msgid "Create Stops from a GTFS file"
+msgid "Edit Route patterns for public transport"
 msgstr ""
 
-msgid "Select GTFS file (stops.txt)"
+msgid "Route Patterns"
 msgstr ""
 
-msgid "File \"{0}\" does not exist"
+msgid "Overview"
 msgstr ""
 
-msgid "IOException \"{0}\" occurred"
+msgid "Itinerary"
 msgstr ""
 
-msgid ""
-"There exists no dataset. Try to download data from the server or open an OSM "
-"file."
+msgid "Stops"
 msgstr ""
 
-msgid "No data found"
+msgid "Meta"
 msgstr ""
 
-msgid "The GTFS file was empty."
+msgid "Existing route patterns:"
 msgstr ""
 
-msgid "Create Stops from GTFS"
+msgid "Reflect"
 msgstr ""
 
-msgid "GTFS-Stops"
+msgid "Required tags:"
 msgstr ""
 
-msgid "Type of stops to add"
+msgid "Common tags:"
 msgstr ""
 
-msgid "Time on your GPS device"
+msgid "Additional tags:"
 msgstr ""
 
-msgid "HH:MM:SS.sss"
+msgid "Add a new Tag"
 msgstr ""
 
-msgid "Time on your stopwatch"
+msgid "Name/Id"
 msgstr ""
 
-msgid "Time window"
+msgid "Find"
 msgstr ""
 
-msgid "seconds"
-msgstr ""
+msgid "Show"
+msgstr "បង្ហាញ"
 
-msgid "Move Threshold"
+msgid "Mark"
 msgstr ""
 
-msgid "Suggest Stops"
+msgid "Ref"
 msgstr ""
 
-msgid "Find"
+msgid "Stops are possible on the"
 msgstr ""
 
-msgid "Show"
-msgstr "បង្ហាញ"
+msgid "right hand side"
+msgstr ""
 
-msgid "Mark"
+msgid "left hand side"
 msgstr ""
 
-msgid "Catch"
+msgid "Maximum distance from route"
 msgstr ""
 
-msgid "Join"
+msgid "Suggest Stops"
 msgstr ""
 
-msgid "Public Transport: Join GTFS stops"
+msgid "Create Stops from GPX ..."
 msgstr ""
 
-msgid "State"
+msgid "Create Stops from a GPX file"
 msgstr ""
 
-msgid "[incomplete]"
+msgid "Select GPX file"
 msgstr ""
 
-msgid "[empty way]"
+msgid "The GPX file contained no tracks or waypoints."
 msgstr ""
 
-msgid "[ID] {0}"
+msgid "moved"
 msgstr ""
 
-msgid "[gap]"
+msgid "added"
 msgstr ""
 
-msgid "Route patterns ..."
+msgid "Public Transport: Enable GTFSStops"
 msgstr ""
 
-msgid "Edit Route patterns for public transport"
+msgid "Public Transport: Catch GTFS stops"
 msgstr ""
 
-msgid "Route Patterns"
+msgid "skipped"
 msgstr ""
 
-msgid "Overview"
+msgid "Public Transport: Disable GTFS"
 msgstr ""
 
-msgid "Itinerary"
+msgid "Public Transport: Join GTFS stops"
 msgstr ""
 
-msgid "Stops"
+msgid "Public Transport: Change stop type"
 msgstr ""
 
-msgid "Meta"
+msgid "Public Transport: Add track stop"
 msgstr ""
 
-msgid "Existing route patterns:"
+msgid "Public Transport: Delete track stop"
 msgstr ""
 
-msgid "Reflect"
+msgid "Public Transport: Detach track stop list"
 msgstr ""
 
-msgid "Required tags:"
+msgid "Public Transport: Edit track stop list"
 msgstr ""
 
-msgid "Common tags:"
+msgid "Public Transport: Relocate nodes in track stoplist"
 msgstr ""
 
-msgid "Additional tags:"
+msgid "Public Transport: sort track stop list"
 msgstr ""
 
-msgid "Add a new Tag"
+msgid "Public Transport: Suggest stops"
 msgstr ""
 
-msgid "Name/Id"
+msgid "Public Transport: Detach waypoints"
 msgstr ""
 
-msgid "Ref"
+msgid "Public Transport: Disable waypoints"
 msgstr ""
 
-msgid "Stops are possible on the"
+msgid "Public Transport: Enable waypoints"
 msgstr ""
 
-msgid "right hand side"
+msgid "Public Transport: Edit waypoint name"
 msgstr ""
 
-msgid "left hand side"
+msgid "rail"
 msgstr ""
 
-msgid "Maximum distance from route"
+msgid "Can''t parse a time from this string."
 msgstr ""
 
-msgid " [ID] {0}"
+msgid "Invalid value"
 msgstr ""
 
-msgid "Public Transport: Change stop type"
+msgid "Create Stops from GTFS"
 msgstr ""
 
-msgid "Create Stops from GPX ..."
+msgid "GTFS-Stops"
 msgstr ""
 
-msgid "Create Stops from a GPX file"
+msgid "Type of stops to add"
 msgstr ""
 
-msgid "Select GPX file"
+msgid "Time on your GPS device"
 msgstr ""
 
-msgid "The GPX file contained no tracks or waypoints."
+msgid "HH:MM:SS.sss"
 msgstr ""
 
-msgid "Create Stops from GPX"
+msgid "Time on your stopwatch"
 msgstr ""
 
-msgid "Tracks in this GPX file:"
+msgid "Time window"
 msgstr ""
 
-msgid "Detach"
+msgid "seconds"
 msgstr ""
 
-msgid "implicit"
+msgid "Move Threshold"
 msgstr ""
 
-msgid ""
-"The GPX file doesn''t contain valid trackpoints. Please use a GPX file that "
-"has trackpoints."
+msgid "Catch"
 msgstr ""
 
-msgid "GPX File Trouble"
+msgid "Join"
 msgstr ""
 
-msgid "unnamed"
-msgstr "គ្មាន​ឈ្មោះ"
+msgid "Create Stops from GPX"
+msgstr ""
 
-msgid "Public Transport: Add track stop"
+msgid "Tracks in this GPX file:"
 msgstr ""
 
-msgid "Public Transport: Delete track stop"
+msgid "Detach"
 msgstr ""
 
-msgid "Public Transport: Detach track stop list"
+msgid "implicit"
 msgstr ""
 
-msgid "Public Transport: Edit track stop list"
+msgid "State"
 msgstr ""
 
-msgid "Public Transport: Relocate nodes in track stoplist"
+msgid "[incomplete]"
 msgstr ""
 
-msgid "Public Transport: sort track stop list"
+msgid "[empty way]"
 msgstr ""
 
-msgid "Public Transport: Suggest stops"
+msgid "[gap]"
 msgstr ""
 
 msgid "Stopname"
 msgstr ""
 
-msgid "Public Transport: Detach waypoints"
+msgid " [ID] {0}"
 msgstr ""
 
-msgid "Public Transport: Disable waypoints"
+msgid ""
+"The GPX file doesn''t contain valid trackpoints. Please use a GPX file that "
+"has trackpoints."
 msgstr ""
 
-msgid "Public Transport: Enable waypoints"
+msgid "GPX File Trouble"
 msgstr ""
 
-msgid "Public Transport: Edit waypoint name"
-msgstr ""
+msgid "unnamed"
+msgstr "គ្មាន​ឈ្មោះ"
 
 msgid "Distance between stops"
 msgstr ""
@@ -35121,6 +35202,9 @@ msgstr ""
 msgid "JOSM Tag Editor Plugin"
 msgstr ""
 
+msgid "Presets"
+msgstr "ការ​កំណត់​ជាមុន"
+
 msgid "Abort tag editing and close dialog"
 msgstr ""
 
@@ -37046,6 +37130,26 @@ msgid_plural "Overwrite ''{0}'' tags {1} from {2} with new value ''{3}''?"
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Download from Sophox API"
+msgstr ""
+
+msgid ""
+"Find places of education at least 2km, and at most 3km from the center of "
+"the selection"
+msgstr ""
+
+msgid "Show/hide Sophox snippet list"
+msgstr ""
+
+msgid "help"
+msgstr ""
+
+msgid "Server: "
+msgstr ""
+
+msgid "Wikidata+OSM server"
+msgstr ""
+
 msgid "Search Wikidata items"
 msgstr ""
 
@@ -37119,26 +37223,6 @@ msgid ""
 "objects"
 msgstr ""
 
-msgid "Download from Wikosm API"
-msgstr ""
-
-msgid ""
-"Find places of education at least 2km, and at most 3km from the center of "
-"the selection"
-msgstr ""
-
-msgid "Show/hide Wikosm snippet list"
-msgstr ""
-
-msgid "help"
-msgstr ""
-
-msgid "Server: "
-msgstr ""
-
-msgid "Wikidata+OSM server"
-msgstr ""
-
 msgid "The Ultimate WMS Super-speed Turbo Challenge II"
 msgstr ""
 
diff --git a/i18n/po/ko.po b/i18n/po/ko.po
index 7b1ea8d..2440f85 100644
--- a/i18n/po/ko.po
+++ b/i18n/po/ko.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: josm\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2017-10-30 03:38+0100\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"
 "Language-Team: Korean <ko at li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=1; plural=0;\n"
-"X-Launchpad-Export-Date: 2017-10-30 04:51+0000\n"
-"X-Generator: Launchpad (build 18493)\n"
+"X-Launchpad-Export-Date: 2017-11-26 04:52+0000\n"
+"X-Generator: Launchpad (build 18509)\n"
 "Language: ko\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -421,12 +421,15 @@ msgstr "레이어 삭제"
 msgid "Delete the active layer. Does not delete the associated file."
 msgstr "활성화된 레이어를 삭제합니다. 연결된 파일은 삭제되지 않습니다."
 
-msgid "Toggle dialogs panel"
-msgstr "대화 상자 패널 전환"
+msgid "Dialogs panel"
+msgstr ""
 
 msgid "Toggle dialogs panel, maximize mapview"
 msgstr ""
 
+msgid "Toggle dialogs panel"
+msgstr "대화 상자 패널 전환"
+
 msgid "Distribute Nodes"
 msgstr "점을 직선으로 일정하게 정렬"
 
@@ -6472,6 +6475,9 @@ msgstr "좌표: "
 msgid "Coordinates (projected): "
 msgstr ""
 
+msgid "UTM Zone"
+msgstr ""
+
 msgid "Part of: "
 msgstr "다음의 일부: "
 
@@ -8796,6 +8802,11 @@ msgstr "\"업로드\"를 체크하면 OSM 서버에 변경 사항을 업로드
 msgid "Check \"Save\" to save the layer to the file specified on the left."
 msgstr "\"저장\"을 체크하면 레이어를 왼쪽에 지정된 파일에 저장합니다."
 
+msgid ""
+"A background upload is already in progress. Kindly wait for it to finish "
+"before uploading new changes"
+msgstr ""
+
 msgid "I would like someone to review my edits."
 msgstr ""
 
@@ -9895,6 +9906,9 @@ msgstr ""
 msgid "Save Layer"
 msgstr "레이어 저장"
 
+msgid "Trying to set a read only data layer as edit layer"
+msgstr ""
+
 msgid "{0} note"
 msgid_plural "{0} notes"
 msgstr[0] "참고 {0}개"
@@ -10726,11 +10740,6 @@ msgstr ""
 msgid "Failed to parse Mappaint styles from ''{0}''. Error was: {1}"
 msgstr ""
 
-msgid ""
-"Detected deprecated ''{0}'' in ''{1}'' which will be removed shortly. Use "
-"''{2}'' instead."
-msgstr ""
-
 msgid "Failed to locate image ''{0}''"
 msgstr ""
 
@@ -11909,6 +11918,9 @@ msgstr ""
 msgid "Show object ID in selection lists"
 msgstr ""
 
+msgid "Show node coordinates in selection lists"
+msgstr ""
+
 msgid "Show localized name in selection lists"
 msgstr ""
 
@@ -12665,9 +12677,6 @@ msgstr ""
 msgid "UTM"
 msgstr ""
 
-msgid "UTM Zone"
-msgstr ""
-
 msgid "North"
 msgstr ""
 
@@ -13137,9 +13146,6 @@ msgstr ""
 msgid "Error parsing {0}: "
 msgstr ""
 
-msgid "Presets"
-msgstr ""
-
 msgid "Search for objects by preset..."
 msgstr ""
 
@@ -15687,6 +15693,18 @@ msgstr ""
 msgid "korean"
 msgstr "한식"
 
+msgid "donut"
+msgstr ""
+
+msgid "mediterranean"
+msgstr ""
+
+msgid "friture"
+msgstr ""
+
+msgid "crepe"
+msgstr ""
+
 msgid "Internet access"
 msgstr "인터넷 접속"
 
@@ -18529,7 +18547,16 @@ msgstr ""
 msgid "Tents allowed"
 msgstr ""
 
-msgid "Camping Site"
+msgid "Campsite"
+msgstr ""
+
+msgid "Caravans allowed"
+msgstr ""
+
+msgid "Backcountry"
+msgstr ""
+
+msgid "Group only access"
 msgstr ""
 
 msgid "Food+Drinks"
@@ -23358,6 +23385,14 @@ msgid ""
 "resolution or better, and refreshed more frequently with ongoing updates."
 msgstr ""
 
+msgid "DigitalGlobe Premium Imagery Vintage"
+msgstr ""
+
+msgid ""
+"Imagery boundaries and capture dates. Labels appear at zoom level 14 and "
+"higher."
+msgstr ""
+
 msgid "DigitalGlobe Standard Imagery"
 msgstr ""
 
@@ -23367,6 +23402,9 @@ msgid ""
 "Landsat. Average age is 2.31 years, with some areas updated 2x per year."
 msgstr ""
 
+msgid "DigitalGlobe Standard Imagery Vintage"
+msgstr ""
+
 msgid "Esri World Imagery"
 msgstr ""
 
@@ -23430,6 +23468,12 @@ msgstr ""
 msgid "Strava cycling and running heatmap"
 msgstr ""
 
+msgid "Strava water sports heatmap"
+msgstr ""
+
+msgid "Strava winter sports heatmap"
+msgstr ""
+
 msgid "Locator Overlay"
 msgstr ""
 
@@ -23834,6 +23878,9 @@ msgstr ""
 msgid "SPW(allonie) most recent aerial imagery"
 msgstr ""
 
+msgid "SPW(allonie) 2016 aerial imagery"
+msgstr ""
+
 msgid "SPW(allonie) 2015 aerial imagery"
 msgstr ""
 
@@ -23879,6 +23926,14 @@ msgstr ""
 msgid "Addresses data from IBGE"
 msgstr ""
 
+msgid "Street names IBGE Salvador-BA"
+msgstr ""
+
+msgid ""
+"Streets geometry and names of Salvador, Bahia. Source: Faces de Logradouro - "
+"IBGE."
+msgstr ""
+
 msgid "Rio Mosaic 2013"
 msgstr ""
 
@@ -24609,6 +24664,9 @@ msgstr ""
 msgid "Japan GSI ortho Imagery"
 msgstr ""
 
+msgid "Japan GSI Standard Map"
+msgstr ""
+
 msgid "imagico.de OSM images for mapping: Aral Sea (low water level)"
 msgstr ""
 
@@ -24638,7 +24696,7 @@ msgstr ""
 msgid "20cm ortho - Latvia - Coastline"
 msgstr ""
 
-msgid "1.cikla ortofotokarte - Latvia"
+msgid "Orthophoto 1st cycle (1994-1999) - Latvia"
 msgstr ""
 
 msgid "ORT10LT (Lithuania)"
@@ -24647,6 +24705,9 @@ msgstr ""
 msgid "geoportail.lu all layers"
 msgstr ""
 
+msgid "geoportail.lu ortho latest"
+msgstr ""
+
 msgid "geoportail.lu ortho 2016"
 msgstr ""
 
@@ -26137,6 +26198,9 @@ msgstr ""
 msgid "{0} on a node. Should be used on a way."
 msgstr ""
 
+msgid "{0} on a node. Should be used on a way or relation."
+msgstr ""
+
 msgid "{0} on a node. Should be drawn as an area."
 msgstr ""
 
@@ -26364,6 +26428,9 @@ msgstr ""
 msgid "Nodes duplicating parent way tags"
 msgstr ""
 
+msgid "{0} together with {1} and {2}. Remove {0}."
+msgstr ""
+
 msgid ""
 "wikipedia tag has no language given, use ''wikipedia''=''language:page "
 "title''"
@@ -27132,6 +27199,21 @@ msgstr ""
 msgid "Importing..."
 msgstr ""
 
+msgid "Shape is started incorrectly"
+msgstr ""
+
+msgid "Can''t load SVG diagram"
+msgstr ""
+
+msgid "Can''t find root SVG element"
+msgstr ""
+
+msgid "Import primitives"
+msgstr ""
+
+msgid "Cannot find configuration file!"
+msgstr ""
+
 msgid "DXF files [ImportDxf plugin] (*.dxf)"
 msgstr ""
 
@@ -27771,6 +27853,9 @@ msgstr ""
 msgid "Download mode"
 msgstr ""
 
+msgid "Number of images to be pre-fetched (forwards and backwards)"
+msgstr ""
+
 msgid "You are logged in as ''{0}''."
 msgstr ""
 
@@ -27981,8 +28066,17 @@ msgid "only when manually requested"
 msgstr ""
 
 msgid ""
-"The downloaded OSM area is too big. Download mode has been changed to OSM "
-"area until the layer is restarted."
+"The Mapillary layer has stopped downloading images, because the requested "
+"area is too big!"
+msgstr ""
+
+msgid ""
+"To solve this problem, you could zoom in and load a smaller area of the map."
+msgstr ""
+
+msgid ""
+"To solve this problem, you could switch to download mode ''{0}'' and load "
+"Mapillary images for a smaller portion of the map."
 msgstr ""
 
 msgid "Downloading"
@@ -31294,19 +31388,6 @@ msgstr ""
 msgid "Merge Overlap (combine)"
 msgstr ""
 
-msgid ""
-"<html>A role based relation membership was copied to all new ways.<br>You "
-"should verify this and correct it when necessary.</html>"
-msgstr ""
-
-msgid ""
-"<html>A relation membership was copied to all new ways.<br>You should verify "
-"this and correct it when necessary.</html>"
-msgstr ""
-
-msgid "Split way"
-msgstr "길 분할"
-
 msgid "Michigan Left"
 msgstr ""
 
@@ -32761,255 +32842,255 @@ msgstr ""
 msgid "PT: Route passes a oneway road in the wrong direction"
 msgstr ""
 
-msgid "moved"
+msgid "Create Stops from GTFS ..."
 msgstr ""
 
-msgid "rail"
+msgid "Create Stops from a GTFS file"
 msgstr ""
 
-msgid "Can''t parse a time from this string."
+msgid "Select GTFS file (stops.txt)"
 msgstr ""
 
-msgid "Invalid value"
+msgid "File \"{0}\" does not exist"
 msgstr ""
 
-msgid "added"
+msgid "IOException \"{0}\" occurred"
 msgstr ""
 
-msgid "Public Transport: Enable GTFSStops"
+msgid ""
+"There exists no dataset. Try to download data from the server or open an OSM "
+"file."
 msgstr ""
 
-msgid "Public Transport: Catch GTFS stops"
+msgid "No data found"
 msgstr ""
 
-msgid "skipped"
+msgid "The GTFS file was empty."
 msgstr ""
 
-msgid "Public Transport: Disable GTFS"
+msgid "[ID] {0}"
 msgstr ""
 
-msgid "Create Stops from GTFS ..."
+msgid "Route patterns ..."
 msgstr ""
 
-msgid "Create Stops from a GTFS file"
+msgid "Edit Route patterns for public transport"
 msgstr ""
 
-msgid "Select GTFS file (stops.txt)"
+msgid "Route Patterns"
 msgstr ""
 
-msgid "File \"{0}\" does not exist"
+msgid "Overview"
 msgstr ""
 
-msgid "IOException \"{0}\" occurred"
+msgid "Itinerary"
 msgstr ""
 
-msgid ""
-"There exists no dataset. Try to download data from the server or open an OSM "
-"file."
+msgid "Stops"
 msgstr ""
 
-msgid "No data found"
+msgid "Meta"
 msgstr ""
 
-msgid "The GTFS file was empty."
+msgid "Existing route patterns:"
 msgstr ""
 
-msgid "Create Stops from GTFS"
+msgid "Reflect"
 msgstr ""
 
-msgid "GTFS-Stops"
+msgid "Required tags:"
 msgstr ""
 
-msgid "Type of stops to add"
+msgid "Common tags:"
 msgstr ""
 
-msgid "Time on your GPS device"
+msgid "Additional tags:"
 msgstr ""
 
-msgid "HH:MM:SS.sss"
+msgid "Add a new Tag"
 msgstr ""
 
-msgid "Time on your stopwatch"
+msgid "Name/Id"
 msgstr ""
 
-msgid "Time window"
+msgid "Find"
 msgstr ""
 
-msgid "seconds"
+msgid "Show"
 msgstr ""
 
-msgid "Move Threshold"
+msgid "Mark"
 msgstr ""
 
-msgid "Suggest Stops"
+msgid "Ref"
 msgstr ""
 
-msgid "Find"
+msgid "Stops are possible on the"
 msgstr ""
 
-msgid "Show"
+msgid "right hand side"
 msgstr ""
 
-msgid "Mark"
+msgid "left hand side"
 msgstr ""
 
-msgid "Catch"
+msgid "Maximum distance from route"
 msgstr ""
 
-msgid "Join"
+msgid "Suggest Stops"
 msgstr ""
 
-msgid "Public Transport: Join GTFS stops"
+msgid "Create Stops from GPX ..."
 msgstr ""
 
-msgid "State"
+msgid "Create Stops from a GPX file"
 msgstr ""
 
-msgid "[incomplete]"
+msgid "Select GPX file"
 msgstr ""
 
-msgid "[empty way]"
+msgid "The GPX file contained no tracks or waypoints."
 msgstr ""
 
-msgid "[ID] {0}"
+msgid "moved"
 msgstr ""
 
-msgid "[gap]"
+msgid "added"
 msgstr ""
 
-msgid "Route patterns ..."
+msgid "Public Transport: Enable GTFSStops"
 msgstr ""
 
-msgid "Edit Route patterns for public transport"
+msgid "Public Transport: Catch GTFS stops"
 msgstr ""
 
-msgid "Route Patterns"
+msgid "skipped"
 msgstr ""
 
-msgid "Overview"
+msgid "Public Transport: Disable GTFS"
 msgstr ""
 
-msgid "Itinerary"
+msgid "Public Transport: Join GTFS stops"
 msgstr ""
 
-msgid "Stops"
+msgid "Public Transport: Change stop type"
 msgstr ""
 
-msgid "Meta"
+msgid "Public Transport: Add track stop"
 msgstr ""
 
-msgid "Existing route patterns:"
+msgid "Public Transport: Delete track stop"
 msgstr ""
 
-msgid "Reflect"
+msgid "Public Transport: Detach track stop list"
 msgstr ""
 
-msgid "Required tags:"
+msgid "Public Transport: Edit track stop list"
 msgstr ""
 
-msgid "Common tags:"
+msgid "Public Transport: Relocate nodes in track stoplist"
 msgstr ""
 
-msgid "Additional tags:"
+msgid "Public Transport: sort track stop list"
 msgstr ""
 
-msgid "Add a new Tag"
+msgid "Public Transport: Suggest stops"
 msgstr ""
 
-msgid "Name/Id"
+msgid "Public Transport: Detach waypoints"
 msgstr ""
 
-msgid "Ref"
+msgid "Public Transport: Disable waypoints"
 msgstr ""
 
-msgid "Stops are possible on the"
+msgid "Public Transport: Enable waypoints"
 msgstr ""
 
-msgid "right hand side"
+msgid "Public Transport: Edit waypoint name"
 msgstr ""
 
-msgid "left hand side"
+msgid "rail"
 msgstr ""
 
-msgid "Maximum distance from route"
+msgid "Can''t parse a time from this string."
 msgstr ""
 
-msgid " [ID] {0}"
+msgid "Invalid value"
 msgstr ""
 
-msgid "Public Transport: Change stop type"
+msgid "Create Stops from GTFS"
 msgstr ""
 
-msgid "Create Stops from GPX ..."
+msgid "GTFS-Stops"
 msgstr ""
 
-msgid "Create Stops from a GPX file"
+msgid "Type of stops to add"
 msgstr ""
 
-msgid "Select GPX file"
+msgid "Time on your GPS device"
 msgstr ""
 
-msgid "The GPX file contained no tracks or waypoints."
+msgid "HH:MM:SS.sss"
 msgstr ""
 
-msgid "Create Stops from GPX"
+msgid "Time on your stopwatch"
 msgstr ""
 
-msgid "Tracks in this GPX file:"
+msgid "Time window"
 msgstr ""
 
-msgid "Detach"
+msgid "seconds"
 msgstr ""
 
-msgid "implicit"
+msgid "Move Threshold"
 msgstr ""
 
-msgid ""
-"The GPX file doesn''t contain valid trackpoints. Please use a GPX file that "
-"has trackpoints."
+msgid "Catch"
 msgstr ""
 
-msgid "GPX File Trouble"
+msgid "Join"
 msgstr ""
 
-msgid "unnamed"
-msgstr "이름이 정해지지 않았습니다."
+msgid "Create Stops from GPX"
+msgstr ""
 
-msgid "Public Transport: Add track stop"
+msgid "Tracks in this GPX file:"
 msgstr ""
 
-msgid "Public Transport: Delete track stop"
+msgid "Detach"
 msgstr ""
 
-msgid "Public Transport: Detach track stop list"
+msgid "implicit"
 msgstr ""
 
-msgid "Public Transport: Edit track stop list"
+msgid "State"
 msgstr ""
 
-msgid "Public Transport: Relocate nodes in track stoplist"
+msgid "[incomplete]"
 msgstr ""
 
-msgid "Public Transport: sort track stop list"
+msgid "[empty way]"
 msgstr ""
 
-msgid "Public Transport: Suggest stops"
+msgid "[gap]"
 msgstr ""
 
 msgid "Stopname"
 msgstr ""
 
-msgid "Public Transport: Detach waypoints"
+msgid " [ID] {0}"
 msgstr ""
 
-msgid "Public Transport: Disable waypoints"
+msgid ""
+"The GPX file doesn''t contain valid trackpoints. Please use a GPX file that "
+"has trackpoints."
 msgstr ""
 
-msgid "Public Transport: Enable waypoints"
+msgid "GPX File Trouble"
 msgstr ""
 
-msgid "Public Transport: Edit waypoint name"
-msgstr ""
+msgid "unnamed"
+msgstr "이름이 정해지지 않았습니다."
 
 msgid "Distance between stops"
 msgstr ""
@@ -33737,6 +33818,9 @@ msgstr ""
 msgid "JOSM Tag Editor Plugin"
 msgstr ""
 
+msgid "Presets"
+msgstr ""
+
 msgid "Abort tag editing and close dialog"
 msgstr "태그 편집을 중단하고 대화 상자를 닫습니다"
 
@@ -35661,6 +35745,26 @@ msgid_plural "Overwrite ''{0}'' tags {1} from {2} with new value ''{3}''?"
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Download from Sophox API"
+msgstr ""
+
+msgid ""
+"Find places of education at least 2km, and at most 3km from the center of "
+"the selection"
+msgstr ""
+
+msgid "Show/hide Sophox snippet list"
+msgstr ""
+
+msgid "help"
+msgstr ""
+
+msgid "Server: "
+msgstr ""
+
+msgid "Wikidata+OSM server"
+msgstr ""
+
 msgid "Search Wikidata items"
 msgstr ""
 
@@ -35734,26 +35838,6 @@ msgid ""
 "objects"
 msgstr "선택된 개체에 이 문서에 대응하는 ''wikipedia'' 태그를 추가합니다"
 
-msgid "Download from Wikosm API"
-msgstr ""
-
-msgid ""
-"Find places of education at least 2km, and at most 3km from the center of "
-"the selection"
-msgstr ""
-
-msgid "Show/hide Wikosm snippet list"
-msgstr ""
-
-msgid "help"
-msgstr ""
-
-msgid "Server: "
-msgstr ""
-
-msgid "Wikidata+OSM server"
-msgstr ""
-
 msgid "The Ultimate WMS Super-speed Turbo Challenge II"
 msgstr ""
 
diff --git a/i18n/po/ku.po b/i18n/po/ku.po
index 3feca43..7e04444 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-10-30 03:38+0100\n"
+"POT-Creation-Date: 2017-11-26 00:06+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-10-30 04:51+0000\n"
-"X-Generator: Launchpad (build 18493)\n"
+"X-Launchpad-Export-Date: 2017-11-26 04:52+0000\n"
+"X-Generator: Launchpad (build 18509)\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
 msgstr ""
@@ -420,12 +420,15 @@ msgstr ""
 msgid "Delete the active layer. Does not delete the associated file."
 msgstr ""
 
-msgid "Toggle dialogs panel"
+msgid "Dialogs panel"
 msgstr ""
 
 msgid "Toggle dialogs panel, maximize mapview"
 msgstr ""
 
+msgid "Toggle dialogs panel"
+msgstr ""
+
 msgid "Distribute Nodes"
 msgstr ""
 
@@ -6487,6 +6490,9 @@ msgstr ""
 msgid "Coordinates (projected): "
 msgstr ""
 
+msgid "UTM Zone"
+msgstr ""
+
 msgid "Part of: "
 msgstr ""
 
@@ -8785,6 +8791,11 @@ msgstr ""
 msgid "Check \"Save\" to save the layer to the file specified on the left."
 msgstr ""
 
+msgid ""
+"A background upload is already in progress. Kindly wait for it to finish "
+"before uploading new changes"
+msgstr ""
+
 msgid "I would like someone to review my edits."
 msgstr ""
 
@@ -9893,6 +9904,9 @@ msgstr ""
 msgid "Save Layer"
 msgstr ""
 
+msgid "Trying to set a read only data layer as edit layer"
+msgstr ""
+
 msgid "{0} note"
 msgid_plural "{0} notes"
 msgstr[0] ""
@@ -10723,11 +10737,6 @@ msgstr ""
 msgid "Failed to parse Mappaint styles from ''{0}''. Error was: {1}"
 msgstr ""
 
-msgid ""
-"Detected deprecated ''{0}'' in ''{1}'' which will be removed shortly. Use "
-"''{2}'' instead."
-msgstr ""
-
 msgid "Failed to locate image ''{0}''"
 msgstr ""
 
@@ -11892,6 +11901,9 @@ msgstr ""
 msgid "Show object ID in selection lists"
 msgstr ""
 
+msgid "Show node coordinates in selection lists"
+msgstr ""
+
 msgid "Show localized name in selection lists"
 msgstr ""
 
@@ -12648,9 +12660,6 @@ msgstr ""
 msgid "UTM"
 msgstr ""
 
-msgid "UTM Zone"
-msgstr ""
-
 msgid "North"
 msgstr ""
 
@@ -13118,9 +13127,6 @@ msgstr ""
 msgid "Error parsing {0}: "
 msgstr ""
 
-msgid "Presets"
-msgstr ""
-
 msgid "Search for objects by preset..."
 msgstr ""
 
@@ -15662,6 +15668,18 @@ msgstr ""
 msgid "korean"
 msgstr ""
 
+msgid "donut"
+msgstr ""
+
+msgid "mediterranean"
+msgstr ""
+
+msgid "friture"
+msgstr ""
+
+msgid "crepe"
+msgstr ""
+
 msgid "Internet access"
 msgstr ""
 
@@ -18504,7 +18522,16 @@ msgstr ""
 msgid "Tents allowed"
 msgstr ""
 
-msgid "Camping Site"
+msgid "Campsite"
+msgstr ""
+
+msgid "Caravans allowed"
+msgstr ""
+
+msgid "Backcountry"
+msgstr ""
+
+msgid "Group only access"
 msgstr ""
 
 msgid "Food+Drinks"
@@ -23333,6 +23360,14 @@ msgid ""
 "resolution or better, and refreshed more frequently with ongoing updates."
 msgstr ""
 
+msgid "DigitalGlobe Premium Imagery Vintage"
+msgstr ""
+
+msgid ""
+"Imagery boundaries and capture dates. Labels appear at zoom level 14 and "
+"higher."
+msgstr ""
+
 msgid "DigitalGlobe Standard Imagery"
 msgstr ""
 
@@ -23342,6 +23377,9 @@ msgid ""
 "Landsat. Average age is 2.31 years, with some areas updated 2x per year."
 msgstr ""
 
+msgid "DigitalGlobe Standard Imagery Vintage"
+msgstr ""
+
 msgid "Esri World Imagery"
 msgstr ""
 
@@ -23405,6 +23443,12 @@ msgstr ""
 msgid "Strava cycling and running heatmap"
 msgstr ""
 
+msgid "Strava water sports heatmap"
+msgstr ""
+
+msgid "Strava winter sports heatmap"
+msgstr ""
+
 msgid "Locator Overlay"
 msgstr ""
 
@@ -23809,6 +23853,9 @@ msgstr ""
 msgid "SPW(allonie) most recent aerial imagery"
 msgstr ""
 
+msgid "SPW(allonie) 2016 aerial imagery"
+msgstr ""
+
 msgid "SPW(allonie) 2015 aerial imagery"
 msgstr ""
 
@@ -23854,6 +23901,14 @@ msgstr ""
 msgid "Addresses data from IBGE"
 msgstr ""
 
+msgid "Street names IBGE Salvador-BA"
+msgstr ""
+
+msgid ""
+"Streets geometry and names of Salvador, Bahia. Source: Faces de Logradouro - "
+"IBGE."
+msgstr ""
+
 msgid "Rio Mosaic 2013"
 msgstr ""
 
@@ -24584,6 +24639,9 @@ msgstr ""
 msgid "Japan GSI ortho Imagery"
 msgstr ""
 
+msgid "Japan GSI Standard Map"
+msgstr ""
+
 msgid "imagico.de OSM images for mapping: Aral Sea (low water level)"
 msgstr ""
 
@@ -24613,7 +24671,7 @@ msgstr ""
 msgid "20cm ortho - Latvia - Coastline"
 msgstr ""
 
-msgid "1.cikla ortofotokarte - Latvia"
+msgid "Orthophoto 1st cycle (1994-1999) - Latvia"
 msgstr ""
 
 msgid "ORT10LT (Lithuania)"
@@ -24622,6 +24680,9 @@ msgstr ""
 msgid "geoportail.lu all layers"
 msgstr ""
 
+msgid "geoportail.lu ortho latest"
+msgstr ""
+
 msgid "geoportail.lu ortho 2016"
 msgstr ""
 
@@ -26112,6 +26173,9 @@ msgstr ""
 msgid "{0} on a node. Should be used on a way."
 msgstr ""
 
+msgid "{0} on a node. Should be used on a way or relation."
+msgstr ""
+
 msgid "{0} on a node. Should be drawn as an area."
 msgstr ""
 
@@ -26339,6 +26403,9 @@ msgstr ""
 msgid "Nodes duplicating parent way tags"
 msgstr ""
 
+msgid "{0} together with {1} and {2}. Remove {0}."
+msgstr ""
+
 msgid ""
 "wikipedia tag has no language given, use ''wikipedia''=''language:page "
 "title''"
@@ -27103,6 +27170,21 @@ msgstr ""
 msgid "Importing..."
 msgstr ""
 
+msgid "Shape is started incorrectly"
+msgstr ""
+
+msgid "Can''t load SVG diagram"
+msgstr ""
+
+msgid "Can''t find root SVG element"
+msgstr ""
+
+msgid "Import primitives"
+msgstr ""
+
+msgid "Cannot find configuration file!"
+msgstr ""
+
 msgid "DXF files [ImportDxf plugin] (*.dxf)"
 msgstr ""
 
@@ -27742,6 +27824,9 @@ msgstr ""
 msgid "Download mode"
 msgstr ""
 
+msgid "Number of images to be pre-fetched (forwards and backwards)"
+msgstr ""
+
 msgid "You are logged in as ''{0}''."
 msgstr ""
 
@@ -27952,8 +28037,17 @@ msgid "only when manually requested"
 msgstr ""
 
 msgid ""
-"The downloaded OSM area is too big. Download mode has been changed to OSM "
-"area until the layer is restarted."
+"The Mapillary layer has stopped downloading images, because the requested "
+"area is too big!"
+msgstr ""
+
+msgid ""
+"To solve this problem, you could zoom in and load a smaller area of the map."
+msgstr ""
+
+msgid ""
+"To solve this problem, you could switch to download mode ''{0}'' and load "
+"Mapillary images for a smaller portion of the map."
 msgstr ""
 
 msgid "Downloading"
@@ -31265,19 +31359,6 @@ msgstr ""
 msgid "Merge Overlap (combine)"
 msgstr ""
 
-msgid ""
-"<html>A role based relation membership was copied to all new ways.<br>You "
-"should verify this and correct it when necessary.</html>"
-msgstr ""
-
-msgid ""
-"<html>A relation membership was copied to all new ways.<br>You should verify "
-"this and correct it when necessary.</html>"
-msgstr ""
-
-msgid "Split way"
-msgstr ""
-
 msgid "Michigan Left"
 msgstr ""
 
@@ -32732,254 +32813,254 @@ msgstr ""
 msgid "PT: Route passes a oneway road in the wrong direction"
 msgstr ""
 
-msgid "moved"
+msgid "Create Stops from GTFS ..."
 msgstr ""
 
-msgid "rail"
+msgid "Create Stops from a GTFS file"
 msgstr ""
 
-msgid "Can''t parse a time from this string."
+msgid "Select GTFS file (stops.txt)"
 msgstr ""
 
-msgid "Invalid value"
+msgid "File \"{0}\" does not exist"
 msgstr ""
 
-msgid "added"
+msgid "IOException \"{0}\" occurred"
 msgstr ""
 
-msgid "Public Transport: Enable GTFSStops"
+msgid ""
+"There exists no dataset. Try to download data from the server or open an OSM "
+"file."
 msgstr ""
 
-msgid "Public Transport: Catch GTFS stops"
+msgid "No data found"
 msgstr ""
 
-msgid "skipped"
+msgid "The GTFS file was empty."
 msgstr ""
 
-msgid "Public Transport: Disable GTFS"
+msgid "[ID] {0}"
 msgstr ""
 
-msgid "Create Stops from GTFS ..."
+msgid "Route patterns ..."
 msgstr ""
 
-msgid "Create Stops from a GTFS file"
+msgid "Edit Route patterns for public transport"
 msgstr ""
 
-msgid "Select GTFS file (stops.txt)"
+msgid "Route Patterns"
 msgstr ""
 
-msgid "File \"{0}\" does not exist"
+msgid "Overview"
 msgstr ""
 
-msgid "IOException \"{0}\" occurred"
+msgid "Itinerary"
 msgstr ""
 
-msgid ""
-"There exists no dataset. Try to download data from the server or open an OSM "
-"file."
+msgid "Stops"
 msgstr ""
 
-msgid "No data found"
+msgid "Meta"
 msgstr ""
 
-msgid "The GTFS file was empty."
+msgid "Existing route patterns:"
 msgstr ""
 
-msgid "Create Stops from GTFS"
+msgid "Reflect"
 msgstr ""
 
-msgid "GTFS-Stops"
+msgid "Required tags:"
 msgstr ""
 
-msgid "Type of stops to add"
+msgid "Common tags:"
 msgstr ""
 
-msgid "Time on your GPS device"
+msgid "Additional tags:"
 msgstr ""
 
-msgid "HH:MM:SS.sss"
+msgid "Add a new Tag"
 msgstr ""
 
-msgid "Time on your stopwatch"
+msgid "Name/Id"
 msgstr ""
 
-msgid "Time window"
+msgid "Find"
 msgstr ""
 
-msgid "seconds"
+msgid "Show"
 msgstr ""
 
-msgid "Move Threshold"
+msgid "Mark"
 msgstr ""
 
-msgid "Suggest Stops"
+msgid "Ref"
 msgstr ""
 
-msgid "Find"
+msgid "Stops are possible on the"
 msgstr ""
 
-msgid "Show"
+msgid "right hand side"
 msgstr ""
 
-msgid "Mark"
+msgid "left hand side"
 msgstr ""
 
-msgid "Catch"
+msgid "Maximum distance from route"
 msgstr ""
 
-msgid "Join"
+msgid "Suggest Stops"
 msgstr ""
 
-msgid "Public Transport: Join GTFS stops"
+msgid "Create Stops from GPX ..."
 msgstr ""
 
-msgid "State"
+msgid "Create Stops from a GPX file"
 msgstr ""
 
-msgid "[incomplete]"
+msgid "Select GPX file"
 msgstr ""
 
-msgid "[empty way]"
+msgid "The GPX file contained no tracks or waypoints."
 msgstr ""
 
-msgid "[ID] {0}"
+msgid "moved"
 msgstr ""
 
-msgid "[gap]"
+msgid "added"
 msgstr ""
 
-msgid "Route patterns ..."
+msgid "Public Transport: Enable GTFSStops"
 msgstr ""
 
-msgid "Edit Route patterns for public transport"
+msgid "Public Transport: Catch GTFS stops"
 msgstr ""
 
-msgid "Route Patterns"
+msgid "skipped"
 msgstr ""
 
-msgid "Overview"
+msgid "Public Transport: Disable GTFS"
 msgstr ""
 
-msgid "Itinerary"
+msgid "Public Transport: Join GTFS stops"
 msgstr ""
 
-msgid "Stops"
+msgid "Public Transport: Change stop type"
 msgstr ""
 
-msgid "Meta"
+msgid "Public Transport: Add track stop"
 msgstr ""
 
-msgid "Existing route patterns:"
+msgid "Public Transport: Delete track stop"
 msgstr ""
 
-msgid "Reflect"
+msgid "Public Transport: Detach track stop list"
 msgstr ""
 
-msgid "Required tags:"
+msgid "Public Transport: Edit track stop list"
 msgstr ""
 
-msgid "Common tags:"
+msgid "Public Transport: Relocate nodes in track stoplist"
 msgstr ""
 
-msgid "Additional tags:"
+msgid "Public Transport: sort track stop list"
 msgstr ""
 
-msgid "Add a new Tag"
+msgid "Public Transport: Suggest stops"
 msgstr ""
 
-msgid "Name/Id"
+msgid "Public Transport: Detach waypoints"
 msgstr ""
 
-msgid "Ref"
+msgid "Public Transport: Disable waypoints"
 msgstr ""
 
-msgid "Stops are possible on the"
+msgid "Public Transport: Enable waypoints"
 msgstr ""
 
-msgid "right hand side"
+msgid "Public Transport: Edit waypoint name"
 msgstr ""
 
-msgid "left hand side"
+msgid "rail"
 msgstr ""
 
-msgid "Maximum distance from route"
+msgid "Can''t parse a time from this string."
 msgstr ""
 
-msgid " [ID] {0}"
+msgid "Invalid value"
 msgstr ""
 
-msgid "Public Transport: Change stop type"
+msgid "Create Stops from GTFS"
 msgstr ""
 
-msgid "Create Stops from GPX ..."
+msgid "GTFS-Stops"
 msgstr ""
 
-msgid "Create Stops from a GPX file"
+msgid "Type of stops to add"
 msgstr ""
 
-msgid "Select GPX file"
+msgid "Time on your GPS device"
 msgstr ""
 
-msgid "The GPX file contained no tracks or waypoints."
+msgid "HH:MM:SS.sss"
 msgstr ""
 
-msgid "Create Stops from GPX"
+msgid "Time on your stopwatch"
 msgstr ""
 
-msgid "Tracks in this GPX file:"
+msgid "Time window"
 msgstr ""
 
-msgid "Detach"
+msgid "seconds"
 msgstr ""
 
-msgid "implicit"
+msgid "Move Threshold"
 msgstr ""
 
-msgid ""
-"The GPX file doesn''t contain valid trackpoints. Please use a GPX file that "
-"has trackpoints."
+msgid "Catch"
 msgstr ""
 
-msgid "GPX File Trouble"
+msgid "Join"
 msgstr ""
 
-msgid "unnamed"
+msgid "Create Stops from GPX"
 msgstr ""
 
-msgid "Public Transport: Add track stop"
+msgid "Tracks in this GPX file:"
 msgstr ""
 
-msgid "Public Transport: Delete track stop"
+msgid "Detach"
 msgstr ""
 
-msgid "Public Transport: Detach track stop list"
+msgid "implicit"
 msgstr ""
 
-msgid "Public Transport: Edit track stop list"
+msgid "State"
 msgstr ""
 
-msgid "Public Transport: Relocate nodes in track stoplist"
+msgid "[incomplete]"
 msgstr ""
 
-msgid "Public Transport: sort track stop list"
+msgid "[empty way]"
 msgstr ""
 
-msgid "Public Transport: Suggest stops"
+msgid "[gap]"
 msgstr ""
 
 msgid "Stopname"
 msgstr ""
 
-msgid "Public Transport: Detach waypoints"
+msgid " [ID] {0}"
 msgstr ""
 
-msgid "Public Transport: Disable waypoints"
+msgid ""
+"The GPX file doesn''t contain valid trackpoints. Please use a GPX file that "
+"has trackpoints."
 msgstr ""
 
-msgid "Public Transport: Enable waypoints"
+msgid "GPX File Trouble"
 msgstr ""
 
-msgid "Public Transport: Edit waypoint name"
+msgid "unnamed"
 msgstr ""
 
 msgid "Distance between stops"
@@ -33708,6 +33789,9 @@ msgstr ""
 msgid "JOSM Tag Editor Plugin"
 msgstr ""
 
+msgid "Presets"
+msgstr ""
+
 msgid "Abort tag editing and close dialog"
 msgstr ""
 
@@ -35633,6 +35717,26 @@ msgid_plural "Overwrite ''{0}'' tags {1} from {2} with new value ''{3}''?"
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Download from Sophox API"
+msgstr ""
+
+msgid ""
+"Find places of education at least 2km, and at most 3km from the center of "
+"the selection"
+msgstr ""
+
+msgid "Show/hide Sophox snippet list"
+msgstr ""
+
+msgid "help"
+msgstr ""
+
+msgid "Server: "
+msgstr ""
+
+msgid "Wikidata+OSM server"
+msgstr ""
+
 msgid "Search Wikidata items"
 msgstr ""
 
@@ -35706,26 +35810,6 @@ msgid ""
 "objects"
 msgstr ""
 
-msgid "Download from Wikosm API"
-msgstr ""
-
-msgid ""
-"Find places of education at least 2km, and at most 3km from the center of "
-"the selection"
-msgstr ""
-
-msgid "Show/hide Wikosm snippet list"
-msgstr ""
-
-msgid "help"
-msgstr ""
-
-msgid "Server: "
-msgstr ""
-
-msgid "Wikidata+OSM server"
-msgstr ""
-
 msgid "The Ultimate WMS Super-speed Turbo Challenge II"
 msgstr ""
 
diff --git a/i18n/po/ky.po b/i18n/po/ky.po
index bc86ecd..a97414f 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-10-30 03:38+0100\n"
+"POT-Creation-Date: 2017-11-26 00:06+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-10-30 04:50+0000\n"
-"X-Generator: Launchpad (build 18493)\n"
+"X-Launchpad-Export-Date: 2017-11-26 04:51+0000\n"
+"X-Generator: Launchpad (build 18509)\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
 msgstr ""
@@ -420,12 +420,15 @@ msgstr ""
 msgid "Delete the active layer. Does not delete the associated file."
 msgstr ""
 
-msgid "Toggle dialogs panel"
+msgid "Dialogs panel"
 msgstr ""
 
 msgid "Toggle dialogs panel, maximize mapview"
 msgstr ""
 
+msgid "Toggle dialogs panel"
+msgstr ""
+
 msgid "Distribute Nodes"
 msgstr ""
 
@@ -6487,6 +6490,9 @@ msgstr ""
 msgid "Coordinates (projected): "
 msgstr ""
 
+msgid "UTM Zone"
+msgstr ""
+
 msgid "Part of: "
 msgstr ""
 
@@ -8785,6 +8791,11 @@ msgstr ""
 msgid "Check \"Save\" to save the layer to the file specified on the left."
 msgstr ""
 
+msgid ""
+"A background upload is already in progress. Kindly wait for it to finish "
+"before uploading new changes"
+msgstr ""
+
 msgid "I would like someone to review my edits."
 msgstr ""
 
@@ -9893,6 +9904,9 @@ msgstr ""
 msgid "Save Layer"
 msgstr ""
 
+msgid "Trying to set a read only data layer as edit layer"
+msgstr ""
+
 msgid "{0} note"
 msgid_plural "{0} notes"
 msgstr[0] ""
@@ -10723,11 +10737,6 @@ msgstr ""
 msgid "Failed to parse Mappaint styles from ''{0}''. Error was: {1}"
 msgstr ""
 
-msgid ""
-"Detected deprecated ''{0}'' in ''{1}'' which will be removed shortly. Use "
-"''{2}'' instead."
-msgstr ""
-
 msgid "Failed to locate image ''{0}''"
 msgstr ""
 
@@ -11892,6 +11901,9 @@ msgstr ""
 msgid "Show object ID in selection lists"
 msgstr ""
 
+msgid "Show node coordinates in selection lists"
+msgstr ""
+
 msgid "Show localized name in selection lists"
 msgstr ""
 
@@ -12648,9 +12660,6 @@ msgstr ""
 msgid "UTM"
 msgstr ""
 
-msgid "UTM Zone"
-msgstr ""
-
 msgid "North"
 msgstr ""
 
@@ -13118,9 +13127,6 @@ msgstr ""
 msgid "Error parsing {0}: "
 msgstr ""
 
-msgid "Presets"
-msgstr ""
-
 msgid "Search for objects by preset..."
 msgstr ""
 
@@ -15662,6 +15668,18 @@ msgstr ""
 msgid "korean"
 msgstr ""
 
+msgid "donut"
+msgstr ""
+
+msgid "mediterranean"
+msgstr ""
+
+msgid "friture"
+msgstr ""
+
+msgid "crepe"
+msgstr ""
+
 msgid "Internet access"
 msgstr ""
 
@@ -18504,7 +18522,16 @@ msgstr ""
 msgid "Tents allowed"
 msgstr ""
 
-msgid "Camping Site"
+msgid "Campsite"
+msgstr ""
+
+msgid "Caravans allowed"
+msgstr ""
+
+msgid "Backcountry"
+msgstr ""
+
+msgid "Group only access"
 msgstr ""
 
 msgid "Food+Drinks"
@@ -23333,6 +23360,14 @@ msgid ""
 "resolution or better, and refreshed more frequently with ongoing updates."
 msgstr ""
 
+msgid "DigitalGlobe Premium Imagery Vintage"
+msgstr ""
+
+msgid ""
+"Imagery boundaries and capture dates. Labels appear at zoom level 14 and "
+"higher."
+msgstr ""
+
 msgid "DigitalGlobe Standard Imagery"
 msgstr ""
 
@@ -23342,6 +23377,9 @@ msgid ""
 "Landsat. Average age is 2.31 years, with some areas updated 2x per year."
 msgstr ""
 
+msgid "DigitalGlobe Standard Imagery Vintage"
+msgstr ""
+
 msgid "Esri World Imagery"
 msgstr ""
 
@@ -23405,6 +23443,12 @@ msgstr ""
 msgid "Strava cycling and running heatmap"
 msgstr ""
 
+msgid "Strava water sports heatmap"
+msgstr ""
+
+msgid "Strava winter sports heatmap"
+msgstr ""
+
 msgid "Locator Overlay"
 msgstr ""
 
@@ -23809,6 +23853,9 @@ msgstr ""
 msgid "SPW(allonie) most recent aerial imagery"
 msgstr ""
 
+msgid "SPW(allonie) 2016 aerial imagery"
+msgstr ""
+
 msgid "SPW(allonie) 2015 aerial imagery"
 msgstr ""
 
@@ -23854,6 +23901,14 @@ msgstr ""
 msgid "Addresses data from IBGE"
 msgstr ""
 
+msgid "Street names IBGE Salvador-BA"
+msgstr ""
+
+msgid ""
+"Streets geometry and names of Salvador, Bahia. Source: Faces de Logradouro - "
+"IBGE."
+msgstr ""
+
 msgid "Rio Mosaic 2013"
 msgstr ""
 
@@ -24584,6 +24639,9 @@ msgstr ""
 msgid "Japan GSI ortho Imagery"
 msgstr ""
 
+msgid "Japan GSI Standard Map"
+msgstr ""
+
 msgid "imagico.de OSM images for mapping: Aral Sea (low water level)"
 msgstr ""
 
@@ -24613,7 +24671,7 @@ msgstr ""
 msgid "20cm ortho - Latvia - Coastline"
 msgstr ""
 
-msgid "1.cikla ortofotokarte - Latvia"
+msgid "Orthophoto 1st cycle (1994-1999) - Latvia"
 msgstr ""
 
 msgid "ORT10LT (Lithuania)"
@@ -24622,6 +24680,9 @@ msgstr ""
 msgid "geoportail.lu all layers"
 msgstr ""
 
+msgid "geoportail.lu ortho latest"
+msgstr ""
+
 msgid "geoportail.lu ortho 2016"
 msgstr ""
 
@@ -26112,6 +26173,9 @@ msgstr ""
 msgid "{0} on a node. Should be used on a way."
 msgstr ""
 
+msgid "{0} on a node. Should be used on a way or relation."
+msgstr ""
+
 msgid "{0} on a node. Should be drawn as an area."
 msgstr ""
 
@@ -26339,6 +26403,9 @@ msgstr ""
 msgid "Nodes duplicating parent way tags"
 msgstr ""
 
+msgid "{0} together with {1} and {2}. Remove {0}."
+msgstr ""
+
 msgid ""
 "wikipedia tag has no language given, use ''wikipedia''=''language:page "
 "title''"
@@ -27103,6 +27170,21 @@ msgstr ""
 msgid "Importing..."
 msgstr ""
 
+msgid "Shape is started incorrectly"
+msgstr ""
+
+msgid "Can''t load SVG diagram"
+msgstr ""
+
+msgid "Can''t find root SVG element"
+msgstr ""
+
+msgid "Import primitives"
+msgstr ""
+
+msgid "Cannot find configuration file!"
+msgstr ""
+
 msgid "DXF files [ImportDxf plugin] (*.dxf)"
 msgstr ""
 
@@ -27742,6 +27824,9 @@ msgstr ""
 msgid "Download mode"
 msgstr ""
 
+msgid "Number of images to be pre-fetched (forwards and backwards)"
+msgstr ""
+
 msgid "You are logged in as ''{0}''."
 msgstr ""
 
@@ -27952,8 +28037,17 @@ msgid "only when manually requested"
 msgstr ""
 
 msgid ""
-"The downloaded OSM area is too big. Download mode has been changed to OSM "
-"area until the layer is restarted."
+"The Mapillary layer has stopped downloading images, because the requested "
+"area is too big!"
+msgstr ""
+
+msgid ""
+"To solve this problem, you could zoom in and load a smaller area of the map."
+msgstr ""
+
+msgid ""
+"To solve this problem, you could switch to download mode ''{0}'' and load "
+"Mapillary images for a smaller portion of the map."
 msgstr ""
 
 msgid "Downloading"
@@ -31265,19 +31359,6 @@ msgstr ""
 msgid "Merge Overlap (combine)"
 msgstr ""
 
-msgid ""
-"<html>A role based relation membership was copied to all new ways.<br>You "
-"should verify this and correct it when necessary.</html>"
-msgstr ""
-
-msgid ""
-"<html>A relation membership was copied to all new ways.<br>You should verify "
-"this and correct it when necessary.</html>"
-msgstr ""
-
-msgid "Split way"
-msgstr ""
-
 msgid "Michigan Left"
 msgstr ""
 
@@ -32732,254 +32813,254 @@ msgstr ""
 msgid "PT: Route passes a oneway road in the wrong direction"
 msgstr ""
 
-msgid "moved"
+msgid "Create Stops from GTFS ..."
 msgstr ""
 
-msgid "rail"
+msgid "Create Stops from a GTFS file"
 msgstr ""
 
-msgid "Can''t parse a time from this string."
+msgid "Select GTFS file (stops.txt)"
 msgstr ""
 
-msgid "Invalid value"
+msgid "File \"{0}\" does not exist"
 msgstr ""
 
-msgid "added"
+msgid "IOException \"{0}\" occurred"
 msgstr ""
 
-msgid "Public Transport: Enable GTFSStops"
+msgid ""
+"There exists no dataset. Try to download data from the server or open an OSM "
+"file."
 msgstr ""
 
-msgid "Public Transport: Catch GTFS stops"
+msgid "No data found"
 msgstr ""
 
-msgid "skipped"
+msgid "The GTFS file was empty."
 msgstr ""
 
-msgid "Public Transport: Disable GTFS"
+msgid "[ID] {0}"
 msgstr ""
 
-msgid "Create Stops from GTFS ..."
+msgid "Route patterns ..."
 msgstr ""
 
-msgid "Create Stops from a GTFS file"
+msgid "Edit Route patterns for public transport"
 msgstr ""
 
-msgid "Select GTFS file (stops.txt)"
+msgid "Route Patterns"
 msgstr ""
 
-msgid "File \"{0}\" does not exist"
+msgid "Overview"
 msgstr ""
 
-msgid "IOException \"{0}\" occurred"
+msgid "Itinerary"
 msgstr ""
 
-msgid ""
-"There exists no dataset. Try to download data from the server or open an OSM "
-"file."
+msgid "Stops"
 msgstr ""
 
-msgid "No data found"
+msgid "Meta"
 msgstr ""
 
-msgid "The GTFS file was empty."
+msgid "Existing route patterns:"
 msgstr ""
 
-msgid "Create Stops from GTFS"
+msgid "Reflect"
 msgstr ""
 
-msgid "GTFS-Stops"
+msgid "Required tags:"
 msgstr ""
 
-msgid "Type of stops to add"
+msgid "Common tags:"
 msgstr ""
 
-msgid "Time on your GPS device"
+msgid "Additional tags:"
 msgstr ""
 
-msgid "HH:MM:SS.sss"
+msgid "Add a new Tag"
 msgstr ""
 
-msgid "Time on your stopwatch"
+msgid "Name/Id"
 msgstr ""
 
-msgid "Time window"
+msgid "Find"
 msgstr ""
 
-msgid "seconds"
+msgid "Show"
 msgstr ""
 
-msgid "Move Threshold"
+msgid "Mark"
 msgstr ""
 
-msgid "Suggest Stops"
+msgid "Ref"
 msgstr ""
 
-msgid "Find"
+msgid "Stops are possible on the"
 msgstr ""
 
-msgid "Show"
+msgid "right hand side"
 msgstr ""
 
-msgid "Mark"
+msgid "left hand side"
 msgstr ""
 
-msgid "Catch"
+msgid "Maximum distance from route"
 msgstr ""
 
-msgid "Join"
+msgid "Suggest Stops"
 msgstr ""
 
-msgid "Public Transport: Join GTFS stops"
+msgid "Create Stops from GPX ..."
 msgstr ""
 
-msgid "State"
+msgid "Create Stops from a GPX file"
 msgstr ""
 
-msgid "[incomplete]"
+msgid "Select GPX file"
 msgstr ""
 
-msgid "[empty way]"
+msgid "The GPX file contained no tracks or waypoints."
 msgstr ""
 
-msgid "[ID] {0}"
+msgid "moved"
 msgstr ""
 
-msgid "[gap]"
+msgid "added"
 msgstr ""
 
-msgid "Route patterns ..."
+msgid "Public Transport: Enable GTFSStops"
 msgstr ""
 
-msgid "Edit Route patterns for public transport"
+msgid "Public Transport: Catch GTFS stops"
 msgstr ""
 
-msgid "Route Patterns"
+msgid "skipped"
 msgstr ""
 
-msgid "Overview"
+msgid "Public Transport: Disable GTFS"
 msgstr ""
 
-msgid "Itinerary"
+msgid "Public Transport: Join GTFS stops"
 msgstr ""
 
-msgid "Stops"
+msgid "Public Transport: Change stop type"
 msgstr ""
 
-msgid "Meta"
+msgid "Public Transport: Add track stop"
 msgstr ""
 
-msgid "Existing route patterns:"
+msgid "Public Transport: Delete track stop"
 msgstr ""
 
-msgid "Reflect"
+msgid "Public Transport: Detach track stop list"
 msgstr ""
 
-msgid "Required tags:"
+msgid "Public Transport: Edit track stop list"
 msgstr ""
 
-msgid "Common tags:"
+msgid "Public Transport: Relocate nodes in track stoplist"
 msgstr ""
 
-msgid "Additional tags:"
+msgid "Public Transport: sort track stop list"
 msgstr ""
 
-msgid "Add a new Tag"
+msgid "Public Transport: Suggest stops"
 msgstr ""
 
-msgid "Name/Id"
+msgid "Public Transport: Detach waypoints"
 msgstr ""
 
-msgid "Ref"
+msgid "Public Transport: Disable waypoints"
 msgstr ""
 
-msgid "Stops are possible on the"
+msgid "Public Transport: Enable waypoints"
 msgstr ""
 
-msgid "right hand side"
+msgid "Public Transport: Edit waypoint name"
 msgstr ""
 
-msgid "left hand side"
+msgid "rail"
 msgstr ""
 
-msgid "Maximum distance from route"
+msgid "Can''t parse a time from this string."
 msgstr ""
 
-msgid " [ID] {0}"
+msgid "Invalid value"
 msgstr ""
 
-msgid "Public Transport: Change stop type"
+msgid "Create Stops from GTFS"
 msgstr ""
 
-msgid "Create Stops from GPX ..."
+msgid "GTFS-Stops"
 msgstr ""
 
-msgid "Create Stops from a GPX file"
+msgid "Type of stops to add"
 msgstr ""
 
-msgid "Select GPX file"
+msgid "Time on your GPS device"
 msgstr ""
 
-msgid "The GPX file contained no tracks or waypoints."
+msgid "HH:MM:SS.sss"
 msgstr ""
 
-msgid "Create Stops from GPX"
+msgid "Time on your stopwatch"
 msgstr ""
 
-msgid "Tracks in this GPX file:"
+msgid "Time window"
 msgstr ""
 
-msgid "Detach"
+msgid "seconds"
 msgstr ""
 
-msgid "implicit"
+msgid "Move Threshold"
 msgstr ""
 
-msgid ""
-"The GPX file doesn''t contain valid trackpoints. Please use a GPX file that "
-"has trackpoints."
+msgid "Catch"
 msgstr ""
 
-msgid "GPX File Trouble"
+msgid "Join"
 msgstr ""
 
-msgid "unnamed"
+msgid "Create Stops from GPX"
 msgstr ""
 
-msgid "Public Transport: Add track stop"
+msgid "Tracks in this GPX file:"
 msgstr ""
 
-msgid "Public Transport: Delete track stop"
+msgid "Detach"
 msgstr ""
 
-msgid "Public Transport: Detach track stop list"
+msgid "implicit"
 msgstr ""
 
-msgid "Public Transport: Edit track stop list"
+msgid "State"
 msgstr ""
 
-msgid "Public Transport: Relocate nodes in track stoplist"
+msgid "[incomplete]"
 msgstr ""
 
-msgid "Public Transport: sort track stop list"
+msgid "[empty way]"
 msgstr ""
 
-msgid "Public Transport: Suggest stops"
+msgid "[gap]"
 msgstr ""
 
 msgid "Stopname"
 msgstr ""
 
-msgid "Public Transport: Detach waypoints"
+msgid " [ID] {0}"
 msgstr ""
 
-msgid "Public Transport: Disable waypoints"
+msgid ""
+"The GPX file doesn''t contain valid trackpoints. Please use a GPX file that "
+"has trackpoints."
 msgstr ""
 
-msgid "Public Transport: Enable waypoints"
+msgid "GPX File Trouble"
 msgstr ""
 
-msgid "Public Transport: Edit waypoint name"
+msgid "unnamed"
 msgstr ""
 
 msgid "Distance between stops"
@@ -33708,6 +33789,9 @@ msgstr ""
 msgid "JOSM Tag Editor Plugin"
 msgstr ""
 
+msgid "Presets"
+msgstr ""
+
 msgid "Abort tag editing and close dialog"
 msgstr ""
 
@@ -35633,6 +35717,26 @@ msgid_plural "Overwrite ''{0}'' tags {1} from {2} with new value ''{3}''?"
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Download from Sophox API"
+msgstr ""
+
+msgid ""
+"Find places of education at least 2km, and at most 3km from the center of "
+"the selection"
+msgstr ""
+
+msgid "Show/hide Sophox snippet list"
+msgstr ""
+
+msgid "help"
+msgstr ""
+
+msgid "Server: "
+msgstr ""
+
+msgid "Wikidata+OSM server"
+msgstr ""
+
 msgid "Search Wikidata items"
 msgstr ""
 
@@ -35706,26 +35810,6 @@ msgid ""
 "objects"
 msgstr ""
 
-msgid "Download from Wikosm API"
-msgstr ""
-
-msgid ""
-"Find places of education at least 2km, and at most 3km from the center of "
-"the selection"
-msgstr ""
-
-msgid "Show/hide Wikosm snippet list"
-msgstr ""
-
-msgid "help"
-msgstr ""
-
-msgid "Server: "
-msgstr ""
-
-msgid "Wikidata+OSM server"
-msgstr ""
-
 msgid "The Ultimate WMS Super-speed Turbo Challenge II"
 msgstr ""
 
diff --git a/i18n/po/lb.po b/i18n/po/lb.po
index 7c21bb0..92e4c15 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-10-30 03:38+0100\n"
+"POT-Creation-Date: 2017-11-26 00:06+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-10-30 04:53+0000\n"
-"X-Generator: Launchpad (build 18493)\n"
+"X-Launchpad-Export-Date: 2017-11-26 04:54+0000\n"
+"X-Generator: Launchpad (build 18509)\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
 msgstr "{0}:D''Optioun \"{1}\" ass net eendeiteg"
@@ -420,12 +420,15 @@ msgstr ""
 msgid "Delete the active layer. Does not delete the associated file."
 msgstr ""
 
-msgid "Toggle dialogs panel"
+msgid "Dialogs panel"
 msgstr ""
 
 msgid "Toggle dialogs panel, maximize mapview"
 msgstr ""
 
+msgid "Toggle dialogs panel"
+msgstr ""
+
 msgid "Distribute Nodes"
 msgstr ""
 
@@ -6487,6 +6490,9 @@ msgstr ""
 msgid "Coordinates (projected): "
 msgstr ""
 
+msgid "UTM Zone"
+msgstr ""
+
 msgid "Part of: "
 msgstr ""
 
@@ -8785,6 +8791,11 @@ msgstr ""
 msgid "Check \"Save\" to save the layer to the file specified on the left."
 msgstr ""
 
+msgid ""
+"A background upload is already in progress. Kindly wait for it to finish "
+"before uploading new changes"
+msgstr ""
+
 msgid "I would like someone to review my edits."
 msgstr ""
 
@@ -9893,6 +9904,9 @@ msgstr ""
 msgid "Save Layer"
 msgstr ""
 
+msgid "Trying to set a read only data layer as edit layer"
+msgstr ""
+
 msgid "{0} note"
 msgid_plural "{0} notes"
 msgstr[0] ""
@@ -10723,11 +10737,6 @@ msgstr ""
 msgid "Failed to parse Mappaint styles from ''{0}''. Error was: {1}"
 msgstr ""
 
-msgid ""
-"Detected deprecated ''{0}'' in ''{1}'' which will be removed shortly. Use "
-"''{2}'' instead."
-msgstr ""
-
 msgid "Failed to locate image ''{0}''"
 msgstr ""
 
@@ -11892,6 +11901,9 @@ msgstr ""
 msgid "Show object ID in selection lists"
 msgstr ""
 
+msgid "Show node coordinates in selection lists"
+msgstr ""
+
 msgid "Show localized name in selection lists"
 msgstr ""
 
@@ -12648,9 +12660,6 @@ msgstr ""
 msgid "UTM"
 msgstr ""
 
-msgid "UTM Zone"
-msgstr ""
-
 msgid "North"
 msgstr ""
 
@@ -13118,9 +13127,6 @@ msgstr ""
 msgid "Error parsing {0}: "
 msgstr ""
 
-msgid "Presets"
-msgstr ""
-
 msgid "Search for objects by preset..."
 msgstr ""
 
@@ -15662,6 +15668,18 @@ msgstr ""
 msgid "korean"
 msgstr ""
 
+msgid "donut"
+msgstr ""
+
+msgid "mediterranean"
+msgstr ""
+
+msgid "friture"
+msgstr ""
+
+msgid "crepe"
+msgstr ""
+
 msgid "Internet access"
 msgstr ""
 
@@ -18504,7 +18522,16 @@ msgstr ""
 msgid "Tents allowed"
 msgstr ""
 
-msgid "Camping Site"
+msgid "Campsite"
+msgstr ""
+
+msgid "Caravans allowed"
+msgstr ""
+
+msgid "Backcountry"
+msgstr ""
+
+msgid "Group only access"
 msgstr ""
 
 msgid "Food+Drinks"
@@ -23333,6 +23360,14 @@ msgid ""
 "resolution or better, and refreshed more frequently with ongoing updates."
 msgstr ""
 
+msgid "DigitalGlobe Premium Imagery Vintage"
+msgstr ""
+
+msgid ""
+"Imagery boundaries and capture dates. Labels appear at zoom level 14 and "
+"higher."
+msgstr ""
+
 msgid "DigitalGlobe Standard Imagery"
 msgstr ""
 
@@ -23342,6 +23377,9 @@ msgid ""
 "Landsat. Average age is 2.31 years, with some areas updated 2x per year."
 msgstr ""
 
+msgid "DigitalGlobe Standard Imagery Vintage"
+msgstr ""
+
 msgid "Esri World Imagery"
 msgstr ""
 
@@ -23405,6 +23443,12 @@ msgstr ""
 msgid "Strava cycling and running heatmap"
 msgstr ""
 
+msgid "Strava water sports heatmap"
+msgstr ""
+
+msgid "Strava winter sports heatmap"
+msgstr ""
+
 msgid "Locator Overlay"
 msgstr ""
 
@@ -23809,6 +23853,9 @@ msgstr ""
 msgid "SPW(allonie) most recent aerial imagery"
 msgstr ""
 
+msgid "SPW(allonie) 2016 aerial imagery"
+msgstr ""
+
 msgid "SPW(allonie) 2015 aerial imagery"
 msgstr ""
 
@@ -23854,6 +23901,14 @@ msgstr ""
 msgid "Addresses data from IBGE"
 msgstr ""
 
+msgid "Street names IBGE Salvador-BA"
+msgstr ""
+
+msgid ""
+"Streets geometry and names of Salvador, Bahia. Source: Faces de Logradouro - "
+"IBGE."
+msgstr ""
+
 msgid "Rio Mosaic 2013"
 msgstr ""
 
@@ -24584,6 +24639,9 @@ msgstr ""
 msgid "Japan GSI ortho Imagery"
 msgstr ""
 
+msgid "Japan GSI Standard Map"
+msgstr ""
+
 msgid "imagico.de OSM images for mapping: Aral Sea (low water level)"
 msgstr ""
 
@@ -24613,7 +24671,7 @@ msgstr ""
 msgid "20cm ortho - Latvia - Coastline"
 msgstr ""
 
-msgid "1.cikla ortofotokarte - Latvia"
+msgid "Orthophoto 1st cycle (1994-1999) - Latvia"
 msgstr ""
 
 msgid "ORT10LT (Lithuania)"
@@ -24622,6 +24680,9 @@ msgstr ""
 msgid "geoportail.lu all layers"
 msgstr ""
 
+msgid "geoportail.lu ortho latest"
+msgstr ""
+
 msgid "geoportail.lu ortho 2016"
 msgstr ""
 
@@ -26112,6 +26173,9 @@ msgstr ""
 msgid "{0} on a node. Should be used on a way."
 msgstr ""
 
+msgid "{0} on a node. Should be used on a way or relation."
+msgstr ""
+
 msgid "{0} on a node. Should be drawn as an area."
 msgstr ""
 
@@ -26339,6 +26403,9 @@ msgstr ""
 msgid "Nodes duplicating parent way tags"
 msgstr ""
 
+msgid "{0} together with {1} and {2}. Remove {0}."
+msgstr ""
+
 msgid ""
 "wikipedia tag has no language given, use ''wikipedia''=''language:page "
 "title''"
@@ -27103,6 +27170,21 @@ msgstr ""
 msgid "Importing..."
 msgstr ""
 
+msgid "Shape is started incorrectly"
+msgstr ""
+
+msgid "Can''t load SVG diagram"
+msgstr ""
+
+msgid "Can''t find root SVG element"
+msgstr ""
+
+msgid "Import primitives"
+msgstr ""
+
+msgid "Cannot find configuration file!"
+msgstr ""
+
 msgid "DXF files [ImportDxf plugin] (*.dxf)"
 msgstr ""
 
@@ -27742,6 +27824,9 @@ msgstr ""
 msgid "Download mode"
 msgstr ""
 
+msgid "Number of images to be pre-fetched (forwards and backwards)"
+msgstr ""
+
 msgid "You are logged in as ''{0}''."
 msgstr ""
 
@@ -27952,8 +28037,17 @@ msgid "only when manually requested"
 msgstr ""
 
 msgid ""
-"The downloaded OSM area is too big. Download mode has been changed to OSM "
-"area until the layer is restarted."
+"The Mapillary layer has stopped downloading images, because the requested "
+"area is too big!"
+msgstr ""
+
+msgid ""
+"To solve this problem, you could zoom in and load a smaller area of the map."
+msgstr ""
+
+msgid ""
+"To solve this problem, you could switch to download mode ''{0}'' and load "
+"Mapillary images for a smaller portion of the map."
 msgstr ""
 
 msgid "Downloading"
@@ -31265,19 +31359,6 @@ msgstr ""
 msgid "Merge Overlap (combine)"
 msgstr ""
 
-msgid ""
-"<html>A role based relation membership was copied to all new ways.<br>You "
-"should verify this and correct it when necessary.</html>"
-msgstr ""
-
-msgid ""
-"<html>A relation membership was copied to all new ways.<br>You should verify "
-"this and correct it when necessary.</html>"
-msgstr ""
-
-msgid "Split way"
-msgstr ""
-
 msgid "Michigan Left"
 msgstr ""
 
@@ -32732,254 +32813,254 @@ msgstr ""
 msgid "PT: Route passes a oneway road in the wrong direction"
 msgstr ""
 
-msgid "moved"
+msgid "Create Stops from GTFS ..."
 msgstr ""
 
-msgid "rail"
+msgid "Create Stops from a GTFS file"
 msgstr ""
 
-msgid "Can''t parse a time from this string."
+msgid "Select GTFS file (stops.txt)"
 msgstr ""
 
-msgid "Invalid value"
+msgid "File \"{0}\" does not exist"
 msgstr ""
 
-msgid "added"
+msgid "IOException \"{0}\" occurred"
 msgstr ""
 
-msgid "Public Transport: Enable GTFSStops"
+msgid ""
+"There exists no dataset. Try to download data from the server or open an OSM "
+"file."
 msgstr ""
 
-msgid "Public Transport: Catch GTFS stops"
+msgid "No data found"
 msgstr ""
 
-msgid "skipped"
+msgid "The GTFS file was empty."
 msgstr ""
 
-msgid "Public Transport: Disable GTFS"
+msgid "[ID] {0}"
 msgstr ""
 
-msgid "Create Stops from GTFS ..."
+msgid "Route patterns ..."
 msgstr ""
 
-msgid "Create Stops from a GTFS file"
+msgid "Edit Route patterns for public transport"
 msgstr ""
 
-msgid "Select GTFS file (stops.txt)"
+msgid "Route Patterns"
 msgstr ""
 
-msgid "File \"{0}\" does not exist"
+msgid "Overview"
 msgstr ""
 
-msgid "IOException \"{0}\" occurred"
+msgid "Itinerary"
 msgstr ""
 
-msgid ""
-"There exists no dataset. Try to download data from the server or open an OSM "
-"file."
+msgid "Stops"
 msgstr ""
 
-msgid "No data found"
+msgid "Meta"
 msgstr ""
 
-msgid "The GTFS file was empty."
+msgid "Existing route patterns:"
 msgstr ""
 
-msgid "Create Stops from GTFS"
+msgid "Reflect"
 msgstr ""
 
-msgid "GTFS-Stops"
+msgid "Required tags:"
 msgstr ""
 
-msgid "Type of stops to add"
+msgid "Common tags:"
 msgstr ""
 
-msgid "Time on your GPS device"
+msgid "Additional tags:"
 msgstr ""
 
-msgid "HH:MM:SS.sss"
+msgid "Add a new Tag"
 msgstr ""
 
-msgid "Time on your stopwatch"
+msgid "Name/Id"
 msgstr ""
 
-msgid "Time window"
+msgid "Find"
 msgstr ""
 
-msgid "seconds"
+msgid "Show"
 msgstr ""
 
-msgid "Move Threshold"
+msgid "Mark"
 msgstr ""
 
-msgid "Suggest Stops"
+msgid "Ref"
 msgstr ""
 
-msgid "Find"
+msgid "Stops are possible on the"
 msgstr ""
 
-msgid "Show"
+msgid "right hand side"
 msgstr ""
 
-msgid "Mark"
+msgid "left hand side"
 msgstr ""
 
-msgid "Catch"
+msgid "Maximum distance from route"
 msgstr ""
 
-msgid "Join"
+msgid "Suggest Stops"
 msgstr ""
 
-msgid "Public Transport: Join GTFS stops"
+msgid "Create Stops from GPX ..."
 msgstr ""
 
-msgid "State"
+msgid "Create Stops from a GPX file"
 msgstr ""
 
-msgid "[incomplete]"
+msgid "Select GPX file"
 msgstr ""
 
-msgid "[empty way]"
+msgid "The GPX file contained no tracks or waypoints."
 msgstr ""
 
-msgid "[ID] {0}"
+msgid "moved"
 msgstr ""
 
-msgid "[gap]"
+msgid "added"
 msgstr ""
 
-msgid "Route patterns ..."
+msgid "Public Transport: Enable GTFSStops"
 msgstr ""
 
-msgid "Edit Route patterns for public transport"
+msgid "Public Transport: Catch GTFS stops"
 msgstr ""
 
-msgid "Route Patterns"
+msgid "skipped"
 msgstr ""
 
-msgid "Overview"
+msgid "Public Transport: Disable GTFS"
 msgstr ""
 
-msgid "Itinerary"
+msgid "Public Transport: Join GTFS stops"
 msgstr ""
 
-msgid "Stops"
+msgid "Public Transport: Change stop type"
 msgstr ""
 
-msgid "Meta"
+msgid "Public Transport: Add track stop"
 msgstr ""
 
-msgid "Existing route patterns:"
+msgid "Public Transport: Delete track stop"
 msgstr ""
 
-msgid "Reflect"
+msgid "Public Transport: Detach track stop list"
 msgstr ""
 
-msgid "Required tags:"
+msgid "Public Transport: Edit track stop list"
 msgstr ""
 
-msgid "Common tags:"
+msgid "Public Transport: Relocate nodes in track stoplist"
 msgstr ""
 
-msgid "Additional tags:"
+msgid "Public Transport: sort track stop list"
 msgstr ""
 
-msgid "Add a new Tag"
+msgid "Public Transport: Suggest stops"
 msgstr ""
 
-msgid "Name/Id"
+msgid "Public Transport: Detach waypoints"
 msgstr ""
 
-msgid "Ref"
+msgid "Public Transport: Disable waypoints"
 msgstr ""
 
-msgid "Stops are possible on the"
+msgid "Public Transport: Enable waypoints"
 msgstr ""
 
-msgid "right hand side"
+msgid "Public Transport: Edit waypoint name"
 msgstr ""
 
-msgid "left hand side"
+msgid "rail"
 msgstr ""
 
-msgid "Maximum distance from route"
+msgid "Can''t parse a time from this string."
 msgstr ""
 
-msgid " [ID] {0}"
+msgid "Invalid value"
 msgstr ""
 
-msgid "Public Transport: Change stop type"
+msgid "Create Stops from GTFS"
 msgstr ""
 
-msgid "Create Stops from GPX ..."
+msgid "GTFS-Stops"
 msgstr ""
 
-msgid "Create Stops from a GPX file"
+msgid "Type of stops to add"
 msgstr ""
 
-msgid "Select GPX file"
+msgid "Time on your GPS device"
 msgstr ""
 
-msgid "The GPX file contained no tracks or waypoints."
+msgid "HH:MM:SS.sss"
 msgstr ""
 
-msgid "Create Stops from GPX"
+msgid "Time on your stopwatch"
 msgstr ""
 
-msgid "Tracks in this GPX file:"
+msgid "Time window"
 msgstr ""
 
-msgid "Detach"
+msgid "seconds"
 msgstr ""
 
-msgid "implicit"
+msgid "Move Threshold"
 msgstr ""
 
-msgid ""
-"The GPX file doesn''t contain valid trackpoints. Please use a GPX file that "
-"has trackpoints."
+msgid "Catch"
 msgstr ""
 
-msgid "GPX File Trouble"
+msgid "Join"
 msgstr ""
 
-msgid "unnamed"
+msgid "Create Stops from GPX"
 msgstr ""
 
-msgid "Public Transport: Add track stop"
+msgid "Tracks in this GPX file:"
 msgstr ""
 
-msgid "Public Transport: Delete track stop"
+msgid "Detach"
 msgstr ""
 
-msgid "Public Transport: Detach track stop list"
+msgid "implicit"
 msgstr ""
 
-msgid "Public Transport: Edit track stop list"
+msgid "State"
 msgstr ""
 
-msgid "Public Transport: Relocate nodes in track stoplist"
+msgid "[incomplete]"
 msgstr ""
 
-msgid "Public Transport: sort track stop list"
+msgid "[empty way]"
 msgstr ""
 
-msgid "Public Transport: Suggest stops"
+msgid "[gap]"
 msgstr ""
 
 msgid "Stopname"
 msgstr ""
 
-msgid "Public Transport: Detach waypoints"
+msgid " [ID] {0}"
 msgstr ""
 
-msgid "Public Transport: Disable waypoints"
+msgid ""
+"The GPX file doesn''t contain valid trackpoints. Please use a GPX file that "
+"has trackpoints."
 msgstr ""
 
-msgid "Public Transport: Enable waypoints"
+msgid "GPX File Trouble"
 msgstr ""
 
-msgid "Public Transport: Edit waypoint name"
+msgid "unnamed"
 msgstr ""
 
 msgid "Distance between stops"
@@ -33708,6 +33789,9 @@ msgstr ""
 msgid "JOSM Tag Editor Plugin"
 msgstr ""
 
+msgid "Presets"
+msgstr ""
+
 msgid "Abort tag editing and close dialog"
 msgstr ""
 
@@ -35633,6 +35717,26 @@ msgid_plural "Overwrite ''{0}'' tags {1} from {2} with new value ''{3}''?"
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Download from Sophox API"
+msgstr ""
+
+msgid ""
+"Find places of education at least 2km, and at most 3km from the center of "
+"the selection"
+msgstr ""
+
+msgid "Show/hide Sophox snippet list"
+msgstr ""
+
+msgid "help"
+msgstr ""
+
+msgid "Server: "
+msgstr ""
+
+msgid "Wikidata+OSM server"
+msgstr ""
+
 msgid "Search Wikidata items"
 msgstr ""
 
@@ -35706,26 +35810,6 @@ msgid ""
 "objects"
 msgstr ""
 
-msgid "Download from Wikosm API"
-msgstr ""
-
-msgid ""
-"Find places of education at least 2km, and at most 3km from the center of "
-"the selection"
-msgstr ""
-
-msgid "Show/hide Wikosm snippet list"
-msgstr ""
-
-msgid "help"
-msgstr ""
-
-msgid "Server: "
-msgstr ""
-
-msgid "Wikidata+OSM server"
-msgstr ""
-
 msgid "The Ultimate WMS Super-speed Turbo Challenge II"
 msgstr ""
 
diff --git a/i18n/po/lo.po b/i18n/po/lo.po
index 9361dd8..af8ed30 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-10-30 03:38+0100\n"
+"POT-Creation-Date: 2017-11-26 00:06+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-10-30 04:52+0000\n"
-"X-Generator: Launchpad (build 18493)\n"
+"X-Launchpad-Export-Date: 2017-11-26 04:53+0000\n"
+"X-Generator: Launchpad (build 18509)\n"
 "Language: \n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -421,12 +421,15 @@ msgstr ""
 msgid "Delete the active layer. Does not delete the associated file."
 msgstr ""
 
-msgid "Toggle dialogs panel"
+msgid "Dialogs panel"
 msgstr ""
 
 msgid "Toggle dialogs panel, maximize mapview"
 msgstr ""
 
+msgid "Toggle dialogs panel"
+msgstr ""
+
 msgid "Distribute Nodes"
 msgstr ""
 
@@ -6488,6 +6491,9 @@ msgstr ""
 msgid "Coordinates (projected): "
 msgstr ""
 
+msgid "UTM Zone"
+msgstr ""
+
 msgid "Part of: "
 msgstr ""
 
@@ -8786,6 +8792,11 @@ msgstr ""
 msgid "Check \"Save\" to save the layer to the file specified on the left."
 msgstr ""
 
+msgid ""
+"A background upload is already in progress. Kindly wait for it to finish "
+"before uploading new changes"
+msgstr ""
+
 msgid "I would like someone to review my edits."
 msgstr ""
 
@@ -9894,6 +9905,9 @@ msgstr ""
 msgid "Save Layer"
 msgstr ""
 
+msgid "Trying to set a read only data layer as edit layer"
+msgstr ""
+
 msgid "{0} note"
 msgid_plural "{0} notes"
 msgstr[0] ""
@@ -10724,11 +10738,6 @@ msgstr ""
 msgid "Failed to parse Mappaint styles from ''{0}''. Error was: {1}"
 msgstr ""
 
-msgid ""
-"Detected deprecated ''{0}'' in ''{1}'' which will be removed shortly. Use "
-"''{2}'' instead."
-msgstr ""
-
 msgid "Failed to locate image ''{0}''"
 msgstr ""
 
@@ -11893,6 +11902,9 @@ msgstr ""
 msgid "Show object ID in selection lists"
 msgstr ""
 
+msgid "Show node coordinates in selection lists"
+msgstr ""
+
 msgid "Show localized name in selection lists"
 msgstr ""
 
@@ -12649,9 +12661,6 @@ msgstr ""
 msgid "UTM"
 msgstr ""
 
-msgid "UTM Zone"
-msgstr ""
-
 msgid "North"
 msgstr ""
 
@@ -13119,9 +13128,6 @@ msgstr ""
 msgid "Error parsing {0}: "
 msgstr ""
 
-msgid "Presets"
-msgstr ""
-
 msgid "Search for objects by preset..."
 msgstr ""
 
@@ -15663,6 +15669,18 @@ msgstr ""
 msgid "korean"
 msgstr ""
 
+msgid "donut"
+msgstr ""
+
+msgid "mediterranean"
+msgstr ""
+
+msgid "friture"
+msgstr ""
+
+msgid "crepe"
+msgstr ""
+
 msgid "Internet access"
 msgstr ""
 
@@ -18505,7 +18523,16 @@ msgstr ""
 msgid "Tents allowed"
 msgstr ""
 
-msgid "Camping Site"
+msgid "Campsite"
+msgstr ""
+
+msgid "Caravans allowed"
+msgstr ""
+
+msgid "Backcountry"
+msgstr ""
+
+msgid "Group only access"
 msgstr ""
 
 msgid "Food+Drinks"
@@ -23334,6 +23361,14 @@ msgid ""
 "resolution or better, and refreshed more frequently with ongoing updates."
 msgstr ""
 
+msgid "DigitalGlobe Premium Imagery Vintage"
+msgstr ""
+
+msgid ""
+"Imagery boundaries and capture dates. Labels appear at zoom level 14 and "
+"higher."
+msgstr ""
+
 msgid "DigitalGlobe Standard Imagery"
 msgstr ""
 
@@ -23343,6 +23378,9 @@ msgid ""
 "Landsat. Average age is 2.31 years, with some areas updated 2x per year."
 msgstr ""
 
+msgid "DigitalGlobe Standard Imagery Vintage"
+msgstr ""
+
 msgid "Esri World Imagery"
 msgstr ""
 
@@ -23406,6 +23444,12 @@ msgstr ""
 msgid "Strava cycling and running heatmap"
 msgstr ""
 
+msgid "Strava water sports heatmap"
+msgstr ""
+
+msgid "Strava winter sports heatmap"
+msgstr ""
+
 msgid "Locator Overlay"
 msgstr ""
 
@@ -23810,6 +23854,9 @@ msgstr ""
 msgid "SPW(allonie) most recent aerial imagery"
 msgstr ""
 
+msgid "SPW(allonie) 2016 aerial imagery"
+msgstr ""
+
 msgid "SPW(allonie) 2015 aerial imagery"
 msgstr ""
 
@@ -23855,6 +23902,14 @@ msgstr ""
 msgid "Addresses data from IBGE"
 msgstr ""
 
+msgid "Street names IBGE Salvador-BA"
+msgstr ""
+
+msgid ""
+"Streets geometry and names of Salvador, Bahia. Source: Faces de Logradouro - "
+"IBGE."
+msgstr ""
+
 msgid "Rio Mosaic 2013"
 msgstr ""
 
@@ -24585,6 +24640,9 @@ msgstr ""
 msgid "Japan GSI ortho Imagery"
 msgstr ""
 
+msgid "Japan GSI Standard Map"
+msgstr ""
+
 msgid "imagico.de OSM images for mapping: Aral Sea (low water level)"
 msgstr ""
 
@@ -24614,7 +24672,7 @@ msgstr ""
 msgid "20cm ortho - Latvia - Coastline"
 msgstr ""
 
-msgid "1.cikla ortofotokarte - Latvia"
+msgid "Orthophoto 1st cycle (1994-1999) - Latvia"
 msgstr ""
 
 msgid "ORT10LT (Lithuania)"
@@ -24623,6 +24681,9 @@ msgstr ""
 msgid "geoportail.lu all layers"
 msgstr ""
 
+msgid "geoportail.lu ortho latest"
+msgstr ""
+
 msgid "geoportail.lu ortho 2016"
 msgstr ""
 
@@ -26113,6 +26174,9 @@ msgstr ""
 msgid "{0} on a node. Should be used on a way."
 msgstr ""
 
+msgid "{0} on a node. Should be used on a way or relation."
+msgstr ""
+
 msgid "{0} on a node. Should be drawn as an area."
 msgstr ""
 
@@ -26340,6 +26404,9 @@ msgstr ""
 msgid "Nodes duplicating parent way tags"
 msgstr ""
 
+msgid "{0} together with {1} and {2}. Remove {0}."
+msgstr ""
+
 msgid ""
 "wikipedia tag has no language given, use ''wikipedia''=''language:page "
 "title''"
@@ -27104,6 +27171,21 @@ msgstr ""
 msgid "Importing..."
 msgstr ""
 
+msgid "Shape is started incorrectly"
+msgstr ""
+
+msgid "Can''t load SVG diagram"
+msgstr ""
+
+msgid "Can''t find root SVG element"
+msgstr ""
+
+msgid "Import primitives"
+msgstr ""
+
+msgid "Cannot find configuration file!"
+msgstr ""
+
 msgid "DXF files [ImportDxf plugin] (*.dxf)"
 msgstr ""
 
@@ -27743,6 +27825,9 @@ msgstr ""
 msgid "Download mode"
 msgstr ""
 
+msgid "Number of images to be pre-fetched (forwards and backwards)"
+msgstr ""
+
 msgid "You are logged in as ''{0}''."
 msgstr ""
 
@@ -27953,8 +28038,17 @@ msgid "only when manually requested"
 msgstr ""
 
 msgid ""
-"The downloaded OSM area is too big. Download mode has been changed to OSM "
-"area until the layer is restarted."
+"The Mapillary layer has stopped downloading images, because the requested "
+"area is too big!"
+msgstr ""
+
+msgid ""
+"To solve this problem, you could zoom in and load a smaller area of the map."
+msgstr ""
+
+msgid ""
+"To solve this problem, you could switch to download mode ''{0}'' and load "
+"Mapillary images for a smaller portion of the map."
 msgstr ""
 
 msgid "Downloading"
@@ -31266,19 +31360,6 @@ msgstr ""
 msgid "Merge Overlap (combine)"
 msgstr ""
 
-msgid ""
-"<html>A role based relation membership was copied to all new ways.<br>You "
-"should verify this and correct it when necessary.</html>"
-msgstr ""
-
-msgid ""
-"<html>A relation membership was copied to all new ways.<br>You should verify "
-"this and correct it when necessary.</html>"
-msgstr ""
-
-msgid "Split way"
-msgstr ""
-
 msgid "Michigan Left"
 msgstr ""
 
@@ -32733,254 +32814,254 @@ msgstr ""
 msgid "PT: Route passes a oneway road in the wrong direction"
 msgstr ""
 
-msgid "moved"
+msgid "Create Stops from GTFS ..."
 msgstr ""
 
-msgid "rail"
+msgid "Create Stops from a GTFS file"
 msgstr ""
 
-msgid "Can''t parse a time from this string."
+msgid "Select GTFS file (stops.txt)"
 msgstr ""
 
-msgid "Invalid value"
+msgid "File \"{0}\" does not exist"
 msgstr ""
 
-msgid "added"
+msgid "IOException \"{0}\" occurred"
 msgstr ""
 
-msgid "Public Transport: Enable GTFSStops"
+msgid ""
+"There exists no dataset. Try to download data from the server or open an OSM "
+"file."
 msgstr ""
 
-msgid "Public Transport: Catch GTFS stops"
+msgid "No data found"
 msgstr ""
 
-msgid "skipped"
+msgid "The GTFS file was empty."
 msgstr ""
 
-msgid "Public Transport: Disable GTFS"
+msgid "[ID] {0}"
 msgstr ""
 
-msgid "Create Stops from GTFS ..."
+msgid "Route patterns ..."
 msgstr ""
 
-msgid "Create Stops from a GTFS file"
+msgid "Edit Route patterns for public transport"
 msgstr ""
 
-msgid "Select GTFS file (stops.txt)"
+msgid "Route Patterns"
 msgstr ""
 
-msgid "File \"{0}\" does not exist"
+msgid "Overview"
 msgstr ""
 
-msgid "IOException \"{0}\" occurred"
+msgid "Itinerary"
 msgstr ""
 
-msgid ""
-"There exists no dataset. Try to download data from the server or open an OSM "
-"file."
+msgid "Stops"
 msgstr ""
 
-msgid "No data found"
+msgid "Meta"
 msgstr ""
 
-msgid "The GTFS file was empty."
+msgid "Existing route patterns:"
 msgstr ""
 
-msgid "Create Stops from GTFS"
+msgid "Reflect"
 msgstr ""
 
-msgid "GTFS-Stops"
+msgid "Required tags:"
 msgstr ""
 
-msgid "Type of stops to add"
+msgid "Common tags:"
 msgstr ""
 
-msgid "Time on your GPS device"
+msgid "Additional tags:"
 msgstr ""
 
-msgid "HH:MM:SS.sss"
+msgid "Add a new Tag"
 msgstr ""
 
-msgid "Time on your stopwatch"
+msgid "Name/Id"
 msgstr ""
 
-msgid "Time window"
+msgid "Find"
 msgstr ""
 
-msgid "seconds"
+msgid "Show"
 msgstr ""
 
-msgid "Move Threshold"
+msgid "Mark"
 msgstr ""
 
-msgid "Suggest Stops"
+msgid "Ref"
 msgstr ""
 
-msgid "Find"
+msgid "Stops are possible on the"
 msgstr ""
 
-msgid "Show"
+msgid "right hand side"
 msgstr ""
 
-msgid "Mark"
+msgid "left hand side"
 msgstr ""
 
-msgid "Catch"
+msgid "Maximum distance from route"
 msgstr ""
 
-msgid "Join"
+msgid "Suggest Stops"
 msgstr ""
 
-msgid "Public Transport: Join GTFS stops"
+msgid "Create Stops from GPX ..."
 msgstr ""
 
-msgid "State"
+msgid "Create Stops from a GPX file"
 msgstr ""
 
-msgid "[incomplete]"
+msgid "Select GPX file"
 msgstr ""
 
-msgid "[empty way]"
+msgid "The GPX file contained no tracks or waypoints."
 msgstr ""
 
-msgid "[ID] {0}"
+msgid "moved"
 msgstr ""
 
-msgid "[gap]"
+msgid "added"
 msgstr ""
 
-msgid "Route patterns ..."
+msgid "Public Transport: Enable GTFSStops"
 msgstr ""
 
-msgid "Edit Route patterns for public transport"
+msgid "Public Transport: Catch GTFS stops"
 msgstr ""
 
-msgid "Route Patterns"
+msgid "skipped"
 msgstr ""
 
-msgid "Overview"
+msgid "Public Transport: Disable GTFS"
 msgstr ""
 
-msgid "Itinerary"
+msgid "Public Transport: Join GTFS stops"
 msgstr ""
 
-msgid "Stops"
+msgid "Public Transport: Change stop type"
 msgstr ""
 
-msgid "Meta"
+msgid "Public Transport: Add track stop"
 msgstr ""
 
-msgid "Existing route patterns:"
+msgid "Public Transport: Delete track stop"
 msgstr ""
 
-msgid "Reflect"
+msgid "Public Transport: Detach track stop list"
 msgstr ""
 
-msgid "Required tags:"
+msgid "Public Transport: Edit track stop list"
 msgstr ""
 
-msgid "Common tags:"
+msgid "Public Transport: Relocate nodes in track stoplist"
 msgstr ""
 
-msgid "Additional tags:"
+msgid "Public Transport: sort track stop list"
 msgstr ""
 
-msgid "Add a new Tag"
+msgid "Public Transport: Suggest stops"
 msgstr ""
 
-msgid "Name/Id"
+msgid "Public Transport: Detach waypoints"
 msgstr ""
 
-msgid "Ref"
+msgid "Public Transport: Disable waypoints"
 msgstr ""
 
-msgid "Stops are possible on the"
+msgid "Public Transport: Enable waypoints"
 msgstr ""
 
-msgid "right hand side"
+msgid "Public Transport: Edit waypoint name"
 msgstr ""
 
-msgid "left hand side"
+msgid "rail"
 msgstr ""
 
-msgid "Maximum distance from route"
+msgid "Can''t parse a time from this string."
 msgstr ""
 
-msgid " [ID] {0}"
+msgid "Invalid value"
 msgstr ""
 
-msgid "Public Transport: Change stop type"
+msgid "Create Stops from GTFS"
 msgstr ""
 
-msgid "Create Stops from GPX ..."
+msgid "GTFS-Stops"
 msgstr ""
 
-msgid "Create Stops from a GPX file"
+msgid "Type of stops to add"
 msgstr ""
 
-msgid "Select GPX file"
+msgid "Time on your GPS device"
 msgstr ""
 
-msgid "The GPX file contained no tracks or waypoints."
+msgid "HH:MM:SS.sss"
 msgstr ""
 
-msgid "Create Stops from GPX"
+msgid "Time on your stopwatch"
 msgstr ""
 
-msgid "Tracks in this GPX file:"
+msgid "Time window"
 msgstr ""
 
-msgid "Detach"
+msgid "seconds"
 msgstr ""
 
-msgid "implicit"
+msgid "Move Threshold"
 msgstr ""
 
-msgid ""
-"The GPX file doesn''t contain valid trackpoints. Please use a GPX file that "
-"has trackpoints."
+msgid "Catch"
 msgstr ""
 
-msgid "GPX File Trouble"
+msgid "Join"
 msgstr ""
 
-msgid "unnamed"
+msgid "Create Stops from GPX"
 msgstr ""
 
-msgid "Public Transport: Add track stop"
+msgid "Tracks in this GPX file:"
 msgstr ""
 
-msgid "Public Transport: Delete track stop"
+msgid "Detach"
 msgstr ""
 
-msgid "Public Transport: Detach track stop list"
+msgid "implicit"
 msgstr ""
 
-msgid "Public Transport: Edit track stop list"
+msgid "State"
 msgstr ""
 
-msgid "Public Transport: Relocate nodes in track stoplist"
+msgid "[incomplete]"
 msgstr ""
 
-msgid "Public Transport: sort track stop list"
+msgid "[empty way]"
 msgstr ""
 
-msgid "Public Transport: Suggest stops"
+msgid "[gap]"
 msgstr ""
 
 msgid "Stopname"
 msgstr ""
 
-msgid "Public Transport: Detach waypoints"
+msgid " [ID] {0}"
 msgstr ""
 
-msgid "Public Transport: Disable waypoints"
+msgid ""
+"The GPX file doesn''t contain valid trackpoints. Please use a GPX file that "
+"has trackpoints."
 msgstr ""
 
-msgid "Public Transport: Enable waypoints"
+msgid "GPX File Trouble"
 msgstr ""
 
-msgid "Public Transport: Edit waypoint name"
+msgid "unnamed"
 msgstr ""
 
 msgid "Distance between stops"
@@ -33709,6 +33790,9 @@ msgstr ""
 msgid "JOSM Tag Editor Plugin"
 msgstr ""
 
+msgid "Presets"
+msgstr ""
+
 msgid "Abort tag editing and close dialog"
 msgstr ""
 
@@ -35634,6 +35718,26 @@ msgid_plural "Overwrite ''{0}'' tags {1} from {2} with new value ''{3}''?"
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Download from Sophox API"
+msgstr ""
+
+msgid ""
+"Find places of education at least 2km, and at most 3km from the center of "
+"the selection"
+msgstr ""
+
+msgid "Show/hide Sophox snippet list"
+msgstr ""
+
+msgid "help"
+msgstr ""
+
+msgid "Server: "
+msgstr ""
+
+msgid "Wikidata+OSM server"
+msgstr ""
+
 msgid "Search Wikidata items"
 msgstr ""
 
@@ -35707,26 +35811,6 @@ msgid ""
 "objects"
 msgstr ""
 
-msgid "Download from Wikosm API"
-msgstr ""
-
-msgid ""
-"Find places of education at least 2km, and at most 3km from the center of "
-"the selection"
-msgstr ""
-
-msgid "Show/hide Wikosm snippet list"
-msgstr ""
-
-msgid "help"
-msgstr ""
-
-msgid "Server: "
-msgstr ""
-
-msgid "Wikidata+OSM server"
-msgstr ""
-
 msgid "The Ultimate WMS Super-speed Turbo Challenge II"
 msgstr ""
 
diff --git a/i18n/po/lt.po b/i18n/po/lt.po
index c58895e..1f04965 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-10-30 03:38+0100\n"
-"PO-Revision-Date: 2017-10-28 18:34+0000\n"
+"POT-Creation-Date: 2017-11-26 00:06+0100\n"
+"PO-Revision-Date: 2017-11-24 19:50+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-10-30 04:53+0000\n"
-"X-Generator: Launchpad (build 18493)\n"
+"X-Launchpad-Export-Date: 2017-11-26 04:54+0000\n"
+"X-Generator: Launchpad (build 18509)\n"
 "Language: lt\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -456,12 +456,15 @@ msgstr "Pašalinti sluoksnį"
 msgid "Delete the active layer. Does not delete the associated file."
 msgstr "Pašalinkite aktyvųjį sluoksnį. Neištrina susijusio failo."
 
-msgid "Toggle dialogs panel"
-msgstr "Perjungti dialogų skiltį"
+msgid "Dialogs panel"
+msgstr ""
 
 msgid "Toggle dialogs panel, maximize mapview"
 msgstr "Perjungti dialogų skiltį, didinti žemėlapio vaizdą"
 
+msgid "Toggle dialogs panel"
+msgstr "Perjungti dialogų skiltį"
+
 msgid "Distribute Nodes"
 msgstr "Paskirstyti taškus"
 
@@ -701,7 +704,7 @@ msgid "Fix tag conflicts"
 msgstr "Pataisyti žymės konfliktus"
 
 msgid "Split ways into fragments"
-msgstr "Padalinti kelius"
+msgstr "Padalinti kelią į fragmentus"
 
 msgid "Sorry. Cannot handle multipolygon relations with multiple outer ways."
 msgstr ""
@@ -1391,7 +1394,7 @@ msgstr[1] "Supaprastinti kelią (pašalinti {0} taškus)"
 msgstr[2] "Supaprastinti kelią (pašalinti {0} taškų)"
 
 msgid "Split Way"
-msgstr "Perskirti kelius"
+msgstr "Padalinti kelią"
 
 msgid "Split a way at the selected node."
 msgstr "Perskirti kelią ties parinktu tašku."
@@ -7040,6 +7043,9 @@ msgstr "Koordinatės: "
 msgid "Coordinates (projected): "
 msgstr "Koordinatės (projektuotos): "
 
+msgid "UTM Zone"
+msgstr "UTM Zona"
+
 msgid "Part of: "
 msgstr "Dalis: "
 
@@ -9560,6 +9566,11 @@ msgstr ""
 "Patikrinti punktą \"Išsaugoti\", kad išsaugoti sluoksnį į failą, nurodytą "
 "kairėje."
 
+msgid ""
+"A background upload is already in progress. Kindly wait for it to finish "
+"before uploading new changes"
+msgstr ""
+
 msgid "I would like someone to review my edits."
 msgstr "Norėčiau, kad kas nors peržiūrėtų mano pakeitimus."
 
@@ -10816,6 +10827,9 @@ msgstr "Pakeisti projekciją vėl arba pašalinti sluoksnį."
 msgid "Save Layer"
 msgstr "Išsaugoti sluoksnį"
 
+msgid "Trying to set a read only data layer as edit layer"
+msgstr ""
+
 msgid "{0} note"
 msgid_plural "{0} notes"
 msgstr[0] "{0} pastaba"
@@ -11744,11 +11758,6 @@ msgstr "Nepavyko įkelti žemėlapio paišymo stilių iš „{0}“. Klaida buvo
 msgid "Failed to parse Mappaint styles from ''{0}''. Error was: {1}"
 msgstr "Nepavyko išnagrinėti žemėlapio paišymo stilių iš „{0}“. Klaida: {1}"
 
-msgid ""
-"Detected deprecated ''{0}'' in ''{1}'' which will be removed shortly. Use "
-"''{2}'' instead."
-msgstr ""
-
 msgid "Failed to locate image ''{0}''"
 msgstr "Nepavyko lokalizuoti piešinio ''{0}''"
 
@@ -13051,6 +13060,9 @@ msgstr "Rodyti prisistatymo langą paleidžiant programą"
 msgid "Show object ID in selection lists"
 msgstr "Rodyti objekto ID pažymėjimo sąrašuose"
 
+msgid "Show node coordinates in selection lists"
+msgstr ""
+
 msgid "Show localized name in selection lists"
 msgstr "Rodyti lokalizuotą vardą pažymėjimo sąrašuose"
 
@@ -13861,9 +13873,6 @@ msgstr "UTM Geodezinė sistema"
 msgid "UTM"
 msgstr "UTM"
 
-msgid "UTM Zone"
-msgstr "UTM Zona"
-
 msgid "North"
 msgstr "Šiaurė"
 
@@ -14382,9 +14391,6 @@ msgstr "Paruošti paelementį be tevo"
 msgid "Error parsing {0}: "
 msgstr "Nagrinėjimo klaida {0}: "
 
-msgid "Presets"
-msgstr "Ruošiniai"
-
 msgid "Search for objects by preset..."
 msgstr "Ieškoti objektų pagal ruošinį..."
 
@@ -17285,6 +17291,18 @@ msgstr "vegetariška"
 msgid "korean"
 msgstr "korėjietiška"
 
+msgid "donut"
+msgstr ""
+
+msgid "mediterranean"
+msgstr ""
+
+msgid "friture"
+msgstr ""
+
+msgid "crepe"
+msgstr ""
+
 msgid "Internet access"
 msgstr "Interneto prieiga"
 
@@ -20129,8 +20147,17 @@ msgstr "Elektros tiekimas"
 msgid "Tents allowed"
 msgstr ""
 
-msgid "Camping Site"
-msgstr "Stovyklavietė"
+msgid "Campsite"
+msgstr ""
+
+msgid "Caravans allowed"
+msgstr ""
+
+msgid "Backcountry"
+msgstr ""
+
+msgid "Group only access"
+msgstr ""
 
 msgid "Food+Drinks"
 msgstr "Maistas+Gėrimai"
@@ -24970,6 +24997,14 @@ msgid ""
 "resolution or better, and refreshed more frequently with ongoing updates."
 msgstr ""
 
+msgid "DigitalGlobe Premium Imagery Vintage"
+msgstr ""
+
+msgid ""
+"Imagery boundaries and capture dates. Labels appear at zoom level 14 and "
+"higher."
+msgstr ""
+
 msgid "DigitalGlobe Standard Imagery"
 msgstr ""
 
@@ -24979,6 +25014,9 @@ msgid ""
 "Landsat. Average age is 2.31 years, with some areas updated 2x per year."
 msgstr ""
 
+msgid "DigitalGlobe Standard Imagery Vintage"
+msgstr ""
+
 msgid "Esri World Imagery"
 msgstr ""
 
@@ -25042,6 +25080,12 @@ msgstr "Strava bėgimo intensyvumo žemėlapis"
 msgid "Strava cycling and running heatmap"
 msgstr "Strava dviračių ir bėgimo intensyvumo žemėlapis"
 
+msgid "Strava water sports heatmap"
+msgstr ""
+
+msgid "Strava winter sports heatmap"
+msgstr ""
+
 msgid "Locator Overlay"
 msgstr "Locator perdanga"
 
@@ -25446,6 +25490,9 @@ msgstr "SPW(allonie) PICC numerinės nuotraukos"
 msgid "SPW(allonie) most recent aerial imagery"
 msgstr ""
 
+msgid "SPW(allonie) 2016 aerial imagery"
+msgstr ""
+
 msgid "SPW(allonie) 2015 aerial imagery"
 msgstr "SPW(allonie) 2015 aeronuotraukos"
 
@@ -25491,6 +25538,14 @@ msgstr ""
 msgid "Addresses data from IBGE"
 msgstr "Adresų duomenys iš IBGE"
 
+msgid "Street names IBGE Salvador-BA"
+msgstr ""
+
+msgid ""
+"Streets geometry and names of Salvador, Bahia. Source: Faces de Logradouro - "
+"IBGE."
+msgstr ""
+
 msgid "Rio Mosaic 2013"
 msgstr ""
 
@@ -26225,6 +26280,9 @@ msgstr ""
 msgid "Japan GSI ortho Imagery"
 msgstr ""
 
+msgid "Japan GSI Standard Map"
+msgstr ""
+
 msgid "imagico.de OSM images for mapping: Aral Sea (low water level)"
 msgstr ""
 
@@ -26254,8 +26312,8 @@ msgstr "50cm ortho - Latvija"
 msgid "20cm ortho - Latvia - Coastline"
 msgstr "20cm ortho - Latvija - pakrantė"
 
-msgid "1.cikla ortofotokarte - Latvia"
-msgstr "1.cikla ortofotokarte - Latvija"
+msgid "Orthophoto 1st cycle (1994-1999) - Latvia"
+msgstr ""
 
 msgid "ORT10LT (Lithuania)"
 msgstr "ORT10LT (Lietuva)"
@@ -26263,6 +26321,9 @@ msgstr "ORT10LT (Lietuva)"
 msgid "geoportail.lu all layers"
 msgstr ""
 
+msgid "geoportail.lu ortho latest"
+msgstr ""
+
 msgid "geoportail.lu ortho 2016"
 msgstr ""
 
@@ -27761,6 +27822,9 @@ msgstr ""
 msgid "{0} on a node. Should be used on a way."
 msgstr ""
 
+msgid "{0} on a node. Should be used on a way or relation."
+msgstr ""
+
 msgid "{0} on a node. Should be drawn as an area."
 msgstr ""
 
@@ -27994,6 +28058,9 @@ msgstr ""
 msgid "Nodes duplicating parent way tags"
 msgstr "Taškai dubliuoja tėvinio kelio žymas"
 
+msgid "{0} together with {1} and {2}. Remove {0}."
+msgstr ""
+
 msgid ""
 "wikipedia tag has no language given, use ''wikipedia''=''language:page "
 "title''"
@@ -28784,6 +28851,21 @@ msgstr ""
 msgid "Importing..."
 msgstr ""
 
+msgid "Shape is started incorrectly"
+msgstr ""
+
+msgid "Can''t load SVG diagram"
+msgstr ""
+
+msgid "Can''t find root SVG element"
+msgstr ""
+
+msgid "Import primitives"
+msgstr ""
+
+msgid "Cannot find configuration file!"
+msgstr ""
+
 msgid "DXF files [ImportDxf plugin] (*.dxf)"
 msgstr ""
 
@@ -29432,6 +29514,9 @@ msgstr ""
 msgid "Download mode"
 msgstr "Atsiuntimo veiksena"
 
+msgid "Number of images to be pre-fetched (forwards and backwards)"
+msgstr ""
+
 msgid "You are logged in as ''{0}''."
 msgstr ""
 
@@ -29645,11 +29730,18 @@ msgid "only when manually requested"
 msgstr "tik paprašius rankiniu būdu"
 
 msgid ""
-"The downloaded OSM area is too big. Download mode has been changed to OSM "
-"area until the layer is restarted."
+"The Mapillary layer has stopped downloading images, because the requested "
+"area is too big!"
+msgstr ""
+
+msgid ""
+"To solve this problem, you could zoom in and load a smaller area of the map."
+msgstr ""
+
+msgid ""
+"To solve this problem, you could switch to download mode ''{0}'' and load "
+"Mapillary images for a smaller portion of the map."
 msgstr ""
-"Atsiųstas OSM plotas per didelis. Atsiuntimo veiksena pakeista į OSM plotą "
-"kol sluoksnis neperleistas."
 
 msgid "Downloading"
 msgstr ""
@@ -30664,7 +30756,7 @@ msgid "Add \"source=...\" to elements?"
 msgstr ""
 
 msgid "Download from Cadastre"
-msgstr ""
+msgstr "Atsiųsti iš Cadastre"
 
 msgid "Objects:"
 msgstr ""
@@ -33011,19 +33103,6 @@ msgstr ""
 msgid "Merge Overlap (combine)"
 msgstr ""
 
-msgid ""
-"<html>A role based relation membership was copied to all new ways.<br>You "
-"should verify this and correct it when necessary.</html>"
-msgstr ""
-
-msgid ""
-"<html>A relation membership was copied to all new ways.<br>You should verify "
-"this and correct it when necessary.</html>"
-msgstr ""
-
-msgid "Split way"
-msgstr ""
-
 msgid "Michigan Left"
 msgstr ""
 
@@ -34495,33 +34574,6 @@ msgstr ""
 msgid "PT: Route passes a oneway road in the wrong direction"
 msgstr ""
 
-msgid "moved"
-msgstr ""
-
-msgid "rail"
-msgstr "bėgiai"
-
-msgid "Can''t parse a time from this string."
-msgstr ""
-
-msgid "Invalid value"
-msgstr ""
-
-msgid "added"
-msgstr ""
-
-msgid "Public Transport: Enable GTFSStops"
-msgstr "Viešasis transportas: įjungti GTFSStops"
-
-msgid "Public Transport: Catch GTFS stops"
-msgstr "Viešasis transportas: pagauti GTFS stoteles"
-
-msgid "skipped"
-msgstr ""
-
-msgid "Public Transport: Disable GTFS"
-msgstr "Viešasis transportas:  išjungti GTFS"
-
 msgid "Create Stops from GTFS ..."
 msgstr ""
 
@@ -34548,69 +34600,9 @@ msgstr ""
 msgid "The GTFS file was empty."
 msgstr ""
 
-msgid "Create Stops from GTFS"
-msgstr ""
-
-msgid "GTFS-Stops"
-msgstr ""
-
-msgid "Type of stops to add"
-msgstr ""
-
-msgid "Time on your GPS device"
-msgstr ""
-
-msgid "HH:MM:SS.sss"
-msgstr ""
-
-msgid "Time on your stopwatch"
-msgstr ""
-
-msgid "Time window"
-msgstr ""
-
-msgid "seconds"
-msgstr ""
-
-msgid "Move Threshold"
-msgstr ""
-
-msgid "Suggest Stops"
-msgstr ""
-
-msgid "Find"
-msgstr ""
-
-msgid "Show"
-msgstr "Rodyti"
-
-msgid "Mark"
-msgstr ""
-
-msgid "Catch"
-msgstr ""
-
-msgid "Join"
-msgstr ""
-
-msgid "Public Transport: Join GTFS stops"
-msgstr "Viešasis transportas: bendros GTFS stotelės"
-
-msgid "State"
-msgstr ""
-
-msgid "[incomplete]"
-msgstr ""
-
-msgid "[empty way]"
-msgstr ""
-
 msgid "[ID] {0}"
 msgstr ""
 
-msgid "[gap]"
-msgstr ""
-
 msgid "Route patterns ..."
 msgstr ""
 
@@ -34653,6 +34645,15 @@ msgstr ""
 msgid "Name/Id"
 msgstr ""
 
+msgid "Find"
+msgstr ""
+
+msgid "Show"
+msgstr "Rodyti"
+
+msgid "Mark"
+msgstr ""
+
 msgid "Ref"
 msgstr "Ref"
 
@@ -34668,12 +34669,9 @@ msgstr ""
 msgid "Maximum distance from route"
 msgstr ""
 
-msgid " [ID] {0}"
+msgid "Suggest Stops"
 msgstr ""
 
-msgid "Public Transport: Change stop type"
-msgstr "Viešasis transportas: pakeisti stotelės tipą"
-
 msgid "Create Stops from GPX ..."
 msgstr ""
 
@@ -34686,28 +34684,29 @@ msgstr ""
 msgid "The GPX file contained no tracks or waypoints."
 msgstr ""
 
-msgid "Create Stops from GPX"
+msgid "moved"
 msgstr ""
 
-msgid "Tracks in this GPX file:"
+msgid "added"
 msgstr ""
 
-msgid "Detach"
-msgstr ""
+msgid "Public Transport: Enable GTFSStops"
+msgstr "Viešasis transportas: įjungti GTFSStops"
 
-msgid "implicit"
-msgstr ""
+msgid "Public Transport: Catch GTFS stops"
+msgstr "Viešasis transportas: pagauti GTFS stoteles"
 
-msgid ""
-"The GPX file doesn''t contain valid trackpoints. Please use a GPX file that "
-"has trackpoints."
+msgid "skipped"
 msgstr ""
 
-msgid "GPX File Trouble"
-msgstr ""
+msgid "Public Transport: Disable GTFS"
+msgstr "Viešasis transportas:  išjungti GTFS"
 
-msgid "unnamed"
-msgstr "bevardis"
+msgid "Public Transport: Join GTFS stops"
+msgstr "Viešasis transportas: bendros GTFS stotelės"
+
+msgid "Public Transport: Change stop type"
+msgstr "Viešasis transportas: pakeisti stotelės tipą"
 
 msgid "Public Transport: Add track stop"
 msgstr "Viešasis transportas: pridėti stotelę trasoje"
@@ -34730,9 +34729,6 @@ msgstr "Viešasis transportas: suskirstyti trasos stotelių sąrašą"
 msgid "Public Transport: Suggest stops"
 msgstr "Viešasis transportas: pasiūlyti stotelių"
 
-msgid "Stopname"
-msgstr ""
-
 msgid "Public Transport: Detach waypoints"
 msgstr "Viešasis transportas: atjungti tarpinius taškus"
 
@@ -34745,6 +34741,89 @@ msgstr "Viešasis transportas: įjungti tarpinius taškus"
 msgid "Public Transport: Edit waypoint name"
 msgstr "Viešasis transportas: keisti tarpinio taško pavadinimą"
 
+msgid "rail"
+msgstr "bėgiai"
+
+msgid "Can''t parse a time from this string."
+msgstr ""
+
+msgid "Invalid value"
+msgstr ""
+
+msgid "Create Stops from GTFS"
+msgstr ""
+
+msgid "GTFS-Stops"
+msgstr ""
+
+msgid "Type of stops to add"
+msgstr ""
+
+msgid "Time on your GPS device"
+msgstr ""
+
+msgid "HH:MM:SS.sss"
+msgstr ""
+
+msgid "Time on your stopwatch"
+msgstr ""
+
+msgid "Time window"
+msgstr ""
+
+msgid "seconds"
+msgstr ""
+
+msgid "Move Threshold"
+msgstr ""
+
+msgid "Catch"
+msgstr ""
+
+msgid "Join"
+msgstr ""
+
+msgid "Create Stops from GPX"
+msgstr ""
+
+msgid "Tracks in this GPX file:"
+msgstr ""
+
+msgid "Detach"
+msgstr ""
+
+msgid "implicit"
+msgstr ""
+
+msgid "State"
+msgstr ""
+
+msgid "[incomplete]"
+msgstr ""
+
+msgid "[empty way]"
+msgstr ""
+
+msgid "[gap]"
+msgstr ""
+
+msgid "Stopname"
+msgstr ""
+
+msgid " [ID] {0}"
+msgstr ""
+
+msgid ""
+"The GPX file doesn''t contain valid trackpoints. Please use a GPX file that "
+"has trackpoints."
+msgstr ""
+
+msgid "GPX File Trouble"
+msgstr ""
+
+msgid "unnamed"
+msgstr "bevardis"
+
 msgid "Distance between stops"
 msgstr ""
 
@@ -35477,6 +35556,9 @@ msgstr "Paleidžia žymų tvarkytuvės langą"
 msgid "JOSM Tag Editor Plugin"
 msgstr "JOSM žymų tvarkytuvės papildinys"
 
+msgid "Presets"
+msgstr "Ruošiniai"
+
 msgid "Abort tag editing and close dialog"
 msgstr ""
 
@@ -36854,18 +36936,20 @@ msgid "The current selection cannot be used for splitting."
 msgstr "Dabartinė parinktis negali būti panaudota perskyrimui."
 
 msgid "The selected way is not closed."
-msgstr ""
+msgstr "Pažymėtas kelias nėra uždaras."
 
 msgid "The selected way does not contain the selected node."
 msgid_plural "The selected way does not contain all the selected nodes."
-msgstr[0] "Parinktas kelias neturi parinkto taško."
-msgstr[1] "Parinktas kelias neturi visų parinktų taškų."
-msgstr[2] "Parinktas kelias neturi visų parinktų taškų."
+msgstr[0] "Pažymėtame kelyje nėra pažymėto taško."
+msgstr[1] "Pažymėtame kelyje nėra pažymėtų taškų."
+msgstr[2] "Pažymėtame kelyje nėra pažymėtų taškų."
 
 msgid ""
 "The selected way is not a split way, please select split points or split way "
 "too."
 msgstr ""
+"Pažymėtas kelias nėra padalintas kelias, pažymėkite dalinimo taškus ar "
+"dalinimo kelią."
 
 msgid "The selected nodes can not be consecutive nodes in the object."
 msgstr ""
@@ -37460,6 +37544,27 @@ msgid_plural "Overwrite ''{0}'' tags {1} from {2} with new value ''{3}''?"
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Download from Sophox API"
+msgstr "Atsiųsti iš Sophox API"
+
+msgid ""
+"Find places of education at least 2km, and at most 3km from the center of "
+"the selection"
+msgstr ""
+"Rasti mokslo įstaigas mažiausiai 2 km, daugiausiai 3 km nuo pažymėjimo centro"
+
+msgid "Show/hide Sophox snippet list"
+msgstr ""
+
+msgid "help"
+msgstr ""
+
+msgid "Server: "
+msgstr ""
+
+msgid "Wikidata+OSM server"
+msgstr ""
+
 msgid "Search Wikidata items"
 msgstr "Ieškoti Wikidata elementų"
 
@@ -37534,27 +37639,6 @@ msgid ""
 msgstr ""
 "Prideda „wikipedia“ žymą atitinkančią šį straipsnį pažymėtiems objektams"
 
-msgid "Download from Wikosm API"
-msgstr "Atsiųsti iš Wikosm API"
-
-msgid ""
-"Find places of education at least 2km, and at most 3km from the center of "
-"the selection"
-msgstr ""
-"Rasti mokslo įstaigas mažiausiai 2 km, daugiausiai 3 km nuo pažymėjimo centro"
-
-msgid "Show/hide Wikosm snippet list"
-msgstr "Rodyti/slėpti Wikosm fragmentų sąrašą"
-
-msgid "help"
-msgstr ""
-
-msgid "Server: "
-msgstr ""
-
-msgid "Wikidata+OSM server"
-msgstr ""
-
 msgid "The Ultimate WMS Super-speed Turbo Challenge II"
 msgstr ""
 
diff --git a/i18n/po/lv.po b/i18n/po/lv.po
index 6a2b602..73cf074 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-10-30 03:38+0100\n"
+"POT-Creation-Date: 2017-11-26 00:06+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-10-30 04:52+0000\n"
-"X-Generator: Launchpad (build 18493)\n"
+"X-Launchpad-Export-Date: 2017-11-26 04:53+0000\n"
+"X-Generator: Launchpad (build 18509)\n"
 "Language: lv\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -426,12 +426,15 @@ msgstr ""
 msgid "Delete the active layer. Does not delete the associated file."
 msgstr ""
 
-msgid "Toggle dialogs panel"
+msgid "Dialogs panel"
 msgstr ""
 
 msgid "Toggle dialogs panel, maximize mapview"
 msgstr ""
 
+msgid "Toggle dialogs panel"
+msgstr ""
+
 msgid "Distribute Nodes"
 msgstr ""
 
@@ -6498,6 +6501,9 @@ msgstr ""
 msgid "Coordinates (projected): "
 msgstr ""
 
+msgid "UTM Zone"
+msgstr ""
+
 msgid "Part of: "
 msgstr ""
 
@@ -8796,6 +8802,11 @@ msgstr ""
 msgid "Check \"Save\" to save the layer to the file specified on the left."
 msgstr ""
 
+msgid ""
+"A background upload is already in progress. Kindly wait for it to finish "
+"before uploading new changes"
+msgstr ""
+
 msgid "I would like someone to review my edits."
 msgstr ""
 
@@ -9908,6 +9919,9 @@ msgstr ""
 msgid "Save Layer"
 msgstr "Saglabāt slāni"
 
+msgid "Trying to set a read only data layer as edit layer"
+msgstr ""
+
 msgid "{0} note"
 msgid_plural "{0} notes"
 msgstr[0] ""
@@ -10738,11 +10752,6 @@ msgstr ""
 msgid "Failed to parse Mappaint styles from ''{0}''. Error was: {1}"
 msgstr ""
 
-msgid ""
-"Detected deprecated ''{0}'' in ''{1}'' which will be removed shortly. Use "
-"''{2}'' instead."
-msgstr ""
-
 msgid "Failed to locate image ''{0}''"
 msgstr ""
 
@@ -11907,6 +11916,9 @@ msgstr ""
 msgid "Show object ID in selection lists"
 msgstr ""
 
+msgid "Show node coordinates in selection lists"
+msgstr ""
+
 msgid "Show localized name in selection lists"
 msgstr ""
 
@@ -12663,9 +12675,6 @@ msgstr ""
 msgid "UTM"
 msgstr ""
 
-msgid "UTM Zone"
-msgstr ""
-
 msgid "North"
 msgstr ""
 
@@ -13133,9 +13142,6 @@ msgstr ""
 msgid "Error parsing {0}: "
 msgstr ""
 
-msgid "Presets"
-msgstr ""
-
 msgid "Search for objects by preset..."
 msgstr ""
 
@@ -15677,6 +15683,18 @@ msgstr ""
 msgid "korean"
 msgstr ""
 
+msgid "donut"
+msgstr ""
+
+msgid "mediterranean"
+msgstr ""
+
+msgid "friture"
+msgstr ""
+
+msgid "crepe"
+msgstr ""
+
 msgid "Internet access"
 msgstr ""
 
@@ -18519,7 +18537,16 @@ msgstr ""
 msgid "Tents allowed"
 msgstr ""
 
-msgid "Camping Site"
+msgid "Campsite"
+msgstr ""
+
+msgid "Caravans allowed"
+msgstr ""
+
+msgid "Backcountry"
+msgstr ""
+
+msgid "Group only access"
 msgstr ""
 
 msgid "Food+Drinks"
@@ -23348,6 +23375,14 @@ msgid ""
 "resolution or better, and refreshed more frequently with ongoing updates."
 msgstr ""
 
+msgid "DigitalGlobe Premium Imagery Vintage"
+msgstr ""
+
+msgid ""
+"Imagery boundaries and capture dates. Labels appear at zoom level 14 and "
+"higher."
+msgstr ""
+
 msgid "DigitalGlobe Standard Imagery"
 msgstr ""
 
@@ -23357,6 +23392,9 @@ msgid ""
 "Landsat. Average age is 2.31 years, with some areas updated 2x per year."
 msgstr ""
 
+msgid "DigitalGlobe Standard Imagery Vintage"
+msgstr ""
+
 msgid "Esri World Imagery"
 msgstr ""
 
@@ -23420,6 +23458,12 @@ msgstr ""
 msgid "Strava cycling and running heatmap"
 msgstr ""
 
+msgid "Strava water sports heatmap"
+msgstr ""
+
+msgid "Strava winter sports heatmap"
+msgstr ""
+
 msgid "Locator Overlay"
 msgstr ""
 
@@ -23824,6 +23868,9 @@ msgstr ""
 msgid "SPW(allonie) most recent aerial imagery"
 msgstr ""
 
+msgid "SPW(allonie) 2016 aerial imagery"
+msgstr ""
+
 msgid "SPW(allonie) 2015 aerial imagery"
 msgstr ""
 
@@ -23869,6 +23916,14 @@ msgstr ""
 msgid "Addresses data from IBGE"
 msgstr ""
 
+msgid "Street names IBGE Salvador-BA"
+msgstr ""
+
+msgid ""
+"Streets geometry and names of Salvador, Bahia. Source: Faces de Logradouro - "
+"IBGE."
+msgstr ""
+
 msgid "Rio Mosaic 2013"
 msgstr ""
 
@@ -24599,6 +24654,9 @@ msgstr ""
 msgid "Japan GSI ortho Imagery"
 msgstr ""
 
+msgid "Japan GSI Standard Map"
+msgstr ""
+
 msgid "imagico.de OSM images for mapping: Aral Sea (low water level)"
 msgstr ""
 
@@ -24628,7 +24686,7 @@ msgstr ""
 msgid "20cm ortho - Latvia - Coastline"
 msgstr ""
 
-msgid "1.cikla ortofotokarte - Latvia"
+msgid "Orthophoto 1st cycle (1994-1999) - Latvia"
 msgstr ""
 
 msgid "ORT10LT (Lithuania)"
@@ -24637,6 +24695,9 @@ msgstr ""
 msgid "geoportail.lu all layers"
 msgstr ""
 
+msgid "geoportail.lu ortho latest"
+msgstr ""
+
 msgid "geoportail.lu ortho 2016"
 msgstr ""
 
@@ -26127,6 +26188,9 @@ msgstr ""
 msgid "{0} on a node. Should be used on a way."
 msgstr ""
 
+msgid "{0} on a node. Should be used on a way or relation."
+msgstr ""
+
 msgid "{0} on a node. Should be drawn as an area."
 msgstr ""
 
@@ -26354,6 +26418,9 @@ msgstr ""
 msgid "Nodes duplicating parent way tags"
 msgstr ""
 
+msgid "{0} together with {1} and {2}. Remove {0}."
+msgstr ""
+
 msgid ""
 "wikipedia tag has no language given, use ''wikipedia''=''language:page "
 "title''"
@@ -27118,6 +27185,21 @@ msgstr ""
 msgid "Importing..."
 msgstr ""
 
+msgid "Shape is started incorrectly"
+msgstr ""
+
+msgid "Can''t load SVG diagram"
+msgstr ""
+
+msgid "Can''t find root SVG element"
+msgstr ""
+
+msgid "Import primitives"
+msgstr ""
+
+msgid "Cannot find configuration file!"
+msgstr ""
+
 msgid "DXF files [ImportDxf plugin] (*.dxf)"
 msgstr ""
 
@@ -27757,6 +27839,9 @@ msgstr ""
 msgid "Download mode"
 msgstr ""
 
+msgid "Number of images to be pre-fetched (forwards and backwards)"
+msgstr ""
+
 msgid "You are logged in as ''{0}''."
 msgstr ""
 
@@ -27967,8 +28052,17 @@ msgid "only when manually requested"
 msgstr ""
 
 msgid ""
-"The downloaded OSM area is too big. Download mode has been changed to OSM "
-"area until the layer is restarted."
+"The Mapillary layer has stopped downloading images, because the requested "
+"area is too big!"
+msgstr ""
+
+msgid ""
+"To solve this problem, you could zoom in and load a smaller area of the map."
+msgstr ""
+
+msgid ""
+"To solve this problem, you could switch to download mode ''{0}'' and load "
+"Mapillary images for a smaller portion of the map."
 msgstr ""
 
 msgid "Downloading"
@@ -31280,19 +31374,6 @@ msgstr ""
 msgid "Merge Overlap (combine)"
 msgstr ""
 
-msgid ""
-"<html>A role based relation membership was copied to all new ways.<br>You "
-"should verify this and correct it when necessary.</html>"
-msgstr ""
-
-msgid ""
-"<html>A relation membership was copied to all new ways.<br>You should verify "
-"this and correct it when necessary.</html>"
-msgstr ""
-
-msgid "Split way"
-msgstr ""
-
 msgid "Michigan Left"
 msgstr ""
 
@@ -32747,254 +32828,254 @@ msgstr ""
 msgid "PT: Route passes a oneway road in the wrong direction"
 msgstr ""
 
-msgid "moved"
+msgid "Create Stops from GTFS ..."
 msgstr ""
 
-msgid "rail"
+msgid "Create Stops from a GTFS file"
 msgstr ""
 
-msgid "Can''t parse a time from this string."
+msgid "Select GTFS file (stops.txt)"
 msgstr ""
 
-msgid "Invalid value"
+msgid "File \"{0}\" does not exist"
 msgstr ""
 
-msgid "added"
+msgid "IOException \"{0}\" occurred"
 msgstr ""
 
-msgid "Public Transport: Enable GTFSStops"
+msgid ""
+"There exists no dataset. Try to download data from the server or open an OSM "
+"file."
 msgstr ""
 
-msgid "Public Transport: Catch GTFS stops"
+msgid "No data found"
 msgstr ""
 
-msgid "skipped"
+msgid "The GTFS file was empty."
 msgstr ""
 
-msgid "Public Transport: Disable GTFS"
+msgid "[ID] {0}"
 msgstr ""
 
-msgid "Create Stops from GTFS ..."
+msgid "Route patterns ..."
 msgstr ""
 
-msgid "Create Stops from a GTFS file"
+msgid "Edit Route patterns for public transport"
 msgstr ""
 
-msgid "Select GTFS file (stops.txt)"
+msgid "Route Patterns"
 msgstr ""
 
-msgid "File \"{0}\" does not exist"
+msgid "Overview"
 msgstr ""
 
-msgid "IOException \"{0}\" occurred"
+msgid "Itinerary"
 msgstr ""
 
-msgid ""
-"There exists no dataset. Try to download data from the server or open an OSM "
-"file."
+msgid "Stops"
 msgstr ""
 
-msgid "No data found"
+msgid "Meta"
 msgstr ""
 
-msgid "The GTFS file was empty."
+msgid "Existing route patterns:"
 msgstr ""
 
-msgid "Create Stops from GTFS"
+msgid "Reflect"
 msgstr ""
 
-msgid "GTFS-Stops"
+msgid "Required tags:"
 msgstr ""
 
-msgid "Type of stops to add"
+msgid "Common tags:"
 msgstr ""
 
-msgid "Time on your GPS device"
+msgid "Additional tags:"
 msgstr ""
 
-msgid "HH:MM:SS.sss"
+msgid "Add a new Tag"
 msgstr ""
 
-msgid "Time on your stopwatch"
+msgid "Name/Id"
 msgstr ""
 
-msgid "Time window"
+msgid "Find"
 msgstr ""
 
-msgid "seconds"
+msgid "Show"
 msgstr ""
 
-msgid "Move Threshold"
+msgid "Mark"
 msgstr ""
 
-msgid "Suggest Stops"
+msgid "Ref"
 msgstr ""
 
-msgid "Find"
+msgid "Stops are possible on the"
 msgstr ""
 
-msgid "Show"
+msgid "right hand side"
 msgstr ""
 
-msgid "Mark"
+msgid "left hand side"
 msgstr ""
 
-msgid "Catch"
+msgid "Maximum distance from route"
 msgstr ""
 
-msgid "Join"
+msgid "Suggest Stops"
 msgstr ""
 
-msgid "Public Transport: Join GTFS stops"
+msgid "Create Stops from GPX ..."
 msgstr ""
 
-msgid "State"
+msgid "Create Stops from a GPX file"
 msgstr ""
 
-msgid "[incomplete]"
+msgid "Select GPX file"
 msgstr ""
 
-msgid "[empty way]"
+msgid "The GPX file contained no tracks or waypoints."
 msgstr ""
 
-msgid "[ID] {0}"
+msgid "moved"
 msgstr ""
 
-msgid "[gap]"
+msgid "added"
 msgstr ""
 
-msgid "Route patterns ..."
+msgid "Public Transport: Enable GTFSStops"
 msgstr ""
 
-msgid "Edit Route patterns for public transport"
+msgid "Public Transport: Catch GTFS stops"
 msgstr ""
 
-msgid "Route Patterns"
+msgid "skipped"
 msgstr ""
 
-msgid "Overview"
+msgid "Public Transport: Disable GTFS"
 msgstr ""
 
-msgid "Itinerary"
+msgid "Public Transport: Join GTFS stops"
 msgstr ""
 
-msgid "Stops"
+msgid "Public Transport: Change stop type"
 msgstr ""
 
-msgid "Meta"
+msgid "Public Transport: Add track stop"
 msgstr ""
 
-msgid "Existing route patterns:"
+msgid "Public Transport: Delete track stop"
 msgstr ""
 
-msgid "Reflect"
+msgid "Public Transport: Detach track stop list"
 msgstr ""
 
-msgid "Required tags:"
+msgid "Public Transport: Edit track stop list"
 msgstr ""
 
-msgid "Common tags:"
+msgid "Public Transport: Relocate nodes in track stoplist"
 msgstr ""
 
-msgid "Additional tags:"
+msgid "Public Transport: sort track stop list"
 msgstr ""
 
-msgid "Add a new Tag"
+msgid "Public Transport: Suggest stops"
 msgstr ""
 
-msgid "Name/Id"
+msgid "Public Transport: Detach waypoints"
 msgstr ""
 
-msgid "Ref"
+msgid "Public Transport: Disable waypoints"
 msgstr ""
 
-msgid "Stops are possible on the"
+msgid "Public Transport: Enable waypoints"
 msgstr ""
 
-msgid "right hand side"
+msgid "Public Transport: Edit waypoint name"
 msgstr ""
 
-msgid "left hand side"
+msgid "rail"
 msgstr ""
 
-msgid "Maximum distance from route"
+msgid "Can''t parse a time from this string."
 msgstr ""
 
-msgid " [ID] {0}"
+msgid "Invalid value"
 msgstr ""
 
-msgid "Public Transport: Change stop type"
+msgid "Create Stops from GTFS"
 msgstr ""
 
-msgid "Create Stops from GPX ..."
+msgid "GTFS-Stops"
 msgstr ""
 
-msgid "Create Stops from a GPX file"
+msgid "Type of stops to add"
 msgstr ""
 
-msgid "Select GPX file"
+msgid "Time on your GPS device"
 msgstr ""
 
-msgid "The GPX file contained no tracks or waypoints."
+msgid "HH:MM:SS.sss"
 msgstr ""
 
-msgid "Create Stops from GPX"
+msgid "Time on your stopwatch"
 msgstr ""
 
-msgid "Tracks in this GPX file:"
+msgid "Time window"
 msgstr ""
 
-msgid "Detach"
+msgid "seconds"
 msgstr ""
 
-msgid "implicit"
+msgid "Move Threshold"
 msgstr ""
 
-msgid ""
-"The GPX file doesn''t contain valid trackpoints. Please use a GPX file that "
-"has trackpoints."
+msgid "Catch"
 msgstr ""
 
-msgid "GPX File Trouble"
+msgid "Join"
 msgstr ""
 
-msgid "unnamed"
+msgid "Create Stops from GPX"
 msgstr ""
 
-msgid "Public Transport: Add track stop"
+msgid "Tracks in this GPX file:"
 msgstr ""
 
-msgid "Public Transport: Delete track stop"
+msgid "Detach"
 msgstr ""
 
-msgid "Public Transport: Detach track stop list"
+msgid "implicit"
 msgstr ""
 
-msgid "Public Transport: Edit track stop list"
+msgid "State"
 msgstr ""
 
-msgid "Public Transport: Relocate nodes in track stoplist"
+msgid "[incomplete]"
 msgstr ""
 
-msgid "Public Transport: sort track stop list"
+msgid "[empty way]"
 msgstr ""
 
-msgid "Public Transport: Suggest stops"
+msgid "[gap]"
 msgstr ""
 
 msgid "Stopname"
 msgstr ""
 
-msgid "Public Transport: Detach waypoints"
+msgid " [ID] {0}"
 msgstr ""
 
-msgid "Public Transport: Disable waypoints"
+msgid ""
+"The GPX file doesn''t contain valid trackpoints. Please use a GPX file that "
+"has trackpoints."
 msgstr ""
 
-msgid "Public Transport: Enable waypoints"
+msgid "GPX File Trouble"
 msgstr ""
 
-msgid "Public Transport: Edit waypoint name"
+msgid "unnamed"
 msgstr ""
 
 msgid "Distance between stops"
@@ -33723,6 +33804,9 @@ msgstr ""
 msgid "JOSM Tag Editor Plugin"
 msgstr ""
 
+msgid "Presets"
+msgstr ""
+
 msgid "Abort tag editing and close dialog"
 msgstr ""
 
@@ -35648,6 +35732,26 @@ msgid_plural "Overwrite ''{0}'' tags {1} from {2} with new value ''{3}''?"
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Download from Sophox API"
+msgstr ""
+
+msgid ""
+"Find places of education at least 2km, and at most 3km from the center of "
+"the selection"
+msgstr ""
+
+msgid "Show/hide Sophox snippet list"
+msgstr ""
+
+msgid "help"
+msgstr ""
+
+msgid "Server: "
+msgstr ""
+
+msgid "Wikidata+OSM server"
+msgstr ""
+
 msgid "Search Wikidata items"
 msgstr ""
 
@@ -35721,26 +35825,6 @@ msgid ""
 "objects"
 msgstr ""
 
-msgid "Download from Wikosm API"
-msgstr ""
-
-msgid ""
-"Find places of education at least 2km, and at most 3km from the center of "
-"the selection"
-msgstr ""
-
-msgid "Show/hide Wikosm snippet list"
-msgstr ""
-
-msgid "help"
-msgstr ""
-
-msgid "Server: "
-msgstr ""
-
-msgid "Wikidata+OSM server"
-msgstr ""
-
 msgid "The Ultimate WMS Super-speed Turbo Challenge II"
 msgstr ""
 
diff --git a/i18n/po/mk.po b/i18n/po/mk.po
index b93f01e..7db2892 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-10-30 03:38+0100\n"
+"POT-Creation-Date: 2017-11-26 00:06+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-10-30 04:54+0000\n"
-"X-Generator: Launchpad (build 18493)\n"
+"X-Launchpad-Export-Date: 2017-11-26 04:55+0000\n"
+"X-Generator: Launchpad (build 18509)\n"
 "Language: mk\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -423,12 +423,15 @@ msgstr ""
 msgid "Delete the active layer. Does not delete the associated file."
 msgstr ""
 
-msgid "Toggle dialogs panel"
+msgid "Dialogs panel"
 msgstr ""
 
 msgid "Toggle dialogs panel, maximize mapview"
 msgstr ""
 
+msgid "Toggle dialogs panel"
+msgstr ""
+
 msgid "Distribute Nodes"
 msgstr ""
 
@@ -6491,6 +6494,9 @@ msgstr ""
 msgid "Coordinates (projected): "
 msgstr ""
 
+msgid "UTM Zone"
+msgstr ""
+
 msgid "Part of: "
 msgstr ""
 
@@ -8789,6 +8795,11 @@ msgstr ""
 msgid "Check \"Save\" to save the layer to the file specified on the left."
 msgstr ""
 
+msgid ""
+"A background upload is already in progress. Kindly wait for it to finish "
+"before uploading new changes"
+msgstr ""
+
 msgid "I would like someone to review my edits."
 msgstr ""
 
@@ -9897,6 +9908,9 @@ msgstr ""
 msgid "Save Layer"
 msgstr ""
 
+msgid "Trying to set a read only data layer as edit layer"
+msgstr ""
+
 msgid "{0} note"
 msgid_plural "{0} notes"
 msgstr[0] ""
@@ -10727,11 +10741,6 @@ msgstr ""
 msgid "Failed to parse Mappaint styles from ''{0}''. Error was: {1}"
 msgstr ""
 
-msgid ""
-"Detected deprecated ''{0}'' in ''{1}'' which will be removed shortly. Use "
-"''{2}'' instead."
-msgstr ""
-
 msgid "Failed to locate image ''{0}''"
 msgstr ""
 
@@ -11896,6 +11905,9 @@ msgstr ""
 msgid "Show object ID in selection lists"
 msgstr ""
 
+msgid "Show node coordinates in selection lists"
+msgstr ""
+
 msgid "Show localized name in selection lists"
 msgstr ""
 
@@ -12653,9 +12665,6 @@ msgstr ""
 msgid "UTM"
 msgstr ""
 
-msgid "UTM Zone"
-msgstr ""
-
 msgid "North"
 msgstr ""
 
@@ -13123,9 +13132,6 @@ msgstr ""
 msgid "Error parsing {0}: "
 msgstr ""
 
-msgid "Presets"
-msgstr ""
-
 msgid "Search for objects by preset..."
 msgstr ""
 
@@ -15667,6 +15673,18 @@ msgstr ""
 msgid "korean"
 msgstr ""
 
+msgid "donut"
+msgstr ""
+
+msgid "mediterranean"
+msgstr ""
+
+msgid "friture"
+msgstr ""
+
+msgid "crepe"
+msgstr ""
+
 msgid "Internet access"
 msgstr ""
 
@@ -18509,7 +18527,16 @@ msgstr ""
 msgid "Tents allowed"
 msgstr ""
 
-msgid "Camping Site"
+msgid "Campsite"
+msgstr ""
+
+msgid "Caravans allowed"
+msgstr ""
+
+msgid "Backcountry"
+msgstr ""
+
+msgid "Group only access"
 msgstr ""
 
 msgid "Food+Drinks"
@@ -23338,6 +23365,14 @@ msgid ""
 "resolution or better, and refreshed more frequently with ongoing updates."
 msgstr ""
 
+msgid "DigitalGlobe Premium Imagery Vintage"
+msgstr ""
+
+msgid ""
+"Imagery boundaries and capture dates. Labels appear at zoom level 14 and "
+"higher."
+msgstr ""
+
 msgid "DigitalGlobe Standard Imagery"
 msgstr ""
 
@@ -23347,6 +23382,9 @@ msgid ""
 "Landsat. Average age is 2.31 years, with some areas updated 2x per year."
 msgstr ""
 
+msgid "DigitalGlobe Standard Imagery Vintage"
+msgstr ""
+
 msgid "Esri World Imagery"
 msgstr ""
 
@@ -23410,6 +23448,12 @@ msgstr ""
 msgid "Strava cycling and running heatmap"
 msgstr ""
 
+msgid "Strava water sports heatmap"
+msgstr ""
+
+msgid "Strava winter sports heatmap"
+msgstr ""
+
 msgid "Locator Overlay"
 msgstr ""
 
@@ -23814,6 +23858,9 @@ msgstr ""
 msgid "SPW(allonie) most recent aerial imagery"
 msgstr ""
 
+msgid "SPW(allonie) 2016 aerial imagery"
+msgstr ""
+
 msgid "SPW(allonie) 2015 aerial imagery"
 msgstr ""
 
@@ -23859,6 +23906,14 @@ msgstr ""
 msgid "Addresses data from IBGE"
 msgstr ""
 
+msgid "Street names IBGE Salvador-BA"
+msgstr ""
+
+msgid ""
+"Streets geometry and names of Salvador, Bahia. Source: Faces de Logradouro - "
+"IBGE."
+msgstr ""
+
 msgid "Rio Mosaic 2013"
 msgstr ""
 
@@ -24589,6 +24644,9 @@ msgstr ""
 msgid "Japan GSI ortho Imagery"
 msgstr ""
 
+msgid "Japan GSI Standard Map"
+msgstr ""
+
 msgid "imagico.de OSM images for mapping: Aral Sea (low water level)"
 msgstr ""
 
@@ -24618,7 +24676,7 @@ msgstr ""
 msgid "20cm ortho - Latvia - Coastline"
 msgstr ""
 
-msgid "1.cikla ortofotokarte - Latvia"
+msgid "Orthophoto 1st cycle (1994-1999) - Latvia"
 msgstr ""
 
 msgid "ORT10LT (Lithuania)"
@@ -24627,6 +24685,9 @@ msgstr ""
 msgid "geoportail.lu all layers"
 msgstr ""
 
+msgid "geoportail.lu ortho latest"
+msgstr ""
+
 msgid "geoportail.lu ortho 2016"
 msgstr ""
 
@@ -26117,6 +26178,9 @@ msgstr ""
 msgid "{0} on a node. Should be used on a way."
 msgstr ""
 
+msgid "{0} on a node. Should be used on a way or relation."
+msgstr ""
+
 msgid "{0} on a node. Should be drawn as an area."
 msgstr ""
 
@@ -26344,6 +26408,9 @@ msgstr ""
 msgid "Nodes duplicating parent way tags"
 msgstr ""
 
+msgid "{0} together with {1} and {2}. Remove {0}."
+msgstr ""
+
 msgid ""
 "wikipedia tag has no language given, use ''wikipedia''=''language:page "
 "title''"
@@ -27108,6 +27175,21 @@ msgstr ""
 msgid "Importing..."
 msgstr ""
 
+msgid "Shape is started incorrectly"
+msgstr ""
+
+msgid "Can''t load SVG diagram"
+msgstr ""
+
+msgid "Can''t find root SVG element"
+msgstr ""
+
+msgid "Import primitives"
+msgstr ""
+
+msgid "Cannot find configuration file!"
+msgstr ""
+
 msgid "DXF files [ImportDxf plugin] (*.dxf)"
 msgstr ""
 
@@ -27747,6 +27829,9 @@ msgstr ""
 msgid "Download mode"
 msgstr ""
 
+msgid "Number of images to be pre-fetched (forwards and backwards)"
+msgstr ""
+
 msgid "You are logged in as ''{0}''."
 msgstr ""
 
@@ -27957,8 +28042,17 @@ msgid "only when manually requested"
 msgstr ""
 
 msgid ""
-"The downloaded OSM area is too big. Download mode has been changed to OSM "
-"area until the layer is restarted."
+"The Mapillary layer has stopped downloading images, because the requested "
+"area is too big!"
+msgstr ""
+
+msgid ""
+"To solve this problem, you could zoom in and load a smaller area of the map."
+msgstr ""
+
+msgid ""
+"To solve this problem, you could switch to download mode ''{0}'' and load "
+"Mapillary images for a smaller portion of the map."
 msgstr ""
 
 msgid "Downloading"
@@ -31270,19 +31364,6 @@ msgstr ""
 msgid "Merge Overlap (combine)"
 msgstr ""
 
-msgid ""
-"<html>A role based relation membership was copied to all new ways.<br>You "
-"should verify this and correct it when necessary.</html>"
-msgstr ""
-
-msgid ""
-"<html>A relation membership was copied to all new ways.<br>You should verify "
-"this and correct it when necessary.</html>"
-msgstr ""
-
-msgid "Split way"
-msgstr ""
-
 msgid "Michigan Left"
 msgstr ""
 
@@ -32737,254 +32818,254 @@ msgstr ""
 msgid "PT: Route passes a oneway road in the wrong direction"
 msgstr ""
 
-msgid "moved"
+msgid "Create Stops from GTFS ..."
 msgstr ""
 
-msgid "rail"
+msgid "Create Stops from a GTFS file"
 msgstr ""
 
-msgid "Can''t parse a time from this string."
+msgid "Select GTFS file (stops.txt)"
 msgstr ""
 
-msgid "Invalid value"
+msgid "File \"{0}\" does not exist"
 msgstr ""
 
-msgid "added"
+msgid "IOException \"{0}\" occurred"
 msgstr ""
 
-msgid "Public Transport: Enable GTFSStops"
+msgid ""
+"There exists no dataset. Try to download data from the server or open an OSM "
+"file."
 msgstr ""
 
-msgid "Public Transport: Catch GTFS stops"
+msgid "No data found"
 msgstr ""
 
-msgid "skipped"
+msgid "The GTFS file was empty."
 msgstr ""
 
-msgid "Public Transport: Disable GTFS"
+msgid "[ID] {0}"
 msgstr ""
 
-msgid "Create Stops from GTFS ..."
+msgid "Route patterns ..."
 msgstr ""
 
-msgid "Create Stops from a GTFS file"
+msgid "Edit Route patterns for public transport"
 msgstr ""
 
-msgid "Select GTFS file (stops.txt)"
+msgid "Route Patterns"
 msgstr ""
 
-msgid "File \"{0}\" does not exist"
+msgid "Overview"
 msgstr ""
 
-msgid "IOException \"{0}\" occurred"
+msgid "Itinerary"
 msgstr ""
 
-msgid ""
-"There exists no dataset. Try to download data from the server or open an OSM "
-"file."
+msgid "Stops"
 msgstr ""
 
-msgid "No data found"
+msgid "Meta"
 msgstr ""
 
-msgid "The GTFS file was empty."
+msgid "Existing route patterns:"
 msgstr ""
 
-msgid "Create Stops from GTFS"
+msgid "Reflect"
 msgstr ""
 
-msgid "GTFS-Stops"
+msgid "Required tags:"
 msgstr ""
 
-msgid "Type of stops to add"
+msgid "Common tags:"
 msgstr ""
 
-msgid "Time on your GPS device"
+msgid "Additional tags:"
 msgstr ""
 
-msgid "HH:MM:SS.sss"
+msgid "Add a new Tag"
 msgstr ""
 
-msgid "Time on your stopwatch"
+msgid "Name/Id"
 msgstr ""
 
-msgid "Time window"
+msgid "Find"
 msgstr ""
 
-msgid "seconds"
+msgid "Show"
 msgstr ""
 
-msgid "Move Threshold"
+msgid "Mark"
 msgstr ""
 
-msgid "Suggest Stops"
+msgid "Ref"
 msgstr ""
 
-msgid "Find"
+msgid "Stops are possible on the"
 msgstr ""
 
-msgid "Show"
+msgid "right hand side"
 msgstr ""
 
-msgid "Mark"
+msgid "left hand side"
 msgstr ""
 
-msgid "Catch"
+msgid "Maximum distance from route"
 msgstr ""
 
-msgid "Join"
+msgid "Suggest Stops"
 msgstr ""
 
-msgid "Public Transport: Join GTFS stops"
+msgid "Create Stops from GPX ..."
 msgstr ""
 
-msgid "State"
+msgid "Create Stops from a GPX file"
 msgstr ""
 
-msgid "[incomplete]"
+msgid "Select GPX file"
 msgstr ""
 
-msgid "[empty way]"
+msgid "The GPX file contained no tracks or waypoints."
 msgstr ""
 
-msgid "[ID] {0}"
+msgid "moved"
 msgstr ""
 
-msgid "[gap]"
+msgid "added"
 msgstr ""
 
-msgid "Route patterns ..."
+msgid "Public Transport: Enable GTFSStops"
 msgstr ""
 
-msgid "Edit Route patterns for public transport"
+msgid "Public Transport: Catch GTFS stops"
 msgstr ""
 
-msgid "Route Patterns"
+msgid "skipped"
 msgstr ""
 
-msgid "Overview"
+msgid "Public Transport: Disable GTFS"
 msgstr ""
 
-msgid "Itinerary"
+msgid "Public Transport: Join GTFS stops"
 msgstr ""
 
-msgid "Stops"
+msgid "Public Transport: Change stop type"
 msgstr ""
 
-msgid "Meta"
+msgid "Public Transport: Add track stop"
 msgstr ""
 
-msgid "Existing route patterns:"
+msgid "Public Transport: Delete track stop"
 msgstr ""
 
-msgid "Reflect"
+msgid "Public Transport: Detach track stop list"
 msgstr ""
 
-msgid "Required tags:"
+msgid "Public Transport: Edit track stop list"
 msgstr ""
 
-msgid "Common tags:"
+msgid "Public Transport: Relocate nodes in track stoplist"
 msgstr ""
 
-msgid "Additional tags:"
+msgid "Public Transport: sort track stop list"
 msgstr ""
 
-msgid "Add a new Tag"
+msgid "Public Transport: Suggest stops"
 msgstr ""
 
-msgid "Name/Id"
+msgid "Public Transport: Detach waypoints"
 msgstr ""
 
-msgid "Ref"
+msgid "Public Transport: Disable waypoints"
 msgstr ""
 
-msgid "Stops are possible on the"
+msgid "Public Transport: Enable waypoints"
 msgstr ""
 
-msgid "right hand side"
+msgid "Public Transport: Edit waypoint name"
 msgstr ""
 
-msgid "left hand side"
+msgid "rail"
 msgstr ""
 
-msgid "Maximum distance from route"
+msgid "Can''t parse a time from this string."
 msgstr ""
 
-msgid " [ID] {0}"
+msgid "Invalid value"
 msgstr ""
 
-msgid "Public Transport: Change stop type"
+msgid "Create Stops from GTFS"
 msgstr ""
 
-msgid "Create Stops from GPX ..."
+msgid "GTFS-Stops"
 msgstr ""
 
-msgid "Create Stops from a GPX file"
+msgid "Type of stops to add"
 msgstr ""
 
-msgid "Select GPX file"
+msgid "Time on your GPS device"
 msgstr ""
 
-msgid "The GPX file contained no tracks or waypoints."
+msgid "HH:MM:SS.sss"
 msgstr ""
 
-msgid "Create Stops from GPX"
+msgid "Time on your stopwatch"
 msgstr ""
 
-msgid "Tracks in this GPX file:"
+msgid "Time window"
 msgstr ""
 
-msgid "Detach"
+msgid "seconds"
 msgstr ""
 
-msgid "implicit"
+msgid "Move Threshold"
 msgstr ""
 
-msgid ""
-"The GPX file doesn''t contain valid trackpoints. Please use a GPX file that "
-"has trackpoints."
+msgid "Catch"
 msgstr ""
 
-msgid "GPX File Trouble"
+msgid "Join"
 msgstr ""
 
-msgid "unnamed"
+msgid "Create Stops from GPX"
 msgstr ""
 
-msgid "Public Transport: Add track stop"
+msgid "Tracks in this GPX file:"
 msgstr ""
 
-msgid "Public Transport: Delete track stop"
+msgid "Detach"
 msgstr ""
 
-msgid "Public Transport: Detach track stop list"
+msgid "implicit"
 msgstr ""
 
-msgid "Public Transport: Edit track stop list"
+msgid "State"
 msgstr ""
 
-msgid "Public Transport: Relocate nodes in track stoplist"
+msgid "[incomplete]"
 msgstr ""
 
-msgid "Public Transport: sort track stop list"
+msgid "[empty way]"
 msgstr ""
 
-msgid "Public Transport: Suggest stops"
+msgid "[gap]"
 msgstr ""
 
 msgid "Stopname"
 msgstr ""
 
-msgid "Public Transport: Detach waypoints"
+msgid " [ID] {0}"
 msgstr ""
 
-msgid "Public Transport: Disable waypoints"
+msgid ""
+"The GPX file doesn''t contain valid trackpoints. Please use a GPX file that "
+"has trackpoints."
 msgstr ""
 
-msgid "Public Transport: Enable waypoints"
+msgid "GPX File Trouble"
 msgstr ""
 
-msgid "Public Transport: Edit waypoint name"
+msgid "unnamed"
 msgstr ""
 
 msgid "Distance between stops"
@@ -33713,6 +33794,9 @@ msgstr ""
 msgid "JOSM Tag Editor Plugin"
 msgstr ""
 
+msgid "Presets"
+msgstr ""
+
 msgid "Abort tag editing and close dialog"
 msgstr ""
 
@@ -35638,6 +35722,26 @@ msgid_plural "Overwrite ''{0}'' tags {1} from {2} with new value ''{3}''?"
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Download from Sophox API"
+msgstr ""
+
+msgid ""
+"Find places of education at least 2km, and at most 3km from the center of "
+"the selection"
+msgstr ""
+
+msgid "Show/hide Sophox snippet list"
+msgstr ""
+
+msgid "help"
+msgstr ""
+
+msgid "Server: "
+msgstr ""
+
+msgid "Wikidata+OSM server"
+msgstr ""
+
 msgid "Search Wikidata items"
 msgstr ""
 
@@ -35711,26 +35815,6 @@ msgid ""
 "objects"
 msgstr ""
 
-msgid "Download from Wikosm API"
-msgstr ""
-
-msgid ""
-"Find places of education at least 2km, and at most 3km from the center of "
-"the selection"
-msgstr ""
-
-msgid "Show/hide Wikosm snippet list"
-msgstr ""
-
-msgid "help"
-msgstr ""
-
-msgid "Server: "
-msgstr ""
-
-msgid "Wikidata+OSM server"
-msgstr ""
-
 msgid "The Ultimate WMS Super-speed Turbo Challenge II"
 msgstr ""
 
diff --git a/i18n/po/mr.po b/i18n/po/mr.po
index 7032310..fde420d 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-10-30 03:38+0100\n"
+"POT-Creation-Date: 2017-11-26 00:06+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-10-30 04:54+0000\n"
-"X-Generator: Launchpad (build 18493)\n"
+"X-Launchpad-Export-Date: 2017-11-26 04:55+0000\n"
+"X-Generator: Launchpad (build 18509)\n"
 "Language: mr\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -428,12 +428,15 @@ msgstr ""
 msgid "Delete the active layer. Does not delete the associated file."
 msgstr ""
 
-msgid "Toggle dialogs panel"
+msgid "Dialogs panel"
 msgstr ""
 
 msgid "Toggle dialogs panel, maximize mapview"
 msgstr ""
 
+msgid "Toggle dialogs panel"
+msgstr ""
+
 msgid "Distribute Nodes"
 msgstr ""
 
@@ -6516,6 +6519,9 @@ msgstr "सहनिर्देशक: "
 msgid "Coordinates (projected): "
 msgstr "सहनिर्देशक (प्रक्षेपित): "
 
+msgid "UTM Zone"
+msgstr ""
+
 msgid "Part of: "
 msgstr ""
 
@@ -8814,6 +8820,11 @@ msgstr ""
 msgid "Check \"Save\" to save the layer to the file specified on the left."
 msgstr ""
 
+msgid ""
+"A background upload is already in progress. Kindly wait for it to finish "
+"before uploading new changes"
+msgstr ""
+
 msgid "I would like someone to review my edits."
 msgstr ""
 
@@ -9922,6 +9933,9 @@ msgstr ""
 msgid "Save Layer"
 msgstr "थर साठवा"
 
+msgid "Trying to set a read only data layer as edit layer"
+msgstr ""
+
 msgid "{0} note"
 msgid_plural "{0} notes"
 msgstr[0] ""
@@ -10762,11 +10776,6 @@ msgstr ""
 msgid "Failed to parse Mappaint styles from ''{0}''. Error was: {1}"
 msgstr ""
 
-msgid ""
-"Detected deprecated ''{0}'' in ''{1}'' which will be removed shortly. Use "
-"''{2}'' instead."
-msgstr ""
-
 msgid "Failed to locate image ''{0}''"
 msgstr ""
 
@@ -11932,6 +11941,9 @@ msgstr ""
 msgid "Show object ID in selection lists"
 msgstr ""
 
+msgid "Show node coordinates in selection lists"
+msgstr ""
+
 msgid "Show localized name in selection lists"
 msgstr ""
 
@@ -12688,9 +12700,6 @@ msgstr ""
 msgid "UTM"
 msgstr ""
 
-msgid "UTM Zone"
-msgstr ""
-
 msgid "North"
 msgstr ""
 
@@ -13158,9 +13167,6 @@ msgstr ""
 msgid "Error parsing {0}: "
 msgstr ""
 
-msgid "Presets"
-msgstr ""
-
 msgid "Search for objects by preset..."
 msgstr ""
 
@@ -15702,6 +15708,18 @@ msgstr ""
 msgid "korean"
 msgstr ""
 
+msgid "donut"
+msgstr ""
+
+msgid "mediterranean"
+msgstr ""
+
+msgid "friture"
+msgstr ""
+
+msgid "crepe"
+msgstr ""
+
 msgid "Internet access"
 msgstr ""
 
@@ -18544,7 +18562,16 @@ msgstr ""
 msgid "Tents allowed"
 msgstr ""
 
-msgid "Camping Site"
+msgid "Campsite"
+msgstr ""
+
+msgid "Caravans allowed"
+msgstr ""
+
+msgid "Backcountry"
+msgstr ""
+
+msgid "Group only access"
 msgstr ""
 
 msgid "Food+Drinks"
@@ -23373,6 +23400,14 @@ msgid ""
 "resolution or better, and refreshed more frequently with ongoing updates."
 msgstr ""
 
+msgid "DigitalGlobe Premium Imagery Vintage"
+msgstr ""
+
+msgid ""
+"Imagery boundaries and capture dates. Labels appear at zoom level 14 and "
+"higher."
+msgstr ""
+
 msgid "DigitalGlobe Standard Imagery"
 msgstr ""
 
@@ -23382,6 +23417,9 @@ msgid ""
 "Landsat. Average age is 2.31 years, with some areas updated 2x per year."
 msgstr ""
 
+msgid "DigitalGlobe Standard Imagery Vintage"
+msgstr ""
+
 msgid "Esri World Imagery"
 msgstr ""
 
@@ -23445,6 +23483,12 @@ msgstr ""
 msgid "Strava cycling and running heatmap"
 msgstr ""
 
+msgid "Strava water sports heatmap"
+msgstr ""
+
+msgid "Strava winter sports heatmap"
+msgstr ""
+
 msgid "Locator Overlay"
 msgstr ""
 
@@ -23849,6 +23893,9 @@ msgstr ""
 msgid "SPW(allonie) most recent aerial imagery"
 msgstr ""
 
+msgid "SPW(allonie) 2016 aerial imagery"
+msgstr ""
+
 msgid "SPW(allonie) 2015 aerial imagery"
 msgstr ""
 
@@ -23894,6 +23941,14 @@ msgstr ""
 msgid "Addresses data from IBGE"
 msgstr ""
 
+msgid "Street names IBGE Salvador-BA"
+msgstr ""
+
+msgid ""
+"Streets geometry and names of Salvador, Bahia. Source: Faces de Logradouro - "
+"IBGE."
+msgstr ""
+
 msgid "Rio Mosaic 2013"
 msgstr ""
 
@@ -24624,6 +24679,9 @@ msgstr ""
 msgid "Japan GSI ortho Imagery"
 msgstr ""
 
+msgid "Japan GSI Standard Map"
+msgstr ""
+
 msgid "imagico.de OSM images for mapping: Aral Sea (low water level)"
 msgstr ""
 
@@ -24653,7 +24711,7 @@ msgstr ""
 msgid "20cm ortho - Latvia - Coastline"
 msgstr ""
 
-msgid "1.cikla ortofotokarte - Latvia"
+msgid "Orthophoto 1st cycle (1994-1999) - Latvia"
 msgstr ""
 
 msgid "ORT10LT (Lithuania)"
@@ -24662,6 +24720,9 @@ msgstr ""
 msgid "geoportail.lu all layers"
 msgstr ""
 
+msgid "geoportail.lu ortho latest"
+msgstr ""
+
 msgid "geoportail.lu ortho 2016"
 msgstr ""
 
@@ -26152,6 +26213,9 @@ msgstr ""
 msgid "{0} on a node. Should be used on a way."
 msgstr ""
 
+msgid "{0} on a node. Should be used on a way or relation."
+msgstr ""
+
 msgid "{0} on a node. Should be drawn as an area."
 msgstr ""
 
@@ -26379,6 +26443,9 @@ msgstr ""
 msgid "Nodes duplicating parent way tags"
 msgstr ""
 
+msgid "{0} together with {1} and {2}. Remove {0}."
+msgstr ""
+
 msgid ""
 "wikipedia tag has no language given, use ''wikipedia''=''language:page "
 "title''"
@@ -27143,6 +27210,21 @@ msgstr ""
 msgid "Importing..."
 msgstr ""
 
+msgid "Shape is started incorrectly"
+msgstr ""
+
+msgid "Can''t load SVG diagram"
+msgstr ""
+
+msgid "Can''t find root SVG element"
+msgstr ""
+
+msgid "Import primitives"
+msgstr ""
+
+msgid "Cannot find configuration file!"
+msgstr ""
+
 msgid "DXF files [ImportDxf plugin] (*.dxf)"
 msgstr ""
 
@@ -27782,6 +27864,9 @@ msgstr ""
 msgid "Download mode"
 msgstr ""
 
+msgid "Number of images to be pre-fetched (forwards and backwards)"
+msgstr ""
+
 msgid "You are logged in as ''{0}''."
 msgstr ""
 
@@ -27992,8 +28077,17 @@ msgid "only when manually requested"
 msgstr ""
 
 msgid ""
-"The downloaded OSM area is too big. Download mode has been changed to OSM "
-"area until the layer is restarted."
+"The Mapillary layer has stopped downloading images, because the requested "
+"area is too big!"
+msgstr ""
+
+msgid ""
+"To solve this problem, you could zoom in and load a smaller area of the map."
+msgstr ""
+
+msgid ""
+"To solve this problem, you could switch to download mode ''{0}'' and load "
+"Mapillary images for a smaller portion of the map."
 msgstr ""
 
 msgid "Downloading"
@@ -31305,19 +31399,6 @@ msgstr ""
 msgid "Merge Overlap (combine)"
 msgstr ""
 
-msgid ""
-"<html>A role based relation membership was copied to all new ways.<br>You "
-"should verify this and correct it when necessary.</html>"
-msgstr ""
-
-msgid ""
-"<html>A relation membership was copied to all new ways.<br>You should verify "
-"this and correct it when necessary.</html>"
-msgstr ""
-
-msgid "Split way"
-msgstr ""
-
 msgid "Michigan Left"
 msgstr ""
 
@@ -32772,254 +32853,254 @@ msgstr ""
 msgid "PT: Route passes a oneway road in the wrong direction"
 msgstr ""
 
-msgid "moved"
+msgid "Create Stops from GTFS ..."
 msgstr ""
 
-msgid "rail"
+msgid "Create Stops from a GTFS file"
 msgstr ""
 
-msgid "Can''t parse a time from this string."
+msgid "Select GTFS file (stops.txt)"
 msgstr ""
 
-msgid "Invalid value"
+msgid "File \"{0}\" does not exist"
 msgstr ""
 
-msgid "added"
+msgid "IOException \"{0}\" occurred"
 msgstr ""
 
-msgid "Public Transport: Enable GTFSStops"
+msgid ""
+"There exists no dataset. Try to download data from the server or open an OSM "
+"file."
 msgstr ""
 
-msgid "Public Transport: Catch GTFS stops"
+msgid "No data found"
 msgstr ""
 
-msgid "skipped"
+msgid "The GTFS file was empty."
 msgstr ""
 
-msgid "Public Transport: Disable GTFS"
+msgid "[ID] {0}"
 msgstr ""
 
-msgid "Create Stops from GTFS ..."
+msgid "Route patterns ..."
 msgstr ""
 
-msgid "Create Stops from a GTFS file"
+msgid "Edit Route patterns for public transport"
 msgstr ""
 
-msgid "Select GTFS file (stops.txt)"
+msgid "Route Patterns"
 msgstr ""
 
-msgid "File \"{0}\" does not exist"
+msgid "Overview"
 msgstr ""
 
-msgid "IOException \"{0}\" occurred"
+msgid "Itinerary"
 msgstr ""
 
-msgid ""
-"There exists no dataset. Try to download data from the server or open an OSM "
-"file."
+msgid "Stops"
 msgstr ""
 
-msgid "No data found"
+msgid "Meta"
 msgstr ""
 
-msgid "The GTFS file was empty."
+msgid "Existing route patterns:"
 msgstr ""
 
-msgid "Create Stops from GTFS"
+msgid "Reflect"
 msgstr ""
 
-msgid "GTFS-Stops"
+msgid "Required tags:"
 msgstr ""
 
-msgid "Type of stops to add"
+msgid "Common tags:"
 msgstr ""
 
-msgid "Time on your GPS device"
+msgid "Additional tags:"
 msgstr ""
 
-msgid "HH:MM:SS.sss"
+msgid "Add a new Tag"
 msgstr ""
 
-msgid "Time on your stopwatch"
+msgid "Name/Id"
 msgstr ""
 
-msgid "Time window"
+msgid "Find"
 msgstr ""
 
-msgid "seconds"
+msgid "Show"
 msgstr ""
 
-msgid "Move Threshold"
+msgid "Mark"
 msgstr ""
 
-msgid "Suggest Stops"
+msgid "Ref"
 msgstr ""
 
-msgid "Find"
+msgid "Stops are possible on the"
 msgstr ""
 
-msgid "Show"
+msgid "right hand side"
 msgstr ""
 
-msgid "Mark"
+msgid "left hand side"
 msgstr ""
 
-msgid "Catch"
+msgid "Maximum distance from route"
 msgstr ""
 
-msgid "Join"
+msgid "Suggest Stops"
 msgstr ""
 
-msgid "Public Transport: Join GTFS stops"
+msgid "Create Stops from GPX ..."
 msgstr ""
 
-msgid "State"
+msgid "Create Stops from a GPX file"
 msgstr ""
 
-msgid "[incomplete]"
+msgid "Select GPX file"
 msgstr ""
 
-msgid "[empty way]"
+msgid "The GPX file contained no tracks or waypoints."
 msgstr ""
 
-msgid "[ID] {0}"
+msgid "moved"
 msgstr ""
 
-msgid "[gap]"
+msgid "added"
 msgstr ""
 
-msgid "Route patterns ..."
+msgid "Public Transport: Enable GTFSStops"
 msgstr ""
 
-msgid "Edit Route patterns for public transport"
+msgid "Public Transport: Catch GTFS stops"
 msgstr ""
 
-msgid "Route Patterns"
+msgid "skipped"
 msgstr ""
 
-msgid "Overview"
+msgid "Public Transport: Disable GTFS"
 msgstr ""
 
-msgid "Itinerary"
+msgid "Public Transport: Join GTFS stops"
 msgstr ""
 
-msgid "Stops"
+msgid "Public Transport: Change stop type"
 msgstr ""
 
-msgid "Meta"
+msgid "Public Transport: Add track stop"
 msgstr ""
 
-msgid "Existing route patterns:"
+msgid "Public Transport: Delete track stop"
 msgstr ""
 
-msgid "Reflect"
+msgid "Public Transport: Detach track stop list"
 msgstr ""
 
-msgid "Required tags:"
+msgid "Public Transport: Edit track stop list"
 msgstr ""
 
-msgid "Common tags:"
+msgid "Public Transport: Relocate nodes in track stoplist"
 msgstr ""
 
-msgid "Additional tags:"
+msgid "Public Transport: sort track stop list"
 msgstr ""
 
-msgid "Add a new Tag"
+msgid "Public Transport: Suggest stops"
 msgstr ""
 
-msgid "Name/Id"
+msgid "Public Transport: Detach waypoints"
 msgstr ""
 
-msgid "Ref"
+msgid "Public Transport: Disable waypoints"
 msgstr ""
 
-msgid "Stops are possible on the"
+msgid "Public Transport: Enable waypoints"
 msgstr ""
 
-msgid "right hand side"
+msgid "Public Transport: Edit waypoint name"
 msgstr ""
 
-msgid "left hand side"
+msgid "rail"
 msgstr ""
 
-msgid "Maximum distance from route"
+msgid "Can''t parse a time from this string."
 msgstr ""
 
-msgid " [ID] {0}"
+msgid "Invalid value"
 msgstr ""
 
-msgid "Public Transport: Change stop type"
+msgid "Create Stops from GTFS"
 msgstr ""
 
-msgid "Create Stops from GPX ..."
+msgid "GTFS-Stops"
 msgstr ""
 
-msgid "Create Stops from a GPX file"
+msgid "Type of stops to add"
 msgstr ""
 
-msgid "Select GPX file"
+msgid "Time on your GPS device"
 msgstr ""
 
-msgid "The GPX file contained no tracks or waypoints."
+msgid "HH:MM:SS.sss"
 msgstr ""
 
-msgid "Create Stops from GPX"
+msgid "Time on your stopwatch"
 msgstr ""
 
-msgid "Tracks in this GPX file:"
+msgid "Time window"
 msgstr ""
 
-msgid "Detach"
+msgid "seconds"
 msgstr ""
 
-msgid "implicit"
+msgid "Move Threshold"
 msgstr ""
 
-msgid ""
-"The GPX file doesn''t contain valid trackpoints. Please use a GPX file that "
-"has trackpoints."
+msgid "Catch"
 msgstr ""
 
-msgid "GPX File Trouble"
+msgid "Join"
 msgstr ""
 
-msgid "unnamed"
+msgid "Create Stops from GPX"
 msgstr ""
 
-msgid "Public Transport: Add track stop"
+msgid "Tracks in this GPX file:"
 msgstr ""
 
-msgid "Public Transport: Delete track stop"
+msgid "Detach"
 msgstr ""
 
-msgid "Public Transport: Detach track stop list"
+msgid "implicit"
 msgstr ""
 
-msgid "Public Transport: Edit track stop list"
+msgid "State"
 msgstr ""
 
-msgid "Public Transport: Relocate nodes in track stoplist"
+msgid "[incomplete]"
 msgstr ""
 
-msgid "Public Transport: sort track stop list"
+msgid "[empty way]"
 msgstr ""
 
-msgid "Public Transport: Suggest stops"
+msgid "[gap]"
 msgstr ""
 
 msgid "Stopname"
 msgstr ""
 
-msgid "Public Transport: Detach waypoints"
+msgid " [ID] {0}"
 msgstr ""
 
-msgid "Public Transport: Disable waypoints"
+msgid ""
+"The GPX file doesn''t contain valid trackpoints. Please use a GPX file that "
+"has trackpoints."
 msgstr ""
 
-msgid "Public Transport: Enable waypoints"
+msgid "GPX File Trouble"
 msgstr ""
 
-msgid "Public Transport: Edit waypoint name"
+msgid "unnamed"
 msgstr ""
 
 msgid "Distance between stops"
@@ -33748,6 +33829,9 @@ msgstr ""
 msgid "JOSM Tag Editor Plugin"
 msgstr ""
 
+msgid "Presets"
+msgstr ""
+
 msgid "Abort tag editing and close dialog"
 msgstr ""
 
@@ -35673,6 +35757,26 @@ msgid_plural "Overwrite ''{0}'' tags {1} from {2} with new value ''{3}''?"
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Download from Sophox API"
+msgstr ""
+
+msgid ""
+"Find places of education at least 2km, and at most 3km from the center of "
+"the selection"
+msgstr ""
+
+msgid "Show/hide Sophox snippet list"
+msgstr ""
+
+msgid "help"
+msgstr ""
+
+msgid "Server: "
+msgstr ""
+
+msgid "Wikidata+OSM server"
+msgstr ""
+
 msgid "Search Wikidata items"
 msgstr ""
 
@@ -35746,26 +35850,6 @@ msgid ""
 "objects"
 msgstr ""
 
-msgid "Download from Wikosm API"
-msgstr ""
-
-msgid ""
-"Find places of education at least 2km, and at most 3km from the center of "
-"the selection"
-msgstr ""
-
-msgid "Show/hide Wikosm snippet list"
-msgstr ""
-
-msgid "help"
-msgstr ""
-
-msgid "Server: "
-msgstr ""
-
-msgid "Wikidata+OSM server"
-msgstr ""
-
 msgid "The Ultimate WMS Super-speed Turbo Challenge II"
 msgstr ""
 
diff --git a/i18n/po/ms.po b/i18n/po/ms.po
index c5f01c1..ebdca3f 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-10-30 03:38+0100\n"
+"POT-Creation-Date: 2017-11-26 00:06+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-10-30 04:54+0000\n"
-"X-Generator: Launchpad (build 18493)\n"
+"X-Launchpad-Export-Date: 2017-11-26 04:56+0000\n"
+"X-Generator: Launchpad (build 18509)\n"
 "Language: ms\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -421,12 +421,15 @@ msgstr ""
 msgid "Delete the active layer. Does not delete the associated file."
 msgstr ""
 
-msgid "Toggle dialogs panel"
+msgid "Dialogs panel"
 msgstr ""
 
 msgid "Toggle dialogs panel, maximize mapview"
 msgstr ""
 
+msgid "Toggle dialogs panel"
+msgstr ""
+
 msgid "Distribute Nodes"
 msgstr ""
 
@@ -6488,6 +6491,9 @@ msgstr ""
 msgid "Coordinates (projected): "
 msgstr ""
 
+msgid "UTM Zone"
+msgstr ""
+
 msgid "Part of: "
 msgstr ""
 
@@ -8786,6 +8792,11 @@ msgstr ""
 msgid "Check \"Save\" to save the layer to the file specified on the left."
 msgstr ""
 
+msgid ""
+"A background upload is already in progress. Kindly wait for it to finish "
+"before uploading new changes"
+msgstr ""
+
 msgid "I would like someone to review my edits."
 msgstr ""
 
@@ -9894,6 +9905,9 @@ msgstr ""
 msgid "Save Layer"
 msgstr ""
 
+msgid "Trying to set a read only data layer as edit layer"
+msgstr ""
+
 msgid "{0} note"
 msgid_plural "{0} notes"
 msgstr[0] ""
@@ -10724,11 +10738,6 @@ msgstr ""
 msgid "Failed to parse Mappaint styles from ''{0}''. Error was: {1}"
 msgstr ""
 
-msgid ""
-"Detected deprecated ''{0}'' in ''{1}'' which will be removed shortly. Use "
-"''{2}'' instead."
-msgstr ""
-
 msgid "Failed to locate image ''{0}''"
 msgstr ""
 
@@ -11893,6 +11902,9 @@ msgstr ""
 msgid "Show object ID in selection lists"
 msgstr ""
 
+msgid "Show node coordinates in selection lists"
+msgstr ""
+
 msgid "Show localized name in selection lists"
 msgstr ""
 
@@ -12649,9 +12661,6 @@ msgstr ""
 msgid "UTM"
 msgstr ""
 
-msgid "UTM Zone"
-msgstr ""
-
 msgid "North"
 msgstr ""
 
@@ -13119,9 +13128,6 @@ msgstr ""
 msgid "Error parsing {0}: "
 msgstr ""
 
-msgid "Presets"
-msgstr ""
-
 msgid "Search for objects by preset..."
 msgstr ""
 
@@ -15663,6 +15669,18 @@ msgstr ""
 msgid "korean"
 msgstr ""
 
+msgid "donut"
+msgstr ""
+
+msgid "mediterranean"
+msgstr ""
+
+msgid "friture"
+msgstr ""
+
+msgid "crepe"
+msgstr ""
+
 msgid "Internet access"
 msgstr ""
 
@@ -18505,7 +18523,16 @@ msgstr ""
 msgid "Tents allowed"
 msgstr ""
 
-msgid "Camping Site"
+msgid "Campsite"
+msgstr ""
+
+msgid "Caravans allowed"
+msgstr ""
+
+msgid "Backcountry"
+msgstr ""
+
+msgid "Group only access"
 msgstr ""
 
 msgid "Food+Drinks"
@@ -23334,6 +23361,14 @@ msgid ""
 "resolution or better, and refreshed more frequently with ongoing updates."
 msgstr ""
 
+msgid "DigitalGlobe Premium Imagery Vintage"
+msgstr ""
+
+msgid ""
+"Imagery boundaries and capture dates. Labels appear at zoom level 14 and "
+"higher."
+msgstr ""
+
 msgid "DigitalGlobe Standard Imagery"
 msgstr ""
 
@@ -23343,6 +23378,9 @@ msgid ""
 "Landsat. Average age is 2.31 years, with some areas updated 2x per year."
 msgstr ""
 
+msgid "DigitalGlobe Standard Imagery Vintage"
+msgstr ""
+
 msgid "Esri World Imagery"
 msgstr ""
 
@@ -23406,6 +23444,12 @@ msgstr ""
 msgid "Strava cycling and running heatmap"
 msgstr ""
 
+msgid "Strava water sports heatmap"
+msgstr ""
+
+msgid "Strava winter sports heatmap"
+msgstr ""
+
 msgid "Locator Overlay"
 msgstr ""
 
@@ -23810,6 +23854,9 @@ msgstr ""
 msgid "SPW(allonie) most recent aerial imagery"
 msgstr ""
 
+msgid "SPW(allonie) 2016 aerial imagery"
+msgstr ""
+
 msgid "SPW(allonie) 2015 aerial imagery"
 msgstr ""
 
@@ -23855,6 +23902,14 @@ msgstr ""
 msgid "Addresses data from IBGE"
 msgstr ""
 
+msgid "Street names IBGE Salvador-BA"
+msgstr ""
+
+msgid ""
+"Streets geometry and names of Salvador, Bahia. Source: Faces de Logradouro - "
+"IBGE."
+msgstr ""
+
 msgid "Rio Mosaic 2013"
 msgstr ""
 
@@ -24585,6 +24640,9 @@ msgstr ""
 msgid "Japan GSI ortho Imagery"
 msgstr ""
 
+msgid "Japan GSI Standard Map"
+msgstr ""
+
 msgid "imagico.de OSM images for mapping: Aral Sea (low water level)"
 msgstr ""
 
@@ -24614,7 +24672,7 @@ msgstr ""
 msgid "20cm ortho - Latvia - Coastline"
 msgstr ""
 
-msgid "1.cikla ortofotokarte - Latvia"
+msgid "Orthophoto 1st cycle (1994-1999) - Latvia"
 msgstr ""
 
 msgid "ORT10LT (Lithuania)"
@@ -24623,6 +24681,9 @@ msgstr ""
 msgid "geoportail.lu all layers"
 msgstr ""
 
+msgid "geoportail.lu ortho latest"
+msgstr ""
+
 msgid "geoportail.lu ortho 2016"
 msgstr ""
 
@@ -26113,6 +26174,9 @@ msgstr ""
 msgid "{0} on a node. Should be used on a way."
 msgstr ""
 
+msgid "{0} on a node. Should be used on a way or relation."
+msgstr ""
+
 msgid "{0} on a node. Should be drawn as an area."
 msgstr ""
 
@@ -26340,6 +26404,9 @@ msgstr ""
 msgid "Nodes duplicating parent way tags"
 msgstr ""
 
+msgid "{0} together with {1} and {2}. Remove {0}."
+msgstr ""
+
 msgid ""
 "wikipedia tag has no language given, use ''wikipedia''=''language:page "
 "title''"
@@ -27104,6 +27171,21 @@ msgstr ""
 msgid "Importing..."
 msgstr ""
 
+msgid "Shape is started incorrectly"
+msgstr ""
+
+msgid "Can''t load SVG diagram"
+msgstr ""
+
+msgid "Can''t find root SVG element"
+msgstr ""
+
+msgid "Import primitives"
+msgstr ""
+
+msgid "Cannot find configuration file!"
+msgstr ""
+
 msgid "DXF files [ImportDxf plugin] (*.dxf)"
 msgstr ""
 
@@ -27743,6 +27825,9 @@ msgstr ""
 msgid "Download mode"
 msgstr ""
 
+msgid "Number of images to be pre-fetched (forwards and backwards)"
+msgstr ""
+
 msgid "You are logged in as ''{0}''."
 msgstr ""
 
@@ -27953,8 +28038,17 @@ msgid "only when manually requested"
 msgstr ""
 
 msgid ""
-"The downloaded OSM area is too big. Download mode has been changed to OSM "
-"area until the layer is restarted."
+"The Mapillary layer has stopped downloading images, because the requested "
+"area is too big!"
+msgstr ""
+
+msgid ""
+"To solve this problem, you could zoom in and load a smaller area of the map."
+msgstr ""
+
+msgid ""
+"To solve this problem, you could switch to download mode ''{0}'' and load "
+"Mapillary images for a smaller portion of the map."
 msgstr ""
 
 msgid "Downloading"
@@ -31266,19 +31360,6 @@ msgstr ""
 msgid "Merge Overlap (combine)"
 msgstr ""
 
-msgid ""
-"<html>A role based relation membership was copied to all new ways.<br>You "
-"should verify this and correct it when necessary.</html>"
-msgstr ""
-
-msgid ""
-"<html>A relation membership was copied to all new ways.<br>You should verify "
-"this and correct it when necessary.</html>"
-msgstr ""
-
-msgid "Split way"
-msgstr ""
-
 msgid "Michigan Left"
 msgstr ""
 
@@ -32733,254 +32814,254 @@ msgstr ""
 msgid "PT: Route passes a oneway road in the wrong direction"
 msgstr ""
 
-msgid "moved"
+msgid "Create Stops from GTFS ..."
 msgstr ""
 
-msgid "rail"
+msgid "Create Stops from a GTFS file"
 msgstr ""
 
-msgid "Can''t parse a time from this string."
+msgid "Select GTFS file (stops.txt)"
 msgstr ""
 
-msgid "Invalid value"
+msgid "File \"{0}\" does not exist"
 msgstr ""
 
-msgid "added"
+msgid "IOException \"{0}\" occurred"
 msgstr ""
 
-msgid "Public Transport: Enable GTFSStops"
+msgid ""
+"There exists no dataset. Try to download data from the server or open an OSM "
+"file."
 msgstr ""
 
-msgid "Public Transport: Catch GTFS stops"
+msgid "No data found"
 msgstr ""
 
-msgid "skipped"
+msgid "The GTFS file was empty."
 msgstr ""
 
-msgid "Public Transport: Disable GTFS"
+msgid "[ID] {0}"
 msgstr ""
 
-msgid "Create Stops from GTFS ..."
+msgid "Route patterns ..."
 msgstr ""
 
-msgid "Create Stops from a GTFS file"
+msgid "Edit Route patterns for public transport"
 msgstr ""
 
-msgid "Select GTFS file (stops.txt)"
+msgid "Route Patterns"
 msgstr ""
 
-msgid "File \"{0}\" does not exist"
+msgid "Overview"
 msgstr ""
 
-msgid "IOException \"{0}\" occurred"
+msgid "Itinerary"
 msgstr ""
 
-msgid ""
-"There exists no dataset. Try to download data from the server or open an OSM "
-"file."
+msgid "Stops"
 msgstr ""
 
-msgid "No data found"
+msgid "Meta"
 msgstr ""
 
-msgid "The GTFS file was empty."
+msgid "Existing route patterns:"
 msgstr ""
 
-msgid "Create Stops from GTFS"
+msgid "Reflect"
 msgstr ""
 
-msgid "GTFS-Stops"
+msgid "Required tags:"
 msgstr ""
 
-msgid "Type of stops to add"
+msgid "Common tags:"
 msgstr ""
 
-msgid "Time on your GPS device"
+msgid "Additional tags:"
 msgstr ""
 
-msgid "HH:MM:SS.sss"
+msgid "Add a new Tag"
 msgstr ""
 
-msgid "Time on your stopwatch"
+msgid "Name/Id"
 msgstr ""
 
-msgid "Time window"
+msgid "Find"
 msgstr ""
 
-msgid "seconds"
+msgid "Show"
 msgstr ""
 
-msgid "Move Threshold"
+msgid "Mark"
 msgstr ""
 
-msgid "Suggest Stops"
+msgid "Ref"
 msgstr ""
 
-msgid "Find"
+msgid "Stops are possible on the"
 msgstr ""
 
-msgid "Show"
+msgid "right hand side"
 msgstr ""
 
-msgid "Mark"
+msgid "left hand side"
 msgstr ""
 
-msgid "Catch"
+msgid "Maximum distance from route"
 msgstr ""
 
-msgid "Join"
+msgid "Suggest Stops"
 msgstr ""
 
-msgid "Public Transport: Join GTFS stops"
+msgid "Create Stops from GPX ..."
 msgstr ""
 
-msgid "State"
+msgid "Create Stops from a GPX file"
 msgstr ""
 
-msgid "[incomplete]"
+msgid "Select GPX file"
 msgstr ""
 
-msgid "[empty way]"
+msgid "The GPX file contained no tracks or waypoints."
 msgstr ""
 
-msgid "[ID] {0}"
+msgid "moved"
 msgstr ""
 
-msgid "[gap]"
+msgid "added"
 msgstr ""
 
-msgid "Route patterns ..."
+msgid "Public Transport: Enable GTFSStops"
 msgstr ""
 
-msgid "Edit Route patterns for public transport"
+msgid "Public Transport: Catch GTFS stops"
 msgstr ""
 
-msgid "Route Patterns"
+msgid "skipped"
 msgstr ""
 
-msgid "Overview"
+msgid "Public Transport: Disable GTFS"
 msgstr ""
 
-msgid "Itinerary"
+msgid "Public Transport: Join GTFS stops"
 msgstr ""
 
-msgid "Stops"
+msgid "Public Transport: Change stop type"
 msgstr ""
 
-msgid "Meta"
+msgid "Public Transport: Add track stop"
 msgstr ""
 
-msgid "Existing route patterns:"
+msgid "Public Transport: Delete track stop"
 msgstr ""
 
-msgid "Reflect"
+msgid "Public Transport: Detach track stop list"
 msgstr ""
 
-msgid "Required tags:"
+msgid "Public Transport: Edit track stop list"
 msgstr ""
 
-msgid "Common tags:"
+msgid "Public Transport: Relocate nodes in track stoplist"
 msgstr ""
 
-msgid "Additional tags:"
+msgid "Public Transport: sort track stop list"
 msgstr ""
 
-msgid "Add a new Tag"
+msgid "Public Transport: Suggest stops"
 msgstr ""
 
-msgid "Name/Id"
+msgid "Public Transport: Detach waypoints"
 msgstr ""
 
-msgid "Ref"
+msgid "Public Transport: Disable waypoints"
 msgstr ""
 
-msgid "Stops are possible on the"
+msgid "Public Transport: Enable waypoints"
 msgstr ""
 
-msgid "right hand side"
+msgid "Public Transport: Edit waypoint name"
 msgstr ""
 
-msgid "left hand side"
+msgid "rail"
 msgstr ""
 
-msgid "Maximum distance from route"
+msgid "Can''t parse a time from this string."
 msgstr ""
 
-msgid " [ID] {0}"
+msgid "Invalid value"
 msgstr ""
 
-msgid "Public Transport: Change stop type"
+msgid "Create Stops from GTFS"
 msgstr ""
 
-msgid "Create Stops from GPX ..."
+msgid "GTFS-Stops"
 msgstr ""
 
-msgid "Create Stops from a GPX file"
+msgid "Type of stops to add"
 msgstr ""
 
-msgid "Select GPX file"
+msgid "Time on your GPS device"
 msgstr ""
 
-msgid "The GPX file contained no tracks or waypoints."
+msgid "HH:MM:SS.sss"
 msgstr ""
 
-msgid "Create Stops from GPX"
+msgid "Time on your stopwatch"
 msgstr ""
 
-msgid "Tracks in this GPX file:"
+msgid "Time window"
 msgstr ""
 
-msgid "Detach"
+msgid "seconds"
 msgstr ""
 
-msgid "implicit"
+msgid "Move Threshold"
 msgstr ""
 
-msgid ""
-"The GPX file doesn''t contain valid trackpoints. Please use a GPX file that "
-"has trackpoints."
+msgid "Catch"
 msgstr ""
 
-msgid "GPX File Trouble"
+msgid "Join"
 msgstr ""
 
-msgid "unnamed"
+msgid "Create Stops from GPX"
 msgstr ""
 
-msgid "Public Transport: Add track stop"
+msgid "Tracks in this GPX file:"
 msgstr ""
 
-msgid "Public Transport: Delete track stop"
+msgid "Detach"
 msgstr ""
 
-msgid "Public Transport: Detach track stop list"
+msgid "implicit"
 msgstr ""
 
-msgid "Public Transport: Edit track stop list"
+msgid "State"
 msgstr ""
 
-msgid "Public Transport: Relocate nodes in track stoplist"
+msgid "[incomplete]"
 msgstr ""
 
-msgid "Public Transport: sort track stop list"
+msgid "[empty way]"
 msgstr ""
 
-msgid "Public Transport: Suggest stops"
+msgid "[gap]"
 msgstr ""
 
 msgid "Stopname"
 msgstr ""
 
-msgid "Public Transport: Detach waypoints"
+msgid " [ID] {0}"
 msgstr ""
 
-msgid "Public Transport: Disable waypoints"
+msgid ""
+"The GPX file doesn''t contain valid trackpoints. Please use a GPX file that "
+"has trackpoints."
 msgstr ""
 
-msgid "Public Transport: Enable waypoints"
+msgid "GPX File Trouble"
 msgstr ""
 
-msgid "Public Transport: Edit waypoint name"
+msgid "unnamed"
 msgstr ""
 
 msgid "Distance between stops"
@@ -33709,6 +33790,9 @@ msgstr ""
 msgid "JOSM Tag Editor Plugin"
 msgstr ""
 
+msgid "Presets"
+msgstr ""
+
 msgid "Abort tag editing and close dialog"
 msgstr ""
 
@@ -35634,6 +35718,26 @@ msgid_plural "Overwrite ''{0}'' tags {1} from {2} with new value ''{3}''?"
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Download from Sophox API"
+msgstr ""
+
+msgid ""
+"Find places of education at least 2km, and at most 3km from the center of "
+"the selection"
+msgstr ""
+
+msgid "Show/hide Sophox snippet list"
+msgstr ""
+
+msgid "help"
+msgstr ""
+
+msgid "Server: "
+msgstr ""
+
+msgid "Wikidata+OSM server"
+msgstr ""
+
 msgid "Search Wikidata items"
 msgstr ""
 
@@ -35707,26 +35811,6 @@ msgid ""
 "objects"
 msgstr ""
 
-msgid "Download from Wikosm API"
-msgstr ""
-
-msgid ""
-"Find places of education at least 2km, and at most 3km from the center of "
-"the selection"
-msgstr ""
-
-msgid "Show/hide Wikosm snippet list"
-msgstr ""
-
-msgid "help"
-msgstr ""
-
-msgid "Server: "
-msgstr ""
-
-msgid "Wikidata+OSM server"
-msgstr ""
-
 msgid "The Ultimate WMS Super-speed Turbo Challenge II"
 msgstr ""
 
diff --git a/i18n/po/nb.po b/i18n/po/nb.po
index f2aa731..b253935 100644
--- a/i18n/po/nb.po
+++ b/i18n/po/nb.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: josm\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2017-10-30 03:38+0100\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"
 "Language-Team: Norwegian Bokmal <nb 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-10-30 04:56+0000\n"
-"X-Generator: Launchpad (build 18493)\n"
+"X-Launchpad-Export-Date: 2017-11-26 04:57+0000\n"
+"X-Generator: Launchpad (build 18509)\n"
 "Language: nb\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -448,13 +448,16 @@ msgstr "Fjern lag"
 msgid "Delete the active layer. Does not delete the associated file."
 msgstr "Fjern det aktive laget. Sletter ikke den tilknyttede kildefilen."
 
-msgid "Toggle dialogs panel"
-msgstr "Slå dialogpanelet av/på"
+msgid "Dialogs panel"
+msgstr ""
 
 msgid "Toggle dialogs panel, maximize mapview"
 msgstr ""
 "Veksler mellom å vise dialogpanelet, for å kunne maksimere kartvisningen"
 
+msgid "Toggle dialogs panel"
+msgstr "Slå dialogpanelet av/på"
+
 msgid "Distribute Nodes"
 msgstr "Fordel Noder"
 
@@ -6638,6 +6641,9 @@ msgstr ""
 msgid "Coordinates (projected): "
 msgstr ""
 
+msgid "UTM Zone"
+msgstr ""
+
 msgid "Part of: "
 msgstr ""
 
@@ -8959,6 +8965,11 @@ msgstr ""
 msgid "Check \"Save\" to save the layer to the file specified on the left."
 msgstr ""
 
+msgid ""
+"A background upload is already in progress. Kindly wait for it to finish "
+"before uploading new changes"
+msgstr ""
+
 msgid "I would like someone to review my edits."
 msgstr ""
 
@@ -10080,6 +10091,9 @@ msgstr ""
 msgid "Save Layer"
 msgstr "Lagre lag"
 
+msgid "Trying to set a read only data layer as edit layer"
+msgstr ""
+
 msgid "{0} note"
 msgid_plural "{0} notes"
 msgstr[0] ""
@@ -10932,11 +10946,6 @@ msgstr ""
 msgid "Failed to parse Mappaint styles from ''{0}''. Error was: {1}"
 msgstr ""
 
-msgid ""
-"Detected deprecated ''{0}'' in ''{1}'' which will be removed shortly. Use "
-"''{2}'' instead."
-msgstr ""
-
 msgid "Failed to locate image ''{0}''"
 msgstr ""
 
@@ -12123,6 +12132,9 @@ msgstr "Vis oppstartsskjerm"
 msgid "Show object ID in selection lists"
 msgstr "Vis objekt-ID i lister"
 
+msgid "Show node coordinates in selection lists"
+msgstr ""
+
 msgid "Show localized name in selection lists"
 msgstr ""
 
@@ -12879,9 +12891,6 @@ msgstr ""
 msgid "UTM"
 msgstr ""
 
-msgid "UTM Zone"
-msgstr ""
-
 msgid "North"
 msgstr ""
 
@@ -13352,9 +13361,6 @@ msgstr ""
 msgid "Error parsing {0}: "
 msgstr "Feil ved lesing av {0}: "
 
-msgid "Presets"
-msgstr "Objektmaler"
-
 msgid "Search for objects by preset..."
 msgstr ""
 
@@ -15918,6 +15924,18 @@ msgstr ""
 msgid "korean"
 msgstr ""
 
+msgid "donut"
+msgstr ""
+
+msgid "mediterranean"
+msgstr ""
+
+msgid "friture"
+msgstr ""
+
+msgid "crepe"
+msgstr ""
+
 msgid "Internet access"
 msgstr ""
 
@@ -18760,8 +18778,17 @@ msgstr ""
 msgid "Tents allowed"
 msgstr ""
 
-msgid "Camping Site"
-msgstr "Campingplass"
+msgid "Campsite"
+msgstr ""
+
+msgid "Caravans allowed"
+msgstr ""
+
+msgid "Backcountry"
+msgstr ""
+
+msgid "Group only access"
+msgstr ""
 
 msgid "Food+Drinks"
 msgstr "Mat og drikke"
@@ -23593,6 +23620,14 @@ msgid ""
 "resolution or better, and refreshed more frequently with ongoing updates."
 msgstr ""
 
+msgid "DigitalGlobe Premium Imagery Vintage"
+msgstr ""
+
+msgid ""
+"Imagery boundaries and capture dates. Labels appear at zoom level 14 and "
+"higher."
+msgstr ""
+
 msgid "DigitalGlobe Standard Imagery"
 msgstr ""
 
@@ -23602,6 +23637,9 @@ msgid ""
 "Landsat. Average age is 2.31 years, with some areas updated 2x per year."
 msgstr ""
 
+msgid "DigitalGlobe Standard Imagery Vintage"
+msgstr ""
+
 msgid "Esri World Imagery"
 msgstr ""
 
@@ -23665,6 +23703,12 @@ msgstr ""
 msgid "Strava cycling and running heatmap"
 msgstr ""
 
+msgid "Strava water sports heatmap"
+msgstr ""
+
+msgid "Strava winter sports heatmap"
+msgstr ""
+
 msgid "Locator Overlay"
 msgstr ""
 
@@ -24069,6 +24113,9 @@ msgstr ""
 msgid "SPW(allonie) most recent aerial imagery"
 msgstr ""
 
+msgid "SPW(allonie) 2016 aerial imagery"
+msgstr ""
+
 msgid "SPW(allonie) 2015 aerial imagery"
 msgstr ""
 
@@ -24114,6 +24161,14 @@ msgstr ""
 msgid "Addresses data from IBGE"
 msgstr ""
 
+msgid "Street names IBGE Salvador-BA"
+msgstr ""
+
+msgid ""
+"Streets geometry and names of Salvador, Bahia. Source: Faces de Logradouro - "
+"IBGE."
+msgstr ""
+
 msgid "Rio Mosaic 2013"
 msgstr ""
 
@@ -24844,6 +24899,9 @@ msgstr ""
 msgid "Japan GSI ortho Imagery"
 msgstr ""
 
+msgid "Japan GSI Standard Map"
+msgstr ""
+
 msgid "imagico.de OSM images for mapping: Aral Sea (low water level)"
 msgstr ""
 
@@ -24873,7 +24931,7 @@ msgstr ""
 msgid "20cm ortho - Latvia - Coastline"
 msgstr ""
 
-msgid "1.cikla ortofotokarte - Latvia"
+msgid "Orthophoto 1st cycle (1994-1999) - Latvia"
 msgstr ""
 
 msgid "ORT10LT (Lithuania)"
@@ -24882,6 +24940,9 @@ msgstr ""
 msgid "geoportail.lu all layers"
 msgstr ""
 
+msgid "geoportail.lu ortho latest"
+msgstr ""
+
 msgid "geoportail.lu ortho 2016"
 msgstr ""
 
@@ -26378,6 +26439,9 @@ msgstr ""
 msgid "{0} on a node. Should be used on a way."
 msgstr "{0} på en node. Bør brukes på linje."
 
+msgid "{0} on a node. Should be used on a way or relation."
+msgstr ""
+
 msgid "{0} on a node. Should be drawn as an area."
 msgstr ""
 
@@ -26605,6 +26669,9 @@ msgstr ""
 msgid "Nodes duplicating parent way tags"
 msgstr ""
 
+msgid "{0} together with {1} and {2}. Remove {0}."
+msgstr ""
+
 msgid ""
 "wikipedia tag has no language given, use ''wikipedia''=''language:page "
 "title''"
@@ -27386,6 +27453,21 @@ msgstr "Last opp spor til openstreetmap.org"
 msgid "Importing..."
 msgstr ""
 
+msgid "Shape is started incorrectly"
+msgstr ""
+
+msgid "Can''t load SVG diagram"
+msgstr ""
+
+msgid "Can''t find root SVG element"
+msgstr ""
+
+msgid "Import primitives"
+msgstr ""
+
+msgid "Cannot find configuration file!"
+msgstr ""
+
 msgid "DXF files [ImportDxf plugin] (*.dxf)"
 msgstr ""
 
@@ -28025,6 +28107,9 @@ msgstr ""
 msgid "Download mode"
 msgstr ""
 
+msgid "Number of images to be pre-fetched (forwards and backwards)"
+msgstr ""
+
 msgid "You are logged in as ''{0}''."
 msgstr ""
 
@@ -28235,8 +28320,17 @@ msgid "only when manually requested"
 msgstr ""
 
 msgid ""
-"The downloaded OSM area is too big. Download mode has been changed to OSM "
-"area until the layer is restarted."
+"The Mapillary layer has stopped downloading images, because the requested "
+"area is too big!"
+msgstr ""
+
+msgid ""
+"To solve this problem, you could zoom in and load a smaller area of the map."
+msgstr ""
+
+msgid ""
+"To solve this problem, you could switch to download mode ''{0}'' and load "
+"Mapillary images for a smaller portion of the map."
 msgstr ""
 
 msgid "Downloading"
@@ -31582,19 +31676,6 @@ msgstr ""
 msgid "Merge Overlap (combine)"
 msgstr ""
 
-msgid ""
-"<html>A role based relation membership was copied to all new ways.<br>You "
-"should verify this and correct it when necessary.</html>"
-msgstr ""
-
-msgid ""
-"<html>A relation membership was copied to all new ways.<br>You should verify "
-"this and correct it when necessary.</html>"
-msgstr ""
-
-msgid "Split way"
-msgstr ""
-
 msgid "Michigan Left"
 msgstr ""
 
@@ -33050,33 +33131,6 @@ msgstr ""
 msgid "PT: Route passes a oneway road in the wrong direction"
 msgstr ""
 
-msgid "moved"
-msgstr ""
-
-msgid "rail"
-msgstr "jernbane"
-
-msgid "Can''t parse a time from this string."
-msgstr ""
-
-msgid "Invalid value"
-msgstr ""
-
-msgid "added"
-msgstr ""
-
-msgid "Public Transport: Enable GTFSStops"
-msgstr ""
-
-msgid "Public Transport: Catch GTFS stops"
-msgstr ""
-
-msgid "skipped"
-msgstr ""
-
-msgid "Public Transport: Disable GTFS"
-msgstr ""
-
 msgid "Create Stops from GTFS ..."
 msgstr ""
 
@@ -33103,34 +33157,49 @@ msgstr ""
 msgid "The GTFS file was empty."
 msgstr ""
 
-msgid "Create Stops from GTFS"
+msgid "[ID] {0}"
 msgstr ""
 
-msgid "GTFS-Stops"
+msgid "Route patterns ..."
 msgstr ""
 
-msgid "Type of stops to add"
+msgid "Edit Route patterns for public transport"
 msgstr ""
 
-msgid "Time on your GPS device"
+msgid "Route Patterns"
 msgstr ""
 
-msgid "HH:MM:SS.sss"
+msgid "Overview"
 msgstr ""
 
-msgid "Time on your stopwatch"
+msgid "Itinerary"
 msgstr ""
 
-msgid "Time window"
+msgid "Stops"
 msgstr ""
 
-msgid "seconds"
+msgid "Meta"
 msgstr ""
 
-msgid "Move Threshold"
+msgid "Existing route patterns:"
 msgstr ""
 
-msgid "Suggest Stops"
+msgid "Reflect"
+msgstr ""
+
+msgid "Required tags:"
+msgstr ""
+
+msgid "Common tags:"
+msgstr ""
+
+msgid "Additional tags:"
+msgstr ""
+
+msgid "Add a new Tag"
+msgstr ""
+
+msgid "Name/Id"
 msgstr ""
 
 msgid "Find"
@@ -33142,164 +33211,176 @@ msgstr "Vis"
 msgid "Mark"
 msgstr ""
 
-msgid "Catch"
+msgid "Ref"
 msgstr ""
 
-msgid "Join"
+msgid "Stops are possible on the"
 msgstr ""
 
-msgid "Public Transport: Join GTFS stops"
+msgid "right hand side"
 msgstr ""
 
-msgid "State"
-msgstr "Delstat/provins"
+msgid "left hand side"
+msgstr ""
 
-msgid "[incomplete]"
+msgid "Maximum distance from route"
 msgstr ""
 
-msgid "[empty way]"
+msgid "Suggest Stops"
 msgstr ""
 
-msgid "[ID] {0}"
+msgid "Create Stops from GPX ..."
 msgstr ""
 
-msgid "[gap]"
+msgid "Create Stops from a GPX file"
 msgstr ""
 
-msgid "Route patterns ..."
+msgid "Select GPX file"
 msgstr ""
 
-msgid "Edit Route patterns for public transport"
+msgid "The GPX file contained no tracks or waypoints."
 msgstr ""
 
-msgid "Route Patterns"
+msgid "moved"
 msgstr ""
 
-msgid "Overview"
+msgid "added"
 msgstr ""
 
-msgid "Itinerary"
+msgid "Public Transport: Enable GTFSStops"
 msgstr ""
 
-msgid "Stops"
+msgid "Public Transport: Catch GTFS stops"
 msgstr ""
 
-msgid "Meta"
+msgid "skipped"
 msgstr ""
 
-msgid "Existing route patterns:"
+msgid "Public Transport: Disable GTFS"
 msgstr ""
 
-msgid "Reflect"
+msgid "Public Transport: Join GTFS stops"
 msgstr ""
 
-msgid "Required tags:"
+msgid "Public Transport: Change stop type"
 msgstr ""
 
-msgid "Common tags:"
+msgid "Public Transport: Add track stop"
 msgstr ""
 
-msgid "Additional tags:"
+msgid "Public Transport: Delete track stop"
 msgstr ""
 
-msgid "Add a new Tag"
+msgid "Public Transport: Detach track stop list"
 msgstr ""
 
-msgid "Name/Id"
+msgid "Public Transport: Edit track stop list"
 msgstr ""
 
-msgid "Ref"
+msgid "Public Transport: Relocate nodes in track stoplist"
 msgstr ""
 
-msgid "Stops are possible on the"
+msgid "Public Transport: sort track stop list"
 msgstr ""
 
-msgid "right hand side"
+msgid "Public Transport: Suggest stops"
 msgstr ""
 
-msgid "left hand side"
+msgid "Public Transport: Detach waypoints"
 msgstr ""
 
-msgid "Maximum distance from route"
+msgid "Public Transport: Disable waypoints"
 msgstr ""
 
-msgid " [ID] {0}"
+msgid "Public Transport: Enable waypoints"
 msgstr ""
 
-msgid "Public Transport: Change stop type"
+msgid "Public Transport: Edit waypoint name"
 msgstr ""
 
-msgid "Create Stops from GPX ..."
+msgid "rail"
+msgstr "jernbane"
+
+msgid "Can''t parse a time from this string."
 msgstr ""
 
-msgid "Create Stops from a GPX file"
+msgid "Invalid value"
 msgstr ""
 
-msgid "Select GPX file"
+msgid "Create Stops from GTFS"
 msgstr ""
 
-msgid "The GPX file contained no tracks or waypoints."
+msgid "GTFS-Stops"
 msgstr ""
 
-msgid "Create Stops from GPX"
+msgid "Type of stops to add"
 msgstr ""
 
-msgid "Tracks in this GPX file:"
+msgid "Time on your GPS device"
 msgstr ""
 
-msgid "Detach"
+msgid "HH:MM:SS.sss"
 msgstr ""
 
-msgid "implicit"
+msgid "Time on your stopwatch"
 msgstr ""
 
-msgid ""
-"The GPX file doesn''t contain valid trackpoints. Please use a GPX file that "
-"has trackpoints."
+msgid "Time window"
 msgstr ""
 
-msgid "GPX File Trouble"
+msgid "seconds"
 msgstr ""
 
-msgid "unnamed"
-msgstr "uten navn"
+msgid "Move Threshold"
+msgstr ""
 
-msgid "Public Transport: Add track stop"
+msgid "Catch"
 msgstr ""
 
-msgid "Public Transport: Delete track stop"
+msgid "Join"
 msgstr ""
 
-msgid "Public Transport: Detach track stop list"
+msgid "Create Stops from GPX"
 msgstr ""
 
-msgid "Public Transport: Edit track stop list"
+msgid "Tracks in this GPX file:"
 msgstr ""
 
-msgid "Public Transport: Relocate nodes in track stoplist"
+msgid "Detach"
 msgstr ""
 
-msgid "Public Transport: sort track stop list"
+msgid "implicit"
 msgstr ""
 
-msgid "Public Transport: Suggest stops"
+msgid "State"
+msgstr "Delstat/provins"
+
+msgid "[incomplete]"
 msgstr ""
 
-msgid "Stopname"
+msgid "[empty way]"
 msgstr ""
 
-msgid "Public Transport: Detach waypoints"
+msgid "[gap]"
 msgstr ""
 
-msgid "Public Transport: Disable waypoints"
+msgid "Stopname"
 msgstr ""
 
-msgid "Public Transport: Enable waypoints"
+msgid " [ID] {0}"
 msgstr ""
 
-msgid "Public Transport: Edit waypoint name"
+msgid ""
+"The GPX file doesn''t contain valid trackpoints. Please use a GPX file that "
+"has trackpoints."
+msgstr ""
+
+msgid "GPX File Trouble"
 msgstr ""
 
+msgid "unnamed"
+msgstr "uten navn"
+
 msgid "Distance between stops"
 msgstr ""
 
@@ -34028,6 +34109,9 @@ msgstr "Start dialog for egenskaper"
 msgid "JOSM Tag Editor Plugin"
 msgstr "JOSM tilleggsprogram for Egenskaper"
 
+msgid "Presets"
+msgstr "Objektmaler"
+
 msgid "Abort tag editing and close dialog"
 msgstr ""
 
@@ -35958,6 +36042,26 @@ msgid_plural "Overwrite ''{0}'' tags {1} from {2} with new value ''{3}''?"
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Download from Sophox API"
+msgstr ""
+
+msgid ""
+"Find places of education at least 2km, and at most 3km from the center of "
+"the selection"
+msgstr ""
+
+msgid "Show/hide Sophox snippet list"
+msgstr ""
+
+msgid "help"
+msgstr "hjelp"
+
+msgid "Server: "
+msgstr "Tjener: "
+
+msgid "Wikidata+OSM server"
+msgstr "Wikidata & OSM-server"
+
 msgid "Search Wikidata items"
 msgstr ""
 
@@ -36031,26 +36135,6 @@ msgid ""
 "objects"
 msgstr ""
 
-msgid "Download from Wikosm API"
-msgstr ""
-
-msgid ""
-"Find places of education at least 2km, and at most 3km from the center of "
-"the selection"
-msgstr ""
-
-msgid "Show/hide Wikosm snippet list"
-msgstr ""
-
-msgid "help"
-msgstr "hjelp"
-
-msgid "Server: "
-msgstr "Tjener: "
-
-msgid "Wikidata+OSM server"
-msgstr "Wikidata & OSM-server"
-
 msgid "The Ultimate WMS Super-speed Turbo Challenge II"
 msgstr ""
 
diff --git a/i18n/po/nds.po b/i18n/po/nds.po
index 844fe31..4d00003 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-10-30 03:38+0100\n"
+"POT-Creation-Date: 2017-11-26 00:06+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-10-30 04:55+0000\n"
-"X-Generator: Launchpad (build 18493)\n"
+"X-Launchpad-Export-Date: 2017-11-26 04:56+0000\n"
+"X-Generator: Launchpad (build 18509)\n"
 "Language: \n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -421,12 +421,15 @@ msgstr ""
 msgid "Delete the active layer. Does not delete the associated file."
 msgstr ""
 
-msgid "Toggle dialogs panel"
+msgid "Dialogs panel"
 msgstr ""
 
 msgid "Toggle dialogs panel, maximize mapview"
 msgstr ""
 
+msgid "Toggle dialogs panel"
+msgstr ""
+
 msgid "Distribute Nodes"
 msgstr ""
 
@@ -6487,6 +6490,9 @@ msgstr ""
 msgid "Coordinates (projected): "
 msgstr ""
 
+msgid "UTM Zone"
+msgstr ""
+
 msgid "Part of: "
 msgstr ""
 
@@ -8785,6 +8791,11 @@ msgstr ""
 msgid "Check \"Save\" to save the layer to the file specified on the left."
 msgstr ""
 
+msgid ""
+"A background upload is already in progress. Kindly wait for it to finish "
+"before uploading new changes"
+msgstr ""
+
 msgid "I would like someone to review my edits."
 msgstr ""
 
@@ -9893,6 +9904,9 @@ msgstr ""
 msgid "Save Layer"
 msgstr ""
 
+msgid "Trying to set a read only data layer as edit layer"
+msgstr ""
+
 msgid "{0} note"
 msgid_plural "{0} notes"
 msgstr[0] ""
@@ -10723,11 +10737,6 @@ msgstr ""
 msgid "Failed to parse Mappaint styles from ''{0}''. Error was: {1}"
 msgstr ""
 
-msgid ""
-"Detected deprecated ''{0}'' in ''{1}'' which will be removed shortly. Use "
-"''{2}'' instead."
-msgstr ""
-
 msgid "Failed to locate image ''{0}''"
 msgstr ""
 
@@ -11892,6 +11901,9 @@ msgstr ""
 msgid "Show object ID in selection lists"
 msgstr ""
 
+msgid "Show node coordinates in selection lists"
+msgstr ""
+
 msgid "Show localized name in selection lists"
 msgstr ""
 
@@ -12648,9 +12660,6 @@ msgstr ""
 msgid "UTM"
 msgstr ""
 
-msgid "UTM Zone"
-msgstr ""
-
 msgid "North"
 msgstr ""
 
@@ -13118,9 +13127,6 @@ msgstr ""
 msgid "Error parsing {0}: "
 msgstr ""
 
-msgid "Presets"
-msgstr ""
-
 msgid "Search for objects by preset..."
 msgstr ""
 
@@ -15662,6 +15668,18 @@ msgstr ""
 msgid "korean"
 msgstr ""
 
+msgid "donut"
+msgstr ""
+
+msgid "mediterranean"
+msgstr ""
+
+msgid "friture"
+msgstr ""
+
+msgid "crepe"
+msgstr ""
+
 msgid "Internet access"
 msgstr ""
 
@@ -18504,7 +18522,16 @@ msgstr ""
 msgid "Tents allowed"
 msgstr ""
 
-msgid "Camping Site"
+msgid "Campsite"
+msgstr ""
+
+msgid "Caravans allowed"
+msgstr ""
+
+msgid "Backcountry"
+msgstr ""
+
+msgid "Group only access"
 msgstr ""
 
 msgid "Food+Drinks"
@@ -23333,6 +23360,14 @@ msgid ""
 "resolution or better, and refreshed more frequently with ongoing updates."
 msgstr ""
 
+msgid "DigitalGlobe Premium Imagery Vintage"
+msgstr ""
+
+msgid ""
+"Imagery boundaries and capture dates. Labels appear at zoom level 14 and "
+"higher."
+msgstr ""
+
 msgid "DigitalGlobe Standard Imagery"
 msgstr ""
 
@@ -23342,6 +23377,9 @@ msgid ""
 "Landsat. Average age is 2.31 years, with some areas updated 2x per year."
 msgstr ""
 
+msgid "DigitalGlobe Standard Imagery Vintage"
+msgstr ""
+
 msgid "Esri World Imagery"
 msgstr ""
 
@@ -23405,6 +23443,12 @@ msgstr ""
 msgid "Strava cycling and running heatmap"
 msgstr ""
 
+msgid "Strava water sports heatmap"
+msgstr ""
+
+msgid "Strava winter sports heatmap"
+msgstr ""
+
 msgid "Locator Overlay"
 msgstr ""
 
@@ -23809,6 +23853,9 @@ msgstr ""
 msgid "SPW(allonie) most recent aerial imagery"
 msgstr ""
 
+msgid "SPW(allonie) 2016 aerial imagery"
+msgstr ""
+
 msgid "SPW(allonie) 2015 aerial imagery"
 msgstr ""
 
@@ -23854,6 +23901,14 @@ msgstr ""
 msgid "Addresses data from IBGE"
 msgstr ""
 
+msgid "Street names IBGE Salvador-BA"
+msgstr ""
+
+msgid ""
+"Streets geometry and names of Salvador, Bahia. Source: Faces de Logradouro - "
+"IBGE."
+msgstr ""
+
 msgid "Rio Mosaic 2013"
 msgstr ""
 
@@ -24584,6 +24639,9 @@ msgstr ""
 msgid "Japan GSI ortho Imagery"
 msgstr ""
 
+msgid "Japan GSI Standard Map"
+msgstr ""
+
 msgid "imagico.de OSM images for mapping: Aral Sea (low water level)"
 msgstr ""
 
@@ -24613,7 +24671,7 @@ msgstr ""
 msgid "20cm ortho - Latvia - Coastline"
 msgstr ""
 
-msgid "1.cikla ortofotokarte - Latvia"
+msgid "Orthophoto 1st cycle (1994-1999) - Latvia"
 msgstr ""
 
 msgid "ORT10LT (Lithuania)"
@@ -24622,6 +24680,9 @@ msgstr ""
 msgid "geoportail.lu all layers"
 msgstr ""
 
+msgid "geoportail.lu ortho latest"
+msgstr ""
+
 msgid "geoportail.lu ortho 2016"
 msgstr ""
 
@@ -26112,6 +26173,9 @@ msgstr ""
 msgid "{0} on a node. Should be used on a way."
 msgstr ""
 
+msgid "{0} on a node. Should be used on a way or relation."
+msgstr ""
+
 msgid "{0} on a node. Should be drawn as an area."
 msgstr ""
 
@@ -26339,6 +26403,9 @@ msgstr ""
 msgid "Nodes duplicating parent way tags"
 msgstr ""
 
+msgid "{0} together with {1} and {2}. Remove {0}."
+msgstr ""
+
 msgid ""
 "wikipedia tag has no language given, use ''wikipedia''=''language:page "
 "title''"
@@ -27103,6 +27170,21 @@ msgstr ""
 msgid "Importing..."
 msgstr ""
 
+msgid "Shape is started incorrectly"
+msgstr ""
+
+msgid "Can''t load SVG diagram"
+msgstr ""
+
+msgid "Can''t find root SVG element"
+msgstr ""
+
+msgid "Import primitives"
+msgstr ""
+
+msgid "Cannot find configuration file!"
+msgstr ""
+
 msgid "DXF files [ImportDxf plugin] (*.dxf)"
 msgstr ""
 
@@ -27742,6 +27824,9 @@ msgstr ""
 msgid "Download mode"
 msgstr ""
 
+msgid "Number of images to be pre-fetched (forwards and backwards)"
+msgstr ""
+
 msgid "You are logged in as ''{0}''."
 msgstr ""
 
@@ -27952,8 +28037,17 @@ msgid "only when manually requested"
 msgstr ""
 
 msgid ""
-"The downloaded OSM area is too big. Download mode has been changed to OSM "
-"area until the layer is restarted."
+"The Mapillary layer has stopped downloading images, because the requested "
+"area is too big!"
+msgstr ""
+
+msgid ""
+"To solve this problem, you could zoom in and load a smaller area of the map."
+msgstr ""
+
+msgid ""
+"To solve this problem, you could switch to download mode ''{0}'' and load "
+"Mapillary images for a smaller portion of the map."
 msgstr ""
 
 msgid "Downloading"
@@ -31265,19 +31359,6 @@ msgstr ""
 msgid "Merge Overlap (combine)"
 msgstr ""
 
-msgid ""
-"<html>A role based relation membership was copied to all new ways.<br>You "
-"should verify this and correct it when necessary.</html>"
-msgstr ""
-
-msgid ""
-"<html>A relation membership was copied to all new ways.<br>You should verify "
-"this and correct it when necessary.</html>"
-msgstr ""
-
-msgid "Split way"
-msgstr ""
-
 msgid "Michigan Left"
 msgstr ""
 
@@ -32732,254 +32813,254 @@ msgstr ""
 msgid "PT: Route passes a oneway road in the wrong direction"
 msgstr ""
 
-msgid "moved"
+msgid "Create Stops from GTFS ..."
 msgstr ""
 
-msgid "rail"
+msgid "Create Stops from a GTFS file"
 msgstr ""
 
-msgid "Can''t parse a time from this string."
+msgid "Select GTFS file (stops.txt)"
 msgstr ""
 
-msgid "Invalid value"
+msgid "File \"{0}\" does not exist"
 msgstr ""
 
-msgid "added"
+msgid "IOException \"{0}\" occurred"
 msgstr ""
 
-msgid "Public Transport: Enable GTFSStops"
+msgid ""
+"There exists no dataset. Try to download data from the server or open an OSM "
+"file."
 msgstr ""
 
-msgid "Public Transport: Catch GTFS stops"
+msgid "No data found"
 msgstr ""
 
-msgid "skipped"
+msgid "The GTFS file was empty."
 msgstr ""
 
-msgid "Public Transport: Disable GTFS"
+msgid "[ID] {0}"
 msgstr ""
 
-msgid "Create Stops from GTFS ..."
+msgid "Route patterns ..."
 msgstr ""
 
-msgid "Create Stops from a GTFS file"
+msgid "Edit Route patterns for public transport"
 msgstr ""
 
-msgid "Select GTFS file (stops.txt)"
+msgid "Route Patterns"
 msgstr ""
 
-msgid "File \"{0}\" does not exist"
+msgid "Overview"
 msgstr ""
 
-msgid "IOException \"{0}\" occurred"
+msgid "Itinerary"
 msgstr ""
 
-msgid ""
-"There exists no dataset. Try to download data from the server or open an OSM "
-"file."
+msgid "Stops"
 msgstr ""
 
-msgid "No data found"
+msgid "Meta"
 msgstr ""
 
-msgid "The GTFS file was empty."
+msgid "Existing route patterns:"
 msgstr ""
 
-msgid "Create Stops from GTFS"
+msgid "Reflect"
 msgstr ""
 
-msgid "GTFS-Stops"
+msgid "Required tags:"
 msgstr ""
 
-msgid "Type of stops to add"
+msgid "Common tags:"
 msgstr ""
 
-msgid "Time on your GPS device"
+msgid "Additional tags:"
 msgstr ""
 
-msgid "HH:MM:SS.sss"
+msgid "Add a new Tag"
 msgstr ""
 
-msgid "Time on your stopwatch"
+msgid "Name/Id"
 msgstr ""
 
-msgid "Time window"
+msgid "Find"
 msgstr ""
 
-msgid "seconds"
+msgid "Show"
 msgstr ""
 
-msgid "Move Threshold"
+msgid "Mark"
 msgstr ""
 
-msgid "Suggest Stops"
+msgid "Ref"
 msgstr ""
 
-msgid "Find"
+msgid "Stops are possible on the"
 msgstr ""
 
-msgid "Show"
+msgid "right hand side"
 msgstr ""
 
-msgid "Mark"
+msgid "left hand side"
 msgstr ""
 
-msgid "Catch"
+msgid "Maximum distance from route"
 msgstr ""
 
-msgid "Join"
+msgid "Suggest Stops"
 msgstr ""
 
-msgid "Public Transport: Join GTFS stops"
+msgid "Create Stops from GPX ..."
 msgstr ""
 
-msgid "State"
+msgid "Create Stops from a GPX file"
 msgstr ""
 
-msgid "[incomplete]"
+msgid "Select GPX file"
 msgstr ""
 
-msgid "[empty way]"
+msgid "The GPX file contained no tracks or waypoints."
 msgstr ""
 
-msgid "[ID] {0}"
+msgid "moved"
 msgstr ""
 
-msgid "[gap]"
+msgid "added"
 msgstr ""
 
-msgid "Route patterns ..."
+msgid "Public Transport: Enable GTFSStops"
 msgstr ""
 
-msgid "Edit Route patterns for public transport"
+msgid "Public Transport: Catch GTFS stops"
 msgstr ""
 
-msgid "Route Patterns"
+msgid "skipped"
 msgstr ""
 
-msgid "Overview"
+msgid "Public Transport: Disable GTFS"
 msgstr ""
 
-msgid "Itinerary"
+msgid "Public Transport: Join GTFS stops"
 msgstr ""
 
-msgid "Stops"
+msgid "Public Transport: Change stop type"
 msgstr ""
 
-msgid "Meta"
+msgid "Public Transport: Add track stop"
 msgstr ""
 
-msgid "Existing route patterns:"
+msgid "Public Transport: Delete track stop"
 msgstr ""
 
-msgid "Reflect"
+msgid "Public Transport: Detach track stop list"
 msgstr ""
 
-msgid "Required tags:"
+msgid "Public Transport: Edit track stop list"
 msgstr ""
 
-msgid "Common tags:"
+msgid "Public Transport: Relocate nodes in track stoplist"
 msgstr ""
 
-msgid "Additional tags:"
+msgid "Public Transport: sort track stop list"
 msgstr ""
 
-msgid "Add a new Tag"
+msgid "Public Transport: Suggest stops"
 msgstr ""
 
-msgid "Name/Id"
+msgid "Public Transport: Detach waypoints"
 msgstr ""
 
-msgid "Ref"
+msgid "Public Transport: Disable waypoints"
 msgstr ""
 
-msgid "Stops are possible on the"
+msgid "Public Transport: Enable waypoints"
 msgstr ""
 
-msgid "right hand side"
+msgid "Public Transport: Edit waypoint name"
 msgstr ""
 
-msgid "left hand side"
+msgid "rail"
 msgstr ""
 
-msgid "Maximum distance from route"
+msgid "Can''t parse a time from this string."
 msgstr ""
 
-msgid " [ID] {0}"
+msgid "Invalid value"
 msgstr ""
 
-msgid "Public Transport: Change stop type"
+msgid "Create Stops from GTFS"
 msgstr ""
 
-msgid "Create Stops from GPX ..."
+msgid "GTFS-Stops"
 msgstr ""
 
-msgid "Create Stops from a GPX file"
+msgid "Type of stops to add"
 msgstr ""
 
-msgid "Select GPX file"
+msgid "Time on your GPS device"
 msgstr ""
 
-msgid "The GPX file contained no tracks or waypoints."
+msgid "HH:MM:SS.sss"
 msgstr ""
 
-msgid "Create Stops from GPX"
+msgid "Time on your stopwatch"
 msgstr ""
 
-msgid "Tracks in this GPX file:"
+msgid "Time window"
 msgstr ""
 
-msgid "Detach"
+msgid "seconds"
 msgstr ""
 
-msgid "implicit"
+msgid "Move Threshold"
 msgstr ""
 
-msgid ""
-"The GPX file doesn''t contain valid trackpoints. Please use a GPX file that "
-"has trackpoints."
+msgid "Catch"
 msgstr ""
 
-msgid "GPX File Trouble"
+msgid "Join"
 msgstr ""
 
-msgid "unnamed"
+msgid "Create Stops from GPX"
 msgstr ""
 
-msgid "Public Transport: Add track stop"
+msgid "Tracks in this GPX file:"
 msgstr ""
 
-msgid "Public Transport: Delete track stop"
+msgid "Detach"
 msgstr ""
 
-msgid "Public Transport: Detach track stop list"
+msgid "implicit"
 msgstr ""
 
-msgid "Public Transport: Edit track stop list"
+msgid "State"
 msgstr ""
 
-msgid "Public Transport: Relocate nodes in track stoplist"
+msgid "[incomplete]"
 msgstr ""
 
-msgid "Public Transport: sort track stop list"
+msgid "[empty way]"
 msgstr ""
 
-msgid "Public Transport: Suggest stops"
+msgid "[gap]"
 msgstr ""
 
 msgid "Stopname"
 msgstr ""
 
-msgid "Public Transport: Detach waypoints"
+msgid " [ID] {0}"
 msgstr ""
 
-msgid "Public Transport: Disable waypoints"
+msgid ""
+"The GPX file doesn''t contain valid trackpoints. Please use a GPX file that "
+"has trackpoints."
 msgstr ""
 
-msgid "Public Transport: Enable waypoints"
+msgid "GPX File Trouble"
 msgstr ""
 
-msgid "Public Transport: Edit waypoint name"
+msgid "unnamed"
 msgstr ""
 
 msgid "Distance between stops"
@@ -33708,6 +33789,9 @@ msgstr ""
 msgid "JOSM Tag Editor Plugin"
 msgstr ""
 
+msgid "Presets"
+msgstr ""
+
 msgid "Abort tag editing and close dialog"
 msgstr ""
 
@@ -35633,6 +35717,26 @@ msgid_plural "Overwrite ''{0}'' tags {1} from {2} with new value ''{3}''?"
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Download from Sophox API"
+msgstr ""
+
+msgid ""
+"Find places of education at least 2km, and at most 3km from the center of "
+"the selection"
+msgstr ""
+
+msgid "Show/hide Sophox snippet list"
+msgstr ""
+
+msgid "help"
+msgstr ""
+
+msgid "Server: "
+msgstr ""
+
+msgid "Wikidata+OSM server"
+msgstr ""
+
 msgid "Search Wikidata items"
 msgstr ""
 
@@ -35706,26 +35810,6 @@ msgid ""
 "objects"
 msgstr ""
 
-msgid "Download from Wikosm API"
-msgstr ""
-
-msgid ""
-"Find places of education at least 2km, and at most 3km from the center of "
-"the selection"
-msgstr ""
-
-msgid "Show/hide Wikosm snippet list"
-msgstr ""
-
-msgid "help"
-msgstr ""
-
-msgid "Server: "
-msgstr ""
-
-msgid "Wikidata+OSM server"
-msgstr ""
-
 msgid "The Ultimate WMS Super-speed Turbo Challenge II"
 msgstr ""
 
diff --git a/i18n/po/nl.po b/i18n/po/nl.po
index 7396d3e..d3a5442 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-10-30 03:38+0100\n"
-"PO-Revision-Date: 2017-10-23 14:48+0000\n"
+"POT-Creation-Date: 2017-11-26 00:06+0100\n"
+"PO-Revision-Date: 2017-11-07 11:32+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-10-30 04:41+0000\n"
-"X-Generator: Launchpad (build 18493)\n"
+"X-Launchpad-Export-Date: 2017-11-26 04:41+0000\n"
+"X-Generator: Launchpad (build 18509)\n"
 "Language: nl\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -454,12 +454,15 @@ msgid "Delete the active layer. Does not delete the associated file."
 msgstr ""
 "verwijder de actieve laag. Verwijdert niet het daaraan verbonden bestand"
 
-msgid "Toggle dialogs panel"
-msgstr "paneel Schakelvensters"
+msgid "Dialogs panel"
+msgstr ""
 
 msgid "Toggle dialogs panel, maximize mapview"
 msgstr "paneel Schakelvensters , kaartweergave maximaliseren"
 
+msgid "Toggle dialogs panel"
+msgstr "paneel Schakelvensters"
+
 msgid "Distribute Nodes"
 msgstr "Knopen verdelen"
 
@@ -7124,6 +7127,9 @@ msgstr "Coördinaten: "
 msgid "Coordinates (projected): "
 msgstr "Coördinaten (geprojecteerd): "
 
+msgid "UTM Zone"
+msgstr "UTM-zone"
+
 msgid "Part of: "
 msgstr "Deel van: "
 
@@ -9715,6 +9721,11 @@ msgstr ""
 "\"Opslaan\" selecteren om de laag op te slaan als het links gespecificeerde "
 "bestand."
 
+msgid ""
+"A background upload is already in progress. Kindly wait for it to finish "
+"before uploading new changes"
+msgstr ""
+
 msgid "I would like someone to review my edits."
 msgstr "Ik wil graag dat iemand mijn bewerkingen nakijkt."
 
@@ -10972,6 +10983,9 @@ msgstr "Wijzig de projectie opnieuw of verwijder de laag."
 msgid "Save Layer"
 msgstr "Laag opslaan"
 
+msgid "Trying to set a read only data layer as edit layer"
+msgstr ""
+
 msgid "{0} note"
 msgid_plural "{0} notes"
 msgstr[0] "{0} opmerking"
@@ -11898,11 +11912,6 @@ msgid "Failed to parse Mappaint styles from ''{0}''. Error was: {1}"
 msgstr ""
 "Parsen van Kaarttekenstijlen vanaf ''{0}'' mislukt. Exceptie was: {1}"
 
-msgid ""
-"Detected deprecated ''{0}'' in ''{1}'' which will be removed shortly. Use "
-"''{2}'' instead."
-msgstr ""
-
 msgid "Failed to locate image ''{0}''"
 msgstr "Lokaliseren van afbeelding ''{0}'' mislukt"
 
@@ -13255,6 +13264,9 @@ msgstr "Startscherm weergeven bij opstarten"
 msgid "Show object ID in selection lists"
 msgstr "Object-ID in selectielijsten weergeven"
 
+msgid "Show node coordinates in selection lists"
+msgstr ""
+
 msgid "Show localized name in selection lists"
 msgstr "Geef de gelokaliseerde naam weer in selectielijsten"
 
@@ -14087,9 +14099,6 @@ msgstr "UTM Geodesisch systeem"
 msgid "UTM"
 msgstr "UTM"
 
-msgid "UTM Zone"
-msgstr "UTM-zone"
-
 msgid "North"
 msgstr "Noorden"
 
@@ -14616,9 +14625,6 @@ msgstr "Voorkeuze sub-element zonder ouder"
 msgid "Error parsing {0}: "
 msgstr "Fout bij parsen van {0}: "
 
-msgid "Presets"
-msgstr "Voorkeuze"
-
 msgid "Search for objects by preset..."
 msgstr "Zoeken naar objecten op voorkeuze..."
 
@@ -17527,6 +17533,18 @@ msgstr "vegetarisch"
 msgid "korean"
 msgstr "Koreaans"
 
+msgid "donut"
+msgstr "donut"
+
+msgid "mediterranean"
+msgstr "mediterraans"
+
+msgid "friture"
+msgstr "frituur"
+
+msgid "crepe"
+msgstr "crêpe"
+
 msgid "Internet access"
 msgstr "Internettoegang"
 
@@ -20403,8 +20421,17 @@ msgstr "Aansluiting energie"
 msgid "Tents allowed"
 msgstr "Tenten toegestaan"
 
-msgid "Camping Site"
-msgstr "Kampeerterrein"
+msgid "Campsite"
+msgstr "Camping"
+
+msgid "Caravans allowed"
+msgstr "Caravans toegestaan"
+
+msgid "Backcountry"
+msgstr ""
+
+msgid "Group only access"
+msgstr "Alleen voor groepen"
 
 msgid "Food+Drinks"
 msgstr "Eten en drinken"
@@ -25256,6 +25283,14 @@ msgstr ""
 "vanuit eigen gebied van interesse, 50cm resolutie of beter en meer frequent "
 "vernieuwd met doorlopende bijwerkingen."
 
+msgid "DigitalGlobe Premium Imagery Vintage"
+msgstr ""
+
+msgid ""
+"Imagery boundaries and capture dates. Labels appear at zoom level 14 and "
+"higher."
+msgstr ""
+
 msgid "DigitalGlobe Standard Imagery"
 msgstr "DigitalGlobe Standard Imagery"
 
@@ -25269,6 +25304,9 @@ msgstr ""
 "waar beschikbaar, achtergrond gevuld door Landsat. Gemiddelde ouderdom is "
 "2,31 jaar, met enkele gebieden die 2x per jaar worden bijgewerkt."
 
+msgid "DigitalGlobe Standard Imagery Vintage"
+msgstr ""
+
 msgid "Esri World Imagery"
 msgstr "Esri World Imagery"
 
@@ -25332,6 +25370,12 @@ msgstr "Strava hardlopen heatmap"
 msgid "Strava cycling and running heatmap"
 msgstr "Strava fietsen en hardlopen heatmap"
 
+msgid "Strava water sports heatmap"
+msgstr ""
+
+msgid "Strava winter sports heatmap"
+msgstr ""
+
 msgid "Locator Overlay"
 msgstr "Locator Overlay"
 
@@ -25751,6 +25795,9 @@ msgstr "SPW(allonie) PICC numerieke afbeeldingen"
 msgid "SPW(allonie) most recent aerial imagery"
 msgstr "SPW(allonie) meest recente luchtfoto’s"
 
+msgid "SPW(allonie) 2016 aerial imagery"
+msgstr ""
+
 msgid "SPW(allonie) 2015 aerial imagery"
 msgstr "SPW(allonie) 2015 luchtfoto’s"
 
@@ -25799,6 +25846,14 @@ msgstr "IBGE federal district"
 msgid "Addresses data from IBGE"
 msgstr "Adresseert gegevens van IBGE"
 
+msgid "Street names IBGE Salvador-BA"
+msgstr ""
+
+msgid ""
+"Streets geometry and names of Salvador, Bahia. Source: Faces de Logradouro - "
+"IBGE."
+msgstr ""
+
 msgid "Rio Mosaic 2013"
 msgstr "Rio Mosaic 2013"
 
@@ -26591,6 +26646,9 @@ msgstr "Topografische basiskaart van Zuid Tirol"
 msgid "Japan GSI ortho Imagery"
 msgstr "Japan GSI ortho Imagery"
 
+msgid "Japan GSI Standard Map"
+msgstr ""
+
 msgid "imagico.de OSM images for mapping: Aral Sea (low water level)"
 msgstr ""
 "imagico.de OSM-afbeeldingen voor in kaart brengen: Aral Sea (niveau laag "
@@ -26626,8 +26684,8 @@ msgstr "50cm ortho - Letland"
 msgid "20cm ortho - Latvia - Coastline"
 msgstr "20cm ortho - Letland - kustlijn"
 
-msgid "1.cikla ortofotokarte - Latvia"
-msgstr "1.cikla ortofotokarte - Letland"
+msgid "Orthophoto 1st cycle (1994-1999) - Latvia"
+msgstr ""
 
 msgid "ORT10LT (Lithuania)"
 msgstr "ORT10LT (Litouwen)"
@@ -26635,8 +26693,11 @@ msgstr "ORT10LT (Litouwen)"
 msgid "geoportail.lu all layers"
 msgstr "geoportail.lu alle lagen"
 
+msgid "geoportail.lu ortho latest"
+msgstr ""
+
 msgid "geoportail.lu ortho 2016"
-msgstr "geoportail.lu ortho 2016"
+msgstr ""
 
 msgid "Luxembourg Inspire Railway"
 msgstr "Luxemburg Inspire spoorwegen"
@@ -28375,6 +28436,9 @@ msgstr "verkeerde waarde: {0}"
 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 ""
+
 msgid "{0} on a node. Should be drawn as an area."
 msgstr "{0} op een knoop. Zou moeten worden getekend als een gebied."
 
@@ -28625,6 +28689,9 @@ msgstr "{0} lijkt niet zinnig"
 msgid "Nodes duplicating parent way tags"
 msgstr "Knopen die tags voor \"ouder\"-weg dupliceren"
 
+msgid "{0} together with {1} and {2}. Remove {0}."
+msgstr ""
+
 msgid ""
 "wikipedia tag has no language given, use ''wikipedia''=''language:page "
 "title''"
@@ -29597,6 +29664,21 @@ msgstr "Sporen uploaden naar openstreetmap.org"
 msgid "Importing..."
 msgstr "Aan het importeren..."
 
+msgid "Shape is started incorrectly"
+msgstr ""
+
+msgid "Can''t load SVG diagram"
+msgstr ""
+
+msgid "Can''t find root SVG element"
+msgstr ""
+
+msgid "Import primitives"
+msgstr ""
+
+msgid "Cannot find configuration file!"
+msgstr ""
+
 msgid "DXF files [ImportDxf plugin] (*.dxf)"
 msgstr "DXF-bestanden [plug-in ImportDxf] (*.dxf)"
 
@@ -29977,7 +30059,7 @@ msgid "Mapillary layer"
 msgstr "laag van Mapillary"
 
 msgid "{0} sequences, each containing between {1} and {2} images (ø {3})"
-msgstr ""
+msgstr "{0} reeksen, elk tussen {1} en {2} afbeeldingen bevattend (ø {3})"
 
 msgid "{0} imported images"
 msgstr "{0} geïmporteerde afbeeldingen"
@@ -30261,6 +30343,10 @@ msgstr "Experimentele bèta-mogelijkheden inschakelen (kunnen onstabiel zijn)"
 msgid "Download mode"
 msgstr "Modus Downloaden"
 
+msgid "Number of images to be pre-fetched (forwards and backwards)"
+msgstr ""
+"Aantal afbeeldingen om vooraf op te halen (voorwaarts en achterwaarts)"
+
 msgid "You are logged in as ''{0}''."
 msgstr "U bent aangemeld als ''{0}''."
 
@@ -30491,11 +30577,25 @@ msgid "only when manually requested"
 msgstr "alleen indien handmatig verzocht"
 
 msgid ""
-"The downloaded OSM area is too big. Download mode has been changed to OSM "
-"area until the layer is restarted."
+"The Mapillary layer has stopped downloading images, because the requested "
+"area is too big!"
+msgstr ""
+"De laag van Mapillary is gestopt met downloaden va afbeeldingen omdat het "
+"gevraagde gebied te groot is!"
+
+msgid ""
+"To solve this problem, you could zoom in and load a smaller area of the map."
 msgstr ""
-"Het gedownloade gebied van OSM is te groot. Modus Downloaden is gewijzigd "
-"naar het gebied van OSM totdat de laag opnieuw wordt gestart."
+"U zou in kunnen zoomen en een kleiner gedeelte van de kaart kunnen laden om "
+"dit probleem op te lossen."
+
+msgid ""
+"To solve this problem, you could switch to download mode ''{0}'' and load "
+"Mapillary images for a smaller portion of the map."
+msgstr ""
+"U zou kunnen schakelen naar de modus Downloaden ''{0}'' en afbeeldingen van "
+"Mapillary kunnen laden voor een kleiner gedeelte van de kaart om dit "
+"probleem op te lossen."
 
 msgid "Downloading"
 msgstr "Downloaden"
@@ -34173,23 +34273,6 @@ msgstr "Overlappende wegen samenvoegen."
 msgid "Merge Overlap (combine)"
 msgstr "Overlapping samenvoegen (combineren)"
 
-msgid ""
-"<html>A role based relation membership was copied to all new ways.<br>You "
-"should verify this and correct it when necessary.</html>"
-msgstr ""
-"<html>Een lid met een op een rol gebaseerde relatie is gekopieerd naar alle "
-"nieuwe wegen.<br>U zou dit moeten nakijken en indien nodig corrigeren.</html>"
-
-msgid ""
-"<html>A relation membership was copied to all new ways.<br>You should verify "
-"this and correct it when necessary.</html>"
-msgstr ""
-"<html>En lid van een relatie waarvan is gekopieerd naar alle nieuwe "
-"wegen.<br>U zou dit moeten nakijken en indien nodig corrigeren.</html>"
-
-msgid "Split way"
-msgstr "Weg splitsen"
-
 msgid "Michigan Left"
 msgstr "Michigan links"
 
@@ -35763,33 +35846,6 @@ msgstr "PT: Aan de weg wordt gewerkt"
 msgid "PT: Route passes a oneway road in the wrong direction"
 msgstr "PT: Route passeeert een éénrichting-weg in de verkeerde richting"
 
-msgid "moved"
-msgstr "verplaatst"
-
-msgid "rail"
-msgstr "spoor"
-
-msgid "Can''t parse a time from this string."
-msgstr "Kan geen tijd parsen uit deze tekenreeks."
-
-msgid "Invalid value"
-msgstr "Ongeldige waarde"
-
-msgid "added"
-msgstr "toegevoegd"
-
-msgid "Public Transport: Enable GTFSStops"
-msgstr "Openbaar vervoer: GTFSStops inschakelen"
-
-msgid "Public Transport: Catch GTFS stops"
-msgstr "Openbaar vervoer: GTFS-haltes vangen"
-
-msgid "skipped"
-msgstr "overgeslagen"
-
-msgid "Public Transport: Disable GTFS"
-msgstr "Openbaar vervoer: GTFS uitschakelen"
-
 msgid "Create Stops from GTFS ..."
 msgstr "Haltes maken uit GTFS ..."
 
@@ -35818,69 +35874,9 @@ msgstr "geen gegevens gevonden"
 msgid "The GTFS file was empty."
 msgstr "Het bestand van GTFS file was leeg."
 
-msgid "Create Stops from GTFS"
-msgstr "Haltes maken uit GTFS"
-
-msgid "GTFS-Stops"
-msgstr "GTFS-haltes"
-
-msgid "Type of stops to add"
-msgstr "Type halte om toe te voegen"
-
-msgid "Time on your GPS device"
-msgstr "Tijd op uw GPS-apparaat"
-
-msgid "HH:MM:SS.sss"
-msgstr "UU:MM:SS.sss"
-
-msgid "Time on your stopwatch"
-msgstr "Tijd op uw stopwatch"
-
-msgid "Time window"
-msgstr "Tijdvenster"
-
-msgid "seconds"
-msgstr "seconden"
-
-msgid "Move Threshold"
-msgstr "Drempel verplaatsen"
-
-msgid "Suggest Stops"
-msgstr "Haltes voorstellen"
-
-msgid "Find"
-msgstr "Zoeken"
-
-msgid "Show"
-msgstr "Weergeven"
-
-msgid "Mark"
-msgstr "Markeren"
-
-msgid "Catch"
-msgstr "Vangen"
-
-msgid "Join"
-msgstr "Verbinden"
-
-msgid "Public Transport: Join GTFS stops"
-msgstr "Openbaar vervoer: GTFS-haltes verbinden"
-
-msgid "State"
-msgstr "Staat"
-
-msgid "[incomplete]"
-msgstr "[incompleet]"
-
-msgid "[empty way]"
-msgstr "[lege weg]"
-
 msgid "[ID] {0}"
 msgstr "[ID] {0}"
 
-msgid "[gap]"
-msgstr "[gat]"
-
 msgid "Route patterns ..."
 msgstr "Routepatronen ..."
 
@@ -35923,6 +35919,15 @@ msgstr "Voeg een nieuwe tag toe"
 msgid "Name/Id"
 msgstr "Naam/ID"
 
+msgid "Find"
+msgstr "Zoeken"
+
+msgid "Show"
+msgstr "Weergeven"
+
+msgid "Mark"
+msgstr "Markeren"
+
 msgid "Ref"
 msgstr "Verw"
 
@@ -35938,11 +35943,8 @@ msgstr "linkerkant"
 msgid "Maximum distance from route"
 msgstr "Maximale afstand vanaf route"
 
-msgid " [ID] {0}"
-msgstr " [ID] {0}"
-
-msgid "Public Transport: Change stop type"
-msgstr "Openbaar vervoer: Wijzig type van halte"
+msgid "Suggest Stops"
+msgstr "Haltes voorstellen"
 
 msgid "Create Stops from GPX ..."
 msgstr "Maak haltes vanuit GPX ..."
@@ -35956,30 +35958,29 @@ msgstr "Selecteer GPX-bestand"
 msgid "The GPX file contained no tracks or waypoints."
 msgstr "Het GPX-bestand bevat geen sporen of wegpunten."
 
-msgid "Create Stops from GPX"
-msgstr "Maak haltes vanuit GPX"
+msgid "moved"
+msgstr "verplaatst"
 
-msgid "Tracks in this GPX file:"
-msgstr "Sporen in dit GPX-bestand:"
+msgid "added"
+msgstr "toegevoegd"
 
-msgid "Detach"
-msgstr "Vastmaken"
+msgid "Public Transport: Enable GTFSStops"
+msgstr "Openbaar vervoer: GTFSStops inschakelen"
 
-msgid "implicit"
-msgstr "impliciet"
+msgid "Public Transport: Catch GTFS stops"
+msgstr "Openbaar vervoer: GTFS-haltes vangen"
 
-msgid ""
-"The GPX file doesn''t contain valid trackpoints. Please use a GPX file that "
-"has trackpoints."
-msgstr ""
-"Het GPX-bestand bevat geen geldige punten voor een spoor. Gebruik een GPX-"
-"bestand dat punten voor een spoor bevat."
+msgid "skipped"
+msgstr "overgeslagen"
 
-msgid "GPX File Trouble"
-msgstr "Probleem met GPX-bestand"
+msgid "Public Transport: Disable GTFS"
+msgstr "Openbaar vervoer: GTFS uitschakelen"
 
-msgid "unnamed"
-msgstr "naamloos"
+msgid "Public Transport: Join GTFS stops"
+msgstr "Openbaar vervoer: GTFS-haltes verbinden"
+
+msgid "Public Transport: Change stop type"
+msgstr "Openbaar vervoer: Wijzig type van halte"
 
 msgid "Public Transport: Add track stop"
 msgstr "Openbaar vervoer: Voeg halte spoor toe"
@@ -36003,9 +36004,6 @@ msgstr "Openbaar vervoer: Lijst met haltes voor spoor sorteren"
 msgid "Public Transport: Suggest stops"
 msgstr "openbaar vervoer: Voorgestelde haltes"
 
-msgid "Stopname"
-msgstr "Haltenaam"
-
 msgid "Public Transport: Detach waypoints"
 msgstr "Openbaar vervoer: Wegpunten vastmaken"
 
@@ -36018,6 +36016,91 @@ msgstr "Openbaar vervoer: Wegpunten inschakelen"
 msgid "Public Transport: Edit waypoint name"
 msgstr "Openbaar vervoer: Naam wegpunt bewerken"
 
+msgid "rail"
+msgstr "spoor"
+
+msgid "Can''t parse a time from this string."
+msgstr "Kan geen tijd parsen uit deze tekenreeks."
+
+msgid "Invalid value"
+msgstr "Ongeldige waarde"
+
+msgid "Create Stops from GTFS"
+msgstr "Haltes maken uit GTFS"
+
+msgid "GTFS-Stops"
+msgstr "GTFS-haltes"
+
+msgid "Type of stops to add"
+msgstr "Type halte om toe te voegen"
+
+msgid "Time on your GPS device"
+msgstr "Tijd op uw GPS-apparaat"
+
+msgid "HH:MM:SS.sss"
+msgstr "UU:MM:SS.sss"
+
+msgid "Time on your stopwatch"
+msgstr "Tijd op uw stopwatch"
+
+msgid "Time window"
+msgstr "Tijdvenster"
+
+msgid "seconds"
+msgstr "seconden"
+
+msgid "Move Threshold"
+msgstr "Drempel verplaatsen"
+
+msgid "Catch"
+msgstr "Vangen"
+
+msgid "Join"
+msgstr "Verbinden"
+
+msgid "Create Stops from GPX"
+msgstr "Maak haltes vanuit GPX"
+
+msgid "Tracks in this GPX file:"
+msgstr "Sporen in dit GPX-bestand:"
+
+msgid "Detach"
+msgstr "Vastmaken"
+
+msgid "implicit"
+msgstr "impliciet"
+
+msgid "State"
+msgstr "Staat"
+
+msgid "[incomplete]"
+msgstr "[incompleet]"
+
+msgid "[empty way]"
+msgstr "[lege weg]"
+
+msgid "[gap]"
+msgstr "[gat]"
+
+msgid "Stopname"
+msgstr "Haltenaam"
+
+msgid " [ID] {0}"
+msgstr " [ID] {0}"
+
+msgid ""
+"The GPX file doesn''t contain valid trackpoints. Please use a GPX file that "
+"has trackpoints."
+msgstr ""
+"Het GPX-bestand bevat geen geldige punten voor een spoor. Gebruik een GPX-"
+"bestand dat punten voor een spoor bevat."
+
+msgid "GPX File Trouble"
+msgstr "Probleem met GPX-bestand"
+
+msgid "unnamed"
+msgstr "naamloos"
+
 msgid "Distance between stops"
 msgstr "Afstand tussen haltes"
 
@@ -36787,6 +36870,9 @@ msgstr "Opent het dialoogvenster voor het bewerken van tags"
 msgid "JOSM Tag Editor Plugin"
 msgstr "JOSM plug-in Tag bewerken"
 
+msgid "Presets"
+msgstr "Voorkeuze"
+
 msgid "Abort tag editing and close dialog"
 msgstr "Afbreken van bewerken van tags en sluit het dialoogvenster"
 
@@ -38971,6 +39057,28 @@ msgid_plural "Overwrite ''{0}'' tags {1} from {2} with new value ''{3}''?"
 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 ""
+
+msgid ""
+"Find places of education at least 2km, and at most 3km from the center of "
+"the selection"
+msgstr ""
+"Zoek naar plaatsen voor onderwijs op ten minste 2 km afstand en ten hoogste "
+"3 km van het centrum van de selectie"
+
+msgid "Show/hide Sophox snippet list"
+msgstr ""
+
+msgid "help"
+msgstr "help"
+
+msgid "Server: "
+msgstr "Server: "
+
+msgid "Wikidata+OSM server"
+msgstr "Wikidata+OSM server"
+
 msgid "Search Wikidata items"
 msgstr "Zoeken in items van Wikidata"
 
@@ -39049,28 +39157,6 @@ msgstr ""
 "Voegt aan de geselecteerde objecten een tag ''wikipedia'' toe die "
 "overeenkomt met dit artikel"
 
-msgid "Download from Wikosm API"
-msgstr "Downloaden vanaf Wikosm API"
-
-msgid ""
-"Find places of education at least 2km, and at most 3km from the center of "
-"the selection"
-msgstr ""
-"Zoek naar plaatsen voor onderwijs op ten minste 2 km afstand en ten hoogste "
-"3 km van het centrum van de selectie"
-
-msgid "Show/hide Wikosm snippet list"
-msgstr "Wikosm snipperlijst tonen/verbergen"
-
-msgid "help"
-msgstr "help"
-
-msgid "Server: "
-msgstr "Server: "
-
-msgid "Wikidata+OSM server"
-msgstr "Wikidata+OSM server"
-
 msgid "The Ultimate WMS Super-speed Turbo Challenge II"
 msgstr "De Ultimate WMS Super-speed Turbo Challenge II"
 
diff --git a/i18n/po/nn.po b/i18n/po/nn.po
index 23d95aa..ab6e7a8 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-10-30 03:38+0100\n"
+"POT-Creation-Date: 2017-11-26 00:06+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-10-30 04:55+0000\n"
-"X-Generator: Launchpad (build 18493)\n"
+"X-Launchpad-Export-Date: 2017-11-26 04:57+0000\n"
+"X-Generator: Launchpad (build 18509)\n"
 "Language: nn\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -421,12 +421,15 @@ msgstr ""
 msgid "Delete the active layer. Does not delete the associated file."
 msgstr ""
 
-msgid "Toggle dialogs panel"
+msgid "Dialogs panel"
 msgstr ""
 
 msgid "Toggle dialogs panel, maximize mapview"
 msgstr ""
 
+msgid "Toggle dialogs panel"
+msgstr ""
+
 msgid "Distribute Nodes"
 msgstr ""
 
@@ -6488,6 +6491,9 @@ msgstr ""
 msgid "Coordinates (projected): "
 msgstr ""
 
+msgid "UTM Zone"
+msgstr ""
+
 msgid "Part of: "
 msgstr ""
 
@@ -8786,6 +8792,11 @@ msgstr ""
 msgid "Check \"Save\" to save the layer to the file specified on the left."
 msgstr ""
 
+msgid ""
+"A background upload is already in progress. Kindly wait for it to finish "
+"before uploading new changes"
+msgstr ""
+
 msgid "I would like someone to review my edits."
 msgstr ""
 
@@ -9894,6 +9905,9 @@ msgstr ""
 msgid "Save Layer"
 msgstr ""
 
+msgid "Trying to set a read only data layer as edit layer"
+msgstr ""
+
 msgid "{0} note"
 msgid_plural "{0} notes"
 msgstr[0] ""
@@ -10724,11 +10738,6 @@ msgstr ""
 msgid "Failed to parse Mappaint styles from ''{0}''. Error was: {1}"
 msgstr ""
 
-msgid ""
-"Detected deprecated ''{0}'' in ''{1}'' which will be removed shortly. Use "
-"''{2}'' instead."
-msgstr ""
-
 msgid "Failed to locate image ''{0}''"
 msgstr ""
 
@@ -11893,6 +11902,9 @@ msgstr ""
 msgid "Show object ID in selection lists"
 msgstr ""
 
+msgid "Show node coordinates in selection lists"
+msgstr ""
+
 msgid "Show localized name in selection lists"
 msgstr ""
 
@@ -12649,9 +12661,6 @@ msgstr ""
 msgid "UTM"
 msgstr ""
 
-msgid "UTM Zone"
-msgstr ""
-
 msgid "North"
 msgstr ""
 
@@ -13119,9 +13128,6 @@ msgstr ""
 msgid "Error parsing {0}: "
 msgstr ""
 
-msgid "Presets"
-msgstr ""
-
 msgid "Search for objects by preset..."
 msgstr ""
 
@@ -15663,6 +15669,18 @@ msgstr ""
 msgid "korean"
 msgstr ""
 
+msgid "donut"
+msgstr ""
+
+msgid "mediterranean"
+msgstr ""
+
+msgid "friture"
+msgstr ""
+
+msgid "crepe"
+msgstr ""
+
 msgid "Internet access"
 msgstr ""
 
@@ -18505,7 +18523,16 @@ msgstr ""
 msgid "Tents allowed"
 msgstr ""
 
-msgid "Camping Site"
+msgid "Campsite"
+msgstr ""
+
+msgid "Caravans allowed"
+msgstr ""
+
+msgid "Backcountry"
+msgstr ""
+
+msgid "Group only access"
 msgstr ""
 
 msgid "Food+Drinks"
@@ -23334,6 +23361,14 @@ msgid ""
 "resolution or better, and refreshed more frequently with ongoing updates."
 msgstr ""
 
+msgid "DigitalGlobe Premium Imagery Vintage"
+msgstr ""
+
+msgid ""
+"Imagery boundaries and capture dates. Labels appear at zoom level 14 and "
+"higher."
+msgstr ""
+
 msgid "DigitalGlobe Standard Imagery"
 msgstr ""
 
@@ -23343,6 +23378,9 @@ msgid ""
 "Landsat. Average age is 2.31 years, with some areas updated 2x per year."
 msgstr ""
 
+msgid "DigitalGlobe Standard Imagery Vintage"
+msgstr ""
+
 msgid "Esri World Imagery"
 msgstr ""
 
@@ -23406,6 +23444,12 @@ msgstr ""
 msgid "Strava cycling and running heatmap"
 msgstr ""
 
+msgid "Strava water sports heatmap"
+msgstr ""
+
+msgid "Strava winter sports heatmap"
+msgstr ""
+
 msgid "Locator Overlay"
 msgstr ""
 
@@ -23810,6 +23854,9 @@ msgstr ""
 msgid "SPW(allonie) most recent aerial imagery"
 msgstr ""
 
+msgid "SPW(allonie) 2016 aerial imagery"
+msgstr ""
+
 msgid "SPW(allonie) 2015 aerial imagery"
 msgstr ""
 
@@ -23855,6 +23902,14 @@ msgstr ""
 msgid "Addresses data from IBGE"
 msgstr ""
 
+msgid "Street names IBGE Salvador-BA"
+msgstr ""
+
+msgid ""
+"Streets geometry and names of Salvador, Bahia. Source: Faces de Logradouro - "
+"IBGE."
+msgstr ""
+
 msgid "Rio Mosaic 2013"
 msgstr ""
 
@@ -24585,6 +24640,9 @@ msgstr ""
 msgid "Japan GSI ortho Imagery"
 msgstr ""
 
+msgid "Japan GSI Standard Map"
+msgstr ""
+
 msgid "imagico.de OSM images for mapping: Aral Sea (low water level)"
 msgstr ""
 
@@ -24614,7 +24672,7 @@ msgstr ""
 msgid "20cm ortho - Latvia - Coastline"
 msgstr ""
 
-msgid "1.cikla ortofotokarte - Latvia"
+msgid "Orthophoto 1st cycle (1994-1999) - Latvia"
 msgstr ""
 
 msgid "ORT10LT (Lithuania)"
@@ -24623,6 +24681,9 @@ msgstr ""
 msgid "geoportail.lu all layers"
 msgstr ""
 
+msgid "geoportail.lu ortho latest"
+msgstr ""
+
 msgid "geoportail.lu ortho 2016"
 msgstr ""
 
@@ -26113,6 +26174,9 @@ msgstr ""
 msgid "{0} on a node. Should be used on a way."
 msgstr ""
 
+msgid "{0} on a node. Should be used on a way or relation."
+msgstr ""
+
 msgid "{0} on a node. Should be drawn as an area."
 msgstr ""
 
@@ -26340,6 +26404,9 @@ msgstr ""
 msgid "Nodes duplicating parent way tags"
 msgstr ""
 
+msgid "{0} together with {1} and {2}. Remove {0}."
+msgstr ""
+
 msgid ""
 "wikipedia tag has no language given, use ''wikipedia''=''language:page "
 "title''"
@@ -27104,6 +27171,21 @@ msgstr ""
 msgid "Importing..."
 msgstr ""
 
+msgid "Shape is started incorrectly"
+msgstr ""
+
+msgid "Can''t load SVG diagram"
+msgstr ""
+
+msgid "Can''t find root SVG element"
+msgstr ""
+
+msgid "Import primitives"
+msgstr ""
+
+msgid "Cannot find configuration file!"
+msgstr ""
+
 msgid "DXF files [ImportDxf plugin] (*.dxf)"
 msgstr ""
 
@@ -27743,6 +27825,9 @@ msgstr ""
 msgid "Download mode"
 msgstr ""
 
+msgid "Number of images to be pre-fetched (forwards and backwards)"
+msgstr ""
+
 msgid "You are logged in as ''{0}''."
 msgstr ""
 
@@ -27953,8 +28038,17 @@ msgid "only when manually requested"
 msgstr ""
 
 msgid ""
-"The downloaded OSM area is too big. Download mode has been changed to OSM "
-"area until the layer is restarted."
+"The Mapillary layer has stopped downloading images, because the requested "
+"area is too big!"
+msgstr ""
+
+msgid ""
+"To solve this problem, you could zoom in and load a smaller area of the map."
+msgstr ""
+
+msgid ""
+"To solve this problem, you could switch to download mode ''{0}'' and load "
+"Mapillary images for a smaller portion of the map."
 msgstr ""
 
 msgid "Downloading"
@@ -31266,19 +31360,6 @@ msgstr ""
 msgid "Merge Overlap (combine)"
 msgstr ""
 
-msgid ""
-"<html>A role based relation membership was copied to all new ways.<br>You "
-"should verify this and correct it when necessary.</html>"
-msgstr ""
-
-msgid ""
-"<html>A relation membership was copied to all new ways.<br>You should verify "
-"this and correct it when necessary.</html>"
-msgstr ""
-
-msgid "Split way"
-msgstr ""
-
 msgid "Michigan Left"
 msgstr ""
 
@@ -32733,254 +32814,254 @@ msgstr ""
 msgid "PT: Route passes a oneway road in the wrong direction"
 msgstr ""
 
-msgid "moved"
+msgid "Create Stops from GTFS ..."
 msgstr ""
 
-msgid "rail"
+msgid "Create Stops from a GTFS file"
 msgstr ""
 
-msgid "Can''t parse a time from this string."
+msgid "Select GTFS file (stops.txt)"
 msgstr ""
 
-msgid "Invalid value"
+msgid "File \"{0}\" does not exist"
 msgstr ""
 
-msgid "added"
+msgid "IOException \"{0}\" occurred"
 msgstr ""
 
-msgid "Public Transport: Enable GTFSStops"
+msgid ""
+"There exists no dataset. Try to download data from the server or open an OSM "
+"file."
 msgstr ""
 
-msgid "Public Transport: Catch GTFS stops"
+msgid "No data found"
 msgstr ""
 
-msgid "skipped"
+msgid "The GTFS file was empty."
 msgstr ""
 
-msgid "Public Transport: Disable GTFS"
+msgid "[ID] {0}"
 msgstr ""
 
-msgid "Create Stops from GTFS ..."
+msgid "Route patterns ..."
 msgstr ""
 
-msgid "Create Stops from a GTFS file"
+msgid "Edit Route patterns for public transport"
 msgstr ""
 
-msgid "Select GTFS file (stops.txt)"
+msgid "Route Patterns"
 msgstr ""
 
-msgid "File \"{0}\" does not exist"
+msgid "Overview"
 msgstr ""
 
-msgid "IOException \"{0}\" occurred"
+msgid "Itinerary"
 msgstr ""
 
-msgid ""
-"There exists no dataset. Try to download data from the server or open an OSM "
-"file."
+msgid "Stops"
 msgstr ""
 
-msgid "No data found"
+msgid "Meta"
 msgstr ""
 
-msgid "The GTFS file was empty."
+msgid "Existing route patterns:"
 msgstr ""
 
-msgid "Create Stops from GTFS"
+msgid "Reflect"
 msgstr ""
 
-msgid "GTFS-Stops"
+msgid "Required tags:"
 msgstr ""
 
-msgid "Type of stops to add"
+msgid "Common tags:"
 msgstr ""
 
-msgid "Time on your GPS device"
+msgid "Additional tags:"
 msgstr ""
 
-msgid "HH:MM:SS.sss"
+msgid "Add a new Tag"
 msgstr ""
 
-msgid "Time on your stopwatch"
+msgid "Name/Id"
 msgstr ""
 
-msgid "Time window"
+msgid "Find"
 msgstr ""
 
-msgid "seconds"
+msgid "Show"
 msgstr ""
 
-msgid "Move Threshold"
+msgid "Mark"
 msgstr ""
 
-msgid "Suggest Stops"
+msgid "Ref"
 msgstr ""
 
-msgid "Find"
+msgid "Stops are possible on the"
 msgstr ""
 
-msgid "Show"
+msgid "right hand side"
 msgstr ""
 
-msgid "Mark"
+msgid "left hand side"
 msgstr ""
 
-msgid "Catch"
+msgid "Maximum distance from route"
 msgstr ""
 
-msgid "Join"
+msgid "Suggest Stops"
 msgstr ""
 
-msgid "Public Transport: Join GTFS stops"
+msgid "Create Stops from GPX ..."
 msgstr ""
 
-msgid "State"
+msgid "Create Stops from a GPX file"
 msgstr ""
 
-msgid "[incomplete]"
+msgid "Select GPX file"
 msgstr ""
 
-msgid "[empty way]"
+msgid "The GPX file contained no tracks or waypoints."
 msgstr ""
 
-msgid "[ID] {0}"
+msgid "moved"
 msgstr ""
 
-msgid "[gap]"
+msgid "added"
 msgstr ""
 
-msgid "Route patterns ..."
+msgid "Public Transport: Enable GTFSStops"
 msgstr ""
 
-msgid "Edit Route patterns for public transport"
+msgid "Public Transport: Catch GTFS stops"
 msgstr ""
 
-msgid "Route Patterns"
+msgid "skipped"
 msgstr ""
 
-msgid "Overview"
+msgid "Public Transport: Disable GTFS"
 msgstr ""
 
-msgid "Itinerary"
+msgid "Public Transport: Join GTFS stops"
 msgstr ""
 
-msgid "Stops"
+msgid "Public Transport: Change stop type"
 msgstr ""
 
-msgid "Meta"
+msgid "Public Transport: Add track stop"
 msgstr ""
 
-msgid "Existing route patterns:"
+msgid "Public Transport: Delete track stop"
 msgstr ""
 
-msgid "Reflect"
+msgid "Public Transport: Detach track stop list"
 msgstr ""
 
-msgid "Required tags:"
+msgid "Public Transport: Edit track stop list"
 msgstr ""
 
-msgid "Common tags:"
+msgid "Public Transport: Relocate nodes in track stoplist"
 msgstr ""
 
-msgid "Additional tags:"
+msgid "Public Transport: sort track stop list"
 msgstr ""
 
-msgid "Add a new Tag"
+msgid "Public Transport: Suggest stops"
 msgstr ""
 
-msgid "Name/Id"
+msgid "Public Transport: Detach waypoints"
 msgstr ""
 
-msgid "Ref"
+msgid "Public Transport: Disable waypoints"
 msgstr ""
 
-msgid "Stops are possible on the"
+msgid "Public Transport: Enable waypoints"
 msgstr ""
 
-msgid "right hand side"
+msgid "Public Transport: Edit waypoint name"
 msgstr ""
 
-msgid "left hand side"
+msgid "rail"
 msgstr ""
 
-msgid "Maximum distance from route"
+msgid "Can''t parse a time from this string."
 msgstr ""
 
-msgid " [ID] {0}"
+msgid "Invalid value"
 msgstr ""
 
-msgid "Public Transport: Change stop type"
+msgid "Create Stops from GTFS"
 msgstr ""
 
-msgid "Create Stops from GPX ..."
+msgid "GTFS-Stops"
 msgstr ""
 
-msgid "Create Stops from a GPX file"
+msgid "Type of stops to add"
 msgstr ""
 
-msgid "Select GPX file"
+msgid "Time on your GPS device"
 msgstr ""
 
-msgid "The GPX file contained no tracks or waypoints."
+msgid "HH:MM:SS.sss"
 msgstr ""
 
-msgid "Create Stops from GPX"
+msgid "Time on your stopwatch"
 msgstr ""
 
-msgid "Tracks in this GPX file:"
+msgid "Time window"
 msgstr ""
 
-msgid "Detach"
+msgid "seconds"
 msgstr ""
 
-msgid "implicit"
+msgid "Move Threshold"
 msgstr ""
 
-msgid ""
-"The GPX file doesn''t contain valid trackpoints. Please use a GPX file that "
-"has trackpoints."
+msgid "Catch"
 msgstr ""
 
-msgid "GPX File Trouble"
+msgid "Join"
 msgstr ""
 
-msgid "unnamed"
+msgid "Create Stops from GPX"
 msgstr ""
 
-msgid "Public Transport: Add track stop"
+msgid "Tracks in this GPX file:"
 msgstr ""
 
-msgid "Public Transport: Delete track stop"
+msgid "Detach"
 msgstr ""
 
-msgid "Public Transport: Detach track stop list"
+msgid "implicit"
 msgstr ""
 
-msgid "Public Transport: Edit track stop list"
+msgid "State"
 msgstr ""
 
-msgid "Public Transport: Relocate nodes in track stoplist"
+msgid "[incomplete]"
 msgstr ""
 
-msgid "Public Transport: sort track stop list"
+msgid "[empty way]"
 msgstr ""
 
-msgid "Public Transport: Suggest stops"
+msgid "[gap]"
 msgstr ""
 
 msgid "Stopname"
 msgstr ""
 
-msgid "Public Transport: Detach waypoints"
+msgid " [ID] {0}"
 msgstr ""
 
-msgid "Public Transport: Disable waypoints"
+msgid ""
+"The GPX file doesn''t contain valid trackpoints. Please use a GPX file that "
+"has trackpoints."
 msgstr ""
 
-msgid "Public Transport: Enable waypoints"
+msgid "GPX File Trouble"
 msgstr ""
 
-msgid "Public Transport: Edit waypoint name"
+msgid "unnamed"
 msgstr ""
 
 msgid "Distance between stops"
@@ -33709,6 +33790,9 @@ msgstr ""
 msgid "JOSM Tag Editor Plugin"
 msgstr ""
 
+msgid "Presets"
+msgstr ""
+
 msgid "Abort tag editing and close dialog"
 msgstr ""
 
@@ -35634,6 +35718,26 @@ msgid_plural "Overwrite ''{0}'' tags {1} from {2} with new value ''{3}''?"
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Download from Sophox API"
+msgstr ""
+
+msgid ""
+"Find places of education at least 2km, and at most 3km from the center of "
+"the selection"
+msgstr ""
+
+msgid "Show/hide Sophox snippet list"
+msgstr ""
+
+msgid "help"
+msgstr ""
+
+msgid "Server: "
+msgstr ""
+
+msgid "Wikidata+OSM server"
+msgstr ""
+
 msgid "Search Wikidata items"
 msgstr ""
 
@@ -35707,26 +35811,6 @@ msgid ""
 "objects"
 msgstr ""
 
-msgid "Download from Wikosm API"
-msgstr ""
-
-msgid ""
-"Find places of education at least 2km, and at most 3km from the center of "
-"the selection"
-msgstr ""
-
-msgid "Show/hide Wikosm snippet list"
-msgstr ""
-
-msgid "help"
-msgstr ""
-
-msgid "Server: "
-msgstr ""
-
-msgid "Wikidata+OSM server"
-msgstr ""
-
 msgid "The Ultimate WMS Super-speed Turbo Challenge II"
 msgstr ""
 
diff --git a/i18n/po/oc.po b/i18n/po/oc.po
index 8899470..0db034a 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-10-30 03:38+0100\n"
+"POT-Creation-Date: 2017-11-26 00:06+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-10-30 04:56+0000\n"
-"X-Generator: Launchpad (build 18493)\n"
+"X-Launchpad-Export-Date: 2017-11-26 04:58+0000\n"
+"X-Generator: Launchpad (build 18509)\n"
 "Language: \n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -427,12 +427,15 @@ msgstr ""
 msgid "Delete the active layer. Does not delete the associated file."
 msgstr ""
 
-msgid "Toggle dialogs panel"
+msgid "Dialogs panel"
 msgstr ""
 
 msgid "Toggle dialogs panel, maximize mapview"
 msgstr ""
 
+msgid "Toggle dialogs panel"
+msgstr ""
+
 msgid "Distribute Nodes"
 msgstr ""
 
@@ -6495,6 +6498,9 @@ msgstr ""
 msgid "Coordinates (projected): "
 msgstr ""
 
+msgid "UTM Zone"
+msgstr ""
+
 msgid "Part of: "
 msgstr ""
 
@@ -8793,6 +8799,11 @@ msgstr ""
 msgid "Check \"Save\" to save the layer to the file specified on the left."
 msgstr ""
 
+msgid ""
+"A background upload is already in progress. Kindly wait for it to finish "
+"before uploading new changes"
+msgstr ""
+
 msgid "I would like someone to review my edits."
 msgstr ""
 
@@ -9901,6 +9912,9 @@ msgstr ""
 msgid "Save Layer"
 msgstr "Salvar lo calc"
 
+msgid "Trying to set a read only data layer as edit layer"
+msgstr ""
+
 msgid "{0} note"
 msgid_plural "{0} notes"
 msgstr[0] ""
@@ -10733,11 +10747,6 @@ msgstr ""
 msgid "Failed to parse Mappaint styles from ''{0}''. Error was: {1}"
 msgstr ""
 
-msgid ""
-"Detected deprecated ''{0}'' in ''{1}'' which will be removed shortly. Use "
-"''{2}'' instead."
-msgstr ""
-
 msgid "Failed to locate image ''{0}''"
 msgstr ""
 
@@ -11902,6 +11911,9 @@ msgstr ""
 msgid "Show object ID in selection lists"
 msgstr ""
 
+msgid "Show node coordinates in selection lists"
+msgstr ""
+
 msgid "Show localized name in selection lists"
 msgstr ""
 
@@ -12658,9 +12670,6 @@ msgstr ""
 msgid "UTM"
 msgstr "UTM"
 
-msgid "UTM Zone"
-msgstr ""
-
 msgid "North"
 msgstr ""
 
@@ -13128,9 +13137,6 @@ msgstr ""
 msgid "Error parsing {0}: "
 msgstr ""
 
-msgid "Presets"
-msgstr "Prereglatges"
-
 msgid "Search for objects by preset..."
 msgstr ""
 
@@ -15672,6 +15678,18 @@ msgstr ""
 msgid "korean"
 msgstr ""
 
+msgid "donut"
+msgstr ""
+
+msgid "mediterranean"
+msgstr ""
+
+msgid "friture"
+msgstr ""
+
+msgid "crepe"
+msgstr ""
+
 msgid "Internet access"
 msgstr ""
 
@@ -18514,7 +18532,16 @@ msgstr ""
 msgid "Tents allowed"
 msgstr ""
 
-msgid "Camping Site"
+msgid "Campsite"
+msgstr ""
+
+msgid "Caravans allowed"
+msgstr ""
+
+msgid "Backcountry"
+msgstr ""
+
+msgid "Group only access"
 msgstr ""
 
 msgid "Food+Drinks"
@@ -23343,6 +23370,14 @@ msgid ""
 "resolution or better, and refreshed more frequently with ongoing updates."
 msgstr ""
 
+msgid "DigitalGlobe Premium Imagery Vintage"
+msgstr ""
+
+msgid ""
+"Imagery boundaries and capture dates. Labels appear at zoom level 14 and "
+"higher."
+msgstr ""
+
 msgid "DigitalGlobe Standard Imagery"
 msgstr ""
 
@@ -23352,6 +23387,9 @@ msgid ""
 "Landsat. Average age is 2.31 years, with some areas updated 2x per year."
 msgstr ""
 
+msgid "DigitalGlobe Standard Imagery Vintage"
+msgstr ""
+
 msgid "Esri World Imagery"
 msgstr ""
 
@@ -23415,6 +23453,12 @@ msgstr ""
 msgid "Strava cycling and running heatmap"
 msgstr ""
 
+msgid "Strava water sports heatmap"
+msgstr ""
+
+msgid "Strava winter sports heatmap"
+msgstr ""
+
 msgid "Locator Overlay"
 msgstr ""
 
@@ -23819,6 +23863,9 @@ msgstr ""
 msgid "SPW(allonie) most recent aerial imagery"
 msgstr ""
 
+msgid "SPW(allonie) 2016 aerial imagery"
+msgstr ""
+
 msgid "SPW(allonie) 2015 aerial imagery"
 msgstr ""
 
@@ -23864,6 +23911,14 @@ msgstr ""
 msgid "Addresses data from IBGE"
 msgstr ""
 
+msgid "Street names IBGE Salvador-BA"
+msgstr ""
+
+msgid ""
+"Streets geometry and names of Salvador, Bahia. Source: Faces de Logradouro - "
+"IBGE."
+msgstr ""
+
 msgid "Rio Mosaic 2013"
 msgstr ""
 
@@ -24594,6 +24649,9 @@ msgstr ""
 msgid "Japan GSI ortho Imagery"
 msgstr ""
 
+msgid "Japan GSI Standard Map"
+msgstr ""
+
 msgid "imagico.de OSM images for mapping: Aral Sea (low water level)"
 msgstr ""
 
@@ -24623,7 +24681,7 @@ msgstr ""
 msgid "20cm ortho - Latvia - Coastline"
 msgstr ""
 
-msgid "1.cikla ortofotokarte - Latvia"
+msgid "Orthophoto 1st cycle (1994-1999) - Latvia"
 msgstr ""
 
 msgid "ORT10LT (Lithuania)"
@@ -24632,6 +24690,9 @@ msgstr ""
 msgid "geoportail.lu all layers"
 msgstr ""
 
+msgid "geoportail.lu ortho latest"
+msgstr ""
+
 msgid "geoportail.lu ortho 2016"
 msgstr ""
 
@@ -26122,6 +26183,9 @@ msgstr ""
 msgid "{0} on a node. Should be used on a way."
 msgstr ""
 
+msgid "{0} on a node. Should be used on a way or relation."
+msgstr ""
+
 msgid "{0} on a node. Should be drawn as an area."
 msgstr ""
 
@@ -26349,6 +26413,9 @@ msgstr ""
 msgid "Nodes duplicating parent way tags"
 msgstr ""
 
+msgid "{0} together with {1} and {2}. Remove {0}."
+msgstr ""
+
 msgid ""
 "wikipedia tag has no language given, use ''wikipedia''=''language:page "
 "title''"
@@ -27113,6 +27180,21 @@ msgstr ""
 msgid "Importing..."
 msgstr ""
 
+msgid "Shape is started incorrectly"
+msgstr ""
+
+msgid "Can''t load SVG diagram"
+msgstr ""
+
+msgid "Can''t find root SVG element"
+msgstr ""
+
+msgid "Import primitives"
+msgstr ""
+
+msgid "Cannot find configuration file!"
+msgstr ""
+
 msgid "DXF files [ImportDxf plugin] (*.dxf)"
 msgstr ""
 
@@ -27752,6 +27834,9 @@ msgstr ""
 msgid "Download mode"
 msgstr ""
 
+msgid "Number of images to be pre-fetched (forwards and backwards)"
+msgstr ""
+
 msgid "You are logged in as ''{0}''."
 msgstr ""
 
@@ -27962,8 +28047,17 @@ msgid "only when manually requested"
 msgstr ""
 
 msgid ""
-"The downloaded OSM area is too big. Download mode has been changed to OSM "
-"area until the layer is restarted."
+"The Mapillary layer has stopped downloading images, because the requested "
+"area is too big!"
+msgstr ""
+
+msgid ""
+"To solve this problem, you could zoom in and load a smaller area of the map."
+msgstr ""
+
+msgid ""
+"To solve this problem, you could switch to download mode ''{0}'' and load "
+"Mapillary images for a smaller portion of the map."
 msgstr ""
 
 msgid "Downloading"
@@ -31275,19 +31369,6 @@ msgstr ""
 msgid "Merge Overlap (combine)"
 msgstr ""
 
-msgid ""
-"<html>A role based relation membership was copied to all new ways.<br>You "
-"should verify this and correct it when necessary.</html>"
-msgstr ""
-
-msgid ""
-"<html>A relation membership was copied to all new ways.<br>You should verify "
-"this and correct it when necessary.</html>"
-msgstr ""
-
-msgid "Split way"
-msgstr ""
-
 msgid "Michigan Left"
 msgstr ""
 
@@ -32742,254 +32823,254 @@ msgstr ""
 msgid "PT: Route passes a oneway road in the wrong direction"
 msgstr ""
 
-msgid "moved"
+msgid "Create Stops from GTFS ..."
 msgstr ""
 
-msgid "rail"
+msgid "Create Stops from a GTFS file"
 msgstr ""
 
-msgid "Can''t parse a time from this string."
+msgid "Select GTFS file (stops.txt)"
 msgstr ""
 
-msgid "Invalid value"
+msgid "File \"{0}\" does not exist"
 msgstr ""
 
-msgid "added"
+msgid "IOException \"{0}\" occurred"
 msgstr ""
 
-msgid "Public Transport: Enable GTFSStops"
+msgid ""
+"There exists no dataset. Try to download data from the server or open an OSM "
+"file."
 msgstr ""
 
-msgid "Public Transport: Catch GTFS stops"
+msgid "No data found"
 msgstr ""
 
-msgid "skipped"
+msgid "The GTFS file was empty."
 msgstr ""
 
-msgid "Public Transport: Disable GTFS"
+msgid "[ID] {0}"
 msgstr ""
 
-msgid "Create Stops from GTFS ..."
+msgid "Route patterns ..."
 msgstr ""
 
-msgid "Create Stops from a GTFS file"
+msgid "Edit Route patterns for public transport"
 msgstr ""
 
-msgid "Select GTFS file (stops.txt)"
+msgid "Route Patterns"
 msgstr ""
 
-msgid "File \"{0}\" does not exist"
+msgid "Overview"
 msgstr ""
 
-msgid "IOException \"{0}\" occurred"
+msgid "Itinerary"
 msgstr ""
 
-msgid ""
-"There exists no dataset. Try to download data from the server or open an OSM "
-"file."
+msgid "Stops"
 msgstr ""
 
-msgid "No data found"
+msgid "Meta"
 msgstr ""
 
-msgid "The GTFS file was empty."
+msgid "Existing route patterns:"
 msgstr ""
 
-msgid "Create Stops from GTFS"
+msgid "Reflect"
 msgstr ""
 
-msgid "GTFS-Stops"
+msgid "Required tags:"
 msgstr ""
 
-msgid "Type of stops to add"
+msgid "Common tags:"
 msgstr ""
 
-msgid "Time on your GPS device"
+msgid "Additional tags:"
 msgstr ""
 
-msgid "HH:MM:SS.sss"
+msgid "Add a new Tag"
 msgstr ""
 
-msgid "Time on your stopwatch"
+msgid "Name/Id"
 msgstr ""
 
-msgid "Time window"
+msgid "Find"
 msgstr ""
 
-msgid "seconds"
-msgstr ""
+msgid "Show"
+msgstr "Afichar"
 
-msgid "Move Threshold"
+msgid "Mark"
 msgstr ""
 
-msgid "Suggest Stops"
+msgid "Ref"
 msgstr ""
 
-msgid "Find"
+msgid "Stops are possible on the"
 msgstr ""
 
-msgid "Show"
-msgstr "Afichar"
+msgid "right hand side"
+msgstr ""
 
-msgid "Mark"
+msgid "left hand side"
 msgstr ""
 
-msgid "Catch"
+msgid "Maximum distance from route"
 msgstr ""
 
-msgid "Join"
+msgid "Suggest Stops"
 msgstr ""
 
-msgid "Public Transport: Join GTFS stops"
+msgid "Create Stops from GPX ..."
 msgstr ""
 
-msgid "State"
+msgid "Create Stops from a GPX file"
 msgstr ""
 
-msgid "[incomplete]"
+msgid "Select GPX file"
 msgstr ""
 
-msgid "[empty way]"
+msgid "The GPX file contained no tracks or waypoints."
 msgstr ""
 
-msgid "[ID] {0}"
+msgid "moved"
 msgstr ""
 
-msgid "[gap]"
+msgid "added"
 msgstr ""
 
-msgid "Route patterns ..."
+msgid "Public Transport: Enable GTFSStops"
 msgstr ""
 
-msgid "Edit Route patterns for public transport"
+msgid "Public Transport: Catch GTFS stops"
 msgstr ""
 
-msgid "Route Patterns"
+msgid "skipped"
 msgstr ""
 
-msgid "Overview"
+msgid "Public Transport: Disable GTFS"
 msgstr ""
 
-msgid "Itinerary"
+msgid "Public Transport: Join GTFS stops"
 msgstr ""
 
-msgid "Stops"
+msgid "Public Transport: Change stop type"
 msgstr ""
 
-msgid "Meta"
+msgid "Public Transport: Add track stop"
 msgstr ""
 
-msgid "Existing route patterns:"
+msgid "Public Transport: Delete track stop"
 msgstr ""
 
-msgid "Reflect"
+msgid "Public Transport: Detach track stop list"
 msgstr ""
 
-msgid "Required tags:"
+msgid "Public Transport: Edit track stop list"
 msgstr ""
 
-msgid "Common tags:"
+msgid "Public Transport: Relocate nodes in track stoplist"
 msgstr ""
 
-msgid "Additional tags:"
+msgid "Public Transport: sort track stop list"
 msgstr ""
 
-msgid "Add a new Tag"
+msgid "Public Transport: Suggest stops"
 msgstr ""
 
-msgid "Name/Id"
+msgid "Public Transport: Detach waypoints"
 msgstr ""
 
-msgid "Ref"
+msgid "Public Transport: Disable waypoints"
 msgstr ""
 
-msgid "Stops are possible on the"
+msgid "Public Transport: Enable waypoints"
 msgstr ""
 
-msgid "right hand side"
+msgid "Public Transport: Edit waypoint name"
 msgstr ""
 
-msgid "left hand side"
+msgid "rail"
 msgstr ""
 
-msgid "Maximum distance from route"
+msgid "Can''t parse a time from this string."
 msgstr ""
 
-msgid " [ID] {0}"
+msgid "Invalid value"
 msgstr ""
 
-msgid "Public Transport: Change stop type"
+msgid "Create Stops from GTFS"
 msgstr ""
 
-msgid "Create Stops from GPX ..."
+msgid "GTFS-Stops"
 msgstr ""
 
-msgid "Create Stops from a GPX file"
+msgid "Type of stops to add"
 msgstr ""
 
-msgid "Select GPX file"
+msgid "Time on your GPS device"
 msgstr ""
 
-msgid "The GPX file contained no tracks or waypoints."
+msgid "HH:MM:SS.sss"
 msgstr ""
 
-msgid "Create Stops from GPX"
+msgid "Time on your stopwatch"
 msgstr ""
 
-msgid "Tracks in this GPX file:"
+msgid "Time window"
 msgstr ""
 
-msgid "Detach"
+msgid "seconds"
 msgstr ""
 
-msgid "implicit"
+msgid "Move Threshold"
 msgstr ""
 
-msgid ""
-"The GPX file doesn''t contain valid trackpoints. Please use a GPX file that "
-"has trackpoints."
+msgid "Catch"
 msgstr ""
 
-msgid "GPX File Trouble"
+msgid "Join"
 msgstr ""
 
-msgid "unnamed"
+msgid "Create Stops from GPX"
 msgstr ""
 
-msgid "Public Transport: Add track stop"
+msgid "Tracks in this GPX file:"
 msgstr ""
 
-msgid "Public Transport: Delete track stop"
+msgid "Detach"
 msgstr ""
 
-msgid "Public Transport: Detach track stop list"
+msgid "implicit"
 msgstr ""
 
-msgid "Public Transport: Edit track stop list"
+msgid "State"
 msgstr ""
 
-msgid "Public Transport: Relocate nodes in track stoplist"
+msgid "[incomplete]"
 msgstr ""
 
-msgid "Public Transport: sort track stop list"
+msgid "[empty way]"
 msgstr ""
 
-msgid "Public Transport: Suggest stops"
+msgid "[gap]"
 msgstr ""
 
 msgid "Stopname"
 msgstr ""
 
-msgid "Public Transport: Detach waypoints"
+msgid " [ID] {0}"
 msgstr ""
 
-msgid "Public Transport: Disable waypoints"
+msgid ""
+"The GPX file doesn''t contain valid trackpoints. Please use a GPX file that "
+"has trackpoints."
 msgstr ""
 
-msgid "Public Transport: Enable waypoints"
+msgid "GPX File Trouble"
 msgstr ""
 
-msgid "Public Transport: Edit waypoint name"
+msgid "unnamed"
 msgstr ""
 
 msgid "Distance between stops"
@@ -33718,6 +33799,9 @@ msgstr ""
 msgid "JOSM Tag Editor Plugin"
 msgstr ""
 
+msgid "Presets"
+msgstr "Prereglatges"
+
 msgid "Abort tag editing and close dialog"
 msgstr ""
 
@@ -35643,6 +35727,26 @@ msgid_plural "Overwrite ''{0}'' tags {1} from {2} with new value ''{3}''?"
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Download from Sophox API"
+msgstr ""
+
+msgid ""
+"Find places of education at least 2km, and at most 3km from the center of "
+"the selection"
+msgstr ""
+
+msgid "Show/hide Sophox snippet list"
+msgstr ""
+
+msgid "help"
+msgstr ""
+
+msgid "Server: "
+msgstr ""
+
+msgid "Wikidata+OSM server"
+msgstr ""
+
 msgid "Search Wikidata items"
 msgstr ""
 
@@ -35716,26 +35820,6 @@ msgid ""
 "objects"
 msgstr ""
 
-msgid "Download from Wikosm API"
-msgstr ""
-
-msgid ""
-"Find places of education at least 2km, and at most 3km from the center of "
-"the selection"
-msgstr ""
-
-msgid "Show/hide Wikosm snippet list"
-msgstr ""
-
-msgid "help"
-msgstr ""
-
-msgid "Server: "
-msgstr ""
-
-msgid "Wikidata+OSM server"
-msgstr ""
-
 msgid "The Ultimate WMS Super-speed Turbo Challenge II"
 msgstr ""
 
diff --git a/i18n/po/pa.po b/i18n/po/pa.po
index 41b3b71..5c4169e 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-10-30 03:38+0100\n"
+"POT-Creation-Date: 2017-11-26 00:06+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-10-30 04:56+0000\n"
-"X-Generator: Launchpad (build 18493)\n"
+"X-Launchpad-Export-Date: 2017-11-26 04:58+0000\n"
+"X-Generator: Launchpad (build 18509)\n"
 "Language: pa\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -421,12 +421,15 @@ msgstr ""
 msgid "Delete the active layer. Does not delete the associated file."
 msgstr ""
 
-msgid "Toggle dialogs panel"
+msgid "Dialogs panel"
 msgstr ""
 
 msgid "Toggle dialogs panel, maximize mapview"
 msgstr ""
 
+msgid "Toggle dialogs panel"
+msgstr ""
+
 msgid "Distribute Nodes"
 msgstr ""
 
@@ -6488,6 +6491,9 @@ msgstr ""
 msgid "Coordinates (projected): "
 msgstr ""
 
+msgid "UTM Zone"
+msgstr ""
+
 msgid "Part of: "
 msgstr ""
 
@@ -8786,6 +8792,11 @@ msgstr ""
 msgid "Check \"Save\" to save the layer to the file specified on the left."
 msgstr ""
 
+msgid ""
+"A background upload is already in progress. Kindly wait for it to finish "
+"before uploading new changes"
+msgstr ""
+
 msgid "I would like someone to review my edits."
 msgstr ""
 
@@ -9894,6 +9905,9 @@ msgstr ""
 msgid "Save Layer"
 msgstr ""
 
+msgid "Trying to set a read only data layer as edit layer"
+msgstr ""
+
 msgid "{0} note"
 msgid_plural "{0} notes"
 msgstr[0] ""
@@ -10724,11 +10738,6 @@ msgstr ""
 msgid "Failed to parse Mappaint styles from ''{0}''. Error was: {1}"
 msgstr ""
 
-msgid ""
-"Detected deprecated ''{0}'' in ''{1}'' which will be removed shortly. Use "
-"''{2}'' instead."
-msgstr ""
-
 msgid "Failed to locate image ''{0}''"
 msgstr ""
 
@@ -11893,6 +11902,9 @@ msgstr ""
 msgid "Show object ID in selection lists"
 msgstr ""
 
+msgid "Show node coordinates in selection lists"
+msgstr ""
+
 msgid "Show localized name in selection lists"
 msgstr ""
 
@@ -12649,9 +12661,6 @@ msgstr ""
 msgid "UTM"
 msgstr ""
 
-msgid "UTM Zone"
-msgstr ""
-
 msgid "North"
 msgstr ""
 
@@ -13119,9 +13128,6 @@ msgstr ""
 msgid "Error parsing {0}: "
 msgstr ""
 
-msgid "Presets"
-msgstr ""
-
 msgid "Search for objects by preset..."
 msgstr ""
 
@@ -15663,6 +15669,18 @@ msgstr ""
 msgid "korean"
 msgstr ""
 
+msgid "donut"
+msgstr ""
+
+msgid "mediterranean"
+msgstr ""
+
+msgid "friture"
+msgstr ""
+
+msgid "crepe"
+msgstr ""
+
 msgid "Internet access"
 msgstr ""
 
@@ -18505,7 +18523,16 @@ msgstr ""
 msgid "Tents allowed"
 msgstr ""
 
-msgid "Camping Site"
+msgid "Campsite"
+msgstr ""
+
+msgid "Caravans allowed"
+msgstr ""
+
+msgid "Backcountry"
+msgstr ""
+
+msgid "Group only access"
 msgstr ""
 
 msgid "Food+Drinks"
@@ -23334,6 +23361,14 @@ msgid ""
 "resolution or better, and refreshed more frequently with ongoing updates."
 msgstr ""
 
+msgid "DigitalGlobe Premium Imagery Vintage"
+msgstr ""
+
+msgid ""
+"Imagery boundaries and capture dates. Labels appear at zoom level 14 and "
+"higher."
+msgstr ""
+
 msgid "DigitalGlobe Standard Imagery"
 msgstr ""
 
@@ -23343,6 +23378,9 @@ msgid ""
 "Landsat. Average age is 2.31 years, with some areas updated 2x per year."
 msgstr ""
 
+msgid "DigitalGlobe Standard Imagery Vintage"
+msgstr ""
+
 msgid "Esri World Imagery"
 msgstr ""
 
@@ -23406,6 +23444,12 @@ msgstr ""
 msgid "Strava cycling and running heatmap"
 msgstr ""
 
+msgid "Strava water sports heatmap"
+msgstr ""
+
+msgid "Strava winter sports heatmap"
+msgstr ""
+
 msgid "Locator Overlay"
 msgstr ""
 
@@ -23810,6 +23854,9 @@ msgstr ""
 msgid "SPW(allonie) most recent aerial imagery"
 msgstr ""
 
+msgid "SPW(allonie) 2016 aerial imagery"
+msgstr ""
+
 msgid "SPW(allonie) 2015 aerial imagery"
 msgstr ""
 
@@ -23855,6 +23902,14 @@ msgstr ""
 msgid "Addresses data from IBGE"
 msgstr ""
 
+msgid "Street names IBGE Salvador-BA"
+msgstr ""
+
+msgid ""
+"Streets geometry and names of Salvador, Bahia. Source: Faces de Logradouro - "
+"IBGE."
+msgstr ""
+
 msgid "Rio Mosaic 2013"
 msgstr ""
 
@@ -24585,6 +24640,9 @@ msgstr ""
 msgid "Japan GSI ortho Imagery"
 msgstr ""
 
+msgid "Japan GSI Standard Map"
+msgstr ""
+
 msgid "imagico.de OSM images for mapping: Aral Sea (low water level)"
 msgstr ""
 
@@ -24614,7 +24672,7 @@ msgstr ""
 msgid "20cm ortho - Latvia - Coastline"
 msgstr ""
 
-msgid "1.cikla ortofotokarte - Latvia"
+msgid "Orthophoto 1st cycle (1994-1999) - Latvia"
 msgstr ""
 
 msgid "ORT10LT (Lithuania)"
@@ -24623,6 +24681,9 @@ msgstr ""
 msgid "geoportail.lu all layers"
 msgstr ""
 
+msgid "geoportail.lu ortho latest"
+msgstr ""
+
 msgid "geoportail.lu ortho 2016"
 msgstr ""
 
@@ -26113,6 +26174,9 @@ msgstr ""
 msgid "{0} on a node. Should be used on a way."
 msgstr ""
 
+msgid "{0} on a node. Should be used on a way or relation."
+msgstr ""
+
 msgid "{0} on a node. Should be drawn as an area."
 msgstr ""
 
@@ -26340,6 +26404,9 @@ msgstr ""
 msgid "Nodes duplicating parent way tags"
 msgstr ""
 
+msgid "{0} together with {1} and {2}. Remove {0}."
+msgstr ""
+
 msgid ""
 "wikipedia tag has no language given, use ''wikipedia''=''language:page "
 "title''"
@@ -27104,6 +27171,21 @@ msgstr ""
 msgid "Importing..."
 msgstr ""
 
+msgid "Shape is started incorrectly"
+msgstr ""
+
+msgid "Can''t load SVG diagram"
+msgstr ""
+
+msgid "Can''t find root SVG element"
+msgstr ""
+
+msgid "Import primitives"
+msgstr ""
+
+msgid "Cannot find configuration file!"
+msgstr ""
+
 msgid "DXF files [ImportDxf plugin] (*.dxf)"
 msgstr ""
 
@@ -27743,6 +27825,9 @@ msgstr ""
 msgid "Download mode"
 msgstr ""
 
+msgid "Number of images to be pre-fetched (forwards and backwards)"
+msgstr ""
+
 msgid "You are logged in as ''{0}''."
 msgstr ""
 
@@ -27953,8 +28038,17 @@ msgid "only when manually requested"
 msgstr ""
 
 msgid ""
-"The downloaded OSM area is too big. Download mode has been changed to OSM "
-"area until the layer is restarted."
+"The Mapillary layer has stopped downloading images, because the requested "
+"area is too big!"
+msgstr ""
+
+msgid ""
+"To solve this problem, you could zoom in and load a smaller area of the map."
+msgstr ""
+
+msgid ""
+"To solve this problem, you could switch to download mode ''{0}'' and load "
+"Mapillary images for a smaller portion of the map."
 msgstr ""
 
 msgid "Downloading"
@@ -31266,19 +31360,6 @@ msgstr ""
 msgid "Merge Overlap (combine)"
 msgstr ""
 
-msgid ""
-"<html>A role based relation membership was copied to all new ways.<br>You "
-"should verify this and correct it when necessary.</html>"
-msgstr ""
-
-msgid ""
-"<html>A relation membership was copied to all new ways.<br>You should verify "
-"this and correct it when necessary.</html>"
-msgstr ""
-
-msgid "Split way"
-msgstr ""
-
 msgid "Michigan Left"
 msgstr ""
 
@@ -32733,254 +32814,254 @@ msgstr ""
 msgid "PT: Route passes a oneway road in the wrong direction"
 msgstr ""
 
-msgid "moved"
+msgid "Create Stops from GTFS ..."
 msgstr ""
 
-msgid "rail"
+msgid "Create Stops from a GTFS file"
 msgstr ""
 
-msgid "Can''t parse a time from this string."
+msgid "Select GTFS file (stops.txt)"
 msgstr ""
 
-msgid "Invalid value"
+msgid "File \"{0}\" does not exist"
 msgstr ""
 
-msgid "added"
+msgid "IOException \"{0}\" occurred"
 msgstr ""
 
-msgid "Public Transport: Enable GTFSStops"
+msgid ""
+"There exists no dataset. Try to download data from the server or open an OSM "
+"file."
 msgstr ""
 
-msgid "Public Transport: Catch GTFS stops"
+msgid "No data found"
 msgstr ""
 
-msgid "skipped"
+msgid "The GTFS file was empty."
 msgstr ""
 
-msgid "Public Transport: Disable GTFS"
+msgid "[ID] {0}"
 msgstr ""
 
-msgid "Create Stops from GTFS ..."
+msgid "Route patterns ..."
 msgstr ""
 
-msgid "Create Stops from a GTFS file"
+msgid "Edit Route patterns for public transport"
 msgstr ""
 
-msgid "Select GTFS file (stops.txt)"
+msgid "Route Patterns"
 msgstr ""
 
-msgid "File \"{0}\" does not exist"
+msgid "Overview"
 msgstr ""
 
-msgid "IOException \"{0}\" occurred"
+msgid "Itinerary"
 msgstr ""
 
-msgid ""
-"There exists no dataset. Try to download data from the server or open an OSM "
-"file."
+msgid "Stops"
 msgstr ""
 
-msgid "No data found"
+msgid "Meta"
 msgstr ""
 
-msgid "The GTFS file was empty."
+msgid "Existing route patterns:"
 msgstr ""
 
-msgid "Create Stops from GTFS"
+msgid "Reflect"
 msgstr ""
 
-msgid "GTFS-Stops"
+msgid "Required tags:"
 msgstr ""
 
-msgid "Type of stops to add"
+msgid "Common tags:"
 msgstr ""
 
-msgid "Time on your GPS device"
+msgid "Additional tags:"
 msgstr ""
 
-msgid "HH:MM:SS.sss"
+msgid "Add a new Tag"
 msgstr ""
 
-msgid "Time on your stopwatch"
+msgid "Name/Id"
 msgstr ""
 
-msgid "Time window"
+msgid "Find"
 msgstr ""
 
-msgid "seconds"
+msgid "Show"
 msgstr ""
 
-msgid "Move Threshold"
+msgid "Mark"
 msgstr ""
 
-msgid "Suggest Stops"
+msgid "Ref"
 msgstr ""
 
-msgid "Find"
+msgid "Stops are possible on the"
 msgstr ""
 
-msgid "Show"
+msgid "right hand side"
 msgstr ""
 
-msgid "Mark"
+msgid "left hand side"
 msgstr ""
 
-msgid "Catch"
+msgid "Maximum distance from route"
 msgstr ""
 
-msgid "Join"
+msgid "Suggest Stops"
 msgstr ""
 
-msgid "Public Transport: Join GTFS stops"
+msgid "Create Stops from GPX ..."
 msgstr ""
 
-msgid "State"
+msgid "Create Stops from a GPX file"
 msgstr ""
 
-msgid "[incomplete]"
+msgid "Select GPX file"
 msgstr ""
 
-msgid "[empty way]"
+msgid "The GPX file contained no tracks or waypoints."
 msgstr ""
 
-msgid "[ID] {0}"
+msgid "moved"
 msgstr ""
 
-msgid "[gap]"
+msgid "added"
 msgstr ""
 
-msgid "Route patterns ..."
+msgid "Public Transport: Enable GTFSStops"
 msgstr ""
 
-msgid "Edit Route patterns for public transport"
+msgid "Public Transport: Catch GTFS stops"
 msgstr ""
 
-msgid "Route Patterns"
+msgid "skipped"
 msgstr ""
 
-msgid "Overview"
+msgid "Public Transport: Disable GTFS"
 msgstr ""
 
-msgid "Itinerary"
+msgid "Public Transport: Join GTFS stops"
 msgstr ""
 
-msgid "Stops"
+msgid "Public Transport: Change stop type"
 msgstr ""
 
-msgid "Meta"
+msgid "Public Transport: Add track stop"
 msgstr ""
 
-msgid "Existing route patterns:"
+msgid "Public Transport: Delete track stop"
 msgstr ""
 
-msgid "Reflect"
+msgid "Public Transport: Detach track stop list"
 msgstr ""
 
-msgid "Required tags:"
+msgid "Public Transport: Edit track stop list"
 msgstr ""
 
-msgid "Common tags:"
+msgid "Public Transport: Relocate nodes in track stoplist"
 msgstr ""
 
-msgid "Additional tags:"
+msgid "Public Transport: sort track stop list"
 msgstr ""
 
-msgid "Add a new Tag"
+msgid "Public Transport: Suggest stops"
 msgstr ""
 
-msgid "Name/Id"
+msgid "Public Transport: Detach waypoints"
 msgstr ""
 
-msgid "Ref"
+msgid "Public Transport: Disable waypoints"
 msgstr ""
 
-msgid "Stops are possible on the"
+msgid "Public Transport: Enable waypoints"
 msgstr ""
 
-msgid "right hand side"
+msgid "Public Transport: Edit waypoint name"
 msgstr ""
 
-msgid "left hand side"
+msgid "rail"
 msgstr ""
 
-msgid "Maximum distance from route"
+msgid "Can''t parse a time from this string."
 msgstr ""
 
-msgid " [ID] {0}"
+msgid "Invalid value"
 msgstr ""
 
-msgid "Public Transport: Change stop type"
+msgid "Create Stops from GTFS"
 msgstr ""
 
-msgid "Create Stops from GPX ..."
+msgid "GTFS-Stops"
 msgstr ""
 
-msgid "Create Stops from a GPX file"
+msgid "Type of stops to add"
 msgstr ""
 
-msgid "Select GPX file"
+msgid "Time on your GPS device"
 msgstr ""
 
-msgid "The GPX file contained no tracks or waypoints."
+msgid "HH:MM:SS.sss"
 msgstr ""
 
-msgid "Create Stops from GPX"
+msgid "Time on your stopwatch"
 msgstr ""
 
-msgid "Tracks in this GPX file:"
+msgid "Time window"
 msgstr ""
 
-msgid "Detach"
+msgid "seconds"
 msgstr ""
 
-msgid "implicit"
+msgid "Move Threshold"
 msgstr ""
 
-msgid ""
-"The GPX file doesn''t contain valid trackpoints. Please use a GPX file that "
-"has trackpoints."
+msgid "Catch"
 msgstr ""
 
-msgid "GPX File Trouble"
+msgid "Join"
 msgstr ""
 
-msgid "unnamed"
+msgid "Create Stops from GPX"
 msgstr ""
 
-msgid "Public Transport: Add track stop"
+msgid "Tracks in this GPX file:"
 msgstr ""
 
-msgid "Public Transport: Delete track stop"
+msgid "Detach"
 msgstr ""
 
-msgid "Public Transport: Detach track stop list"
+msgid "implicit"
 msgstr ""
 
-msgid "Public Transport: Edit track stop list"
+msgid "State"
 msgstr ""
 
-msgid "Public Transport: Relocate nodes in track stoplist"
+msgid "[incomplete]"
 msgstr ""
 
-msgid "Public Transport: sort track stop list"
+msgid "[empty way]"
 msgstr ""
 
-msgid "Public Transport: Suggest stops"
+msgid "[gap]"
 msgstr ""
 
 msgid "Stopname"
 msgstr ""
 
-msgid "Public Transport: Detach waypoints"
+msgid " [ID] {0}"
 msgstr ""
 
-msgid "Public Transport: Disable waypoints"
+msgid ""
+"The GPX file doesn''t contain valid trackpoints. Please use a GPX file that "
+"has trackpoints."
 msgstr ""
 
-msgid "Public Transport: Enable waypoints"
+msgid "GPX File Trouble"
 msgstr ""
 
-msgid "Public Transport: Edit waypoint name"
+msgid "unnamed"
 msgstr ""
 
 msgid "Distance between stops"
@@ -33709,6 +33790,9 @@ msgstr ""
 msgid "JOSM Tag Editor Plugin"
 msgstr ""
 
+msgid "Presets"
+msgstr ""
+
 msgid "Abort tag editing and close dialog"
 msgstr ""
 
@@ -35634,6 +35718,26 @@ msgid_plural "Overwrite ''{0}'' tags {1} from {2} with new value ''{3}''?"
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Download from Sophox API"
+msgstr ""
+
+msgid ""
+"Find places of education at least 2km, and at most 3km from the center of "
+"the selection"
+msgstr ""
+
+msgid "Show/hide Sophox snippet list"
+msgstr ""
+
+msgid "help"
+msgstr ""
+
+msgid "Server: "
+msgstr ""
+
+msgid "Wikidata+OSM server"
+msgstr ""
+
 msgid "Search Wikidata items"
 msgstr ""
 
@@ -35707,26 +35811,6 @@ msgid ""
 "objects"
 msgstr ""
 
-msgid "Download from Wikosm API"
-msgstr ""
-
-msgid ""
-"Find places of education at least 2km, and at most 3km from the center of "
-"the selection"
-msgstr ""
-
-msgid "Show/hide Wikosm snippet list"
-msgstr ""
-
-msgid "help"
-msgstr ""
-
-msgid "Server: "
-msgstr ""
-
-msgid "Wikidata+OSM server"
-msgstr ""
-
 msgid "The Ultimate WMS Super-speed Turbo Challenge II"
 msgstr ""
 
diff --git a/i18n/po/pl.po b/i18n/po/pl.po
index af2502e..bdf8171 100644
--- a/i18n/po/pl.po
+++ b/i18n/po/pl.po
@@ -8,8 +8,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: \n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2017-10-30 03:38+0100\n"
-"PO-Revision-Date: 2017-10-26 15:54+0000\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"
 "Language-Team: polski <>\n"
 "MIME-Version: 1.0\n"
@@ -17,8 +17,8 @@ msgstr ""
 "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-10-30 04:57+0000\n"
-"X-Generator: Launchpad (build 18493)\n"
+"X-Launchpad-Export-Date: 2017-11-26 04:59+0000\n"
+"X-Generator: Launchpad (build 18509)\n"
 "Language: pl\n"
 
 msgid "Cutting"
@@ -470,12 +470,15 @@ msgstr "Usuń warstwę"
 msgid "Delete the active layer. Does not delete the associated file."
 msgstr "Usuwa aktywną warstwę, nie usuwając powiązanego pliku"
 
-msgid "Toggle dialogs panel"
+msgid "Dialogs panel"
 msgstr "Panel boczny"
 
 msgid "Toggle dialogs panel, maximize mapview"
 msgstr "Przełącza widoczność panelu bocznego maksymalizując widok mapy"
 
+msgid "Toggle dialogs panel"
+msgstr "Panel boczny"
+
 msgid "Distribute Nodes"
 msgstr "Rozmieść węzły"
 
@@ -499,7 +502,7 @@ msgid "Download data"
 msgstr "Pobieranie danych"
 
 msgid "Download map data from a server of your choice"
-msgstr ""
+msgstr "Pobieranie danych z serwera twojego wyboru"
 
 msgid ""
 "<html>This action will require {0} individual<br>download requests. Do you "
@@ -3390,7 +3393,7 @@ msgid "E"
 msgstr "E"
 
 msgid "Unable to parse as coordinate value: ''{0}''"
-msgstr ""
+msgstr "Nie można dopasować wartości współrzędnych: \"{0}\""
 
 msgid "Date of imagery: {0}"
 msgstr "Data wykonania zdjęć: {0}"
@@ -3464,6 +3467,8 @@ msgid ""
 "Can''t use layer {0} because no supported formats where found. Layer is "
 "available in formats: {1}"
 msgstr ""
+"Nie można użyć warstwy {0} ponieważ nie znaleziono osługiwanych formatów. "
+"Warstwa oferuje następujące: {1}"
 
 msgid ""
 "Only square tiles are supported. {0}x{1} returned by server for TileMatrix "
@@ -3663,7 +3668,7 @@ msgid "<anonymous>"
 msgstr "<anonimowy>"
 
 msgid "Cannot add node {0} to incomplete way {1}."
-msgstr "Nie mogę dodać węzła {0} do niekompletnej linii {1}"
+msgstr "Nie można dodać węzła {0} do niekompletnej linii {1}"
 
 msgid "Nodes in way must be in the same dataset"
 msgstr "Węzły w linii muszą być w tym samym zestawie"
@@ -3878,16 +3883,19 @@ msgid "areatext"
 msgstr "obszar tekstowy"
 
 msgid "Failed to create missing preferences directory: {0}"
-msgstr ""
+msgstr "Nie udało się utworzyć brakującego katalogu ustawień: {0}"
 
 msgid "<html>Failed to create missing preferences directory: {0}</html>"
 msgstr ""
+"<html>Nie udało się utworzyć brakującego katalogu ustawień: {0}</html>"
 
 msgid "Failed to create missing user data directory: {0}"
-msgstr ""
+msgstr "Nie udało się utworzyć brakującego katalogu danych użytkownika: {0}"
 
 msgid "<html>Failed to create missing user data directory: {0}</html>"
 msgstr ""
+"<html>Nie udało się utworzyć brakującego katalogu danych użytkownika: "
+"{0}</html>"
 
 msgid "Failed to create missing cache directory: {0}"
 msgstr "Nie udało się utworzyć brakującego katalogu pamięci podręcznej: {0}"
@@ -4061,6 +4069,7 @@ msgstr "Elipsoida wymaga (+ellps=* lub +a=*, +b=*)"
 
 msgid "Grid shift file ''{0}'' for option +nadgrids not supported."
 msgstr ""
+"Plik przesunięcia siatki \"{0}\" dla opcji +nadgrids nie jest obsługiwany."
 
 msgid ""
 "Unexpected number of arguments for parameter ''towgs84'' (must be 3 or 7)"
@@ -4096,48 +4105,53 @@ msgid "Custom Projection"
 msgstr "Własna projekcja"
 
 msgid "Error: {0}"
-msgstr ""
+msgstr "Błąd: {0}"
 
 msgid "JOSM projection command line interface"
-msgstr ""
+msgstr "Wiersz poleceń projekcji JOSM"
 
 msgid "Description"
 msgstr "Opis"
 
 msgid "Converts coordinates from one coordinate reference system to another."
-msgstr ""
+msgstr "Przekształca współrzędne z jednego układu współrzędnych na inny."
 
 msgid "Options"
-msgstr ""
+msgstr "Ustawienia"
 
 msgid "Show this help"
 msgstr "Wyświetla tę pomoc"
 
 msgid "Switch input and output crs"
-msgstr ""
+msgstr "Zamienia wejściowe i wyjściowe crs (inwersja)"
 
 msgid "Switch order of input coordinates (east/north, lon/lat)"
-msgstr ""
+msgstr "Zmiana kolejności wejściowych współrzędnych (wschód/północ, dł/szer)"
 
 msgid "Switch order of output coordinates (east/north, lon/lat)"
-msgstr ""
+msgstr "Zmiana kolejności wyjściowych współrzędnych (wschód/północ, dł/szer)"
 
 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 ""
+"Format wejściowych i wyjściowych współrzędnych crs jest podobny do tego w "
+"oprogramowaniu PROJ.4."
 
 msgid "[file]"
-msgstr ""
+msgstr "[plik]"
 
 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 ""
+"Odczytuje wejściowe dane z jednego lub więcej plików wymienionych jako "
+"argumenty pozycyjne. Jeżeli nie zostały podane, lub nazwą pliku jest \"-\", "
+"dane są odczytywane ze standardowego wejścia."
 
 msgid "Examples"
 msgstr "Przykłady"
@@ -4145,9 +4159,11 @@ msgstr "Przykłady"
 msgid ""
 "Expected two coordinates, separated by white space, found {0} in ''{1}''"
 msgstr ""
+"Oczekiwano dwóch współrzędnych, oddzielonych białym znakiem, znaleziono {0} "
+"w ''{1}''"
 
 msgid "Unable to parse number ''{0}''"
-msgstr ""
+msgstr "Nie można sparsować liczby \"{0}\""
 
 msgid "GRS80"
 msgstr "GRS80"
@@ -4248,7 +4264,7 @@ msgid "URL contains an invalid protocol: {0}"
 msgstr "Adres URL zawiera nieprawidłowy protokół: {0}"
 
 msgid "URL contains an invalid authority: {0}"
-msgstr ""
+msgstr "Adres URL zawiera nieprawidłowe dane serwera: {0}"
 
 msgid "URL contains an invalid path: {0}"
 msgstr "Adres URL zawiera nieprawidłową ścieżkę: {0}"
@@ -4560,21 +4576,21 @@ msgid ""
 msgid_plural ""
 "Multipolygon relation should be tagged with area tags and not the outer ways"
 msgstr[0] ""
-"Zamiast linii wielokąta zewnętrznego jako obszar powinien być otagowany "
+"Zamiast linii wielokąta zewnętrznego jako obszar powinien zostać oznaczony "
 "wielokąt złożony"
 msgstr[1] ""
-"Zamiast linii wielokąta zewnętrznego jako obszar powinien być otagowany "
+"Zamiast linii wielokąta zewnętrznego jako obszar powinien zostać oznaczony "
 "wielokąt złożony"
 msgstr[2] ""
-"Zamiast linii wielokąta zewnętrznego jako obszar powinien być otagowany "
+"Zamiast linii wielokąta zewnętrznego jako obszar powinien zostać oznaczony "
 "wielokąt złożony"
 
 msgid ""
 "With the currently used mappaint style the style for inner way equals the "
 "multipolygon style"
 msgstr ""
-"W obecnym rodzaju wyświetlania styl linii wewnętrznej jest identyczny ze "
-"stylem wielokąta złożonego"
+"W obecnie używanym stylu wyświetlania mapy, styl linii wewnętrznej jest "
+"identyczny ze stylem wielokąta złożonego"
 
 msgid "Style for outer way mismatches"
 msgstr "Niezgodność stylu zewnętrznych linii"
@@ -4583,6 +4599,8 @@ msgid ""
 "With the currently used mappaint style(s) the style for outer way mismatches "
 "the area style"
 msgstr ""
+"W obecnie używanym stylu (stylach) wyświetlania mapy, styl linii zewnętrznej "
+"nie pasuje do stylu obszaru"
 
 msgid "Area style on outer way"
 msgstr "Styl obszaru na linii zewnętrznej"
@@ -4591,7 +4609,7 @@ msgid "Multipolygon is not closed"
 msgstr "Wielokąt złożony nie jest zamknięty"
 
 msgid "Self-intersecting polygon ring"
-msgstr ""
+msgstr "Pierścienie wielokąta przecinają same siebie"
 
 msgid "Multipolygon rings share node(s)"
 msgstr "Pierścienie wielokąta złożonego współdzielą węzły"
@@ -4600,7 +4618,7 @@ msgid "Intersection between multipolygon ways"
 msgstr "Linie wielokąta złożonego krzyżują się"
 
 msgid "Multipolygon rings are equal"
-msgstr "Pierścienie wielokąta złożonego są równe"
+msgstr "Pierścienie wielokąta złożonego są takie same"
 
 msgid "Role for ''{0}'' should be ''{1}''"
 msgstr "Rola dla „{0}” powinna być „{1}”"
@@ -4609,7 +4627,7 @@ msgid "Multipolygon inner way is outside"
 msgstr "Wewnętrzna linia wielokąta złożonego znajduje się na zewnątrz"
 
 msgid "Multipolygon ring contains segments twice"
-msgstr ""
+msgstr "Pierścień złożony zawiera zdublowane segmenty"
 
 msgid "Multipolygon outer way shares segment(s) with other ring"
 msgstr ""
@@ -4619,7 +4637,7 @@ msgid "No useful role for multipolygon member"
 msgstr "Członek wielokąta złożonego nie ma przypisanej roli"
 
 msgid "Non-Way in boundary"
-msgstr ""
+msgstr "Granica zawiera obiekt niebędący linią"
 
 msgid "Non-Way in multipolygon"
 msgstr "Wielokąt złożony zawiera obiekt niebędący linią"
@@ -4760,7 +4778,7 @@ msgstr "Pusta relacja"
 
 msgid ""
 "Role of relation member does not match expression ''{0}'' in template {1}"
-msgstr ""
+msgstr "Rola członka relacji nie pasuje do wyrażenia \"{0}\" w szablonie {1}"
 
 msgid ""
 "Type ''{0}'' of relation member with role ''{1}'' does not match accepted "
@@ -5264,12 +5282,14 @@ msgid ""
 "You may face critical Java bugs; we highly recommend you to update to Java "
 "{0}."
 msgstr ""
+"Możesz doświadczyć krytycznych będów Javy; wybitnie zalecamy aktualizację do "
+"Javy {0}."
 
 msgid "Would you like to update now ?"
 msgstr "Uaktualnić?"
 
 msgid "Starting file watcher"
-msgstr ""
+msgstr "Uruchamianie obserwatora pliku"
 
 msgid "Executing platform startup hook"
 msgstr "Wykonanie procedur początkowych platformy"
@@ -5288,6 +5308,8 @@ msgstr "Inicjowanie API OSM"
 
 msgid "Removed layer {0} because it is not allowed by the configured API."
 msgstr ""
+"Usuwanie warstwy {0} ponieważ nie jest ona dozwolona przez skonfigurowane "
+"API."
 
 msgid "Initializing internal traffic data"
 msgstr "Inicjowanie wewnętrznych danych o kierunku ruchu"
@@ -5308,23 +5330,25 @@ msgid "usage"
 msgstr "użycie"
 
 msgid "commands"
-msgstr ""
+msgstr "polecenia"
 
 msgid "launch JOSM (default, performed when no command is specified)"
-msgstr ""
+msgstr "uruchamia JOSM (domyślne, występuje jeśli nie podano polecenia)"
 
 msgid "render data and save the result to an image file"
-msgstr ""
+msgstr "renderuje dane i zapisuje wynik jako obraz"
 
 msgid "convert coordinates from one coordinate reference system to another"
-msgstr ""
+msgstr "przekształca współrzędne z jednego układu współrzędnych na inny"
 
 msgid ""
 "For details on the {0} and {1} commands, run them with the {2} option."
 msgstr ""
+"By uzyskać więcej informacji na temat poleceń {0} i {1}, wykonaj je z opcją "
+"{2}."
 
 msgid "The remainder of this help page documents the {0} command."
-msgstr ""
+msgstr "Reszta tej strony przedstawia dokumentację dla komendy {0}."
 
 msgid "options"
 msgstr "opcje"
@@ -5333,22 +5357,23 @@ msgid "Standard unix geometry argument"
 msgstr "Standardowy argument X-Windows określający wymiary okna"
 
 msgid "Download the bounding box"
-msgstr "Pobierz dane z obszaru edycji"
+msgstr "Pobiera dane z podanego obszaru"
 
 msgid "Download the location at the URL (with lat=x&lon=y&zoom=z)"
-msgstr "Pobierz położenie jako adres URL (lat=x&lon=y&zoom=z)"
+msgstr "Pobiera położenie jako adres URL (lat=x&lon=y&zoom=z)"
 
 msgid "Open a file (any file type that can be opened with File/Open)"
-msgstr "Otwórz plik (każdy typ jaki może być otwarty poprzez Plik/Otwórz)"
+msgstr "Otwiera plik (każdy typ jaki może być otwarty poprzez Plik/Otwórz)"
 
 msgid "Download the bounding box as raw GPS"
-msgstr "Pobierz obszar edycji jako surowe dane GPS"
+msgstr "Pobiera podany obszar jako surowe dane GPS"
 
 msgid "Download the location at the URL (with lat=x&lon=y&zoom=z) as raw GPS"
-msgstr "Pobierz lokalizację adresu (z lat=x&lon=y&zoom=z) jako raw GPS"
+msgstr ""
+"Pobiera położenie jako adres URL (z lat=x&lon=y&zoom=z) jako surowe dane GPS"
 
 msgid "Select with the given search"
-msgstr "Wybierz z danego wyszukiwania"
+msgstr "Wybiera z danego wyszukiwania"
 
 msgid "Launch in maximized mode"
 msgstr "Uruchamia w trybie pełnoekranowym"
@@ -5360,28 +5385,28 @@ msgid "Changes preferences according to the XML file"
 msgstr "Zmienia preferencje zgodnie z plikiem XML"
 
 msgid "Set preference key to value"
-msgstr "Ustaw wartość dla klucza preferencji"
+msgstr "Ustawia wartość dla klucza preferencji"
 
 msgid "Set the language"
-msgstr "Określa język"
+msgstr "Ustawia język"
 
 msgid "Displays the JOSM version and exits"
-msgstr "Wyświetla wersję JOSM i wychodzi."
+msgstr "Wyświetla wersję JOSM i wychodzi"
 
 msgid "Print debugging messages to console"
-msgstr "Drukuj wiadomości debugowania do konsoli"
+msgstr "W wiadomości debugowania do konsoli"
 
 msgid "Skip loading plugins"
-msgstr "Pomiń wczytywanie wtyczek"
+msgstr "Pomija wczytywanie wtyczek"
 
 msgid "Disable access to the given resource(s), separated by comma"
-msgstr "Wyłącz dostęp do danego zasobu(-ów), oddzielone przecinkiem"
+msgstr "Wyłącza dostęp do danego zasobu(-ów), oddzielone przecinkiem"
 
 msgid "options provided as Java system properties"
-msgstr "opcja dostarczano jako ustawienia systemowe Javy"
+msgstr "opcje dostarczane jako ustawienia systemowe Javy"
 
 msgid "Change the JOSM directory name"
-msgstr "Zmień nazwę katalogu JOSM"
+msgstr "Zmienia nazwę katalogu JOSM"
 
 msgid "/PATH/TO/JOSM/PREF    "
 msgstr "/SCIEZKA/DO/JOSM/PREF    "
@@ -5418,6 +5443,8 @@ msgid ""
 "-Djosm.home has lower precedence, i.e. the specific setting overrides the "
 "general one"
 msgstr ""
+"-Djosm.home ma niski priorytet, np. podając ustawienie zastępuje ono "
+"oryginalne"
 
 msgid ""
 "note: For some tasks, JOSM needs a lot of memory. It can be necessary to add "
@@ -5425,9 +5452,9 @@ msgid ""
 "      Java option to specify the maximum size of allocated memory in "
 "megabytes"
 msgstr ""
-"Uwaga: Do niektórych zadań JOSM potrzebuhe dużo pamięci. Może być potrzebne "
-"dodać poniższą\n"
-"      opcję Java aby zadać maksymalny rozmiar zarezerwowanej pamięci."
+"Uwaga: Do niektórych zadań JOSM potrzebuje dużo pamięci. Może być potrzebne "
+"dodanie poniższej\n"
+"       opcji Java aby zwiększyć maksymalny rozmiar zarezerwowanej pamięci"
 
 msgid "examples"
 msgstr "przykłady"
@@ -5440,7 +5467,7 @@ msgstr ""
 "kolejności."
 
 msgid "Make sure you load some data if you use --selection."
-msgstr "Upewnij się że ładujesz jakieś dane jeśli używasz --selection"
+msgstr "Upewnij się, że ładujesz jakieś dane jeśli chcesz użyć --selection."
 
 msgid "Log level is at {0} ({1}, {2})"
 msgstr "Poziom zapisu dziennika jest na {0} ({1}, {2})"
@@ -5787,7 +5814,7 @@ msgid "Shrink"
 msgstr "Oddal"
 
 msgid "Show downloaded area"
-msgstr ""
+msgstr "Pokaż pobrane obszary"
 
 msgid ""
 "<html>Please select a <strong>range of OSM tiles</strong> at a given zoom "
@@ -6003,10 +6030,10 @@ msgid "Conflict foreground: keep all tags"
 msgstr "Konfilkt pierwszego planu: zachowaj wszystkie znaczniki"
 
 msgid "Conflict background: sum all numeric tags"
-msgstr ""
+msgstr "Konflikt tła: zsumuj wszystkie numeryczne znaczniki"
 
 msgid "Conflict foreground: sum all numeric tags"
-msgstr ""
+msgstr "Konflikt pierwszego planu: zsumuj wszystkie numeryczne znaczniki"
 
 msgid "Conflict background: keep member"
 msgstr "Konfilkt tła: zatrzymaj członka"
@@ -6034,7 +6061,7 @@ msgid "Merging deleted objects failed"
 msgstr "Niepowodzenie scalania usuniętych obiektów."
 
 msgid "List in role {0} is currently not participating in a compare pair."
-msgstr ""
+msgstr "Lista w roli {0} obecnie nie uczestniczy w parze porównania."
 
 msgid "Unexpected value of parameter ''index''. Got {0}."
 msgstr "Niespodziewana wartość parametru „index”. Wynosi {0}"
@@ -6061,6 +6088,8 @@ msgid ""
 "List of merged elements. They will replace the list of my elements when the "
 "merge decisions are applied."
 msgstr ""
+"Lista połączonych elementów. Zastąpią one listę moich elementów po wybraniu "
+"opcji połączenia."
 
 msgid "Their version"
 msgstr "Ich wersja"
@@ -6200,7 +6229,7 @@ msgid "Their version ({0} entry)"
 msgid_plural "Their version ({0} entries)"
 msgstr[0] "Ich wersja ({0} pozycja)"
 msgstr[1] "Ich wersja ({0} pozycje)"
-msgstr[2] "Ich wersja  ({0} pozycji)"
+msgstr[2] "Ich wersja ({0} pozycji)"
 
 msgid "My version (local dataset)"
 msgstr "Moja wersja (lokalna)"
@@ -6212,6 +6241,8 @@ msgid ""
 "Properties in the merged element. They will replace properties in my "
 "elements when merge decisions are applied."
 msgstr ""
+"Właściwości w połączonych elementach. Zastąpią one właściwości w moich "
+"elementach po wybraniu opcji połączenia."
 
 msgid "Their version (server dataset)"
 msgstr "Ich wersja (na serwerze)"
@@ -6296,7 +6327,7 @@ msgid "Properties(with conflicts)"
 msgstr "Właściwości (z konfliktami)"
 
 msgid "Pending property conflicts to be resolved"
-msgstr ""
+msgstr "Oczekujące konflikty własności na rozwiązanie"
 
 msgid "Conflict Resolution"
 msgstr "Konflikt rozdzielczości"
@@ -6353,6 +6384,8 @@ msgstr "Element"
 
 msgid "Merged members not frozen yet. Cannot build resolution command"
 msgstr ""
+"Łączone elementy nie zostały jeszcze zamrożone. Nie można utworzyć "
+"rozwiązania."
 
 msgid "<undefined>"
 msgstr "<niezdefinowane>"
@@ -6364,7 +6397,7 @@ msgid "My dataset does not include a tag with key {0}"
 msgstr "Mój zestaw nie zawiera znacznika z kluczem {0}"
 
 msgid "Cannot apply undecided tag merge item."
-msgstr ""
+msgstr "Nie można połączyć elementów z niezdecydowanym znacznikiem."
 
 msgid "Key"
 msgstr "Klucz"
@@ -6453,7 +6486,20 @@ msgid_plural ""
 "may have unwanted tags.<br/>If you want to continue, you are shown a dialog "
 "to fix the conflicting tags.<br/><br/>Do you want to continue?"
 msgstr[0] ""
+"Zamierzasz połączyć {0} obiekt, ale następujące znaczniki są w "
+"konflikcie:<br/>{1}Połączenie tych obiektów może spowodować niechciane "
+"znaczniki.<br/>Jeżeli chcesz kontynuować, skorzystaj z wyświetlonego okienka "
+"w celu rozwiązania konfliktów.<br/><br/>Czy chcesz kontynuować?"
 msgstr[1] ""
+"Zamierzasz połączyć {0} obiekty, ale następujące znaczniki są w "
+"konflikcie:<br/>{1}Połączenie tych obiektów może spowodować niechciane "
+"znaczniki.<br/>Jeżeli chcesz kontynuować, skorzystaj z wyświetlonego okienka "
+"w celu rozwiązania konfliktów.<br/><br/>Czy chcesz kontynuować?"
+msgstr[2] ""
+"Zamierzasz połączyć {0} obiektów, ale następujące znaczniki są w "
+"konflikcie:<br/>{1}Połączenie tych obiektów może spowodować niechciane "
+"znaczniki.<br/>Jeżeli chcesz kontynuować, skorzystaj z wyświetlonego okienka "
+"w celu rozwiązania konfliktów.<br/><br/>Czy chcesz kontynuować?"
 
 msgid "<i>missing</i>"
 msgstr "<i>brak</i>"
@@ -6482,6 +6528,8 @@ msgstr "Wartość „{0}” zostanie przypisana do klucza „{1}”"
 msgid ""
 "All numeric values sumed as ''{0}'' are going to be applied for key ''{1}''"
 msgstr ""
+"Wszystkie wartości numeryczne zsumowane jako \"{0}\" zostaną zastosowane dla "
+"klucza \"{1}\""
 
 msgid "The key ''{0}'' and all its values are going to be removed"
 msgstr "Klucz „{0}” i wszystkie jego wartości zostaną usunięte"
@@ -6744,7 +6792,7 @@ msgid "Details"
 msgstr "Szczegóły"
 
 msgid "Opens the Changeset Manager window for the selected changesets"
-msgstr "Otwiera menedżera zestawów zmian dla wybranych zestawów zmian"
+msgstr "Otwiera menedżer zestawów zmian dla wybranych zestawów zmian"
 
 msgid "Command Stack"
 msgstr "Historia poleceń"
@@ -6846,6 +6894,11 @@ msgid ""
 "applied.</strong><br>Click <strong>{1}</strong> to return to resolving "
 "conflicts.</html>"
 msgstr ""
+"<html>Nie skończyłeś jeszcze łączyć różnic w konflikcie.<br>Rozwiązanie "
+"konfliktu nie nastąpi dopóki wszystkie różnice nie zostaną "
+"połączone.<br>Naciśnij <strong>{0}</strong> żeby zamknąć mimo wszystko.<br> "
+"<strong>Rozwiązane różnice nie zostaną zastosowane.</strong><br>Wciśnij "
+"<strong>{1}</strong> aby dokończyć rozwiązywanie konfliktu.</html>"
 
 msgid "Conflict not resolved completely"
 msgstr "Konflikt nie został całkowicie rozwiązany"
@@ -7055,6 +7108,9 @@ msgstr "Współrzędne: "
 msgid "Coordinates (projected): "
 msgstr "Współrzędne (w projekcji): "
 
+msgid "UTM Zone"
+msgstr "Strefa UTM"
+
 msgid "Part of: "
 msgstr "Część: "
 
@@ -7200,13 +7256,13 @@ msgid "Lat/Lon"
 msgstr "Szer/Dł"
 
 msgid "East/North"
-msgstr "Północny-wschód"
+msgstr "Wschód/Północ"
 
 msgid "Please enter a GPS coordinates"
 msgstr "Proszę wprowadzić współrzędne GPS"
 
 msgid "Please enter a Easting and Northing"
-msgstr ""
+msgstr "Proszę wprowadzić współrzędne wschodnie i północne"
 
 msgid "Toggle visibility of layer: {0}"
 msgstr "Przełącz widoczność warstwy: {0}"
@@ -7227,11 +7283,13 @@ msgid "this layer is not currently active (click to activate)"
 msgstr "Ta warstwa jest nieaktywna (kliknięcie uaktywnia)"
 
 msgid "scale follows native resolution of this layer"
-msgstr ""
+msgstr "skala podąża za rozdzielczością natywną tej warstwy"
 
 msgid ""
 "scale follows native resolution of another layer (click to set this layer)"
 msgstr ""
+"skala podąża za rozdzielczością natywną innej warstwy (kliknij żeby ją "
+"ustawić)"
 
 msgid "this layer has no native resolution"
 msgstr "Ta warstwa nie ma natywnej rozdzielczości"
@@ -7534,7 +7592,7 @@ msgid "Lookup"
 msgstr "Wyszukaj"
 
 msgid "Looks up the selected primitives in the error list."
-msgstr ""
+msgstr "Wyszukuje wybrany element na liście błędów."
 
 msgid "Fix"
 msgstr "Napraw"
@@ -7770,7 +7828,7 @@ msgid "Update the changeset from the OSM server"
 msgstr "Uaktualnia zestaw zmian z serwera OSM"
 
 msgid "View changeset"
-msgstr ""
+msgstr "Pokaż zestaw zmian"
 
 msgid ""
 "Select the primitives in the content of this changeset in the current data "
@@ -8164,16 +8222,16 @@ msgid "Show/hide layer"
 msgstr "Wyświetl/ukryj warstwę"
 
 msgid "Discardable key: selection Foreground"
-msgstr ""
+msgstr "Klucz odrzucający: wybieranie pierwszego planu"
 
 msgid "Discardable key: foreground"
-msgstr ""
+msgstr "Klucz odrzucający: pierwszy plan"
 
 msgid "Discardable key: selection Background"
-msgstr ""
+msgstr "Klucz odrzucający: wybieranie tła"
 
 msgid "Discardable key: background"
-msgstr ""
+msgstr "Klucz odrzucający: tło"
 
 msgid "{0} ''{1}''"
 msgstr "{0} „{1}”"
@@ -8357,7 +8415,7 @@ msgid "Remember last used tags after a restart"
 msgstr "Pamiętanie ostatnio używanych znaczników po ponownym uruchomieniu"
 
 msgid "Recent tags with existing key"
-msgstr ""
+msgstr "Ostatnie znaczniki z istniejącym kluczem"
 
 msgid "Enable"
 msgstr "Włącz"
@@ -8366,16 +8424,16 @@ msgid "Hide"
 msgstr "Zamaskowana"
 
 msgid "Refresh recent tags list after applying tag"
-msgstr ""
+msgstr "Odśwież listę ostatnich znaczników po zatwierdzeniu znacznika"
 
 msgid "No refresh"
-msgstr "Nie odświeżaj."
+msgstr "Nie odświeżaj"
 
 msgid "Refresh tag status only (enabled / disabled)"
-msgstr "Odśwież tylko stan znacznika (włączone/wyłączone)."
+msgstr "Odśwież tylko stan znacznika (włączone/wyłączone)"
 
 msgid "Refresh tag status and list of recently added tags"
-msgstr "Odśwież stan znacznika oraz listę ostatnio dodanych znaczników."
+msgstr "Odśwież stan znacznika oraz listę ostatnio dodanych znaczników"
 
 msgid "to apply first suggestion"
 msgstr "- zastosuj pierwszą podpowiedź"
@@ -8503,7 +8561,7 @@ msgid "New Relation"
 msgstr "Nowa relacja"
 
 msgid "Focus Relation Editor with relation ''{0}'' in layer ''{1}''"
-msgstr ""
+msgstr "Pokaż edytor relacji z relacją \"{0}\" na warstwie \"{1}\""
 
 msgid ""
 "<html>There is at least one member in this relation referring<br>to the "
@@ -8522,6 +8580,7 @@ msgstr "Ignoruj je, pozostaw relację niezmienioną"
 
 msgid "Sorry, shortcut \"{0}\" can not be enabled in Relation editor dialog"
 msgstr ""
+"Przepraszamy, skrót \"{0}\" nie może być włączony w oknie edytora relacji"
 
 msgid ""
 "<html>This relation already has one or more members referring to<br>the "
@@ -8546,28 +8605,28 @@ msgid "Select previous Gap"
 msgstr "Zaznacz poprzednią przerwę"
 
 msgid "Select the previous relation member which gives rise to a gap"
-msgstr ""
+msgstr "Zaznacz poprzedniego członka relacji który dąży do przerwy"
 
 msgid "Select next Gap"
 msgstr "Zaznacz kolejną przerwę"
 
 msgid "Select the next relation member which gives rise to a gap"
-msgstr ""
+msgstr "Zaznacz następnego członka relacji który dąży do przerwy"
 
 msgid "Zoom to Gap"
 msgstr "Przybliż widok na przerwę"
 
 msgid "Zoom to the gap in the way sequence"
-msgstr ""
+msgstr "Przybliż do przerwy w ciągu drogi"
 
 msgid "Refers to"
 msgstr "Odniesienie"
 
 msgid "Cannot add {0} since it is not part of dataset"
-msgstr ""
+msgstr "Nie można dodać {0} kiedy nie jest to częścią zestawu danych"
 
 msgid "Download referring relations"
-msgstr ""
+msgstr "Pobierz powiązane relacje"
 
 msgid "There were {0} conflicts during import."
 msgstr "Wystąpił/o {0} koflikt/ów podczas wysyłania."
@@ -8770,7 +8829,7 @@ msgstr ""
 "najpierw rozwiązać i spróbować ponownie.</html>"
 
 msgid "Select the currently edited relation"
-msgstr ""
+msgstr "Zaznacza obecnie edytowane relacje"
 
 msgid "Select objects for selected relation members"
 msgstr "Zaznacza obiekty odpowiadające zaznaczonym członkom relacji"
@@ -9031,18 +9090,20 @@ msgid ""
 "Place your Overpass query below or generate one using the Overpass Turbo "
 "Query Wizard"
 msgstr ""
+"Tutaj umieść zapytanie Overpass lub wygeneruj je za pomocą kreatora Overpass "
+"Turbo"
 
 msgid "Build an Overpass query using the Overpass Turbo Query Wizard tool"
-msgstr ""
+msgstr "Tworzy zapytanie Overpass za pomocą kreatora Overpass Turbo"
 
 msgid "Query Wizard"
-msgstr ""
+msgstr "Kreator zapytań"
 
 msgid "Your saved queries:"
-msgstr ""
+msgstr "Twoje zapisane zapytania:"
 
 msgid "Show/hide Overpass snippet list"
-msgstr ""
+msgstr "Pokaż/ukryj panel boczny"
 
 msgid "Overpass query:"
 msgstr "Zapytanie Overpass:"
@@ -9051,6 +9112,8 @@ msgid ""
 "You entered an empty query. Do you want to download all data in this area "
 "instead?"
 msgstr ""
+"Nie wprowadziłeś żadnego zapytania. Chcesz w zamian pobrać wszystkie dane na "
+"tym obszarze?"
 
 msgid "Download all data?"
 msgstr "Pobrać wszystkie dane?"
@@ -9065,16 +9128,16 @@ msgid "Edit selected snippet"
 msgstr "Modyfikuje zaznaczoną wstawkę"
 
 msgid "Overpass Turbo Query Wizard"
-msgstr ""
+msgstr "Kreator zapytań Overpass Turbo"
 
 msgid "Build query"
 msgstr "Utwórz zapytanie"
 
 msgid "Build query and execute"
-msgstr ""
+msgstr "Utwórz i uruchom zapytanie"
 
 msgid "Search :"
-msgstr ""
+msgstr "Szukaj:"
 
 msgid "The Overpass wizard could not parse the following query:"
 msgstr "Nie można przetworzyć zapytania przez kreator Overpass:"
@@ -9086,58 +9149,70 @@ msgid ""
 "Allows you to interact with <i>Overpass API</i> by writing declarative, "
 "human-readable terms."
 msgstr ""
+"Umożliwia korzystanie z <i>Overpass API</i> za pomocą prostych i czytelnych "
+"składni."
 
 msgid ""
 "The <i>Query Wizard</i> tool will transform those to a valid overpass query."
-msgstr ""
+msgstr "<i>Kreator zapytań</i> zamieni to na prawidłową kwerendę Overpass."
 
 msgid "For more detailed description see "
-msgstr ""
+msgstr "Więcej informacji na "
 
 msgid "<a href=\"{0}\">OSM Wiki</a>."
-msgstr ""
+msgstr "<a href=\"{0}\">OSM Wiki</a>."
 
 msgid "Hints"
-msgstr ""
+msgstr "Wskazówki"
 
 msgid "Download objects of a certain type."
-msgstr ""
+msgstr "Pobierz obiekty wybranego rodzaju"
 
 msgid "Download object by specifying a specific location. For example,"
-msgstr ""
+msgstr "Pobierz obiekt w wybranej lokalizacji. Na przykład,"
 
 msgid "{0} all objects having {1} as attribute are downloaded."
-msgstr ""
+msgstr "{0} wszystkie obiekty posiadające {1} zostaną pobrane"
 
 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} wszystkie obiekty z podaną parą klucz/wartość zlokalizowane w pobliżu "
+"Berlina. Domyślna wartość promienia wynosi 1000m ale można to zmienić w "
+"wygenerowanym zapytaniu."
 
 msgid ""
 "{0} all objects within the current selection that have {1} as attribute."
-msgstr ""
+msgstr "{0} wszystkie obiekty w obecnym zaznaczeniu które posiadają {1}"
 
 msgid ""
 "Instead of <i>location</i> any valid place name can be used like address, "
 "city, etc."
 msgstr ""
+"Zamiast <i>location</i> można wpisać dowolną nazwę np. adres, miasto, itd."
 
 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>Pobierz obiekty które posiadają konkretną parę klucz/wartość, klucz z "
+"dowolną wartością lub wartość dopasowaną wyrażeniem regularnym. Operatory "
+"negujące także są dostępne."
 
 msgid "<i>expression1 {0} expression2</i>"
-msgstr ""
+msgstr "<i>wyrażenie1{0} wyrażenie2</i>"
 
 msgid ""
 "Basic logical operators can be used to create more sophisticated queries. "
 "Instead of \"or\" - \"|\", \"||\" can be used, and instead of \"and\" - "
 "\"&\", \"&&\"."
 msgstr ""
+"Podstawowe operatory logiczne są dostępne do tworzenia bardziej "
+"skomplikowanych zapytań. Zamiast  \"or\" można użyć \"|\", \"||\"  a także "
+"zamiast \"and\" - \"&\", \"&&\"."
 
 msgid "Class Type"
 msgstr "Typ klasy"
@@ -9191,28 +9266,28 @@ msgid "history"
 msgstr "tablica historyczna"
 
 msgid "Please select an item first"
-msgstr ""
+msgstr "Najpierw proszę wybrać pozycję"
 
 msgid "Edit item"
-msgstr ""
+msgstr "Edytuj pozycję"
 
 msgid "Add snippet"
-msgstr ""
+msgstr "Dodaj pozycję"
 
 msgid "Query cannot be empty"
-msgstr ""
+msgstr "Zapytanie nie może być puste"
 
 msgid "This name can be used for the item"
-msgstr ""
+msgstr "Podana nazwa może zostać użyta"
 
 msgid "Item with this name already exists"
-msgstr ""
+msgstr "Pozycja z tą nazwą już istnieje"
 
 msgid "The item cannot be created with provided name"
-msgstr ""
+msgstr "Nie można utworzyć pozycji z podaną nazwą"
 
 msgid "The item cannot be created with an empty query"
-msgstr ""
+msgstr "Nie można utworzyć pozycji bez zapytania"
 
 msgid "JOSM Help Browser"
 msgstr "Przeglądarka pomocy JOSM"
@@ -9229,6 +9304,12 @@ msgid ""
 "your local language ({1})</a> and the <a href=\"{3}\">help topic in "
 "English</a>.</p></html>"
 msgstr ""
+"<html><p class=\"warning-header\">Brakuje pomocy na ten temat</p><p "
+"class=\"warning-body\">Pomoc na temat <strong>{0}</strong> nie jest jeszcze "
+"dostępna, zarówno w twoim lokalnym języku ({1}) jak i "
+"angielsku.<br><br>Możesz wspomóc pomoc programu JOSM i dodać brakujące "
+"informacje. Edycja treści dostępna jest tutaj: <a href=\"{2}\">w twoim "
+"języku ({1})</a> i <a href=\"{3}\">po angielsku</a>.</p></html>"
 
 msgid ""
 "<html><p class=\"error-header\">Error when retrieving help information</p><p "
@@ -9236,6 +9317,10 @@ msgid ""
 "could not be loaded. The error message is "
 "(untranslated):<br><tt>{1}</tt></p></html>"
 msgstr ""
+"<html><p class=\"error-header\">Błąd przy pobieraniu pomocy</p><p "
+"class=\"error-body\">Treść pomocy na temat <strong>{0}</strong> nie może "
+"zostać pobrana. Komunikat błędu "
+"(nieprzetłumaczony):<br><tt>{1}</tt></p></html>"
 
 msgid ""
 "<html>Failed to open help page for url {0}.<br>This is most likely due to a "
@@ -9258,6 +9343,8 @@ msgid ""
 "<html>The current URL <tt>{0}</tt><br>is an external URL. Editing is only "
 "possible for help topics<br>on the help server <tt>{1}</tt>.</html>"
 msgstr ""
+"<html>Obecny adres URL <tt>{0}</tt><br>jest zewnętrznym adresem. Edycja "
+"treści jest możliwa tylko na serwerze pomocy <tt>{1}</tt>.</html>"
 
 msgid "Reload the current help page"
 msgstr "Wczytuje ponownie stronę pomocy"
@@ -9308,17 +9395,23 @@ msgstr "Ponownie wczytuje historię z serwera"
 
 msgid "History not initialized yet. Failed to set reference primitive."
 msgstr ""
+"Historia jeszcze nie zainicjowana. Nie można ustawić powiązanego elementu."
 
 msgid ""
 "Failed to set reference. Reference ID {0} does not match history ID {1}."
 msgstr ""
+"Nie można ustawić powiązania. Powiązany ID {0} nie pasuje do ID z historii "
+"{1}."
 
 msgid ""
 "Failed to set reference. Reference version {0} not available in history."
 msgstr ""
+"Nie można ustawić powiązania. Powiązana wersja {0} nie jest dostępna w "
+"historii."
 
 msgid "History not initialized yet. Failed to set current primitive."
 msgstr ""
+"Historia jeszcze nie zainicjowana. Nie można ustawić obecnego elementu."
 
 msgid ""
 "Failed to set current primitive. Current version {0} not available in "
@@ -9355,10 +9448,10 @@ msgid "Open a history browser with the history of this node"
 msgstr "Otwórz przeglądarkę historii z historią tego węzła"
 
 msgid "View changeset in web browser"
-msgstr ""
+msgstr "Otwórz zestaw zmian w przeglądarce"
 
 msgid "Open {0}"
-msgstr ""
+msgstr "Otwórz {0}"
 
 msgid "Way {0}"
 msgstr "Linia {0}"
@@ -9370,7 +9463,7 @@ msgid "Object"
 msgstr "Obiekt"
 
 msgid "Open Changeset Manager"
-msgstr ""
+msgstr "Otwórz menadżer zestawu zmian"
 
 msgid "Changeset comment"
 msgstr "Komentarz zestawu zmian"
@@ -9525,7 +9618,7 @@ msgid "Object still in use"
 msgstr "Obiekt nadal w użyciu"
 
 msgid "Error header \"{0}\" did not match with an expected pattern"
-msgstr ""
+msgstr "Nagłówek błędu \"{0}\" nie pasuje do oczekiwanego wyrażenia"
 
 msgid "Upload"
 msgstr "Wyślij"
@@ -9541,8 +9634,13 @@ msgstr "Zaznaczenie „Wyślij”, wyśle zmiany do serwera OSM."
 msgid "Check \"Save\" to save the layer to the file specified on the left."
 msgstr "Zaznaczenie „Zapisz”, zapisze warstwę do pliku określonego po lewej."
 
+msgid ""
+"A background upload is already in progress. Kindly wait for it to finish "
+"before uploading new changes"
+msgstr ""
+
 msgid "I would like someone to review my edits."
-msgstr "Dołączenie prośby o sprawdzenie wprowadzonych zmian"
+msgstr "Chcę żeby ktoś przejrzał moje zmiany"
 
 msgid "Provide a brief comment for the changes you are uploading:"
 msgstr "Opis zmian wysyłanych do serwera:"
@@ -9629,6 +9727,8 @@ msgstr "Zamykanie zestawu zmian {0}"
 msgid ""
 "Failed to put Credential Dialog always on top. Caught security exception."
 msgstr ""
+"Umieszczenie okna logowania zawsze na wierzchu nie powiodło się. Wyjątek "
+"bezpieczeństwa."
 
 msgid "Enter credentials for OSM API"
 msgstr "Wprowadź referencje dla OSM API"
@@ -10513,16 +10613,16 @@ msgid "Coordinates imported: {0}"
 msgstr "Zaimportowane współrzędne: {0}"
 
 msgid "Malformed sentences: {0}"
-msgstr ""
+msgstr "Zdeformowane zdania: {0}"
 
 msgid "Checksum errors: {0}"
 msgstr "Błędy sumy kontrolnej: {0}"
 
 msgid "Unknown sentences: {0}"
-msgstr ""
+msgstr "Nieznane zdania: {0}"
 
 msgid "Zero coordinates: {0}"
-msgstr ""
+msgstr "Zerowe wspołrzędne: {0}"
 
 msgid "NMEA import success:"
 msgstr "Import NMEA zakończony powodzeniem:"
@@ -10534,7 +10634,7 @@ msgid "Note Files"
 msgstr "Pliki uwag"
 
 msgid "OSM Server Files bzip2 compressed"
-msgstr ""
+msgstr "Pliki serwera OSM skompresowane bzip2"
 
 msgid "OsmChange File"
 msgstr "Plik OsmChange"
@@ -10562,7 +10662,7 @@ msgstr ""
 "błąd.<br>Błąd:<br>{0}</html>"
 
 msgid "OSM Server Files gzip compressed"
-msgstr ""
+msgstr "Pliki serwera OSM skompresowane gzip"
 
 msgid "Invalid dataset"
 msgstr "Nieprawidłowy zestaw danych"
@@ -10577,7 +10677,7 @@ msgid "Open OSM file"
 msgstr "Otwórz plik OSM"
 
 msgid "Validation Error Files"
-msgstr ""
+msgstr "Pliki błędów walidatora"
 
 msgid "WMS Files (*.wms)"
 msgstr "Pliki WMS (*.wms)"
@@ -10586,16 +10686,16 @@ msgid "Unsupported WMS file version; found {0}, expected {1}"
 msgstr "Nieosługiwana wersja pliku WMS; znaleziono {0}, oczekiwano {1}"
 
 msgid "Native projections"
-msgstr ""
+msgstr "Natywna projekcja"
 
 msgid "Offset"
 msgstr "Przesunięcie"
 
 msgid "Tile download projection"
-msgstr ""
+msgstr "Projekcja pobierania kafelków"
 
 msgid "Tile display projection"
-msgstr ""
+msgstr "Projekcja wyświetlania kafelków"
 
 msgid "Current zoom"
 msgstr "Aktualne przybliżenie"
@@ -10619,10 +10719,10 @@ msgid "Tile display size"
 msgstr "Rozmiar wyświetlania kafelka"
 
 msgid "Reprojection"
-msgstr ""
+msgstr "Reprojekcja"
 
 msgid "Reprojected tile size"
-msgstr ""
+msgstr "Rozmiar kafelka reprojektowanego"
 
 msgid "Metadata "
 msgstr "Metadane "
@@ -10641,6 +10741,8 @@ msgstr "proszę przybliżyć, aby wczytać więcej kafelków"
 
 msgid "increase tiles zoom level (change resolution) to see more detail"
 msgstr ""
+"zwiększ przybliżenie kafelków (zmień rozdzielczość) by zobaczyć więcej "
+"szczegółów"
 
 msgid "No tiles at this zoom level"
 msgstr "Brak kafelków na tym poziomie przybliżenia"
@@ -10812,6 +10914,9 @@ msgstr "Proszę ponownie zmienić odwzorowanie lub usunąć warstwę."
 msgid "Save Layer"
 msgstr "Zapisz warstwę"
 
+msgid "Trying to set a read only data layer as edit layer"
+msgstr ""
+
 msgid "{0} note"
 msgid_plural "{0} notes"
 msgstr[0] "{0} uwaga"
@@ -10828,7 +10933,7 @@ msgid "Changes need uploading?"
 msgstr "Zmiany wymagają wysłania?"
 
 msgid "Save Note file"
-msgstr ""
+msgstr "Zapisz plik uwag"
 
 msgid "outside downloaded area"
 msgstr "poza pobranym obszarem"
@@ -10907,7 +11012,7 @@ msgid "No validation errors"
 msgstr "Sprawdzanie poprawności przebiegło pomyślnie"
 
 msgid "Save Validation errors file"
-msgstr ""
+msgstr "Zapisz plik błędów poprawności"
 
 msgid "Set WMS Bookmark"
 msgstr "Ustaw zakładkę WMS"
@@ -10916,9 +11021,12 @@ msgid ""
 "Reprojecting layer {0} from {1} to {2}. For best image quality and "
 "performance, switch to one of the supported projections: {3}"
 msgstr ""
+"Reprojekcja warstwy {0} z {1} do {2}. Dla lepszej jakości zdjęć i "
+"wydajności, przełącz na jedną z obsługiwanych projekcji: {3}"
 
 msgid "Unable to find supported projection for layer {0}. Using {1}."
 msgstr ""
+"Nie znaleziono obsługiwanych projekcji dla warstwy {0}. Używanie {1}."
 
 msgid "Correlate to GPX"
 msgstr "Koreluj do GPX"
@@ -11170,7 +11278,7 @@ msgid "Show previous Image"
 msgstr "Wyświetl poprzedni obraz"
 
 msgid "Geoimage: {0}"
-msgstr ""
+msgstr "Geoimage: {0}"
 
 msgid "Remove photo from layer"
 msgstr "Usuń zdjęcie z warstwy"
@@ -11197,7 +11305,7 @@ msgid "Center view"
 msgstr "Wyśrodkuj widok"
 
 msgid "Zoom best fit and 1:1"
-msgstr ""
+msgstr "Przybliż najlepiej pasujące i 1:1"
 
 msgid "Move dialog to the side pane"
 msgstr "Przenieś okno dialogowe do panelu bocznego"
@@ -11480,7 +11588,7 @@ msgstr[1] "Warstwa {0} składa się z {1} znaczników"
 msgstr[2] "Warstwa {0} składa się z {1} znaczników"
 
 msgid "No existing audio markers in this layer to offset from."
-msgstr ""
+msgstr "Nie istnieją znaczniki dźwiękowe w tej warstwie do przesunięcia."
 
 msgid "Show Text/Icons"
 msgstr "Etykiety i ikony"
@@ -11537,154 +11645,182 @@ msgid "Select the map painting styles"
 msgstr "Wybierz style rysowania mapy"
 
 msgid "Error - file not found: ''{0}''"
-msgstr ""
+msgstr "Błąd - plik nie znaleziony: ''{0}''"
 
 msgid "Expected integer number for option {0}, but got ''{1}''"
-msgstr ""
+msgstr "Oczekiwano liczby całkowitej dla opcji {0}, otrzymano ''{1}''"
 
 msgid "Expected integer number >= 0 for option {0}, but got ''{1}''"
-msgstr ""
+msgstr "Oczekiwano liczby całkowitej >=0 dla opcji {0}, otrzymano ''{1}''"
 
 msgid "Unable to parse {0} parameter: {1}"
-msgstr ""
+msgstr "Nie można dopasować {0} parametr: {1}"
 
 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}, "
+"otrzymano ''{1}''"
 
 msgid "Expected floating point number for option {0}, but got ''{1}''"
 msgstr ""
+"Oczekiwano liczby zmiennoprzecinkowej dla opcji {0}, otrzymano ''{1}''"
 
 msgid ""
 "Expected two coordinates, separated by comma, for option {0}, but got ''{1}''"
 msgstr ""
+"Oczekiwano dwóch współrzędnych, oddzielonych przecinkiem, dla opcji {0}, "
+"otrzymano ''{1}''"
 
 msgid "In option {0}: {1}"
-msgstr ""
+msgstr "W opcji {0}: {1}"
 
 msgid "Expected floating point number > 0 for option {0}, but got ''{1}''"
 msgstr ""
+"Oczekiwano liczby zmiennoprzecinkowej > 0 dla opcji {0}, otrzymano ''{1}''"
 
 msgid "Expected integer number > 0 for option {0}, but got ''{1}''"
-msgstr ""
+msgstr "Oczekiwano liczby całkowitej > 0 dla opcji {0}, otrzymano ''{1}''"
 
 msgid "JOSM rendering command line interface"
-msgstr ""
+msgstr "Wiersz poleceń renderowania JOSM"
 
 msgid "Renders data and saves the result to an image file."
-msgstr ""
+msgstr "Renderuje dane i zapisuje wynik jako plik obrazu."
 
 msgid "Input data file name (.osm)"
-msgstr ""
+msgstr "Nazwa pliku danych wejściowych (.osm)"
 
 msgid "Output image file name (.png); defaults to ''{0}''"
-msgstr ""
+msgstr "Nazwa pliku wyjściowego obrazu (.png); domyślnie to ''{0}''"
 
 msgid "Style file to use for rendering (.mapcss or .zip)"
-msgstr ""
+msgstr "Plik ze stylem do renderowania (.mapcss lub .zip)"
 
 msgid "This option can be repeated to load multiple styles."
-msgstr ""
+msgstr "Opcję tę można powtarzać aby załadować więcej styli."
 
 msgid ""
 "Style setting (in JOSM accessible in the style list dialog right click menu)"
 msgstr ""
+"Ustawienia stylu (dostępne w JOSM w oknie z listą stylów po kliknięciu "
+"prawym przyciskiem myszy)"
 
 msgid "Applies to the last style loaded with the {0} option."
-msgstr ""
+msgstr "Zastosowuje do ostatniego stylu załadowanego za pomocą opcji {0}."
 
 msgid ""
 "Select zoom level to render. (integer value, 0=entire earth, 18=street level)"
 msgstr ""
+"Wybierz poziom przybliżenia do renderowania. (wartość całkowita, 0=cała "
+"ziemia, 18=poziom ulicy)"
 
 msgid "Select the map scale"
-msgstr ""
+msgstr "Wybierz skalę mapy"
 
 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 ""
+"Wartość 10000 oznacza skalę 1:10000 (1cm na mapie odpowiada 100m w "
+"rzeczywistości; rozdzielczość wyświetlana 96 dpi)"
 
 msgid "Options {0} and {1} are mutually exclusive."
-msgstr ""
+msgstr "Opcje {0} i {1} wzajemnie się wykluczają."
 
 msgid "Area to render, default value is ''{0}''"
-msgstr ""
+msgstr "Obszar do renderowania, domyślna wartość to ''{0}''"
 
 msgid ""
 "With keyword ''{0}'', the downloaded area in the .osm input file will be "
 "used (if recorded)."
 msgstr ""
+"Ze słowem kluczowym ''{0}'', pobrany obszar w pliku wejściowym .osm będzie "
+"użyty (jeśli zapisane)."
 
 msgid "Specify bottom left corner of the rendering area"
-msgstr ""
+msgstr "Określa lewy dolny róg renderowanego obszaru"
 
 msgid ""
 "Used in combination with width and height options to determine the area to "
 "render."
 msgstr ""
+"Użyte w kombinacji z szerokością i wysokością do wykrycia obszaru do "
+"renderowania"
 
 msgid "Width of the rendered area, in meter"
-msgstr ""
+msgstr "Szerokość renderowanego obszaru, w metrach"
 
 msgid "Height of the rendered area, in meter"
-msgstr ""
+msgstr "Wysokość renderowanego obszaru, w metrach"
 
 msgid "Width of the target image, in pixel"
-msgstr ""
+msgstr "Szerokość docelowego obrazu, w pikselach"
 
 msgid "Height of the target image, in pixel"
-msgstr ""
+msgstr "Wysokość docelowego obrazu, w pikselach"
 
 msgid "Projection to use, default value ''{0}'' (web-Mercator)"
-msgstr ""
+msgstr "Używana projekcja, domyślna wartość ''{0}'' (web-Mercator)"
 
 msgid ""
 "Maximum image width/height in pixel (''{0}'' means no limit), default value: "
 "{1}"
 msgstr ""
+"Maksymalna szerokość/wysokość w pikselach (''{0}'' oznacza brak limitu), "
+"domyślna wartość: {1}"
 
 msgid ""
 "To specify the rendered area and scale, the options can be combined in "
 "various ways"
 msgstr ""
+"W ceku określenia renderowanego obszaru i skali, opcje mogą być łączone w "
+"różne sposoby"
 
 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 ""
+"Jeśli ''{0}'' ani ''{1}'' nie zostaną podane, będzie obowiązywała domyślna "
+"wartość {2} i zostaną użyte granice pobranego obszaru z pliku wejściowego "
+".osm."
 
 msgid ""
 "Argument {0} given, but scale cannot be determined from remaining arguments"
 msgstr ""
+"Argument {0} został podany, ale nie można ustalić skali z pozostałych "
+"parametrów."
 
 msgid "Argument {0} given, expected {1} or {2}"
-msgstr ""
+msgstr "Argument {0} został podany, oczekiwano {1} lub {2}"
 
 msgid "{0} mode, but no bounds found in osm data input file"
-msgstr ""
+msgstr "tryb {0}, lecz nie znaleziono granic w pliku wejściowym osm"
 
 msgid ""
 "Unable to determine scale, one of the options {0}, {1}, {2} or {3} expected"
 msgstr ""
+"Nie można ustalić skali, jedna z opcji {0}, {1}, {2} lub {3} jest wymagana"
 
 msgid "Missing argument - input data file ({0})"
-msgstr ""
+msgstr "Brakujący argument - plik danych wejściowy ({0})"
 
 msgid "In .osm data file ''{0}'' - "
-msgstr ""
+msgstr "W pliku danych .osm ''{0}'' - "
 
 msgid "Missing argument - at least one style expected ({0})"
-msgstr ""
+msgstr "Brakujący argument - przynajmniej jeden styl jest wymagany ({0})"
 
 msgid ""
 "Image dimensions ({0}x{1}) exceeds maximum image size {2} (use option {3} to "
 "change limit)"
 msgstr ""
+"Wymiary obrazu ({0}x{1}) przekraczają maksymalny rozmiar obrazu {2} (użyj "
+"opcji {3} aby zmienić limit)"
 
 msgid "Style setting not found: ''{0}''"
-msgstr ""
+msgstr "Nie znaleziono ustawienia stylu: ''{0}''"
 
 msgid ""
 "There was an error when loading this style. Select ''Info'' from the right "
@@ -11711,11 +11847,6 @@ msgstr "Nie udało się wczytać stylów Mappaint z „{0}”. Wyjątek: {1}"
 msgid "Failed to parse Mappaint styles from ''{0}''. Error was: {1}"
 msgstr "Nie udało się przetworzyć stylów Mappaint z „{0}”. Błąd: {1}"
 
-msgid ""
-"Detected deprecated ''{0}'' in ''{1}'' which will be removed shortly. Use "
-"''{2}'' instead."
-msgstr ""
-
 msgid "Failed to locate image ''{0}''"
 msgstr "Nie udało się zlokalizować obrazu „{0}''"
 
@@ -11892,17 +12023,28 @@ msgid ""
 "from the OAuth Authorize Endpoint URL ''{0}''.<br><br>Please check your "
 "advanced setting and try again.</html>"
 msgstr ""
+"<html>Automatyczna procedura odbierania klucza dostępu OAuth<br>z serwera "
+"OSM zakończyła się niepowodzeniem ponieważ JOSM<br>nie był w stanie utworzyć "
+"poprawnego adresu logowania URL<br>z OAuth Authorize Endpoint URL "
+"''{0}''.<br><br>Proszę sprawdzić zaawansowane ustawienia i spróbować "
+"ponownie.</html>"
 
 msgid ""
 "<html>The automatic process for retrieving an OAuth Access Token<br>from the "
 "OSM server failed. JOSM failed to log into {0}<br>for user "
 "{1}.<br><br>Please check username and password and try again.</html>"
 msgstr ""
+"<html>Automatyczna procedura odbierania klucza dostępu OAuth<br>z serwera "
+"OSM zakończyła się niepowodzeniem. Nie można<br>zalogować się do {0} jako "
+"użytkownik {1}.<br><br>Proszę sprawdzić nazwę użytkownika/hasło i spróbować "
+"ponownie.</html>"
 
 msgid ""
 "Please enter an OAuth Access Token which is authorized to access the OSM "
 "server ''{0}''."
 msgstr ""
+"Proszę wprowadzić klucz dostępu OAuth który jest uprawniony do dostępu do "
+"serwera OSM ''{0}''."
 
 msgid "Access Token"
 msgstr "Klucz dostępu"
@@ -11958,6 +12100,9 @@ msgid ""
 "sure to set an OAuth consumer key and secret in the <i>Advanced OAuth "
 "parameters</i>."
 msgstr ""
+"<strong>Uwaga:</strong>Jeżeli nie używasz domyślnego serwera OSM API, nie "
+"zapomnij ustawić klucza OAuth konsumenta i sekretnego w <i>zaawansowanych "
+"ustawieniach OAuth</i>."
 
 msgid "Get an Access Token for ''{0}''"
 msgstr "Pobierz klucz dostępu do „{0}''"
@@ -12119,7 +12264,7 @@ msgid "Retrieve Access Token"
 msgstr "Pobierz token żądania"
 
 msgid "Click to retrieve an Access Token"
-msgstr ""
+msgstr "Naciśnij aby otrzymać token żądania"
 
 msgid "Testing OAuth Access Token"
 msgstr "Sprawdzanie tokenu dostępowego OAuth"
@@ -12139,6 +12284,9 @@ msgid ""
 "at ''{1}''.<br>You are accessing the OSM server as user ''{2}'' with id "
 "''{3}''.</html>"
 msgstr ""
+"<html>Pomyślnie użyto klucza żądania ''{0}'' w celu<br>dostępu do serwera "
+"OSM na ''{1}''.<br>Korzystasz z serwera jako użytkownik ''{2}'' z id "
+"''{3}''.</html>"
 
 msgid "Success"
 msgstr "Powodzenie"
@@ -12307,13 +12455,13 @@ msgid "Strange toolbar value: {0}"
 msgstr "Dziwna wartość paska narzędzi: {0}"
 
 msgid "Toolbar action {0} overwritten: {1} gets {2}"
-msgstr ""
+msgstr "Akcja paska narzędzi {0} nadpisana: {1} bierze {2}"
 
 msgid "Registered toolbar action without name: {0}"
-msgstr ""
+msgstr "Zarejestrowano akcję paska narzędzi bez nazwy: {0}"
 
 msgid "Registered toolbar action {0} overwritten: {1} gets {2}"
-msgstr ""
+msgstr "Zarejestrowano akcję paska narzędzi {0} nadpisaną: {1} bierze {2}"
 
 msgid "Toolbar: {0}"
 msgstr "Pasek narzędzi: {0}"
@@ -12353,10 +12501,10 @@ msgid "Export preferences keys to JOSM customization file"
 msgstr "Eksportowanie kluczy preferencji do pliku ustawień"
 
 msgid "What to do with preference lists when this file is to be imported?"
-msgstr ""
+msgstr "Co zrobić z listą ustawień kiedy plik ten zostanie zaimportowany?"
 
 msgid "Append preferences from file to existing values"
-msgstr ""
+msgstr "Zatwierdź ustawienia z pliku do istniejących wartości"
 
 msgid "Replace existing values"
 msgstr "Zamień istniejące wartości"
@@ -12372,6 +12520,9 @@ msgid ""
 "by pressing \"Cancel\" in preferences dialog <br/>To activate some changes "
 "JOSM restart may be needed.</html>"
 msgstr ""
+"<html>Tutaj jest podsumowanie importu.<br>Możesz odrzucić ustawienia zmian "
+"wciskając \"Anuluj\" w oknie ustawień<br>Aby aktywować trochę zmian może być "
+"wymagany restart programu.</html>"
 
 msgid "shortcut"
 msgstr "skrót"
@@ -12446,10 +12597,10 @@ msgid "Please select the row to delete."
 msgstr "Proszę wybrać wiersz do usunięcia"
 
 msgid "Advanced Background: Changed"
-msgstr ""
+msgstr "Zaawansowane tło: Zmienione"
 
 msgid "Advanced Background: NonDefault"
-msgstr ""
+msgstr "Zaawansowane tło: Nie domyślne"
 
 msgid "Current value is default."
 msgstr "Obecna wartość jest domyślna"
@@ -12516,6 +12667,8 @@ msgstr "Źródła znaczników podczas importowania dźwięku..."
 
 msgid "When importing audio, apply it to any waypoints in the GPX layer."
 msgstr ""
+"Podczas importowania dźwięku, zatwierdź to do jakiegokolwiek punktu w "
+"warstwie GPX."
 
 msgid ""
 "Automatically create audio markers from trackpoints (rather than explicit "
@@ -12545,6 +12698,8 @@ msgid ""
 "Playback starts this number of seconds before (or after, if negative) the "
 "audio track position requested"
 msgstr ""
+"Odtwarzanie zacznie się tą liczbę sekund przed (lub po, jeśli ujemne) "
+"żądaniem pozycji ścieżki dźwięku."
 
 msgid "Lead-in time (seconds)"
 msgstr "Czas rozbiegu (w sekundach)"
@@ -12769,15 +12924,15 @@ msgstr "Ruch pieszy"
 
 msgctxt "Heat map"
 msgid "User Normal"
-msgstr ""
+msgstr "Normalny użytkownik"
 
 msgctxt "Heat map"
 msgid "User Light"
-msgstr ""
+msgstr "Światło użytkownika"
 
 msgctxt "Heat map"
 msgid "Traffic Lights"
-msgstr ""
+msgstr "Sygnalizacja świetlna"
 
 msgctxt "Heat map"
 msgid "Inferno"
@@ -12785,7 +12940,7 @@ msgstr "Piekło"
 
 msgctxt "Heat map"
 msgid "Viridis"
-msgstr ""
+msgstr "Zielony"
 
 msgctxt "Heat map"
 msgid "Wood"
@@ -12966,6 +13121,9 @@ msgstr "Ekran powitalny"
 msgid "Show object ID in selection lists"
 msgstr "Identyfikatory obiektu na listach wyboru"
 
+msgid "Show node coordinates in selection lists"
+msgstr ""
+
 msgid "Show localized name in selection lists"
 msgstr "Zlokalizowane nazwy na listach"
 
@@ -13635,7 +13793,7 @@ msgid "Projection parameters"
 msgstr "Parametry projekcji"
 
 msgid "False easting and false northing"
-msgstr ""
+msgstr "Fałszywe współrzędne wschodnie i północne"
 
 msgid "Central meridian"
 msgstr "Centralny południk"
@@ -13650,55 +13808,55 @@ msgid "Ellipsoid parameters"
 msgstr "Parametry elipsoidy"
 
 msgid "Datum name"
-msgstr ""
+msgstr "Nazwa bazy"
 
 msgid "3 or 7 term datum transform parameters"
-msgstr ""
+msgstr "3 lub 7 wyrażeń parametrów transformacji bazy"
 
 msgid "NTv2 grid file"
-msgstr ""
+msgstr "Plik siatki NTv2"
 
 msgid "Built-in:"
 msgstr "Wbudowane:"
 
 msgid "Projection bounds (in degrees)"
-msgstr ""
+msgstr "Granice projekcji (w stopniach)"
 
 msgid "Sets the SRS=... parameter in the WMS request"
-msgstr ""
+msgstr "Ustawia parametr SRS=... w zapytaniu WMS"
 
 msgid "Gauß-Krüger"
 msgstr "Gauß-Krügera"
 
 msgid "GK Zone"
-msgstr "Streaf GK"
+msgstr "Strefa GK"
 
 msgid "Gauß-Krüger Zone {0}"
-msgstr ""
+msgstr "Gauß-Krügera Strefa {0}"
 
 msgid "{0} ({1} to {2} degrees)"
 msgstr "{0} ({1} do {2} stopni)"
 
 msgid "Lambert CC9 Zone (France)"
-msgstr ""
+msgstr "Lambert Strefa CC9 (Francja)"
 
 msgid "Lambert CC Zone"
-msgstr ""
+msgstr "Lambert Strefa CC"
 
 msgid "{0} (Corsica)"
 msgstr "{0} (Korsyka)"
 
 msgid "Lambert 4 Zones (France)"
-msgstr ""
+msgstr "Lambert 4 Strefy (Francja)"
 
 msgid "WGS84 Geographic"
 msgstr "WGS84 Geograficzne"
 
 msgid "Belgian Lambert 1972"
-msgstr ""
+msgstr "Lambert 1972 (Belgia)"
 
 msgid "Belgian Lambert 2008"
-msgstr ""
+msgstr "Lambert 2008 (Belgia)"
 
 msgid "Lambert Zone (Estonia)"
 msgstr "Odwzorowanie Lamberta (Estonia)"
@@ -13707,10 +13865,10 @@ msgid "Lambert 93 (France)"
 msgstr "Lambert 93 (Francja)"
 
 msgid "LKS-92 (Latvia TM)"
-msgstr ""
+msgstr "LKS-92 (Litwa TM)"
 
 msgid "Rijksdriehoekscoördinaten (Netherlands)"
-msgstr ""
+msgstr "Rijksdriehoekscoördinaten (Holandia RD)"
 
 msgid "SWEREF99 13 30 / EPSG:3008 (Sweden)"
 msgstr "SWEREF99 13 30 / EPSG:3008 (Szwecja)"
@@ -13759,7 +13917,7 @@ msgid "Swiss Grid (Switzerland)"
 msgstr "Siatka szwajcarska (stosowana w Szwajcarii)"
 
 msgid "<i>CH1903 / LV03</i>"
-msgstr ""
+msgstr "<i>CH1903 / LV03</i>"
 
 msgid "Guadeloupe Fort-Marigot 1949"
 msgstr "Gwadelupa Fort-Marigot 1949"
@@ -13777,17 +13935,14 @@ msgid "Guyane RGFG95"
 msgstr "Gujana RGFG95"
 
 msgid "UTM France (DOM)"
-msgstr ""
+msgstr "UTM France (DOM)"
 
 msgid "UTM Geodesic system"
-msgstr ""
+msgstr "UTM System Geodezyjny"
 
 msgid "UTM"
 msgstr "UTM"
 
-msgid "UTM Zone"
-msgstr "Strefa UTM"
-
 msgid "North"
 msgstr "Północ"
 
@@ -14097,10 +14252,10 @@ msgid "Shortcut"
 msgstr "Skrót"
 
 msgid "Shortcut Background: User"
-msgstr ""
+msgstr "Skrót tła: Użytkownik"
 
 msgid "Shortcut Background: Modified"
-msgstr ""
+msgstr "Skrót tła: Zmieniony"
 
 msgid "Use default"
 msgstr "Użycie domyślnego"
@@ -14298,9 +14453,6 @@ msgstr ""
 msgid "Error parsing {0}: "
 msgstr "Błąd przetwarzania {0}: "
 
-msgid "Presets"
-msgstr "Szablony"
-
 msgid "Search for objects by preset..."
 msgstr "Szukaj obiekty według szablonu..."
 
@@ -14357,13 +14509,13 @@ msgid "Optional Attributes:"
 msgstr "Dodatkowe atrybuty:"
 
 msgid "Unknown requisite: {0}"
-msgstr ""
+msgstr "Nieznany wymóg: {0}"
 
 msgid "Unknown regexp value: {0}"
-msgstr ""
+msgstr "Nieznana wartość wyrażenia regularnego: {0}"
 
 msgid "Illegal member expression: {0}"
-msgstr ""
+msgstr "Niepoprawne wyrażenie członka: {0}"
 
 msgid "Available roles"
 msgstr "Dostępne role"
@@ -14618,10 +14770,10 @@ msgstr ""
 "jednocześnie parametry „uid” i „display_name”"
 
 msgid "Unsupported parameter ''{0}'' in changeset query string"
-msgstr ""
+msgstr "nieobsługiwany parametr ''{0}'' w zapytaniu zestawu zmian"
 
 msgid "Unexpected format for port number in preference ''{0}''. Got ''{1}''."
-msgstr ""
+msgstr "Nieprawidłowy format numeru portu w parametrze „{0}”. Jest {1}."
 
 msgid "The proxy will not be used."
 msgstr "Proxy nie będzie użyte."
@@ -14633,18 +14785,24 @@ msgid ""
 "Unexpected value for preference ''{0}'' found. Got ''{1}''. Will use no "
 "proxy."
 msgstr ""
+"Nieoczekiwana wartość w parametrze ''{0}''. Jest ''{1}''. Nie zostanie użyte "
+"proxy."
 
 msgid ""
 "Unexpected parameters for HTTP proxy. Got host ''{0}'' and port ''{1}''."
 msgstr ""
+"Nieoczekiwany parametr dla proxy HTTP. Jest host ''{0}'' i port ''{1}''."
 
 msgid ""
 "Unexpected parameters for SOCKS proxy. Got host ''{0}'' and port ''{1}''."
 msgstr ""
+"Nieoczekiwany parametr dla proxy SOCKS. Jest host ''{0}'' i port ''{1}''."
 
 msgid ""
 "Connection to proxy ''{0}'' for URI ''{1}'' failed. Exception was: {2}"
 msgstr ""
+"Połączenie z proxy ''{0}'' pod adresem ''{1}'' zakończone niepowodzeniem. "
+"Wyjątek: {2}"
 
 msgid ""
 "The JVM is not configured to lookup proxies from the system settings. The "
@@ -14659,7 +14817,7 @@ msgid "Parsing response from server..."
 msgstr "Przetwarzanie odpowiedzi z serwera..."
 
 msgid "Unexpected XML element with name ''{0}''"
-msgstr ""
+msgstr "Nieoczekiwany element XML z nazwą ''{0}''"
 
 msgid "Parse error: invalid document structure for GPX document."
 msgstr "Błąd parsowania: błędna struktura dokumentu gpx"
@@ -14725,6 +14883,7 @@ msgstr "Strona internetowa JOSM"
 
 msgid "Unable to access ''{0}'': {1} not available (offline mode)"
 msgstr ""
+"Nie można uzyskać dostępu do ''{0}'': {1} nie dostępne (tryb offline)"
 
 msgid "Unable to initialize OSM API."
 msgstr "Nie można zainicjować API OSM."
@@ -14795,7 +14954,7 @@ msgid "Note upload failed"
 msgstr "Wysyłanie uwag nie powiodło się"
 
 msgid "Error parsing note response from server"
-msgstr ""
+msgstr "Błąd parsowania odpowiedzi uwagi z serwera."
 
 msgid "(Code={0})"
 msgstr "(Kod={0})"
@@ -14833,19 +14992,20 @@ msgid "Parsing changeset content ..."
 msgstr "Przetwarzam zawartość zestawu zmian..."
 
 msgid "Illegal boolean value for attribute ''{0}''. Got ''{1}''."
-msgstr ""
+msgstr "Niedozwolona wartość logiczna atrybutu ''{0}''. Jest ''{1}''."
 
 msgid "Illegal value for attribute ''{0}''. Got ''{1}''."
-msgstr "Niedozwolona wartość atrybutu „{0}”. Otrzymano „{1}”"
+msgstr "Niedozwolona wartość atrybutu ''{0}''. Jest ''{1}''."
 
 msgid "Illegal numeric value for attribute ''{0}''. Got ''{1}''."
-msgstr "Niedozwolona numeryczna wartość atrybutu „{0}”. Otrzymano „{1}”."
+msgstr "Niedozwolona wartość numeryczna atrybutu ''{0}''. Jest ''{1}''."
 
 msgid "Missing mandatory attribute ''{0}'' of XML element {1}."
-msgstr ""
+msgstr "Brakuje wymaganego atrubutu ''{0}'' elementu XML {1}."
 
 msgid "Undefined element ''{0}'' found in input stream. Aborting."
 msgstr ""
+"Nieznany element ''{0}'' znaleziony w strumieniu wejściowym. Przerywanie."
 
 msgid "Parsing list of changesets..."
 msgstr "Przetwarzam listę zestawów zmian..."
@@ -14854,7 +15014,7 @@ msgid "Failed to sign a HTTP connection with an OAuth Authentication header"
 msgstr ""
 
 msgid "Unexpected value for preference ''{0}''. Got ''{1}''."
-msgstr ""
+msgstr "Nieoczekiwana wartość dla ustawienia ''{0}''. Jest ''{1}''."
 
 msgid "Parsing OSM history data ..."
 msgstr "Analiza danych o historii..."
@@ -14879,7 +15039,7 @@ msgid "Missing mandatory attribute ''{0}'' on <nd> of way {1}."
 msgstr ""
 
 msgid "Illegal value of attribute ''ref'' of element <nd>. Got {0}."
-msgstr ""
+msgstr "Niepoprawna wartość atrubutu ''ref'' elementu <nd>. Jest {0}."
 
 msgid "Deleted relation {0} contains members"
 msgstr "Usunięta relacja {0} zawiera członków"
@@ -15001,22 +15161,23 @@ msgstr ""
 "Nie można połączyć się z serwerem OSM. Sprawdź swoje połączenie z Internetem."
 
 msgid "Reading error text failed."
-msgstr ""
+msgstr "Błąd odczytywanie treści błędu."
 
 msgid "XML tag <user> is missing."
 msgstr "Brakuje znacznika XML <user>."
 
 msgid "Missing attribute ''{0}'' on XML tag ''{1}''."
-msgstr ""
+msgstr "Brakuje atrybutu ''{0}'' w znaczniku XML ''{1}''."
 
 msgid "Illegal value for attribute ''{0}'' on XML tag ''{1}''. Got {2}."
 msgstr ""
+"Niepoprawna wartość atrybutu ''{0}'' w znaczniku XML ''{1}''. Jest {2}."
 
 msgid "Reading user info ..."
-msgstr "Wczytywanie informacji o użytkowniku..."
+msgstr "Wczytywanie informacji o użytkowniku ..."
 
 msgid "Reading user preferences ..."
-msgstr ""
+msgstr "Wczytywanie ustawień użytkownika ..."
 
 msgid "Starting to upload with one request per primitive ..."
 msgstr "Rozpoczęcie wysyłania, jedno żadanie na element ..."
@@ -15034,7 +15195,7 @@ msgid "Starting to upload in one request ..."
 msgstr "Rozpoczynanie przesyłania w jednym zapytaniu..."
 
 msgid "Value >0 expected for parameter ''{0}'', got {1}"
-msgstr ""
+msgstr "Wartość >0 oczekiwana dla parametru ''{0}'', jest {1}"
 
 msgid "Starting to upload in chunks..."
 msgstr "Rozpoczynanie przesyłania w kawałkach"
@@ -15085,13 +15246,13 @@ msgid "Save user and password (unencrypted)"
 msgstr "Zapisz nazwę użytkownika i hasło (nieszyfrowane)"
 
 msgid "Assume"
-msgstr ""
+msgstr "Przyjmować"
 
 msgid "Existing values"
 msgstr "Obecne wartości"
 
 msgid "<delete from {0} objects>"
-msgstr ""
+msgstr "<usuwanie z {0} obiektów>"
 
 msgid "Old values of"
 msgstr "Stare wartości"
@@ -15106,7 +15267,7 @@ msgid "Add all tags"
 msgstr "Dodaj wszystkie znaczniki"
 
 msgid "Add checked tags to selected objects"
-msgstr ""
+msgstr "Dodaj zaznaczone znaczniki do wybranych obiektów"
 
 msgid "Shift+Enter: Add all tags to selected objects"
 msgstr "Shift+Enter: Dodaj wszystkie znaczniki do wybranych obiektów"
@@ -15115,7 +15276,7 @@ msgid "Enable the checkbox to accept the value"
 msgstr "Zaznacz pole wyboru, aby zaakceptować wartość"
 
 msgid "Accept all tags from {0} for this session"
-msgstr ""
+msgstr "Akceptuj wszystkie znaczniki z {0} dla tej sesji"
 
 msgid "Load data from API"
 msgstr "Wczytanie danych z API"
@@ -15157,21 +15318,23 @@ msgstr "RemoteControl::Serwer {0}:{1} zatrzymany."
 
 msgid "Cannot start IPv4 remotecontrol https server on port {0}: {1}"
 msgstr ""
+"Nie można uruchomić serwera https zdalnej kontroli IPv4 na porcie {0}: {1}"
 
 msgid "Cannot start IPv6 remotecontrol https server on port {0}: {1}"
 msgstr ""
+"Nie można uruchomić serwera https zdalnej kontroli IPv6 na porcie {0}: {1}"
 
 msgid "RemoteControl::Accepting secure remote connections on {0}:{1}"
-msgstr ""
+msgstr "Zdalna kontrola::Nasłuchiwanie bezpiecznych połączeń na {0}:{1}"
 
 msgid "Remote Control has been asked to create a new node."
-msgstr ""
+msgstr "Zdalna kontrola otrzymała zapytanie utworzenia nowego węzła."
 
 msgid "There is no layer opened to add node"
 msgstr "Brak otwartej warstwy do dodawania węzłów"
 
 msgid "Remote Control has been asked to create a new way."
-msgstr ""
+msgstr "Zdalna kontrola otrzymała zapytanie utworzenia nowej drogi."
 
 msgid "Invalid coordinates: {0}"
 msgstr "Nieprawidłowe współrzędne: {0}"
@@ -15186,20 +15349,24 @@ msgid ""
 "Remote Control has been asked to report its supported features. This enables "
 "web sites to guess a running JOSM version"
 msgstr ""
+"Zdalna kontrola otrzymała zapytanie o dostępne funkcje. Uruchamia to stronę "
+"odpowiednią dla danej wersji programu."
 
 msgid ""
 "Remote Control has been asked to load an imagery layer from the following "
 "URL:"
 msgstr ""
+"Zdalna kontrola otrzymała zapytanie załadowania wartwy podkładu z adresu URL:"
 
 msgid "Remote imagery"
 msgstr "Zdalne zdjęcia"
 
 msgid "Remote Control has been asked to import data from the following URL:"
 msgstr ""
+"Zdalna kontrola otrzymała zapytanie zaimportowania danych z adresu URL:"
 
 msgid "Remote Control has been asked to load data from the API."
-msgstr ""
+msgstr "Zdalna kontrola otrzymała zapytanie pobrania danych z API."
 
 msgid "The latitudes must be between {0} and {1}"
 msgstr "Szerokość geograficzna musi być pomiędzy {0} i {1}"
@@ -15211,7 +15378,7 @@ msgid "The minima must be less than the maxima"
 msgstr "Minimum musi być mniejsze niż maksimum"
 
 msgid "Remote Control has been asked to load the following data:"
-msgstr ""
+msgstr "Zdalna kontrola otrzymała zapytanie załadowania podanych danych:"
 
 msgid "Loading data"
 msgstr "Wczytywanie danych"
@@ -15220,29 +15387,33 @@ msgid ""
 "Remote Control has been asked to load objects (specified by their id) from "
 "the API."
 msgstr ""
+"Zdalna kontrola otrzymała zapytanie pobrania obiektów (o określonym id) z "
+"API."
 
 msgid "Remote Control has been asked to open a local file."
-msgstr ""
+msgstr "Zdalna kontrola otrzymała zapytanie otworzenia lokalnego pliku."
 
 msgid "Do you want to allow this?"
 msgstr "Zezwolić na to?"
 
 msgid "Confirm Remote Control action"
-msgstr ""
+msgstr "Potwierdzanie działań zdalnej kotroli"
 
 msgid "The following keys are mandatory, but have not been provided: {0}"
-msgstr ""
+msgstr "Podane klucze są wymagane ale nie zostały podane: {0}"
 
 msgid ""
 "Remote Control has been asked to report its protocol version. This enables "
 "web sites to detect a running JOSM."
 msgstr ""
+"Zdalna kontrola otrzymała zapytanie o wersję protokołu. Uruchamia to stronę "
+"internetową w celu wykrycia działania JOSM."
 
 msgid "local file"
 msgstr "lokalny plik"
 
 msgid "include"
-msgstr ""
+msgstr "dołącz"
 
 msgid "Layer contains unsaved data - save to file."
 msgstr "Warstwa zawiera niezapisane dane - zapisz do pliku."
@@ -15260,16 +15431,16 @@ msgid "Include OSM data in the .joz session file."
 msgstr "Załącz dane OSM w pliku sesji .joz."
 
 msgid "Link to a GPX data file on your local disk."
-msgstr ""
+msgstr "Link do pliku GPX na lokalnym dysku."
 
 msgid "Include GPX data in the .joz session file."
-msgstr ""
+msgstr "Załącz dane GPX w pliku sesji .joz."
 
 msgid "No file association"
 msgstr ""
 
 msgid "GPX data will be included in the session file."
-msgstr ""
+msgstr "Dane GPX powinny zostać zawarte w pliku sesji."
 
 msgid "OSM data will be included in the session file."
 msgstr "Dane OSM powinny zostać zawarte w pliku sesji."
@@ -16362,11 +16533,11 @@ msgstr "pola uprawne"
 
 msgctxt "landuse"
 msgid "farmyard"
-msgstr ""
+msgstr "zagroda"
 
 msgctxt "landuse"
 msgid "cemetery"
-msgstr ""
+msgstr "cmentarz"
 
 msgctxt "landuse"
 msgid "residential"
@@ -16386,11 +16557,11 @@ msgstr "kamieniołom"
 
 msgctxt "landuse"
 msgid "allotments"
-msgstr ""
+msgstr "ogródki działkowe"
 
 msgctxt "landuse"
 msgid "vineyard"
-msgstr ""
+msgstr "winnica"
 
 msgctxt "natural"
 msgid "scrub"
@@ -16406,23 +16577,23 @@ msgstr "teren trawiasty"
 
 msgctxt "natural"
 msgid "wetland"
-msgstr ""
+msgstr "mokradło"
 
 msgctxt "natural"
 msgid "heath"
-msgstr ""
+msgstr "wrzosowisko"
 
 msgctxt "amenity"
 msgid "fire_station"
-msgstr ""
+msgstr "remiza strażacka"
 
 msgctxt "leisure"
 msgid "park"
-msgstr ""
+msgstr "park"
 
 msgctxt "leisure"
 msgid "track"
-msgstr ""
+msgstr "tor wyścigowy"
 
 msgctxt "building"
 msgid "industrial"
@@ -16794,11 +16965,11 @@ msgstr "centrum sportowe"
 
 msgctxt "riding"
 msgid "stadium"
-msgstr ""
+msgstr "stadion"
 
 msgctxt "riding"
 msgid "track"
-msgstr ""
+msgstr "tor"
 
 msgid "clay"
 msgstr "glina"
@@ -16946,7 +17117,7 @@ msgid "Minimum age"
 msgstr "Wiek minimalny"
 
 msgid "Maximum age"
-msgstr ""
+msgstr "Maksymalny wiek"
 
 msgid "Reference"
 msgstr "Numer"
@@ -17074,6 +17245,18 @@ msgstr "wegetariańska"
 msgid "korean"
 msgstr "koreańska"
 
+msgid "donut"
+msgstr ""
+
+msgid "mediterranean"
+msgstr ""
+
+msgid "friture"
+msgstr ""
+
+msgid "crepe"
+msgstr ""
+
 msgid "Internet access"
 msgstr "Dostęp do internetu"
 
@@ -17596,7 +17779,7 @@ msgstr "platforma (morska)"
 
 msgctxt "power"
 msgid "rooftop"
-msgstr ""
+msgstr "na dachu"
 
 msgctxt "power"
 msgid "kiosk"
@@ -19392,10 +19575,10 @@ msgid "Diesel for Heavy Good Vehicles"
 msgstr "Diesel dla ciężarówek"
 
 msgid "1/25 mix (mofa/moped)"
-msgstr ""
+msgstr "Mieszanka 1/25 (motorowery/2-suwy)"
 
 msgid "1/50 mix (mofa/moped)"
-msgstr ""
+msgstr "Mieszanka 1/50 (motorowery/2-suwy)"
 
 msgid "Additives:"
 msgstr ""
@@ -19922,8 +20105,17 @@ msgstr "Elektryczność"
 msgid "Tents allowed"
 msgstr "Namioty dozwolone"
 
-msgid "Camping Site"
-msgstr "Pole namiotowe"
+msgid "Campsite"
+msgstr ""
+
+msgid "Caravans allowed"
+msgstr ""
+
+msgid "Backcountry"
+msgstr ""
+
+msgid "Group only access"
+msgstr ""
 
 msgid "Food+Drinks"
 msgstr "Wyżywienie"
@@ -19965,7 +20157,7 @@ msgid "Beer Garden"
 msgstr "Ogródek piwny"
 
 msgid "Bar"
-msgstr "Bar"
+msgstr "Drink bar"
 
 msgid "Tourism"
 msgstr "Turystyka"
@@ -22163,23 +22355,23 @@ msgstr "Elektrownia słoneczna"
 
 msgctxt "generator method"
 msgid "photovoltaic"
-msgstr ""
+msgstr "fotowoltaiczna"
 
 msgctxt "generator method"
 msgid "thermal"
-msgstr ""
+msgstr "termiczna"
 
 msgid "solar_photovoltaic_panel"
-msgstr ""
+msgstr "panel fotowoltaiczny"
 
 msgid "photovoltaic"
-msgstr ""
+msgstr "fotowoltaiczna"
 
 msgid "solar_thermal_collector"
-msgstr ""
+msgstr "kolektor słoneczny"
 
 msgid "thermal"
-msgstr ""
+msgstr "termiczna"
 
 msgid "Waste Power Generator"
 msgstr "Elektrownia na odpady"
@@ -22196,33 +22388,33 @@ msgstr "Turbina wodna"
 
 msgctxt "generator method"
 msgid "run-of-the-river"
-msgstr ""
+msgstr "przepływowa"
 
 msgctxt "generator method"
 msgid "water-pumped-storage"
-msgstr ""
+msgstr "szczytowo-pompowa"
 
 msgctxt "generator method"
 msgid "water-storage"
-msgstr ""
+msgstr "zbiornikowa"
 
 msgid "francis_turbine"
-msgstr ""
+msgstr "turbina Francisa"
 
 msgid "all methods"
-msgstr ""
+msgstr "wszystkie typy"
 
 msgid "hydrodynamic_screw"
-msgstr ""
+msgstr "turbina Archimedesa"
 
 msgid "run-of-the-river"
-msgstr ""
+msgstr "przepływowa"
 
 msgid "kaplan_turbine"
 msgstr "turbina Kaplana"
 
 msgid "run-of-the-river / water-storage"
-msgstr ""
+msgstr "przepływowa/zbiornikowa"
 
 msgid "pelton_turbine"
 msgstr "turbina Peltona"
@@ -22239,13 +22431,13 @@ msgid "stream"
 msgstr "strumień"
 
 msgid "horizontal_axis"
-msgstr ""
+msgstr "oś pozioma"
 
 msgid "barrage"
 msgstr ""
 
 msgid "vertical_axis"
-msgstr ""
+msgstr "oś pionowa"
 
 msgid "Wave Energy Converter"
 msgstr "Elektrownia falowa"
@@ -22282,15 +22474,15 @@ msgstr "Dystrybucja do odbiorców"
 
 msgctxt "power"
 msgid "converter"
-msgstr ""
+msgstr "Przekształtnik"
 
 msgctxt "power"
 msgid "compensation"
-msgstr ""
+msgstr "Kompensacja"
 
 msgctxt "power"
 msgid "transition"
-msgstr ""
+msgstr "Kablowe"
 
 msgctxt "power"
 msgid "traction"
@@ -22345,23 +22537,23 @@ msgid "Power Switch"
 msgstr "Łącznik"
 
 msgid "Type of switch"
-msgstr ""
+msgstr "Typ łącznika"
 
 msgctxt "power"
 msgid "mechanical"
-msgstr ""
+msgstr "rozłącznik"
 
 msgctxt "power"
 msgid "circuit_breaker"
-msgstr ""
+msgstr "odłącznik"
 
 msgctxt "power"
 msgid "disconnector"
-msgstr ""
+msgstr "rozłącznik"
 
 msgctxt "power"
 msgid "earthing"
-msgstr ""
+msgstr "uziemnik"
 
 msgid "Power Converter"
 msgstr "Konwerter napięcia (HVDC)"
@@ -22371,24 +22563,24 @@ msgstr "Typ konwertera"
 
 msgctxt "power"
 msgid "lcc"
-msgstr ""
+msgstr "lcc"
 
 msgctxt "power"
 msgid "vsc"
-msgstr ""
+msgstr "vsc"
 
 msgctxt "power"
 msgid "back-to-back"
-msgstr ""
+msgstr "back-to-back"
 
 msgid "Amount of poles"
 msgstr "Liczba biegunów"
 
 msgid "monopole"
-msgstr ""
+msgstr "monopole"
 
 msgid "bipole"
-msgstr ""
+msgstr "bipole"
 
 msgid "Power rating (MVA)"
 msgstr "Moc (MVA)"
@@ -22504,34 +22696,34 @@ msgstr "krańcowy"
 
 msgctxt "power"
 msgid "branch"
-msgstr "gałąź"
+msgstr "rozgałęźny/skrzyżowaniowy"
 
 msgctxt "power"
 msgid "transposing"
-msgstr ""
+msgstr "oporowy"
 
 msgctxt "power"
 msgid "crossing"
-msgstr ""
+msgstr "mocny (nad rzekami)"
 
 msgid "Branch tower type"
 msgstr "Typ odgałęzienia"
 
 msgctxt "power"
 msgid "tap"
-msgstr ""
+msgstr "odgałęzienie"
 
 msgctxt "power"
 msgid "split"
-msgstr ""
+msgstr "split"
 
 msgctxt "power"
 msgid "loop"
-msgstr ""
+msgstr "pętla"
 
 msgctxt "power"
 msgid "cross"
-msgstr ""
+msgstr "skrzyżowaniowy"
 
 msgid "Tower design"
 msgstr "Kształt słupa"
@@ -22630,13 +22822,13 @@ msgid "Pole"
 msgstr "Słup"
 
 msgid "Pole with Switch"
-msgstr ""
+msgstr "Słup z łącznikiem"
 
 msgid "Pole Attributes:"
 msgstr "Atrybuty słupa:"
 
 msgid "Switch Attributes:"
-msgstr ""
+msgstr "Atrybuty łącznika:"
 
 msgid "Pole with Transformer"
 msgstr "Słup z transformatorem"
@@ -24756,6 +24948,14 @@ msgid ""
 "resolution or better, and refreshed more frequently with ongoing updates."
 msgstr ""
 
+msgid "DigitalGlobe Premium Imagery Vintage"
+msgstr ""
+
+msgid ""
+"Imagery boundaries and capture dates. Labels appear at zoom level 14 and "
+"higher."
+msgstr ""
+
 msgid "DigitalGlobe Standard Imagery"
 msgstr "DigitalGlobe: zdjęcia zwykłe"
 
@@ -24765,6 +24965,9 @@ msgid ""
 "Landsat. Average age is 2.31 years, with some areas updated 2x per year."
 msgstr ""
 
+msgid "DigitalGlobe Standard Imagery Vintage"
+msgstr ""
+
 msgid "Esri World Imagery"
 msgstr ""
 
@@ -24799,7 +25002,7 @@ msgid "Public GPS traces uploaded to OpenStreetMap."
 msgstr "Publiczne ślady GPS wysłane do OpenStreetMap."
 
 msgid "OpenTopoMap"
-msgstr ""
+msgstr "OpenTopoMap"
 
 msgid "Public Transport (ÖPNV)"
 msgstr "Transport publiczny (ÖPNV)"
@@ -24828,6 +25031,12 @@ msgstr "Strava: termiczna mapa biegowa"
 msgid "Strava cycling and running heatmap"
 msgstr "Strava: termiczna mapa rowerowa i biegowa"
 
+msgid "Strava water sports heatmap"
+msgstr ""
+
+msgid "Strava winter sports heatmap"
+msgstr ""
+
 msgid "Locator Overlay"
 msgstr ""
 
@@ -25232,6 +25441,9 @@ msgstr ""
 msgid "SPW(allonie) most recent aerial imagery"
 msgstr ""
 
+msgid "SPW(allonie) 2016 aerial imagery"
+msgstr ""
+
 msgid "SPW(allonie) 2015 aerial imagery"
 msgstr ""
 
@@ -25277,6 +25489,14 @@ msgstr ""
 msgid "Addresses data from IBGE"
 msgstr ""
 
+msgid "Street names IBGE Salvador-BA"
+msgstr ""
+
+msgid ""
+"Streets geometry and names of Salvador, Bahia. Source: Faces de Logradouro - "
+"IBGE."
+msgstr ""
+
 msgid "Rio Mosaic 2013"
 msgstr ""
 
@@ -26007,6 +26227,9 @@ msgstr ""
 msgid "Japan GSI ortho Imagery"
 msgstr ""
 
+msgid "Japan GSI Standard Map"
+msgstr ""
+
 msgid "imagico.de OSM images for mapping: Aral Sea (low water level)"
 msgstr ""
 
@@ -26036,7 +26259,7 @@ msgstr ""
 msgid "20cm ortho - Latvia - Coastline"
 msgstr ""
 
-msgid "1.cikla ortofotokarte - Latvia"
+msgid "Orthophoto 1st cycle (1994-1999) - Latvia"
 msgstr ""
 
 msgid "ORT10LT (Lithuania)"
@@ -26045,6 +26268,9 @@ msgstr "ORT10LT (Litwa)"
 msgid "geoportail.lu all layers"
 msgstr ""
 
+msgid "geoportail.lu ortho latest"
+msgstr ""
+
 msgid "geoportail.lu ortho 2016"
 msgstr ""
 
@@ -27523,7 +27749,7 @@ msgid "{0} is deprecated for {1}"
 msgstr "{0} jest przestarzały na rzecz {1}"
 
 msgid "{0} is deprecated. Use the {1}: key prefix instead."
-msgstr ""
+msgstr "{0} jest przestarzały. Użyj prefiksu {1}: w zamian."
 
 msgid "questionable key (ending with a number)"
 msgstr "wątpliwy klucz (zakończony liczbą)"
@@ -27540,17 +27766,20 @@ msgstr "niewłaściwa wartość: {0}"
 msgid "{0} on a node. Should be used on a way."
 msgstr "{0} na węźle. Powinno być użyte na linii."
 
+msgid "{0} on a node. Should be used on a way or relation."
+msgstr "{0} na węźle. Powinno być użyte na linii lub relacji."
+
 msgid "{0} on a node. Should be drawn as an area."
-msgstr ""
+msgstr "{0} na węźle. Powinno być narysowane na obszarze."
 
 msgid "{0} on a node. Should be used in a relation"
-msgstr ""
+msgstr "{0} na węźle. Powinno być użyte w relacji."
 
 msgid "{0} on a way. Should be used on a node."
-msgstr ""
+msgstr "{0} na drodze. Powinno być użyte na węźle."
 
 msgid "{0} on a way. Should be used in a relation"
-msgstr ""
+msgstr "{0} na drodze. Powinno być użyte w relacji."
 
 msgid "node connects highway and building"
 msgstr "węzeł łączy drogę i budynek"
@@ -27559,9 +27788,11 @@ msgid ""
 "Object at Position 0.00E 0.00N. There is nothing at this position except an "
 "already mapped weather buoy."
 msgstr ""
+"Obiekt na pozycji 0.00E 0.00N. Tutaj nie ma nic więcej poza oznaczoną już "
+"boją pogodową."
 
 msgid "{0} together with {1} on a node. Remove {0}."
-msgstr ""
+msgstr "{0} razem z {1} na węźle. Usuń {0}."
 
 msgid "{0} on a node"
 msgstr "{0} na węźle"
@@ -27579,16 +27810,16 @@ msgid "{0} inside {1}"
 msgstr "{0} wewnątrz {1}"
 
 msgid "Overlapping Identical Natural Areas"
-msgstr ""
+msgstr "Nakładające się identyczne obszary naturalne"
 
 msgid "Overlapping Identical Landuses"
-msgstr ""
+msgstr "Nakładające się identyczne użycia terenu"
 
 msgid "isolated node which must be connected to a way"
 msgstr ""
 
 msgid "node connects waterway and bridge"
-msgstr ""
+msgstr "węzeł łączy wodę i most"
 
 msgid "{0} node connected to a highway"
 msgstr "{0} węzeł połączony z drogą"
@@ -27609,28 +27840,34 @@ msgid ""
 "Node connects a power line or cable with an object which is not related to "
 "the power infrastructure."
 msgstr ""
+"Węzeł łączy linię energetyczną z obiektem które nie jest powiązany z "
+"infrastrukturą elektroenergetyczną."
 
 msgid ""
 "Waterway ends without a connection to another waterway or the direction of "
 "the waterway is wrong."
 msgstr ""
+"Woda kończy się bez połączenia z inną wodą lub kierunek linii jest "
+"nieprawidłowy."
 
 msgid "Coastline inside {1}"
-msgstr ""
+msgstr "Linia brzegowa w środku {1}"
 
 msgid "{0} should be on the node where {1} and {2} intersect"
-msgstr ""
+msgstr "{0} powinno być na węźle gdzie {1} i {2} się przecinają"
 
 msgid ""
 "{0} is the tag for the linear waterway. To tag the water area use {1} + {2} "
 "instead."
 msgstr ""
+"{0} jest znacznikiem dla wody typu linia. By oznaczyć wodę typu obszar użyj "
+"{1} + {2}."
 
 msgid "Ferry route is not connected to the road network or branches."
-msgstr ""
+msgstr "Trasa promu nie jest połączona z siecią drogową lub innymi."
 
 msgid "Ferry route is not connected to a ferry terminal or branches."
-msgstr ""
+msgstr "Trasa promu nie jest połączona z portem lub innymi."
 
 msgid "abbreviated street name"
 msgstr ""
@@ -27645,21 +27882,25 @@ msgid "Unnamed unclassified highway"
 msgstr "Droga czwartorzędna bez nazwy"
 
 msgid "highway without a reference"
-msgstr ""
+msgstr "droga bez numeru referencyjnego"
 
 msgid "Unspecific highway type"
-msgstr ""
+msgstr "Nieznana wartość highway"
 
 msgid "{0} used with {1}"
 msgstr "{0} użyte z {1}"
 
 msgid "{0} is deprecated, use {1} instead. Also check similar tags like {2}"
 msgstr ""
+"{0} jest przestarzały, użyj {1} w zamian. Sprawdź także podobne znaczniki, "
+"jak {2}"
 
 msgid ""
 "Value of ''{0}'' should either be ''{1}'' or ''{2}''. For sidewalks use "
 "''{3}'' instead."
 msgstr ""
+"Wartość \"{0}\" powinna być raczej \"{1}\" lub \"{2}\". Dla chodników użyj "
+"\"{3}\" w zamian."
 
 msgid "pedestrian railway crossing without {0}"
 msgstr "przejście przez tory be {0}"
@@ -27671,27 +27912,29 @@ msgid "{0} with multiple values"
 msgstr "{0} z wieloma wartościami"
 
 msgid "empty value in semicolon-separated ''{0}''"
-msgstr ""
+msgstr "pusta wartość w oddzielanych średnikiem \"{0}\""
 
 msgid "numerical key"
 msgstr "klucz w postaci wartości liczbowej"
 
 msgid "{0} value with + sign"
-msgstr ""
+msgstr "{0} wartość ze znakiem +"
 
 msgid "{0} should be an integer value between -5 and 5"
-msgstr ""
+msgstr "{0} powinno być wartością całkowitą pomiędzy -5 i 5"
 
 msgid "{0} should have numbers only with optional .5 increments"
-msgstr ""
+msgstr "{0} powinno zawierać tylko liczby z opcjonalnym zwiększeniem .5"
 
 msgid ""
 "{0}: meters is default; period is separator; if units, put space then unit"
 msgstr ""
+"{0}: metry są domyślne; kropka jest separatorem; jeśli jednostka to po spacji"
 
 msgid ""
 "{0}: tonne is default; period is separator; if units, put space then unit"
 msgstr ""
+"{0}: tony są domyślne; kropka jest separatorem; jeśli jednostka to po spacji"
 
 msgid "unusual {0} format"
 msgstr "niespotykany format {0}"
@@ -27700,6 +27943,8 @@ msgid ""
 "{0}: kilometers is default; period is separator; if units, put space then "
 "unit"
 msgstr ""
+"{0}: kilometry są domyślne; kropka jest separatorem; jeśli jednostka to po "
+"spacji"
 
 msgid "voltage should be in volts with no units/delimiter/spaces"
 msgstr ""
@@ -27725,7 +27970,7 @@ msgid "unusual value of {0}"
 msgstr "Niespotykana wartość {0}"
 
 msgid "{0} must be a numeric value, in meters and without units"
-msgstr ""
+msgstr "{0} musi być wartością numeryczną, w metrach i bez jednostek"
 
 msgid "relation without type"
 msgstr "relacja bez typu"
@@ -27734,7 +27979,7 @@ msgid "{0} relation without {0} tag"
 msgstr "{0} relacji bez znacznika {0}"
 
 msgid "way with {0} is part of a bicycle route relation"
-msgstr ""
+msgstr "linia z {0} jest częścią relacji trasy rowerowej"
 
 msgid "religion without denomination"
 msgstr "religia bez wyznania"
@@ -27749,10 +27994,10 @@ msgid "unknown jewish denomination"
 msgstr "nieznanie wyznanie żydowskie"
 
 msgid "street name contains ss"
-msgstr ""
+msgstr "nazwa ulicy zawiera ss"
 
 msgid "street name contains ß"
-msgstr ""
+msgstr "nazwa ulicy zawiera ß"
 
 msgid "{0} is unnecessary"
 msgstr "{0} jest zbędny"
@@ -27769,57 +28014,71 @@ msgstr "{0} jest bez sensu"
 msgid "Nodes duplicating parent way tags"
 msgstr "Węzły powtarzają znaczniki linii nadrzędnej"
 
+msgid "{0} together with {1} and {2}. Remove {0}."
+msgstr "{0} razem z {1} i {2}. Usuń {0}."
+
 msgid ""
 "wikipedia tag has no language given, use ''wikipedia''=''language:page "
 "title''"
 msgstr ""
+"znacznik wikipedia nie ma podanego języka, użyj \"wikipedia\" =\"język:tytuł "
+"strony\""
 
 msgid "wikipedia tag has an unknown language prefix"
-msgstr ""
+msgstr "znacznik wikipedia ma niepoprawny prefiks języka"
 
 msgid "wikipedia tag format is deprecated"
-msgstr ""
+msgstr "znacznik wikipedia jest przestarzały"
 
 msgid "''wikipedia''=''language:page title''"
 msgstr "''wikipedia''=''język:tytuł hasła''"
 
 msgid "wikipedia ''{0}'' language is obsolete, use ''{1}'' instead"
 msgstr ""
+"język strony Wikipedii \"{0}\" jest przestarzały, użyj \"{1}\" w zamian"
 
 msgid "wikipedia ''{0}'' language is invalid, use ''{1}'' instead"
 msgstr ""
+"język strony Wikipedii \"{0}\" jest nieprawidłowy, użyj \"{1}\" w zamian"
 
 msgid "{0} tag should not have URL-encoded values like ''%27''"
 msgstr ""
+"{0} znacznik nie powinien zawierać zakodowanych wartości URL np.''%27''"
 
 msgid "wikipedia title should not start with a space after language code"
-msgstr ""
+msgstr "tytuł strony Wikipedii nie powinien zawierać spacji po kodzie języka"
 
 msgid "wikipedia title should not have ''{0}'' prefix"
-msgstr ""
+msgstr "tytuł strony Wikipedii nie powinien mieć prefiksu \"{0}\""
 
 msgid "wikipedia page title should have first letter capitalized"
-msgstr ""
+msgstr "tytuł strony Wikipedii powinien się zaczynać z dużej litery"
 
 msgid ""
 "wikipedia page title should have spaces instead of underscores (''_''→'' '')"
 msgstr ""
+"tytuł strony Wikipedii powinien zawierać spacje zamiast podkreśleń (''_''→'' "
+"'')"
 
 msgid "wikipedia language seems to be duplicated, e.g. en:en:Foo"
-msgstr ""
+msgstr "język strony Wikipedii wygląda na powielony np. pl:pl:Hel"
 
 msgid "wikidata tag must be in Qnnnn format, where n is a digit"
-msgstr ""
+msgstr "znacznik wikidata musi być w formacie Qnnnn, gdzie n jest cyfrą"
 
 msgid ""
 "wikipedia tag is set, but there is no wikidata tag. Wikipedia plugin might "
 "help with wikidata id lookups"
 msgstr ""
+"znacznik wikipedia jest dodany, ale brakuje znacznika wikidata. Wtyczka "
+"wikipedia powinna pomóc w tym."
 
 msgid ""
 "wikipedia tag is not set, but a ''{0}'' tag is. Make sure to use "
 "wikipedia=language:value together with wikidata tag."
 msgstr ""
+"znacznik wikipedia nie jest dodany, ale jest \"{0}\". Trzeba dodawać "
+"wikipedia=język:strona razem ze znacznikiem wikidata."
 
 msgid "Hide icons at low zoom"
 msgstr "Ukrywaj ikony przy niskim przybliżeniu"
@@ -27834,7 +28093,7 @@ msgid "Use alternative turn restriction icon set"
 msgstr ""
 
 msgid "Display fill colour of areas with place=*"
-msgstr ""
+msgstr "Wyświetlaj kolor wypełnienia obszarów z place=*"
 
 msgid "Areas are drawn with fill only around their inner edges"
 msgstr ""
@@ -28604,6 +28863,21 @@ msgstr "Wysyła ślady do openstreetmap.org"
 msgid "Importing..."
 msgstr "Importowanie..."
 
+msgid "Shape is started incorrectly"
+msgstr ""
+
+msgid "Can''t load SVG diagram"
+msgstr ""
+
+msgid "Can''t find root SVG element"
+msgstr ""
+
+msgid "Import primitives"
+msgstr ""
+
+msgid "Cannot find configuration file!"
+msgstr ""
+
 msgid "DXF files [ImportDxf plugin] (*.dxf)"
 msgstr "Pliki DXF [wtyczka ImportDxf] (*.dxf)"
 
@@ -28656,7 +28930,7 @@ msgid "Max"
 msgstr "Maks"
 
 msgid "Dist"
-msgstr ""
+msgstr "Dyst"
 
 msgid "Gain"
 msgstr ""
@@ -28665,7 +28939,7 @@ msgid "Tracks"
 msgstr ""
 
 msgid "Elevation profile for track ''{0}''."
-msgstr ""
+msgstr "Profil wysokości śladu ''{0}''."
 
 msgid "Elevation profile"
 msgstr "Profil wysokości"
@@ -28674,7 +28948,7 @@ msgid "(No elevation data)"
 msgstr "(Brak danych o wysokości)"
 
 msgid "Can not save preferences"
-msgstr "Nie mogę zapisać ustawień"
+msgstr "Nie można zapisać ustawień"
 
 msgid "Epsilon multiplier"
 msgstr ""
@@ -28710,7 +28984,7 @@ msgid "Add fixed points on spacebar"
 msgstr "Dodawaj nowe punkty spacją"
 
 msgid "Allow edit existing ways"
-msgstr ""
+msgstr "Pozwalaj edytować istniejące drogi"
 
 msgid "Draw closed polygons only"
 msgstr "Rysuj tylko zamknięte wielokąty"
@@ -28725,7 +28999,7 @@ msgid "Save settings"
 msgstr "Zapisz ustawienia"
 
 msgid "Can not read settings"
-msgstr "Nie mogę odczytać ustawień"
+msgstr "Nie można odczytać ustawień"
 
 msgid "Q=Options, Enter=save, Ctrl-Enter=save with tags, Up/Down=tune"
 msgstr ""
@@ -28761,7 +29035,7 @@ msgid "Cannot place node outside of the world."
 msgstr "Nie można wstawiać węzłów poza światem."
 
 msgid "Draw the way by mouse"
-msgstr ""
+msgstr "Rysuj linie za pomocą myszy"
 
 msgid "min distance={0} px ({1} m)"
 msgstr ""
@@ -28923,7 +29197,7 @@ msgid "Selects all addresses with incomplete data."
 msgstr "Zaznacza wszystkie adresy z niekompletnymi danymi."
 
 msgid "Use tag ''addr:street'' or ''addr:place''"
-msgstr ""
+msgstr "Użyj znacznika ''addr:street'' lub ''addr:place''"
 
 msgid "House Number Editor"
 msgstr "Edytor numerów domów"
@@ -28957,7 +29231,7 @@ msgid "Layer Properties"
 msgstr "Właściwości warstwy"
 
 msgid "Error while creating image layer: {0}"
-msgstr ""
+msgstr "Błąd podczas tworzenia warstwy zdjęć: {0}"
 
 msgid "Import image"
 msgstr "Importuj obraz"
@@ -28969,91 +29243,92 @@ msgid "Error while creating image layer: "
 msgstr "Błąd tworzenia warstwy obrazu: "
 
 msgid "Mapillary Images"
-msgstr ""
+msgstr "Obrazy Mapillary"
 
 msgid "Mapillary layer"
-msgstr ""
+msgstr "Warstwy Mapillary"
 
 msgid "{0} sequences, each containing between {1} and {2} images (ø {3})"
 msgstr ""
 
 msgid "{0} imported images"
-msgstr ""
+msgstr "{0} zaimportowanych obrazów"
 
 msgid "{0} downloaded images"
-msgstr ""
+msgstr "{0} pobranych obrazów"
 
 msgid "{0} images in total"
-msgstr ""
+msgstr "{0} łącznie obrazów"
 
 msgid "{0} images in {1} sequences"
-msgstr ""
+msgstr "{0} obrazów w {1} sekwencjach"
 
 msgid "Mapillary object layer"
-msgstr ""
+msgstr "Warstwa obiektów Mapillary"
 
 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 ""
+msgstr "Rozpocznij warstwę Mapillary"
 
 msgid "Mapillary"
 msgstr "Mapillary"
 
 msgid "Create Mapillary layer"
-msgstr ""
+msgstr "Utwórz warstwę Mapillary"
 
 msgid "Download Mapillary images in current view"
-msgstr ""
+msgstr "Pobierz obrazy Mapillary w obecnym widoku"
 
 msgid "Export pictures"
-msgstr ""
+msgstr "Eksportuj zdjęcia"
 
 msgid "Export Mapillary pictures"
-msgstr ""
+msgstr "Eksportuj zdjęcia Mapillary"
 
 msgid "Export images"
-msgstr ""
+msgstr "Eksportuj obrazy"
 
 msgid "Import pictures"
-msgstr ""
+msgstr "Importuj zdjęcia"
 
 msgid "Import local pictures"
-msgstr ""
+msgstr "Importuj lokalne zdjęcia"
 
 msgid "Import pictures into Mapillary layer"
-msgstr ""
+msgstr "Importuj zdjęcia na warstwę Mapillary"
 
 msgid "Join mode"
-msgstr ""
+msgstr "Tryb łączenia"
 
 msgid "Join/unjoin pictures"
-msgstr ""
+msgstr "Łączenie/rozłączanie zdjęć"
 
 msgid "Submit changeset"
-msgstr ""
+msgstr "Zatwierdź zestaw zmian"
 
 msgid "Submit the current changeset"
-msgstr ""
+msgstr "Zatwierdź obecny zestaw zmian"
 
 msgid "Submit the current changeset to Mapillary"
-msgstr ""
+msgstr "Zatwierdź obecny zestaw zmian do Mapillary"
 
 msgid "rejected"
-msgstr ""
+msgstr "odrzucone"
 
 msgid "pending"
 msgstr "oczekujące"
 
 msgid "approved"
-msgstr ""
+msgstr "przyjęte"
 
 msgid "{0} images submitted, Changeset key: {1}, State: {2}"
-msgstr ""
+msgstr "{0} zdjęć zatwierdzonych, Klucz zestawu zmian: {1}, stan: {2}"
 
 msgid "Changeset upload failed with {0} error ''{1} {2}''!"
-msgstr ""
+msgstr "Błąd wysyłania zestawu zmian z {0} ''{1} {2}''!"
 
 msgid ""
 "An exception occured while trying to submit a changeset. If this happens "
@@ -29061,201 +29336,209 @@ msgid ""
 "appears for the first time, simply try it again. This might have been an "
 "issue with the internet connection."
 msgstr ""
+"Wystąpił błąd podczas próby wysyłania zestawu zmian. Jeśli powtarza się to "
+"często, zgłoś błąd poprzez menu pomocy. Jeśli wiadomość pojawiła się "
+"pierwszy raz, po prostu spróbuj ponownie. Może wystąpiły jakieś problemy z "
+"połączeniem internetowym."
 
 msgid "Upload pictures"
-msgstr ""
+msgstr "Wyślij zdjęcia"
 
 msgid "Upload Mapillary pictures"
-msgstr ""
+msgstr "Wyślij zdjęcia Mapillary"
 
 msgid "Upload pictures."
-msgstr ""
+msgstr "Wyślij obrazy."
 
 msgid "Walk mode"
-msgstr ""
+msgstr "Tryb spaceru"
 
 msgid "Zoom to selected image"
 msgstr "Powiększ do wybranego obrazu"
 
 msgid "Zoom to the currently selected Mapillary image"
-msgstr ""
+msgstr "Powiększ do obecnie wybranego obrazu"
 
 msgid "Current Mapillary changeset"
-msgstr ""
+msgstr "Obecny zestaw zmian Mapillary"
 
 msgid "Open Mapillary changeset dialog"
-msgstr ""
+msgstr "Otwórz okno zestawu zmian Mapillary"
 
 msgid "Mapillary changeset"
-msgstr ""
+msgstr "Zestaw zmian Mapillary"
 
 msgid "Submitting changeset to server…"
 msgstr "Wysyłanie zestawu zmian na serwer…"
 
 msgid "Export all images"
-msgstr ""
+msgstr "Eksportuj wszystkie obrazy"
 
 msgid "Export selected sequence"
-msgstr ""
+msgstr "Eksportuj wybraną sekwencję"
 
 msgid "Export selected images"
-msgstr ""
+msgstr "Eksportuj wybrane obrazy"
 
 msgid "Rewrite imported images"
-msgstr ""
+msgstr "Przepisz zaimportowane obrazy"
 
 msgid "Select a folder"
-msgstr ""
+msgstr "Wybierz folder"
 
 msgid "Explore"
-msgstr ""
+msgstr "Przeglądaj"
 
 msgid "Select a directory"
-msgstr ""
+msgstr "Wybierz katalog"
 
 msgid "Speed limit"
-msgstr ""
+msgstr "Ograniczenie prędkości"
 
 msgid "Give way"
-msgstr ""
+msgstr "Ustąp pierwszeństwa"
 
 msgid "No entry"
-msgstr ""
+msgstr "Zakaz wjazdu"
 
 msgid "Intersection danger"
-msgstr ""
+msgstr "Niebezpieczne skrzyżowanie"
 
 msgid "Mandatory direction (any)"
-msgstr ""
+msgstr "Nakaz skrętu"
 
 msgid "Uneven road"
-msgstr ""
+msgstr "Koleiny"
 
 msgid "No parking"
-msgstr ""
+msgstr "Zakaz postoju"
 
 msgid "No overtaking"
-msgstr ""
+msgstr "Zakaz wyprzedzania"
 
 msgid "Pedestrian crossing"
-msgstr ""
+msgstr "Przejście dla pieszych"
 
 msgid "No turn"
-msgstr ""
+msgstr "Zakaz zawracania"
 
 msgid "Years"
-msgstr ""
+msgstr "Lata"
 
 msgid "Months"
-msgstr ""
+msgstr "Miesiące"
 
 msgid "Days"
-msgstr ""
+msgstr "Dni"
 
 msgid "Imported images"
 msgstr "Zaimportowane obrazy"
 
 msgid "Mapillary filter"
-msgstr ""
+msgstr "Filtr Mapillary"
 
 msgid "Open Mapillary filter dialog"
-msgstr ""
+msgstr "Otwiera okno filtrów Mapillary"
 
 msgid "Not older than: "
-msgstr ""
+msgstr "Nie starsze niż: "
 
 msgid "Downloaded images"
-msgstr ""
+msgstr "Pobrane obrazy:"
 
 msgid "Only images with signs"
-msgstr ""
+msgstr "Tylko obrazy ze znakami:"
 
 msgid "Choose signs"
-msgstr ""
+msgstr "Wybierz znaki:"
 
 msgid "Mapillary history"
-msgstr ""
+msgstr "Historia Mapillary"
 
 msgid "Open Mapillary history dialog"
-msgstr ""
+msgstr "Otwiera okno histori Mapillary"
 
 msgid "No image selected"
-msgstr ""
+msgstr "Nie wybrano obrazu"
 
 msgid "Press \"{0}\" to download images"
-msgstr ""
+msgstr "Wciśnij \"{0}\" aby pobrać obrazy"
 
 msgid "Mapillary picture"
-msgstr ""
+msgstr "Zdjęcie Mapillary"
 
 msgid "Open Mapillary window"
-msgstr ""
+msgstr "Otwiera okno Mapillary"
 
 msgid "Next picture"
-msgstr ""
+msgstr "Następne zdjęcie"
 
 msgid "Shows the next picture in the sequence"
-msgstr ""
+msgstr "Pokazuje następne zdjęcie w sekwencji"
 
 msgid "Previous picture"
-msgstr ""
+msgstr "Poprzednie zdjęcie"
 
 msgid "Shows the previous picture in the sequence"
-msgstr ""
+msgstr "Pokazuje poprzednie zdjęcie w sekwencji"
 
 msgid "Jump to red"
-msgstr ""
+msgstr "Skocz do czerwonego"
 
 msgid "Jumps to the picture at the other side of the red line"
-msgstr ""
+msgstr "Przeskakuje do zdjęcia po drugiej stronie czerwonej linii"
 
 msgid "Jump to blue"
-msgstr ""
+msgstr "Skocz do niebieskiego"
 
 msgid "Jumps to the picture at the other side of the blue line"
-msgstr ""
+msgstr "Przeskakuje do zdjęcia po drugiej stronie niebieskiej linii"
 
 msgid "Stops the walk."
-msgstr ""
+msgstr "Zatrzymaj spacer."
 
 msgid "Play"
-msgstr ""
+msgstr "Idź"
 
 msgid "Continues with the paused walk."
-msgstr ""
+msgstr "Kontynuuje przerwany spacer."
 
 msgid "Pause"
-msgstr ""
+msgstr "Zatrzymaj"
 
 msgid "Pauses the walk."
-msgstr ""
+msgstr "Zatrzymuje spacer."
 
 msgid "Display hour when the picture was taken"
-msgstr ""
+msgstr "Wyświetlaj godzinę wykonania zdjęcia."
 
 msgid "Use 24 hour format"
-msgstr ""
+msgstr "Używaj formatu 24-godzinnego."
 
 msgid "Move to picture''s location with next/previous buttons"
 msgstr ""
+"Przesuwaj do lokalizacji zdjęć za pomocą przycisków następny/poprzedni."
 
 msgid "Preview images when hovering its icon"
-msgstr ""
+msgstr "Podgląd zdjęć po najechaniu na ich ikonę"
 
 msgid "Cut off sequences at download bounds"
-msgstr ""
+msgstr "Obetnij sekwencje na granicach pobierania"
 
 msgid "Enable experimental beta-features (might be unstable)"
-msgstr ""
+msgstr "Włącz tryb eksperymentalny (może być niestabilny)"
 
 msgid "Download mode"
+msgstr "Tryb pobierania"
+
+msgid "Number of images to be pre-fetched (forwards and backwards)"
 msgstr ""
 
 msgid "You are logged in as ''{0}''."
-msgstr ""
+msgstr "Jesteś zalogowany jako \"{0}\"."
 
 msgid "You are currently not logged in."
-msgstr ""
+msgstr "Nie jesteś zalogowany."
 
 msgid "Login"
 msgstr "Zaloguj"
@@ -29264,206 +29547,237 @@ msgid "Logout"
 msgstr "Wyloguj"
 
 msgid "Go to setting and log in to Mapillary before uploading."
-msgstr ""
+msgstr "Wejdź w ustawienia i zaloguj się na Mapillary przed wysłaniem."
 
 msgid "Upload selected sequence"
-msgstr ""
+msgstr "Wyślij wybraną sekwencję"
 
 msgid "Delete after upload"
-msgstr ""
+msgstr "Usuń po wysłaniu"
 
 msgid "Wait for full quality pictures"
-msgstr ""
+msgstr "Czekaj na zdjęcia w pełnej rozdzielczości"
 
 msgid "Follow selected image"
-msgstr ""
+msgstr "Podążaj za wybranym zdjęciem"
 
 msgid "Go forward"
-msgstr ""
+msgstr "Idź do przodu"
 
 msgid "Which image layers do you want to import into the Mapillary layer?"
-msgstr ""
+msgstr "Które warstwy zdjęć chcesz zaimportować do warstwy Mapillary?"
 
 msgid "Import"
 msgstr "Import"
 
 msgid "Could not import a geotagged image to the Mapillary layer!"
 msgstr ""
+"Nie można zaimportować zdjęc z zapisaną pozycją GPS do warstwy Mapillary."
 
 msgid "{0} ({1} images)"
-msgstr ""
+msgstr "{0} ({1} zdjęć)"
 
 msgid ""
 "From which source do you want to import images to the Mapillary layer?"
-msgstr ""
+msgstr "Z jakiego źródła chcesz zaimportować zdjęcia do warstwy Mapillary?"
 
 msgid "There are currently no layers with geotagged images!"
-msgstr ""
+msgstr "Nie ma obecnie warstw ze zdjęciami z zapisaną pozycją GPS."
 
 msgid "Images from my file system"
-msgstr ""
+msgstr "Zdjęcia z mojego systemu plików"
 
 msgid "Select the images you want to import"
-msgstr ""
+msgstr "Wybierz zdjęcia które chcesz zaimportować"
 
 msgid "All images in a directory"
-msgstr ""
+msgstr "Wszystkie zdjęcia w katalogu"
 
 msgid "Select directory to import images from"
-msgstr ""
+msgstr "Wybierz katalog z którego zaimportować zdjęcia"
 
 msgid "From existing image layer"
-msgstr ""
+msgstr "Z istniejącej warstwy zdjęć"
 
 msgid "Import exception"
-msgstr ""
+msgstr "Wyjątek importowania"
 
 msgid "Could not import the image ''{0}''!"
-msgstr ""
+msgstr "Nie można zaimportować zdjęcia ''{0}''!"
 
 msgid "Could not import the directory ''{0}''!"
-msgstr ""
+msgstr "Nie można zaimportować katalogu ''{0}''!"
 
 msgid ""
 "A tag with key <i>{0}</i> is already present on the selected OSM object."
 msgstr ""
+"Znacznik z kluczem <i>{0}</i> obecnie istnieje w wybranym obiekcie OSM."
 
 msgid ""
 "Do you really want to replace the current value <i>{0}</i> with the new "
 "value <i>{1}</i>?"
-msgstr ""
+msgstr "Na pewno chcesz zamienić obecną wartość <i>{0}</i> nową <i>{1}</i>?"
 
 msgid "Tag conflict"
-msgstr ""
+msgstr "Konflikt znaczników"
 
 msgid "Key copied to clipboard"
-msgstr ""
+msgstr "Klucz skopiowany do schowka"
 
 msgid ""
 "The Mapillary plugin now uses a separate panel to display extra information "
 "(like the image key) and actions for the currently selected Mapillary image "
 "(like viewing it in a browser)."
 msgstr ""
+"Wtyczka Mapillary uzywa teraz osobnego panelu do wyświetlania dodatkowych "
+"informacji (jak klucz obrazu) i akcji dla obecnie wybranego obrazu Mapillary "
+"(np. wyświetlanie w przeglądarce)."
 
 msgid ""
 "It can be activated by clicking the left button at the bottom of this "
 "message or the button in the toolbar on the left, which uses the same icon."
 msgstr ""
+"Może on zostać aktywowany poprzez naciśnięcie lewego przycisku myszy na "
+"przycisk tej wiadomości lub przycisk na pasku narzędzi po lewej, który używa "
+"takiej samej ikony."
 
 msgid "I got it, close this."
-msgstr ""
+msgstr "Zrozumiałem, zamknij okno."
 
 msgid "Image info"
-msgstr ""
+msgstr "Informacje o obrazie"
 
 msgid "Displays detail information on the currently selected Mapillary image"
 msgstr ""
+"Wyświetla szczegółowe informacje o obecnie wybranym obrazie Mapillary"
 
 msgid "Show detections on top of image"
-msgstr ""
+msgstr "Pokaż wykrywanie na górze obrazu"
 
 msgid "View in browser"
-msgstr ""
+msgstr "Zobacz w przeglądarce"
 
 msgid "Copy key"
-msgstr ""
+msgstr "Kopuj klucz"
 
 msgid "Add Mapillary tag"
-msgstr ""
+msgstr "Dodaj znacznik Mapillary"
 
 msgid "Image detections"
-msgstr ""
+msgstr "Wykrywanie zdjęcia"
 
 msgid "Image actions"
-msgstr ""
+msgstr "Akcje zdjęcia"
 
 msgid "Image key"
-msgstr ""
+msgstr "Klucz zdjęcia"
 
 msgid "Sequence key"
-msgstr ""
+msgstr "Klucz sekwencji"
 
 msgid "{0} detections"
-msgstr ""
+msgstr "{0} wykryć"
 
 msgid "image has no key"
-msgstr ""
+msgstr "obraz nie ma klucza"
 
 msgid "unknown user"
-msgstr ""
+msgstr "nieznany użytkownik"
 
 msgid "sequence has no key"
-msgstr ""
+msgstr "sekwencja nie ma klucza"
 
 msgid "Could not open the URL {0} in a browser"
-msgstr ""
+msgstr "Nie można otworzyć adresu URL {0} w przeglądarce"
 
 msgid "Downloading map objects…"
-msgstr ""
+msgstr "Pobieranie elementów mapy…"
 
 msgid "All map objects loaded."
-msgstr ""
+msgstr "Wsyzstkie dane mapy załadowane."
 
 msgid "Too many map objects, zoom in to see all."
-msgstr ""
+msgstr "Za dużo elementów mapy, przybliż żeby zobaczyć wszystko."
 
 msgid "Downloading map objects failed!"
-msgstr ""
+msgstr "Błąd pobierania elementów mapy!"
 
 msgid "Mapillary objects"
-msgstr ""
+msgstr "Obiekty Mapillary"
 
 msgid "Displays objects detected by Mapillary from their street view imagery"
-msgstr ""
+msgstr "Wyświetla obiekty wykryte przez Mapillary z ich podkładu street view"
 
 msgid "Deleted {0} image"
 msgid_plural "Deleted {0} images"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Usunięto {0} zdjęcie"
+msgstr[1] "Usunięto {0} zdjęcia"
+msgstr[2] "Usunięto {0} zdjęć"
 
 msgid "Imported {0} image"
 msgid_plural "Imported {0} images"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Zaimportowano {0} zdjęć"
+msgstr[1] "Zaimportowano {0} zdjęcia"
+msgstr[2] "Zaimportowano {0} zdjęć"
 
 msgid "2 images joined"
-msgstr ""
+msgstr "2 zdjęcia połączone"
 
 msgid "Moved {0} image"
 msgid_plural "Moved {0} images"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Przeniesiono {0} zdjęcie"
+msgstr[1] "Przeniesiono {0} zdjęcia"
+msgstr[2] "Przesniesiono {0} zdjęć"
 
 msgid "Turned {0} image"
 msgid_plural "Turned {0} images"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Obrócono {0} zdjęcie"
+msgstr[1] "Obrócono {0} zdjęcia"
+msgstr[2] "Obrócono {0} zdjęć"
 
 msgid "2 images unjoined"
-msgstr ""
+msgstr "2 zdjęcia rozłączone"
 
 msgid "Could not read from URL {0}!"
-msgstr ""
+msgstr "Nie można odczytać z URL {0}!"
 
 msgid ""
 "{0}\n"
 "Could not read map objects from URL\n"
 "{1}!"
 msgstr ""
+"{0}\n"
+"Nie można odczytać elementów mapy z URL\n"
+"{1}!"
 
 msgid "everything in the visible area"
-msgstr ""
+msgstr "wszystko w widocznym obszarze"
 
 msgid "areas with downloaded OSM-data"
-msgstr ""
+msgstr "obszary z pobranymi danymi OSM"
 
 msgid "only when manually requested"
+msgstr "tylko przy ręcznym żądaniu"
+
+msgid ""
+"The Mapillary layer has stopped downloading images, because the requested "
+"area is too big!"
+msgstr ""
+"Warstwa Mapillary przestała pobierać obrazy, ponieważ żądany obszar jest za "
+"duży!"
+
+msgid ""
+"To solve this problem, you could zoom in and load a smaller area of the map."
 msgstr ""
+"By rozwiązać ten problem, powinieneś przybliżyć i załadować mniejszy obszar "
+"mapy."
 
 msgid ""
-"The downloaded OSM area is too big. Download mode has been changed to OSM "
-"area until the layer is restarted."
+"To solve this problem, you could switch to download mode ''{0}'' and load "
+"Mapillary images for a smaller portion of the map."
 msgstr ""
+"By rozwiązać ten problem, powinieneś przełączyć na tryb pobierania ''{0}'' i "
+"załadować obrazy Mapillary z mniejszej części mapy."
 
 msgid "Downloading"
 msgstr "Pobieranie"
@@ -29472,40 +29786,40 @@ msgid "Select mode"
 msgstr "Wybierz tryb"
 
 msgid "Mapillary login"
-msgstr ""
+msgstr "Logowanie Mapillary"
 
 msgid "Login successful, return to JOSM."
-msgstr ""
+msgstr "Zalogowano pomyślnie, powrót do JOSM."
 
 msgid "Supported image formats (JPG and PNG)"
 msgstr "Obsługiwane formaty obrazów (JPG i PNG)"
 
 msgid "Downloading Mapillary images"
-msgstr ""
+msgstr "Pobieranie obrazów Mapillary"
 
 msgid "Total Mapillary images: {0}"
-msgstr ""
+msgstr "Łącznie obrazów Mapillary: {0}"
 
 msgid "Submitting Mapillary Changeset"
-msgstr ""
+msgstr "Wysyłanie zestawu zmian Mapillary"
 
 msgid "No images found"
-msgstr ""
+msgstr "Nie znaleziono zdjęć"
 
 msgid "You have successfully uploaded {0} images to mapillary.com"
-msgstr ""
+msgstr "Pomyślnie wysłano {0} obrazów do mapillary.com"
 
 msgid "Finished upload"
-msgstr ""
+msgstr "Zakończono wysyłanie"
 
 msgid "You are not logged in, please log in to Mapillary in the preferences"
-msgstr ""
+msgstr "Nie jesteś zalogowany, proszę to zrobić w ustawieniach Mapillary"
 
 msgid "Not Logged in to Mapillary"
-msgstr ""
+msgstr "Nie zalogowany do Mapillary"
 
 msgid "Uploading: {0}"
-msgstr ""
+msgstr "Wysyłanie: {0}"
 
 msgid "NanoLog"
 msgstr ""
@@ -30004,7 +30318,7 @@ msgid "Tags:"
 msgstr "Znaczniki:"
 
 msgid "Source:"
-msgstr ""
+msgstr "Źródło:"
 
 msgid "Name:"
 msgstr "Nazwa:"
@@ -32789,23 +33103,6 @@ msgstr "Scala nakładające się fragmenty linie."
 msgid "Merge Overlap (combine)"
 msgstr ""
 
-msgid ""
-"<html>A role based relation membership was copied to all new ways.<br>You "
-"should verify this and correct it when necessary.</html>"
-msgstr ""
-"<html>Rola z członka relacji została skopiowana na nowe linie. <br>Sprawdź "
-"poprawność i popraw jeśli to konieczne.</html>"
-
-msgid ""
-"<html>A relation membership was copied to all new ways.<br>You should verify "
-"this and correct it when necessary.</html>"
-msgstr ""
-"<html>Przynależność do relacji została skopiowana do wszystkich nowych "
-"linii.<br>Sprawdź i popraw jeśli potrzeba.</html>"
-
-msgid "Split way"
-msgstr "Podziel linię"
-
 msgid "Michigan Left"
 msgstr ""
 
@@ -32904,13 +33201,13 @@ msgid "password"
 msgstr "hasło"
 
 msgid "proxy username"
-msgstr ""
+msgstr "nazwa użytkownika proxy"
 
 msgid "proxy password"
 msgstr "hasło proxy"
 
 msgid "oauth key"
-msgstr ""
+msgstr "klucz oauth"
 
 msgid "oauth secret"
 msgstr ""
@@ -34280,33 +34577,6 @@ msgstr ""
 msgid "PT: Route passes a oneway road in the wrong direction"
 msgstr ""
 
-msgid "moved"
-msgstr "przeniesiony"
-
-msgid "rail"
-msgstr "szyna"
-
-msgid "Can''t parse a time from this string."
-msgstr ""
-
-msgid "Invalid value"
-msgstr "Niepoprawna wartość"
-
-msgid "added"
-msgstr "dodany"
-
-msgid "Public Transport: Enable GTFSStops"
-msgstr ""
-
-msgid "Public Transport: Catch GTFS stops"
-msgstr ""
-
-msgid "skipped"
-msgstr "pominięto"
-
-msgid "Public Transport: Disable GTFS"
-msgstr ""
-
 msgid "Create Stops from GTFS ..."
 msgstr "Utwórz przystanki z GTFS ..."
 
@@ -34333,69 +34603,9 @@ msgstr "Nie znaleziono danych"
 msgid "The GTFS file was empty."
 msgstr ""
 
-msgid "Create Stops from GTFS"
-msgstr "Utwórz przystanki z GTFS"
-
-msgid "GTFS-Stops"
-msgstr ""
-
-msgid "Type of stops to add"
-msgstr ""
-
-msgid "Time on your GPS device"
-msgstr ""
-
-msgid "HH:MM:SS.sss"
-msgstr "HH:MM:SS.sss"
-
-msgid "Time on your stopwatch"
-msgstr ""
-
-msgid "Time window"
-msgstr ""
-
-msgid "seconds"
-msgstr "sekund"
-
-msgid "Move Threshold"
-msgstr ""
-
-msgid "Suggest Stops"
-msgstr ""
-
-msgid "Find"
-msgstr "Wyszukaj"
-
-msgid "Show"
-msgstr "Wyświetl"
-
-msgid "Mark"
-msgstr ""
-
-msgid "Catch"
-msgstr ""
-
-msgid "Join"
-msgstr "Połącz"
-
-msgid "Public Transport: Join GTFS stops"
-msgstr ""
-
-msgid "State"
-msgstr "Stan"
-
-msgid "[incomplete]"
-msgstr ""
-
-msgid "[empty way]"
-msgstr "[pusta droga]"
-
 msgid "[ID] {0}"
 msgstr "[ID] {0}"
 
-msgid "[gap]"
-msgstr ""
-
 msgid "Route patterns ..."
 msgstr ""
 
@@ -34438,6 +34648,15 @@ msgstr "Dodaj nowy znacznik"
 msgid "Name/Id"
 msgstr "Nazwa/Id"
 
+msgid "Find"
+msgstr "Wyszukaj"
+
+msgid "Show"
+msgstr "Wyświetl"
+
+msgid "Mark"
+msgstr ""
+
 msgid "Ref"
 msgstr ""
 
@@ -34453,10 +34672,7 @@ msgstr ""
 msgid "Maximum distance from route"
 msgstr ""
 
-msgid " [ID] {0}"
-msgstr " [ID] {0}"
-
-msgid "Public Transport: Change stop type"
+msgid "Suggest Stops"
 msgstr ""
 
 msgid "Create Stops from GPX ..."
@@ -34471,28 +34687,29 @@ msgstr "Wybierz plik GPX"
 msgid "The GPX file contained no tracks or waypoints."
 msgstr "Plik GPX nie zawiera żadnych tras ani punktów orientacyjnych"
 
-msgid "Create Stops from GPX"
-msgstr "Utwórz przystanki z GPX"
+msgid "moved"
+msgstr "przeniesiony"
 
-msgid "Tracks in this GPX file:"
-msgstr "Ślady w tym pakiecie GPX:"
+msgid "added"
+msgstr "dodany"
 
-msgid "Detach"
+msgid "Public Transport: Enable GTFSStops"
 msgstr ""
 
-msgid "implicit"
+msgid "Public Transport: Catch GTFS stops"
 msgstr ""
 
-msgid ""
-"The GPX file doesn''t contain valid trackpoints. Please use a GPX file that "
-"has trackpoints."
+msgid "skipped"
+msgstr "pominięto"
+
+msgid "Public Transport: Disable GTFS"
 msgstr ""
 
-msgid "GPX File Trouble"
+msgid "Public Transport: Join GTFS stops"
 msgstr ""
 
-msgid "unnamed"
-msgstr "bez nazwy"
+msgid "Public Transport: Change stop type"
+msgstr ""
 
 msgid "Public Transport: Add track stop"
 msgstr ""
@@ -34515,9 +34732,6 @@ msgstr ""
 msgid "Public Transport: Suggest stops"
 msgstr ""
 
-msgid "Stopname"
-msgstr ""
-
 msgid "Public Transport: Detach waypoints"
 msgstr ""
 
@@ -34530,6 +34744,89 @@ msgstr ""
 msgid "Public Transport: Edit waypoint name"
 msgstr ""
 
+msgid "rail"
+msgstr "szyna"
+
+msgid "Can''t parse a time from this string."
+msgstr ""
+
+msgid "Invalid value"
+msgstr "Niepoprawna wartość"
+
+msgid "Create Stops from GTFS"
+msgstr "Utwórz przystanki z GTFS"
+
+msgid "GTFS-Stops"
+msgstr ""
+
+msgid "Type of stops to add"
+msgstr ""
+
+msgid "Time on your GPS device"
+msgstr ""
+
+msgid "HH:MM:SS.sss"
+msgstr "HH:MM:SS.sss"
+
+msgid "Time on your stopwatch"
+msgstr ""
+
+msgid "Time window"
+msgstr ""
+
+msgid "seconds"
+msgstr "sekund"
+
+msgid "Move Threshold"
+msgstr ""
+
+msgid "Catch"
+msgstr ""
+
+msgid "Join"
+msgstr "Połącz"
+
+msgid "Create Stops from GPX"
+msgstr "Utwórz przystanki z GPX"
+
+msgid "Tracks in this GPX file:"
+msgstr "Ślady w tym pakiecie GPX:"
+
+msgid "Detach"
+msgstr ""
+
+msgid "implicit"
+msgstr ""
+
+msgid "State"
+msgstr "Stan"
+
+msgid "[incomplete]"
+msgstr ""
+
+msgid "[empty way]"
+msgstr "[pusta droga]"
+
+msgid "[gap]"
+msgstr ""
+
+msgid "Stopname"
+msgstr ""
+
+msgid " [ID] {0}"
+msgstr " [ID] {0}"
+
+msgid ""
+"The GPX file doesn''t contain valid trackpoints. Please use a GPX file that "
+"has trackpoints."
+msgstr ""
+
+msgid "GPX File Trouble"
+msgstr ""
+
+msgid "unnamed"
+msgstr "bez nazwy"
+
 msgid "Distance between stops"
 msgstr ""
 
@@ -35259,6 +35556,9 @@ msgstr "Wyświetla okno edytora znaczników"
 msgid "JOSM Tag Editor Plugin"
 msgstr "Wtyczka edycji znaczników"
 
+msgid "Presets"
+msgstr "Szablony"
+
 msgid "Abort tag editing and close dialog"
 msgstr "Anuluje edycje znaczników i zamyka okno"
 
@@ -37326,6 +37626,26 @@ msgid_plural "Overwrite ''{0}'' tags {1} from {2} with new value ''{3}''?"
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Download from Sophox API"
+msgstr ""
+
+msgid ""
+"Find places of education at least 2km, and at most 3km from the center of "
+"the selection"
+msgstr ""
+
+msgid "Show/hide Sophox snippet list"
+msgstr ""
+
+msgid "help"
+msgstr ""
+
+msgid "Server: "
+msgstr ""
+
+msgid "Wikidata+OSM server"
+msgstr ""
+
 msgid "Search Wikidata items"
 msgstr "Wyszukaj obiekty Wikidata"
 
@@ -37402,26 +37722,6 @@ msgid ""
 msgstr ""
 "Dodaje do zaznaczonych obiektów znacznik „wikidata” powiązany z tym artykułem"
 
-msgid "Download from Wikosm API"
-msgstr ""
-
-msgid ""
-"Find places of education at least 2km, and at most 3km from the center of "
-"the selection"
-msgstr ""
-
-msgid "Show/hide Wikosm snippet list"
-msgstr ""
-
-msgid "help"
-msgstr ""
-
-msgid "Server: "
-msgstr ""
-
-msgid "Wikidata+OSM server"
-msgstr ""
-
 msgid "The Ultimate WMS Super-speed Turbo Challenge II"
 msgstr "The Ultimate WMS Super-speed Turbo Challenge II"
 
diff --git a/i18n/po/pt.po b/i18n/po/pt.po
index ab563ef..934311e 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-10-30 03:38+0100\n"
-"PO-Revision-Date: 2017-10-17 22:12+0000\n"
+"POT-Creation-Date: 2017-11-26 00:06+0100\n"
+"PO-Revision-Date: 2017-11-16 13:40+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-10-30 04:58+0000\n"
-"X-Generator: Launchpad (build 18493)\n"
+"X-Launchpad-Export-Date: 2017-11-26 05:00+0000\n"
+"X-Generator: Launchpad (build 18509)\n"
 "Language: pt\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -459,12 +459,15 @@ msgstr "Eliminar Camada"
 msgid "Delete the active layer. Does not delete the associated file."
 msgstr "Elimina a camada. Não elimina o ficheiro associado."
 
-msgid "Toggle dialogs panel"
-msgstr "Mostra os painéis laterais"
+msgid "Dialogs panel"
+msgstr ""
 
 msgid "Toggle dialogs panel, maximize mapview"
 msgstr "Mostra os painéis laterais. maximizando a área visível"
 
+msgid "Toggle dialogs panel"
+msgstr "Mostra os painéis laterais"
+
 msgid "Distribute Nodes"
 msgstr "Distribuir Nós"
 
@@ -4875,7 +4878,7 @@ msgid "Property values start or end with white space"
 msgstr "Valores começam ou terminam com espaço em branco"
 
 msgid "Property values contain multiple white spaces"
-msgstr "Os valores de propriedades têm vários espaços em branco"
+msgstr "Valores com vários espaços em branco"
 
 msgid "Property values contain HTML entity"
 msgstr "Valores das etiquetas contêm entidades HTML"
@@ -5313,7 +5316,7 @@ msgid "Would you like to update now ?"
 msgstr "Quer atualizar agora?"
 
 msgid "Starting file watcher"
-msgstr ""
+msgstr "A iniciar vigiador de ficheiros"
 
 msgid "Executing platform startup hook"
 msgstr "A executar arranque da plataforma"
@@ -5462,6 +5465,8 @@ msgid ""
 "Set the preferences+data+cache directory (cache directory will be "
 "josm.home/cache)"
 msgstr ""
+"Definir pasta de preferências+dados+ficheiros temporários (a pasta de "
+"ficheiros temporários será josm.home/cache)"
 
 msgid ""
 "-Djosm.home has lower precedence, i.e. the specific setting overrides the "
@@ -7124,6 +7129,9 @@ msgstr "Coordenadas: "
 msgid "Coordinates (projected): "
 msgstr "Coordenadas (projetadas): "
 
+msgid "UTM Zone"
+msgstr "Zona UTM"
+
 msgid "Part of: "
 msgstr "Parte de: "
 
@@ -9715,6 +9723,11 @@ msgstr ""
 "Ative \"Gravar\" para gravar as alterações num ficheiro do seu computador no "
 "diretório indicado."
 
+msgid ""
+"A background upload is already in progress. Kindly wait for it to finish "
+"before uploading new changes"
+msgstr ""
+
 msgid "I would like someone to review my edits."
 msgstr "Gostaria que alguém verificasse as minhas edições."
 
@@ -10964,6 +10977,9 @@ msgstr "Altere de novo a projeção ou remova a camada"
 msgid "Save Layer"
 msgstr "Gravar Camada"
 
+msgid "Trying to set a read only data layer as edit layer"
+msgstr ""
+
 msgid "{0} note"
 msgid_plural "{0} notes"
 msgstr[0] "{0} erro reportado"
@@ -11707,6 +11723,7 @@ msgstr ""
 
 msgid "Expected floating point number for option {0}, but got ''{1}''"
 msgstr ""
+"Esperado número de ponto flutuante para a opção {0}, mas foi obtido ''{1}''"
 
 msgid ""
 "Expected two coordinates, separated by comma, for option {0}, but got ''{1}''"
@@ -11719,6 +11736,8 @@ msgstr "Na opção {0}: {1}"
 
 msgid "Expected floating point number > 0 for option {0}, but got ''{1}''"
 msgstr ""
+"Esperado número de ponto flutuante > 0 para a opção {0}, mas foi obtido "
+"''{1}''"
 
 msgid "Expected integer number > 0 for option {0}, but got ''{1}''"
 msgstr ""
@@ -11745,6 +11764,8 @@ msgstr "Esta opção pode ser repetida para carregar vários estilos."
 msgid ""
 "Style setting (in JOSM accessible in the style list dialog right click menu)"
 msgstr ""
+"Definição de estilo (no JOSM está acessível no Painel de Estilos de "
+"Visualização do Mapa clicando com o botão direito do rato num estilo)"
 
 msgid "Applies to the last style loaded with the {0} option."
 msgstr "Aplica-se ao último estilo carregado com a opção {0}."
@@ -11752,6 +11773,8 @@ 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 nível de aproximação a renderizar. (número inteiro, 0=todo o "
+"planeta, 18=nível da rua)"
 
 msgid "Select the map scale"
 msgstr "Selecione a escala do mapa"
@@ -11773,6 +11796,8 @@ 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 descarregada no ficheiro de "
+"entrada .osm (se gravado)."
 
 msgid "Specify bottom left corner of the rendering area"
 msgstr "Especifique o canto esquerdo inferior da área de renderização."
@@ -11817,16 +11842,21 @@ 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}'', será utilizado o valor padrão {2} "
+"assim como os limites da área descarregada no ficheiro de entrada .osm"
 
 msgid ""
 "Argument {0} given, but scale cannot be determined from remaining arguments"
 msgstr ""
+"Fornecido o argumento {0}, mas a escala não pode ser determinada nos "
+"argumentos restantes."
 
 msgid "Argument {0} given, expected {1} or {2}"
 msgstr "Fornecido o argumento {0}, era esperado {1} ou {2}"
 
 msgid "{0} mode, but no bounds found in osm data input file"
 msgstr ""
+"modo {0}, mas não foram encontrados limites no ficheiro de entrada osm"
 
 msgid ""
 "Unable to determine scale, one of the options {0}, {1}, {2} or {3} expected"
@@ -11881,11 +11911,6 @@ msgstr ""
 "Ocorreu um erro ao processar os estilos de visualização do mapa ''{0}''. "
 "Erro encontrado: {1}"
 
-msgid ""
-"Detected deprecated ''{0}'' in ''{1}'' which will be removed shortly. Use "
-"''{2}'' instead."
-msgstr ""
-
 msgid "Failed to locate image ''{0}''"
 msgstr "Não foi possível localizar a imagem ''{0}''"
 
@@ -13204,6 +13229,7 @@ msgstr "Desenhar os trilhos GPS que excedam este limiar."
 msgid ""
 "Render engine uses points with simulated position error instead of lines. "
 msgstr ""
+"O motor de renderização usa pontos com posição simulada em vez de linhas. "
 
 msgid "Colors points and track segments by data limits."
 msgstr ""
@@ -13230,6 +13256,9 @@ msgstr "Mostrar janela de carregamento (splash screen) ao iniciar o JOSM"
 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 ""
+
 msgid "Show localized name in selection lists"
 msgstr ""
 "Mostrar nomes traduzidos em listas de seleção (por ex. ''Londres'' em vez de "
@@ -14062,9 +14091,6 @@ msgstr "UTM Sistema geodésico"
 msgid "UTM"
 msgstr "UTM"
 
-msgid "UTM Zone"
-msgstr "Zona UTM"
-
 msgid "North"
 msgstr "Norte"
 
@@ -14606,9 +14632,6 @@ msgstr "Elemento secundário predefinido sem pai"
 msgid "Error parsing {0}: "
 msgstr "Erro ao processar {0}: "
 
-msgid "Presets"
-msgstr "Modelos de Etiquetas"
-
 msgid "Search for objects by preset..."
 msgstr "Procurar por objetos pelo modelo de etiquetas..."
 
@@ -15249,6 +15272,8 @@ msgid ""
 "Missing mandatory attributes on element ''bounds''. Got "
 "minlon=''{0}'',minlat=''{1}'',maxlon=''{2}'',maxlat=''{3}'', origin=''{4}''."
 msgstr ""
+"Faltam atributos obrigatórios no elemento ''bounds'' (limites). Obtido "
+"minlon=''{0}'',minlat=''{1}'',maxlon=''{2}'',maxlat=''{3}'', origin=''{4}''."
 
 msgid ""
 "Illegal value for attributes ''lat'', ''lon'' on node with ID {0}. Got "
@@ -15449,7 +15474,7 @@ msgid "Unexpected id 0 for osm primitive found"
 msgstr "Foi encontrado um identificador 0 inesperado para o objeto OSM"
 
 msgid "Failed to evaluate {0}"
-msgstr ""
+msgstr "Não foi possível avaliar {0}"
 
 msgid "Unexpected value for key ''{0}'' in preferences, got ''{1}''"
 msgstr "Valor inesperado da chave ''{0}'' nas preferências. Obtido ''{1}''"
@@ -17532,6 +17557,18 @@ msgstr "vegetariana"
 msgid "korean"
 msgstr "koreana"
 
+msgid "donut"
+msgstr ""
+
+msgid "mediterranean"
+msgstr "mediterrânea"
+
+msgid "friture"
+msgstr "fritos"
+
+msgid "crepe"
+msgstr "crepes"
+
 msgid "Internet access"
 msgstr "Acesso à Internet"
 
@@ -19992,10 +20029,10 @@ msgid "Service"
 msgstr ""
 
 msgid "dealer"
-msgstr ""
+msgstr "negociante"
 
 msgid "repair"
-msgstr ""
+msgstr "reparação"
 
 msgid "parts"
 msgstr "peças"
@@ -20404,8 +20441,17 @@ msgstr "Tem tomadas de eletricidade"
 msgid "Tents allowed"
 msgstr "Tendas permitidas"
 
-msgid "Camping Site"
-msgstr "Parque de Campismo"
+msgid "Campsite"
+msgstr ""
+
+msgid "Caravans allowed"
+msgstr "Permitidas Autocaravanas"
+
+msgid "Backcountry"
+msgstr ""
+
+msgid "Group only access"
+msgstr ""
 
 msgid "Food+Drinks"
 msgstr "Alimentação e Bebidas"
@@ -23244,14 +23290,14 @@ msgid "Palaeontological Site"
 msgstr "Sítio Paleontológico (Pré-história)"
 
 msgid "Grave"
-msgstr ""
+msgstr "Sepultura"
 
 msgid "Tomb"
-msgstr ""
+msgstr "Túmulo"
 
 msgctxt "tomb"
 msgid "tumulus"
-msgstr ""
+msgstr "mamoa"
 
 msgctxt "tomb"
 msgid "rock-cut"
@@ -23259,31 +23305,31 @@ msgstr ""
 
 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"
@@ -23859,7 +23905,7 @@ msgstr "Agência de Seguros / Seguradora"
 
 msgctxt "office"
 msgid "It specialist"
-msgstr ""
+msgstr "Especialista em Tecnologias da Informação"
 
 msgctxt "office"
 msgid "Lawyer"
@@ -24067,7 +24113,7 @@ msgid "Suburb"
 msgstr "Subúrbio"
 
 msgid "Quarter"
-msgstr ""
+msgstr "quarteirão"
 
 msgid "Neighbourhood"
 msgstr "Bairro"
@@ -24433,7 +24479,7 @@ msgid "Plant Nursery"
 msgstr "Viveiro de Plantas"
 
 msgid "Salt Pond"
-msgstr ""
+msgstr "Salina"
 
 msgid "Aquaculture"
 msgstr "Aquacultura"
@@ -25048,19 +25094,19 @@ msgstr "Rota 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 "Rota de Ciclismo de Montanha"
@@ -25266,6 +25312,16 @@ msgstr ""
 "interesse, com  resolução 50cm ou superior, e atualizada com mais frequência "
 "."
 
+msgid "DigitalGlobe Premium Imagery Vintage"
+msgstr "DigitalGlobe Premium Imagery Vintage"
+
+msgid ""
+"Imagery boundaries and capture dates. Labels appear at zoom level 14 and "
+"higher."
+msgstr ""
+"Limites de imagens e datas de captura. As etiquetas aparecem no nível 14 ou "
+"superior."
+
 msgid "DigitalGlobe Standard Imagery"
 msgstr "DigitalGlobe Standard Imagery"
 
@@ -25279,6 +25335,9 @@ msgstr ""
 "outras com imagens do Landsat. A idade média das imagens é de 2.31 anos, com "
 "algumas áreas atualizadas 2 vezes por ano."
 
+msgid "DigitalGlobe Standard Imagery Vintage"
+msgstr "DigitalGlobe Standard Imagery Vintage"
+
 msgid "Esri World Imagery"
 msgstr "Esri World Imagery"
 
@@ -25313,7 +25372,7 @@ msgid "Public GPS traces uploaded to OpenStreetMap."
 msgstr "Trilhos GPS públicos enviados para o OpenStreetMap."
 
 msgid "OpenTopoMap"
-msgstr ""
+msgstr "OpenTopoMap"
 
 msgid "Public Transport (ÖPNV)"
 msgstr "Transportes Públicos (ÖPNV)"
@@ -25328,7 +25387,7 @@ msgid "Stamen Terrain"
 msgstr "Stamen Terrain"
 
 msgid "Cambodia, Laos, Thailand, Vietnam, Malaysia, Myanmar bilingual"
-msgstr ""
+msgstr "Camboja, Laos, Tailândia, Vietname, Malásia, Birmânia bilingue"
 
 msgid "OpenPT Map (overlay)"
 msgstr "OpenPublicTtransport Map (sobreposição)"
@@ -25342,6 +25401,12 @@ msgstr "Strava running heatmap"
 msgid "Strava cycling and running heatmap"
 msgstr ""
 
+msgid "Strava water sports heatmap"
+msgstr ""
+
+msgid "Strava winter sports heatmap"
+msgstr ""
+
 msgid "Locator Overlay"
 msgstr "Locator - Sobreposição"
 
@@ -25370,7 +25435,7 @@ msgid "Waymarked Trails: Winter Sports"
 msgstr "Waymarked Trails: Desportos de Inverno"
 
 msgid "Wikimedia Map"
-msgstr ""
+msgstr "Mapa Wikimedia"
 
 msgid "OSM Inspector: Geometry"
 msgstr "OSM Inspector: Geometria"
@@ -25757,6 +25822,9 @@ msgstr "SPW(allonie) PICC numerical imagery"
 msgid "SPW(allonie) most recent aerial imagery"
 msgstr "SPW(allonie) imagens aéreas mais recentes"
 
+msgid "SPW(allonie) 2016 aerial imagery"
+msgstr ""
+
 msgid "SPW(allonie) 2015 aerial imagery"
 msgstr "SPW(allonie) 2015 imagens aéreas"
 
@@ -25806,6 +25874,14 @@ msgstr "IBGE Brasil - Distritos federais"
 msgid "Addresses data from IBGE"
 msgstr "IBGE Brasil - Dados de endereços"
 
+msgid "Street names IBGE Salvador-BA"
+msgstr ""
+
+msgid ""
+"Streets geometry and names of Salvador, Bahia. Source: Faces de Logradouro - "
+"IBGE."
+msgstr ""
+
 msgid "Rio Mosaic 2013"
 msgstr "Rio Mosaic 2013"
 
@@ -26550,6 +26626,9 @@ msgstr ""
 msgid "Japan GSI ortho Imagery"
 msgstr ""
 
+msgid "Japan GSI Standard Map"
+msgstr ""
+
 msgid "imagico.de OSM images for mapping: Aral Sea (low water level)"
 msgstr ""
 
@@ -26579,8 +26658,8 @@ msgstr "50cm ortho - Letónia"
 msgid "20cm ortho - Latvia - Coastline"
 msgstr "20cm ortho - Letónia - Linha Costeira"
 
-msgid "1.cikla ortofotokarte - Latvia"
-msgstr "1.cikla ortofotokarte - Latvia"
+msgid "Orthophoto 1st cycle (1994-1999) - Latvia"
+msgstr ""
 
 msgid "ORT10LT (Lithuania)"
 msgstr "ORT10LT (Lituânia)"
@@ -26588,8 +26667,11 @@ msgstr "ORT10LT (Lituânia)"
 msgid "geoportail.lu all layers"
 msgstr "geoportail.lu todas as camadas"
 
+msgid "geoportail.lu ortho latest"
+msgstr ""
+
 msgid "geoportail.lu ortho 2016"
-msgstr "geoportail.lu orto 2016"
+msgstr ""
 
 msgid "Luxembourg Inspire Railway"
 msgstr "Luxemburgo Inspire - Caminho de Ferro"
@@ -27068,24 +27150,29 @@ msgid "USGS Large Scale Imagery"
 msgstr "USGS Imagens de Satélite em Grande Escala"
 
 msgid "TIGER Roads 2012"
-msgstr ""
+msgstr "TIGER Estradas 2012"
 
 msgid "TIGER Roads 2014"
-msgstr ""
+msgstr "TIGER Estradas 2014"
 
 msgid ""
 "At zoom level 16+, public domain map data from the US Census. At lower "
 "zooms, only changes since 2006 minus changes already incorporated into "
 "OpenStreetMap"
 msgstr ""
+"No nível 16+, dados de mapa do Censo dos EUA em domínio público. A níveis "
+"menores, apenas alterações desde 2006 menos alterações já incorporadas no "
+"OpenStreetMap"
 
 msgid "TIGER Roads 2017"
-msgstr ""
+msgstr "TIGER Estradas 2017"
 
 msgid ""
 "Yellow = Public domain map data from the US Census. Red = Data not found in "
 "OpenStreetMap"
 msgstr ""
+"Amarelo = dados de mapa do Censo dos EUA em domínio público. Vermelho = "
+"dados não encontrados no OpenStreetMap"
 
 msgid "MassGIS L3 Parcels"
 msgstr "MassGIS L3 Parcelas"
@@ -27962,12 +28049,18 @@ msgid ""
 "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} mas sem uma etiqueta que o defina como túnel ou "
+"subterrâneo. Remova {1} ou adicione uma etiqueta de túnel se aplicável. "
+"Verifique também pontes e as respetivas 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} mas sem uma etiqueta que o defina como túnel ou "
+"subterrâneo. Remova {1} ou adicione uma etiqueta de túnel se aplicável. "
+"Verifique também pontes e as respetivas etiquetas {1}."
 
 msgid "{0} together with {1} and {2}. Remove {1} and {2}"
 msgstr "{0} junto com {1} e {2}. Remover {1} e {2}"
@@ -27979,7 +28072,7 @@ msgid "possibly missing {0} tag"
 msgstr "possível falta da etiqueta {0}"
 
 msgid "street with odd number of {0}, but without {1} and {2} or {3}"
-msgstr ""
+msgstr "rua com número ímpar de {0}, mas sem {1} e {2} ou {3}"
 
 msgid "{0} is deprecated"
 msgstr "''{0}'' está em desuso"
@@ -28007,11 +28100,15 @@ msgid ""
 "Wrong usage of {0} tag. Remove {1}, because it is clear that the name is "
 "missing even without an additional tag."
 msgstr ""
+"Utilização errada da etiqueta {0}. Remova {1}, porque é claro que o nome "
+"está em falta mesmo sem uma etiqueta adicional."
 
 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. Em vez disso use a chave fixme com a informação do que "
+"deve ser realmente corrigido no valor de fixme."
 
 msgid "{0} is deprecated. Please use instead a multipolygon."
 msgstr "{0} está em desuso, em vez disso usar um polígono."
@@ -28076,7 +28173,7 @@ msgid "{0} is deprecated. Use the {1}: key prefix instead."
 msgstr "{0} está em desuso. Usar a chave de prefixo {1}:"
 
 msgid "questionable key (ending with a number)"
-msgstr ""
+msgstr "chave questionável (termina com um número)"
 
 msgid "The key {0} has an uncommon value."
 msgstr "A chave {0} tem um valor incomum."
@@ -28090,6 +28187,9 @@ msgstr "valor errado: {0}"
 msgid "{0} on a node. Should be used on a way."
 msgstr "{0} num nó. Deve ser usado numa linha."
 
+msgid "{0} on a node. Should be used on a way or relation."
+msgstr "{0} num nó. Devia ser usado numa linha ou relação."
+
 msgid "{0} on a node. Should be drawn as an area."
 msgstr "{0} num nó. Deve ser usado numa área."
 
@@ -28159,11 +28259,15 @@ msgid ""
 "Node connects a power line or cable with an object which is not related to "
 "the power infrastructure."
 msgstr ""
+"Nó ligado a uma linha de distribuição de eletricidade e a um objeto não "
+"relacionado."
 
 msgid ""
 "Waterway ends without a connection to another waterway or the direction of "
 "the waterway is wrong."
 msgstr ""
+"Curso de água termina sem uma ligação a outro curso de água ou a direção do "
+"curso de água está errada."
 
 msgid "Coastline inside {1}"
 msgstr "Linha costeira dentro de {1}"
@@ -28235,7 +28339,7 @@ msgid "{0} value with + sign"
 msgstr ""
 
 msgid "{0} should be an integer value between -5 and 5"
-msgstr ""
+msgstr "{0} deve ser um número inteiro entre -5 e 5"
 
 msgid "{0} should have numbers only with optional .5 increments"
 msgstr "{0} deve ter apenas números com incrementos de .5 opcionalmente"
@@ -28329,10 +28433,15 @@ msgstr "{0} não faz sentido"
 msgid "Nodes duplicating parent way tags"
 msgstr "Nós com etiquetas iguais às da da própria linha"
 
+msgid "{0} together with {1} and {2}. Remove {0}."
+msgstr "{0} junto com {1} e {2}. Remova {0}."
+
 msgid ""
 "wikipedia tag has no language given, use ''wikipedia''=''language:page "
 "title''"
 msgstr ""
+"a etiqueta wikipedia nãotem um idioma definido, use "
+"''wikipedia''=''idioma:página da wikipédia''"
 
 msgid "wikipedia tag has an unknown language prefix"
 msgstr "etiqueta wikipedia com prefixo de idioma desconhecido"
@@ -28347,19 +28456,21 @@ msgid "wikipedia ''{0}'' language is obsolete, use ''{1}'' instead"
 msgstr "idioma em wikipedia ''{0}'' em desuso, usar antes ''{1}''"
 
 msgid "wikipedia ''{0}'' language is invalid, use ''{1}'' instead"
-msgstr ""
+msgstr "o idioma em wikipedia ''{0}'' não é válido, use antes ''{1}''"
 
 msgid "{0} tag should not have URL-encoded values like ''%27''"
 msgstr ""
 
 msgid "wikipedia title should not start with a space after language code"
 msgstr ""
+"o título da página da wikipédia não deve começar com um espaço em branco "
+"após o idioma"
 
 msgid "wikipedia title should not have ''{0}'' prefix"
-msgstr ""
+msgstr "o nome da página da wikipédia não deve ter o prefixo ''{0}''"
 
 msgid "wikipedia page title should have first letter capitalized"
-msgstr ""
+msgstr "o nome da página da wikipédia deve ter a primeiro letra em maiúscula"
 
 msgid ""
 "wikipedia page title should have spaces instead of underscores (''_''→'' '')"
@@ -29295,6 +29406,21 @@ msgstr "Envia trilhos GPS para o openstreetmap.org"
 msgid "Importing..."
 msgstr "A importar..."
 
+msgid "Shape is started incorrectly"
+msgstr ""
+
+msgid "Can''t load SVG diagram"
+msgstr ""
+
+msgid "Can''t find root SVG element"
+msgstr ""
+
+msgid "Import primitives"
+msgstr ""
+
+msgid "Cannot find configuration file!"
+msgstr ""
+
 msgid "DXF files [ImportDxf plugin] (*.dxf)"
 msgstr "Ficheiros DXF [módulo ImportDxf] (*.dxf)"
 
@@ -29954,6 +30080,9 @@ msgstr "Ativar funcionalidades experimentais beta (pode ser instável)"
 msgid "Download mode"
 msgstr "Modo de descarregamento"
 
+msgid "Number of images to be pre-fetched (forwards and backwards)"
+msgstr ""
+
 msgid "You are logged in as ''{0}''."
 msgstr "Está autenticado como ''{0}''."
 
@@ -30171,8 +30300,17 @@ msgid "only when manually requested"
 msgstr "apenas quando pedido manualmente"
 
 msgid ""
-"The downloaded OSM area is too big. Download mode has been changed to OSM "
-"area until the layer is restarted."
+"The Mapillary layer has stopped downloading images, because the requested "
+"area is too big!"
+msgstr ""
+
+msgid ""
+"To solve this problem, you could zoom in and load a smaller area of the map."
+msgstr ""
+
+msgid ""
+"To solve this problem, you could switch to download mode ''{0}'' and load "
+"Mapillary images for a smaller portion of the map."
 msgstr ""
 
 msgid "Downloading"
@@ -33792,23 +33930,6 @@ msgstr ""
 msgid "Merge Overlap (combine)"
 msgstr "Fundir Sobreposições (combinar)"
 
-msgid ""
-"<html>A role based relation membership was copied to all new ways.<br>You "
-"should verify this and correct it when necessary.</html>"
-msgstr ""
-"<html>Foram copiados funções de relações para todas as novas linhas.<br>Deve "
-"verificar isto e corrigir se for necessário.</html>"
-
-msgid ""
-"<html>A relation membership was copied to all new ways.<br>You should verify "
-"this and correct it when necessary.</html>"
-msgstr ""
-"<html>Foram copiados membros de relações para todas as novas linhas.<br>Deve "
-"verificar isto e corrigir se for necessário.</html>"
-
-msgid "Split way"
-msgstr "Separar linha"
-
 msgid "Michigan Left"
 msgstr "Esquerda Michigan"
 
@@ -35359,34 +35480,6 @@ msgstr ""
 msgid "PT: Route passes a oneway road in the wrong direction"
 msgstr ""
 
-msgid "moved"
-msgstr "movido"
-
-msgid "rail"
-msgstr "carril"
-
-msgid "Can''t parse a time from this string."
-msgstr "Não é possível analisar a hora desta expressão."
-
-msgid "Invalid value"
-msgstr "Valor inválido"
-
-msgid "added"
-msgstr "adicionado"
-
-msgid "Public Transport: Enable GTFSStops"
-msgstr ""
-"Transporte Público: Ativar paragens GTFS (General Transit Feed Specification)"
-
-msgid "Public Transport: Catch GTFS stops"
-msgstr "Transporte Público: capturar paragens GTFS"
-
-msgid "skipped"
-msgstr "ignorado"
-
-msgid "Public Transport: Disable GTFS"
-msgstr "Transporte Público: Desativar GTFS"
-
 msgid "Create Stops from GTFS ..."
 msgstr "Criar Paragens de GTFS..."
 
@@ -35415,69 +35508,9 @@ msgstr "Não foram encontrados dados"
 msgid "The GTFS file was empty."
 msgstr "O ficheiro GTFS estava vazio."
 
-msgid "Create Stops from GTFS"
-msgstr "Criar Paragens de GTFS"
-
-msgid "GTFS-Stops"
-msgstr "Paragens-GTFS"
-
-msgid "Type of stops to add"
-msgstr "Tipo de paragens a adicionar"
-
-msgid "Time on your GPS device"
-msgstr "Tempo no seu dispositivo GPS"
-
-msgid "HH:MM:SS.sss"
-msgstr "HH:MM:SS.sss"
-
-msgid "Time on your stopwatch"
-msgstr "Tempo no seu cronómetro"
-
-msgid "Time window"
-msgstr "Período de tempo"
-
-msgid "seconds"
-msgstr "segundos"
-
-msgid "Move Threshold"
-msgstr ""
-
-msgid "Suggest Stops"
-msgstr "Sugerir Paragens"
-
-msgid "Find"
-msgstr "Procurar"
-
-msgid "Show"
-msgstr "Mostrar"
-
-msgid "Mark"
-msgstr "Marcar"
-
-msgid "Catch"
-msgstr "Capturar"
-
-msgid "Join"
-msgstr "Unir"
-
-msgid "Public Transport: Join GTFS stops"
-msgstr "Transporte Público: unir paragens GTFS"
-
-msgid "State"
-msgstr "Estado"
-
-msgid "[incomplete]"
-msgstr "[incompleto]"
-
-msgid "[empty way]"
-msgstr "[linha vazia]"
-
 msgid "[ID] {0}"
 msgstr "[ID] {0}"
 
-msgid "[gap]"
-msgstr "[descontinuidade]"
-
 msgid "Route patterns ..."
 msgstr "Gestão de rotas..."
 
@@ -35520,6 +35553,15 @@ msgstr "Adicionar uma Etiqueta nova"
 msgid "Name/Id"
 msgstr "Nome/Identificador"
 
+msgid "Find"
+msgstr "Procurar"
+
+msgid "Show"
+msgstr "Mostrar"
+
+msgid "Mark"
+msgstr "Marcar"
+
 msgid "Ref"
 msgstr "Ref"
 
@@ -35535,11 +35577,8 @@ msgstr "esquerdo"
 msgid "Maximum distance from route"
 msgstr "Distância máxima da rota"
 
-msgid " [ID] {0}"
-msgstr " [ID] {0}"
-
-msgid "Public Transport: Change stop type"
-msgstr "Transporte Público: Alterar tipo de paragem"
+msgid "Suggest Stops"
+msgstr "Sugerir Paragens"
 
 msgid "Create Stops from GPX ..."
 msgstr "Criar Paragens de GPX..."
@@ -35553,30 +35592,30 @@ msgstr "Selecionar ficheiro GPX (GPS)"
 msgid "The GPX file contained no tracks or waypoints."
 msgstr "O ficheiro GPX não contém trilhos nem pontos GPS."
 
-msgid "Create Stops from GPX"
-msgstr "Criar Paragens de GPX"
+msgid "moved"
+msgstr "movido"
 
-msgid "Tracks in this GPX file:"
-msgstr "Trilhos GPS no ficheiro GPX;"
+msgid "added"
+msgstr "adicionado"
 
-msgid "Detach"
-msgstr "Desconectar"
+msgid "Public Transport: Enable GTFSStops"
+msgstr ""
+"Transporte Público: Ativar paragens GTFS (General Transit Feed Specification)"
 
-msgid "implicit"
-msgstr "implícito"
+msgid "Public Transport: Catch GTFS stops"
+msgstr "Transporte Público: capturar paragens GTFS"
 
-msgid ""
-"The GPX file doesn''t contain valid trackpoints. Please use a GPX file that "
-"has trackpoints."
-msgstr ""
-"O ficheiro GPX não contém pontos GPS válidos. Por favor use um ficheiro GPX "
-"que tenha pontos GPS."
+msgid "skipped"
+msgstr "ignorado"
 
-msgid "GPX File Trouble"
-msgstr "Problema no Ficheiro GPX"
+msgid "Public Transport: Disable GTFS"
+msgstr "Transporte Público: Desativar GTFS"
 
-msgid "unnamed"
-msgstr "sem nome"
+msgid "Public Transport: Join GTFS stops"
+msgstr "Transporte Público: unir paragens GTFS"
+
+msgid "Public Transport: Change stop type"
+msgstr "Transporte Público: Alterar tipo de paragem"
 
 msgid "Public Transport: Add track stop"
 msgstr "Transporte Público: Adicionar paragem"
@@ -35599,9 +35638,6 @@ msgstr "Transporte Público: ordenar lista de paragens"
 msgid "Public Transport: Suggest stops"
 msgstr "Transporte Público: Sugerir paragens"
 
-msgid "Stopname"
-msgstr "Nome da paragem"
-
 msgid "Public Transport: Detach waypoints"
 msgstr "Transporte Público: Descolar pontos de trilhos"
 
@@ -35614,6 +35650,91 @@ msgstr "Transporte Público: Ativar pontos de trilhos"
 msgid "Public Transport: Edit waypoint name"
 msgstr "Transporte Público: Editar nome do ponto de trilho"
 
+msgid "rail"
+msgstr "carril"
+
+msgid "Can''t parse a time from this string."
+msgstr "Não é possível analisar a hora desta expressão."
+
+msgid "Invalid value"
+msgstr "Valor inválido"
+
+msgid "Create Stops from GTFS"
+msgstr "Criar Paragens de GTFS"
+
+msgid "GTFS-Stops"
+msgstr "Paragens-GTFS"
+
+msgid "Type of stops to add"
+msgstr "Tipo de paragens a adicionar"
+
+msgid "Time on your GPS device"
+msgstr "Tempo no seu dispositivo GPS"
+
+msgid "HH:MM:SS.sss"
+msgstr "HH:MM:SS.sss"
+
+msgid "Time on your stopwatch"
+msgstr "Tempo no seu cronómetro"
+
+msgid "Time window"
+msgstr "Período de tempo"
+
+msgid "seconds"
+msgstr "segundos"
+
+msgid "Move Threshold"
+msgstr ""
+
+msgid "Catch"
+msgstr "Capturar"
+
+msgid "Join"
+msgstr "Unir"
+
+msgid "Create Stops from GPX"
+msgstr "Criar Paragens de GPX"
+
+msgid "Tracks in this GPX file:"
+msgstr "Trilhos GPS no ficheiro GPX;"
+
+msgid "Detach"
+msgstr "Desconectar"
+
+msgid "implicit"
+msgstr "implícito"
+
+msgid "State"
+msgstr "Estado"
+
+msgid "[incomplete]"
+msgstr "[incompleto]"
+
+msgid "[empty way]"
+msgstr "[linha vazia]"
+
+msgid "[gap]"
+msgstr "[descontinuidade]"
+
+msgid "Stopname"
+msgstr "Nome da paragem"
+
+msgid " [ID] {0}"
+msgstr " [ID] {0}"
+
+msgid ""
+"The GPX file doesn''t contain valid trackpoints. Please use a GPX file that "
+"has trackpoints."
+msgstr ""
+"O ficheiro GPX não contém pontos GPS válidos. Por favor use um ficheiro GPX "
+"que tenha pontos GPS."
+
+msgid "GPX File Trouble"
+msgstr "Problema no Ficheiro GPX"
+
+msgid "unnamed"
+msgstr "sem nome"
+
 msgid "Distance between stops"
 msgstr "Distância entre paragens"
 
@@ -36394,6 +36515,9 @@ msgstr "Abre a janela do editor de etiquetas"
 msgid "JOSM Tag Editor Plugin"
 msgstr "Módulo de Edição de Etiquetas do JOSM"
 
+msgid "Presets"
+msgstr "Modelos de Etiquetas"
+
 msgid "Abort tag editing and close dialog"
 msgstr "Abortar a edição de etiquetas e fechar a janela"
 
@@ -38569,6 +38693,26 @@ msgstr[0] ""
 msgstr[1] ""
 "Substituir valores na etiqueta ''{0}'' {1} em {2} pelo novo valor ''{3}''?"
 
+msgid "Download from Sophox API"
+msgstr ""
+
+msgid ""
+"Find places of education at least 2km, and at most 3km from the center of "
+"the selection"
+msgstr "Encontrar escolas à distância entre 2km a 3km do centro da seleção"
+
+msgid "Show/hide Sophox snippet list"
+msgstr ""
+
+msgid "help"
+msgstr "ajuda"
+
+msgid "Server: "
+msgstr "Servidor: "
+
+msgid "Wikidata+OSM server"
+msgstr "Wikidata+servidor OSM"
+
 msgid "Search Wikidata items"
 msgstr "Procurar por itens Wikidata"
 
@@ -38649,26 +38793,6 @@ msgstr ""
 "Adiciona aos objetos selecionados a etiqueta  ''wikipedia'' com a página "
 "correspondente"
 
-msgid "Download from Wikosm API"
-msgstr "Descarregar da API Wikosm"
-
-msgid ""
-"Find places of education at least 2km, and at most 3km from the center of "
-"the selection"
-msgstr "Encontrar escolas à distância entre 2km a 3km do centro da seleção"
-
-msgid "Show/hide Wikosm snippet list"
-msgstr "Mostrar/ocultar favoritos Wikosm"
-
-msgid "help"
-msgstr "ajuda"
-
-msgid "Server: "
-msgstr "Servidor: "
-
-msgid "Wikidata+OSM server"
-msgstr "Wikidata+servidor OSM"
-
 msgid "The Ultimate WMS Super-speed Turbo Challenge II"
 msgstr "The Ultimate WMS Super-speed Turbo Challenge II"
 
diff --git a/i18n/po/pt_BR.po b/i18n/po/pt_BR.po
index e378d72..6152483 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-10-30 03:38+0100\n"
-"PO-Revision-Date: 2017-10-24 19:40+0000\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"
 "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-10-30 05:07+0000\n"
-"X-Generator: Launchpad (build 18493)\n"
+"X-Launchpad-Export-Date: 2017-11-26 05:09+0000\n"
+"X-Generator: Launchpad (build 18509)\n"
 "Language: pt_BR\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -450,12 +450,15 @@ msgstr "Excluir Camada"
 msgid "Delete the active layer. Does not delete the associated file."
 msgstr "Exclua a camada ativa. Não exclua o arquivo associado."
 
-msgid "Toggle dialogs panel"
-msgstr "Mostrar/esconder o painel de diálogos"
+msgid "Dialogs panel"
+msgstr ""
 
 msgid "Toggle dialogs panel, maximize mapview"
 msgstr "Esconde o painel de diálogos,expande o mapa"
 
+msgid "Toggle dialogs panel"
+msgstr "Mostrar/esconder o painel de diálogos"
+
 msgid "Distribute Nodes"
 msgstr "Distribuir Nós"
 
@@ -7022,6 +7025,9 @@ msgstr "Coordenadas: "
 msgid "Coordinates (projected): "
 msgstr "Coordenadas (projetada): "
 
+msgid "UTM Zone"
+msgstr "Zona UTM"
+
 msgid "Part of: "
 msgstr "Parte de: "
 
@@ -9551,9 +9557,14 @@ msgid "Check \"Save\" to save the layer to the file specified on the left."
 msgstr ""
 "Marque \"Salvar\" para salvar a camada no arquivo especificado à esquerda."
 
-msgid "I would like someone to review my edits."
+msgid ""
+"A background upload is already in progress. Kindly wait for it to finish "
+"before uploading new changes"
 msgstr ""
 
+msgid "I would like someone to review my edits."
+msgstr "Eu desejo que alguém revise minhas edições."
+
 msgid "Provide a brief comment for the changes you are uploading:"
 msgstr "Faça um comentário breve sobre as mudanças que está enviando:"
 
@@ -10795,6 +10806,9 @@ msgstr "Altere a projeção novamente ou remova a camada."
 msgid "Save Layer"
 msgstr "Salvar Camada"
 
+msgid "Trying to set a read only data layer as edit layer"
+msgstr ""
+
 msgid "{0} note"
 msgid_plural "{0} notes"
 msgstr[0] "{0} nota"
@@ -11685,11 +11699,6 @@ msgstr "Falha ao carregar estilos Mappaint de ''{0}''. A exceção foi: {1}"
 msgid "Failed to parse Mappaint styles from ''{0}''. Error was: {1}"
 msgstr "Falha ao analisar estilos Mappaint de ''{0}''. Erro foi: {1}"
 
-msgid ""
-"Detected deprecated ''{0}'' in ''{1}'' which will be removed shortly. Use "
-"''{2}'' instead."
-msgstr ""
-
 msgid "Failed to locate image ''{0}''"
 msgstr "Falha ao localizar imagem ''{0}''"
 
@@ -13021,6 +13030,9 @@ msgstr "Mostrar tela de abertura ao iniciar"
 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 ""
+
 msgid "Show localized name in selection lists"
 msgstr "Mostra o nome traduzido nas listas de seleção"
 
@@ -13832,9 +13844,6 @@ msgstr "Sistema Geodésico UTM"
 msgid "UTM"
 msgstr "UTM"
 
-msgid "UTM Zone"
-msgstr "Zona UTM"
-
 msgid "North"
 msgstr "Norte"
 
@@ -14354,9 +14363,6 @@ msgstr "Elemento sub da predefinição, sem pai"
 msgid "Error parsing {0}: "
 msgstr "Erro analisando {0}: "
 
-msgid "Presets"
-msgstr "Predefinições"
-
 msgid "Search for objects by preset..."
 msgstr "Procurar objetos por predefinição..."
 
@@ -16395,7 +16401,7 @@ msgstr "Adicionando certificado JOSM local para {0} keystore"
 
 msgid "Silent shortcut conflict: ''{0}'' moved by ''{1}'' to ''{2}''."
 msgstr ""
-"Silencioso conflito em atalho: ''{0}'' movido por ''{1}'' para ''{2}''."
+"Conflito silencioso de atalho: ''{0}'' movido por ''{1}'' para ''{2}''."
 
 msgid "Unknown territory id: {0}"
 msgstr ""
@@ -17243,6 +17249,18 @@ msgstr "vegetariana"
 msgid "korean"
 msgstr "coreana"
 
+msgid "donut"
+msgstr ""
+
+msgid "mediterranean"
+msgstr ""
+
+msgid "friture"
+msgstr ""
+
+msgid "crepe"
+msgstr ""
+
 msgid "Internet access"
 msgstr "Acesso à Internet"
 
@@ -19306,7 +19324,7 @@ msgid "LPG (Liquefied petroleum gas)"
 msgstr "LPG (Gás de petróleo liquefeito)"
 
 msgid "CNG (Compressed Natural Gas)"
-msgstr "CNG (Compressed Natural Gas)"
+msgstr "GNV (Gás Natural Veicular)"
 
 msgid "Pier"
 msgstr "Pier"
@@ -20116,8 +20134,17 @@ msgstr "Fonte de energia"
 msgid "Tents allowed"
 msgstr "Tendas permitidas"
 
-msgid "Camping Site"
-msgstr "Local de Camping"
+msgid "Campsite"
+msgstr ""
+
+msgid "Caravans allowed"
+msgstr ""
+
+msgid "Backcountry"
+msgstr ""
+
+msgid "Group only access"
+msgstr ""
 
 msgid "Food+Drinks"
 msgstr "Comida e Bebida"
@@ -24974,6 +25001,14 @@ msgid ""
 "resolution or better, and refreshed more frequently with ongoing updates."
 msgstr ""
 
+msgid "DigitalGlobe Premium Imagery Vintage"
+msgstr ""
+
+msgid ""
+"Imagery boundaries and capture dates. Labels appear at zoom level 14 and "
+"higher."
+msgstr ""
+
 msgid "DigitalGlobe Standard Imagery"
 msgstr ""
 
@@ -24983,6 +25018,9 @@ msgid ""
 "Landsat. Average age is 2.31 years, with some areas updated 2x per year."
 msgstr ""
 
+msgid "DigitalGlobe Standard Imagery Vintage"
+msgstr ""
+
 msgid "Esri World Imagery"
 msgstr ""
 
@@ -25046,6 +25084,12 @@ msgstr "Strava running heatmap"
 msgid "Strava cycling and running heatmap"
 msgstr ""
 
+msgid "Strava water sports heatmap"
+msgstr ""
+
+msgid "Strava winter sports heatmap"
+msgstr ""
+
 msgid "Locator Overlay"
 msgstr "Locator Overlay"
 
@@ -25450,6 +25494,9 @@ msgstr "SPW(allonie) PICC numerical imagery"
 msgid "SPW(allonie) most recent aerial imagery"
 msgstr ""
 
+msgid "SPW(allonie) 2016 aerial imagery"
+msgstr ""
+
 msgid "SPW(allonie) 2015 aerial imagery"
 msgstr "SPW(allonie) 2015 aerial imagery"
 
@@ -25495,6 +25542,14 @@ msgstr ""
 msgid "Addresses data from IBGE"
 msgstr ""
 
+msgid "Street names IBGE Salvador-BA"
+msgstr ""
+
+msgid ""
+"Streets geometry and names of Salvador, Bahia. Source: Faces de Logradouro - "
+"IBGE."
+msgstr ""
+
 msgid "Rio Mosaic 2013"
 msgstr "Rio Mosaico 2013"
 
@@ -26228,6 +26283,9 @@ msgstr ""
 msgid "Japan GSI ortho Imagery"
 msgstr ""
 
+msgid "Japan GSI Standard Map"
+msgstr ""
+
 msgid "imagico.de OSM images for mapping: Aral Sea (low water level)"
 msgstr ""
 
@@ -26257,8 +26315,8 @@ msgstr "50 cm orto - Letónia"
 msgid "20cm ortho - Latvia - Coastline"
 msgstr "20 cm orto - Letónia - Litoral"
 
-msgid "1.cikla ortofotokarte - Latvia"
-msgstr "1.cikla ortofotokarte - Latvia"
+msgid "Orthophoto 1st cycle (1994-1999) - Latvia"
+msgstr ""
 
 msgid "ORT10LT (Lithuania)"
 msgstr "ORT10LT (Lituânia)"
@@ -26266,6 +26324,9 @@ msgstr "ORT10LT (Lituânia)"
 msgid "geoportail.lu all layers"
 msgstr ""
 
+msgid "geoportail.lu ortho latest"
+msgstr ""
+
 msgid "geoportail.lu ortho 2016"
 msgstr ""
 
@@ -27769,6 +27830,9 @@ msgstr ""
 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 ""
+
 msgid "{0} on a node. Should be drawn as an area."
 msgstr "{0} em um nó. Deveria ser desenhado como uma área."
 
@@ -28003,6 +28067,9 @@ msgstr ""
 msgid "Nodes duplicating parent way tags"
 msgstr "Nós duplicando tags pai"
 
+msgid "{0} together with {1} and {2}. Remove {0}."
+msgstr ""
+
 msgid ""
 "wikipedia tag has no language given, use ''wikipedia''=''language:page "
 "title''"
@@ -28908,6 +28975,21 @@ msgstr "Enviar trilhas para openstreetmap.org"
 msgid "Importing..."
 msgstr "Importando..."
 
+msgid "Shape is started incorrectly"
+msgstr ""
+
+msgid "Can''t load SVG diagram"
+msgstr ""
+
+msgid "Can''t find root SVG element"
+msgstr ""
+
+msgid "Import primitives"
+msgstr ""
+
+msgid "Cannot find configuration file!"
+msgstr ""
+
 msgid "DXF files [ImportDxf plugin] (*.dxf)"
 msgstr ""
 
@@ -29565,6 +29647,9 @@ msgstr ""
 msgid "Download mode"
 msgstr "Modo de download"
 
+msgid "Number of images to be pre-fetched (forwards and backwards)"
+msgstr ""
+
 msgid "You are logged in as ''{0}''."
 msgstr "Você está logado como ''{0}''."
 
@@ -29776,8 +29861,17 @@ msgid "only when manually requested"
 msgstr ""
 
 msgid ""
-"The downloaded OSM area is too big. Download mode has been changed to OSM "
-"area until the layer is restarted."
+"The Mapillary layer has stopped downloading images, because the requested "
+"area is too big!"
+msgstr ""
+
+msgid ""
+"To solve this problem, you could zoom in and load a smaller area of the map."
+msgstr ""
+
+msgid ""
+"To solve this problem, you could switch to download mode ''{0}'' and load "
+"Mapillary images for a smaller portion of the map."
 msgstr ""
 
 msgid "Downloading"
@@ -33381,23 +33475,6 @@ msgstr "Mesclar sobreposição de formas."
 msgid "Merge Overlap (combine)"
 msgstr "Mesclar Sobreposição (combinar)"
 
-msgid ""
-"<html>A role based relation membership was copied to all new ways.<br>You "
-"should verify this and correct it when necessary.</html>"
-msgstr ""
-"<html>Um papel baseado na composição da relação foi copiado para todos os "
-"caminhos novos.<br>Deverá verificar isto e corrigir quando necessário.</html>"
-
-msgid ""
-"<html>A relation membership was copied to all new ways.<br>You should verify "
-"this and correct it when necessary.</html>"
-msgstr ""
-"<html>Uma composição de relação foi copiada para todos os caminhos "
-"novos.<br>Deverá verificar isto e corrigir quando necessário.</html>"
-
-msgid "Split way"
-msgstr "Dividir via"
-
 msgid "Michigan Left"
 msgstr "Michigan Esquerda"
 
@@ -34939,33 +35016,6 @@ msgstr ""
 msgid "PT: Route passes a oneway road in the wrong direction"
 msgstr ""
 
-msgid "moved"
-msgstr "movido"
-
-msgid "rail"
-msgstr "trilho"
-
-msgid "Can''t parse a time from this string."
-msgstr "Não é possível interpretar um tempo desta string."
-
-msgid "Invalid value"
-msgstr "Valor inválido"
-
-msgid "added"
-msgstr "adicionado"
-
-msgid "Public Transport: Enable GTFSStops"
-msgstr "Transporte Público: Ativar GTFSStops"
-
-msgid "Public Transport: Catch GTFS stops"
-msgstr "Transporte Público: Pegar paradas GTFS"
-
-msgid "skipped"
-msgstr "saltado"
-
-msgid "Public Transport: Disable GTFS"
-msgstr "Transporte Público: Desativar GTFS"
-
 msgid "Create Stops from GTFS ..."
 msgstr "Criar pontos a partir de GTFS..."
 
@@ -34994,69 +35044,9 @@ msgstr "Nenhuma informação encontrada"
 msgid "The GTFS file was empty."
 msgstr "O arquivo GTFS estava vazio."
 
-msgid "Create Stops from GTFS"
-msgstr "Criar paradas de GTFS"
-
-msgid "GTFS-Stops"
-msgstr "Paradas-GTFS"
-
-msgid "Type of stops to add"
-msgstr "Tipo de paradas para adicionar"
-
-msgid "Time on your GPS device"
-msgstr "Tempo no seu dispositivo GPS"
-
-msgid "HH:MM:SS.sss"
-msgstr "HH:MM:SS.sss"
-
-msgid "Time on your stopwatch"
-msgstr "Tempo em seu cronômetro"
-
-msgid "Time window"
-msgstr "janela de tempoJ"
-
-msgid "seconds"
-msgstr "segundos"
-
-msgid "Move Threshold"
-msgstr "Mover para o começo"
-
-msgid "Suggest Stops"
-msgstr "Paradas sugeridas"
-
-msgid "Find"
-msgstr "Encontrar"
-
-msgid "Show"
-msgstr "Mostrar"
-
-msgid "Mark"
-msgstr "Marca"
-
-msgid "Catch"
-msgstr "Pegar"
-
-msgid "Join"
-msgstr "Entrar"
-
-msgid "Public Transport: Join GTFS stops"
-msgstr "Transporte Público: Junte-se a paradas GTFS"
-
-msgid "State"
-msgstr "Estado"
-
-msgid "[incomplete]"
-msgstr "[incompleto]"
-
-msgid "[empty way]"
-msgstr "[via vazia]"
-
 msgid "[ID] {0}"
 msgstr "[ID] {0}"
 
-msgid "[gap]"
-msgstr "[gap]"
-
 msgid "Route patterns ..."
 msgstr "Padrões de rotas ..."
 
@@ -35099,6 +35089,15 @@ msgstr "Adicionar uma nova tag"
 msgid "Name/Id"
 msgstr "Nome/Id"
 
+msgid "Find"
+msgstr "Encontrar"
+
+msgid "Show"
+msgstr "Mostrar"
+
+msgid "Mark"
+msgstr "Marca"
+
 msgid "Ref"
 msgstr "Ref"
 
@@ -35114,11 +35113,8 @@ msgstr "lado da mão esquerda"
 msgid "Maximum distance from route"
 msgstr "Distância máxima do percurso"
 
-msgid " [ID] {0}"
-msgstr " [ID] {0}"
-
-msgid "Public Transport: Change stop type"
-msgstr "Transporte Público: Alterar o tipo de parada"
+msgid "Suggest Stops"
+msgstr "Paradas sugeridas"
 
 msgid "Create Stops from GPX ..."
 msgstr "Criar pontos a partir de GPS..."
@@ -35132,30 +35128,29 @@ msgstr "Selecionar arquivo GPX"
 msgid "The GPX file contained no tracks or waypoints."
 msgstr "O arquivo GPX não continha faixas ou waypoints."
 
-msgid "Create Stops from GPX"
-msgstr "Criar paradas de GPX"
+msgid "moved"
+msgstr "movido"
 
-msgid "Tracks in this GPX file:"
-msgstr "Traços neste arquivo GPX:"
+msgid "added"
+msgstr "adicionado"
 
-msgid "Detach"
-msgstr "Retirar"
+msgid "Public Transport: Enable GTFSStops"
+msgstr "Transporte Público: Ativar GTFSStops"
 
-msgid "implicit"
-msgstr "implícito"
+msgid "Public Transport: Catch GTFS stops"
+msgstr "Transporte Público: Pegar paradas GTFS"
 
-msgid ""
-"The GPX file doesn''t contain valid trackpoints. Please use a GPX file that "
-"has trackpoints."
-msgstr ""
-"O arquivo GPX não continha trackpoints válidos. Por favor, use um arquivo "
-"GPX, que tenha trackpoints."
+msgid "skipped"
+msgstr "saltado"
 
-msgid "GPX File Trouble"
-msgstr "GPX Problemas no arquivo"
+msgid "Public Transport: Disable GTFS"
+msgstr "Transporte Público: Desativar GTFS"
 
-msgid "unnamed"
-msgstr "sem nome"
+msgid "Public Transport: Join GTFS stops"
+msgstr "Transporte Público: Junte-se a paradas GTFS"
+
+msgid "Public Transport: Change stop type"
+msgstr "Transporte Público: Alterar o tipo de parada"
 
 msgid "Public Transport: Add track stop"
 msgstr "Transporte Público: Adicionar parada"
@@ -35178,9 +35173,6 @@ msgstr "Transporte Público: classificar lista de paradas"
 msgid "Public Transport: Suggest stops"
 msgstr "Transporte Público: Sugerir paradas"
 
-msgid "Stopname"
-msgstr "Stopname"
-
 msgid "Public Transport: Detach waypoints"
 msgstr "Transporte Público: Retirar lista de parada"
 
@@ -35193,6 +35185,91 @@ msgstr "Transporte Público: Ativar waypoints"
 msgid "Public Transport: Edit waypoint name"
 msgstr "Editar padrões de rota para transporte público"
 
+msgid "rail"
+msgstr "trilho"
+
+msgid "Can''t parse a time from this string."
+msgstr "Não é possível interpretar um tempo desta string."
+
+msgid "Invalid value"
+msgstr "Valor inválido"
+
+msgid "Create Stops from GTFS"
+msgstr "Criar paradas de GTFS"
+
+msgid "GTFS-Stops"
+msgstr "Paradas-GTFS"
+
+msgid "Type of stops to add"
+msgstr "Tipo de paradas para adicionar"
+
+msgid "Time on your GPS device"
+msgstr "Tempo no seu dispositivo GPS"
+
+msgid "HH:MM:SS.sss"
+msgstr "HH:MM:SS.sss"
+
+msgid "Time on your stopwatch"
+msgstr "Tempo em seu cronômetro"
+
+msgid "Time window"
+msgstr "janela de tempoJ"
+
+msgid "seconds"
+msgstr "segundos"
+
+msgid "Move Threshold"
+msgstr "Mover para o começo"
+
+msgid "Catch"
+msgstr "Pegar"
+
+msgid "Join"
+msgstr "Entrar"
+
+msgid "Create Stops from GPX"
+msgstr "Criar paradas de GPX"
+
+msgid "Tracks in this GPX file:"
+msgstr "Traços neste arquivo GPX:"
+
+msgid "Detach"
+msgstr "Retirar"
+
+msgid "implicit"
+msgstr "implícito"
+
+msgid "State"
+msgstr "Estado"
+
+msgid "[incomplete]"
+msgstr "[incompleto]"
+
+msgid "[empty way]"
+msgstr "[via vazia]"
+
+msgid "[gap]"
+msgstr "[gap]"
+
+msgid "Stopname"
+msgstr "Stopname"
+
+msgid " [ID] {0}"
+msgstr " [ID] {0}"
+
+msgid ""
+"The GPX file doesn''t contain valid trackpoints. Please use a GPX file that "
+"has trackpoints."
+msgstr ""
+"O arquivo GPX não continha trackpoints válidos. Por favor, use um arquivo "
+"GPX, que tenha trackpoints."
+
+msgid "GPX File Trouble"
+msgstr "GPX Problemas no arquivo"
+
+msgid "unnamed"
+msgstr "sem nome"
+
 msgid "Distance between stops"
 msgstr ""
 
@@ -35958,6 +36035,9 @@ msgstr "Inicia o diálogo do editor de etiquetas"
 msgid "JOSM Tag Editor Plugin"
 msgstr "Plug-in do Editor de Etiquetas do JOSM"
 
+msgid "Presets"
+msgstr "Predefinições"
+
 msgid "Abort tag editing and close dialog"
 msgstr "Abortar a edição de etiqueta e fechar diálogo"
 
@@ -38107,6 +38187,26 @@ msgid_plural "Overwrite ''{0}'' tags {1} from {2} with new value ''{3}''?"
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Download from Sophox API"
+msgstr ""
+
+msgid ""
+"Find places of education at least 2km, and at most 3km from the center of "
+"the selection"
+msgstr ""
+
+msgid "Show/hide Sophox snippet list"
+msgstr ""
+
+msgid "help"
+msgstr ""
+
+msgid "Server: "
+msgstr ""
+
+msgid "Wikidata+OSM server"
+msgstr ""
+
 msgid "Search Wikidata items"
 msgstr ""
 
@@ -38184,26 +38284,6 @@ msgstr ""
 "Adiciona uma etiqueta ''wikipedia'' correspondente a este artigo aos objetos "
 "selecionados"
 
-msgid "Download from Wikosm API"
-msgstr ""
-
-msgid ""
-"Find places of education at least 2km, and at most 3km from the center of "
-"the selection"
-msgstr ""
-
-msgid "Show/hide Wikosm snippet list"
-msgstr ""
-
-msgid "help"
-msgstr ""
-
-msgid "Server: "
-msgstr ""
-
-msgid "Wikidata+OSM server"
-msgstr ""
-
 msgid "The Ultimate WMS Super-speed Turbo Challenge II"
 msgstr "The Ultimate WMS Super-speed Turbo Challenge II"
 
diff --git a/i18n/po/rm.po b/i18n/po/rm.po
index eb7de3e..bf4ab14 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-10-30 03:38+0100\n"
+"POT-Creation-Date: 2017-11-26 00:06+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-10-30 04:58+0000\n"
-"X-Generator: Launchpad (build 18493)\n"
+"X-Launchpad-Export-Date: 2017-11-26 05:00+0000\n"
+"X-Generator: Launchpad (build 18509)\n"
 "Language: \n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -421,12 +421,15 @@ msgstr ""
 msgid "Delete the active layer. Does not delete the associated file."
 msgstr ""
 
-msgid "Toggle dialogs panel"
+msgid "Dialogs panel"
 msgstr ""
 
 msgid "Toggle dialogs panel, maximize mapview"
 msgstr ""
 
+msgid "Toggle dialogs panel"
+msgstr ""
+
 msgid "Distribute Nodes"
 msgstr ""
 
@@ -6488,6 +6491,9 @@ msgstr ""
 msgid "Coordinates (projected): "
 msgstr ""
 
+msgid "UTM Zone"
+msgstr ""
+
 msgid "Part of: "
 msgstr ""
 
@@ -8786,6 +8792,11 @@ msgstr ""
 msgid "Check \"Save\" to save the layer to the file specified on the left."
 msgstr ""
 
+msgid ""
+"A background upload is already in progress. Kindly wait for it to finish "
+"before uploading new changes"
+msgstr ""
+
 msgid "I would like someone to review my edits."
 msgstr ""
 
@@ -9894,6 +9905,9 @@ msgstr ""
 msgid "Save Layer"
 msgstr ""
 
+msgid "Trying to set a read only data layer as edit layer"
+msgstr ""
+
 msgid "{0} note"
 msgid_plural "{0} notes"
 msgstr[0] ""
@@ -10724,11 +10738,6 @@ msgstr ""
 msgid "Failed to parse Mappaint styles from ''{0}''. Error was: {1}"
 msgstr ""
 
-msgid ""
-"Detected deprecated ''{0}'' in ''{1}'' which will be removed shortly. Use "
-"''{2}'' instead."
-msgstr ""
-
 msgid "Failed to locate image ''{0}''"
 msgstr ""
 
@@ -11893,6 +11902,9 @@ msgstr ""
 msgid "Show object ID in selection lists"
 msgstr ""
 
+msgid "Show node coordinates in selection lists"
+msgstr ""
+
 msgid "Show localized name in selection lists"
 msgstr ""
 
@@ -12649,9 +12661,6 @@ msgstr ""
 msgid "UTM"
 msgstr ""
 
-msgid "UTM Zone"
-msgstr ""
-
 msgid "North"
 msgstr ""
 
@@ -13119,9 +13128,6 @@ msgstr ""
 msgid "Error parsing {0}: "
 msgstr ""
 
-msgid "Presets"
-msgstr ""
-
 msgid "Search for objects by preset..."
 msgstr ""
 
@@ -15663,6 +15669,18 @@ msgstr ""
 msgid "korean"
 msgstr ""
 
+msgid "donut"
+msgstr ""
+
+msgid "mediterranean"
+msgstr ""
+
+msgid "friture"
+msgstr ""
+
+msgid "crepe"
+msgstr ""
+
 msgid "Internet access"
 msgstr ""
 
@@ -18505,7 +18523,16 @@ msgstr ""
 msgid "Tents allowed"
 msgstr ""
 
-msgid "Camping Site"
+msgid "Campsite"
+msgstr ""
+
+msgid "Caravans allowed"
+msgstr ""
+
+msgid "Backcountry"
+msgstr ""
+
+msgid "Group only access"
 msgstr ""
 
 msgid "Food+Drinks"
@@ -23334,6 +23361,14 @@ msgid ""
 "resolution or better, and refreshed more frequently with ongoing updates."
 msgstr ""
 
+msgid "DigitalGlobe Premium Imagery Vintage"
+msgstr ""
+
+msgid ""
+"Imagery boundaries and capture dates. Labels appear at zoom level 14 and "
+"higher."
+msgstr ""
+
 msgid "DigitalGlobe Standard Imagery"
 msgstr ""
 
@@ -23343,6 +23378,9 @@ msgid ""
 "Landsat. Average age is 2.31 years, with some areas updated 2x per year."
 msgstr ""
 
+msgid "DigitalGlobe Standard Imagery Vintage"
+msgstr ""
+
 msgid "Esri World Imagery"
 msgstr ""
 
@@ -23406,6 +23444,12 @@ msgstr ""
 msgid "Strava cycling and running heatmap"
 msgstr ""
 
+msgid "Strava water sports heatmap"
+msgstr ""
+
+msgid "Strava winter sports heatmap"
+msgstr ""
+
 msgid "Locator Overlay"
 msgstr ""
 
@@ -23810,6 +23854,9 @@ msgstr ""
 msgid "SPW(allonie) most recent aerial imagery"
 msgstr ""
 
+msgid "SPW(allonie) 2016 aerial imagery"
+msgstr ""
+
 msgid "SPW(allonie) 2015 aerial imagery"
 msgstr ""
 
@@ -23855,6 +23902,14 @@ msgstr ""
 msgid "Addresses data from IBGE"
 msgstr ""
 
+msgid "Street names IBGE Salvador-BA"
+msgstr ""
+
+msgid ""
+"Streets geometry and names of Salvador, Bahia. Source: Faces de Logradouro - "
+"IBGE."
+msgstr ""
+
 msgid "Rio Mosaic 2013"
 msgstr ""
 
@@ -24585,6 +24640,9 @@ msgstr ""
 msgid "Japan GSI ortho Imagery"
 msgstr ""
 
+msgid "Japan GSI Standard Map"
+msgstr ""
+
 msgid "imagico.de OSM images for mapping: Aral Sea (low water level)"
 msgstr ""
 
@@ -24614,7 +24672,7 @@ msgstr ""
 msgid "20cm ortho - Latvia - Coastline"
 msgstr ""
 
-msgid "1.cikla ortofotokarte - Latvia"
+msgid "Orthophoto 1st cycle (1994-1999) - Latvia"
 msgstr ""
 
 msgid "ORT10LT (Lithuania)"
@@ -24623,6 +24681,9 @@ msgstr ""
 msgid "geoportail.lu all layers"
 msgstr ""
 
+msgid "geoportail.lu ortho latest"
+msgstr ""
+
 msgid "geoportail.lu ortho 2016"
 msgstr ""
 
@@ -26113,6 +26174,9 @@ msgstr ""
 msgid "{0} on a node. Should be used on a way."
 msgstr ""
 
+msgid "{0} on a node. Should be used on a way or relation."
+msgstr ""
+
 msgid "{0} on a node. Should be drawn as an area."
 msgstr ""
 
@@ -26340,6 +26404,9 @@ msgstr ""
 msgid "Nodes duplicating parent way tags"
 msgstr ""
 
+msgid "{0} together with {1} and {2}. Remove {0}."
+msgstr ""
+
 msgid ""
 "wikipedia tag has no language given, use ''wikipedia''=''language:page "
 "title''"
@@ -27104,6 +27171,21 @@ msgstr ""
 msgid "Importing..."
 msgstr ""
 
+msgid "Shape is started incorrectly"
+msgstr ""
+
+msgid "Can''t load SVG diagram"
+msgstr ""
+
+msgid "Can''t find root SVG element"
+msgstr ""
+
+msgid "Import primitives"
+msgstr ""
+
+msgid "Cannot find configuration file!"
+msgstr ""
+
 msgid "DXF files [ImportDxf plugin] (*.dxf)"
 msgstr ""
 
@@ -27743,6 +27825,9 @@ msgstr ""
 msgid "Download mode"
 msgstr ""
 
+msgid "Number of images to be pre-fetched (forwards and backwards)"
+msgstr ""
+
 msgid "You are logged in as ''{0}''."
 msgstr ""
 
@@ -27953,8 +28038,17 @@ msgid "only when manually requested"
 msgstr ""
 
 msgid ""
-"The downloaded OSM area is too big. Download mode has been changed to OSM "
-"area until the layer is restarted."
+"The Mapillary layer has stopped downloading images, because the requested "
+"area is too big!"
+msgstr ""
+
+msgid ""
+"To solve this problem, you could zoom in and load a smaller area of the map."
+msgstr ""
+
+msgid ""
+"To solve this problem, you could switch to download mode ''{0}'' and load "
+"Mapillary images for a smaller portion of the map."
 msgstr ""
 
 msgid "Downloading"
@@ -31266,19 +31360,6 @@ msgstr ""
 msgid "Merge Overlap (combine)"
 msgstr ""
 
-msgid ""
-"<html>A role based relation membership was copied to all new ways.<br>You "
-"should verify this and correct it when necessary.</html>"
-msgstr ""
-
-msgid ""
-"<html>A relation membership was copied to all new ways.<br>You should verify "
-"this and correct it when necessary.</html>"
-msgstr ""
-
-msgid "Split way"
-msgstr ""
-
 msgid "Michigan Left"
 msgstr ""
 
@@ -32733,254 +32814,254 @@ msgstr ""
 msgid "PT: Route passes a oneway road in the wrong direction"
 msgstr ""
 
-msgid "moved"
+msgid "Create Stops from GTFS ..."
 msgstr ""
 
-msgid "rail"
+msgid "Create Stops from a GTFS file"
 msgstr ""
 
-msgid "Can''t parse a time from this string."
+msgid "Select GTFS file (stops.txt)"
 msgstr ""
 
-msgid "Invalid value"
+msgid "File \"{0}\" does not exist"
 msgstr ""
 
-msgid "added"
+msgid "IOException \"{0}\" occurred"
 msgstr ""
 
-msgid "Public Transport: Enable GTFSStops"
+msgid ""
+"There exists no dataset. Try to download data from the server or open an OSM "
+"file."
 msgstr ""
 
-msgid "Public Transport: Catch GTFS stops"
+msgid "No data found"
 msgstr ""
 
-msgid "skipped"
+msgid "The GTFS file was empty."
 msgstr ""
 
-msgid "Public Transport: Disable GTFS"
+msgid "[ID] {0}"
 msgstr ""
 
-msgid "Create Stops from GTFS ..."
+msgid "Route patterns ..."
 msgstr ""
 
-msgid "Create Stops from a GTFS file"
+msgid "Edit Route patterns for public transport"
 msgstr ""
 
-msgid "Select GTFS file (stops.txt)"
+msgid "Route Patterns"
 msgstr ""
 
-msgid "File \"{0}\" does not exist"
+msgid "Overview"
 msgstr ""
 
-msgid "IOException \"{0}\" occurred"
+msgid "Itinerary"
 msgstr ""
 
-msgid ""
-"There exists no dataset. Try to download data from the server or open an OSM "
-"file."
+msgid "Stops"
 msgstr ""
 
-msgid "No data found"
+msgid "Meta"
 msgstr ""
 
-msgid "The GTFS file was empty."
+msgid "Existing route patterns:"
 msgstr ""
 
-msgid "Create Stops from GTFS"
+msgid "Reflect"
 msgstr ""
 
-msgid "GTFS-Stops"
+msgid "Required tags:"
 msgstr ""
 
-msgid "Type of stops to add"
+msgid "Common tags:"
 msgstr ""
 
-msgid "Time on your GPS device"
+msgid "Additional tags:"
 msgstr ""
 
-msgid "HH:MM:SS.sss"
+msgid "Add a new Tag"
 msgstr ""
 
-msgid "Time on your stopwatch"
+msgid "Name/Id"
 msgstr ""
 
-msgid "Time window"
+msgid "Find"
 msgstr ""
 
-msgid "seconds"
+msgid "Show"
 msgstr ""
 
-msgid "Move Threshold"
+msgid "Mark"
 msgstr ""
 
-msgid "Suggest Stops"
+msgid "Ref"
 msgstr ""
 
-msgid "Find"
+msgid "Stops are possible on the"
 msgstr ""
 
-msgid "Show"
+msgid "right hand side"
 msgstr ""
 
-msgid "Mark"
+msgid "left hand side"
 msgstr ""
 
-msgid "Catch"
+msgid "Maximum distance from route"
 msgstr ""
 
-msgid "Join"
+msgid "Suggest Stops"
 msgstr ""
 
-msgid "Public Transport: Join GTFS stops"
+msgid "Create Stops from GPX ..."
 msgstr ""
 
-msgid "State"
+msgid "Create Stops from a GPX file"
 msgstr ""
 
-msgid "[incomplete]"
+msgid "Select GPX file"
 msgstr ""
 
-msgid "[empty way]"
+msgid "The GPX file contained no tracks or waypoints."
 msgstr ""
 
-msgid "[ID] {0}"
+msgid "moved"
 msgstr ""
 
-msgid "[gap]"
+msgid "added"
 msgstr ""
 
-msgid "Route patterns ..."
+msgid "Public Transport: Enable GTFSStops"
 msgstr ""
 
-msgid "Edit Route patterns for public transport"
+msgid "Public Transport: Catch GTFS stops"
 msgstr ""
 
-msgid "Route Patterns"
+msgid "skipped"
 msgstr ""
 
-msgid "Overview"
+msgid "Public Transport: Disable GTFS"
 msgstr ""
 
-msgid "Itinerary"
+msgid "Public Transport: Join GTFS stops"
 msgstr ""
 
-msgid "Stops"
+msgid "Public Transport: Change stop type"
 msgstr ""
 
-msgid "Meta"
+msgid "Public Transport: Add track stop"
 msgstr ""
 
-msgid "Existing route patterns:"
+msgid "Public Transport: Delete track stop"
 msgstr ""
 
-msgid "Reflect"
+msgid "Public Transport: Detach track stop list"
 msgstr ""
 
-msgid "Required tags:"
+msgid "Public Transport: Edit track stop list"
 msgstr ""
 
-msgid "Common tags:"
+msgid "Public Transport: Relocate nodes in track stoplist"
 msgstr ""
 
-msgid "Additional tags:"
+msgid "Public Transport: sort track stop list"
 msgstr ""
 
-msgid "Add a new Tag"
+msgid "Public Transport: Suggest stops"
 msgstr ""
 
-msgid "Name/Id"
+msgid "Public Transport: Detach waypoints"
 msgstr ""
 
-msgid "Ref"
+msgid "Public Transport: Disable waypoints"
 msgstr ""
 
-msgid "Stops are possible on the"
+msgid "Public Transport: Enable waypoints"
 msgstr ""
 
-msgid "right hand side"
+msgid "Public Transport: Edit waypoint name"
 msgstr ""
 
-msgid "left hand side"
+msgid "rail"
 msgstr ""
 
-msgid "Maximum distance from route"
+msgid "Can''t parse a time from this string."
 msgstr ""
 
-msgid " [ID] {0}"
+msgid "Invalid value"
 msgstr ""
 
-msgid "Public Transport: Change stop type"
+msgid "Create Stops from GTFS"
 msgstr ""
 
-msgid "Create Stops from GPX ..."
+msgid "GTFS-Stops"
 msgstr ""
 
-msgid "Create Stops from a GPX file"
+msgid "Type of stops to add"
 msgstr ""
 
-msgid "Select GPX file"
+msgid "Time on your GPS device"
 msgstr ""
 
-msgid "The GPX file contained no tracks or waypoints."
+msgid "HH:MM:SS.sss"
 msgstr ""
 
-msgid "Create Stops from GPX"
+msgid "Time on your stopwatch"
 msgstr ""
 
-msgid "Tracks in this GPX file:"
+msgid "Time window"
 msgstr ""
 
-msgid "Detach"
+msgid "seconds"
 msgstr ""
 
-msgid "implicit"
+msgid "Move Threshold"
 msgstr ""
 
-msgid ""
-"The GPX file doesn''t contain valid trackpoints. Please use a GPX file that "
-"has trackpoints."
+msgid "Catch"
 msgstr ""
 
-msgid "GPX File Trouble"
+msgid "Join"
 msgstr ""
 
-msgid "unnamed"
+msgid "Create Stops from GPX"
 msgstr ""
 
-msgid "Public Transport: Add track stop"
+msgid "Tracks in this GPX file:"
 msgstr ""
 
-msgid "Public Transport: Delete track stop"
+msgid "Detach"
 msgstr ""
 
-msgid "Public Transport: Detach track stop list"
+msgid "implicit"
 msgstr ""
 
-msgid "Public Transport: Edit track stop list"
+msgid "State"
 msgstr ""
 
-msgid "Public Transport: Relocate nodes in track stoplist"
+msgid "[incomplete]"
 msgstr ""
 
-msgid "Public Transport: sort track stop list"
+msgid "[empty way]"
 msgstr ""
 
-msgid "Public Transport: Suggest stops"
+msgid "[gap]"
 msgstr ""
 
 msgid "Stopname"
 msgstr ""
 
-msgid "Public Transport: Detach waypoints"
+msgid " [ID] {0}"
 msgstr ""
 
-msgid "Public Transport: Disable waypoints"
+msgid ""
+"The GPX file doesn''t contain valid trackpoints. Please use a GPX file that "
+"has trackpoints."
 msgstr ""
 
-msgid "Public Transport: Enable waypoints"
+msgid "GPX File Trouble"
 msgstr ""
 
-msgid "Public Transport: Edit waypoint name"
+msgid "unnamed"
 msgstr ""
 
 msgid "Distance between stops"
@@ -33709,6 +33790,9 @@ msgstr ""
 msgid "JOSM Tag Editor Plugin"
 msgstr ""
 
+msgid "Presets"
+msgstr ""
+
 msgid "Abort tag editing and close dialog"
 msgstr ""
 
@@ -35634,6 +35718,26 @@ msgid_plural "Overwrite ''{0}'' tags {1} from {2} with new value ''{3}''?"
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Download from Sophox API"
+msgstr ""
+
+msgid ""
+"Find places of education at least 2km, and at most 3km from the center of "
+"the selection"
+msgstr ""
+
+msgid "Show/hide Sophox snippet list"
+msgstr ""
+
+msgid "help"
+msgstr ""
+
+msgid "Server: "
+msgstr ""
+
+msgid "Wikidata+OSM server"
+msgstr ""
+
 msgid "Search Wikidata items"
 msgstr ""
 
@@ -35707,26 +35811,6 @@ msgid ""
 "objects"
 msgstr ""
 
-msgid "Download from Wikosm API"
-msgstr ""
-
-msgid ""
-"Find places of education at least 2km, and at most 3km from the center of "
-"the selection"
-msgstr ""
-
-msgid "Show/hide Wikosm snippet list"
-msgstr ""
-
-msgid "help"
-msgstr ""
-
-msgid "Server: "
-msgstr ""
-
-msgid "Wikidata+OSM server"
-msgstr ""
-
 msgid "The Ultimate WMS Super-speed Turbo Challenge II"
 msgstr ""
 
diff --git a/i18n/po/ro.po b/i18n/po/ro.po
index d6c04eb..0784397 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-10-30 03:38+0100\n"
+"POT-Creation-Date: 2017-11-26 00:06+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-10-30 04:59+0000\n"
-"X-Generator: Launchpad (build 18493)\n"
+"X-Launchpad-Export-Date: 2017-11-26 05:01+0000\n"
+"X-Generator: Launchpad (build 18509)\n"
 "X-Poedit-Country: ROMANIA\n"
 "Language: ro\n"
 "X-Poedit-Language: Romanian\n"
@@ -449,12 +449,15 @@ msgstr ""
 msgid "Delete the active layer. Does not delete the associated file."
 msgstr ""
 
-msgid "Toggle dialogs panel"
+msgid "Dialogs panel"
 msgstr ""
 
 msgid "Toggle dialogs panel, maximize mapview"
 msgstr ""
 
+msgid "Toggle dialogs panel"
+msgstr ""
+
 msgid "Distribute Nodes"
 msgstr ""
 
@@ -6544,6 +6547,9 @@ msgstr ""
 msgid "Coordinates (projected): "
 msgstr ""
 
+msgid "UTM Zone"
+msgstr ""
+
 msgid "Part of: "
 msgstr ""
 
@@ -8842,6 +8848,11 @@ msgstr ""
 msgid "Check \"Save\" to save the layer to the file specified on the left."
 msgstr ""
 
+msgid ""
+"A background upload is already in progress. Kindly wait for it to finish "
+"before uploading new changes"
+msgstr ""
+
 msgid "I would like someone to review my edits."
 msgstr ""
 
@@ -9950,6 +9961,9 @@ msgstr ""
 msgid "Save Layer"
 msgstr "Salvează Strat"
 
+msgid "Trying to set a read only data layer as edit layer"
+msgstr ""
+
 msgid "{0} note"
 msgid_plural "{0} notes"
 msgstr[0] ""
@@ -10782,11 +10796,6 @@ msgstr ""
 msgid "Failed to parse Mappaint styles from ''{0}''. Error was: {1}"
 msgstr ""
 
-msgid ""
-"Detected deprecated ''{0}'' in ''{1}'' which will be removed shortly. Use "
-"''{2}'' instead."
-msgstr ""
-
 msgid "Failed to locate image ''{0}''"
 msgstr ""
 
@@ -11955,6 +11964,9 @@ msgstr ""
 msgid "Show object ID in selection lists"
 msgstr ""
 
+msgid "Show node coordinates in selection lists"
+msgstr ""
+
 msgid "Show localized name in selection lists"
 msgstr ""
 
@@ -12711,9 +12723,6 @@ msgstr ""
 msgid "UTM"
 msgstr ""
 
-msgid "UTM Zone"
-msgstr ""
-
 msgid "North"
 msgstr ""
 
@@ -13182,9 +13191,6 @@ msgstr ""
 msgid "Error parsing {0}: "
 msgstr "Eroare la prelucrarea {0}: "
 
-msgid "Presets"
-msgstr ""
-
 msgid "Search for objects by preset..."
 msgstr ""
 
@@ -15726,6 +15732,18 @@ msgstr ""
 msgid "korean"
 msgstr ""
 
+msgid "donut"
+msgstr ""
+
+msgid "mediterranean"
+msgstr ""
+
+msgid "friture"
+msgstr ""
+
+msgid "crepe"
+msgstr ""
+
 msgid "Internet access"
 msgstr ""
 
@@ -18568,7 +18586,16 @@ msgstr ""
 msgid "Tents allowed"
 msgstr ""
 
-msgid "Camping Site"
+msgid "Campsite"
+msgstr ""
+
+msgid "Caravans allowed"
+msgstr ""
+
+msgid "Backcountry"
+msgstr ""
+
+msgid "Group only access"
 msgstr ""
 
 msgid "Food+Drinks"
@@ -23397,6 +23424,14 @@ msgid ""
 "resolution or better, and refreshed more frequently with ongoing updates."
 msgstr ""
 
+msgid "DigitalGlobe Premium Imagery Vintage"
+msgstr ""
+
+msgid ""
+"Imagery boundaries and capture dates. Labels appear at zoom level 14 and "
+"higher."
+msgstr ""
+
 msgid "DigitalGlobe Standard Imagery"
 msgstr ""
 
@@ -23406,6 +23441,9 @@ msgid ""
 "Landsat. Average age is 2.31 years, with some areas updated 2x per year."
 msgstr ""
 
+msgid "DigitalGlobe Standard Imagery Vintage"
+msgstr ""
+
 msgid "Esri World Imagery"
 msgstr ""
 
@@ -23469,6 +23507,12 @@ msgstr ""
 msgid "Strava cycling and running heatmap"
 msgstr ""
 
+msgid "Strava water sports heatmap"
+msgstr ""
+
+msgid "Strava winter sports heatmap"
+msgstr ""
+
 msgid "Locator Overlay"
 msgstr ""
 
@@ -23873,6 +23917,9 @@ msgstr ""
 msgid "SPW(allonie) most recent aerial imagery"
 msgstr ""
 
+msgid "SPW(allonie) 2016 aerial imagery"
+msgstr ""
+
 msgid "SPW(allonie) 2015 aerial imagery"
 msgstr ""
 
@@ -23918,6 +23965,14 @@ msgstr ""
 msgid "Addresses data from IBGE"
 msgstr ""
 
+msgid "Street names IBGE Salvador-BA"
+msgstr ""
+
+msgid ""
+"Streets geometry and names of Salvador, Bahia. Source: Faces de Logradouro - "
+"IBGE."
+msgstr ""
+
 msgid "Rio Mosaic 2013"
 msgstr ""
 
@@ -24648,6 +24703,9 @@ msgstr ""
 msgid "Japan GSI ortho Imagery"
 msgstr ""
 
+msgid "Japan GSI Standard Map"
+msgstr ""
+
 msgid "imagico.de OSM images for mapping: Aral Sea (low water level)"
 msgstr ""
 
@@ -24677,7 +24735,7 @@ msgstr ""
 msgid "20cm ortho - Latvia - Coastline"
 msgstr ""
 
-msgid "1.cikla ortofotokarte - Latvia"
+msgid "Orthophoto 1st cycle (1994-1999) - Latvia"
 msgstr ""
 
 msgid "ORT10LT (Lithuania)"
@@ -24686,6 +24744,9 @@ msgstr ""
 msgid "geoportail.lu all layers"
 msgstr ""
 
+msgid "geoportail.lu ortho latest"
+msgstr ""
+
 msgid "geoportail.lu ortho 2016"
 msgstr ""
 
@@ -26176,6 +26237,9 @@ msgstr ""
 msgid "{0} on a node. Should be used on a way."
 msgstr ""
 
+msgid "{0} on a node. Should be used on a way or relation."
+msgstr ""
+
 msgid "{0} on a node. Should be drawn as an area."
 msgstr ""
 
@@ -26403,6 +26467,9 @@ msgstr ""
 msgid "Nodes duplicating parent way tags"
 msgstr ""
 
+msgid "{0} together with {1} and {2}. Remove {0}."
+msgstr ""
+
 msgid ""
 "wikipedia tag has no language given, use ''wikipedia''=''language:page "
 "title''"
@@ -27167,6 +27234,21 @@ msgstr ""
 msgid "Importing..."
 msgstr ""
 
+msgid "Shape is started incorrectly"
+msgstr ""
+
+msgid "Can''t load SVG diagram"
+msgstr ""
+
+msgid "Can''t find root SVG element"
+msgstr ""
+
+msgid "Import primitives"
+msgstr ""
+
+msgid "Cannot find configuration file!"
+msgstr ""
+
 msgid "DXF files [ImportDxf plugin] (*.dxf)"
 msgstr ""
 
@@ -27806,6 +27888,9 @@ msgstr ""
 msgid "Download mode"
 msgstr ""
 
+msgid "Number of images to be pre-fetched (forwards and backwards)"
+msgstr ""
+
 msgid "You are logged in as ''{0}''."
 msgstr ""
 
@@ -28016,8 +28101,17 @@ msgid "only when manually requested"
 msgstr ""
 
 msgid ""
-"The downloaded OSM area is too big. Download mode has been changed to OSM "
-"area until the layer is restarted."
+"The Mapillary layer has stopped downloading images, because the requested "
+"area is too big!"
+msgstr ""
+
+msgid ""
+"To solve this problem, you could zoom in and load a smaller area of the map."
+msgstr ""
+
+msgid ""
+"To solve this problem, you could switch to download mode ''{0}'' and load "
+"Mapillary images for a smaller portion of the map."
 msgstr ""
 
 msgid "Downloading"
@@ -31329,19 +31423,6 @@ msgstr ""
 msgid "Merge Overlap (combine)"
 msgstr ""
 
-msgid ""
-"<html>A role based relation membership was copied to all new ways.<br>You "
-"should verify this and correct it when necessary.</html>"
-msgstr ""
-
-msgid ""
-"<html>A relation membership was copied to all new ways.<br>You should verify "
-"this and correct it when necessary.</html>"
-msgstr ""
-
-msgid "Split way"
-msgstr ""
-
 msgid "Michigan Left"
 msgstr ""
 
@@ -32796,255 +32877,255 @@ msgstr ""
 msgid "PT: Route passes a oneway road in the wrong direction"
 msgstr ""
 
-msgid "moved"
+msgid "Create Stops from GTFS ..."
 msgstr ""
 
-msgid "rail"
+msgid "Create Stops from a GTFS file"
 msgstr ""
 
-msgid "Can''t parse a time from this string."
+msgid "Select GTFS file (stops.txt)"
 msgstr ""
 
-msgid "Invalid value"
+msgid "File \"{0}\" does not exist"
 msgstr ""
 
-msgid "added"
+msgid "IOException \"{0}\" occurred"
 msgstr ""
 
-msgid "Public Transport: Enable GTFSStops"
+msgid ""
+"There exists no dataset. Try to download data from the server or open an OSM "
+"file."
 msgstr ""
 
-msgid "Public Transport: Catch GTFS stops"
+msgid "No data found"
 msgstr ""
 
-msgid "skipped"
+msgid "The GTFS file was empty."
 msgstr ""
 
-msgid "Public Transport: Disable GTFS"
+msgid "[ID] {0}"
 msgstr ""
 
-msgid "Create Stops from GTFS ..."
+msgid "Route patterns ..."
 msgstr ""
 
-msgid "Create Stops from a GTFS file"
+msgid "Edit Route patterns for public transport"
 msgstr ""
 
-msgid "Select GTFS file (stops.txt)"
+msgid "Route Patterns"
 msgstr ""
 
-msgid "File \"{0}\" does not exist"
+msgid "Overview"
 msgstr ""
 
-msgid "IOException \"{0}\" occurred"
+msgid "Itinerary"
 msgstr ""
 
-msgid ""
-"There exists no dataset. Try to download data from the server or open an OSM "
-"file."
+msgid "Stops"
 msgstr ""
 
-msgid "No data found"
+msgid "Meta"
 msgstr ""
 
-msgid "The GTFS file was empty."
+msgid "Existing route patterns:"
 msgstr ""
 
-msgid "Create Stops from GTFS"
+msgid "Reflect"
 msgstr ""
 
-msgid "GTFS-Stops"
+msgid "Required tags:"
 msgstr ""
 
-msgid "Type of stops to add"
+msgid "Common tags:"
 msgstr ""
 
-msgid "Time on your GPS device"
+msgid "Additional tags:"
 msgstr ""
 
-msgid "HH:MM:SS.sss"
+msgid "Add a new Tag"
 msgstr ""
 
-msgid "Time on your stopwatch"
+msgid "Name/Id"
 msgstr ""
 
-msgid "Time window"
+msgid "Find"
 msgstr ""
 
-msgid "seconds"
+msgid "Show"
 msgstr ""
 
-msgid "Move Threshold"
+msgid "Mark"
 msgstr ""
 
-msgid "Suggest Stops"
+msgid "Ref"
 msgstr ""
 
-msgid "Find"
+msgid "Stops are possible on the"
 msgstr ""
 
-msgid "Show"
+msgid "right hand side"
 msgstr ""
 
-msgid "Mark"
+msgid "left hand side"
 msgstr ""
 
-msgid "Catch"
+msgid "Maximum distance from route"
 msgstr ""
 
-msgid "Join"
+msgid "Suggest Stops"
 msgstr ""
 
-msgid "Public Transport: Join GTFS stops"
+msgid "Create Stops from GPX ..."
 msgstr ""
 
-msgid "State"
+msgid "Create Stops from a GPX file"
 msgstr ""
 
-msgid "[incomplete]"
+msgid "Select GPX file"
 msgstr ""
 
-msgid "[empty way]"
+msgid "The GPX file contained no tracks or waypoints."
 msgstr ""
 
-msgid "[ID] {0}"
+msgid "moved"
 msgstr ""
 
-msgid "[gap]"
+msgid "added"
 msgstr ""
 
-msgid "Route patterns ..."
+msgid "Public Transport: Enable GTFSStops"
 msgstr ""
 
-msgid "Edit Route patterns for public transport"
+msgid "Public Transport: Catch GTFS stops"
 msgstr ""
 
-msgid "Route Patterns"
+msgid "skipped"
 msgstr ""
 
-msgid "Overview"
+msgid "Public Transport: Disable GTFS"
 msgstr ""
 
-msgid "Itinerary"
+msgid "Public Transport: Join GTFS stops"
 msgstr ""
 
-msgid "Stops"
+msgid "Public Transport: Change stop type"
 msgstr ""
 
-msgid "Meta"
+msgid "Public Transport: Add track stop"
 msgstr ""
 
-msgid "Existing route patterns:"
+msgid "Public Transport: Delete track stop"
 msgstr ""
 
-msgid "Reflect"
+msgid "Public Transport: Detach track stop list"
 msgstr ""
 
-msgid "Required tags:"
+msgid "Public Transport: Edit track stop list"
 msgstr ""
 
-msgid "Common tags:"
+msgid "Public Transport: Relocate nodes in track stoplist"
 msgstr ""
 
-msgid "Additional tags:"
+msgid "Public Transport: sort track stop list"
 msgstr ""
 
-msgid "Add a new Tag"
+msgid "Public Transport: Suggest stops"
 msgstr ""
 
-msgid "Name/Id"
+msgid "Public Transport: Detach waypoints"
 msgstr ""
 
-msgid "Ref"
+msgid "Public Transport: Disable waypoints"
 msgstr ""
 
-msgid "Stops are possible on the"
+msgid "Public Transport: Enable waypoints"
 msgstr ""
 
-msgid "right hand side"
+msgid "Public Transport: Edit waypoint name"
 msgstr ""
 
-msgid "left hand side"
+msgid "rail"
 msgstr ""
 
-msgid "Maximum distance from route"
+msgid "Can''t parse a time from this string."
 msgstr ""
 
-msgid " [ID] {0}"
+msgid "Invalid value"
 msgstr ""
 
-msgid "Public Transport: Change stop type"
+msgid "Create Stops from GTFS"
 msgstr ""
 
-msgid "Create Stops from GPX ..."
+msgid "GTFS-Stops"
 msgstr ""
 
-msgid "Create Stops from a GPX file"
+msgid "Type of stops to add"
 msgstr ""
 
-msgid "Select GPX file"
+msgid "Time on your GPS device"
 msgstr ""
 
-msgid "The GPX file contained no tracks or waypoints."
+msgid "HH:MM:SS.sss"
 msgstr ""
 
-msgid "Create Stops from GPX"
+msgid "Time on your stopwatch"
 msgstr ""
 
-msgid "Tracks in this GPX file:"
+msgid "Time window"
 msgstr ""
 
-msgid "Detach"
+msgid "seconds"
 msgstr ""
 
-msgid "implicit"
+msgid "Move Threshold"
 msgstr ""
 
-msgid ""
-"The GPX file doesn''t contain valid trackpoints. Please use a GPX file that "
-"has trackpoints."
+msgid "Catch"
 msgstr ""
 
-msgid "GPX File Trouble"
+msgid "Join"
 msgstr ""
 
-msgid "unnamed"
-msgstr "fără nume"
+msgid "Create Stops from GPX"
+msgstr ""
 
-msgid "Public Transport: Add track stop"
+msgid "Tracks in this GPX file:"
 msgstr ""
 
-msgid "Public Transport: Delete track stop"
+msgid "Detach"
 msgstr ""
 
-msgid "Public Transport: Detach track stop list"
+msgid "implicit"
 msgstr ""
 
-msgid "Public Transport: Edit track stop list"
+msgid "State"
 msgstr ""
 
-msgid "Public Transport: Relocate nodes in track stoplist"
+msgid "[incomplete]"
 msgstr ""
 
-msgid "Public Transport: sort track stop list"
+msgid "[empty way]"
 msgstr ""
 
-msgid "Public Transport: Suggest stops"
+msgid "[gap]"
 msgstr ""
 
 msgid "Stopname"
 msgstr ""
 
-msgid "Public Transport: Detach waypoints"
+msgid " [ID] {0}"
 msgstr ""
 
-msgid "Public Transport: Disable waypoints"
+msgid ""
+"The GPX file doesn''t contain valid trackpoints. Please use a GPX file that "
+"has trackpoints."
 msgstr ""
 
-msgid "Public Transport: Enable waypoints"
+msgid "GPX File Trouble"
 msgstr ""
 
-msgid "Public Transport: Edit waypoint name"
-msgstr ""
+msgid "unnamed"
+msgstr "fără nume"
 
 msgid "Distance between stops"
 msgstr ""
@@ -33772,6 +33853,9 @@ msgstr ""
 msgid "JOSM Tag Editor Plugin"
 msgstr ""
 
+msgid "Presets"
+msgstr ""
+
 msgid "Abort tag editing and close dialog"
 msgstr ""
 
@@ -35697,6 +35781,26 @@ msgid_plural "Overwrite ''{0}'' tags {1} from {2} with new value ''{3}''?"
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Download from Sophox API"
+msgstr ""
+
+msgid ""
+"Find places of education at least 2km, and at most 3km from the center of "
+"the selection"
+msgstr ""
+
+msgid "Show/hide Sophox snippet list"
+msgstr ""
+
+msgid "help"
+msgstr ""
+
+msgid "Server: "
+msgstr ""
+
+msgid "Wikidata+OSM server"
+msgstr ""
+
 msgid "Search Wikidata items"
 msgstr ""
 
@@ -35770,26 +35874,6 @@ msgid ""
 "objects"
 msgstr ""
 
-msgid "Download from Wikosm API"
-msgstr ""
-
-msgid ""
-"Find places of education at least 2km, and at most 3km from the center of "
-"the selection"
-msgstr ""
-
-msgid "Show/hide Wikosm snippet list"
-msgstr ""
-
-msgid "help"
-msgstr ""
-
-msgid "Server: "
-msgstr ""
-
-msgid "Wikidata+OSM server"
-msgstr ""
-
 msgid "The Ultimate WMS Super-speed Turbo Challenge II"
 msgstr ""
 
diff --git a/i18n/po/ru.po b/i18n/po/ru.po
index 4225d74..76cc3f3 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-10-30 03:38+0100\n"
-"PO-Revision-Date: 2017-10-28 06:48+0000\n"
-"Last-Translator: Nkolay Parukhin <parukhin at gmail.com>\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"
 "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-10-30 04:59+0000\n"
-"X-Generator: Launchpad (build 18493)\n"
+"X-Launchpad-Export-Date: 2017-11-26 05:01+0000\n"
+"X-Generator: Launchpad (build 18509)\n"
 "Language: ru_RU\n"
 
 msgid "Use OAuth"
@@ -468,12 +468,15 @@ msgstr "Удалить слой"
 msgid "Delete the active layer. Does not delete the associated file."
 msgstr "Удалить активный слой. Не удаляет связанный с ним файл."
 
-msgid "Toggle dialogs panel"
-msgstr "Показать/скрыть панели"
+msgid "Dialogs panel"
+msgstr "Диалоговые панели"
 
 msgid "Toggle dialogs panel, maximize mapview"
 msgstr "Скрыть диалоговые панели и панели инструментов"
 
+msgid "Toggle dialogs panel"
+msgstr "Показать/скрыть панели"
+
 msgid "Distribute Nodes"
 msgstr "Распределить точки равномерно"
 
@@ -7118,6 +7121,9 @@ msgstr "Координаты: "
 msgid "Coordinates (projected): "
 msgstr "Координаты (проецируемые): "
 
+msgid "UTM Zone"
+msgstr "Зона UTM"
+
 msgid "Part of: "
 msgstr "Входит в: "
 
@@ -9665,6 +9671,13 @@ msgstr ""
 msgid "Check \"Save\" to save the layer to the file specified on the left."
 msgstr "Включите \"Сохранить\" для сохранения слоя в указанный слева файл."
 
+msgid ""
+"A background upload is already in progress. Kindly wait for it to finish "
+"before uploading new changes"
+msgstr ""
+"Уже идёт фоновая отправка данных. Пожалуйста, дождитесь её завершения перед "
+"отправкой новых данных"
+
 msgid "I would like someone to review my edits."
 msgstr "Я хочу, чтобы кто-нибудь проверил мои правки."
 
@@ -10955,6 +10968,10 @@ msgstr "Смените проекцию снова или удалите сло
 msgid "Save Layer"
 msgstr "Сохранить слой"
 
+msgid "Trying to set a read only data layer as edit layer"
+msgstr ""
+"Попытка выбрать слой только для чтения в качестве редактируемого слоя"
+
 msgid "{0} note"
 msgid_plural "{0} notes"
 msgstr[0] "{0} заметка"
@@ -11068,7 +11085,7 @@ msgstr ""
 "{1}."
 
 msgid "Correlate to GPX"
-msgstr "Относятся к GPX"
+msgstr "Сопоставить  с GPX"
 
 msgid "Invalid timezone"
 msgstr "Недопустимый часовой пояс"
@@ -11891,11 +11908,6 @@ msgstr "Не удалось загрузить стили Mappaint из ''{0}''.
 msgid "Failed to parse Mappaint styles from ''{0}''. Error was: {1}"
 msgstr "Не удалось выполнить разбор стилей Mappaint из ''{0}''. Ошибка: {1}"
 
-msgid ""
-"Detected deprecated ''{0}'' in ''{1}'' which will be removed shortly. Use "
-"''{2}'' instead."
-msgstr ""
-
 msgid "Failed to locate image ''{0}''"
 msgstr "Не удалось найти изображение «{0}»"
 
@@ -13207,6 +13219,9 @@ msgstr "Показывать заставку при запуске"
 msgid "Show object ID in selection lists"
 msgstr "Показывать ID объектов в списке выбора"
 
+msgid "Show node coordinates in selection lists"
+msgstr "Показывать координаты точек в списках выделенных объектов"
+
 msgid "Show localized name in selection lists"
 msgstr "Показать русифицированное название в списках выбора"
 
@@ -14034,9 +14049,6 @@ msgstr "Система координат UTM"
 msgid "UTM"
 msgstr "UTM"
 
-msgid "UTM Zone"
-msgstr "Зона UTM"
-
 msgid "North"
 msgstr "Север"
 
@@ -14548,9 +14560,6 @@ msgstr "Заготовка вложенного элемента без роди
 msgid "Error parsing {0}: "
 msgstr "Ошибка при разборе {0}: "
 
-msgid "Presets"
-msgstr "Заготовки"
-
 msgid "Search for objects by preset..."
 msgstr "Поиск объектов по заготовке..."
 
@@ -17479,6 +17488,18 @@ msgstr "вегетарианская"
 msgid "korean"
 msgstr "корейская"
 
+msgid "donut"
+msgstr "пончики"
+
+msgid "mediterranean"
+msgstr "средиземноморская"
+
+msgid "friture"
+msgstr "фритерия"
+
+msgid "crepe"
+msgstr "французские блинчики"
+
 msgid "Internet access"
 msgstr "Точка доступа в интернет"
 
@@ -18469,7 +18490,7 @@ msgid "roundabout"
 msgstr "Круг"
 
 msgid "jughandle"
-msgstr "Кувшин ручной"
+msgstr "Ответвление в форме ручки кувшина"
 
 msgid "Road Restrictions"
 msgstr "Дорожные ограничения"
@@ -20355,9 +20376,18 @@ msgstr "Электроснабжение"
 msgid "Tents allowed"
 msgstr "Разрешены палатки"
 
-msgid "Camping Site"
+msgid "Campsite"
 msgstr "Кемпинг"
 
+msgid "Caravans allowed"
+msgstr "Разрешены дома на колёсах"
+
+msgid "Backcountry"
+msgstr ""
+
+msgid "Group only access"
+msgstr "Доступ только в группе"
+
 msgid "Food+Drinks"
 msgstr "Общественное питание"
 
@@ -25210,6 +25240,16 @@ msgstr ""
 "представляющими интерес, с разрешением 50 см или выше, обновляемые более "
 "часто."
 
+msgid "DigitalGlobe Premium Imagery Vintage"
+msgstr ""
+
+msgid ""
+"Imagery boundaries and capture dates. Labels appear at zoom level 14 and "
+"higher."
+msgstr ""
+"Границы и даты снимков. Надписи видны при уровне масштабирования от 14 и "
+"выше."
+
 msgid "DigitalGlobe Standard Imagery"
 msgstr "Снимки DigitalGlobe Standard"
 
@@ -25223,6 +25263,9 @@ msgstr ""
 "Landsat. Средний возраст составляет 2.31 года, в некоторых районах "
 "обновляются 2 раза в год."
 
+msgid "DigitalGlobe Standard Imagery Vintage"
+msgstr ""
+
 msgid "Esri World Imagery"
 msgstr "Спутниковые снимки Esri"
 
@@ -25286,6 +25329,12 @@ msgstr "Теплокарта Strava для бегунов"
 msgid "Strava cycling and running heatmap"
 msgstr "Теплокарта Strava для велосипедистов и бегунов"
 
+msgid "Strava water sports heatmap"
+msgstr "Strava - теплокарта водных видов спорта"
+
+msgid "Strava winter sports heatmap"
+msgstr "Strava - теплокарта зимних видов спорта"
+
 msgid "Locator Overlay"
 msgstr "MapBox Locator (оверлей)"
 
@@ -25700,6 +25749,9 @@ msgstr "SPW(allonie) цифровое изображение PICC"
 msgid "SPW(allonie) most recent aerial imagery"
 msgstr "SPW(allonie) самые новые аэрофотоснимки"
 
+msgid "SPW(allonie) 2016 aerial imagery"
+msgstr "SPW(allonie) аэрофотосъемка 2016"
+
 msgid "SPW(allonie) 2015 aerial imagery"
 msgstr "SPW(allonie) 2015 аэрофотосъёмка"
 
@@ -25710,7 +25762,7 @@ msgid "SPW(allonie) 2009-2010 aerial imagery"
 msgstr "SPW(allonie) 2009-2010 аэрофотосъёмка"
 
 msgid "SPW(allonie) shaded relief"
-msgstr ""
+msgstr "SPW(allonie) теневой рельеф"
 
 msgid "TEC bus lines"
 msgstr "Автобусные маршруты TEC"
@@ -25749,6 +25801,16 @@ msgstr "IBGE - федеральный округ"
 msgid "Addresses data from IBGE"
 msgstr "Адресные данные из IBGE"
 
+msgid "Street names IBGE Salvador-BA"
+msgstr "IBGE - названия улиц г. Салвадор (Баия)"
+
+msgid ""
+"Streets geometry and names of Salvador, Bahia. Source: Faces de Logradouro - "
+"IBGE."
+msgstr ""
+"Геометрия и названия улиц города Салвадор (штат Баия). Источник: Faces de "
+"Logradouro - IBGE."
+
 msgid "Rio Mosaic 2013"
 msgstr "Рио, мозаика 2013"
 
@@ -26516,6 +26578,9 @@ msgstr "Топографическая базовая карта Южного Т
 msgid "Japan GSI ortho Imagery"
 msgstr "Япония: ортоснимки GSI"
 
+msgid "Japan GSI Standard Map"
+msgstr ""
+
 msgid "imagico.de OSM images for mapping: Aral Sea (low water level)"
 msgstr "Снимки с imagico.de: Аральское море (низкий уровень воды)"
 
@@ -26548,8 +26613,8 @@ msgstr "50см ортофото - Латвия"
 msgid "20cm ortho - Latvia - Coastline"
 msgstr "20см ортфото - Латвия - побережье"
 
-msgid "1.cikla ortofotokarte - Latvia"
-msgstr "1.cikla ортофотокарта - Латвия"
+msgid "Orthophoto 1st cycle (1994-1999) - Latvia"
+msgstr ""
 
 msgid "ORT10LT (Lithuania)"
 msgstr "ORT10LT (Литва)"
@@ -26557,8 +26622,11 @@ msgstr "ORT10LT (Литва)"
 msgid "geoportail.lu all layers"
 msgstr "geoportail.lu все слои"
 
+msgid "geoportail.lu ortho latest"
+msgstr ""
+
 msgid "geoportail.lu ortho 2016"
-msgstr "geoportail.lu орто 2016"
+msgstr ""
 
 msgid "Luxembourg Inspire Railway"
 msgstr "Luxembourg Inspire: железные дороги"
@@ -27016,7 +27084,8 @@ msgid "Kanton Basel-Landschaft 10cm (2015)"
 msgstr "Кантон Базель - ландшафт 10см (2015)"
 
 msgid "imagico.de OSM images for mapping: Cental Alps in late September 2016"
-msgstr "Снимки с imagico.de: Центральные Альпы,  конец сентября 2016"
+msgstr ""
+"Снимки с imagico.de: Центральные Восточные Альпы, конец сентября 2016"
 
 msgid ""
 "Up-to-date image for glacier mapping - beware of some fresh snow at higher "
@@ -28284,6 +28353,9 @@ msgstr "неверное значение: {0}"
 msgid "{0} on a node. Should be used on a way."
 msgstr "{0} на точке. Должен использоваться на линии."
 
+msgid "{0} on a node. Should be used on a way or relation."
+msgstr "Тег {0} на точке. Его следует использовать на линии или отношении."
+
 msgid "{0} on a node. Should be drawn as an area."
 msgstr "{0} на точке. Должен быть нарисован как область."
 
@@ -28528,6 +28600,9 @@ msgstr "{0} не имеет смысла"
 msgid "Nodes duplicating parent way tags"
 msgstr "Точки с тегами как у родительской линии"
 
+msgid "{0} together with {1} and {2}. Remove {0}."
+msgstr "{0} вместе с {1} и {2}. Удалите {0}."
+
 msgid ""
 "wikipedia tag has no language given, use ''wikipedia''=''language:page "
 "title''"
@@ -29464,6 +29539,21 @@ msgstr "Передача треков на сайт openstreetmap.org"
 msgid "Importing..."
 msgstr "Импортирование..."
 
+msgid "Shape is started incorrectly"
+msgstr "Форма запущена неправильно"
+
+msgid "Can''t load SVG diagram"
+msgstr "Не удалось загрузить SVG схему"
+
+msgid "Can''t find root SVG element"
+msgstr "Не удалось найти корневой элемент SVG"
+
+msgid "Import primitives"
+msgstr "Импорт примитивов"
+
+msgid "Cannot find configuration file!"
+msgstr "Не найден файл конфигурации"
+
 msgid "DXF files [ImportDxf plugin] (*.dxf)"
 msgstr "Файлы DXF [модуль ImportDxf] (*.dxf)"
 
@@ -30130,6 +30220,9 @@ msgstr "Включить экспериментальные функции (мо
 msgid "Download mode"
 msgstr "Режим скачивания"
 
+msgid "Number of images to be pre-fetched (forwards and backwards)"
+msgstr "Количество снимков для упреждающей загрузки (вперёд и назад)"
+
 msgid "You are logged in as ''{0}''."
 msgstr "Вы вошли как ''{0}''."
 
@@ -30356,11 +30449,24 @@ msgid "only when manually requested"
 msgstr "только при запросе вручную"
 
 msgid ""
-"The downloaded OSM area is too big. Download mode has been changed to OSM "
-"area until the layer is restarted."
+"The Mapillary layer has stopped downloading images, because the requested "
+"area is too big!"
 msgstr ""
-"Скачанная область OSM слишком велика. Режим загрузки изменён на область со "
-"скачанными данными OSM до следующего перезапуска слоя."
+"Остановлено скачивание снимков на слой Mapillary, так как запрошенная "
+"область слишком велика!"
+
+msgid ""
+"To solve this problem, you could zoom in and load a smaller area of the map."
+msgstr ""
+"Для решения этой проблемы можно увеличить масштаб и скачать меньшую область "
+"карты."
+
+msgid ""
+"To solve this problem, you could switch to download mode ''{0}'' and load "
+"Mapillary images for a smaller portion of the map."
+msgstr ""
+"Для решения этой проблемы можно переключиться в режим загрузки ''{0}'' и "
+"скачать снимки Mapillary для меньшей части карты."
 
 msgid "Downloading"
 msgstr "Загрузка"
@@ -31530,7 +31636,7 @@ msgid "symbol"
 msgstr "символ"
 
 msgid "Select to download symbols in the selected download area."
-msgstr ""
+msgstr "Выберите, чтобы скачать символы в выбранной области загрузки."
 
 msgid "Select to download water bodies in the selected download area."
 msgstr ""
@@ -31557,6 +31663,7 @@ msgstr "раздел"
 
 msgid "Select to download cadastral sections in the selected download area."
 msgstr ""
+"Выберите для скачивания кадастровых кварталов в выделенной области загрузки."
 
 msgid "locality"
 msgstr "район"
@@ -33995,24 +34102,6 @@ msgstr "Слить перекрывающиеся линии"
 msgid "Merge Overlap (combine)"
 msgstr "Слить нахлест (объединить)"
 
-msgid ""
-"<html>A role based relation membership was copied to all new ways.<br>You "
-"should verify this and correct it when necessary.</html>"
-msgstr ""
-"<html>Роль, основанная на участии в отношениях, была скопирована во все "
-"новые линии.<br>Результат необходимо проверить и исправить, если "
-"потребуется.</html>"
-
-msgid ""
-"<html>A relation membership was copied to all new ways.<br>You should verify "
-"this and correct it when necessary.</html>"
-msgstr ""
-"<html>Участник отношения был скопирован во все новые линии.<br>Результат "
-"необходимо проверить и исправить, если потребуется.</html>"
-
-msgid "Split way"
-msgstr "Разрезать линию"
-
 msgid "Michigan Left"
 msgstr "Левый Мичиганский поворот"
 
@@ -35573,33 +35662,6 @@ msgstr ""
 "ОТ: Маршрут проходит по дороге с односторонним движением в обратном "
 "направлении"
 
-msgid "moved"
-msgstr "перемещен"
-
-msgid "rail"
-msgstr "рельс"
-
-msgid "Can''t parse a time from this string."
-msgstr "Невозможно разобрать время из этой последовательности."
-
-msgid "Invalid value"
-msgstr "Неправильное значение"
-
-msgid "added"
-msgstr "добавленный"
-
-msgid "Public Transport: Enable GTFSStops"
-msgstr "Общественный транспорт: Обязательные GTFS остановки"
-
-msgid "Public Transport: Catch GTFS stops"
-msgstr "Общественный транспорт: GTFS остановки по требованию"
-
-msgid "skipped"
-msgstr "пропускать"
-
-msgid "Public Transport: Disable GTFS"
-msgstr "Общественный транспорт: Исключить GTFS"
-
 msgid "Create Stops from GTFS ..."
 msgstr "Создать остановки из GTFS..."
 
@@ -35628,69 +35690,9 @@ msgstr "Данные не найдены"
 msgid "The GTFS file was empty."
 msgstr "Файл GTFS был пуст."
 
-msgid "Create Stops from GTFS"
-msgstr "Создать остановки из GTFS"
-
-msgid "GTFS-Stops"
-msgstr "GTFS-остановки"
-
-msgid "Type of stops to add"
-msgstr "Вид остановок к добавлению"
-
-msgid "Time on your GPS device"
-msgstr "Время на вашем GPS устройстве"
-
-msgid "HH:MM:SS.sss"
-msgstr "ЧЧ:ММ:СС.ссс"
-
-msgid "Time on your stopwatch"
-msgstr "Время на вашем секундомере"
-
-msgid "Time window"
-msgstr "Время окошка"
-
-msgid "seconds"
-msgstr "секунды"
-
-msgid "Move Threshold"
-msgstr "Начало движения"
-
-msgid "Suggest Stops"
-msgstr "Предлагать остановки"
-
-msgid "Find"
-msgstr "Найти"
-
-msgid "Show"
-msgstr "Показать"
-
-msgid "Mark"
-msgstr "Пометить"
-
-msgid "Catch"
-msgstr "Поймать"
-
-msgid "Join"
-msgstr "Соединить"
-
-msgid "Public Transport: Join GTFS stops"
-msgstr "Общественный транспорт: Соединение GTFS остановок"
-
-msgid "State"
-msgstr "Штат"
-
-msgid "[incomplete]"
-msgstr "[неполный]"
-
-msgid "[empty way]"
-msgstr "[пустой путь]"
-
 msgid "[ID] {0}"
 msgstr "[ID] {0}"
 
-msgid "[gap]"
-msgstr "[промежуток]"
-
 msgid "Route patterns ..."
 msgstr "Шаблоны маршрутов …"
 
@@ -35733,6 +35735,15 @@ msgstr "Добавить новый тег"
 msgid "Name/Id"
 msgstr "Имя/идентификатор"
 
+msgid "Find"
+msgstr "Найти"
+
+msgid "Show"
+msgstr "Показать"
+
+msgid "Mark"
+msgstr "Пометить"
+
 msgid "Ref"
 msgstr "Ссылка"
 
@@ -35748,11 +35759,8 @@ msgstr "Левая сторона"
 msgid "Maximum distance from route"
 msgstr "Максимальная дистанция от маршрута"
 
-msgid " [ID] {0}"
-msgstr " [ID] {0}"
-
-msgid "Public Transport: Change stop type"
-msgstr "Общественный транспорт: Изменение вида остановки"
+msgid "Suggest Stops"
+msgstr "Предлагать остановки"
 
 msgid "Create Stops from GPX ..."
 msgstr "Создать контрольные точки из GPX  ..."
@@ -35766,30 +35774,29 @@ msgstr "Выберите GPX файл"
 msgid "The GPX file contained no tracks or waypoints."
 msgstr "GPX файл не содержит треков или путевых точек."
 
-msgid "Create Stops from GPX"
-msgstr "Создать остановки из GPX"
+msgid "moved"
+msgstr "перемещен"
 
-msgid "Tracks in this GPX file:"
-msgstr "Маршруты в GPX файле:"
+msgid "added"
+msgstr "добавленный"
 
-msgid "Detach"
-msgstr "Отделить"
+msgid "Public Transport: Enable GTFSStops"
+msgstr "Общественный транспорт: Обязательные GTFS остановки"
 
-msgid "implicit"
-msgstr "неявный"
+msgid "Public Transport: Catch GTFS stops"
+msgstr "Общественный транспорт: GTFS остановки по требованию"
 
-msgid ""
-"The GPX file doesn''t contain valid trackpoints. Please use a GPX file that "
-"has trackpoints."
-msgstr ""
-"GPX файл не содержит достоверных точек трека. Пожалуйста, используйте GPX "
-"файл, который имеет точки трека."
+msgid "skipped"
+msgstr "пропускать"
 
-msgid "GPX File Trouble"
-msgstr "Проблемный GPX файл"
+msgid "Public Transport: Disable GTFS"
+msgstr "Общественный транспорт: Исключить GTFS"
 
-msgid "unnamed"
-msgstr "безымянный"
+msgid "Public Transport: Join GTFS stops"
+msgstr "Общественный транспорт: Соединение GTFS остановок"
+
+msgid "Public Transport: Change stop type"
+msgstr "Общественный транспорт: Изменение вида остановки"
 
 msgid "Public Transport: Add track stop"
 msgstr "Общественный транспорт: Добавить в маршрут остановку"
@@ -35813,9 +35820,6 @@ msgstr "Общественный транспорт: Сортировать сп
 msgid "Public Transport: Suggest stops"
 msgstr "Общественный транспорт: Предложить остановки"
 
-msgid "Stopname"
-msgstr "Название остановки"
-
 msgid "Public Transport: Detach waypoints"
 msgstr "Общественный транспорт: Отсоединить путевые точки"
 
@@ -35828,6 +35832,91 @@ msgstr "Общественный транспорт: Включить путев
 msgid "Public Transport: Edit waypoint name"
 msgstr "Общественный транспорт: Редактировать имя точки"
 
+msgid "rail"
+msgstr "рельс"
+
+msgid "Can''t parse a time from this string."
+msgstr "Невозможно разобрать время из этой последовательности."
+
+msgid "Invalid value"
+msgstr "Неправильное значение"
+
+msgid "Create Stops from GTFS"
+msgstr "Создать остановки из GTFS"
+
+msgid "GTFS-Stops"
+msgstr "GTFS-остановки"
+
+msgid "Type of stops to add"
+msgstr "Вид остановок к добавлению"
+
+msgid "Time on your GPS device"
+msgstr "Время на вашем GPS устройстве"
+
+msgid "HH:MM:SS.sss"
+msgstr "ЧЧ:ММ:СС.ссс"
+
+msgid "Time on your stopwatch"
+msgstr "Время на вашем секундомере"
+
+msgid "Time window"
+msgstr "Время окошка"
+
+msgid "seconds"
+msgstr "секунды"
+
+msgid "Move Threshold"
+msgstr "Начало движения"
+
+msgid "Catch"
+msgstr "Поймать"
+
+msgid "Join"
+msgstr "Соединить"
+
+msgid "Create Stops from GPX"
+msgstr "Создать остановки из GPX"
+
+msgid "Tracks in this GPX file:"
+msgstr "Маршруты в GPX файле:"
+
+msgid "Detach"
+msgstr "Отделить"
+
+msgid "implicit"
+msgstr "неявный"
+
+msgid "State"
+msgstr "Штат"
+
+msgid "[incomplete]"
+msgstr "[неполный]"
+
+msgid "[empty way]"
+msgstr "[пустой путь]"
+
+msgid "[gap]"
+msgstr "[промежуток]"
+
+msgid "Stopname"
+msgstr "Название остановки"
+
+msgid " [ID] {0}"
+msgstr " [ID] {0}"
+
+msgid ""
+"The GPX file doesn''t contain valid trackpoints. Please use a GPX file that "
+"has trackpoints."
+msgstr ""
+"GPX файл не содержит достоверных точек трека. Пожалуйста, используйте GPX "
+"файл, который имеет точки трека."
+
+msgid "GPX File Trouble"
+msgstr "Проблемный GPX файл"
+
+msgid "unnamed"
+msgstr "безымянный"
+
 msgid "Distance between stops"
 msgstr "Расстояние между остановками"
 
@@ -36585,6 +36674,9 @@ msgstr "Открывает диалог редактора тегов"
 msgid "JOSM Tag Editor Plugin"
 msgstr "Модуль редактирования тегов JOSM"
 
+msgid "Presets"
+msgstr "Заготовки"
+
 msgid "Abort tag editing and close dialog"
 msgstr "Прервать правку тегов и закрыть диалог"
 
@@ -38749,6 +38841,28 @@ msgstr[0] "Перезаписать тег ''{0}''  {1} из {2} новым зн
 msgstr[1] "Перезаписать теги ''{0}''  {1} из {2} новым значением ''{3}''?"
 msgstr[2] "Перезаписать теги ''{0}''  {1} из {2} новым значением ''{3}''?"
 
+msgid "Download from Sophox API"
+msgstr "Скачать из Sophox API"
+
+msgid ""
+"Find places of education at least 2km, and at most 3km from the center of "
+"the selection"
+msgstr ""
+"Поиск образовательных учреждений в пределах от 2 до 3 км от центра "
+"выделенной области"
+
+msgid "Show/hide Sophox snippet list"
+msgstr "Показать/скрыть список фрагментов запросов Sophox"
+
+msgid "help"
+msgstr "Справка"
+
+msgid "Server: "
+msgstr "Сервер: "
+
+msgid "Wikidata+OSM server"
+msgstr "Сервер Wikidata+OSM"
+
 msgid "Search Wikidata items"
 msgstr "Поиск элементов Викиданных"
 
@@ -38827,28 +38941,6 @@ msgid ""
 msgstr ""
 "Добавляет тег «wikipedia», соответствующий этой статье, выбранным объектам"
 
-msgid "Download from Wikosm API"
-msgstr "Скачать из Wikosm API"
-
-msgid ""
-"Find places of education at least 2km, and at most 3km from the center of "
-"the selection"
-msgstr ""
-"Поиск образовательных учреждений в пределах от 2 до 3 км от центра "
-"выделенной области"
-
-msgid "Show/hide Wikosm snippet list"
-msgstr "Показать/скрыть список фрагментов запросов Wikosm"
-
-msgid "help"
-msgstr "Справка"
-
-msgid "Server: "
-msgstr "Сервер: "
-
-msgid "Wikidata+OSM server"
-msgstr "Сервер Wikidata+OSM"
-
 msgid "The Ultimate WMS Super-speed Turbo Challenge II"
 msgstr "Окончательный WMS Супер-скорость Турбо вызов II"
 
diff --git a/i18n/po/sk.po b/i18n/po/sk.po
index 6eb95fc..dd89eca 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-10-30 03:38+0100\n"
-"PO-Revision-Date: 2017-10-28 17:30+0000\n"
+"POT-Creation-Date: 2017-11-26 00:06+0100\n"
+"PO-Revision-Date: 2017-11-25 13: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-10-30 05:01+0000\n"
-"X-Generator: Launchpad (build 18493)\n"
+"X-Launchpad-Export-Date: 2017-11-26 05:03+0000\n"
+"X-Generator: Launchpad (build 18509)\n"
 "Language: sk\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -460,12 +460,15 @@ msgstr "Odstrániť vrstvu"
 msgid "Delete the active layer. Does not delete the associated file."
 msgstr "Odstrániť aktívnu vrstvu. Neodstráni súvisiaci súbor."
 
-msgid "Toggle dialogs panel"
-msgstr "Prepnúť lištu s panelmi"
+msgid "Dialogs panel"
+msgstr "Panel okien"
 
 msgid "Toggle dialogs panel, maximize mapview"
 msgstr "Prepnúť lištu s panelmi, maximalizovať miesto na mapu"
 
+msgid "Toggle dialogs panel"
+msgstr "Prepnúť lištu s panelmi"
+
 msgid "Distribute Nodes"
 msgstr "Rozmiestniť body"
 
@@ -7072,6 +7075,9 @@ msgstr "Súradnice: "
 msgid "Coordinates (projected): "
 msgstr "Súradnice (predpokladané): "
 
+msgid "UTM Zone"
+msgstr "UTM Zone"
+
 msgid "Part of: "
 msgstr "Časť z: "
 
@@ -9608,6 +9614,13 @@ msgstr "Zvoľte \"Nahrať\" pre odoslanie zmien na server OSM."
 msgid "Check \"Save\" to save the layer to the file specified on the left."
 msgstr "Zvoľte \"Uložiť\" pre uloženie vrstvy do súboru zadaného vľavo."
 
+msgid ""
+"A background upload is already in progress. Kindly wait for it to finish "
+"before uploading new changes"
+msgstr ""
+"Už prebieha odosielanie na pozadí. Prosím počkajte na jeho dokončenie pred "
+"odosielaním ďalších zmien"
+
 msgid "I would like someone to review my edits."
 msgstr "Bol by som rád, keby niekto skontroloval moje zmeny."
 
@@ -10869,6 +10882,9 @@ msgstr "Zmeňte znovu projekciu alebo odstráňte vrtvu."
 msgid "Save Layer"
 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 "{0} note"
 msgid_plural "{0} notes"
 msgstr[0] "{0} poznámok"
@@ -11802,11 +11818,6 @@ msgid "Failed to parse Mappaint styles from ''{0}''. Error was: {1}"
 msgstr ""
 "Nepodarilo sa prečítať štýl kreslenia mapy z \"{0}\". Chyba bola: {1}"
 
-msgid ""
-"Detected deprecated ''{0}'' in ''{1}'' which will be removed shortly. Use "
-"''{2}'' instead."
-msgstr ""
-
 msgid "Failed to locate image ''{0}''"
 msgstr "Zlyhala lokalizácia obrázku ''{0}''"
 
@@ -13114,6 +13125,9 @@ msgstr "Zobrazovať pri štarte úvodnú obrazovku"
 msgid "Show object ID in selection lists"
 msgstr "Zobrazovať ID objektu v zozname výberu"
 
+msgid "Show node coordinates in selection lists"
+msgstr "Zobraziť súradnice bodov v zoznamoch výberu"
+
 msgid "Show localized name in selection lists"
 msgstr "Zobrazovať lokalizovaný názov vo vybranom zozname"
 
@@ -13932,9 +13946,6 @@ msgstr "UTM Geodesic system"
 msgid "UTM"
 msgstr "UTM"
 
-msgid "UTM Zone"
-msgstr "UTM Zone"
-
 msgid "North"
 msgstr "Sever"
 
@@ -14457,9 +14468,6 @@ msgstr "Prednastavený sub prvok bez materských"
 msgid "Error parsing {0}: "
 msgstr "Chyba rozkladania(parsovania) {0}: "
 
-msgid "Presets"
-msgstr "Predvoľby"
-
 msgid "Search for objects by preset..."
 msgstr "Hľadať objekty podľa predvolieb..."
 
@@ -17398,6 +17406,18 @@ msgstr "vegetariánska"
 msgid "korean"
 msgstr "kórejská"
 
+msgid "donut"
+msgstr "šišky"
+
+msgid "mediterranean"
+msgstr "stredomorská"
+
+msgid "friture"
+msgstr "fritéria"
+
+msgid "crepe"
+msgstr "palacinky"
+
 msgid "Internet access"
 msgstr "Prístup na internet"
 
@@ -20274,8 +20294,17 @@ msgstr "Elektrická prípojka"
 msgid "Tents allowed"
 msgstr "Povolenie pre stany"
 
-msgid "Camping Site"
-msgstr "Stanový tábor (kemp)"
+msgid "Campsite"
+msgstr "Kemp"
+
+msgid "Caravans allowed"
+msgstr "Karavany povolené"
+
+msgid "Backcountry"
+msgstr "V prírode"
+
+msgid "Group only access"
+msgstr "Prístup len pre skupiny"
 
 msgid "Food+Drinks"
 msgstr "Jedlo+Nápoje"
@@ -25126,6 +25155,16 @@ msgstr ""
 "kde niektoré zaujímavé oblasti sú doplnené extra snímkami s rozlíšením 50cm "
 "alebo lepším, a s častejšími aktualizáciami."
 
+msgid "DigitalGlobe Premium Imagery Vintage"
+msgstr "DigitalGlobe Premiové snímky Staršie"
+
+msgid ""
+"Imagery boundaries and capture dates. Labels appear at zoom level 14 and "
+"higher."
+msgstr ""
+"Hranice snímok a dátumy fotografovania. Popisy sa objavia pri priblížení 14 "
+"a vyššom."
+
 msgid "DigitalGlobe Standard Imagery"
 msgstr "DigitalGlobe Štandardné snímky"
 
@@ -25139,6 +25178,9 @@ msgstr ""
 "snímok Landsat-u. Priemerný vek je 2,31 rokov, ale niektoré oblasti sú "
 "aktualizované 2x za rok."
 
+msgid "DigitalGlobe Standard Imagery Vintage"
+msgstr "DigitalGlobe Štandardné snímky Staršie"
+
 msgid "Esri World Imagery"
 msgstr "Esri snímky sveta"
 
@@ -25202,6 +25244,12 @@ msgstr "Strava bežecká heatmap"
 msgid "Strava cycling and running heatmap"
 msgstr "Cyklistická a bežecká heatmap Strava"
 
+msgid "Strava water sports heatmap"
+msgstr "Strava teplotná mapa vodných športov"
+
+msgid "Strava winter sports heatmap"
+msgstr "Strava teplotná mapa zimných športov"
+
 msgid "Locator Overlay"
 msgstr "Prekryvná vrstva Locator"
 
@@ -25607,6 +25655,9 @@ msgstr "SPW(allonie) PICC numerical imagery"
 msgid "SPW(allonie) most recent aerial imagery"
 msgstr "SPW(allonie) najnovšie letecké snímky"
 
+msgid "SPW(allonie) 2016 aerial imagery"
+msgstr ""
+
 msgid "SPW(allonie) 2015 aerial imagery"
 msgstr "SPW(allonie) 2015 letecké snímky"
 
@@ -25652,6 +25703,14 @@ msgstr ""
 msgid "Addresses data from IBGE"
 msgstr ""
 
+msgid "Street names IBGE Salvador-BA"
+msgstr ""
+
+msgid ""
+"Streets geometry and names of Salvador, Bahia. Source: Faces de Logradouro - "
+"IBGE."
+msgstr ""
+
 msgid "Rio Mosaic 2013"
 msgstr "Rio Mosaic 2013"
 
@@ -26388,6 +26447,9 @@ msgstr ""
 msgid "Japan GSI ortho Imagery"
 msgstr "Japonsko GSI ortofoto"
 
+msgid "Japan GSI Standard Map"
+msgstr ""
+
 msgid "imagico.de OSM images for mapping: Aral Sea (low water level)"
 msgstr ""
 
@@ -26417,8 +26479,8 @@ msgstr "50cm ortho - Lotyšsko"
 msgid "20cm ortho - Latvia - Coastline"
 msgstr "20cm ortho - Lotyšsko - Pobrežie"
 
-msgid "1.cikla ortofotokarte - Latvia"
-msgstr "1.cikla ortofotokarte - Lotyšsko"
+msgid "Orthophoto 1st cycle (1994-1999) - Latvia"
+msgstr ""
 
 msgid "ORT10LT (Lithuania)"
 msgstr "ORT10LT (Litva)"
@@ -26426,8 +26488,11 @@ msgstr "ORT10LT (Litva)"
 msgid "geoportail.lu all layers"
 msgstr "geoportail.lu všetky vrstvy"
 
+msgid "geoportail.lu ortho latest"
+msgstr ""
+
 msgid "geoportail.lu ortho 2016"
-msgstr "geoportail.lu orto 2016"
+msgstr ""
 
 msgid "Luxembourg Inspire Railway"
 msgstr "Luxembourg Inspire Železnice"
@@ -27940,6 +28005,9 @@ msgstr "nesprávna hodnota: {0}"
 msgid "{0} on a node. Should be used on a way."
 msgstr "{0} na bode. Malo by byť použité na ceste."
 
+msgid "{0} on a node. Should be used on a way or relation."
+msgstr ""
+
 msgid "{0} on a node. Should be drawn as an area."
 msgstr "{0} na bode. Malo by byť zakreslené ako oblasť."
 
@@ -28184,6 +28252,9 @@ msgstr "{0} nemá zmysel"
 msgid "Nodes duplicating parent way tags"
 msgstr "Body duplikujúce značky cesty, ktorej sú súčasťou"
 
+msgid "{0} together with {1} and {2}. Remove {0}."
+msgstr ""
+
 msgid ""
 "wikipedia tag has no language given, use ''wikipedia''=''language:page "
 "title''"
@@ -29095,6 +29166,21 @@ msgstr "Nahrať Stopy (Traces) na openstreetmap.org"
 msgid "Importing..."
 msgstr "Importujem..."
 
+msgid "Shape is started incorrectly"
+msgstr ""
+
+msgid "Can''t load SVG diagram"
+msgstr ""
+
+msgid "Can''t find root SVG element"
+msgstr ""
+
+msgid "Import primitives"
+msgstr ""
+
+msgid "Cannot find configuration file!"
+msgstr ""
+
 msgid "DXF files [ImportDxf plugin] (*.dxf)"
 msgstr "DXF súbory [ImportDxf plugin] (*.dxf)"
 
@@ -29746,6 +29832,9 @@ msgstr "Zapnúť experimentálne vyvíjané funkcie (môžu byť nestabilné)"
 msgid "Download mode"
 msgstr "Režim sťahovania"
 
+msgid "Number of images to be pre-fetched (forwards and backwards)"
+msgstr ""
+
 msgid "You are logged in as ''{0}''."
 msgstr "Ste prihlásený ako \"{0}\"."
 
@@ -29972,11 +30061,18 @@ msgid "only when manually requested"
 msgstr "len keď je požadované"
 
 msgid ""
-"The downloaded OSM area is too big. Download mode has been changed to OSM "
-"area until the layer is restarted."
+"The Mapillary layer has stopped downloading images, because the requested "
+"area is too big!"
+msgstr ""
+
+msgid ""
+"To solve this problem, you could zoom in and load a smaller area of the map."
+msgstr ""
+
+msgid ""
+"To solve this problem, you could switch to download mode ''{0}'' and load "
+"Mapillary images for a smaller portion of the map."
 msgstr ""
-"Sťahovaná oblasť OSM je príliš veľká. Režim sťahovania bola zmenený na "
-"\"oblasť OSM\" až do ďalšieho reštartu vrstvy."
 
 msgid "Downloading"
 msgstr "Sťahuje sa"
@@ -33385,23 +33481,6 @@ msgstr ""
 msgid "Merge Overlap (combine)"
 msgstr ""
 
-msgid ""
-"<html>A role based relation membership was copied to all new ways.<br>You "
-"should verify this and correct it when necessary.</html>"
-msgstr ""
-"<html>Rola člena v relácii bola skopírovaná na všetky nové cesty.<br>Mali by "
-"ste toto overiť a opraviť ak je to potrebné.</html>"
-
-msgid ""
-"<html>A relation membership was copied to all new ways.<br>You should verify "
-"this and correct it when necessary.</html>"
-msgstr ""
-"<html>Členstvo v relácii bolo skopírované na všetky nové cesty.<br>Mali by "
-"ste to skontrolovať a prípadne opraviť.</html>"
-
-msgid "Split way"
-msgstr "Rozdeliť cestu"
-
 msgid "Michigan Left"
 msgstr "Michigan Left"
 
@@ -34866,33 +34945,6 @@ msgstr "PT: Cesta je vo výstavbe"
 msgid "PT: Route passes a oneway road in the wrong direction"
 msgstr "PT: Trasa prechádza jednosmernou cestou nesprávnym smerom"
 
-msgid "moved"
-msgstr ""
-
-msgid "rail"
-msgstr "koľajnica (rail)"
-
-msgid "Can''t parse a time from this string."
-msgstr ""
-
-msgid "Invalid value"
-msgstr ""
-
-msgid "added"
-msgstr ""
-
-msgid "Public Transport: Enable GTFSStops"
-msgstr ""
-
-msgid "Public Transport: Catch GTFS stops"
-msgstr ""
-
-msgid "skipped"
-msgstr ""
-
-msgid "Public Transport: Disable GTFS"
-msgstr ""
-
 msgid "Create Stops from GTFS ..."
 msgstr ""
 
@@ -34919,69 +34971,9 @@ msgstr ""
 msgid "The GTFS file was empty."
 msgstr ""
 
-msgid "Create Stops from GTFS"
-msgstr ""
-
-msgid "GTFS-Stops"
-msgstr ""
-
-msgid "Type of stops to add"
-msgstr ""
-
-msgid "Time on your GPS device"
-msgstr ""
-
-msgid "HH:MM:SS.sss"
-msgstr ""
-
-msgid "Time on your stopwatch"
-msgstr ""
-
-msgid "Time window"
-msgstr ""
-
-msgid "seconds"
-msgstr ""
-
-msgid "Move Threshold"
-msgstr ""
-
-msgid "Suggest Stops"
-msgstr ""
-
-msgid "Find"
-msgstr ""
-
-msgid "Show"
-msgstr "Ukázať"
-
-msgid "Mark"
-msgstr ""
-
-msgid "Catch"
-msgstr ""
-
-msgid "Join"
-msgstr ""
-
-msgid "Public Transport: Join GTFS stops"
-msgstr ""
-
-msgid "State"
-msgstr "Štát (vo federácii)"
-
-msgid "[incomplete]"
-msgstr ""
-
-msgid "[empty way]"
-msgstr ""
-
 msgid "[ID] {0}"
 msgstr ""
 
-msgid "[gap]"
-msgstr ""
-
 msgid "Route patterns ..."
 msgstr "Vzory trás"
 
@@ -35024,6 +35016,15 @@ msgstr ""
 msgid "Name/Id"
 msgstr ""
 
+msgid "Find"
+msgstr ""
+
+msgid "Show"
+msgstr "Ukázať"
+
+msgid "Mark"
+msgstr ""
+
 msgid "Ref"
 msgstr ""
 
@@ -35039,10 +35040,7 @@ msgstr ""
 msgid "Maximum distance from route"
 msgstr ""
 
-msgid " [ID] {0}"
-msgstr " [ID] {0}"
-
-msgid "Public Transport: Change stop type"
+msgid "Suggest Stops"
 msgstr ""
 
 msgid "Create Stops from GPX ..."
@@ -35057,28 +35055,29 @@ msgstr ""
 msgid "The GPX file contained no tracks or waypoints."
 msgstr ""
 
-msgid "Create Stops from GPX"
+msgid "moved"
 msgstr ""
 
-msgid "Tracks in this GPX file:"
+msgid "added"
 msgstr ""
 
-msgid "Detach"
+msgid "Public Transport: Enable GTFSStops"
 msgstr ""
 
-msgid "implicit"
+msgid "Public Transport: Catch GTFS stops"
 msgstr ""
 
-msgid ""
-"The GPX file doesn''t contain valid trackpoints. Please use a GPX file that "
-"has trackpoints."
+msgid "skipped"
 msgstr ""
 
-msgid "GPX File Trouble"
+msgid "Public Transport: Disable GTFS"
 msgstr ""
 
-msgid "unnamed"
-msgstr "nepomenované"
+msgid "Public Transport: Join GTFS stops"
+msgstr ""
+
+msgid "Public Transport: Change stop type"
+msgstr ""
 
 msgid "Public Transport: Add track stop"
 msgstr ""
@@ -35101,9 +35100,6 @@ msgstr ""
 msgid "Public Transport: Suggest stops"
 msgstr ""
 
-msgid "Stopname"
-msgstr ""
-
 msgid "Public Transport: Detach waypoints"
 msgstr ""
 
@@ -35116,6 +35112,89 @@ msgstr ""
 msgid "Public Transport: Edit waypoint name"
 msgstr ""
 
+msgid "rail"
+msgstr "koľajnica (rail)"
+
+msgid "Can''t parse a time from this string."
+msgstr ""
+
+msgid "Invalid value"
+msgstr ""
+
+msgid "Create Stops from GTFS"
+msgstr ""
+
+msgid "GTFS-Stops"
+msgstr ""
+
+msgid "Type of stops to add"
+msgstr ""
+
+msgid "Time on your GPS device"
+msgstr ""
+
+msgid "HH:MM:SS.sss"
+msgstr ""
+
+msgid "Time on your stopwatch"
+msgstr ""
+
+msgid "Time window"
+msgstr ""
+
+msgid "seconds"
+msgstr ""
+
+msgid "Move Threshold"
+msgstr ""
+
+msgid "Catch"
+msgstr ""
+
+msgid "Join"
+msgstr ""
+
+msgid "Create Stops from GPX"
+msgstr ""
+
+msgid "Tracks in this GPX file:"
+msgstr ""
+
+msgid "Detach"
+msgstr ""
+
+msgid "implicit"
+msgstr ""
+
+msgid "State"
+msgstr "Štát (vo federácii)"
+
+msgid "[incomplete]"
+msgstr ""
+
+msgid "[empty way]"
+msgstr ""
+
+msgid "[gap]"
+msgstr ""
+
+msgid "Stopname"
+msgstr ""
+
+msgid " [ID] {0}"
+msgstr " [ID] {0}"
+
+msgid ""
+"The GPX file doesn''t contain valid trackpoints. Please use a GPX file that "
+"has trackpoints."
+msgstr ""
+
+msgid "GPX File Trouble"
+msgstr ""
+
+msgid "unnamed"
+msgstr "nepomenované"
+
 msgid "Distance between stops"
 msgstr ""
 
@@ -35854,6 +35933,9 @@ msgstr "Otvoriť dialóg úpravy značiek"
 msgid "JOSM Tag Editor Plugin"
 msgstr "JOSM Tag Editor Plugin (plugin pre úpravu značiek)"
 
+msgid "Presets"
+msgstr "Predvoľby"
+
 msgid "Abort tag editing and close dialog"
 msgstr "Prerušte úpravy a zatvorte dialógové okno"
 
@@ -37935,6 +38017,26 @@ msgid_plural "Overwrite ''{0}'' tags {1} from {2} with new value ''{3}''?"
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Download from Sophox API"
+msgstr ""
+
+msgid ""
+"Find places of education at least 2km, and at most 3km from the center of "
+"the selection"
+msgstr ""
+
+msgid "Show/hide Sophox snippet list"
+msgstr ""
+
+msgid "help"
+msgstr ""
+
+msgid "Server: "
+msgstr ""
+
+msgid "Wikidata+OSM server"
+msgstr ""
+
 msgid "Search Wikidata items"
 msgstr ""
 
@@ -38010,26 +38112,6 @@ msgid ""
 msgstr ""
 "Pridá do vybratých objektov značku \"wikipedia\" zodpovedajúcu tomuto článku"
 
-msgid "Download from Wikosm API"
-msgstr ""
-
-msgid ""
-"Find places of education at least 2km, and at most 3km from the center of "
-"the selection"
-msgstr ""
-
-msgid "Show/hide Wikosm snippet list"
-msgstr ""
-
-msgid "help"
-msgstr ""
-
-msgid "Server: "
-msgstr ""
-
-msgid "Wikidata+OSM server"
-msgstr ""
-
 msgid "The Ultimate WMS Super-speed Turbo Challenge II"
 msgstr ""
 
diff --git a/i18n/po/sl.po b/i18n/po/sl.po
index 55864cf..61e9bb1 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-10-30 03:38+0100\n"
+"POT-Creation-Date: 2017-11-26 00:06+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-10-30 05:01+0000\n"
-"X-Generator: Launchpad (build 18493)\n"
+"X-Launchpad-Export-Date: 2017-11-26 05:03+0000\n"
+"X-Generator: Launchpad (build 18509)\n"
 "Language: sl\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -424,12 +424,15 @@ msgstr ""
 msgid "Delete the active layer. Does not delete the associated file."
 msgstr ""
 
-msgid "Toggle dialogs panel"
+msgid "Dialogs panel"
 msgstr ""
 
 msgid "Toggle dialogs panel, maximize mapview"
 msgstr ""
 
+msgid "Toggle dialogs panel"
+msgstr ""
+
 msgid "Distribute Nodes"
 msgstr ""
 
@@ -6518,6 +6521,9 @@ msgstr ""
 msgid "Coordinates (projected): "
 msgstr ""
 
+msgid "UTM Zone"
+msgstr ""
+
 msgid "Part of: "
 msgstr ""
 
@@ -8824,6 +8830,11 @@ msgstr ""
 msgid "Check \"Save\" to save the layer to the file specified on the left."
 msgstr ""
 
+msgid ""
+"A background upload is already in progress. Kindly wait for it to finish "
+"before uploading new changes"
+msgstr ""
+
 msgid "I would like someone to review my edits."
 msgstr ""
 
@@ -9944,6 +9955,9 @@ msgstr ""
 msgid "Save Layer"
 msgstr ""
 
+msgid "Trying to set a read only data layer as edit layer"
+msgstr ""
+
 msgid "{0} note"
 msgid_plural "{0} notes"
 msgstr[0] ""
@@ -10778,11 +10792,6 @@ msgstr ""
 msgid "Failed to parse Mappaint styles from ''{0}''. Error was: {1}"
 msgstr ""
 
-msgid ""
-"Detected deprecated ''{0}'' in ''{1}'' which will be removed shortly. Use "
-"''{2}'' instead."
-msgstr ""
-
 msgid "Failed to locate image ''{0}''"
 msgstr ""
 
@@ -11949,6 +11958,9 @@ msgstr ""
 msgid "Show object ID in selection lists"
 msgstr ""
 
+msgid "Show node coordinates in selection lists"
+msgstr ""
+
 msgid "Show localized name in selection lists"
 msgstr ""
 
@@ -12705,9 +12717,6 @@ msgstr ""
 msgid "UTM"
 msgstr ""
 
-msgid "UTM Zone"
-msgstr ""
-
 msgid "North"
 msgstr ""
 
@@ -13177,9 +13186,6 @@ msgstr ""
 msgid "Error parsing {0}: "
 msgstr ""
 
-msgid "Presets"
-msgstr "Prednastavitve"
-
 msgid "Search for objects by preset..."
 msgstr ""
 
@@ -15727,6 +15733,18 @@ msgstr ""
 msgid "korean"
 msgstr ""
 
+msgid "donut"
+msgstr ""
+
+msgid "mediterranean"
+msgstr ""
+
+msgid "friture"
+msgstr ""
+
+msgid "crepe"
+msgstr ""
+
 msgid "Internet access"
 msgstr ""
 
@@ -18569,7 +18587,16 @@ msgstr ""
 msgid "Tents allowed"
 msgstr ""
 
-msgid "Camping Site"
+msgid "Campsite"
+msgstr ""
+
+msgid "Caravans allowed"
+msgstr ""
+
+msgid "Backcountry"
+msgstr ""
+
+msgid "Group only access"
 msgstr ""
 
 msgid "Food+Drinks"
@@ -23398,6 +23425,14 @@ msgid ""
 "resolution or better, and refreshed more frequently with ongoing updates."
 msgstr ""
 
+msgid "DigitalGlobe Premium Imagery Vintage"
+msgstr ""
+
+msgid ""
+"Imagery boundaries and capture dates. Labels appear at zoom level 14 and "
+"higher."
+msgstr ""
+
 msgid "DigitalGlobe Standard Imagery"
 msgstr ""
 
@@ -23407,6 +23442,9 @@ msgid ""
 "Landsat. Average age is 2.31 years, with some areas updated 2x per year."
 msgstr ""
 
+msgid "DigitalGlobe Standard Imagery Vintage"
+msgstr ""
+
 msgid "Esri World Imagery"
 msgstr ""
 
@@ -23470,6 +23508,12 @@ msgstr ""
 msgid "Strava cycling and running heatmap"
 msgstr ""
 
+msgid "Strava water sports heatmap"
+msgstr ""
+
+msgid "Strava winter sports heatmap"
+msgstr ""
+
 msgid "Locator Overlay"
 msgstr ""
 
@@ -23874,6 +23918,9 @@ msgstr ""
 msgid "SPW(allonie) most recent aerial imagery"
 msgstr ""
 
+msgid "SPW(allonie) 2016 aerial imagery"
+msgstr ""
+
 msgid "SPW(allonie) 2015 aerial imagery"
 msgstr ""
 
@@ -23919,6 +23966,14 @@ msgstr ""
 msgid "Addresses data from IBGE"
 msgstr ""
 
+msgid "Street names IBGE Salvador-BA"
+msgstr ""
+
+msgid ""
+"Streets geometry and names of Salvador, Bahia. Source: Faces de Logradouro - "
+"IBGE."
+msgstr ""
+
 msgid "Rio Mosaic 2013"
 msgstr ""
 
@@ -24649,6 +24704,9 @@ msgstr ""
 msgid "Japan GSI ortho Imagery"
 msgstr ""
 
+msgid "Japan GSI Standard Map"
+msgstr ""
+
 msgid "imagico.de OSM images for mapping: Aral Sea (low water level)"
 msgstr ""
 
@@ -24678,7 +24736,7 @@ msgstr ""
 msgid "20cm ortho - Latvia - Coastline"
 msgstr ""
 
-msgid "1.cikla ortofotokarte - Latvia"
+msgid "Orthophoto 1st cycle (1994-1999) - Latvia"
 msgstr ""
 
 msgid "ORT10LT (Lithuania)"
@@ -24687,6 +24745,9 @@ msgstr ""
 msgid "geoportail.lu all layers"
 msgstr ""
 
+msgid "geoportail.lu ortho latest"
+msgstr ""
+
 msgid "geoportail.lu ortho 2016"
 msgstr ""
 
@@ -26177,6 +26238,9 @@ msgstr ""
 msgid "{0} on a node. Should be used on a way."
 msgstr ""
 
+msgid "{0} on a node. Should be used on a way or relation."
+msgstr ""
+
 msgid "{0} on a node. Should be drawn as an area."
 msgstr ""
 
@@ -26404,6 +26468,9 @@ msgstr ""
 msgid "Nodes duplicating parent way tags"
 msgstr ""
 
+msgid "{0} together with {1} and {2}. Remove {0}."
+msgstr ""
+
 msgid ""
 "wikipedia tag has no language given, use ''wikipedia''=''language:page "
 "title''"
@@ -27168,6 +27235,21 @@ msgstr "Pošlji sledi na openstreetmap.org"
 msgid "Importing..."
 msgstr ""
 
+msgid "Shape is started incorrectly"
+msgstr ""
+
+msgid "Can''t load SVG diagram"
+msgstr ""
+
+msgid "Can''t find root SVG element"
+msgstr ""
+
+msgid "Import primitives"
+msgstr ""
+
+msgid "Cannot find configuration file!"
+msgstr ""
+
 msgid "DXF files [ImportDxf plugin] (*.dxf)"
 msgstr ""
 
@@ -27807,6 +27889,9 @@ msgstr ""
 msgid "Download mode"
 msgstr ""
 
+msgid "Number of images to be pre-fetched (forwards and backwards)"
+msgstr ""
+
 msgid "You are logged in as ''{0}''."
 msgstr ""
 
@@ -28017,8 +28102,17 @@ msgid "only when manually requested"
 msgstr ""
 
 msgid ""
-"The downloaded OSM area is too big. Download mode has been changed to OSM "
-"area until the layer is restarted."
+"The Mapillary layer has stopped downloading images, because the requested "
+"area is too big!"
+msgstr ""
+
+msgid ""
+"To solve this problem, you could zoom in and load a smaller area of the map."
+msgstr ""
+
+msgid ""
+"To solve this problem, you could switch to download mode ''{0}'' and load "
+"Mapillary images for a smaller portion of the map."
 msgstr ""
 
 msgid "Downloading"
@@ -31332,19 +31426,6 @@ msgstr ""
 msgid "Merge Overlap (combine)"
 msgstr ""
 
-msgid ""
-"<html>A role based relation membership was copied to all new ways.<br>You "
-"should verify this and correct it when necessary.</html>"
-msgstr ""
-
-msgid ""
-"<html>A relation membership was copied to all new ways.<br>You should verify "
-"this and correct it when necessary.</html>"
-msgstr ""
-
-msgid "Split way"
-msgstr ""
-
 msgid "Michigan Left"
 msgstr ""
 
@@ -32799,255 +32880,255 @@ msgstr ""
 msgid "PT: Route passes a oneway road in the wrong direction"
 msgstr ""
 
-msgid "moved"
+msgid "Create Stops from GTFS ..."
 msgstr ""
 
-msgid "rail"
+msgid "Create Stops from a GTFS file"
 msgstr ""
 
-msgid "Can''t parse a time from this string."
+msgid "Select GTFS file (stops.txt)"
 msgstr ""
 
-msgid "Invalid value"
+msgid "File \"{0}\" does not exist"
 msgstr ""
 
-msgid "added"
+msgid "IOException \"{0}\" occurred"
 msgstr ""
 
-msgid "Public Transport: Enable GTFSStops"
+msgid ""
+"There exists no dataset. Try to download data from the server or open an OSM "
+"file."
 msgstr ""
 
-msgid "Public Transport: Catch GTFS stops"
+msgid "No data found"
 msgstr ""
 
-msgid "skipped"
+msgid "The GTFS file was empty."
 msgstr ""
 
-msgid "Public Transport: Disable GTFS"
+msgid "[ID] {0}"
 msgstr ""
 
-msgid "Create Stops from GTFS ..."
+msgid "Route patterns ..."
 msgstr ""
 
-msgid "Create Stops from a GTFS file"
+msgid "Edit Route patterns for public transport"
 msgstr ""
 
-msgid "Select GTFS file (stops.txt)"
+msgid "Route Patterns"
 msgstr ""
 
-msgid "File \"{0}\" does not exist"
+msgid "Overview"
 msgstr ""
 
-msgid "IOException \"{0}\" occurred"
+msgid "Itinerary"
 msgstr ""
 
-msgid ""
-"There exists no dataset. Try to download data from the server or open an OSM "
-"file."
+msgid "Stops"
 msgstr ""
 
-msgid "No data found"
+msgid "Meta"
 msgstr ""
 
-msgid "The GTFS file was empty."
+msgid "Existing route patterns:"
 msgstr ""
 
-msgid "Create Stops from GTFS"
+msgid "Reflect"
 msgstr ""
 
-msgid "GTFS-Stops"
+msgid "Required tags:"
 msgstr ""
 
-msgid "Type of stops to add"
+msgid "Common tags:"
 msgstr ""
 
-msgid "Time on your GPS device"
+msgid "Additional tags:"
 msgstr ""
 
-msgid "HH:MM:SS.sss"
+msgid "Add a new Tag"
 msgstr ""
 
-msgid "Time on your stopwatch"
+msgid "Name/Id"
 msgstr ""
 
-msgid "Time window"
+msgid "Find"
 msgstr ""
 
-msgid "seconds"
+msgid "Show"
 msgstr ""
 
-msgid "Move Threshold"
+msgid "Mark"
 msgstr ""
 
-msgid "Suggest Stops"
+msgid "Ref"
 msgstr ""
 
-msgid "Find"
+msgid "Stops are possible on the"
 msgstr ""
 
-msgid "Show"
+msgid "right hand side"
 msgstr ""
 
-msgid "Mark"
+msgid "left hand side"
 msgstr ""
 
-msgid "Catch"
+msgid "Maximum distance from route"
 msgstr ""
 
-msgid "Join"
+msgid "Suggest Stops"
 msgstr ""
 
-msgid "Public Transport: Join GTFS stops"
+msgid "Create Stops from GPX ..."
 msgstr ""
 
-msgid "State"
+msgid "Create Stops from a GPX file"
 msgstr ""
 
-msgid "[incomplete]"
+msgid "Select GPX file"
 msgstr ""
 
-msgid "[empty way]"
+msgid "The GPX file contained no tracks or waypoints."
 msgstr ""
 
-msgid "[ID] {0}"
+msgid "moved"
 msgstr ""
 
-msgid "[gap]"
+msgid "added"
 msgstr ""
 
-msgid "Route patterns ..."
+msgid "Public Transport: Enable GTFSStops"
 msgstr ""
 
-msgid "Edit Route patterns for public transport"
+msgid "Public Transport: Catch GTFS stops"
 msgstr ""
 
-msgid "Route Patterns"
+msgid "skipped"
 msgstr ""
 
-msgid "Overview"
+msgid "Public Transport: Disable GTFS"
 msgstr ""
 
-msgid "Itinerary"
+msgid "Public Transport: Join GTFS stops"
 msgstr ""
 
-msgid "Stops"
+msgid "Public Transport: Change stop type"
 msgstr ""
 
-msgid "Meta"
+msgid "Public Transport: Add track stop"
 msgstr ""
 
-msgid "Existing route patterns:"
+msgid "Public Transport: Delete track stop"
 msgstr ""
 
-msgid "Reflect"
+msgid "Public Transport: Detach track stop list"
 msgstr ""
 
-msgid "Required tags:"
+msgid "Public Transport: Edit track stop list"
 msgstr ""
 
-msgid "Common tags:"
+msgid "Public Transport: Relocate nodes in track stoplist"
 msgstr ""
 
-msgid "Additional tags:"
+msgid "Public Transport: sort track stop list"
 msgstr ""
 
-msgid "Add a new Tag"
+msgid "Public Transport: Suggest stops"
 msgstr ""
 
-msgid "Name/Id"
+msgid "Public Transport: Detach waypoints"
 msgstr ""
 
-msgid "Ref"
+msgid "Public Transport: Disable waypoints"
 msgstr ""
 
-msgid "Stops are possible on the"
+msgid "Public Transport: Enable waypoints"
 msgstr ""
 
-msgid "right hand side"
+msgid "Public Transport: Edit waypoint name"
 msgstr ""
 
-msgid "left hand side"
+msgid "rail"
 msgstr ""
 
-msgid "Maximum distance from route"
+msgid "Can''t parse a time from this string."
 msgstr ""
 
-msgid " [ID] {0}"
+msgid "Invalid value"
 msgstr ""
 
-msgid "Public Transport: Change stop type"
+msgid "Create Stops from GTFS"
 msgstr ""
 
-msgid "Create Stops from GPX ..."
+msgid "GTFS-Stops"
 msgstr ""
 
-msgid "Create Stops from a GPX file"
+msgid "Type of stops to add"
 msgstr ""
 
-msgid "Select GPX file"
+msgid "Time on your GPS device"
 msgstr ""
 
-msgid "The GPX file contained no tracks or waypoints."
+msgid "HH:MM:SS.sss"
 msgstr ""
 
-msgid "Create Stops from GPX"
+msgid "Time on your stopwatch"
 msgstr ""
 
-msgid "Tracks in this GPX file:"
+msgid "Time window"
 msgstr ""
 
-msgid "Detach"
+msgid "seconds"
 msgstr ""
 
-msgid "implicit"
+msgid "Move Threshold"
 msgstr ""
 
-msgid ""
-"The GPX file doesn''t contain valid trackpoints. Please use a GPX file that "
-"has trackpoints."
+msgid "Catch"
 msgstr ""
 
-msgid "GPX File Trouble"
+msgid "Join"
 msgstr ""
 
-msgid "unnamed"
-msgstr "neimenovano"
+msgid "Create Stops from GPX"
+msgstr ""
 
-msgid "Public Transport: Add track stop"
+msgid "Tracks in this GPX file:"
 msgstr ""
 
-msgid "Public Transport: Delete track stop"
+msgid "Detach"
 msgstr ""
 
-msgid "Public Transport: Detach track stop list"
+msgid "implicit"
 msgstr ""
 
-msgid "Public Transport: Edit track stop list"
+msgid "State"
 msgstr ""
 
-msgid "Public Transport: Relocate nodes in track stoplist"
+msgid "[incomplete]"
 msgstr ""
 
-msgid "Public Transport: sort track stop list"
+msgid "[empty way]"
 msgstr ""
 
-msgid "Public Transport: Suggest stops"
+msgid "[gap]"
 msgstr ""
 
 msgid "Stopname"
 msgstr ""
 
-msgid "Public Transport: Detach waypoints"
+msgid " [ID] {0}"
 msgstr ""
 
-msgid "Public Transport: Disable waypoints"
+msgid ""
+"The GPX file doesn''t contain valid trackpoints. Please use a GPX file that "
+"has trackpoints."
 msgstr ""
 
-msgid "Public Transport: Enable waypoints"
+msgid "GPX File Trouble"
 msgstr ""
 
-msgid "Public Transport: Edit waypoint name"
-msgstr ""
+msgid "unnamed"
+msgstr "neimenovano"
 
 msgid "Distance between stops"
 msgstr ""
@@ -33775,6 +33856,9 @@ msgstr ""
 msgid "JOSM Tag Editor Plugin"
 msgstr ""
 
+msgid "Presets"
+msgstr "Prednastavitve"
+
 msgid "Abort tag editing and close dialog"
 msgstr ""
 
@@ -35702,6 +35786,26 @@ msgid_plural "Overwrite ''{0}'' tags {1} from {2} with new value ''{3}''?"
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Download from Sophox API"
+msgstr ""
+
+msgid ""
+"Find places of education at least 2km, and at most 3km from the center of "
+"the selection"
+msgstr ""
+
+msgid "Show/hide Sophox snippet list"
+msgstr ""
+
+msgid "help"
+msgstr ""
+
+msgid "Server: "
+msgstr ""
+
+msgid "Wikidata+OSM server"
+msgstr ""
+
 msgid "Search Wikidata items"
 msgstr ""
 
@@ -35777,26 +35881,6 @@ msgstr ""
 "Izbranjim objektom doda ''wikipedia'' oznako, ki ustreza povezavi do "
 "izbranega členka"
 
-msgid "Download from Wikosm API"
-msgstr ""
-
-msgid ""
-"Find places of education at least 2km, and at most 3km from the center of "
-"the selection"
-msgstr ""
-
-msgid "Show/hide Wikosm snippet list"
-msgstr ""
-
-msgid "help"
-msgstr ""
-
-msgid "Server: "
-msgstr ""
-
-msgid "Wikidata+OSM server"
-msgstr ""
-
 msgid "The Ultimate WMS Super-speed Turbo Challenge II"
 msgstr ""
 
diff --git a/i18n/po/sq.po b/i18n/po/sq.po
index f0db757..aa58097 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-10-30 03:38+0100\n"
+"POT-Creation-Date: 2017-11-26 00:06+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-10-30 04:33+0000\n"
-"X-Generator: Launchpad (build 18493)\n"
+"X-Launchpad-Export-Date: 2017-11-26 04:33+0000\n"
+"X-Generator: Launchpad (build 18509)\n"
 "Language: \n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -421,12 +421,15 @@ msgstr ""
 msgid "Delete the active layer. Does not delete the associated file."
 msgstr ""
 
-msgid "Toggle dialogs panel"
+msgid "Dialogs panel"
 msgstr ""
 
 msgid "Toggle dialogs panel, maximize mapview"
 msgstr ""
 
+msgid "Toggle dialogs panel"
+msgstr ""
+
 msgid "Distribute Nodes"
 msgstr ""
 
@@ -6488,6 +6491,9 @@ msgstr ""
 msgid "Coordinates (projected): "
 msgstr ""
 
+msgid "UTM Zone"
+msgstr ""
+
 msgid "Part of: "
 msgstr ""
 
@@ -8786,6 +8792,11 @@ msgstr ""
 msgid "Check \"Save\" to save the layer to the file specified on the left."
 msgstr ""
 
+msgid ""
+"A background upload is already in progress. Kindly wait for it to finish "
+"before uploading new changes"
+msgstr ""
+
 msgid "I would like someone to review my edits."
 msgstr ""
 
@@ -9894,6 +9905,9 @@ msgstr ""
 msgid "Save Layer"
 msgstr ""
 
+msgid "Trying to set a read only data layer as edit layer"
+msgstr ""
+
 msgid "{0} note"
 msgid_plural "{0} notes"
 msgstr[0] ""
@@ -10724,11 +10738,6 @@ msgstr ""
 msgid "Failed to parse Mappaint styles from ''{0}''. Error was: {1}"
 msgstr ""
 
-msgid ""
-"Detected deprecated ''{0}'' in ''{1}'' which will be removed shortly. Use "
-"''{2}'' instead."
-msgstr ""
-
 msgid "Failed to locate image ''{0}''"
 msgstr ""
 
@@ -11893,6 +11902,9 @@ msgstr ""
 msgid "Show object ID in selection lists"
 msgstr ""
 
+msgid "Show node coordinates in selection lists"
+msgstr ""
+
 msgid "Show localized name in selection lists"
 msgstr ""
 
@@ -12649,9 +12661,6 @@ msgstr ""
 msgid "UTM"
 msgstr ""
 
-msgid "UTM Zone"
-msgstr ""
-
 msgid "North"
 msgstr ""
 
@@ -13119,9 +13128,6 @@ msgstr ""
 msgid "Error parsing {0}: "
 msgstr ""
 
-msgid "Presets"
-msgstr ""
-
 msgid "Search for objects by preset..."
 msgstr ""
 
@@ -15663,6 +15669,18 @@ msgstr ""
 msgid "korean"
 msgstr ""
 
+msgid "donut"
+msgstr ""
+
+msgid "mediterranean"
+msgstr ""
+
+msgid "friture"
+msgstr ""
+
+msgid "crepe"
+msgstr ""
+
 msgid "Internet access"
 msgstr ""
 
@@ -18505,7 +18523,16 @@ msgstr ""
 msgid "Tents allowed"
 msgstr ""
 
-msgid "Camping Site"
+msgid "Campsite"
+msgstr ""
+
+msgid "Caravans allowed"
+msgstr ""
+
+msgid "Backcountry"
+msgstr ""
+
+msgid "Group only access"
 msgstr ""
 
 msgid "Food+Drinks"
@@ -23334,6 +23361,14 @@ msgid ""
 "resolution or better, and refreshed more frequently with ongoing updates."
 msgstr ""
 
+msgid "DigitalGlobe Premium Imagery Vintage"
+msgstr ""
+
+msgid ""
+"Imagery boundaries and capture dates. Labels appear at zoom level 14 and "
+"higher."
+msgstr ""
+
 msgid "DigitalGlobe Standard Imagery"
 msgstr ""
 
@@ -23343,6 +23378,9 @@ msgid ""
 "Landsat. Average age is 2.31 years, with some areas updated 2x per year."
 msgstr ""
 
+msgid "DigitalGlobe Standard Imagery Vintage"
+msgstr ""
+
 msgid "Esri World Imagery"
 msgstr ""
 
@@ -23406,6 +23444,12 @@ msgstr ""
 msgid "Strava cycling and running heatmap"
 msgstr ""
 
+msgid "Strava water sports heatmap"
+msgstr ""
+
+msgid "Strava winter sports heatmap"
+msgstr ""
+
 msgid "Locator Overlay"
 msgstr ""
 
@@ -23810,6 +23854,9 @@ msgstr ""
 msgid "SPW(allonie) most recent aerial imagery"
 msgstr ""
 
+msgid "SPW(allonie) 2016 aerial imagery"
+msgstr ""
+
 msgid "SPW(allonie) 2015 aerial imagery"
 msgstr ""
 
@@ -23855,6 +23902,14 @@ msgstr ""
 msgid "Addresses data from IBGE"
 msgstr ""
 
+msgid "Street names IBGE Salvador-BA"
+msgstr ""
+
+msgid ""
+"Streets geometry and names of Salvador, Bahia. Source: Faces de Logradouro - "
+"IBGE."
+msgstr ""
+
 msgid "Rio Mosaic 2013"
 msgstr ""
 
@@ -24585,6 +24640,9 @@ msgstr ""
 msgid "Japan GSI ortho Imagery"
 msgstr ""
 
+msgid "Japan GSI Standard Map"
+msgstr ""
+
 msgid "imagico.de OSM images for mapping: Aral Sea (low water level)"
 msgstr ""
 
@@ -24614,7 +24672,7 @@ msgstr ""
 msgid "20cm ortho - Latvia - Coastline"
 msgstr ""
 
-msgid "1.cikla ortofotokarte - Latvia"
+msgid "Orthophoto 1st cycle (1994-1999) - Latvia"
 msgstr ""
 
 msgid "ORT10LT (Lithuania)"
@@ -24623,6 +24681,9 @@ msgstr ""
 msgid "geoportail.lu all layers"
 msgstr ""
 
+msgid "geoportail.lu ortho latest"
+msgstr ""
+
 msgid "geoportail.lu ortho 2016"
 msgstr ""
 
@@ -26113,6 +26174,9 @@ msgstr ""
 msgid "{0} on a node. Should be used on a way."
 msgstr ""
 
+msgid "{0} on a node. Should be used on a way or relation."
+msgstr ""
+
 msgid "{0} on a node. Should be drawn as an area."
 msgstr ""
 
@@ -26340,6 +26404,9 @@ msgstr ""
 msgid "Nodes duplicating parent way tags"
 msgstr ""
 
+msgid "{0} together with {1} and {2}. Remove {0}."
+msgstr ""
+
 msgid ""
 "wikipedia tag has no language given, use ''wikipedia''=''language:page "
 "title''"
@@ -27104,6 +27171,21 @@ msgstr ""
 msgid "Importing..."
 msgstr ""
 
+msgid "Shape is started incorrectly"
+msgstr ""
+
+msgid "Can''t load SVG diagram"
+msgstr ""
+
+msgid "Can''t find root SVG element"
+msgstr ""
+
+msgid "Import primitives"
+msgstr ""
+
+msgid "Cannot find configuration file!"
+msgstr ""
+
 msgid "DXF files [ImportDxf plugin] (*.dxf)"
 msgstr ""
 
@@ -27743,6 +27825,9 @@ msgstr ""
 msgid "Download mode"
 msgstr ""
 
+msgid "Number of images to be pre-fetched (forwards and backwards)"
+msgstr ""
+
 msgid "You are logged in as ''{0}''."
 msgstr ""
 
@@ -27953,8 +28038,17 @@ msgid "only when manually requested"
 msgstr ""
 
 msgid ""
-"The downloaded OSM area is too big. Download mode has been changed to OSM "
-"area until the layer is restarted."
+"The Mapillary layer has stopped downloading images, because the requested "
+"area is too big!"
+msgstr ""
+
+msgid ""
+"To solve this problem, you could zoom in and load a smaller area of the map."
+msgstr ""
+
+msgid ""
+"To solve this problem, you could switch to download mode ''{0}'' and load "
+"Mapillary images for a smaller portion of the map."
 msgstr ""
 
 msgid "Downloading"
@@ -31266,19 +31360,6 @@ msgstr ""
 msgid "Merge Overlap (combine)"
 msgstr ""
 
-msgid ""
-"<html>A role based relation membership was copied to all new ways.<br>You "
-"should verify this and correct it when necessary.</html>"
-msgstr ""
-
-msgid ""
-"<html>A relation membership was copied to all new ways.<br>You should verify "
-"this and correct it when necessary.</html>"
-msgstr ""
-
-msgid "Split way"
-msgstr ""
-
 msgid "Michigan Left"
 msgstr ""
 
@@ -32733,254 +32814,254 @@ msgstr ""
 msgid "PT: Route passes a oneway road in the wrong direction"
 msgstr ""
 
-msgid "moved"
+msgid "Create Stops from GTFS ..."
 msgstr ""
 
-msgid "rail"
+msgid "Create Stops from a GTFS file"
 msgstr ""
 
-msgid "Can''t parse a time from this string."
+msgid "Select GTFS file (stops.txt)"
 msgstr ""
 
-msgid "Invalid value"
+msgid "File \"{0}\" does not exist"
 msgstr ""
 
-msgid "added"
+msgid "IOException \"{0}\" occurred"
 msgstr ""
 
-msgid "Public Transport: Enable GTFSStops"
+msgid ""
+"There exists no dataset. Try to download data from the server or open an OSM "
+"file."
 msgstr ""
 
-msgid "Public Transport: Catch GTFS stops"
+msgid "No data found"
 msgstr ""
 
-msgid "skipped"
+msgid "The GTFS file was empty."
 msgstr ""
 
-msgid "Public Transport: Disable GTFS"
+msgid "[ID] {0}"
 msgstr ""
 
-msgid "Create Stops from GTFS ..."
+msgid "Route patterns ..."
 msgstr ""
 
-msgid "Create Stops from a GTFS file"
+msgid "Edit Route patterns for public transport"
 msgstr ""
 
-msgid "Select GTFS file (stops.txt)"
+msgid "Route Patterns"
 msgstr ""
 
-msgid "File \"{0}\" does not exist"
+msgid "Overview"
 msgstr ""
 
-msgid "IOException \"{0}\" occurred"
+msgid "Itinerary"
 msgstr ""
 
-msgid ""
-"There exists no dataset. Try to download data from the server or open an OSM "
-"file."
+msgid "Stops"
 msgstr ""
 
-msgid "No data found"
+msgid "Meta"
 msgstr ""
 
-msgid "The GTFS file was empty."
+msgid "Existing route patterns:"
 msgstr ""
 
-msgid "Create Stops from GTFS"
+msgid "Reflect"
 msgstr ""
 
-msgid "GTFS-Stops"
+msgid "Required tags:"
 msgstr ""
 
-msgid "Type of stops to add"
+msgid "Common tags:"
 msgstr ""
 
-msgid "Time on your GPS device"
+msgid "Additional tags:"
 msgstr ""
 
-msgid "HH:MM:SS.sss"
+msgid "Add a new Tag"
 msgstr ""
 
-msgid "Time on your stopwatch"
+msgid "Name/Id"
 msgstr ""
 
-msgid "Time window"
+msgid "Find"
 msgstr ""
 
-msgid "seconds"
+msgid "Show"
 msgstr ""
 
-msgid "Move Threshold"
+msgid "Mark"
 msgstr ""
 
-msgid "Suggest Stops"
+msgid "Ref"
 msgstr ""
 
-msgid "Find"
+msgid "Stops are possible on the"
 msgstr ""
 
-msgid "Show"
+msgid "right hand side"
 msgstr ""
 
-msgid "Mark"
+msgid "left hand side"
 msgstr ""
 
-msgid "Catch"
+msgid "Maximum distance from route"
 msgstr ""
 
-msgid "Join"
+msgid "Suggest Stops"
 msgstr ""
 
-msgid "Public Transport: Join GTFS stops"
+msgid "Create Stops from GPX ..."
 msgstr ""
 
-msgid "State"
+msgid "Create Stops from a GPX file"
 msgstr ""
 
-msgid "[incomplete]"
+msgid "Select GPX file"
 msgstr ""
 
-msgid "[empty way]"
+msgid "The GPX file contained no tracks or waypoints."
 msgstr ""
 
-msgid "[ID] {0}"
+msgid "moved"
 msgstr ""
 
-msgid "[gap]"
+msgid "added"
 msgstr ""
 
-msgid "Route patterns ..."
+msgid "Public Transport: Enable GTFSStops"
 msgstr ""
 
-msgid "Edit Route patterns for public transport"
+msgid "Public Transport: Catch GTFS stops"
 msgstr ""
 
-msgid "Route Patterns"
+msgid "skipped"
 msgstr ""
 
-msgid "Overview"
+msgid "Public Transport: Disable GTFS"
 msgstr ""
 
-msgid "Itinerary"
+msgid "Public Transport: Join GTFS stops"
 msgstr ""
 
-msgid "Stops"
+msgid "Public Transport: Change stop type"
 msgstr ""
 
-msgid "Meta"
+msgid "Public Transport: Add track stop"
 msgstr ""
 
-msgid "Existing route patterns:"
+msgid "Public Transport: Delete track stop"
 msgstr ""
 
-msgid "Reflect"
+msgid "Public Transport: Detach track stop list"
 msgstr ""
 
-msgid "Required tags:"
+msgid "Public Transport: Edit track stop list"
 msgstr ""
 
-msgid "Common tags:"
+msgid "Public Transport: Relocate nodes in track stoplist"
 msgstr ""
 
-msgid "Additional tags:"
+msgid "Public Transport: sort track stop list"
 msgstr ""
 
-msgid "Add a new Tag"
+msgid "Public Transport: Suggest stops"
 msgstr ""
 
-msgid "Name/Id"
+msgid "Public Transport: Detach waypoints"
 msgstr ""
 
-msgid "Ref"
+msgid "Public Transport: Disable waypoints"
 msgstr ""
 
-msgid "Stops are possible on the"
+msgid "Public Transport: Enable waypoints"
 msgstr ""
 
-msgid "right hand side"
+msgid "Public Transport: Edit waypoint name"
 msgstr ""
 
-msgid "left hand side"
+msgid "rail"
 msgstr ""
 
-msgid "Maximum distance from route"
+msgid "Can''t parse a time from this string."
 msgstr ""
 
-msgid " [ID] {0}"
+msgid "Invalid value"
 msgstr ""
 
-msgid "Public Transport: Change stop type"
+msgid "Create Stops from GTFS"
 msgstr ""
 
-msgid "Create Stops from GPX ..."
+msgid "GTFS-Stops"
 msgstr ""
 
-msgid "Create Stops from a GPX file"
+msgid "Type of stops to add"
 msgstr ""
 
-msgid "Select GPX file"
+msgid "Time on your GPS device"
 msgstr ""
 
-msgid "The GPX file contained no tracks or waypoints."
+msgid "HH:MM:SS.sss"
 msgstr ""
 
-msgid "Create Stops from GPX"
+msgid "Time on your stopwatch"
 msgstr ""
 
-msgid "Tracks in this GPX file:"
+msgid "Time window"
 msgstr ""
 
-msgid "Detach"
+msgid "seconds"
 msgstr ""
 
-msgid "implicit"
+msgid "Move Threshold"
 msgstr ""
 
-msgid ""
-"The GPX file doesn''t contain valid trackpoints. Please use a GPX file that "
-"has trackpoints."
+msgid "Catch"
 msgstr ""
 
-msgid "GPX File Trouble"
+msgid "Join"
 msgstr ""
 
-msgid "unnamed"
+msgid "Create Stops from GPX"
 msgstr ""
 
-msgid "Public Transport: Add track stop"
+msgid "Tracks in this GPX file:"
 msgstr ""
 
-msgid "Public Transport: Delete track stop"
+msgid "Detach"
 msgstr ""
 
-msgid "Public Transport: Detach track stop list"
+msgid "implicit"
 msgstr ""
 
-msgid "Public Transport: Edit track stop list"
+msgid "State"
 msgstr ""
 
-msgid "Public Transport: Relocate nodes in track stoplist"
+msgid "[incomplete]"
 msgstr ""
 
-msgid "Public Transport: sort track stop list"
+msgid "[empty way]"
 msgstr ""
 
-msgid "Public Transport: Suggest stops"
+msgid "[gap]"
 msgstr ""
 
 msgid "Stopname"
 msgstr ""
 
-msgid "Public Transport: Detach waypoints"
+msgid " [ID] {0}"
 msgstr ""
 
-msgid "Public Transport: Disable waypoints"
+msgid ""
+"The GPX file doesn''t contain valid trackpoints. Please use a GPX file that "
+"has trackpoints."
 msgstr ""
 
-msgid "Public Transport: Enable waypoints"
+msgid "GPX File Trouble"
 msgstr ""
 
-msgid "Public Transport: Edit waypoint name"
+msgid "unnamed"
 msgstr ""
 
 msgid "Distance between stops"
@@ -33709,6 +33790,9 @@ msgstr ""
 msgid "JOSM Tag Editor Plugin"
 msgstr ""
 
+msgid "Presets"
+msgstr ""
+
 msgid "Abort tag editing and close dialog"
 msgstr ""
 
@@ -35634,6 +35718,26 @@ msgid_plural "Overwrite ''{0}'' tags {1} from {2} with new value ''{3}''?"
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Download from Sophox API"
+msgstr ""
+
+msgid ""
+"Find places of education at least 2km, and at most 3km from the center of "
+"the selection"
+msgstr ""
+
+msgid "Show/hide Sophox snippet list"
+msgstr ""
+
+msgid "help"
+msgstr ""
+
+msgid "Server: "
+msgstr ""
+
+msgid "Wikidata+OSM server"
+msgstr ""
+
 msgid "Search Wikidata items"
 msgstr ""
 
@@ -35707,26 +35811,6 @@ msgid ""
 "objects"
 msgstr ""
 
-msgid "Download from Wikosm API"
-msgstr ""
-
-msgid ""
-"Find places of education at least 2km, and at most 3km from the center of "
-"the selection"
-msgstr ""
-
-msgid "Show/hide Wikosm snippet list"
-msgstr ""
-
-msgid "help"
-msgstr ""
-
-msgid "Server: "
-msgstr ""
-
-msgid "Wikidata+OSM server"
-msgstr ""
-
 msgid "The Ultimate WMS Super-speed Turbo Challenge II"
 msgstr ""
 
diff --git a/i18n/po/sr.po b/i18n/po/sr.po
index 65340eb..130cac7 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-10-30 03:38+0100\n"
+"POT-Creation-Date: 2017-11-26 00:06+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-10-30 05:00+0000\n"
-"X-Generator: Launchpad (build 18493)\n"
+"X-Launchpad-Export-Date: 2017-11-26 05:02+0000\n"
+"X-Generator: Launchpad (build 18509)\n"
 "Language: sr\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -422,12 +422,15 @@ msgstr ""
 msgid "Delete the active layer. Does not delete the associated file."
 msgstr ""
 
-msgid "Toggle dialogs panel"
+msgid "Dialogs panel"
 msgstr ""
 
 msgid "Toggle dialogs panel, maximize mapview"
 msgstr ""
 
+msgid "Toggle dialogs panel"
+msgstr ""
+
 msgid "Distribute Nodes"
 msgstr ""
 
@@ -6489,6 +6492,9 @@ msgstr ""
 msgid "Coordinates (projected): "
 msgstr ""
 
+msgid "UTM Zone"
+msgstr ""
+
 msgid "Part of: "
 msgstr ""
 
@@ -8788,6 +8794,11 @@ msgstr ""
 msgid "Check \"Save\" to save the layer to the file specified on the left."
 msgstr ""
 
+msgid ""
+"A background upload is already in progress. Kindly wait for it to finish "
+"before uploading new changes"
+msgstr ""
+
 msgid "I would like someone to review my edits."
 msgstr ""
 
@@ -9896,6 +9907,9 @@ msgstr ""
 msgid "Save Layer"
 msgstr ""
 
+msgid "Trying to set a read only data layer as edit layer"
+msgstr ""
+
 msgid "{0} note"
 msgid_plural "{0} notes"
 msgstr[0] ""
@@ -10726,11 +10740,6 @@ msgstr ""
 msgid "Failed to parse Mappaint styles from ''{0}''. Error was: {1}"
 msgstr ""
 
-msgid ""
-"Detected deprecated ''{0}'' in ''{1}'' which will be removed shortly. Use "
-"''{2}'' instead."
-msgstr ""
-
 msgid "Failed to locate image ''{0}''"
 msgstr ""
 
@@ -11895,6 +11904,9 @@ msgstr ""
 msgid "Show object ID in selection lists"
 msgstr ""
 
+msgid "Show node coordinates in selection lists"
+msgstr ""
+
 msgid "Show localized name in selection lists"
 msgstr ""
 
@@ -12651,9 +12663,6 @@ msgstr ""
 msgid "UTM"
 msgstr ""
 
-msgid "UTM Zone"
-msgstr ""
-
 msgid "North"
 msgstr ""
 
@@ -13121,9 +13130,6 @@ msgstr ""
 msgid "Error parsing {0}: "
 msgstr ""
 
-msgid "Presets"
-msgstr ""
-
 msgid "Search for objects by preset..."
 msgstr ""
 
@@ -15665,6 +15671,18 @@ msgstr ""
 msgid "korean"
 msgstr ""
 
+msgid "donut"
+msgstr ""
+
+msgid "mediterranean"
+msgstr ""
+
+msgid "friture"
+msgstr ""
+
+msgid "crepe"
+msgstr ""
+
 msgid "Internet access"
 msgstr ""
 
@@ -18507,7 +18525,16 @@ msgstr ""
 msgid "Tents allowed"
 msgstr ""
 
-msgid "Camping Site"
+msgid "Campsite"
+msgstr ""
+
+msgid "Caravans allowed"
+msgstr ""
+
+msgid "Backcountry"
+msgstr ""
+
+msgid "Group only access"
 msgstr ""
 
 msgid "Food+Drinks"
@@ -23336,6 +23363,14 @@ msgid ""
 "resolution or better, and refreshed more frequently with ongoing updates."
 msgstr ""
 
+msgid "DigitalGlobe Premium Imagery Vintage"
+msgstr ""
+
+msgid ""
+"Imagery boundaries and capture dates. Labels appear at zoom level 14 and "
+"higher."
+msgstr ""
+
 msgid "DigitalGlobe Standard Imagery"
 msgstr ""
 
@@ -23345,6 +23380,9 @@ msgid ""
 "Landsat. Average age is 2.31 years, with some areas updated 2x per year."
 msgstr ""
 
+msgid "DigitalGlobe Standard Imagery Vintage"
+msgstr ""
+
 msgid "Esri World Imagery"
 msgstr ""
 
@@ -23408,6 +23446,12 @@ msgstr ""
 msgid "Strava cycling and running heatmap"
 msgstr ""
 
+msgid "Strava water sports heatmap"
+msgstr ""
+
+msgid "Strava winter sports heatmap"
+msgstr ""
+
 msgid "Locator Overlay"
 msgstr ""
 
@@ -23812,6 +23856,9 @@ msgstr ""
 msgid "SPW(allonie) most recent aerial imagery"
 msgstr ""
 
+msgid "SPW(allonie) 2016 aerial imagery"
+msgstr ""
+
 msgid "SPW(allonie) 2015 aerial imagery"
 msgstr ""
 
@@ -23857,6 +23904,14 @@ msgstr ""
 msgid "Addresses data from IBGE"
 msgstr ""
 
+msgid "Street names IBGE Salvador-BA"
+msgstr ""
+
+msgid ""
+"Streets geometry and names of Salvador, Bahia. Source: Faces de Logradouro - "
+"IBGE."
+msgstr ""
+
 msgid "Rio Mosaic 2013"
 msgstr ""
 
@@ -24587,6 +24642,9 @@ msgstr ""
 msgid "Japan GSI ortho Imagery"
 msgstr ""
 
+msgid "Japan GSI Standard Map"
+msgstr ""
+
 msgid "imagico.de OSM images for mapping: Aral Sea (low water level)"
 msgstr ""
 
@@ -24616,7 +24674,7 @@ msgstr ""
 msgid "20cm ortho - Latvia - Coastline"
 msgstr ""
 
-msgid "1.cikla ortofotokarte - Latvia"
+msgid "Orthophoto 1st cycle (1994-1999) - Latvia"
 msgstr ""
 
 msgid "ORT10LT (Lithuania)"
@@ -24625,6 +24683,9 @@ msgstr ""
 msgid "geoportail.lu all layers"
 msgstr ""
 
+msgid "geoportail.lu ortho latest"
+msgstr ""
+
 msgid "geoportail.lu ortho 2016"
 msgstr ""
 
@@ -26115,6 +26176,9 @@ msgstr ""
 msgid "{0} on a node. Should be used on a way."
 msgstr ""
 
+msgid "{0} on a node. Should be used on a way or relation."
+msgstr ""
+
 msgid "{0} on a node. Should be drawn as an area."
 msgstr ""
 
@@ -26342,6 +26406,9 @@ msgstr ""
 msgid "Nodes duplicating parent way tags"
 msgstr ""
 
+msgid "{0} together with {1} and {2}. Remove {0}."
+msgstr ""
+
 msgid ""
 "wikipedia tag has no language given, use ''wikipedia''=''language:page "
 "title''"
@@ -27106,6 +27173,21 @@ msgstr ""
 msgid "Importing..."
 msgstr ""
 
+msgid "Shape is started incorrectly"
+msgstr ""
+
+msgid "Can''t load SVG diagram"
+msgstr ""
+
+msgid "Can''t find root SVG element"
+msgstr ""
+
+msgid "Import primitives"
+msgstr ""
+
+msgid "Cannot find configuration file!"
+msgstr ""
+
 msgid "DXF files [ImportDxf plugin] (*.dxf)"
 msgstr ""
 
@@ -27745,6 +27827,9 @@ msgstr ""
 msgid "Download mode"
 msgstr ""
 
+msgid "Number of images to be pre-fetched (forwards and backwards)"
+msgstr ""
+
 msgid "You are logged in as ''{0}''."
 msgstr ""
 
@@ -27955,8 +28040,17 @@ msgid "only when manually requested"
 msgstr ""
 
 msgid ""
-"The downloaded OSM area is too big. Download mode has been changed to OSM "
-"area until the layer is restarted."
+"The Mapillary layer has stopped downloading images, because the requested "
+"area is too big!"
+msgstr ""
+
+msgid ""
+"To solve this problem, you could zoom in and load a smaller area of the map."
+msgstr ""
+
+msgid ""
+"To solve this problem, you could switch to download mode ''{0}'' and load "
+"Mapillary images for a smaller portion of the map."
 msgstr ""
 
 msgid "Downloading"
@@ -31268,19 +31362,6 @@ msgstr ""
 msgid "Merge Overlap (combine)"
 msgstr ""
 
-msgid ""
-"<html>A role based relation membership was copied to all new ways.<br>You "
-"should verify this and correct it when necessary.</html>"
-msgstr ""
-
-msgid ""
-"<html>A relation membership was copied to all new ways.<br>You should verify "
-"this and correct it when necessary.</html>"
-msgstr ""
-
-msgid "Split way"
-msgstr ""
-
 msgid "Michigan Left"
 msgstr ""
 
@@ -32735,254 +32816,254 @@ msgstr ""
 msgid "PT: Route passes a oneway road in the wrong direction"
 msgstr ""
 
-msgid "moved"
+msgid "Create Stops from GTFS ..."
 msgstr ""
 
-msgid "rail"
+msgid "Create Stops from a GTFS file"
 msgstr ""
 
-msgid "Can''t parse a time from this string."
+msgid "Select GTFS file (stops.txt)"
 msgstr ""
 
-msgid "Invalid value"
+msgid "File \"{0}\" does not exist"
 msgstr ""
 
-msgid "added"
+msgid "IOException \"{0}\" occurred"
 msgstr ""
 
-msgid "Public Transport: Enable GTFSStops"
+msgid ""
+"There exists no dataset. Try to download data from the server or open an OSM "
+"file."
 msgstr ""
 
-msgid "Public Transport: Catch GTFS stops"
+msgid "No data found"
 msgstr ""
 
-msgid "skipped"
+msgid "The GTFS file was empty."
 msgstr ""
 
-msgid "Public Transport: Disable GTFS"
+msgid "[ID] {0}"
 msgstr ""
 
-msgid "Create Stops from GTFS ..."
+msgid "Route patterns ..."
 msgstr ""
 
-msgid "Create Stops from a GTFS file"
+msgid "Edit Route patterns for public transport"
 msgstr ""
 
-msgid "Select GTFS file (stops.txt)"
+msgid "Route Patterns"
 msgstr ""
 
-msgid "File \"{0}\" does not exist"
+msgid "Overview"
 msgstr ""
 
-msgid "IOException \"{0}\" occurred"
+msgid "Itinerary"
 msgstr ""
 
-msgid ""
-"There exists no dataset. Try to download data from the server or open an OSM "
-"file."
+msgid "Stops"
 msgstr ""
 
-msgid "No data found"
+msgid "Meta"
 msgstr ""
 
-msgid "The GTFS file was empty."
+msgid "Existing route patterns:"
 msgstr ""
 
-msgid "Create Stops from GTFS"
+msgid "Reflect"
 msgstr ""
 
-msgid "GTFS-Stops"
+msgid "Required tags:"
 msgstr ""
 
-msgid "Type of stops to add"
+msgid "Common tags:"
 msgstr ""
 
-msgid "Time on your GPS device"
+msgid "Additional tags:"
 msgstr ""
 
-msgid "HH:MM:SS.sss"
+msgid "Add a new Tag"
 msgstr ""
 
-msgid "Time on your stopwatch"
+msgid "Name/Id"
 msgstr ""
 
-msgid "Time window"
+msgid "Find"
 msgstr ""
 
-msgid "seconds"
+msgid "Show"
 msgstr ""
 
-msgid "Move Threshold"
+msgid "Mark"
 msgstr ""
 
-msgid "Suggest Stops"
+msgid "Ref"
 msgstr ""
 
-msgid "Find"
+msgid "Stops are possible on the"
 msgstr ""
 
-msgid "Show"
+msgid "right hand side"
 msgstr ""
 
-msgid "Mark"
+msgid "left hand side"
 msgstr ""
 
-msgid "Catch"
+msgid "Maximum distance from route"
 msgstr ""
 
-msgid "Join"
+msgid "Suggest Stops"
 msgstr ""
 
-msgid "Public Transport: Join GTFS stops"
+msgid "Create Stops from GPX ..."
 msgstr ""
 
-msgid "State"
+msgid "Create Stops from a GPX file"
 msgstr ""
 
-msgid "[incomplete]"
+msgid "Select GPX file"
 msgstr ""
 
-msgid "[empty way]"
+msgid "The GPX file contained no tracks or waypoints."
 msgstr ""
 
-msgid "[ID] {0}"
+msgid "moved"
 msgstr ""
 
-msgid "[gap]"
+msgid "added"
 msgstr ""
 
-msgid "Route patterns ..."
+msgid "Public Transport: Enable GTFSStops"
 msgstr ""
 
-msgid "Edit Route patterns for public transport"
+msgid "Public Transport: Catch GTFS stops"
 msgstr ""
 
-msgid "Route Patterns"
+msgid "skipped"
 msgstr ""
 
-msgid "Overview"
+msgid "Public Transport: Disable GTFS"
 msgstr ""
 
-msgid "Itinerary"
+msgid "Public Transport: Join GTFS stops"
 msgstr ""
 
-msgid "Stops"
+msgid "Public Transport: Change stop type"
 msgstr ""
 
-msgid "Meta"
+msgid "Public Transport: Add track stop"
 msgstr ""
 
-msgid "Existing route patterns:"
+msgid "Public Transport: Delete track stop"
 msgstr ""
 
-msgid "Reflect"
+msgid "Public Transport: Detach track stop list"
 msgstr ""
 
-msgid "Required tags:"
+msgid "Public Transport: Edit track stop list"
 msgstr ""
 
-msgid "Common tags:"
+msgid "Public Transport: Relocate nodes in track stoplist"
 msgstr ""
 
-msgid "Additional tags:"
+msgid "Public Transport: sort track stop list"
 msgstr ""
 
-msgid "Add a new Tag"
+msgid "Public Transport: Suggest stops"
 msgstr ""
 
-msgid "Name/Id"
+msgid "Public Transport: Detach waypoints"
 msgstr ""
 
-msgid "Ref"
+msgid "Public Transport: Disable waypoints"
 msgstr ""
 
-msgid "Stops are possible on the"
+msgid "Public Transport: Enable waypoints"
 msgstr ""
 
-msgid "right hand side"
+msgid "Public Transport: Edit waypoint name"
 msgstr ""
 
-msgid "left hand side"
+msgid "rail"
 msgstr ""
 
-msgid "Maximum distance from route"
+msgid "Can''t parse a time from this string."
 msgstr ""
 
-msgid " [ID] {0}"
+msgid "Invalid value"
 msgstr ""
 
-msgid "Public Transport: Change stop type"
+msgid "Create Stops from GTFS"
 msgstr ""
 
-msgid "Create Stops from GPX ..."
+msgid "GTFS-Stops"
 msgstr ""
 
-msgid "Create Stops from a GPX file"
+msgid "Type of stops to add"
 msgstr ""
 
-msgid "Select GPX file"
+msgid "Time on your GPS device"
 msgstr ""
 
-msgid "The GPX file contained no tracks or waypoints."
+msgid "HH:MM:SS.sss"
 msgstr ""
 
-msgid "Create Stops from GPX"
+msgid "Time on your stopwatch"
 msgstr ""
 
-msgid "Tracks in this GPX file:"
+msgid "Time window"
 msgstr ""
 
-msgid "Detach"
+msgid "seconds"
 msgstr ""
 
-msgid "implicit"
+msgid "Move Threshold"
 msgstr ""
 
-msgid ""
-"The GPX file doesn''t contain valid trackpoints. Please use a GPX file that "
-"has trackpoints."
+msgid "Catch"
 msgstr ""
 
-msgid "GPX File Trouble"
+msgid "Join"
 msgstr ""
 
-msgid "unnamed"
+msgid "Create Stops from GPX"
 msgstr ""
 
-msgid "Public Transport: Add track stop"
+msgid "Tracks in this GPX file:"
 msgstr ""
 
-msgid "Public Transport: Delete track stop"
+msgid "Detach"
 msgstr ""
 
-msgid "Public Transport: Detach track stop list"
+msgid "implicit"
 msgstr ""
 
-msgid "Public Transport: Edit track stop list"
+msgid "State"
 msgstr ""
 
-msgid "Public Transport: Relocate nodes in track stoplist"
+msgid "[incomplete]"
 msgstr ""
 
-msgid "Public Transport: sort track stop list"
+msgid "[empty way]"
 msgstr ""
 
-msgid "Public Transport: Suggest stops"
+msgid "[gap]"
 msgstr ""
 
 msgid "Stopname"
 msgstr ""
 
-msgid "Public Transport: Detach waypoints"
+msgid " [ID] {0}"
 msgstr ""
 
-msgid "Public Transport: Disable waypoints"
+msgid ""
+"The GPX file doesn''t contain valid trackpoints. Please use a GPX file that "
+"has trackpoints."
 msgstr ""
 
-msgid "Public Transport: Enable waypoints"
+msgid "GPX File Trouble"
 msgstr ""
 
-msgid "Public Transport: Edit waypoint name"
+msgid "unnamed"
 msgstr ""
 
 msgid "Distance between stops"
@@ -33711,6 +33792,9 @@ msgstr ""
 msgid "JOSM Tag Editor Plugin"
 msgstr ""
 
+msgid "Presets"
+msgstr ""
+
 msgid "Abort tag editing and close dialog"
 msgstr ""
 
@@ -35636,6 +35720,26 @@ msgid_plural "Overwrite ''{0}'' tags {1} from {2} with new value ''{3}''?"
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Download from Sophox API"
+msgstr ""
+
+msgid ""
+"Find places of education at least 2km, and at most 3km from the center of "
+"the selection"
+msgstr ""
+
+msgid "Show/hide Sophox snippet list"
+msgstr ""
+
+msgid "help"
+msgstr ""
+
+msgid "Server: "
+msgstr ""
+
+msgid "Wikidata+OSM server"
+msgstr ""
+
 msgid "Search Wikidata items"
 msgstr ""
 
@@ -35709,26 +35813,6 @@ msgid ""
 "objects"
 msgstr ""
 
-msgid "Download from Wikosm API"
-msgstr ""
-
-msgid ""
-"Find places of education at least 2km, and at most 3km from the center of "
-"the selection"
-msgstr ""
-
-msgid "Show/hide Wikosm snippet list"
-msgstr ""
-
-msgid "help"
-msgstr ""
-
-msgid "Server: "
-msgstr ""
-
-msgid "Wikidata+OSM server"
-msgstr ""
-
 msgid "The Ultimate WMS Super-speed Turbo Challenge II"
 msgstr ""
 
diff --git a/i18n/po/sv.po b/i18n/po/sv.po
index 22a9631..dde0fb3 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-10-30 03:38+0100\n"
-"PO-Revision-Date: 2017-10-09 11:53+0000\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"
 "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-10-30 05:02+0000\n"
-"X-Generator: Launchpad (build 18493)\n"
+"X-Launchpad-Export-Date: 2017-11-26 05:04+0000\n"
+"X-Generator: Launchpad (build 18509)\n"
 "Language: sv\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -446,12 +446,15 @@ msgstr "Radera lager"
 msgid "Delete the active layer. Does not delete the associated file."
 msgstr "Radera det aktiva lagret. Detta raderar inte den associerade filen."
 
-msgid "Toggle dialogs panel"
-msgstr "Växla dialogpanelen"
+msgid "Dialogs panel"
+msgstr ""
 
 msgid "Toggle dialogs panel, maximize mapview"
 msgstr "Växla dialogpanelen, maximera kartvyn"
 
+msgid "Toggle dialogs panel"
+msgstr "Växla dialogpanelen"
+
 msgid "Distribute Nodes"
 msgstr "Distribuera noder"
 
@@ -6829,6 +6832,9 @@ msgstr "Koordinater: "
 msgid "Coordinates (projected): "
 msgstr ""
 
+msgid "UTM Zone"
+msgstr ""
+
 msgid "Part of: "
 msgstr "Del av: "
 
@@ -8603,7 +8609,7 @@ msgid ""
 msgstr ""
 
 msgid "Zoom to downloaded data"
-msgstr ""
+msgstr "Zooma till nedladdat data"
 
 msgid "Select to zoom to entire newly downloaded data."
 msgstr ""
@@ -9184,6 +9190,11 @@ msgstr ""
 msgid "Check \"Save\" to save the layer to the file specified on the left."
 msgstr ""
 
+msgid ""
+"A background upload is already in progress. Kindly wait for it to finish "
+"before uploading new changes"
+msgstr ""
+
 msgid "I would like someone to review my edits."
 msgstr ""
 
@@ -10327,6 +10338,9 @@ msgstr ""
 msgid "Save Layer"
 msgstr "Spara Lager"
 
+msgid "Trying to set a read only data layer as edit layer"
+msgstr ""
+
 msgid "{0} note"
 msgid_plural "{0} notes"
 msgstr[0] "{0} anteckning"
@@ -11187,11 +11201,6 @@ msgstr ""
 msgid "Failed to parse Mappaint styles from ''{0}''. Error was: {1}"
 msgstr ""
 
-msgid ""
-"Detected deprecated ''{0}'' in ''{1}'' which will be removed shortly. Use "
-"''{2}'' instead."
-msgstr ""
-
 msgid "Failed to locate image ''{0}''"
 msgstr ""
 
@@ -12394,6 +12403,9 @@ msgstr "Visa startbild vid uppstart"
 msgid "Show object ID in selection lists"
 msgstr "Visa objektens ID i urvalslistor"
 
+msgid "Show node coordinates in selection lists"
+msgstr ""
+
 msgid "Show localized name in selection lists"
 msgstr ""
 
@@ -13164,9 +13176,6 @@ msgstr ""
 msgid "UTM"
 msgstr ""
 
-msgid "UTM Zone"
-msgstr ""
-
 msgid "North"
 msgstr "Nord"
 
@@ -13642,9 +13651,6 @@ msgstr ""
 msgid "Error parsing {0}: "
 msgstr "Fel vid tolkning {0}: "
 
-msgid "Presets"
-msgstr "Snabbval"
-
 msgid "Search for objects by preset..."
 msgstr "Sök objekt efter snabbval..."
 
@@ -16285,6 +16291,18 @@ msgstr ""
 msgid "korean"
 msgstr ""
 
+msgid "donut"
+msgstr ""
+
+msgid "mediterranean"
+msgstr ""
+
+msgid "friture"
+msgstr ""
+
+msgid "crepe"
+msgstr ""
+
 msgid "Internet access"
 msgstr "Internetåtkomst"
 
@@ -19139,8 +19157,17 @@ msgstr "Elplatser"
 msgid "Tents allowed"
 msgstr "Tält tillåtna"
 
-msgid "Camping Site"
-msgstr "Campingplats"
+msgid "Campsite"
+msgstr ""
+
+msgid "Caravans allowed"
+msgstr ""
+
+msgid "Backcountry"
+msgstr ""
+
+msgid "Group only access"
+msgstr ""
 
 msgid "Food+Drinks"
 msgstr "Mat+Dryck"
@@ -23981,6 +24008,14 @@ msgid ""
 "resolution or better, and refreshed more frequently with ongoing updates."
 msgstr ""
 
+msgid "DigitalGlobe Premium Imagery Vintage"
+msgstr ""
+
+msgid ""
+"Imagery boundaries and capture dates. Labels appear at zoom level 14 and "
+"higher."
+msgstr ""
+
 msgid "DigitalGlobe Standard Imagery"
 msgstr ""
 
@@ -23990,6 +24025,9 @@ msgid ""
 "Landsat. Average age is 2.31 years, with some areas updated 2x per year."
 msgstr ""
 
+msgid "DigitalGlobe Standard Imagery Vintage"
+msgstr ""
+
 msgid "Esri World Imagery"
 msgstr ""
 
@@ -24053,6 +24091,12 @@ msgstr ""
 msgid "Strava cycling and running heatmap"
 msgstr ""
 
+msgid "Strava water sports heatmap"
+msgstr ""
+
+msgid "Strava winter sports heatmap"
+msgstr ""
+
 msgid "Locator Overlay"
 msgstr ""
 
@@ -24457,6 +24501,9 @@ msgstr ""
 msgid "SPW(allonie) most recent aerial imagery"
 msgstr ""
 
+msgid "SPW(allonie) 2016 aerial imagery"
+msgstr ""
+
 msgid "SPW(allonie) 2015 aerial imagery"
 msgstr ""
 
@@ -24502,6 +24549,14 @@ msgstr ""
 msgid "Addresses data from IBGE"
 msgstr ""
 
+msgid "Street names IBGE Salvador-BA"
+msgstr ""
+
+msgid ""
+"Streets geometry and names of Salvador, Bahia. Source: Faces de Logradouro - "
+"IBGE."
+msgstr ""
+
 msgid "Rio Mosaic 2013"
 msgstr ""
 
@@ -25232,6 +25287,9 @@ msgstr ""
 msgid "Japan GSI ortho Imagery"
 msgstr ""
 
+msgid "Japan GSI Standard Map"
+msgstr ""
+
 msgid "imagico.de OSM images for mapping: Aral Sea (low water level)"
 msgstr ""
 
@@ -25261,7 +25319,7 @@ msgstr ""
 msgid "20cm ortho - Latvia - Coastline"
 msgstr ""
 
-msgid "1.cikla ortofotokarte - Latvia"
+msgid "Orthophoto 1st cycle (1994-1999) - Latvia"
 msgstr ""
 
 msgid "ORT10LT (Lithuania)"
@@ -25270,6 +25328,9 @@ msgstr ""
 msgid "geoportail.lu all layers"
 msgstr ""
 
+msgid "geoportail.lu ortho latest"
+msgstr ""
+
 msgid "geoportail.lu ortho 2016"
 msgstr ""
 
@@ -26760,6 +26821,9 @@ msgstr ""
 msgid "{0} on a node. Should be used on a way."
 msgstr ""
 
+msgid "{0} on a node. Should be used on a way or relation."
+msgstr ""
+
 msgid "{0} on a node. Should be drawn as an area."
 msgstr ""
 
@@ -26989,6 +27053,9 @@ msgstr ""
 msgid "Nodes duplicating parent way tags"
 msgstr ""
 
+msgid "{0} together with {1} and {2}. Remove {0}."
+msgstr ""
+
 msgid ""
 "wikipedia tag has no language given, use ''wikipedia''=''language:page "
 "title''"
@@ -27765,6 +27832,21 @@ msgstr "Skickar in spår till openstreetmap.org"
 msgid "Importing..."
 msgstr "Importerar..."
 
+msgid "Shape is started incorrectly"
+msgstr ""
+
+msgid "Can''t load SVG diagram"
+msgstr ""
+
+msgid "Can''t find root SVG element"
+msgstr ""
+
+msgid "Import primitives"
+msgstr ""
+
+msgid "Cannot find configuration file!"
+msgstr ""
+
 msgid "DXF files [ImportDxf plugin] (*.dxf)"
 msgstr ""
 
@@ -28404,6 +28486,9 @@ msgstr ""
 msgid "Download mode"
 msgstr ""
 
+msgid "Number of images to be pre-fetched (forwards and backwards)"
+msgstr ""
+
 msgid "You are logged in as ''{0}''."
 msgstr ""
 
@@ -28614,8 +28699,17 @@ msgid "only when manually requested"
 msgstr ""
 
 msgid ""
-"The downloaded OSM area is too big. Download mode has been changed to OSM "
-"area until the layer is restarted."
+"The Mapillary layer has stopped downloading images, because the requested "
+"area is too big!"
+msgstr ""
+
+msgid ""
+"To solve this problem, you could zoom in and load a smaller area of the map."
+msgstr ""
+
+msgid ""
+"To solve this problem, you could switch to download mode ''{0}'' and load "
+"Mapillary images for a smaller portion of the map."
 msgstr ""
 
 msgid "Downloading"
@@ -31955,23 +32049,6 @@ msgstr "Slå ihop överlappade vägar"
 msgid "Merge Overlap (combine)"
 msgstr "Slå ihop överlappade (kombinera)"
 
-msgid ""
-"<html>A role based relation membership was copied to all new ways.<br>You "
-"should verify this and correct it when necessary.</html>"
-msgstr ""
-"<html>Ett rollbaserat relationsmedlemskap kopierades till alla nya "
-"sträckor.<br>Du bör kontrollera detta och rätta om nödvändigt.</html>"
-
-msgid ""
-"<html>A relation membership was copied to all new ways.<br>You should verify "
-"this and correct it when necessary.</html>"
-msgstr ""
-"<html>Ett relationsmedlemskap kopierades till alla nya sträckor.<br>Du bör "
-"kontrollera detta och rätta om nödvändigt.</html>"
-
-msgid "Split way"
-msgstr "Dela sträcka"
-
 msgid "Michigan Left"
 msgstr ""
 
@@ -33432,33 +33509,6 @@ msgstr ""
 msgid "PT: Route passes a oneway road in the wrong direction"
 msgstr ""
 
-msgid "moved"
-msgstr ""
-
-msgid "rail"
-msgstr "räls"
-
-msgid "Can''t parse a time from this string."
-msgstr ""
-
-msgid "Invalid value"
-msgstr ""
-
-msgid "added"
-msgstr ""
-
-msgid "Public Transport: Enable GTFSStops"
-msgstr ""
-
-msgid "Public Transport: Catch GTFS stops"
-msgstr ""
-
-msgid "skipped"
-msgstr ""
-
-msgid "Public Transport: Disable GTFS"
-msgstr ""
-
 msgid "Create Stops from GTFS ..."
 msgstr ""
 
@@ -33485,36 +33535,51 @@ msgstr ""
 msgid "The GTFS file was empty."
 msgstr ""
 
-msgid "Create Stops from GTFS"
+msgid "[ID] {0}"
 msgstr ""
 
-msgid "GTFS-Stops"
+msgid "Route patterns ..."
+msgstr "Ruttmönster..."
+
+msgid "Edit Route patterns for public transport"
+msgstr "Redigera ruttmönster för kollektivtrafik"
+
+msgid "Route Patterns"
 msgstr ""
 
-msgid "Type of stops to add"
+msgid "Overview"
 msgstr ""
 
-msgid "Time on your GPS device"
+msgid "Itinerary"
 msgstr ""
 
-msgid "HH:MM:SS.sss"
+msgid "Stops"
 msgstr ""
 
-msgid "Time on your stopwatch"
+msgid "Meta"
 msgstr ""
 
-msgid "Time window"
+msgid "Existing route patterns:"
 msgstr ""
 
-msgid "seconds"
+msgid "Reflect"
 msgstr ""
 
-msgid "Move Threshold"
+msgid "Required tags:"
 msgstr ""
 
-msgid "Suggest Stops"
+msgid "Common tags:"
+msgstr ""
+
+msgid "Additional tags:"
 msgstr ""
 
+msgid "Add a new Tag"
+msgstr ""
+
+msgid "Name/Id"
+msgstr "Namn/Id"
+
 msgid "Find"
 msgstr ""
 
@@ -33524,164 +33589,176 @@ msgstr "Visa"
 msgid "Mark"
 msgstr ""
 
-msgid "Catch"
+msgid "Ref"
 msgstr ""
 
-msgid "Join"
+msgid "Stops are possible on the"
 msgstr ""
 
-msgid "Public Transport: Join GTFS stops"
+msgid "right hand side"
 msgstr ""
 
-msgid "State"
-msgstr "Delstat"
+msgid "left hand side"
+msgstr ""
 
-msgid "[incomplete]"
+msgid "Maximum distance from route"
 msgstr ""
 
-msgid "[empty way]"
+msgid "Suggest Stops"
 msgstr ""
 
-msgid "[ID] {0}"
+msgid "Create Stops from GPX ..."
 msgstr ""
 
-msgid "[gap]"
+msgid "Create Stops from a GPX file"
 msgstr ""
 
-msgid "Route patterns ..."
-msgstr "Ruttmönster..."
+msgid "Select GPX file"
+msgstr ""
 
-msgid "Edit Route patterns for public transport"
-msgstr "Redigera ruttmönster för kollektivtrafik"
+msgid "The GPX file contained no tracks or waypoints."
+msgstr "GPX-filen innehåll inga spår eller waypoints"
 
-msgid "Route Patterns"
+msgid "moved"
 msgstr ""
 
-msgid "Overview"
+msgid "added"
 msgstr ""
 
-msgid "Itinerary"
+msgid "Public Transport: Enable GTFSStops"
 msgstr ""
 
-msgid "Stops"
+msgid "Public Transport: Catch GTFS stops"
 msgstr ""
 
-msgid "Meta"
+msgid "skipped"
 msgstr ""
 
-msgid "Existing route patterns:"
+msgid "Public Transport: Disable GTFS"
 msgstr ""
 
-msgid "Reflect"
+msgid "Public Transport: Join GTFS stops"
 msgstr ""
 
-msgid "Required tags:"
+msgid "Public Transport: Change stop type"
 msgstr ""
 
-msgid "Common tags:"
+msgid "Public Transport: Add track stop"
 msgstr ""
 
-msgid "Additional tags:"
+msgid "Public Transport: Delete track stop"
 msgstr ""
 
-msgid "Add a new Tag"
+msgid "Public Transport: Detach track stop list"
 msgstr ""
 
-msgid "Name/Id"
-msgstr "Namn/Id"
+msgid "Public Transport: Edit track stop list"
+msgstr ""
 
-msgid "Ref"
+msgid "Public Transport: Relocate nodes in track stoplist"
 msgstr ""
 
-msgid "Stops are possible on the"
+msgid "Public Transport: sort track stop list"
 msgstr ""
 
-msgid "right hand side"
+msgid "Public Transport: Suggest stops"
 msgstr ""
 
-msgid "left hand side"
+msgid "Public Transport: Detach waypoints"
 msgstr ""
 
-msgid "Maximum distance from route"
+msgid "Public Transport: Disable waypoints"
 msgstr ""
 
-msgid " [ID] {0}"
+msgid "Public Transport: Enable waypoints"
 msgstr ""
 
-msgid "Public Transport: Change stop type"
+msgid "Public Transport: Edit waypoint name"
 msgstr ""
 
-msgid "Create Stops from GPX ..."
+msgid "rail"
+msgstr "räls"
+
+msgid "Can''t parse a time from this string."
 msgstr ""
 
-msgid "Create Stops from a GPX file"
+msgid "Invalid value"
 msgstr ""
 
-msgid "Select GPX file"
+msgid "Create Stops from GTFS"
 msgstr ""
 
-msgid "The GPX file contained no tracks or waypoints."
-msgstr "GPX-filen innehåll inga spår eller waypoints"
+msgid "GTFS-Stops"
+msgstr ""
 
-msgid "Create Stops from GPX"
+msgid "Type of stops to add"
 msgstr ""
 
-msgid "Tracks in this GPX file:"
-msgstr "Spår i denna GPX-fil:"
+msgid "Time on your GPS device"
+msgstr ""
 
-msgid "Detach"
+msgid "HH:MM:SS.sss"
 msgstr ""
 
-msgid "implicit"
+msgid "Time on your stopwatch"
 msgstr ""
 
-msgid ""
-"The GPX file doesn''t contain valid trackpoints. Please use a GPX file that "
-"has trackpoints."
+msgid "Time window"
 msgstr ""
 
-msgid "GPX File Trouble"
+msgid "seconds"
 msgstr ""
 
-msgid "unnamed"
-msgstr "namnlös"
+msgid "Move Threshold"
+msgstr ""
 
-msgid "Public Transport: Add track stop"
+msgid "Catch"
 msgstr ""
 
-msgid "Public Transport: Delete track stop"
+msgid "Join"
 msgstr ""
 
-msgid "Public Transport: Detach track stop list"
+msgid "Create Stops from GPX"
 msgstr ""
 
-msgid "Public Transport: Edit track stop list"
+msgid "Tracks in this GPX file:"
+msgstr "Spår i denna GPX-fil:"
+
+msgid "Detach"
 msgstr ""
 
-msgid "Public Transport: Relocate nodes in track stoplist"
+msgid "implicit"
 msgstr ""
 
-msgid "Public Transport: sort track stop list"
+msgid "State"
+msgstr "Delstat"
+
+msgid "[incomplete]"
 msgstr ""
 
-msgid "Public Transport: Suggest stops"
+msgid "[empty way]"
 msgstr ""
 
-msgid "Stopname"
+msgid "[gap]"
 msgstr ""
 
-msgid "Public Transport: Detach waypoints"
+msgid "Stopname"
 msgstr ""
 
-msgid "Public Transport: Disable waypoints"
+msgid " [ID] {0}"
 msgstr ""
 
-msgid "Public Transport: Enable waypoints"
+msgid ""
+"The GPX file doesn''t contain valid trackpoints. Please use a GPX file that "
+"has trackpoints."
 msgstr ""
 
-msgid "Public Transport: Edit waypoint name"
+msgid "GPX File Trouble"
 msgstr ""
 
+msgid "unnamed"
+msgstr "namnlös"
+
 msgid "Distance between stops"
 msgstr ""
 
@@ -34408,6 +34485,9 @@ msgstr ""
 msgid "JOSM Tag Editor Plugin"
 msgstr ""
 
+msgid "Presets"
+msgstr "Snabbval"
+
 msgid "Abort tag editing and close dialog"
 msgstr ""
 
@@ -36346,6 +36426,26 @@ msgid_plural "Overwrite ''{0}'' tags {1} from {2} with new value ''{3}''?"
 msgstr[0] "Skriv över''{0}'' tagg {1} från {2} med nya värdet ''{3}''?"
 msgstr[1] "Skriv över''{0}'' taggar {1} från {2} med nya värdet ''{3}''?"
 
+msgid "Download from Sophox API"
+msgstr ""
+
+msgid ""
+"Find places of education at least 2km, and at most 3km from the center of "
+"the selection"
+msgstr ""
+
+msgid "Show/hide Sophox snippet list"
+msgstr ""
+
+msgid "help"
+msgstr ""
+
+msgid "Server: "
+msgstr ""
+
+msgid "Wikidata+OSM server"
+msgstr ""
+
 msgid "Search Wikidata items"
 msgstr "Sök Wikidata"
 
@@ -36423,26 +36523,6 @@ msgstr ""
 "Lägger till en ''wikipedia'' tagg till de valda objekten angående denna "
 "artikel"
 
-msgid "Download from Wikosm API"
-msgstr ""
-
-msgid ""
-"Find places of education at least 2km, and at most 3km from the center of "
-"the selection"
-msgstr ""
-
-msgid "Show/hide Wikosm snippet list"
-msgstr ""
-
-msgid "help"
-msgstr ""
-
-msgid "Server: "
-msgstr ""
-
-msgid "Wikidata+OSM server"
-msgstr ""
-
 msgid "The Ultimate WMS Super-speed Turbo Challenge II"
 msgstr "Den ultimata WMS Supersnabba Turbo Utmaningen II"
 
diff --git a/i18n/po/ta.po b/i18n/po/ta.po
index 18ba073..ddde051 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-10-30 03:38+0100\n"
+"POT-Creation-Date: 2017-11-26 00:06+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-10-30 05:03+0000\n"
-"X-Generator: Launchpad (build 18493)\n"
+"X-Launchpad-Export-Date: 2017-11-26 05:05+0000\n"
+"X-Generator: Launchpad (build 18509)\n"
 "X-Poedit-Country: INDIA\n"
 "Language: ta\n"
 "X-Poedit-Language: Tamil\n"
@@ -429,12 +429,15 @@ msgstr "அடுக்கை நீக்கு"
 msgid "Delete the active layer. Does not delete the associated file."
 msgstr ""
 
-msgid "Toggle dialogs panel"
+msgid "Dialogs panel"
 msgstr ""
 
 msgid "Toggle dialogs panel, maximize mapview"
 msgstr ""
 
+msgid "Toggle dialogs panel"
+msgstr ""
+
 msgid "Distribute Nodes"
 msgstr ""
 
@@ -6524,6 +6527,9 @@ msgstr ""
 msgid "Coordinates (projected): "
 msgstr ""
 
+msgid "UTM Zone"
+msgstr "UTM Zone"
+
 msgid "Part of: "
 msgstr ""
 
@@ -8823,6 +8829,11 @@ msgstr ""
 msgid "Check \"Save\" to save the layer to the file specified on the left."
 msgstr ""
 
+msgid ""
+"A background upload is already in progress. Kindly wait for it to finish "
+"before uploading new changes"
+msgstr ""
+
 msgid "I would like someone to review my edits."
 msgstr ""
 
@@ -9931,6 +9942,9 @@ msgstr ""
 msgid "Save Layer"
 msgstr "அடுக்கைக் காக்க்"
 
+msgid "Trying to set a read only data layer as edit layer"
+msgstr ""
+
 msgid "{0} note"
 msgid_plural "{0} notes"
 msgstr[0] ""
@@ -10763,11 +10777,6 @@ msgstr ""
 msgid "Failed to parse Mappaint styles from ''{0}''. Error was: {1}"
 msgstr ""
 
-msgid ""
-"Detected deprecated ''{0}'' in ''{1}'' which will be removed shortly. Use "
-"''{2}'' instead."
-msgstr ""
-
 msgid "Failed to locate image ''{0}''"
 msgstr ""
 
@@ -11932,6 +11941,9 @@ msgstr ""
 msgid "Show object ID in selection lists"
 msgstr ""
 
+msgid "Show node coordinates in selection lists"
+msgstr ""
+
 msgid "Show localized name in selection lists"
 msgstr ""
 
@@ -12688,9 +12700,6 @@ msgstr ""
 msgid "UTM"
 msgstr "UTM"
 
-msgid "UTM Zone"
-msgstr "UTM Zone"
-
 msgid "North"
 msgstr ""
 
@@ -13158,9 +13167,6 @@ msgstr ""
 msgid "Error parsing {0}: "
 msgstr ""
 
-msgid "Presets"
-msgstr ""
-
 msgid "Search for objects by preset..."
 msgstr ""
 
@@ -15702,6 +15708,18 @@ msgstr ""
 msgid "korean"
 msgstr ""
 
+msgid "donut"
+msgstr ""
+
+msgid "mediterranean"
+msgstr ""
+
+msgid "friture"
+msgstr ""
+
+msgid "crepe"
+msgstr ""
+
 msgid "Internet access"
 msgstr ""
 
@@ -18544,7 +18562,16 @@ msgstr ""
 msgid "Tents allowed"
 msgstr ""
 
-msgid "Camping Site"
+msgid "Campsite"
+msgstr ""
+
+msgid "Caravans allowed"
+msgstr ""
+
+msgid "Backcountry"
+msgstr ""
+
+msgid "Group only access"
 msgstr ""
 
 msgid "Food+Drinks"
@@ -23373,6 +23400,14 @@ msgid ""
 "resolution or better, and refreshed more frequently with ongoing updates."
 msgstr ""
 
+msgid "DigitalGlobe Premium Imagery Vintage"
+msgstr ""
+
+msgid ""
+"Imagery boundaries and capture dates. Labels appear at zoom level 14 and "
+"higher."
+msgstr ""
+
 msgid "DigitalGlobe Standard Imagery"
 msgstr ""
 
@@ -23382,6 +23417,9 @@ msgid ""
 "Landsat. Average age is 2.31 years, with some areas updated 2x per year."
 msgstr ""
 
+msgid "DigitalGlobe Standard Imagery Vintage"
+msgstr ""
+
 msgid "Esri World Imagery"
 msgstr ""
 
@@ -23445,6 +23483,12 @@ msgstr ""
 msgid "Strava cycling and running heatmap"
 msgstr ""
 
+msgid "Strava water sports heatmap"
+msgstr ""
+
+msgid "Strava winter sports heatmap"
+msgstr ""
+
 msgid "Locator Overlay"
 msgstr ""
 
@@ -23849,6 +23893,9 @@ msgstr ""
 msgid "SPW(allonie) most recent aerial imagery"
 msgstr ""
 
+msgid "SPW(allonie) 2016 aerial imagery"
+msgstr ""
+
 msgid "SPW(allonie) 2015 aerial imagery"
 msgstr ""
 
@@ -23894,6 +23941,14 @@ msgstr ""
 msgid "Addresses data from IBGE"
 msgstr ""
 
+msgid "Street names IBGE Salvador-BA"
+msgstr ""
+
+msgid ""
+"Streets geometry and names of Salvador, Bahia. Source: Faces de Logradouro - "
+"IBGE."
+msgstr ""
+
 msgid "Rio Mosaic 2013"
 msgstr ""
 
@@ -24624,6 +24679,9 @@ msgstr ""
 msgid "Japan GSI ortho Imagery"
 msgstr ""
 
+msgid "Japan GSI Standard Map"
+msgstr ""
+
 msgid "imagico.de OSM images for mapping: Aral Sea (low water level)"
 msgstr ""
 
@@ -24653,7 +24711,7 @@ msgstr ""
 msgid "20cm ortho - Latvia - Coastline"
 msgstr ""
 
-msgid "1.cikla ortofotokarte - Latvia"
+msgid "Orthophoto 1st cycle (1994-1999) - Latvia"
 msgstr ""
 
 msgid "ORT10LT (Lithuania)"
@@ -24662,6 +24720,9 @@ msgstr ""
 msgid "geoportail.lu all layers"
 msgstr ""
 
+msgid "geoportail.lu ortho latest"
+msgstr ""
+
 msgid "geoportail.lu ortho 2016"
 msgstr ""
 
@@ -26152,6 +26213,9 @@ msgstr ""
 msgid "{0} on a node. Should be used on a way."
 msgstr ""
 
+msgid "{0} on a node. Should be used on a way or relation."
+msgstr ""
+
 msgid "{0} on a node. Should be drawn as an area."
 msgstr ""
 
@@ -26379,6 +26443,9 @@ msgstr ""
 msgid "Nodes duplicating parent way tags"
 msgstr ""
 
+msgid "{0} together with {1} and {2}. Remove {0}."
+msgstr ""
+
 msgid ""
 "wikipedia tag has no language given, use ''wikipedia''=''language:page "
 "title''"
@@ -27143,6 +27210,21 @@ msgstr ""
 msgid "Importing..."
 msgstr ""
 
+msgid "Shape is started incorrectly"
+msgstr ""
+
+msgid "Can''t load SVG diagram"
+msgstr ""
+
+msgid "Can''t find root SVG element"
+msgstr ""
+
+msgid "Import primitives"
+msgstr ""
+
+msgid "Cannot find configuration file!"
+msgstr ""
+
 msgid "DXF files [ImportDxf plugin] (*.dxf)"
 msgstr ""
 
@@ -27782,6 +27864,9 @@ msgstr ""
 msgid "Download mode"
 msgstr ""
 
+msgid "Number of images to be pre-fetched (forwards and backwards)"
+msgstr ""
+
 msgid "You are logged in as ''{0}''."
 msgstr ""
 
@@ -27992,8 +28077,17 @@ msgid "only when manually requested"
 msgstr ""
 
 msgid ""
-"The downloaded OSM area is too big. Download mode has been changed to OSM "
-"area until the layer is restarted."
+"The Mapillary layer has stopped downloading images, because the requested "
+"area is too big!"
+msgstr ""
+
+msgid ""
+"To solve this problem, you could zoom in and load a smaller area of the map."
+msgstr ""
+
+msgid ""
+"To solve this problem, you could switch to download mode ''{0}'' and load "
+"Mapillary images for a smaller portion of the map."
 msgstr ""
 
 msgid "Downloading"
@@ -31305,25 +31399,6 @@ msgstr ""
 msgid "Merge Overlap (combine)"
 msgstr ""
 
-msgid ""
-"<html>A role based relation membership was copied to all new ways.<br>You "
-"should verify this and correct it when necessary.</html>"
-msgstr ""
-"<html>எல்லா புது வழிகளுக்கும் பங்கு அடிப்படைக் கொண்ட உறவு உறுப்பினர் "
-"நிலையொன்று நகலெடுக்கப்பட்டது<br>நீங்கள் சரிப்பார்த்து, தேவைப்படும்போது "
-"திருத்த வேண்டும்</html>"
-
-msgid ""
-"<html>A relation membership was copied to all new ways.<br>You should verify "
-"this and correct it when necessary.</html>"
-msgstr ""
-"<html>எல்லா புது வழிகளுக்கும்  உறவு உறுப்பினர் நிலையொன்று "
-"நகலெடுக்கப்பட்டது<br>நீங்கள் சரிப்பார்த்து, தேவைப்படும்போது திருத்த "
-"வேண்டும்</html>"
-
-msgid "Split way"
-msgstr ""
-
 msgid "Michigan Left"
 msgstr ""
 
@@ -32778,254 +32853,254 @@ msgstr ""
 msgid "PT: Route passes a oneway road in the wrong direction"
 msgstr ""
 
-msgid "moved"
+msgid "Create Stops from GTFS ..."
 msgstr ""
 
-msgid "rail"
+msgid "Create Stops from a GTFS file"
 msgstr ""
 
-msgid "Can''t parse a time from this string."
+msgid "Select GTFS file (stops.txt)"
 msgstr ""
 
-msgid "Invalid value"
+msgid "File \"{0}\" does not exist"
 msgstr ""
 
-msgid "added"
+msgid "IOException \"{0}\" occurred"
 msgstr ""
 
-msgid "Public Transport: Enable GTFSStops"
+msgid ""
+"There exists no dataset. Try to download data from the server or open an OSM "
+"file."
 msgstr ""
 
-msgid "Public Transport: Catch GTFS stops"
+msgid "No data found"
 msgstr ""
 
-msgid "skipped"
+msgid "The GTFS file was empty."
 msgstr ""
 
-msgid "Public Transport: Disable GTFS"
+msgid "[ID] {0}"
 msgstr ""
 
-msgid "Create Stops from GTFS ..."
+msgid "Route patterns ..."
 msgstr ""
 
-msgid "Create Stops from a GTFS file"
+msgid "Edit Route patterns for public transport"
 msgstr ""
 
-msgid "Select GTFS file (stops.txt)"
+msgid "Route Patterns"
 msgstr ""
 
-msgid "File \"{0}\" does not exist"
+msgid "Overview"
 msgstr ""
 
-msgid "IOException \"{0}\" occurred"
+msgid "Itinerary"
 msgstr ""
 
-msgid ""
-"There exists no dataset. Try to download data from the server or open an OSM "
-"file."
+msgid "Stops"
 msgstr ""
 
-msgid "No data found"
+msgid "Meta"
 msgstr ""
 
-msgid "The GTFS file was empty."
+msgid "Existing route patterns:"
 msgstr ""
 
-msgid "Create Stops from GTFS"
+msgid "Reflect"
 msgstr ""
 
-msgid "GTFS-Stops"
+msgid "Required tags:"
 msgstr ""
 
-msgid "Type of stops to add"
+msgid "Common tags:"
 msgstr ""
 
-msgid "Time on your GPS device"
+msgid "Additional tags:"
 msgstr ""
 
-msgid "HH:MM:SS.sss"
+msgid "Add a new Tag"
 msgstr ""
 
-msgid "Time on your stopwatch"
+msgid "Name/Id"
 msgstr ""
 
-msgid "Time window"
+msgid "Find"
 msgstr ""
 
-msgid "seconds"
+msgid "Show"
 msgstr ""
 
-msgid "Move Threshold"
+msgid "Mark"
 msgstr ""
 
-msgid "Suggest Stops"
+msgid "Ref"
 msgstr ""
 
-msgid "Find"
+msgid "Stops are possible on the"
 msgstr ""
 
-msgid "Show"
+msgid "right hand side"
 msgstr ""
 
-msgid "Mark"
+msgid "left hand side"
 msgstr ""
 
-msgid "Catch"
+msgid "Maximum distance from route"
 msgstr ""
 
-msgid "Join"
+msgid "Suggest Stops"
 msgstr ""
 
-msgid "Public Transport: Join GTFS stops"
+msgid "Create Stops from GPX ..."
 msgstr ""
 
-msgid "State"
+msgid "Create Stops from a GPX file"
 msgstr ""
 
-msgid "[incomplete]"
+msgid "Select GPX file"
 msgstr ""
 
-msgid "[empty way]"
+msgid "The GPX file contained no tracks or waypoints."
 msgstr ""
 
-msgid "[ID] {0}"
+msgid "moved"
 msgstr ""
 
-msgid "[gap]"
+msgid "added"
 msgstr ""
 
-msgid "Route patterns ..."
+msgid "Public Transport: Enable GTFSStops"
 msgstr ""
 
-msgid "Edit Route patterns for public transport"
+msgid "Public Transport: Catch GTFS stops"
 msgstr ""
 
-msgid "Route Patterns"
+msgid "skipped"
 msgstr ""
 
-msgid "Overview"
+msgid "Public Transport: Disable GTFS"
 msgstr ""
 
-msgid "Itinerary"
+msgid "Public Transport: Join GTFS stops"
 msgstr ""
 
-msgid "Stops"
+msgid "Public Transport: Change stop type"
 msgstr ""
 
-msgid "Meta"
+msgid "Public Transport: Add track stop"
 msgstr ""
 
-msgid "Existing route patterns:"
+msgid "Public Transport: Delete track stop"
 msgstr ""
 
-msgid "Reflect"
+msgid "Public Transport: Detach track stop list"
 msgstr ""
 
-msgid "Required tags:"
+msgid "Public Transport: Edit track stop list"
 msgstr ""
 
-msgid "Common tags:"
+msgid "Public Transport: Relocate nodes in track stoplist"
 msgstr ""
 
-msgid "Additional tags:"
+msgid "Public Transport: sort track stop list"
 msgstr ""
 
-msgid "Add a new Tag"
+msgid "Public Transport: Suggest stops"
 msgstr ""
 
-msgid "Name/Id"
+msgid "Public Transport: Detach waypoints"
 msgstr ""
 
-msgid "Ref"
+msgid "Public Transport: Disable waypoints"
 msgstr ""
 
-msgid "Stops are possible on the"
+msgid "Public Transport: Enable waypoints"
 msgstr ""
 
-msgid "right hand side"
+msgid "Public Transport: Edit waypoint name"
 msgstr ""
 
-msgid "left hand side"
+msgid "rail"
 msgstr ""
 
-msgid "Maximum distance from route"
+msgid "Can''t parse a time from this string."
 msgstr ""
 
-msgid " [ID] {0}"
+msgid "Invalid value"
 msgstr ""
 
-msgid "Public Transport: Change stop type"
+msgid "Create Stops from GTFS"
 msgstr ""
 
-msgid "Create Stops from GPX ..."
+msgid "GTFS-Stops"
 msgstr ""
 
-msgid "Create Stops from a GPX file"
+msgid "Type of stops to add"
 msgstr ""
 
-msgid "Select GPX file"
+msgid "Time on your GPS device"
 msgstr ""
 
-msgid "The GPX file contained no tracks or waypoints."
+msgid "HH:MM:SS.sss"
 msgstr ""
 
-msgid "Create Stops from GPX"
+msgid "Time on your stopwatch"
 msgstr ""
 
-msgid "Tracks in this GPX file:"
+msgid "Time window"
 msgstr ""
 
-msgid "Detach"
+msgid "seconds"
 msgstr ""
 
-msgid "implicit"
+msgid "Move Threshold"
 msgstr ""
 
-msgid ""
-"The GPX file doesn''t contain valid trackpoints. Please use a GPX file that "
-"has trackpoints."
+msgid "Catch"
 msgstr ""
 
-msgid "GPX File Trouble"
+msgid "Join"
 msgstr ""
 
-msgid "unnamed"
+msgid "Create Stops from GPX"
 msgstr ""
 
-msgid "Public Transport: Add track stop"
+msgid "Tracks in this GPX file:"
 msgstr ""
 
-msgid "Public Transport: Delete track stop"
+msgid "Detach"
 msgstr ""
 
-msgid "Public Transport: Detach track stop list"
+msgid "implicit"
 msgstr ""
 
-msgid "Public Transport: Edit track stop list"
+msgid "State"
 msgstr ""
 
-msgid "Public Transport: Relocate nodes in track stoplist"
+msgid "[incomplete]"
 msgstr ""
 
-msgid "Public Transport: sort track stop list"
+msgid "[empty way]"
 msgstr ""
 
-msgid "Public Transport: Suggest stops"
+msgid "[gap]"
 msgstr ""
 
 msgid "Stopname"
 msgstr ""
 
-msgid "Public Transport: Detach waypoints"
+msgid " [ID] {0}"
 msgstr ""
 
-msgid "Public Transport: Disable waypoints"
+msgid ""
+"The GPX file doesn''t contain valid trackpoints. Please use a GPX file that "
+"has trackpoints."
 msgstr ""
 
-msgid "Public Transport: Enable waypoints"
+msgid "GPX File Trouble"
 msgstr ""
 
-msgid "Public Transport: Edit waypoint name"
+msgid "unnamed"
 msgstr ""
 
 msgid "Distance between stops"
@@ -33754,6 +33829,9 @@ msgstr ""
 msgid "JOSM Tag Editor Plugin"
 msgstr ""
 
+msgid "Presets"
+msgstr ""
+
 msgid "Abort tag editing and close dialog"
 msgstr ""
 
@@ -35679,6 +35757,26 @@ msgid_plural "Overwrite ''{0}'' tags {1} from {2} with new value ''{3}''?"
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Download from Sophox API"
+msgstr ""
+
+msgid ""
+"Find places of education at least 2km, and at most 3km from the center of "
+"the selection"
+msgstr ""
+
+msgid "Show/hide Sophox snippet list"
+msgstr ""
+
+msgid "help"
+msgstr ""
+
+msgid "Server: "
+msgstr ""
+
+msgid "Wikidata+OSM server"
+msgstr ""
+
 msgid "Search Wikidata items"
 msgstr ""
 
@@ -35752,26 +35850,6 @@ msgid ""
 "objects"
 msgstr ""
 
-msgid "Download from Wikosm API"
-msgstr ""
-
-msgid ""
-"Find places of education at least 2km, and at most 3km from the center of "
-"the selection"
-msgstr ""
-
-msgid "Show/hide Wikosm snippet list"
-msgstr ""
-
-msgid "help"
-msgstr ""
-
-msgid "Server: "
-msgstr ""
-
-msgid "Wikidata+OSM server"
-msgstr ""
-
 msgid "The Ultimate WMS Super-speed Turbo Challenge II"
 msgstr ""
 
diff --git a/i18n/po/te.po b/i18n/po/te.po
index fe8140b..3772cc9 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-10-30 03:38+0100\n"
+"POT-Creation-Date: 2017-11-26 00:06+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-10-30 05:03+0000\n"
-"X-Generator: Launchpad (build 18493)\n"
+"X-Launchpad-Export-Date: 2017-11-26 05:05+0000\n"
+"X-Generator: Launchpad (build 18509)\n"
 "Language: te\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -421,12 +421,15 @@ msgstr ""
 msgid "Delete the active layer. Does not delete the associated file."
 msgstr ""
 
-msgid "Toggle dialogs panel"
+msgid "Dialogs panel"
 msgstr ""
 
 msgid "Toggle dialogs panel, maximize mapview"
 msgstr ""
 
+msgid "Toggle dialogs panel"
+msgstr ""
+
 msgid "Distribute Nodes"
 msgstr ""
 
@@ -6488,6 +6491,9 @@ msgstr ""
 msgid "Coordinates (projected): "
 msgstr ""
 
+msgid "UTM Zone"
+msgstr ""
+
 msgid "Part of: "
 msgstr ""
 
@@ -8786,6 +8792,11 @@ msgstr ""
 msgid "Check \"Save\" to save the layer to the file specified on the left."
 msgstr ""
 
+msgid ""
+"A background upload is already in progress. Kindly wait for it to finish "
+"before uploading new changes"
+msgstr ""
+
 msgid "I would like someone to review my edits."
 msgstr ""
 
@@ -9894,6 +9905,9 @@ msgstr ""
 msgid "Save Layer"
 msgstr ""
 
+msgid "Trying to set a read only data layer as edit layer"
+msgstr ""
+
 msgid "{0} note"
 msgid_plural "{0} notes"
 msgstr[0] ""
@@ -10724,11 +10738,6 @@ msgstr ""
 msgid "Failed to parse Mappaint styles from ''{0}''. Error was: {1}"
 msgstr ""
 
-msgid ""
-"Detected deprecated ''{0}'' in ''{1}'' which will be removed shortly. Use "
-"''{2}'' instead."
-msgstr ""
-
 msgid "Failed to locate image ''{0}''"
 msgstr ""
 
@@ -11893,6 +11902,9 @@ msgstr ""
 msgid "Show object ID in selection lists"
 msgstr ""
 
+msgid "Show node coordinates in selection lists"
+msgstr ""
+
 msgid "Show localized name in selection lists"
 msgstr ""
 
@@ -12649,9 +12661,6 @@ msgstr ""
 msgid "UTM"
 msgstr ""
 
-msgid "UTM Zone"
-msgstr ""
-
 msgid "North"
 msgstr ""
 
@@ -13119,9 +13128,6 @@ msgstr ""
 msgid "Error parsing {0}: "
 msgstr ""
 
-msgid "Presets"
-msgstr ""
-
 msgid "Search for objects by preset..."
 msgstr ""
 
@@ -15663,6 +15669,18 @@ msgstr ""
 msgid "korean"
 msgstr ""
 
+msgid "donut"
+msgstr ""
+
+msgid "mediterranean"
+msgstr ""
+
+msgid "friture"
+msgstr ""
+
+msgid "crepe"
+msgstr ""
+
 msgid "Internet access"
 msgstr ""
 
@@ -18505,7 +18523,16 @@ msgstr ""
 msgid "Tents allowed"
 msgstr ""
 
-msgid "Camping Site"
+msgid "Campsite"
+msgstr ""
+
+msgid "Caravans allowed"
+msgstr ""
+
+msgid "Backcountry"
+msgstr ""
+
+msgid "Group only access"
 msgstr ""
 
 msgid "Food+Drinks"
@@ -23334,6 +23361,14 @@ msgid ""
 "resolution or better, and refreshed more frequently with ongoing updates."
 msgstr ""
 
+msgid "DigitalGlobe Premium Imagery Vintage"
+msgstr ""
+
+msgid ""
+"Imagery boundaries and capture dates. Labels appear at zoom level 14 and "
+"higher."
+msgstr ""
+
 msgid "DigitalGlobe Standard Imagery"
 msgstr ""
 
@@ -23343,6 +23378,9 @@ msgid ""
 "Landsat. Average age is 2.31 years, with some areas updated 2x per year."
 msgstr ""
 
+msgid "DigitalGlobe Standard Imagery Vintage"
+msgstr ""
+
 msgid "Esri World Imagery"
 msgstr ""
 
@@ -23406,6 +23444,12 @@ msgstr ""
 msgid "Strava cycling and running heatmap"
 msgstr ""
 
+msgid "Strava water sports heatmap"
+msgstr ""
+
+msgid "Strava winter sports heatmap"
+msgstr ""
+
 msgid "Locator Overlay"
 msgstr ""
 
@@ -23810,6 +23854,9 @@ msgstr ""
 msgid "SPW(allonie) most recent aerial imagery"
 msgstr ""
 
+msgid "SPW(allonie) 2016 aerial imagery"
+msgstr ""
+
 msgid "SPW(allonie) 2015 aerial imagery"
 msgstr ""
 
@@ -23855,6 +23902,14 @@ msgstr ""
 msgid "Addresses data from IBGE"
 msgstr ""
 
+msgid "Street names IBGE Salvador-BA"
+msgstr ""
+
+msgid ""
+"Streets geometry and names of Salvador, Bahia. Source: Faces de Logradouro - "
+"IBGE."
+msgstr ""
+
 msgid "Rio Mosaic 2013"
 msgstr ""
 
@@ -24585,6 +24640,9 @@ msgstr ""
 msgid "Japan GSI ortho Imagery"
 msgstr ""
 
+msgid "Japan GSI Standard Map"
+msgstr ""
+
 msgid "imagico.de OSM images for mapping: Aral Sea (low water level)"
 msgstr ""
 
@@ -24614,7 +24672,7 @@ msgstr ""
 msgid "20cm ortho - Latvia - Coastline"
 msgstr ""
 
-msgid "1.cikla ortofotokarte - Latvia"
+msgid "Orthophoto 1st cycle (1994-1999) - Latvia"
 msgstr ""
 
 msgid "ORT10LT (Lithuania)"
@@ -24623,6 +24681,9 @@ msgstr ""
 msgid "geoportail.lu all layers"
 msgstr ""
 
+msgid "geoportail.lu ortho latest"
+msgstr ""
+
 msgid "geoportail.lu ortho 2016"
 msgstr ""
 
@@ -26113,6 +26174,9 @@ msgstr ""
 msgid "{0} on a node. Should be used on a way."
 msgstr ""
 
+msgid "{0} on a node. Should be used on a way or relation."
+msgstr ""
+
 msgid "{0} on a node. Should be drawn as an area."
 msgstr ""
 
@@ -26340,6 +26404,9 @@ msgstr ""
 msgid "Nodes duplicating parent way tags"
 msgstr ""
 
+msgid "{0} together with {1} and {2}. Remove {0}."
+msgstr ""
+
 msgid ""
 "wikipedia tag has no language given, use ''wikipedia''=''language:page "
 "title''"
@@ -27104,6 +27171,21 @@ msgstr ""
 msgid "Importing..."
 msgstr ""
 
+msgid "Shape is started incorrectly"
+msgstr ""
+
+msgid "Can''t load SVG diagram"
+msgstr ""
+
+msgid "Can''t find root SVG element"
+msgstr ""
+
+msgid "Import primitives"
+msgstr ""
+
+msgid "Cannot find configuration file!"
+msgstr ""
+
 msgid "DXF files [ImportDxf plugin] (*.dxf)"
 msgstr ""
 
@@ -27743,6 +27825,9 @@ msgstr ""
 msgid "Download mode"
 msgstr ""
 
+msgid "Number of images to be pre-fetched (forwards and backwards)"
+msgstr ""
+
 msgid "You are logged in as ''{0}''."
 msgstr ""
 
@@ -27953,8 +28038,17 @@ msgid "only when manually requested"
 msgstr ""
 
 msgid ""
-"The downloaded OSM area is too big. Download mode has been changed to OSM "
-"area until the layer is restarted."
+"The Mapillary layer has stopped downloading images, because the requested "
+"area is too big!"
+msgstr ""
+
+msgid ""
+"To solve this problem, you could zoom in and load a smaller area of the map."
+msgstr ""
+
+msgid ""
+"To solve this problem, you could switch to download mode ''{0}'' and load "
+"Mapillary images for a smaller portion of the map."
 msgstr ""
 
 msgid "Downloading"
@@ -31266,19 +31360,6 @@ msgstr ""
 msgid "Merge Overlap (combine)"
 msgstr ""
 
-msgid ""
-"<html>A role based relation membership was copied to all new ways.<br>You "
-"should verify this and correct it when necessary.</html>"
-msgstr ""
-
-msgid ""
-"<html>A relation membership was copied to all new ways.<br>You should verify "
-"this and correct it when necessary.</html>"
-msgstr ""
-
-msgid "Split way"
-msgstr ""
-
 msgid "Michigan Left"
 msgstr ""
 
@@ -32733,254 +32814,254 @@ msgstr ""
 msgid "PT: Route passes a oneway road in the wrong direction"
 msgstr ""
 
-msgid "moved"
+msgid "Create Stops from GTFS ..."
 msgstr ""
 
-msgid "rail"
+msgid "Create Stops from a GTFS file"
 msgstr ""
 
-msgid "Can''t parse a time from this string."
+msgid "Select GTFS file (stops.txt)"
 msgstr ""
 
-msgid "Invalid value"
+msgid "File \"{0}\" does not exist"
 msgstr ""
 
-msgid "added"
+msgid "IOException \"{0}\" occurred"
 msgstr ""
 
-msgid "Public Transport: Enable GTFSStops"
+msgid ""
+"There exists no dataset. Try to download data from the server or open an OSM "
+"file."
 msgstr ""
 
-msgid "Public Transport: Catch GTFS stops"
+msgid "No data found"
 msgstr ""
 
-msgid "skipped"
+msgid "The GTFS file was empty."
 msgstr ""
 
-msgid "Public Transport: Disable GTFS"
+msgid "[ID] {0}"
 msgstr ""
 
-msgid "Create Stops from GTFS ..."
+msgid "Route patterns ..."
 msgstr ""
 
-msgid "Create Stops from a GTFS file"
+msgid "Edit Route patterns for public transport"
 msgstr ""
 
-msgid "Select GTFS file (stops.txt)"
+msgid "Route Patterns"
 msgstr ""
 
-msgid "File \"{0}\" does not exist"
+msgid "Overview"
 msgstr ""
 
-msgid "IOException \"{0}\" occurred"
+msgid "Itinerary"
 msgstr ""
 
-msgid ""
-"There exists no dataset. Try to download data from the server or open an OSM "
-"file."
+msgid "Stops"
 msgstr ""
 
-msgid "No data found"
+msgid "Meta"
 msgstr ""
 
-msgid "The GTFS file was empty."
+msgid "Existing route patterns:"
 msgstr ""
 
-msgid "Create Stops from GTFS"
+msgid "Reflect"
 msgstr ""
 
-msgid "GTFS-Stops"
+msgid "Required tags:"
 msgstr ""
 
-msgid "Type of stops to add"
+msgid "Common tags:"
 msgstr ""
 
-msgid "Time on your GPS device"
+msgid "Additional tags:"
 msgstr ""
 
-msgid "HH:MM:SS.sss"
+msgid "Add a new Tag"
 msgstr ""
 
-msgid "Time on your stopwatch"
+msgid "Name/Id"
 msgstr ""
 
-msgid "Time window"
+msgid "Find"
 msgstr ""
 
-msgid "seconds"
+msgid "Show"
 msgstr ""
 
-msgid "Move Threshold"
+msgid "Mark"
 msgstr ""
 
-msgid "Suggest Stops"
+msgid "Ref"
 msgstr ""
 
-msgid "Find"
+msgid "Stops are possible on the"
 msgstr ""
 
-msgid "Show"
+msgid "right hand side"
 msgstr ""
 
-msgid "Mark"
+msgid "left hand side"
 msgstr ""
 
-msgid "Catch"
+msgid "Maximum distance from route"
 msgstr ""
 
-msgid "Join"
+msgid "Suggest Stops"
 msgstr ""
 
-msgid "Public Transport: Join GTFS stops"
+msgid "Create Stops from GPX ..."
 msgstr ""
 
-msgid "State"
+msgid "Create Stops from a GPX file"
 msgstr ""
 
-msgid "[incomplete]"
+msgid "Select GPX file"
 msgstr ""
 
-msgid "[empty way]"
+msgid "The GPX file contained no tracks or waypoints."
 msgstr ""
 
-msgid "[ID] {0}"
+msgid "moved"
 msgstr ""
 
-msgid "[gap]"
+msgid "added"
 msgstr ""
 
-msgid "Route patterns ..."
+msgid "Public Transport: Enable GTFSStops"
 msgstr ""
 
-msgid "Edit Route patterns for public transport"
+msgid "Public Transport: Catch GTFS stops"
 msgstr ""
 
-msgid "Route Patterns"
+msgid "skipped"
 msgstr ""
 
-msgid "Overview"
+msgid "Public Transport: Disable GTFS"
 msgstr ""
 
-msgid "Itinerary"
+msgid "Public Transport: Join GTFS stops"
 msgstr ""
 
-msgid "Stops"
+msgid "Public Transport: Change stop type"
 msgstr ""
 
-msgid "Meta"
+msgid "Public Transport: Add track stop"
 msgstr ""
 
-msgid "Existing route patterns:"
+msgid "Public Transport: Delete track stop"
 msgstr ""
 
-msgid "Reflect"
+msgid "Public Transport: Detach track stop list"
 msgstr ""
 
-msgid "Required tags:"
+msgid "Public Transport: Edit track stop list"
 msgstr ""
 
-msgid "Common tags:"
+msgid "Public Transport: Relocate nodes in track stoplist"
 msgstr ""
 
-msgid "Additional tags:"
+msgid "Public Transport: sort track stop list"
 msgstr ""
 
-msgid "Add a new Tag"
+msgid "Public Transport: Suggest stops"
 msgstr ""
 
-msgid "Name/Id"
+msgid "Public Transport: Detach waypoints"
 msgstr ""
 
-msgid "Ref"
+msgid "Public Transport: Disable waypoints"
 msgstr ""
 
-msgid "Stops are possible on the"
+msgid "Public Transport: Enable waypoints"
 msgstr ""
 
-msgid "right hand side"
+msgid "Public Transport: Edit waypoint name"
 msgstr ""
 
-msgid "left hand side"
+msgid "rail"
 msgstr ""
 
-msgid "Maximum distance from route"
+msgid "Can''t parse a time from this string."
 msgstr ""
 
-msgid " [ID] {0}"
+msgid "Invalid value"
 msgstr ""
 
-msgid "Public Transport: Change stop type"
+msgid "Create Stops from GTFS"
 msgstr ""
 
-msgid "Create Stops from GPX ..."
+msgid "GTFS-Stops"
 msgstr ""
 
-msgid "Create Stops from a GPX file"
+msgid "Type of stops to add"
 msgstr ""
 
-msgid "Select GPX file"
+msgid "Time on your GPS device"
 msgstr ""
 
-msgid "The GPX file contained no tracks or waypoints."
+msgid "HH:MM:SS.sss"
 msgstr ""
 
-msgid "Create Stops from GPX"
+msgid "Time on your stopwatch"
 msgstr ""
 
-msgid "Tracks in this GPX file:"
+msgid "Time window"
 msgstr ""
 
-msgid "Detach"
+msgid "seconds"
 msgstr ""
 
-msgid "implicit"
+msgid "Move Threshold"
 msgstr ""
 
-msgid ""
-"The GPX file doesn''t contain valid trackpoints. Please use a GPX file that "
-"has trackpoints."
+msgid "Catch"
 msgstr ""
 
-msgid "GPX File Trouble"
+msgid "Join"
 msgstr ""
 
-msgid "unnamed"
+msgid "Create Stops from GPX"
 msgstr ""
 
-msgid "Public Transport: Add track stop"
+msgid "Tracks in this GPX file:"
 msgstr ""
 
-msgid "Public Transport: Delete track stop"
+msgid "Detach"
 msgstr ""
 
-msgid "Public Transport: Detach track stop list"
+msgid "implicit"
 msgstr ""
 
-msgid "Public Transport: Edit track stop list"
+msgid "State"
 msgstr ""
 
-msgid "Public Transport: Relocate nodes in track stoplist"
+msgid "[incomplete]"
 msgstr ""
 
-msgid "Public Transport: sort track stop list"
+msgid "[empty way]"
 msgstr ""
 
-msgid "Public Transport: Suggest stops"
+msgid "[gap]"
 msgstr ""
 
 msgid "Stopname"
 msgstr ""
 
-msgid "Public Transport: Detach waypoints"
+msgid " [ID] {0}"
 msgstr ""
 
-msgid "Public Transport: Disable waypoints"
+msgid ""
+"The GPX file doesn''t contain valid trackpoints. Please use a GPX file that "
+"has trackpoints."
 msgstr ""
 
-msgid "Public Transport: Enable waypoints"
+msgid "GPX File Trouble"
 msgstr ""
 
-msgid "Public Transport: Edit waypoint name"
+msgid "unnamed"
 msgstr ""
 
 msgid "Distance between stops"
@@ -33709,6 +33790,9 @@ msgstr ""
 msgid "JOSM Tag Editor Plugin"
 msgstr ""
 
+msgid "Presets"
+msgstr ""
+
 msgid "Abort tag editing and close dialog"
 msgstr ""
 
@@ -35634,6 +35718,26 @@ msgid_plural "Overwrite ''{0}'' tags {1} from {2} with new value ''{3}''?"
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Download from Sophox API"
+msgstr ""
+
+msgid ""
+"Find places of education at least 2km, and at most 3km from the center of "
+"the selection"
+msgstr ""
+
+msgid "Show/hide Sophox snippet list"
+msgstr ""
+
+msgid "help"
+msgstr ""
+
+msgid "Server: "
+msgstr ""
+
+msgid "Wikidata+OSM server"
+msgstr ""
+
 msgid "Search Wikidata items"
 msgstr ""
 
@@ -35707,26 +35811,6 @@ msgid ""
 "objects"
 msgstr ""
 
-msgid "Download from Wikosm API"
-msgstr ""
-
-msgid ""
-"Find places of education at least 2km, and at most 3km from the center of "
-"the selection"
-msgstr ""
-
-msgid "Show/hide Wikosm snippet list"
-msgstr ""
-
-msgid "help"
-msgstr ""
-
-msgid "Server: "
-msgstr ""
-
-msgid "Wikidata+OSM server"
-msgstr ""
-
 msgid "The Ultimate WMS Super-speed Turbo Challenge II"
 msgstr ""
 
diff --git a/i18n/po/th.po b/i18n/po/th.po
index 387a994..e1a82c9 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-10-30 03:38+0100\n"
+"POT-Creation-Date: 2017-11-26 00:06+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-10-30 05:04+0000\n"
-"X-Generator: Launchpad (build 18493)\n"
+"X-Launchpad-Export-Date: 2017-11-26 05:06+0000\n"
+"X-Generator: Launchpad (build 18509)\n"
 "Language: th\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -421,12 +421,15 @@ msgstr ""
 msgid "Delete the active layer. Does not delete the associated file."
 msgstr ""
 
-msgid "Toggle dialogs panel"
+msgid "Dialogs panel"
 msgstr ""
 
 msgid "Toggle dialogs panel, maximize mapview"
 msgstr ""
 
+msgid "Toggle dialogs panel"
+msgstr ""
+
 msgid "Distribute Nodes"
 msgstr ""
 
@@ -6488,6 +6491,9 @@ msgstr ""
 msgid "Coordinates (projected): "
 msgstr ""
 
+msgid "UTM Zone"
+msgstr ""
+
 msgid "Part of: "
 msgstr ""
 
@@ -8786,6 +8792,11 @@ msgstr ""
 msgid "Check \"Save\" to save the layer to the file specified on the left."
 msgstr ""
 
+msgid ""
+"A background upload is already in progress. Kindly wait for it to finish "
+"before uploading new changes"
+msgstr ""
+
 msgid "I would like someone to review my edits."
 msgstr ""
 
@@ -9894,6 +9905,9 @@ msgstr ""
 msgid "Save Layer"
 msgstr ""
 
+msgid "Trying to set a read only data layer as edit layer"
+msgstr ""
+
 msgid "{0} note"
 msgid_plural "{0} notes"
 msgstr[0] ""
@@ -10724,11 +10738,6 @@ msgstr ""
 msgid "Failed to parse Mappaint styles from ''{0}''. Error was: {1}"
 msgstr ""
 
-msgid ""
-"Detected deprecated ''{0}'' in ''{1}'' which will be removed shortly. Use "
-"''{2}'' instead."
-msgstr ""
-
 msgid "Failed to locate image ''{0}''"
 msgstr ""
 
@@ -11893,6 +11902,9 @@ msgstr ""
 msgid "Show object ID in selection lists"
 msgstr ""
 
+msgid "Show node coordinates in selection lists"
+msgstr ""
+
 msgid "Show localized name in selection lists"
 msgstr ""
 
@@ -12649,9 +12661,6 @@ msgstr ""
 msgid "UTM"
 msgstr ""
 
-msgid "UTM Zone"
-msgstr ""
-
 msgid "North"
 msgstr ""
 
@@ -13119,9 +13128,6 @@ msgstr ""
 msgid "Error parsing {0}: "
 msgstr ""
 
-msgid "Presets"
-msgstr ""
-
 msgid "Search for objects by preset..."
 msgstr ""
 
@@ -15663,6 +15669,18 @@ msgstr ""
 msgid "korean"
 msgstr ""
 
+msgid "donut"
+msgstr ""
+
+msgid "mediterranean"
+msgstr ""
+
+msgid "friture"
+msgstr ""
+
+msgid "crepe"
+msgstr ""
+
 msgid "Internet access"
 msgstr ""
 
@@ -18505,7 +18523,16 @@ msgstr ""
 msgid "Tents allowed"
 msgstr ""
 
-msgid "Camping Site"
+msgid "Campsite"
+msgstr ""
+
+msgid "Caravans allowed"
+msgstr ""
+
+msgid "Backcountry"
+msgstr ""
+
+msgid "Group only access"
 msgstr ""
 
 msgid "Food+Drinks"
@@ -23334,6 +23361,14 @@ msgid ""
 "resolution or better, and refreshed more frequently with ongoing updates."
 msgstr ""
 
+msgid "DigitalGlobe Premium Imagery Vintage"
+msgstr ""
+
+msgid ""
+"Imagery boundaries and capture dates. Labels appear at zoom level 14 and "
+"higher."
+msgstr ""
+
 msgid "DigitalGlobe Standard Imagery"
 msgstr ""
 
@@ -23343,6 +23378,9 @@ msgid ""
 "Landsat. Average age is 2.31 years, with some areas updated 2x per year."
 msgstr ""
 
+msgid "DigitalGlobe Standard Imagery Vintage"
+msgstr ""
+
 msgid "Esri World Imagery"
 msgstr ""
 
@@ -23406,6 +23444,12 @@ msgstr ""
 msgid "Strava cycling and running heatmap"
 msgstr ""
 
+msgid "Strava water sports heatmap"
+msgstr ""
+
+msgid "Strava winter sports heatmap"
+msgstr ""
+
 msgid "Locator Overlay"
 msgstr ""
 
@@ -23810,6 +23854,9 @@ msgstr ""
 msgid "SPW(allonie) most recent aerial imagery"
 msgstr ""
 
+msgid "SPW(allonie) 2016 aerial imagery"
+msgstr ""
+
 msgid "SPW(allonie) 2015 aerial imagery"
 msgstr ""
 
@@ -23855,6 +23902,14 @@ msgstr ""
 msgid "Addresses data from IBGE"
 msgstr ""
 
+msgid "Street names IBGE Salvador-BA"
+msgstr ""
+
+msgid ""
+"Streets geometry and names of Salvador, Bahia. Source: Faces de Logradouro - "
+"IBGE."
+msgstr ""
+
 msgid "Rio Mosaic 2013"
 msgstr ""
 
@@ -24585,6 +24640,9 @@ msgstr ""
 msgid "Japan GSI ortho Imagery"
 msgstr ""
 
+msgid "Japan GSI Standard Map"
+msgstr ""
+
 msgid "imagico.de OSM images for mapping: Aral Sea (low water level)"
 msgstr ""
 
@@ -24614,7 +24672,7 @@ msgstr ""
 msgid "20cm ortho - Latvia - Coastline"
 msgstr ""
 
-msgid "1.cikla ortofotokarte - Latvia"
+msgid "Orthophoto 1st cycle (1994-1999) - Latvia"
 msgstr ""
 
 msgid "ORT10LT (Lithuania)"
@@ -24623,6 +24681,9 @@ msgstr ""
 msgid "geoportail.lu all layers"
 msgstr ""
 
+msgid "geoportail.lu ortho latest"
+msgstr ""
+
 msgid "geoportail.lu ortho 2016"
 msgstr ""
 
@@ -26113,6 +26174,9 @@ msgstr ""
 msgid "{0} on a node. Should be used on a way."
 msgstr ""
 
+msgid "{0} on a node. Should be used on a way or relation."
+msgstr ""
+
 msgid "{0} on a node. Should be drawn as an area."
 msgstr ""
 
@@ -26340,6 +26404,9 @@ msgstr ""
 msgid "Nodes duplicating parent way tags"
 msgstr ""
 
+msgid "{0} together with {1} and {2}. Remove {0}."
+msgstr ""
+
 msgid ""
 "wikipedia tag has no language given, use ''wikipedia''=''language:page "
 "title''"
@@ -27104,6 +27171,21 @@ msgstr ""
 msgid "Importing..."
 msgstr ""
 
+msgid "Shape is started incorrectly"
+msgstr ""
+
+msgid "Can''t load SVG diagram"
+msgstr ""
+
+msgid "Can''t find root SVG element"
+msgstr ""
+
+msgid "Import primitives"
+msgstr ""
+
+msgid "Cannot find configuration file!"
+msgstr ""
+
 msgid "DXF files [ImportDxf plugin] (*.dxf)"
 msgstr ""
 
@@ -27743,6 +27825,9 @@ msgstr ""
 msgid "Download mode"
 msgstr ""
 
+msgid "Number of images to be pre-fetched (forwards and backwards)"
+msgstr ""
+
 msgid "You are logged in as ''{0}''."
 msgstr ""
 
@@ -27953,8 +28038,17 @@ msgid "only when manually requested"
 msgstr ""
 
 msgid ""
-"The downloaded OSM area is too big. Download mode has been changed to OSM "
-"area until the layer is restarted."
+"The Mapillary layer has stopped downloading images, because the requested "
+"area is too big!"
+msgstr ""
+
+msgid ""
+"To solve this problem, you could zoom in and load a smaller area of the map."
+msgstr ""
+
+msgid ""
+"To solve this problem, you could switch to download mode ''{0}'' and load "
+"Mapillary images for a smaller portion of the map."
 msgstr ""
 
 msgid "Downloading"
@@ -31266,19 +31360,6 @@ msgstr ""
 msgid "Merge Overlap (combine)"
 msgstr ""
 
-msgid ""
-"<html>A role based relation membership was copied to all new ways.<br>You "
-"should verify this and correct it when necessary.</html>"
-msgstr ""
-
-msgid ""
-"<html>A relation membership was copied to all new ways.<br>You should verify "
-"this and correct it when necessary.</html>"
-msgstr ""
-
-msgid "Split way"
-msgstr ""
-
 msgid "Michigan Left"
 msgstr ""
 
@@ -32733,254 +32814,254 @@ msgstr ""
 msgid "PT: Route passes a oneway road in the wrong direction"
 msgstr ""
 
-msgid "moved"
+msgid "Create Stops from GTFS ..."
 msgstr ""
 
-msgid "rail"
+msgid "Create Stops from a GTFS file"
 msgstr ""
 
-msgid "Can''t parse a time from this string."
+msgid "Select GTFS file (stops.txt)"
 msgstr ""
 
-msgid "Invalid value"
+msgid "File \"{0}\" does not exist"
 msgstr ""
 
-msgid "added"
+msgid "IOException \"{0}\" occurred"
 msgstr ""
 
-msgid "Public Transport: Enable GTFSStops"
+msgid ""
+"There exists no dataset. Try to download data from the server or open an OSM "
+"file."
 msgstr ""
 
-msgid "Public Transport: Catch GTFS stops"
+msgid "No data found"
 msgstr ""
 
-msgid "skipped"
+msgid "The GTFS file was empty."
 msgstr ""
 
-msgid "Public Transport: Disable GTFS"
+msgid "[ID] {0}"
 msgstr ""
 
-msgid "Create Stops from GTFS ..."
+msgid "Route patterns ..."
 msgstr ""
 
-msgid "Create Stops from a GTFS file"
+msgid "Edit Route patterns for public transport"
 msgstr ""
 
-msgid "Select GTFS file (stops.txt)"
+msgid "Route Patterns"
 msgstr ""
 
-msgid "File \"{0}\" does not exist"
+msgid "Overview"
 msgstr ""
 
-msgid "IOException \"{0}\" occurred"
+msgid "Itinerary"
 msgstr ""
 
-msgid ""
-"There exists no dataset. Try to download data from the server or open an OSM "
-"file."
+msgid "Stops"
 msgstr ""
 
-msgid "No data found"
+msgid "Meta"
 msgstr ""
 
-msgid "The GTFS file was empty."
+msgid "Existing route patterns:"
 msgstr ""
 
-msgid "Create Stops from GTFS"
+msgid "Reflect"
 msgstr ""
 
-msgid "GTFS-Stops"
+msgid "Required tags:"
 msgstr ""
 
-msgid "Type of stops to add"
+msgid "Common tags:"
 msgstr ""
 
-msgid "Time on your GPS device"
+msgid "Additional tags:"
 msgstr ""
 
-msgid "HH:MM:SS.sss"
+msgid "Add a new Tag"
 msgstr ""
 
-msgid "Time on your stopwatch"
+msgid "Name/Id"
 msgstr ""
 
-msgid "Time window"
+msgid "Find"
 msgstr ""
 
-msgid "seconds"
+msgid "Show"
 msgstr ""
 
-msgid "Move Threshold"
+msgid "Mark"
 msgstr ""
 
-msgid "Suggest Stops"
+msgid "Ref"
 msgstr ""
 
-msgid "Find"
+msgid "Stops are possible on the"
 msgstr ""
 
-msgid "Show"
+msgid "right hand side"
 msgstr ""
 
-msgid "Mark"
+msgid "left hand side"
 msgstr ""
 
-msgid "Catch"
+msgid "Maximum distance from route"
 msgstr ""
 
-msgid "Join"
+msgid "Suggest Stops"
 msgstr ""
 
-msgid "Public Transport: Join GTFS stops"
+msgid "Create Stops from GPX ..."
 msgstr ""
 
-msgid "State"
+msgid "Create Stops from a GPX file"
 msgstr ""
 
-msgid "[incomplete]"
+msgid "Select GPX file"
 msgstr ""
 
-msgid "[empty way]"
+msgid "The GPX file contained no tracks or waypoints."
 msgstr ""
 
-msgid "[ID] {0}"
+msgid "moved"
 msgstr ""
 
-msgid "[gap]"
+msgid "added"
 msgstr ""
 
-msgid "Route patterns ..."
+msgid "Public Transport: Enable GTFSStops"
 msgstr ""
 
-msgid "Edit Route patterns for public transport"
+msgid "Public Transport: Catch GTFS stops"
 msgstr ""
 
-msgid "Route Patterns"
+msgid "skipped"
 msgstr ""
 
-msgid "Overview"
+msgid "Public Transport: Disable GTFS"
 msgstr ""
 
-msgid "Itinerary"
+msgid "Public Transport: Join GTFS stops"
 msgstr ""
 
-msgid "Stops"
+msgid "Public Transport: Change stop type"
 msgstr ""
 
-msgid "Meta"
+msgid "Public Transport: Add track stop"
 msgstr ""
 
-msgid "Existing route patterns:"
+msgid "Public Transport: Delete track stop"
 msgstr ""
 
-msgid "Reflect"
+msgid "Public Transport: Detach track stop list"
 msgstr ""
 
-msgid "Required tags:"
+msgid "Public Transport: Edit track stop list"
 msgstr ""
 
-msgid "Common tags:"
+msgid "Public Transport: Relocate nodes in track stoplist"
 msgstr ""
 
-msgid "Additional tags:"
+msgid "Public Transport: sort track stop list"
 msgstr ""
 
-msgid "Add a new Tag"
+msgid "Public Transport: Suggest stops"
 msgstr ""
 
-msgid "Name/Id"
+msgid "Public Transport: Detach waypoints"
 msgstr ""
 
-msgid "Ref"
+msgid "Public Transport: Disable waypoints"
 msgstr ""
 
-msgid "Stops are possible on the"
+msgid "Public Transport: Enable waypoints"
 msgstr ""
 
-msgid "right hand side"
+msgid "Public Transport: Edit waypoint name"
 msgstr ""
 
-msgid "left hand side"
+msgid "rail"
 msgstr ""
 
-msgid "Maximum distance from route"
+msgid "Can''t parse a time from this string."
 msgstr ""
 
-msgid " [ID] {0}"
+msgid "Invalid value"
 msgstr ""
 
-msgid "Public Transport: Change stop type"
+msgid "Create Stops from GTFS"
 msgstr ""
 
-msgid "Create Stops from GPX ..."
+msgid "GTFS-Stops"
 msgstr ""
 
-msgid "Create Stops from a GPX file"
+msgid "Type of stops to add"
 msgstr ""
 
-msgid "Select GPX file"
+msgid "Time on your GPS device"
 msgstr ""
 
-msgid "The GPX file contained no tracks or waypoints."
+msgid "HH:MM:SS.sss"
 msgstr ""
 
-msgid "Create Stops from GPX"
+msgid "Time on your stopwatch"
 msgstr ""
 
-msgid "Tracks in this GPX file:"
+msgid "Time window"
 msgstr ""
 
-msgid "Detach"
+msgid "seconds"
 msgstr ""
 
-msgid "implicit"
+msgid "Move Threshold"
 msgstr ""
 
-msgid ""
-"The GPX file doesn''t contain valid trackpoints. Please use a GPX file that "
-"has trackpoints."
+msgid "Catch"
 msgstr ""
 
-msgid "GPX File Trouble"
+msgid "Join"
 msgstr ""
 
-msgid "unnamed"
+msgid "Create Stops from GPX"
 msgstr ""
 
-msgid "Public Transport: Add track stop"
+msgid "Tracks in this GPX file:"
 msgstr ""
 
-msgid "Public Transport: Delete track stop"
+msgid "Detach"
 msgstr ""
 
-msgid "Public Transport: Detach track stop list"
+msgid "implicit"
 msgstr ""
 
-msgid "Public Transport: Edit track stop list"
+msgid "State"
 msgstr ""
 
-msgid "Public Transport: Relocate nodes in track stoplist"
+msgid "[incomplete]"
 msgstr ""
 
-msgid "Public Transport: sort track stop list"
+msgid "[empty way]"
 msgstr ""
 
-msgid "Public Transport: Suggest stops"
+msgid "[gap]"
 msgstr ""
 
 msgid "Stopname"
 msgstr ""
 
-msgid "Public Transport: Detach waypoints"
+msgid " [ID] {0}"
 msgstr ""
 
-msgid "Public Transport: Disable waypoints"
+msgid ""
+"The GPX file doesn''t contain valid trackpoints. Please use a GPX file that "
+"has trackpoints."
 msgstr ""
 
-msgid "Public Transport: Enable waypoints"
+msgid "GPX File Trouble"
 msgstr ""
 
-msgid "Public Transport: Edit waypoint name"
+msgid "unnamed"
 msgstr ""
 
 msgid "Distance between stops"
@@ -33709,6 +33790,9 @@ msgstr ""
 msgid "JOSM Tag Editor Plugin"
 msgstr ""
 
+msgid "Presets"
+msgstr ""
+
 msgid "Abort tag editing and close dialog"
 msgstr ""
 
@@ -35634,6 +35718,26 @@ msgid_plural "Overwrite ''{0}'' tags {1} from {2} with new value ''{3}''?"
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Download from Sophox API"
+msgstr ""
+
+msgid ""
+"Find places of education at least 2km, and at most 3km from the center of "
+"the selection"
+msgstr ""
+
+msgid "Show/hide Sophox snippet list"
+msgstr ""
+
+msgid "help"
+msgstr ""
+
+msgid "Server: "
+msgstr ""
+
+msgid "Wikidata+OSM server"
+msgstr ""
+
 msgid "Search Wikidata items"
 msgstr ""
 
@@ -35707,26 +35811,6 @@ msgid ""
 "objects"
 msgstr ""
 
-msgid "Download from Wikosm API"
-msgstr ""
-
-msgid ""
-"Find places of education at least 2km, and at most 3km from the center of "
-"the selection"
-msgstr ""
-
-msgid "Show/hide Wikosm snippet list"
-msgstr ""
-
-msgid "help"
-msgstr ""
-
-msgid "Server: "
-msgstr ""
-
-msgid "Wikidata+OSM server"
-msgstr ""
-
 msgid "The Ultimate WMS Super-speed Turbo Challenge II"
 msgstr ""
 
diff --git a/i18n/po/tr.po b/i18n/po/tr.po
index 6416490..4716645 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-10-30 03:38+0100\n"
+"POT-Creation-Date: 2017-11-26 00:06+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-10-30 05:04+0000\n"
-"X-Generator: Launchpad (build 18493)\n"
+"X-Launchpad-Export-Date: 2017-11-26 05:06+0000\n"
+"X-Generator: Launchpad (build 18509)\n"
 "Language: \n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -431,12 +431,15 @@ msgstr ""
 msgid "Delete the active layer. Does not delete the associated file."
 msgstr ""
 
-msgid "Toggle dialogs panel"
-msgstr "Diyalog paneli"
+msgid "Dialogs panel"
+msgstr ""
 
 msgid "Toggle dialogs panel, maximize mapview"
 msgstr "Diyalog panelini aç/kapa, haritayı genişlet"
 
+msgid "Toggle dialogs panel"
+msgstr "Diyalog paneli"
+
 msgid "Distribute Nodes"
 msgstr ""
 
@@ -6552,6 +6555,9 @@ msgstr ""
 msgid "Coordinates (projected): "
 msgstr ""
 
+msgid "UTM Zone"
+msgstr "UTM Zone"
+
 msgid "Part of: "
 msgstr ""
 
@@ -8852,6 +8858,11 @@ msgstr ""
 msgid "Check \"Save\" to save the layer to the file specified on the left."
 msgstr ""
 
+msgid ""
+"A background upload is already in progress. Kindly wait for it to finish "
+"before uploading new changes"
+msgstr ""
+
 msgid "I would like someone to review my edits."
 msgstr ""
 
@@ -9964,6 +9975,9 @@ msgstr ""
 msgid "Save Layer"
 msgstr "Katmanı Kaydet"
 
+msgid "Trying to set a read only data layer as edit layer"
+msgstr ""
+
 msgid "{0} note"
 msgid_plural "{0} notes"
 msgstr[0] ""
@@ -10808,11 +10822,6 @@ msgstr ""
 msgid "Failed to parse Mappaint styles from ''{0}''. Error was: {1}"
 msgstr ""
 
-msgid ""
-"Detected deprecated ''{0}'' in ''{1}'' which will be removed shortly. Use "
-"''{2}'' instead."
-msgstr ""
-
 msgid "Failed to locate image ''{0}''"
 msgstr ""
 
@@ -11988,6 +11997,9 @@ msgstr "Show splash screen at startup"
 msgid "Show object ID in selection lists"
 msgstr "Seçim listesindeki objenin ID sini göster"
 
+msgid "Show node coordinates in selection lists"
+msgstr ""
+
 msgid "Show localized name in selection lists"
 msgstr ""
 
@@ -12744,9 +12756,6 @@ msgstr ""
 msgid "UTM"
 msgstr "UTM"
 
-msgid "UTM Zone"
-msgstr "UTM Zone"
-
 msgid "North"
 msgstr "Kuzey"
 
@@ -13215,9 +13224,6 @@ msgstr ""
 msgid "Error parsing {0}: "
 msgstr "İşleme Hatası {0}: "
 
-msgid "Presets"
-msgstr "Ayarlanmış"
-
 msgid "Search for objects by preset..."
 msgstr ""
 
@@ -15768,6 +15774,18 @@ msgstr ""
 msgid "korean"
 msgstr ""
 
+msgid "donut"
+msgstr ""
+
+msgid "mediterranean"
+msgstr ""
+
+msgid "friture"
+msgstr ""
+
+msgid "crepe"
+msgstr ""
+
 msgid "Internet access"
 msgstr ""
 
@@ -18610,8 +18628,17 @@ msgstr ""
 msgid "Tents allowed"
 msgstr ""
 
-msgid "Camping Site"
-msgstr "Kamp Sitesi"
+msgid "Campsite"
+msgstr ""
+
+msgid "Caravans allowed"
+msgstr ""
+
+msgid "Backcountry"
+msgstr ""
+
+msgid "Group only access"
+msgstr ""
 
 msgid "Food+Drinks"
 msgstr "Yüyecek+içecek"
@@ -23439,6 +23466,14 @@ msgid ""
 "resolution or better, and refreshed more frequently with ongoing updates."
 msgstr ""
 
+msgid "DigitalGlobe Premium Imagery Vintage"
+msgstr ""
+
+msgid ""
+"Imagery boundaries and capture dates. Labels appear at zoom level 14 and "
+"higher."
+msgstr ""
+
 msgid "DigitalGlobe Standard Imagery"
 msgstr ""
 
@@ -23448,6 +23483,9 @@ msgid ""
 "Landsat. Average age is 2.31 years, with some areas updated 2x per year."
 msgstr ""
 
+msgid "DigitalGlobe Standard Imagery Vintage"
+msgstr ""
+
 msgid "Esri World Imagery"
 msgstr ""
 
@@ -23511,6 +23549,12 @@ msgstr ""
 msgid "Strava cycling and running heatmap"
 msgstr ""
 
+msgid "Strava water sports heatmap"
+msgstr ""
+
+msgid "Strava winter sports heatmap"
+msgstr ""
+
 msgid "Locator Overlay"
 msgstr ""
 
@@ -23915,6 +23959,9 @@ msgstr ""
 msgid "SPW(allonie) most recent aerial imagery"
 msgstr ""
 
+msgid "SPW(allonie) 2016 aerial imagery"
+msgstr ""
+
 msgid "SPW(allonie) 2015 aerial imagery"
 msgstr ""
 
@@ -23960,6 +24007,14 @@ msgstr ""
 msgid "Addresses data from IBGE"
 msgstr ""
 
+msgid "Street names IBGE Salvador-BA"
+msgstr ""
+
+msgid ""
+"Streets geometry and names of Salvador, Bahia. Source: Faces de Logradouro - "
+"IBGE."
+msgstr ""
+
 msgid "Rio Mosaic 2013"
 msgstr ""
 
@@ -24690,6 +24745,9 @@ msgstr ""
 msgid "Japan GSI ortho Imagery"
 msgstr ""
 
+msgid "Japan GSI Standard Map"
+msgstr ""
+
 msgid "imagico.de OSM images for mapping: Aral Sea (low water level)"
 msgstr ""
 
@@ -24719,7 +24777,7 @@ msgstr ""
 msgid "20cm ortho - Latvia - Coastline"
 msgstr ""
 
-msgid "1.cikla ortofotokarte - Latvia"
+msgid "Orthophoto 1st cycle (1994-1999) - Latvia"
 msgstr ""
 
 msgid "ORT10LT (Lithuania)"
@@ -24728,6 +24786,9 @@ msgstr ""
 msgid "geoportail.lu all layers"
 msgstr ""
 
+msgid "geoportail.lu ortho latest"
+msgstr ""
+
 msgid "geoportail.lu ortho 2016"
 msgstr ""
 
@@ -26218,6 +26279,9 @@ msgstr ""
 msgid "{0} on a node. Should be used on a way."
 msgstr ""
 
+msgid "{0} on a node. Should be used on a way or relation."
+msgstr ""
+
 msgid "{0} on a node. Should be drawn as an area."
 msgstr ""
 
@@ -26445,6 +26509,9 @@ msgstr ""
 msgid "Nodes duplicating parent way tags"
 msgstr ""
 
+msgid "{0} together with {1} and {2}. Remove {0}."
+msgstr ""
+
 msgid ""
 "wikipedia tag has no language given, use ''wikipedia''=''language:page "
 "title''"
@@ -27209,6 +27276,21 @@ msgstr "İzleri openstreetmap.org sitesine yükle"
 msgid "Importing..."
 msgstr ""
 
+msgid "Shape is started incorrectly"
+msgstr ""
+
+msgid "Can''t load SVG diagram"
+msgstr ""
+
+msgid "Can''t find root SVG element"
+msgstr ""
+
+msgid "Import primitives"
+msgstr ""
+
+msgid "Cannot find configuration file!"
+msgstr ""
+
 msgid "DXF files [ImportDxf plugin] (*.dxf)"
 msgstr ""
 
@@ -27848,6 +27930,9 @@ msgstr ""
 msgid "Download mode"
 msgstr ""
 
+msgid "Number of images to be pre-fetched (forwards and backwards)"
+msgstr ""
+
 msgid "You are logged in as ''{0}''."
 msgstr ""
 
@@ -28058,8 +28143,17 @@ msgid "only when manually requested"
 msgstr ""
 
 msgid ""
-"The downloaded OSM area is too big. Download mode has been changed to OSM "
-"area until the layer is restarted."
+"The Mapillary layer has stopped downloading images, because the requested "
+"area is too big!"
+msgstr ""
+
+msgid ""
+"To solve this problem, you could zoom in and load a smaller area of the map."
+msgstr ""
+
+msgid ""
+"To solve this problem, you could switch to download mode ''{0}'' and load "
+"Mapillary images for a smaller portion of the map."
 msgstr ""
 
 msgid "Downloading"
@@ -31383,19 +31477,6 @@ msgstr ""
 msgid "Merge Overlap (combine)"
 msgstr ""
 
-msgid ""
-"<html>A role based relation membership was copied to all new ways.<br>You "
-"should verify this and correct it when necessary.</html>"
-msgstr ""
-
-msgid ""
-"<html>A relation membership was copied to all new ways.<br>You should verify "
-"this and correct it when necessary.</html>"
-msgstr ""
-
-msgid "Split way"
-msgstr ""
-
 msgid "Michigan Left"
 msgstr ""
 
@@ -32852,33 +32933,6 @@ msgstr ""
 msgid "PT: Route passes a oneway road in the wrong direction"
 msgstr ""
 
-msgid "moved"
-msgstr "taşındı"
-
-msgid "rail"
-msgstr "demiryolu"
-
-msgid "Can''t parse a time from this string."
-msgstr ""
-
-msgid "Invalid value"
-msgstr "Geçersiz değer"
-
-msgid "added"
-msgstr ""
-
-msgid "Public Transport: Enable GTFSStops"
-msgstr ""
-
-msgid "Public Transport: Catch GTFS stops"
-msgstr ""
-
-msgid "skipped"
-msgstr ""
-
-msgid "Public Transport: Disable GTFS"
-msgstr ""
-
 msgid "Create Stops from GTFS ..."
 msgstr ""
 
@@ -32905,34 +32959,49 @@ msgstr ""
 msgid "The GTFS file was empty."
 msgstr ""
 
-msgid "Create Stops from GTFS"
+msgid "[ID] {0}"
 msgstr ""
 
-msgid "GTFS-Stops"
+msgid "Route patterns ..."
 msgstr ""
 
-msgid "Type of stops to add"
+msgid "Edit Route patterns for public transport"
 msgstr ""
 
-msgid "Time on your GPS device"
+msgid "Route Patterns"
 msgstr ""
 
-msgid "HH:MM:SS.sss"
-msgstr "HH:MM:SS.sss"
+msgid "Overview"
+msgstr ""
 
-msgid "Time on your stopwatch"
+msgid "Itinerary"
 msgstr ""
 
-msgid "Time window"
-msgstr "Zaman penceresi"
+msgid "Stops"
+msgstr "Duraklar"
 
-msgid "seconds"
-msgstr "saniyeler"
+msgid "Meta"
+msgstr ""
 
-msgid "Move Threshold"
+msgid "Existing route patterns:"
 msgstr ""
 
-msgid "Suggest Stops"
+msgid "Reflect"
+msgstr ""
+
+msgid "Required tags:"
+msgstr ""
+
+msgid "Common tags:"
+msgstr ""
+
+msgid "Additional tags:"
+msgstr ""
+
+msgid "Add a new Tag"
+msgstr ""
+
+msgid "Name/Id"
 msgstr ""
 
 msgid "Find"
@@ -32944,163 +33013,175 @@ msgstr ""
 msgid "Mark"
 msgstr "İşaretle"
 
-msgid "Catch"
+msgid "Ref"
 msgstr ""
 
-msgid "Join"
+msgid "Stops are possible on the"
 msgstr ""
 
-msgid "Public Transport: Join GTFS stops"
+msgid "right hand side"
 msgstr ""
 
-msgid "State"
-msgstr "İl"
-
-msgid "[incomplete]"
+msgid "left hand side"
 msgstr ""
 
-msgid "[empty way]"
+msgid "Maximum distance from route"
 msgstr ""
 
-msgid "[ID] {0}"
+msgid "Suggest Stops"
 msgstr ""
 
-msgid "[gap]"
+msgid "Create Stops from GPX ..."
 msgstr ""
 
-msgid "Route patterns ..."
+msgid "Create Stops from a GPX file"
 msgstr ""
 
-msgid "Edit Route patterns for public transport"
+msgid "Select GPX file"
 msgstr ""
 
-msgid "Route Patterns"
+msgid "The GPX file contained no tracks or waypoints."
 msgstr ""
 
-msgid "Overview"
-msgstr ""
+msgid "moved"
+msgstr "taşındı"
 
-msgid "Itinerary"
+msgid "added"
 msgstr ""
 
-msgid "Stops"
-msgstr "Duraklar"
-
-msgid "Meta"
+msgid "Public Transport: Enable GTFSStops"
 msgstr ""
 
-msgid "Existing route patterns:"
+msgid "Public Transport: Catch GTFS stops"
 msgstr ""
 
-msgid "Reflect"
+msgid "skipped"
 msgstr ""
 
-msgid "Required tags:"
+msgid "Public Transport: Disable GTFS"
 msgstr ""
 
-msgid "Common tags:"
+msgid "Public Transport: Join GTFS stops"
 msgstr ""
 
-msgid "Additional tags:"
+msgid "Public Transport: Change stop type"
 msgstr ""
 
-msgid "Add a new Tag"
+msgid "Public Transport: Add track stop"
 msgstr ""
 
-msgid "Name/Id"
+msgid "Public Transport: Delete track stop"
 msgstr ""
 
-msgid "Ref"
+msgid "Public Transport: Detach track stop list"
 msgstr ""
 
-msgid "Stops are possible on the"
+msgid "Public Transport: Edit track stop list"
 msgstr ""
 
-msgid "right hand side"
+msgid "Public Transport: Relocate nodes in track stoplist"
 msgstr ""
 
-msgid "left hand side"
+msgid "Public Transport: sort track stop list"
 msgstr ""
 
-msgid "Maximum distance from route"
+msgid "Public Transport: Suggest stops"
 msgstr ""
 
-msgid " [ID] {0}"
+msgid "Public Transport: Detach waypoints"
 msgstr ""
 
-msgid "Public Transport: Change stop type"
+msgid "Public Transport: Disable waypoints"
 msgstr ""
 
-msgid "Create Stops from GPX ..."
+msgid "Public Transport: Enable waypoints"
 msgstr ""
 
-msgid "Create Stops from a GPX file"
+msgid "Public Transport: Edit waypoint name"
 msgstr ""
 
-msgid "Select GPX file"
+msgid "rail"
+msgstr "demiryolu"
+
+msgid "Can''t parse a time from this string."
 msgstr ""
 
-msgid "The GPX file contained no tracks or waypoints."
+msgid "Invalid value"
+msgstr "Geçersiz değer"
+
+msgid "Create Stops from GTFS"
 msgstr ""
 
-msgid "Create Stops from GPX"
+msgid "GTFS-Stops"
 msgstr ""
 
-msgid "Tracks in this GPX file:"
+msgid "Type of stops to add"
 msgstr ""
 
-msgid "Detach"
+msgid "Time on your GPS device"
 msgstr ""
 
-msgid "implicit"
+msgid "HH:MM:SS.sss"
+msgstr "HH:MM:SS.sss"
+
+msgid "Time on your stopwatch"
 msgstr ""
 
-msgid ""
-"The GPX file doesn''t contain valid trackpoints. Please use a GPX file that "
-"has trackpoints."
+msgid "Time window"
+msgstr "Zaman penceresi"
+
+msgid "seconds"
+msgstr "saniyeler"
+
+msgid "Move Threshold"
 msgstr ""
 
-msgid "GPX File Trouble"
+msgid "Catch"
 msgstr ""
 
-msgid "unnamed"
-msgstr "isimsiz"
+msgid "Join"
+msgstr ""
 
-msgid "Public Transport: Add track stop"
+msgid "Create Stops from GPX"
 msgstr ""
 
-msgid "Public Transport: Delete track stop"
+msgid "Tracks in this GPX file:"
 msgstr ""
 
-msgid "Public Transport: Detach track stop list"
+msgid "Detach"
 msgstr ""
 
-msgid "Public Transport: Edit track stop list"
+msgid "implicit"
 msgstr ""
 
-msgid "Public Transport: Relocate nodes in track stoplist"
+msgid "State"
+msgstr "İl"
+
+msgid "[incomplete]"
 msgstr ""
 
-msgid "Public Transport: sort track stop list"
+msgid "[empty way]"
 msgstr ""
 
-msgid "Public Transport: Suggest stops"
+msgid "[gap]"
 msgstr ""
 
 msgid "Stopname"
 msgstr ""
 
-msgid "Public Transport: Detach waypoints"
+msgid " [ID] {0}"
 msgstr ""
 
-msgid "Public Transport: Disable waypoints"
+msgid ""
+"The GPX file doesn''t contain valid trackpoints. Please use a GPX file that "
+"has trackpoints."
 msgstr ""
 
-msgid "Public Transport: Enable waypoints"
+msgid "GPX File Trouble"
 msgstr ""
 
-msgid "Public Transport: Edit waypoint name"
-msgstr ""
+msgid "unnamed"
+msgstr "isimsiz"
 
 msgid "Distance between stops"
 msgstr ""
@@ -33828,6 +33909,9 @@ msgstr ""
 msgid "JOSM Tag Editor Plugin"
 msgstr ""
 
+msgid "Presets"
+msgstr "Ayarlanmış"
+
 msgid "Abort tag editing and close dialog"
 msgstr ""
 
@@ -35751,6 +35835,26 @@ msgid_plural "Overwrite ''{0}'' tags {1} from {2} with new value ''{3}''?"
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Download from Sophox API"
+msgstr ""
+
+msgid ""
+"Find places of education at least 2km, and at most 3km from the center of "
+"the selection"
+msgstr ""
+
+msgid "Show/hide Sophox snippet list"
+msgstr ""
+
+msgid "help"
+msgstr ""
+
+msgid "Server: "
+msgstr ""
+
+msgid "Wikidata+OSM server"
+msgstr ""
+
 msgid "Search Wikidata items"
 msgstr ""
 
@@ -35824,26 +35928,6 @@ msgid ""
 "objects"
 msgstr ""
 
-msgid "Download from Wikosm API"
-msgstr ""
-
-msgid ""
-"Find places of education at least 2km, and at most 3km from the center of "
-"the selection"
-msgstr ""
-
-msgid "Show/hide Wikosm snippet list"
-msgstr ""
-
-msgid "help"
-msgstr ""
-
-msgid "Server: "
-msgstr ""
-
-msgid "Wikidata+OSM server"
-msgstr ""
-
 msgid "The Ultimate WMS Super-speed Turbo Challenge II"
 msgstr ""
 
diff --git a/i18n/po/ug.po b/i18n/po/ug.po
index ae8afdd..bf6a360 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-10-30 03:38+0100\n"
+"POT-Creation-Date: 2017-11-26 00:06+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-10-30 05:04+0000\n"
-"X-Generator: Launchpad (build 18493)\n"
+"X-Launchpad-Export-Date: 2017-11-26 05:07+0000\n"
+"X-Generator: Launchpad (build 18509)\n"
 "Language: \n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -421,12 +421,15 @@ msgstr ""
 msgid "Delete the active layer. Does not delete the associated file."
 msgstr ""
 
-msgid "Toggle dialogs panel"
+msgid "Dialogs panel"
 msgstr ""
 
 msgid "Toggle dialogs panel, maximize mapview"
 msgstr ""
 
+msgid "Toggle dialogs panel"
+msgstr ""
+
 msgid "Distribute Nodes"
 msgstr ""
 
@@ -6488,6 +6491,9 @@ msgstr ""
 msgid "Coordinates (projected): "
 msgstr ""
 
+msgid "UTM Zone"
+msgstr ""
+
 msgid "Part of: "
 msgstr ""
 
@@ -8786,6 +8792,11 @@ msgstr ""
 msgid "Check \"Save\" to save the layer to the file specified on the left."
 msgstr ""
 
+msgid ""
+"A background upload is already in progress. Kindly wait for it to finish "
+"before uploading new changes"
+msgstr ""
+
 msgid "I would like someone to review my edits."
 msgstr ""
 
@@ -9894,6 +9905,9 @@ msgstr ""
 msgid "Save Layer"
 msgstr ""
 
+msgid "Trying to set a read only data layer as edit layer"
+msgstr ""
+
 msgid "{0} note"
 msgid_plural "{0} notes"
 msgstr[0] ""
@@ -10724,11 +10738,6 @@ msgstr ""
 msgid "Failed to parse Mappaint styles from ''{0}''. Error was: {1}"
 msgstr ""
 
-msgid ""
-"Detected deprecated ''{0}'' in ''{1}'' which will be removed shortly. Use "
-"''{2}'' instead."
-msgstr ""
-
 msgid "Failed to locate image ''{0}''"
 msgstr ""
 
@@ -11893,6 +11902,9 @@ msgstr ""
 msgid "Show object ID in selection lists"
 msgstr ""
 
+msgid "Show node coordinates in selection lists"
+msgstr ""
+
 msgid "Show localized name in selection lists"
 msgstr ""
 
@@ -12649,9 +12661,6 @@ msgstr ""
 msgid "UTM"
 msgstr ""
 
-msgid "UTM Zone"
-msgstr ""
-
 msgid "North"
 msgstr ""
 
@@ -13119,9 +13128,6 @@ msgstr ""
 msgid "Error parsing {0}: "
 msgstr ""
 
-msgid "Presets"
-msgstr ""
-
 msgid "Search for objects by preset..."
 msgstr ""
 
@@ -15663,6 +15669,18 @@ msgstr ""
 msgid "korean"
 msgstr ""
 
+msgid "donut"
+msgstr ""
+
+msgid "mediterranean"
+msgstr ""
+
+msgid "friture"
+msgstr ""
+
+msgid "crepe"
+msgstr ""
+
 msgid "Internet access"
 msgstr ""
 
@@ -18505,7 +18523,16 @@ msgstr ""
 msgid "Tents allowed"
 msgstr ""
 
-msgid "Camping Site"
+msgid "Campsite"
+msgstr ""
+
+msgid "Caravans allowed"
+msgstr ""
+
+msgid "Backcountry"
+msgstr ""
+
+msgid "Group only access"
 msgstr ""
 
 msgid "Food+Drinks"
@@ -23334,6 +23361,14 @@ msgid ""
 "resolution or better, and refreshed more frequently with ongoing updates."
 msgstr ""
 
+msgid "DigitalGlobe Premium Imagery Vintage"
+msgstr ""
+
+msgid ""
+"Imagery boundaries and capture dates. Labels appear at zoom level 14 and "
+"higher."
+msgstr ""
+
 msgid "DigitalGlobe Standard Imagery"
 msgstr ""
 
@@ -23343,6 +23378,9 @@ msgid ""
 "Landsat. Average age is 2.31 years, with some areas updated 2x per year."
 msgstr ""
 
+msgid "DigitalGlobe Standard Imagery Vintage"
+msgstr ""
+
 msgid "Esri World Imagery"
 msgstr ""
 
@@ -23406,6 +23444,12 @@ msgstr ""
 msgid "Strava cycling and running heatmap"
 msgstr ""
 
+msgid "Strava water sports heatmap"
+msgstr ""
+
+msgid "Strava winter sports heatmap"
+msgstr ""
+
 msgid "Locator Overlay"
 msgstr ""
 
@@ -23810,6 +23854,9 @@ msgstr ""
 msgid "SPW(allonie) most recent aerial imagery"
 msgstr ""
 
+msgid "SPW(allonie) 2016 aerial imagery"
+msgstr ""
+
 msgid "SPW(allonie) 2015 aerial imagery"
 msgstr ""
 
@@ -23855,6 +23902,14 @@ msgstr ""
 msgid "Addresses data from IBGE"
 msgstr ""
 
+msgid "Street names IBGE Salvador-BA"
+msgstr ""
+
+msgid ""
+"Streets geometry and names of Salvador, Bahia. Source: Faces de Logradouro - "
+"IBGE."
+msgstr ""
+
 msgid "Rio Mosaic 2013"
 msgstr ""
 
@@ -24585,6 +24640,9 @@ msgstr ""
 msgid "Japan GSI ortho Imagery"
 msgstr ""
 
+msgid "Japan GSI Standard Map"
+msgstr ""
+
 msgid "imagico.de OSM images for mapping: Aral Sea (low water level)"
 msgstr ""
 
@@ -24614,7 +24672,7 @@ msgstr ""
 msgid "20cm ortho - Latvia - Coastline"
 msgstr ""
 
-msgid "1.cikla ortofotokarte - Latvia"
+msgid "Orthophoto 1st cycle (1994-1999) - Latvia"
 msgstr ""
 
 msgid "ORT10LT (Lithuania)"
@@ -24623,6 +24681,9 @@ msgstr ""
 msgid "geoportail.lu all layers"
 msgstr ""
 
+msgid "geoportail.lu ortho latest"
+msgstr ""
+
 msgid "geoportail.lu ortho 2016"
 msgstr ""
 
@@ -26113,6 +26174,9 @@ msgstr ""
 msgid "{0} on a node. Should be used on a way."
 msgstr ""
 
+msgid "{0} on a node. Should be used on a way or relation."
+msgstr ""
+
 msgid "{0} on a node. Should be drawn as an area."
 msgstr ""
 
@@ -26340,6 +26404,9 @@ msgstr ""
 msgid "Nodes duplicating parent way tags"
 msgstr ""
 
+msgid "{0} together with {1} and {2}. Remove {0}."
+msgstr ""
+
 msgid ""
 "wikipedia tag has no language given, use ''wikipedia''=''language:page "
 "title''"
@@ -27104,6 +27171,21 @@ msgstr ""
 msgid "Importing..."
 msgstr ""
 
+msgid "Shape is started incorrectly"
+msgstr ""
+
+msgid "Can''t load SVG diagram"
+msgstr ""
+
+msgid "Can''t find root SVG element"
+msgstr ""
+
+msgid "Import primitives"
+msgstr ""
+
+msgid "Cannot find configuration file!"
+msgstr ""
+
 msgid "DXF files [ImportDxf plugin] (*.dxf)"
 msgstr ""
 
@@ -27743,6 +27825,9 @@ msgstr ""
 msgid "Download mode"
 msgstr ""
 
+msgid "Number of images to be pre-fetched (forwards and backwards)"
+msgstr ""
+
 msgid "You are logged in as ''{0}''."
 msgstr ""
 
@@ -27953,8 +28038,17 @@ msgid "only when manually requested"
 msgstr ""
 
 msgid ""
-"The downloaded OSM area is too big. Download mode has been changed to OSM "
-"area until the layer is restarted."
+"The Mapillary layer has stopped downloading images, because the requested "
+"area is too big!"
+msgstr ""
+
+msgid ""
+"To solve this problem, you could zoom in and load a smaller area of the map."
+msgstr ""
+
+msgid ""
+"To solve this problem, you could switch to download mode ''{0}'' and load "
+"Mapillary images for a smaller portion of the map."
 msgstr ""
 
 msgid "Downloading"
@@ -31266,19 +31360,6 @@ msgstr ""
 msgid "Merge Overlap (combine)"
 msgstr ""
 
-msgid ""
-"<html>A role based relation membership was copied to all new ways.<br>You "
-"should verify this and correct it when necessary.</html>"
-msgstr ""
-
-msgid ""
-"<html>A relation membership was copied to all new ways.<br>You should verify "
-"this and correct it when necessary.</html>"
-msgstr ""
-
-msgid "Split way"
-msgstr ""
-
 msgid "Michigan Left"
 msgstr ""
 
@@ -32733,254 +32814,254 @@ msgstr ""
 msgid "PT: Route passes a oneway road in the wrong direction"
 msgstr ""
 
-msgid "moved"
+msgid "Create Stops from GTFS ..."
 msgstr ""
 
-msgid "rail"
+msgid "Create Stops from a GTFS file"
 msgstr ""
 
-msgid "Can''t parse a time from this string."
+msgid "Select GTFS file (stops.txt)"
 msgstr ""
 
-msgid "Invalid value"
+msgid "File \"{0}\" does not exist"
 msgstr ""
 
-msgid "added"
+msgid "IOException \"{0}\" occurred"
 msgstr ""
 
-msgid "Public Transport: Enable GTFSStops"
+msgid ""
+"There exists no dataset. Try to download data from the server or open an OSM "
+"file."
 msgstr ""
 
-msgid "Public Transport: Catch GTFS stops"
+msgid "No data found"
 msgstr ""
 
-msgid "skipped"
+msgid "The GTFS file was empty."
 msgstr ""
 
-msgid "Public Transport: Disable GTFS"
+msgid "[ID] {0}"
 msgstr ""
 
-msgid "Create Stops from GTFS ..."
+msgid "Route patterns ..."
 msgstr ""
 
-msgid "Create Stops from a GTFS file"
+msgid "Edit Route patterns for public transport"
 msgstr ""
 
-msgid "Select GTFS file (stops.txt)"
+msgid "Route Patterns"
 msgstr ""
 
-msgid "File \"{0}\" does not exist"
+msgid "Overview"
 msgstr ""
 
-msgid "IOException \"{0}\" occurred"
+msgid "Itinerary"
 msgstr ""
 
-msgid ""
-"There exists no dataset. Try to download data from the server or open an OSM "
-"file."
+msgid "Stops"
 msgstr ""
 
-msgid "No data found"
+msgid "Meta"
 msgstr ""
 
-msgid "The GTFS file was empty."
+msgid "Existing route patterns:"
 msgstr ""
 
-msgid "Create Stops from GTFS"
+msgid "Reflect"
 msgstr ""
 
-msgid "GTFS-Stops"
+msgid "Required tags:"
 msgstr ""
 
-msgid "Type of stops to add"
+msgid "Common tags:"
 msgstr ""
 
-msgid "Time on your GPS device"
+msgid "Additional tags:"
 msgstr ""
 
-msgid "HH:MM:SS.sss"
+msgid "Add a new Tag"
 msgstr ""
 
-msgid "Time on your stopwatch"
+msgid "Name/Id"
 msgstr ""
 
-msgid "Time window"
+msgid "Find"
 msgstr ""
 
-msgid "seconds"
+msgid "Show"
 msgstr ""
 
-msgid "Move Threshold"
+msgid "Mark"
 msgstr ""
 
-msgid "Suggest Stops"
+msgid "Ref"
 msgstr ""
 
-msgid "Find"
+msgid "Stops are possible on the"
 msgstr ""
 
-msgid "Show"
+msgid "right hand side"
 msgstr ""
 
-msgid "Mark"
+msgid "left hand side"
 msgstr ""
 
-msgid "Catch"
+msgid "Maximum distance from route"
 msgstr ""
 
-msgid "Join"
+msgid "Suggest Stops"
 msgstr ""
 
-msgid "Public Transport: Join GTFS stops"
+msgid "Create Stops from GPX ..."
 msgstr ""
 
-msgid "State"
+msgid "Create Stops from a GPX file"
 msgstr ""
 
-msgid "[incomplete]"
+msgid "Select GPX file"
 msgstr ""
 
-msgid "[empty way]"
+msgid "The GPX file contained no tracks or waypoints."
 msgstr ""
 
-msgid "[ID] {0}"
+msgid "moved"
 msgstr ""
 
-msgid "[gap]"
+msgid "added"
 msgstr ""
 
-msgid "Route patterns ..."
+msgid "Public Transport: Enable GTFSStops"
 msgstr ""
 
-msgid "Edit Route patterns for public transport"
+msgid "Public Transport: Catch GTFS stops"
 msgstr ""
 
-msgid "Route Patterns"
+msgid "skipped"
 msgstr ""
 
-msgid "Overview"
+msgid "Public Transport: Disable GTFS"
 msgstr ""
 
-msgid "Itinerary"
+msgid "Public Transport: Join GTFS stops"
 msgstr ""
 
-msgid "Stops"
+msgid "Public Transport: Change stop type"
 msgstr ""
 
-msgid "Meta"
+msgid "Public Transport: Add track stop"
 msgstr ""
 
-msgid "Existing route patterns:"
+msgid "Public Transport: Delete track stop"
 msgstr ""
 
-msgid "Reflect"
+msgid "Public Transport: Detach track stop list"
 msgstr ""
 
-msgid "Required tags:"
+msgid "Public Transport: Edit track stop list"
 msgstr ""
 
-msgid "Common tags:"
+msgid "Public Transport: Relocate nodes in track stoplist"
 msgstr ""
 
-msgid "Additional tags:"
+msgid "Public Transport: sort track stop list"
 msgstr ""
 
-msgid "Add a new Tag"
+msgid "Public Transport: Suggest stops"
 msgstr ""
 
-msgid "Name/Id"
+msgid "Public Transport: Detach waypoints"
 msgstr ""
 
-msgid "Ref"
+msgid "Public Transport: Disable waypoints"
 msgstr ""
 
-msgid "Stops are possible on the"
+msgid "Public Transport: Enable waypoints"
 msgstr ""
 
-msgid "right hand side"
+msgid "Public Transport: Edit waypoint name"
 msgstr ""
 
-msgid "left hand side"
+msgid "rail"
 msgstr ""
 
-msgid "Maximum distance from route"
+msgid "Can''t parse a time from this string."
 msgstr ""
 
-msgid " [ID] {0}"
+msgid "Invalid value"
 msgstr ""
 
-msgid "Public Transport: Change stop type"
+msgid "Create Stops from GTFS"
 msgstr ""
 
-msgid "Create Stops from GPX ..."
+msgid "GTFS-Stops"
 msgstr ""
 
-msgid "Create Stops from a GPX file"
+msgid "Type of stops to add"
 msgstr ""
 
-msgid "Select GPX file"
+msgid "Time on your GPS device"
 msgstr ""
 
-msgid "The GPX file contained no tracks or waypoints."
+msgid "HH:MM:SS.sss"
 msgstr ""
 
-msgid "Create Stops from GPX"
+msgid "Time on your stopwatch"
 msgstr ""
 
-msgid "Tracks in this GPX file:"
+msgid "Time window"
 msgstr ""
 
-msgid "Detach"
+msgid "seconds"
 msgstr ""
 
-msgid "implicit"
+msgid "Move Threshold"
 msgstr ""
 
-msgid ""
-"The GPX file doesn''t contain valid trackpoints. Please use a GPX file that "
-"has trackpoints."
+msgid "Catch"
 msgstr ""
 
-msgid "GPX File Trouble"
+msgid "Join"
 msgstr ""
 
-msgid "unnamed"
+msgid "Create Stops from GPX"
 msgstr ""
 
-msgid "Public Transport: Add track stop"
+msgid "Tracks in this GPX file:"
 msgstr ""
 
-msgid "Public Transport: Delete track stop"
+msgid "Detach"
 msgstr ""
 
-msgid "Public Transport: Detach track stop list"
+msgid "implicit"
 msgstr ""
 
-msgid "Public Transport: Edit track stop list"
+msgid "State"
 msgstr ""
 
-msgid "Public Transport: Relocate nodes in track stoplist"
+msgid "[incomplete]"
 msgstr ""
 
-msgid "Public Transport: sort track stop list"
+msgid "[empty way]"
 msgstr ""
 
-msgid "Public Transport: Suggest stops"
+msgid "[gap]"
 msgstr ""
 
 msgid "Stopname"
 msgstr ""
 
-msgid "Public Transport: Detach waypoints"
+msgid " [ID] {0}"
 msgstr ""
 
-msgid "Public Transport: Disable waypoints"
+msgid ""
+"The GPX file doesn''t contain valid trackpoints. Please use a GPX file that "
+"has trackpoints."
 msgstr ""
 
-msgid "Public Transport: Enable waypoints"
+msgid "GPX File Trouble"
 msgstr ""
 
-msgid "Public Transport: Edit waypoint name"
+msgid "unnamed"
 msgstr ""
 
 msgid "Distance between stops"
@@ -33709,6 +33790,9 @@ msgstr ""
 msgid "JOSM Tag Editor Plugin"
 msgstr ""
 
+msgid "Presets"
+msgstr ""
+
 msgid "Abort tag editing and close dialog"
 msgstr ""
 
@@ -35634,6 +35718,26 @@ msgid_plural "Overwrite ''{0}'' tags {1} from {2} with new value ''{3}''?"
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Download from Sophox API"
+msgstr ""
+
+msgid ""
+"Find places of education at least 2km, and at most 3km from the center of "
+"the selection"
+msgstr ""
+
+msgid "Show/hide Sophox snippet list"
+msgstr ""
+
+msgid "help"
+msgstr ""
+
+msgid "Server: "
+msgstr ""
+
+msgid "Wikidata+OSM server"
+msgstr ""
+
 msgid "Search Wikidata items"
 msgstr ""
 
@@ -35707,26 +35811,6 @@ msgid ""
 "objects"
 msgstr ""
 
-msgid "Download from Wikosm API"
-msgstr ""
-
-msgid ""
-"Find places of education at least 2km, and at most 3km from the center of "
-"the selection"
-msgstr ""
-
-msgid "Show/hide Wikosm snippet list"
-msgstr ""
-
-msgid "help"
-msgstr ""
-
-msgid "Server: "
-msgstr ""
-
-msgid "Wikidata+OSM server"
-msgstr ""
-
 msgid "The Ultimate WMS Super-speed Turbo Challenge II"
 msgstr ""
 
diff --git a/i18n/po/uk.po b/i18n/po/uk.po
index 35ace1f..6211f35 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-10-30 03:38+0100\n"
-"PO-Revision-Date: 2017-10-20 11:08+0000\n"
-"Last-Translator: andygol <Unknown>\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"
 "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-10-30 05:05+0000\n"
-"X-Generator: Launchpad (build 18493)\n"
+"X-Launchpad-Export-Date: 2017-11-26 05:07+0000\n"
+"X-Generator: Launchpad (build 18509)\n"
 "Language: uk\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -462,12 +462,15 @@ msgstr "Вилучити шар"
 msgid "Delete the active layer. Does not delete the associated file."
 msgstr "Вилучення активного шару. Файл повʼязаний з ним не вилучається."
 
-msgid "Toggle dialogs panel"
+msgid "Dialogs panel"
 msgstr "Панель діалогів"
 
 msgid "Toggle dialogs panel, maximize mapview"
 msgstr "Приховує панель діалогів, для збільшення площі для редагування"
 
+msgid "Toggle dialogs panel"
+msgstr "Панель діалогів"
+
 msgid "Distribute Nodes"
 msgstr "Розподілити точки рівномірно"
 
@@ -7110,6 +7113,9 @@ msgstr "Координати: "
 msgid "Coordinates (projected): "
 msgstr "Координати (проекція): "
 
+msgid "UTM Zone"
+msgstr "Зона UTM"
+
 msgid "Part of: "
 msgstr "Частина: "
 
@@ -9643,6 +9649,13 @@ msgid "Check \"Save\" to save the layer to the file specified on the left."
 msgstr ""
 "Позначте \"Зберегти\" для збереження шару у файл, зазначений ліворуч."
 
+msgid ""
+"A background upload is already in progress. Kindly wait for it to finish "
+"before uploading new changes"
+msgstr ""
+"Фонове завантаження вже виконується. Будь ласка, зачекайте, поки воно "
+"закінчиться, перш ніж завантажувати нові зміни"
+
 msgid "I would like someone to review my edits."
 msgstr "Я хотів би, щоб хтось перевірив мої правки."
 
@@ -10917,6 +10930,10 @@ msgstr "Змініть проекцію або вилучіть шар."
 msgid "Save Layer"
 msgstr "Зберегти шар"
 
+msgid "Trying to set a read only data layer as edit layer"
+msgstr ""
+"Спроба встановити шар даних, який є лише для читання, як редагований шар"
+
 msgid "{0} note"
 msgid_plural "{0} notes"
 msgstr[0] "{0} нотатка"
@@ -11852,11 +11869,6 @@ msgstr ""
 msgid "Failed to parse Mappaint styles from ''{0}''. Error was: {1}"
 msgstr "Не вдалось розібрати стилі кольорів мапи з ''{0}''. Помилка: {1}"
 
-msgid ""
-"Detected deprecated ''{0}'' in ''{1}'' which will be removed shortly. Use "
-"''{2}'' instead."
-msgstr ""
-
 msgid "Failed to locate image ''{0}''"
 msgstr "Збій пошуку зображення ''{0}''"
 
@@ -13166,6 +13178,9 @@ msgstr "Показати заставку під час запуску"
 msgid "Show object ID in selection lists"
 msgstr "Показувати ідентифікатор об’єктів у списку вибору"
 
+msgid "Show node coordinates in selection lists"
+msgstr "Показати координати точок у списках вибору"
+
 msgid "Show localized name in selection lists"
 msgstr "Показати локалізовані назви в переліку вибору"
 
@@ -13985,9 +14000,6 @@ msgstr "Система координат UTM"
 msgid "UTM"
 msgstr "UTM"
 
-msgid "UTM Zone"
-msgstr "Зона UTM"
-
 msgid "North"
 msgstr "Північна"
 
@@ -14503,9 +14515,6 @@ msgstr "Вкладені елементи заготовок без батькі
 msgid "Error parsing {0}: "
 msgstr "Помилка синтаксичного аналізу: {0} "
 
-msgid "Presets"
-msgstr "Заготовки"
-
 msgid "Search for objects by preset..."
 msgstr "Пошук обʼєктів по заготовках…"
 
@@ -17437,6 +17446,18 @@ msgstr "вегетаріанська"
 msgid "korean"
 msgstr "корейська"
 
+msgid "donut"
+msgstr "пончики"
+
+msgid "mediterranean"
+msgstr "середземноморська"
+
+msgid "friture"
+msgstr "фритюр"
+
+msgid "crepe"
+msgstr "млинці"
+
 msgid "Internet access"
 msgstr "Інтернет-доступ"
 
@@ -20308,8 +20329,17 @@ msgstr "Наявність електрики"
 msgid "Tents allowed"
 msgstr "Дозволяються намети"
 
-msgid "Camping Site"
-msgstr "Кемпінг"
+msgid "Campsite"
+msgstr "Табір"
+
+msgid "Caravans allowed"
+msgstr "Трейлер парк"
+
+msgid "Backcountry"
+msgstr "Наметовий табір"
+
+msgid "Group only access"
+msgstr "Тільки організовані групи"
 
 msgid "Food+Drinks"
 msgstr "Харчування"
@@ -25168,6 +25198,16 @@ msgstr ""
 "окремих регіонів, що мають покриття +Vivid або знімкі зроблені на "
 "замовлення, розподільча здатність 50см або краще; оновлюється частіше."
 
+msgid "DigitalGlobe Premium Imagery Vintage"
+msgstr "Знімки DigitalGlobe Premium Vintage"
+
+msgid ""
+"Imagery boundaries and capture dates. Labels appear at zoom level 14 and "
+"higher."
+msgstr ""
+"Межі і дати знімків. Підписи показуються при рівні масштабування від 14 і "
+"вище."
+
 msgid "DigitalGlobe Standard Imagery"
 msgstr "Знімки DigitalGlobe Standard"
 
@@ -25181,6 +25221,9 @@ msgstr ""
 "місця, доповнені знімками Landsat. Середній вік знімків 2.31 роки, в деяких "
 "районах знімки оновлюються двічі на рік."
 
+msgid "DigitalGlobe Standard Imagery Vintage"
+msgstr "Знімки DigitalGlobe Standard Vintage"
+
 msgid "Esri World Imagery"
 msgstr "Esri World Imagery"
 
@@ -25230,7 +25273,7 @@ msgid "Stamen Terrain"
 msgstr "Stamen Terrain"
 
 msgid "Cambodia, Laos, Thailand, Vietnam, Malaysia, Myanmar bilingual"
-msgstr ""
+msgstr "Камбоджа, Лаос, Таїланд, Вʼєтнам, Малайзія, Мʼянма (двомовна)"
 
 msgid "OpenPT Map (overlay)"
 msgstr "OpenPT Map (шар)"
@@ -25244,6 +25287,12 @@ msgstr "Strava теплова мапа бігунів"
 msgid "Strava cycling and running heatmap"
 msgstr "Strava теплова мапа для бігунів та велосипедистів"
 
+msgid "Strava water sports heatmap"
+msgstr "Strava - водні види спорту"
+
+msgid "Strava winter sports heatmap"
+msgstr "Strava - зимові види спорту"
+
 msgid "Locator Overlay"
 msgstr "Шар Locator"
 
@@ -25309,11 +25358,11 @@ msgstr ""
 "(true color)"
 
 msgid "Municipality of Tirana (Open Labs GeoPortal)"
-msgstr ""
+msgstr "Муніципалітет Тирани (Open Labs GeoPortal)"
 
 msgid ""
 "Streets & Builings provided by the Muncipality of Tirana hosted by Open Labs"
-msgstr ""
+msgstr "Дороги та будівлі в Тирані, надаються гео-порталом Open Labs"
 
 msgid "imagico.de OSM images for mapping: Southern Transantarctic Mountains"
 msgstr "imagico.de - знімки OSM для мапінгу: Південні Трансантарктичні гори"
@@ -25656,6 +25705,9 @@ msgstr "SPW(allonie) цифрове зображення PICC"
 msgid "SPW(allonie) most recent aerial imagery"
 msgstr "SPW(allonie) найсвіжіші знімки"
 
+msgid "SPW(allonie) 2016 aerial imagery"
+msgstr "SPW(allonie) аерофото 2016"
+
 msgid "SPW(allonie) 2015 aerial imagery"
 msgstr "SPW(allonie) 2015 аерофото"
 
@@ -25666,7 +25718,7 @@ msgid "SPW(allonie) 2009-2010 aerial imagery"
 msgstr "SPW(allonie) 2009-2010 аерофото"
 
 msgid "SPW(allonie) shaded relief"
-msgstr ""
+msgstr "SPW(allonie) затінений рельєф"
 
 msgid "TEC bus lines"
 msgstr "Автобусний маршрут TEC"
@@ -25704,6 +25756,16 @@ msgstr "IBGE - федеральний округ"
 msgid "Addresses data from IBGE"
 msgstr "Адресні дані від IBGE"
 
+msgid "Street names IBGE Salvador-BA"
+msgstr "IBGE - назви вулиц м. Сальвадор (Баія)"
+
+msgid ""
+"Streets geometry and names of Salvador, Bahia. Source: Faces de Logradouro - "
+"IBGE."
+msgstr ""
+"Геометрія та назви вулиць, місто Сальвадор, Баія. Джерело: Faces de "
+"Logradouro - IBGE."
+
 msgid "Rio Mosaic 2013"
 msgstr "Ріо - мозаїка 2013"
 
@@ -26471,6 +26533,9 @@ msgstr "Топографічна базова мапа Південного Ті
 msgid "Japan GSI ortho Imagery"
 msgstr "Японія: ортознімки GSI"
 
+msgid "Japan GSI Standard Map"
+msgstr ""
+
 msgid "imagico.de OSM images for mapping: Aral Sea (low water level)"
 msgstr ""
 "imagico.de - знімки OSM для мапінгу: Аральське море (низький рівень води)"
@@ -26504,8 +26569,8 @@ msgstr "50см ортофото - Латвія"
 msgid "20cm ortho - Latvia - Coastline"
 msgstr "20см ортофото - Латвія - Берегова лінія"
 
-msgid "1.cikla ortofotokarte - Latvia"
-msgstr "Цикл 1 ортофотоплан - Латвія"
+msgid "Orthophoto 1st cycle (1994-1999) - Latvia"
+msgstr ""
 
 msgid "ORT10LT (Lithuania)"
 msgstr "ORT10LT (Литва)"
@@ -26513,8 +26578,11 @@ msgstr "ORT10LT (Литва)"
 msgid "geoportail.lu all layers"
 msgstr "geoportail.lu всі шари"
 
+msgid "geoportail.lu ortho latest"
+msgstr ""
+
 msgid "geoportail.lu ortho 2016"
-msgstr "geoportail.lu орто 2016"
+msgstr ""
 
 msgid "Luxembourg Inspire Railway"
 msgstr "Люксембург Inspire Залізниця"
@@ -27112,7 +27180,7 @@ msgid "San Juan Metro Area: 2013 USACE Orthophotos"
 msgstr "Міська агломерація Сан-Хуан: ортофото USACE 2013"
 
 msgid "PR/USVI 2017 NOAA Hurricane Maria imagery"
-msgstr ""
+msgstr "PR/USVI 2017 NOAA Знімки урагану \"Марія\""
 
 msgid "WA 2013 aerial imagery for San Juan County"
 msgstr "Округ Сан-Хуан (Вашингтон) - аерофото 2013"
@@ -28193,6 +28261,9 @@ msgstr "невірне значення: {0}"
 msgid "{0} on a node. Should be used on a way."
 msgstr "{0} на точці. Слід застосовувати до лінії."
 
+msgid "{0} on a node. Should be used on a way or relation."
+msgstr "{0} на точці. Потрібно застосовувати для ліній та звʼязків."
+
 msgid "{0} on a node. Should be drawn as an area."
 msgstr "{0} на точці. Слід застосовувати до полігону."
 
@@ -28345,10 +28416,10 @@ msgid "numerical key"
 msgstr "числовий ключ"
 
 msgid "{0} value with + sign"
-msgstr ""
+msgstr "{0} значення зі знаком +"
 
 msgid "{0} should be an integer value between -5 and 5"
-msgstr ""
+msgstr "{0} повинно бути цілим числом між -5 та 5"
 
 msgid "{0} should have numbers only with optional .5 increments"
 msgstr "̱{0} повине бути тільки числом (з необовʼязковим кроком 0.5)"
@@ -28443,6 +28514,9 @@ msgstr "{0} не має сенсу"
 msgid "Nodes duplicating parent way tags"
 msgstr "Точки дублюють теґи батьківської лінії"
 
+msgid "{0} together with {1} and {2}. Remove {0}."
+msgstr "{0} разом з {1} та {2}. Вилучіть {0}."
+
 msgid ""
 "wikipedia tag has no language given, use ''wikipedia''=''language:page "
 "title''"
@@ -29386,6 +29460,21 @@ msgstr "Надсилання треків на сайт openstreetmap.org"
 msgid "Importing..."
 msgstr "Імпортується…"
 
+msgid "Shape is started incorrectly"
+msgstr "Фігура починається неправильно"
+
+msgid "Can''t load SVG diagram"
+msgstr "Неможливо завантажити SVG діаграму"
+
+msgid "Can''t find root SVG element"
+msgstr "Неможливо визначити кореневий елемент SVG"
+
+msgid "Import primitives"
+msgstr "Імпорт примітивів"
+
+msgid "Cannot find configuration file!"
+msgstr "Неможливо знайти файл налаштувань!"
+
 msgid "DXF files [ImportDxf plugin] (*.dxf)"
 msgstr "Файли DXF [втулок ImportDxf] (*.dxf)"
 
@@ -30049,6 +30138,9 @@ msgstr "Увімкнути експериментальні бета-функц
 msgid "Download mode"
 msgstr "Режим завантаження"
 
+msgid "Number of images to be pre-fetched (forwards and backwards)"
+msgstr "Кількість знімків для попереднього завантаження (вперед та назад)"
+
 msgid "You are logged in as ''{0}''."
 msgstr "Ви увійшли як  ''{0}''."
 
@@ -30273,11 +30365,24 @@ msgid "only when manually requested"
 msgstr "тільки під час отримання запиту вручну"
 
 msgid ""
-"The downloaded OSM area is too big. Download mode has been changed to OSM "
-"area until the layer is restarted."
+"The Mapillary layer has stopped downloading images, because the requested "
+"area is too big!"
 msgstr ""
-"Завантажена ділянка з даними OSM завелика. Режим завантаження змінено до "
-"ділянки даних з OSM до наступного перезапуску шару."
+"Завантаження знімків до шару Mapillary призупинено через надмірну розмір "
+"ділянки для завантаження!"
+
+msgid ""
+"To solve this problem, you could zoom in and load a smaller area of the map."
+msgstr ""
+"Для розвʼязання цієї проблеми ви можете наблизитись або завантажити меншу "
+"ділянку мапи."
+
+msgid ""
+"To solve this problem, you could switch to download mode ''{0}'' and load "
+"Mapillary images for a smaller portion of the map."
+msgstr ""
+"Для розвʼязання цієї проблеми ви можете перемикнутися в режим завантаження "
+"''{0}'' та завантажити знімки Mapillary для меншої ділянки мапи."
 
 msgid "Downloading"
 msgstr "Завантаження"
@@ -33907,23 +34012,6 @@ msgstr "Злиття перекриття ліній."
 msgid "Merge Overlap (combine)"
 msgstr "Злиття перекриття (комбіноване)"
 
-msgid ""
-"<html>A role based relation membership was copied to all new ways.<br>You "
-"should verify this and correct it when necessary.</html>"
-msgstr ""
-"<html>Участь у зв’язках, з урахуванням ролей, була поширена на всі нові "
-"лінії.<br>Результат необхідно перевірити та виправити за потреби.</html>"
-
-msgid ""
-"<html>A relation membership was copied to all new ways.<br>You should verify "
-"this and correct it when necessary.</html>"
-msgstr ""
-"<html>Участь у зв’язках була поширена на всі нові лінії. <br> Результат "
-"необхідно перевірити та виправити за потреби.</html>"
-
-msgid "Split way"
-msgstr "Розділити лінію"
-
 msgid "Michigan Left"
 msgstr "Мічиганський поворот ліворуч"
 
@@ -35482,33 +35570,6 @@ msgid "PT: Route passes a oneway road in the wrong direction"
 msgstr ""
 "ГТ: Маршрут проходить по дорозі з одностороннім рухом в помилковому напрямку"
 
-msgid "moved"
-msgstr "пересунуто"
-
-msgid "rail"
-msgstr "рейка"
-
-msgid "Can''t parse a time from this string."
-msgstr "Неможливо визначити час із цього рядка."
-
-msgid "Invalid value"
-msgstr "Некоректне значення"
-
-msgid "added"
-msgstr "додано"
-
-msgid "Public Transport: Enable GTFSStops"
-msgstr "Громадський транспорт: Увімкнути зупинки GTFS"
-
-msgid "Public Transport: Catch GTFS stops"
-msgstr "Громадський транспорт: Захопити зупинки GTFS"
-
-msgid "skipped"
-msgstr "пропущено"
-
-msgid "Public Transport: Disable GTFS"
-msgstr "Громадський транспорт: Відключити GTFS"
-
 msgid "Create Stops from GTFS ..."
 msgstr "Створити зупинки з GTFS …"
 
@@ -35537,69 +35598,9 @@ msgstr "Дані відсутні"
 msgid "The GTFS file was empty."
 msgstr "Файл GTFS порожній."
 
-msgid "Create Stops from GTFS"
-msgstr "Створити зупинки з GTFS"
-
-msgid "GTFS-Stops"
-msgstr "GTFS-Зупинки"
-
-msgid "Type of stops to add"
-msgstr "Типи зупинок для додавання"
-
-msgid "Time on your GPS device"
-msgstr "Час на вашому GPS пристрої"
-
-msgid "HH:MM:SS.sss"
-msgstr "ГГ:ХХ:СС.ссс"
-
-msgid "Time on your stopwatch"
-msgstr "Час на вашому годиннику"
-
-msgid "Time window"
-msgstr "Час"
-
-msgid "seconds"
-msgstr "секунд(и)"
-
-msgid "Move Threshold"
-msgstr "Межа зсуву"
-
-msgid "Suggest Stops"
-msgstr "Пропонувати зупинки"
-
-msgid "Find"
-msgstr "Шукати"
-
-msgid "Show"
-msgstr "Показати"
-
-msgid "Mark"
-msgstr "Позначити"
-
-msgid "Catch"
-msgstr "Захопити"
-
-msgid "Join"
-msgstr "Приєднати"
-
-msgid "Public Transport: Join GTFS stops"
-msgstr "Громадський транспорт: Приєднати зупинки GTFS"
-
-msgid "State"
-msgstr "Штат"
-
-msgid "[incomplete]"
-msgstr "[неповний]"
-
-msgid "[empty way]"
-msgstr "[порожня лінія]"
-
 msgid "[ID] {0}"
 msgstr "[ID] {0}"
 
-msgid "[gap]"
-msgstr "[пропуск]"
-
 msgid "Route patterns ..."
 msgstr "Шаблони маршрутів…"
 
@@ -35642,6 +35643,15 @@ msgstr "Додати теґ"
 msgid "Name/Id"
 msgstr "Назва/Ід"
 
+msgid "Find"
+msgstr "Шукати"
+
+msgid "Show"
+msgstr "Показати"
+
+msgid "Mark"
+msgstr "Позначити"
+
 msgid "Ref"
 msgstr "Посилання"
 
@@ -35657,11 +35667,8 @@ msgstr "ліворуч"
 msgid "Maximum distance from route"
 msgstr "Максимальна відстань від маршруту"
 
-msgid " [ID] {0}"
-msgstr " [ID] {0}"
-
-msgid "Public Transport: Change stop type"
-msgstr "Громадський транспорт: Змінити тип зупинки"
+msgid "Suggest Stops"
+msgstr "Пропонувати зупинки"
 
 msgid "Create Stops from GPX ..."
 msgstr "Створити зупинки по GPX…"
@@ -35675,30 +35682,29 @@ msgstr "Вибрати файл GPX"
 msgid "The GPX file contained no tracks or waypoints."
 msgstr "Файл GPX не містить ні треку, ні маршрутних точок."
 
-msgid "Create Stops from GPX"
-msgstr "Створити зупинки з GPX"
+msgid "moved"
+msgstr "пересунуто"
 
-msgid "Tracks in this GPX file:"
-msgstr "Треки у файлі GPX:"
+msgid "added"
+msgstr "додано"
 
-msgid "Detach"
-msgstr "Відокремити"
+msgid "Public Transport: Enable GTFSStops"
+msgstr "Громадський транспорт: Увімкнути зупинки GTFS"
 
-msgid "implicit"
-msgstr "неявно"
+msgid "Public Transport: Catch GTFS stops"
+msgstr "Громадський транспорт: Захопити зупинки GTFS"
 
-msgid ""
-"The GPX file doesn''t contain valid trackpoints. Please use a GPX file that "
-"has trackpoints."
-msgstr ""
-"Файл GPX не містить правильних точок треку. Будь ласка, скористайтесь файлом "
-"GPX, який містить інформацію про трек."
+msgid "skipped"
+msgstr "пропущено"
 
-msgid "GPX File Trouble"
-msgstr "Проблеми з файлом GPX"
+msgid "Public Transport: Disable GTFS"
+msgstr "Громадський транспорт: Відключити GTFS"
 
-msgid "unnamed"
-msgstr "без назви"
+msgid "Public Transport: Join GTFS stops"
+msgstr "Громадський транспорт: Приєднати зупинки GTFS"
+
+msgid "Public Transport: Change stop type"
+msgstr "Громадський транспорт: Змінити тип зупинки"
 
 msgid "Public Transport: Add track stop"
 msgstr "Громадський транспорт: Додати зупинку"
@@ -35721,9 +35727,6 @@ msgstr "Громадський транспорт: Відсортувати пе
 msgid "Public Transport: Suggest stops"
 msgstr "Громадський транспорт: Пропонувати зупинки"
 
-msgid "Stopname"
-msgstr "Назва зупинки"
-
 msgid "Public Transport: Detach waypoints"
 msgstr "Громадський транспорт: Відокремити маршрутні точки"
 
@@ -35736,6 +35739,91 @@ msgstr "Громадський транспорт: Включити маршру
 msgid "Public Transport: Edit waypoint name"
 msgstr "Громадський транспорт: Редагувати назву маршрутної точки"
 
+msgid "rail"
+msgstr "рейка"
+
+msgid "Can''t parse a time from this string."
+msgstr "Неможливо визначити час із цього рядка."
+
+msgid "Invalid value"
+msgstr "Некоректне значення"
+
+msgid "Create Stops from GTFS"
+msgstr "Створити зупинки з GTFS"
+
+msgid "GTFS-Stops"
+msgstr "GTFS-Зупинки"
+
+msgid "Type of stops to add"
+msgstr "Типи зупинок для додавання"
+
+msgid "Time on your GPS device"
+msgstr "Час на вашому GPS пристрої"
+
+msgid "HH:MM:SS.sss"
+msgstr "ГГ:ХХ:СС.ссс"
+
+msgid "Time on your stopwatch"
+msgstr "Час на вашому годиннику"
+
+msgid "Time window"
+msgstr "Час"
+
+msgid "seconds"
+msgstr "секунд(и)"
+
+msgid "Move Threshold"
+msgstr "Межа зсуву"
+
+msgid "Catch"
+msgstr "Захопити"
+
+msgid "Join"
+msgstr "Приєднати"
+
+msgid "Create Stops from GPX"
+msgstr "Створити зупинки з GPX"
+
+msgid "Tracks in this GPX file:"
+msgstr "Треки у файлі GPX:"
+
+msgid "Detach"
+msgstr "Відокремити"
+
+msgid "implicit"
+msgstr "неявно"
+
+msgid "State"
+msgstr "Штат"
+
+msgid "[incomplete]"
+msgstr "[неповний]"
+
+msgid "[empty way]"
+msgstr "[порожня лінія]"
+
+msgid "[gap]"
+msgstr "[пропуск]"
+
+msgid "Stopname"
+msgstr "Назва зупинки"
+
+msgid " [ID] {0}"
+msgstr " [ID] {0}"
+
+msgid ""
+"The GPX file doesn''t contain valid trackpoints. Please use a GPX file that "
+"has trackpoints."
+msgstr ""
+"Файл GPX не містить правильних точок треку. Будь ласка, скористайтесь файлом "
+"GPX, який містить інформацію про трек."
+
+msgid "GPX File Trouble"
+msgstr "Проблеми з файлом GPX"
+
+msgid "unnamed"
+msgstr "без назви"
+
 msgid "Distance between stops"
 msgstr "Відстань між зупинками"
 
@@ -36260,10 +36348,10 @@ msgid "Select a map object"
 msgstr "Виділіть об’єкт на мапі"
 
 msgid "Please enter minimal distance in metres"
-msgstr ""
+msgstr "Введіть мінімальну відстань в метрах"
 
 msgid "Please enter numeric angle in degrees"
-msgstr ""
+msgstr "Введіть величину кута в градусах"
 
 msgid "Shape actions panel"
 msgstr "Панель дій з формами"
@@ -36497,6 +36585,9 @@ msgstr "Відкриває діалог редактора теґів"
 msgid "JOSM Tag Editor Plugin"
 msgstr "Втулок JOSM для редагування теґів"
 
+msgid "Presets"
+msgstr "Заготовки"
+
 msgid "Abort tag editing and close dialog"
 msgstr "Перервати редагування теґів і закрити діалог"
 
@@ -38655,6 +38746,27 @@ msgstr[0] "Перезаписати ''{0}'' теґ {1} з {2} новим зна
 msgstr[1] "Перезаписати ''{0}'' теґи {1} з {2} новим значенням ''{3}''?"
 msgstr[2] "Перезаписати ''{0}'' теґів {1} з {2} новим значенням ''{3}''?"
 
+msgid "Download from Sophox API"
+msgstr "Завантажити з Sophox API"
+
+msgid ""
+"Find places of education at least 2km, and at most 3km from the center of "
+"the selection"
+msgstr ""
+"Пошук навчальних закладів у межах від 2 до 3 км від центру виділеної ділянки"
+
+msgid "Show/hide Sophox snippet list"
+msgstr "Показати/приховати список фрагментів Sophox"
+
+msgid "help"
+msgstr "довідка"
+
+msgid "Server: "
+msgstr "Сервер: "
+
+msgid "Wikidata+OSM server"
+msgstr "Сервер Wikidata+OSM"
+
 msgid "Search Wikidata items"
 msgstr "Пошук у Вікіданих"
 
@@ -38731,27 +38843,6 @@ msgid ""
 msgstr ""
 "Додає теґ ''wikipedia'', який відповідає певній статті про виділені об’єкти"
 
-msgid "Download from Wikosm API"
-msgstr "Завантажити з Wikosm API"
-
-msgid ""
-"Find places of education at least 2km, and at most 3km from the center of "
-"the selection"
-msgstr ""
-"Пошук навчальних закладів у межах від 2 до 3 км від центру виділеної ділянки"
-
-msgid "Show/hide Wikosm snippet list"
-msgstr "Показати/приховати фрагменти запитів Wikosm"
-
-msgid "help"
-msgstr "довідка"
-
-msgid "Server: "
-msgstr "Сервер: "
-
-msgid "Wikidata+OSM server"
-msgstr "Сервер Wikidata+OSM"
-
 msgid "The Ultimate WMS Super-speed Turbo Challenge II"
 msgstr "The Ultimate WMS Super-speed Turbo Challenge II"
 
diff --git a/i18n/po/ur.po b/i18n/po/ur.po
index 090ef43..bf8958f 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-10-30 03:38+0100\n"
+"POT-Creation-Date: 2017-11-26 00:06+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-10-30 05:05+0000\n"
-"X-Generator: Launchpad (build 18493)\n"
+"X-Launchpad-Export-Date: 2017-11-26 05:08+0000\n"
+"X-Generator: Launchpad (build 18509)\n"
 "Language: ur\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -421,12 +421,15 @@ msgstr ""
 msgid "Delete the active layer. Does not delete the associated file."
 msgstr ""
 
-msgid "Toggle dialogs panel"
+msgid "Dialogs panel"
 msgstr ""
 
 msgid "Toggle dialogs panel, maximize mapview"
 msgstr ""
 
+msgid "Toggle dialogs panel"
+msgstr ""
+
 msgid "Distribute Nodes"
 msgstr ""
 
@@ -6488,6 +6491,9 @@ msgstr ""
 msgid "Coordinates (projected): "
 msgstr ""
 
+msgid "UTM Zone"
+msgstr ""
+
 msgid "Part of: "
 msgstr ""
 
@@ -8786,6 +8792,11 @@ msgstr ""
 msgid "Check \"Save\" to save the layer to the file specified on the left."
 msgstr ""
 
+msgid ""
+"A background upload is already in progress. Kindly wait for it to finish "
+"before uploading new changes"
+msgstr ""
+
 msgid "I would like someone to review my edits."
 msgstr ""
 
@@ -9894,6 +9905,9 @@ msgstr ""
 msgid "Save Layer"
 msgstr ""
 
+msgid "Trying to set a read only data layer as edit layer"
+msgstr ""
+
 msgid "{0} note"
 msgid_plural "{0} notes"
 msgstr[0] ""
@@ -10724,11 +10738,6 @@ msgstr ""
 msgid "Failed to parse Mappaint styles from ''{0}''. Error was: {1}"
 msgstr ""
 
-msgid ""
-"Detected deprecated ''{0}'' in ''{1}'' which will be removed shortly. Use "
-"''{2}'' instead."
-msgstr ""
-
 msgid "Failed to locate image ''{0}''"
 msgstr ""
 
@@ -11893,6 +11902,9 @@ msgstr ""
 msgid "Show object ID in selection lists"
 msgstr ""
 
+msgid "Show node coordinates in selection lists"
+msgstr ""
+
 msgid "Show localized name in selection lists"
 msgstr ""
 
@@ -12649,9 +12661,6 @@ msgstr ""
 msgid "UTM"
 msgstr ""
 
-msgid "UTM Zone"
-msgstr ""
-
 msgid "North"
 msgstr ""
 
@@ -13119,9 +13128,6 @@ msgstr ""
 msgid "Error parsing {0}: "
 msgstr ""
 
-msgid "Presets"
-msgstr ""
-
 msgid "Search for objects by preset..."
 msgstr ""
 
@@ -15663,6 +15669,18 @@ msgstr ""
 msgid "korean"
 msgstr ""
 
+msgid "donut"
+msgstr ""
+
+msgid "mediterranean"
+msgstr ""
+
+msgid "friture"
+msgstr ""
+
+msgid "crepe"
+msgstr ""
+
 msgid "Internet access"
 msgstr ""
 
@@ -18505,7 +18523,16 @@ msgstr ""
 msgid "Tents allowed"
 msgstr ""
 
-msgid "Camping Site"
+msgid "Campsite"
+msgstr ""
+
+msgid "Caravans allowed"
+msgstr ""
+
+msgid "Backcountry"
+msgstr ""
+
+msgid "Group only access"
 msgstr ""
 
 msgid "Food+Drinks"
@@ -23334,6 +23361,14 @@ msgid ""
 "resolution or better, and refreshed more frequently with ongoing updates."
 msgstr ""
 
+msgid "DigitalGlobe Premium Imagery Vintage"
+msgstr ""
+
+msgid ""
+"Imagery boundaries and capture dates. Labels appear at zoom level 14 and "
+"higher."
+msgstr ""
+
 msgid "DigitalGlobe Standard Imagery"
 msgstr ""
 
@@ -23343,6 +23378,9 @@ msgid ""
 "Landsat. Average age is 2.31 years, with some areas updated 2x per year."
 msgstr ""
 
+msgid "DigitalGlobe Standard Imagery Vintage"
+msgstr ""
+
 msgid "Esri World Imagery"
 msgstr ""
 
@@ -23406,6 +23444,12 @@ msgstr ""
 msgid "Strava cycling and running heatmap"
 msgstr ""
 
+msgid "Strava water sports heatmap"
+msgstr ""
+
+msgid "Strava winter sports heatmap"
+msgstr ""
+
 msgid "Locator Overlay"
 msgstr ""
 
@@ -23810,6 +23854,9 @@ msgstr ""
 msgid "SPW(allonie) most recent aerial imagery"
 msgstr ""
 
+msgid "SPW(allonie) 2016 aerial imagery"
+msgstr ""
+
 msgid "SPW(allonie) 2015 aerial imagery"
 msgstr ""
 
@@ -23855,6 +23902,14 @@ msgstr ""
 msgid "Addresses data from IBGE"
 msgstr ""
 
+msgid "Street names IBGE Salvador-BA"
+msgstr ""
+
+msgid ""
+"Streets geometry and names of Salvador, Bahia. Source: Faces de Logradouro - "
+"IBGE."
+msgstr ""
+
 msgid "Rio Mosaic 2013"
 msgstr ""
 
@@ -24585,6 +24640,9 @@ msgstr ""
 msgid "Japan GSI ortho Imagery"
 msgstr ""
 
+msgid "Japan GSI Standard Map"
+msgstr ""
+
 msgid "imagico.de OSM images for mapping: Aral Sea (low water level)"
 msgstr ""
 
@@ -24614,7 +24672,7 @@ msgstr ""
 msgid "20cm ortho - Latvia - Coastline"
 msgstr ""
 
-msgid "1.cikla ortofotokarte - Latvia"
+msgid "Orthophoto 1st cycle (1994-1999) - Latvia"
 msgstr ""
 
 msgid "ORT10LT (Lithuania)"
@@ -24623,6 +24681,9 @@ msgstr ""
 msgid "geoportail.lu all layers"
 msgstr ""
 
+msgid "geoportail.lu ortho latest"
+msgstr ""
+
 msgid "geoportail.lu ortho 2016"
 msgstr ""
 
@@ -26113,6 +26174,9 @@ msgstr ""
 msgid "{0} on a node. Should be used on a way."
 msgstr ""
 
+msgid "{0} on a node. Should be used on a way or relation."
+msgstr ""
+
 msgid "{0} on a node. Should be drawn as an area."
 msgstr ""
 
@@ -26340,6 +26404,9 @@ msgstr ""
 msgid "Nodes duplicating parent way tags"
 msgstr ""
 
+msgid "{0} together with {1} and {2}. Remove {0}."
+msgstr ""
+
 msgid ""
 "wikipedia tag has no language given, use ''wikipedia''=''language:page "
 "title''"
@@ -27104,6 +27171,21 @@ msgstr ""
 msgid "Importing..."
 msgstr ""
 
+msgid "Shape is started incorrectly"
+msgstr ""
+
+msgid "Can''t load SVG diagram"
+msgstr ""
+
+msgid "Can''t find root SVG element"
+msgstr ""
+
+msgid "Import primitives"
+msgstr ""
+
+msgid "Cannot find configuration file!"
+msgstr ""
+
 msgid "DXF files [ImportDxf plugin] (*.dxf)"
 msgstr ""
 
@@ -27743,6 +27825,9 @@ msgstr ""
 msgid "Download mode"
 msgstr ""
 
+msgid "Number of images to be pre-fetched (forwards and backwards)"
+msgstr ""
+
 msgid "You are logged in as ''{0}''."
 msgstr ""
 
@@ -27953,8 +28038,17 @@ msgid "only when manually requested"
 msgstr ""
 
 msgid ""
-"The downloaded OSM area is too big. Download mode has been changed to OSM "
-"area until the layer is restarted."
+"The Mapillary layer has stopped downloading images, because the requested "
+"area is too big!"
+msgstr ""
+
+msgid ""
+"To solve this problem, you could zoom in and load a smaller area of the map."
+msgstr ""
+
+msgid ""
+"To solve this problem, you could switch to download mode ''{0}'' and load "
+"Mapillary images for a smaller portion of the map."
 msgstr ""
 
 msgid "Downloading"
@@ -31266,19 +31360,6 @@ msgstr ""
 msgid "Merge Overlap (combine)"
 msgstr ""
 
-msgid ""
-"<html>A role based relation membership was copied to all new ways.<br>You "
-"should verify this and correct it when necessary.</html>"
-msgstr ""
-
-msgid ""
-"<html>A relation membership was copied to all new ways.<br>You should verify "
-"this and correct it when necessary.</html>"
-msgstr ""
-
-msgid "Split way"
-msgstr ""
-
 msgid "Michigan Left"
 msgstr ""
 
@@ -32733,254 +32814,254 @@ msgstr ""
 msgid "PT: Route passes a oneway road in the wrong direction"
 msgstr ""
 
-msgid "moved"
+msgid "Create Stops from GTFS ..."
 msgstr ""
 
-msgid "rail"
+msgid "Create Stops from a GTFS file"
 msgstr ""
 
-msgid "Can''t parse a time from this string."
+msgid "Select GTFS file (stops.txt)"
 msgstr ""
 
-msgid "Invalid value"
+msgid "File \"{0}\" does not exist"
 msgstr ""
 
-msgid "added"
+msgid "IOException \"{0}\" occurred"
 msgstr ""
 
-msgid "Public Transport: Enable GTFSStops"
+msgid ""
+"There exists no dataset. Try to download data from the server or open an OSM "
+"file."
 msgstr ""
 
-msgid "Public Transport: Catch GTFS stops"
+msgid "No data found"
 msgstr ""
 
-msgid "skipped"
+msgid "The GTFS file was empty."
 msgstr ""
 
-msgid "Public Transport: Disable GTFS"
+msgid "[ID] {0}"
 msgstr ""
 
-msgid "Create Stops from GTFS ..."
+msgid "Route patterns ..."
 msgstr ""
 
-msgid "Create Stops from a GTFS file"
+msgid "Edit Route patterns for public transport"
 msgstr ""
 
-msgid "Select GTFS file (stops.txt)"
+msgid "Route Patterns"
 msgstr ""
 
-msgid "File \"{0}\" does not exist"
+msgid "Overview"
 msgstr ""
 
-msgid "IOException \"{0}\" occurred"
+msgid "Itinerary"
 msgstr ""
 
-msgid ""
-"There exists no dataset. Try to download data from the server or open an OSM "
-"file."
+msgid "Stops"
 msgstr ""
 
-msgid "No data found"
+msgid "Meta"
 msgstr ""
 
-msgid "The GTFS file was empty."
+msgid "Existing route patterns:"
 msgstr ""
 
-msgid "Create Stops from GTFS"
+msgid "Reflect"
 msgstr ""
 
-msgid "GTFS-Stops"
+msgid "Required tags:"
 msgstr ""
 
-msgid "Type of stops to add"
+msgid "Common tags:"
 msgstr ""
 
-msgid "Time on your GPS device"
+msgid "Additional tags:"
 msgstr ""
 
-msgid "HH:MM:SS.sss"
+msgid "Add a new Tag"
 msgstr ""
 
-msgid "Time on your stopwatch"
+msgid "Name/Id"
 msgstr ""
 
-msgid "Time window"
+msgid "Find"
 msgstr ""
 
-msgid "seconds"
+msgid "Show"
 msgstr ""
 
-msgid "Move Threshold"
+msgid "Mark"
 msgstr ""
 
-msgid "Suggest Stops"
+msgid "Ref"
 msgstr ""
 
-msgid "Find"
+msgid "Stops are possible on the"
 msgstr ""
 
-msgid "Show"
+msgid "right hand side"
 msgstr ""
 
-msgid "Mark"
+msgid "left hand side"
 msgstr ""
 
-msgid "Catch"
+msgid "Maximum distance from route"
 msgstr ""
 
-msgid "Join"
+msgid "Suggest Stops"
 msgstr ""
 
-msgid "Public Transport: Join GTFS stops"
+msgid "Create Stops from GPX ..."
 msgstr ""
 
-msgid "State"
+msgid "Create Stops from a GPX file"
 msgstr ""
 
-msgid "[incomplete]"
+msgid "Select GPX file"
 msgstr ""
 
-msgid "[empty way]"
+msgid "The GPX file contained no tracks or waypoints."
 msgstr ""
 
-msgid "[ID] {0}"
+msgid "moved"
 msgstr ""
 
-msgid "[gap]"
+msgid "added"
 msgstr ""
 
-msgid "Route patterns ..."
+msgid "Public Transport: Enable GTFSStops"
 msgstr ""
 
-msgid "Edit Route patterns for public transport"
+msgid "Public Transport: Catch GTFS stops"
 msgstr ""
 
-msgid "Route Patterns"
+msgid "skipped"
 msgstr ""
 
-msgid "Overview"
+msgid "Public Transport: Disable GTFS"
 msgstr ""
 
-msgid "Itinerary"
+msgid "Public Transport: Join GTFS stops"
 msgstr ""
 
-msgid "Stops"
+msgid "Public Transport: Change stop type"
 msgstr ""
 
-msgid "Meta"
+msgid "Public Transport: Add track stop"
 msgstr ""
 
-msgid "Existing route patterns:"
+msgid "Public Transport: Delete track stop"
 msgstr ""
 
-msgid "Reflect"
+msgid "Public Transport: Detach track stop list"
 msgstr ""
 
-msgid "Required tags:"
+msgid "Public Transport: Edit track stop list"
 msgstr ""
 
-msgid "Common tags:"
+msgid "Public Transport: Relocate nodes in track stoplist"
 msgstr ""
 
-msgid "Additional tags:"
+msgid "Public Transport: sort track stop list"
 msgstr ""
 
-msgid "Add a new Tag"
+msgid "Public Transport: Suggest stops"
 msgstr ""
 
-msgid "Name/Id"
+msgid "Public Transport: Detach waypoints"
 msgstr ""
 
-msgid "Ref"
+msgid "Public Transport: Disable waypoints"
 msgstr ""
 
-msgid "Stops are possible on the"
+msgid "Public Transport: Enable waypoints"
 msgstr ""
 
-msgid "right hand side"
+msgid "Public Transport: Edit waypoint name"
 msgstr ""
 
-msgid "left hand side"
+msgid "rail"
 msgstr ""
 
-msgid "Maximum distance from route"
+msgid "Can''t parse a time from this string."
 msgstr ""
 
-msgid " [ID] {0}"
+msgid "Invalid value"
 msgstr ""
 
-msgid "Public Transport: Change stop type"
+msgid "Create Stops from GTFS"
 msgstr ""
 
-msgid "Create Stops from GPX ..."
+msgid "GTFS-Stops"
 msgstr ""
 
-msgid "Create Stops from a GPX file"
+msgid "Type of stops to add"
 msgstr ""
 
-msgid "Select GPX file"
+msgid "Time on your GPS device"
 msgstr ""
 
-msgid "The GPX file contained no tracks or waypoints."
+msgid "HH:MM:SS.sss"
 msgstr ""
 
-msgid "Create Stops from GPX"
+msgid "Time on your stopwatch"
 msgstr ""
 
-msgid "Tracks in this GPX file:"
+msgid "Time window"
 msgstr ""
 
-msgid "Detach"
+msgid "seconds"
 msgstr ""
 
-msgid "implicit"
+msgid "Move Threshold"
 msgstr ""
 
-msgid ""
-"The GPX file doesn''t contain valid trackpoints. Please use a GPX file that "
-"has trackpoints."
+msgid "Catch"
 msgstr ""
 
-msgid "GPX File Trouble"
+msgid "Join"
 msgstr ""
 
-msgid "unnamed"
+msgid "Create Stops from GPX"
 msgstr ""
 
-msgid "Public Transport: Add track stop"
+msgid "Tracks in this GPX file:"
 msgstr ""
 
-msgid "Public Transport: Delete track stop"
+msgid "Detach"
 msgstr ""
 
-msgid "Public Transport: Detach track stop list"
+msgid "implicit"
 msgstr ""
 
-msgid "Public Transport: Edit track stop list"
+msgid "State"
 msgstr ""
 
-msgid "Public Transport: Relocate nodes in track stoplist"
+msgid "[incomplete]"
 msgstr ""
 
-msgid "Public Transport: sort track stop list"
+msgid "[empty way]"
 msgstr ""
 
-msgid "Public Transport: Suggest stops"
+msgid "[gap]"
 msgstr ""
 
 msgid "Stopname"
 msgstr ""
 
-msgid "Public Transport: Detach waypoints"
+msgid " [ID] {0}"
 msgstr ""
 
-msgid "Public Transport: Disable waypoints"
+msgid ""
+"The GPX file doesn''t contain valid trackpoints. Please use a GPX file that "
+"has trackpoints."
 msgstr ""
 
-msgid "Public Transport: Enable waypoints"
+msgid "GPX File Trouble"
 msgstr ""
 
-msgid "Public Transport: Edit waypoint name"
+msgid "unnamed"
 msgstr ""
 
 msgid "Distance between stops"
@@ -33709,6 +33790,9 @@ msgstr ""
 msgid "JOSM Tag Editor Plugin"
 msgstr ""
 
+msgid "Presets"
+msgstr ""
+
 msgid "Abort tag editing and close dialog"
 msgstr ""
 
@@ -35634,6 +35718,26 @@ msgid_plural "Overwrite ''{0}'' tags {1} from {2} with new value ''{3}''?"
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Download from Sophox API"
+msgstr ""
+
+msgid ""
+"Find places of education at least 2km, and at most 3km from the center of "
+"the selection"
+msgstr ""
+
+msgid "Show/hide Sophox snippet list"
+msgstr ""
+
+msgid "help"
+msgstr ""
+
+msgid "Server: "
+msgstr ""
+
+msgid "Wikidata+OSM server"
+msgstr ""
+
 msgid "Search Wikidata items"
 msgstr ""
 
@@ -35707,26 +35811,6 @@ msgid ""
 "objects"
 msgstr ""
 
-msgid "Download from Wikosm API"
-msgstr ""
-
-msgid ""
-"Find places of education at least 2km, and at most 3km from the center of "
-"the selection"
-msgstr ""
-
-msgid "Show/hide Wikosm snippet list"
-msgstr ""
-
-msgid "help"
-msgstr ""
-
-msgid "Server: "
-msgstr ""
-
-msgid "Wikidata+OSM server"
-msgstr ""
-
 msgid "The Ultimate WMS Super-speed Turbo Challenge II"
 msgstr ""
 
diff --git a/i18n/po/vi.po b/i18n/po/vi.po
index 59145e7..b3c6f1c 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-10-30 03:38+0100\n"
+"POT-Creation-Date: 2017-11-26 00:06+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-10-30 05:06+0000\n"
-"X-Generator: Launchpad (build 18493)\n"
+"X-Launchpad-Export-Date: 2017-11-26 05:08+0000\n"
+"X-Generator: Launchpad (build 18509)\n"
 "Language: vi\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -445,12 +445,15 @@ msgstr ""
 msgid "Delete the active layer. Does not delete the associated file."
 msgstr ""
 
-msgid "Toggle dialogs panel"
-msgstr "hộp thoại Chuyển đổi bảng"
+msgid "Dialogs panel"
+msgstr ""
 
 msgid "Toggle dialogs panel, maximize mapview"
 msgstr "Chuyển đổi các hộp thoại bảng điều khiển, tối đa hóa MapView"
 
+msgid "Toggle dialogs panel"
+msgstr "hộp thoại Chuyển đổi bảng"
+
 msgid "Distribute Nodes"
 msgstr ""
 
@@ -6846,6 +6849,9 @@ msgstr "Tọa độ: "
 msgid "Coordinates (projected): "
 msgstr "Tọa độ (dự kiến): "
 
+msgid "UTM Zone"
+msgstr "UTM Zone"
+
 msgid "Part of: "
 msgstr "Một phần của: "
 
@@ -9321,6 +9327,11 @@ msgstr ""
 msgid "Check \"Save\" to save the layer to the file specified on the left."
 msgstr ""
 
+msgid ""
+"A background upload is already in progress. Kindly wait for it to finish "
+"before uploading new changes"
+msgstr ""
+
 msgid "I would like someone to review my edits."
 msgstr ""
 
@@ -10508,6 +10519,9 @@ msgstr ""
 msgid "Save Layer"
 msgstr "Lưu Layer"
 
+msgid "Trying to set a read only data layer as edit layer"
+msgstr ""
+
 msgid "{0} note"
 msgid_plural "{0} notes"
 msgstr[0] ""
@@ -11384,11 +11398,6 @@ msgstr "Không thể tải Mappaint phong cách từ '' {0} '' ngoại lệ là:
 msgid "Failed to parse Mappaint styles from ''{0}''. Error was: {1}"
 msgstr "Không phân tích Mappaint phong cách từ '' {0} '' Lỗi là:. {1}"
 
-msgid ""
-"Detected deprecated ''{0}'' in ''{1}'' which will be removed shortly. Use "
-"''{2}'' instead."
-msgstr ""
-
 msgid "Failed to locate image ''{0}''"
 msgstr "Không thể xác định vị trí hình ảnh '' {0} ''"
 
@@ -12677,6 +12686,9 @@ msgstr "Hiển thị màn hình splash khi khởi động"
 msgid "Show object ID in selection lists"
 msgstr "Hiển thị đối tượng ID trong danh sách lựa chọn"
 
+msgid "Show node coordinates in selection lists"
+msgstr ""
+
 msgid "Show localized name in selection lists"
 msgstr "Hiển thị bản địa hóa tên trong danh sách lựa chọn"
 
@@ -13478,9 +13490,6 @@ msgstr "Hệ thống UTM đo đạc"
 msgid "UTM"
 msgstr "UTM"
 
-msgid "UTM Zone"
-msgstr "UTM Zone"
-
 msgid "North"
 msgstr "Bắc"
 
@@ -13989,9 +13998,6 @@ msgstr "yếu tố phụ Preset mà không cần cha mẹ"
 msgid "Error parsing {0}: "
 msgstr "Lỗi phân tích cú pháp {0}: "
 
-msgid "Presets"
-msgstr "Presets"
-
 msgid "Search for objects by preset..."
 msgstr ""
 
@@ -16791,6 +16797,18 @@ msgstr ""
 msgid "korean"
 msgstr ""
 
+msgid "donut"
+msgstr ""
+
+msgid "mediterranean"
+msgstr ""
+
+msgid "friture"
+msgstr ""
+
+msgid "crepe"
+msgstr ""
+
 msgid "Internet access"
 msgstr "truy cập Internet"
 
@@ -19658,8 +19676,17 @@ msgstr "Nguồn điện"
 msgid "Tents allowed"
 msgstr "Lều cho phép"
 
-msgid "Camping Site"
-msgstr "Camping Site"
+msgid "Campsite"
+msgstr ""
+
+msgid "Caravans allowed"
+msgstr ""
+
+msgid "Backcountry"
+msgstr ""
+
+msgid "Group only access"
+msgstr ""
 
 msgid "Food+Drinks"
 msgstr "Food + Drinks"
@@ -24514,6 +24541,14 @@ msgid ""
 "resolution or better, and refreshed more frequently with ongoing updates."
 msgstr ""
 
+msgid "DigitalGlobe Premium Imagery Vintage"
+msgstr ""
+
+msgid ""
+"Imagery boundaries and capture dates. Labels appear at zoom level 14 and "
+"higher."
+msgstr ""
+
 msgid "DigitalGlobe Standard Imagery"
 msgstr ""
 
@@ -24523,6 +24558,9 @@ msgid ""
 "Landsat. Average age is 2.31 years, with some areas updated 2x per year."
 msgstr ""
 
+msgid "DigitalGlobe Standard Imagery Vintage"
+msgstr ""
+
 msgid "Esri World Imagery"
 msgstr ""
 
@@ -24586,6 +24624,12 @@ msgstr "Strava chạy heatmap"
 msgid "Strava cycling and running heatmap"
 msgstr ""
 
+msgid "Strava water sports heatmap"
+msgstr ""
+
+msgid "Strava winter sports heatmap"
+msgstr ""
+
 msgid "Locator Overlay"
 msgstr "Locator Overlay"
 
@@ -24990,6 +25034,9 @@ msgstr ""
 msgid "SPW(allonie) most recent aerial imagery"
 msgstr ""
 
+msgid "SPW(allonie) 2016 aerial imagery"
+msgstr ""
+
 msgid "SPW(allonie) 2015 aerial imagery"
 msgstr ""
 
@@ -25035,6 +25082,14 @@ msgstr ""
 msgid "Addresses data from IBGE"
 msgstr ""
 
+msgid "Street names IBGE Salvador-BA"
+msgstr ""
+
+msgid ""
+"Streets geometry and names of Salvador, Bahia. Source: Faces de Logradouro - "
+"IBGE."
+msgstr ""
+
 msgid "Rio Mosaic 2013"
 msgstr ""
 
@@ -25767,6 +25822,9 @@ msgstr ""
 msgid "Japan GSI ortho Imagery"
 msgstr ""
 
+msgid "Japan GSI Standard Map"
+msgstr ""
+
 msgid "imagico.de OSM images for mapping: Aral Sea (low water level)"
 msgstr ""
 
@@ -25796,7 +25854,7 @@ msgstr "50cm ortho - Latvia"
 msgid "20cm ortho - Latvia - Coastline"
 msgstr "20cm ortho - Latvia - Coastline"
 
-msgid "1.cikla ortofotokarte - Latvia"
+msgid "Orthophoto 1st cycle (1994-1999) - Latvia"
 msgstr ""
 
 msgid "ORT10LT (Lithuania)"
@@ -25805,6 +25863,9 @@ msgstr "ORT10LT (Lithuania)"
 msgid "geoportail.lu all layers"
 msgstr ""
 
+msgid "geoportail.lu ortho latest"
+msgstr ""
+
 msgid "geoportail.lu ortho 2016"
 msgstr ""
 
@@ -27307,6 +27368,9 @@ msgstr ""
 msgid "{0} on a node. Should be used on a way."
 msgstr "{0} trên một nút. Nên được sử dụng trên một con đường."
 
+msgid "{0} on a node. Should be used on a way or relation."
+msgstr ""
+
 msgid "{0} on a node. Should be drawn as an area."
 msgstr "{0} trên một nút. nên được rút ra như là một khu vực."
 
@@ -27539,6 +27603,9 @@ msgstr ""
 msgid "Nodes duplicating parent way tags"
 msgstr "Nodes nhân đôi cách mẹ tags"
 
+msgid "{0} together with {1} and {2}. Remove {0}."
+msgstr ""
+
 msgid ""
 "wikipedia tag has no language given, use ''wikipedia''=''language:page "
 "title''"
@@ -28425,6 +28492,21 @@ msgstr "Uploads dấu vết để openstreetmap.org"
 msgid "Importing..."
 msgstr "Nhập khẩu ..."
 
+msgid "Shape is started incorrectly"
+msgstr ""
+
+msgid "Can''t load SVG diagram"
+msgstr ""
+
+msgid "Can''t find root SVG element"
+msgstr ""
+
+msgid "Import primitives"
+msgstr ""
+
+msgid "Cannot find configuration file!"
+msgstr ""
+
 msgid "DXF files [ImportDxf plugin] (*.dxf)"
 msgstr ""
 
@@ -29079,6 +29161,9 @@ msgstr ""
 msgid "Download mode"
 msgstr ""
 
+msgid "Number of images to be pre-fetched (forwards and backwards)"
+msgstr ""
+
 msgid "You are logged in as ''{0}''."
 msgstr ""
 
@@ -29289,8 +29374,17 @@ msgid "only when manually requested"
 msgstr ""
 
 msgid ""
-"The downloaded OSM area is too big. Download mode has been changed to OSM "
-"area until the layer is restarted."
+"The Mapillary layer has stopped downloading images, because the requested "
+"area is too big!"
+msgstr ""
+
+msgid ""
+"To solve this problem, you could zoom in and load a smaller area of the map."
+msgstr ""
+
+msgid ""
+"To solve this problem, you could switch to download mode ''{0}'' and load "
+"Mapillary images for a smaller portion of the map."
 msgstr ""
 
 msgid "Downloading"
@@ -32842,23 +32936,6 @@ msgstr "Merge chồng chéo cách."
 msgid "Merge Overlap (combine)"
 msgstr "Merge Overlap (kết hợp)"
 
-msgid ""
-"<html>A role based relation membership was copied to all new ways.<br>You "
-"should verify this and correct it when necessary.</html>"
-msgstr ""
-"<Html> A dựa trên vai trò quan thành viên đã được sao chép vào tất cả những "
-"cách thức mới. <br> YouNên xác minh này và sửa nó khi cần thiết. </ Html>"
-
-msgid ""
-"<html>A relation membership was copied to all new ways.<br>You should verify "
-"this and correct it when necessary.</html>"
-msgstr ""
-"<Html> Một thành viên liên quan đã được sao chép vào tất cả những cách thức "
-"mới. <br> Bạn nên xác minhNày và sửa nó khi cần thiết. </ Html>"
-
-msgid "Split way"
-msgstr "Split cách"
-
 msgid "Michigan Left"
 msgstr "Michigan Left"
 
@@ -34376,33 +34453,6 @@ msgstr ""
 msgid "PT: Route passes a oneway road in the wrong direction"
 msgstr ""
 
-msgid "moved"
-msgstr "di chuyển"
-
-msgid "rail"
-msgstr "đường sắt"
-
-msgid "Can''t parse a time from this string."
-msgstr "can''t phân tích một thời gian từ chuỗi này."
-
-msgid "Invalid value"
-msgstr "giá trị không hợp lệ"
-
-msgid "added"
-msgstr "bổ sung"
-
-msgid "Public Transport: Enable GTFSStops"
-msgstr "Giao thông vận tải công cộng: Enable GTFSStops"
-
-msgid "Public Transport: Catch GTFS stops"
-msgstr "Giao thông vận tải công cộng: Catch GTFS dừng lại"
-
-msgid "skipped"
-msgstr "bỏ qua"
-
-msgid "Public Transport: Disable GTFS"
-msgstr "Giao thông vận tải công cộng: Vô hiệu hoá GTFS"
-
 msgid "Create Stops from GTFS ..."
 msgstr "Tạo điểm dừng từ GTFS ..."
 
@@ -34431,69 +34481,9 @@ msgstr "Không tìm thấy dữ liệu"
 msgid "The GTFS file was empty."
 msgstr "Tập tin GTFS trống không."
 
-msgid "Create Stops from GTFS"
-msgstr "Tạo điểm dừng từ GTFS"
-
-msgid "GTFS-Stops"
-msgstr "GTFS-Stops"
-
-msgid "Type of stops to add"
-msgstr "Loại dừng để thêm"
-
-msgid "Time on your GPS device"
-msgstr "Thời gian trên thiết bị GPS của bạn"
-
-msgid "HH:MM:SS.sss"
-msgstr "HH: MM: SS.sss"
-
-msgid "Time on your stopwatch"
-msgstr "Thời gian trên đồng hồ bấm giờ của bạn"
-
-msgid "Time window"
-msgstr "Thời gian cửa sổ"
-
-msgid "seconds"
-msgstr "giây"
-
-msgid "Move Threshold"
-msgstr "Move Threshold"
-
-msgid "Suggest Stops"
-msgstr "Đề nghị dừng"
-
-msgid "Find"
-msgstr "Tìm"
-
-msgid "Show"
-msgstr "Show"
-
-msgid "Mark"
-msgstr "Mark"
-
-msgid "Catch"
-msgstr "Catch"
-
-msgid "Join"
-msgstr "Tham gia"
-
-msgid "Public Transport: Join GTFS stops"
-msgstr "Giao thông vận tải công cộng: Tham gia GTFS dừng lại"
-
-msgid "State"
-msgstr "Nhà nước"
-
-msgid "[incomplete]"
-msgstr "[không đầy đủ]"
-
-msgid "[empty way]"
-msgstr "[cách trống rỗng]"
-
 msgid "[ID] {0}"
 msgstr "[ID] {0}"
 
-msgid "[gap]"
-msgstr "[khoảng cách]"
-
 msgid "Route patterns ..."
 msgstr "mẫu Route ..."
 
@@ -34536,6 +34526,15 @@ msgstr "Thêm một Tag mới"
 msgid "Name/Id"
 msgstr "Tên / Id"
 
+msgid "Find"
+msgstr "Tìm"
+
+msgid "Show"
+msgstr "Show"
+
+msgid "Mark"
+msgstr "Mark"
+
 msgid "Ref"
 msgstr "Ref"
 
@@ -34551,11 +34550,8 @@ msgstr "bên tay trái"
 msgid "Maximum distance from route"
 msgstr "Khoảng cách tối đa từ đường"
 
-msgid " [ID] {0}"
-msgstr " [ID] {0}"
-
-msgid "Public Transport: Change stop type"
-msgstr "Giao thông vận tải công cộng: Thay đổi kiểu cửa"
+msgid "Suggest Stops"
+msgstr "Đề nghị dừng"
 
 msgid "Create Stops from GPX ..."
 msgstr "Tạo điểm dừng từ GPX ..."
@@ -34569,30 +34565,29 @@ msgstr "Chọn tập tin GPX"
 msgid "The GPX file contained no tracks or waypoints."
 msgstr "Các tập tin GPX không chứa các bài hát hoặc điểm tham chiếu."
 
-msgid "Create Stops from GPX"
-msgstr "Tạo điểm dừng từ GPX"
+msgid "moved"
+msgstr "di chuyển"
 
-msgid "Tracks in this GPX file:"
-msgstr "Tracks trong tập tin GPX này:"
+msgid "added"
+msgstr "bổ sung"
 
-msgid "Detach"
-msgstr "Gỡ"
+msgid "Public Transport: Enable GTFSStops"
+msgstr "Giao thông vận tải công cộng: Enable GTFSStops"
 
-msgid "implicit"
-msgstr "tiềm ẩn"
+msgid "Public Transport: Catch GTFS stops"
+msgstr "Giao thông vận tải công cộng: Catch GTFS dừng lại"
 
-msgid ""
-"The GPX file doesn''t contain valid trackpoints. Please use a GPX file that "
-"has trackpoints."
-msgstr ""
-"Các tập tin GPX doesn''t chứa trên đoạn hợp lệ. Vui lòng sử dụng một tập tin "
-"GPX rằngCó đoạn đường."
+msgid "skipped"
+msgstr "bỏ qua"
 
-msgid "GPX File Trouble"
-msgstr "Tập tin GPX Trouble"
+msgid "Public Transport: Disable GTFS"
+msgstr "Giao thông vận tải công cộng: Vô hiệu hoá GTFS"
 
-msgid "unnamed"
-msgstr "vô danh"
+msgid "Public Transport: Join GTFS stops"
+msgstr "Giao thông vận tải công cộng: Tham gia GTFS dừng lại"
+
+msgid "Public Transport: Change stop type"
+msgstr "Giao thông vận tải công cộng: Thay đổi kiểu cửa"
 
 msgid "Public Transport: Add track stop"
 msgstr "Giao thông vận tải công cộng: Thêm đường dừng"
@@ -34615,9 +34610,6 @@ msgstr "Giao thông vận tải công cộng: sắp xếp theo dõi danh sách n
 msgid "Public Transport: Suggest stops"
 msgstr "Giao thông vận tải công cộng: Đề nghị dừng"
 
-msgid "Stopname"
-msgstr "Stopname"
-
 msgid "Public Transport: Detach waypoints"
 msgstr "Giao thông vận tải công cộng: Tháo waypoints"
 
@@ -34630,6 +34622,91 @@ msgstr "Giao thông vận tải công cộng: Enable waypoints"
 msgid "Public Transport: Edit waypoint name"
 msgstr "Giao thông vận tải công cộng: Chỉnh sửa tên waypoint"
 
+msgid "rail"
+msgstr "đường sắt"
+
+msgid "Can''t parse a time from this string."
+msgstr "can''t phân tích một thời gian từ chuỗi này."
+
+msgid "Invalid value"
+msgstr "giá trị không hợp lệ"
+
+msgid "Create Stops from GTFS"
+msgstr "Tạo điểm dừng từ GTFS"
+
+msgid "GTFS-Stops"
+msgstr "GTFS-Stops"
+
+msgid "Type of stops to add"
+msgstr "Loại dừng để thêm"
+
+msgid "Time on your GPS device"
+msgstr "Thời gian trên thiết bị GPS của bạn"
+
+msgid "HH:MM:SS.sss"
+msgstr "HH: MM: SS.sss"
+
+msgid "Time on your stopwatch"
+msgstr "Thời gian trên đồng hồ bấm giờ của bạn"
+
+msgid "Time window"
+msgstr "Thời gian cửa sổ"
+
+msgid "seconds"
+msgstr "giây"
+
+msgid "Move Threshold"
+msgstr "Move Threshold"
+
+msgid "Catch"
+msgstr "Catch"
+
+msgid "Join"
+msgstr "Tham gia"
+
+msgid "Create Stops from GPX"
+msgstr "Tạo điểm dừng từ GPX"
+
+msgid "Tracks in this GPX file:"
+msgstr "Tracks trong tập tin GPX này:"
+
+msgid "Detach"
+msgstr "Gỡ"
+
+msgid "implicit"
+msgstr "tiềm ẩn"
+
+msgid "State"
+msgstr "Nhà nước"
+
+msgid "[incomplete]"
+msgstr "[không đầy đủ]"
+
+msgid "[empty way]"
+msgstr "[cách trống rỗng]"
+
+msgid "[gap]"
+msgstr "[khoảng cách]"
+
+msgid "Stopname"
+msgstr "Stopname"
+
+msgid " [ID] {0}"
+msgstr " [ID] {0}"
+
+msgid ""
+"The GPX file doesn''t contain valid trackpoints. Please use a GPX file that "
+"has trackpoints."
+msgstr ""
+"Các tập tin GPX doesn''t chứa trên đoạn hợp lệ. Vui lòng sử dụng một tập tin "
+"GPX rằngCó đoạn đường."
+
+msgid "GPX File Trouble"
+msgstr "Tập tin GPX Trouble"
+
+msgid "unnamed"
+msgstr "vô danh"
+
 msgid "Distance between stops"
 msgstr ""
 
@@ -35391,6 +35468,9 @@ msgstr "tung ra hộp thoại biên tập tag"
 msgid "JOSM Tag Editor Plugin"
 msgstr "JOSM Tag Editor Plugin"
 
+msgid "Presets"
+msgstr "Presets"
+
 msgid "Abort tag editing and close dialog"
 msgstr "Abort chỉnh sửa từ khóa và đóng hộp thoại"
 
@@ -37494,6 +37574,26 @@ msgid_plural "Overwrite ''{0}'' tags {1} from {2} with new value ''{3}''?"
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Download from Sophox API"
+msgstr ""
+
+msgid ""
+"Find places of education at least 2km, and at most 3km from the center of "
+"the selection"
+msgstr ""
+
+msgid "Show/hide Sophox snippet list"
+msgstr ""
+
+msgid "help"
+msgstr ""
+
+msgid "Server: "
+msgstr ""
+
+msgid "Wikidata+OSM server"
+msgstr ""
+
 msgid "Search Wikidata items"
 msgstr ""
 
@@ -37572,26 +37672,6 @@ msgstr ""
 "Thêm một '' wikipedia '' tag tương ứng với bài viết này để các lựa chọnĐối "
 "tượng"
 
-msgid "Download from Wikosm API"
-msgstr ""
-
-msgid ""
-"Find places of education at least 2km, and at most 3km from the center of "
-"the selection"
-msgstr ""
-
-msgid "Show/hide Wikosm snippet list"
-msgstr ""
-
-msgid "help"
-msgstr ""
-
-msgid "Server: "
-msgstr ""
-
-msgid "Wikidata+OSM server"
-msgstr ""
-
 msgid "The Ultimate WMS Super-speed Turbo Challenge II"
 msgstr "The Ultimate WMS siêu tốc Turbo Challenge II"
 
diff --git a/i18n/po/wae.po b/i18n/po/wae.po
index 81f5b32..e664133 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-10-30 03:38+0100\n"
+"POT-Creation-Date: 2017-11-26 00:06+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-10-30 05:10+0000\n"
-"X-Generator: Launchpad (build 18493)\n"
+"X-Launchpad-Export-Date: 2017-11-26 05:13+0000\n"
+"X-Generator: Launchpad (build 18509)\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
 msgstr ""
@@ -420,12 +420,15 @@ msgstr ""
 msgid "Delete the active layer. Does not delete the associated file."
 msgstr ""
 
-msgid "Toggle dialogs panel"
+msgid "Dialogs panel"
 msgstr ""
 
 msgid "Toggle dialogs panel, maximize mapview"
 msgstr ""
 
+msgid "Toggle dialogs panel"
+msgstr ""
+
 msgid "Distribute Nodes"
 msgstr ""
 
@@ -6487,6 +6490,9 @@ msgstr ""
 msgid "Coordinates (projected): "
 msgstr ""
 
+msgid "UTM Zone"
+msgstr ""
+
 msgid "Part of: "
 msgstr ""
 
@@ -8785,6 +8791,11 @@ msgstr ""
 msgid "Check \"Save\" to save the layer to the file specified on the left."
 msgstr ""
 
+msgid ""
+"A background upload is already in progress. Kindly wait for it to finish "
+"before uploading new changes"
+msgstr ""
+
 msgid "I would like someone to review my edits."
 msgstr ""
 
@@ -9893,6 +9904,9 @@ msgstr ""
 msgid "Save Layer"
 msgstr ""
 
+msgid "Trying to set a read only data layer as edit layer"
+msgstr ""
+
 msgid "{0} note"
 msgid_plural "{0} notes"
 msgstr[0] ""
@@ -10723,11 +10737,6 @@ msgstr ""
 msgid "Failed to parse Mappaint styles from ''{0}''. Error was: {1}"
 msgstr ""
 
-msgid ""
-"Detected deprecated ''{0}'' in ''{1}'' which will be removed shortly. Use "
-"''{2}'' instead."
-msgstr ""
-
 msgid "Failed to locate image ''{0}''"
 msgstr ""
 
@@ -11892,6 +11901,9 @@ msgstr ""
 msgid "Show object ID in selection lists"
 msgstr ""
 
+msgid "Show node coordinates in selection lists"
+msgstr ""
+
 msgid "Show localized name in selection lists"
 msgstr ""
 
@@ -12648,9 +12660,6 @@ msgstr ""
 msgid "UTM"
 msgstr ""
 
-msgid "UTM Zone"
-msgstr ""
-
 msgid "North"
 msgstr ""
 
@@ -13118,9 +13127,6 @@ msgstr ""
 msgid "Error parsing {0}: "
 msgstr ""
 
-msgid "Presets"
-msgstr ""
-
 msgid "Search for objects by preset..."
 msgstr ""
 
@@ -15662,6 +15668,18 @@ msgstr ""
 msgid "korean"
 msgstr ""
 
+msgid "donut"
+msgstr ""
+
+msgid "mediterranean"
+msgstr ""
+
+msgid "friture"
+msgstr ""
+
+msgid "crepe"
+msgstr ""
+
 msgid "Internet access"
 msgstr ""
 
@@ -18504,7 +18522,16 @@ msgstr ""
 msgid "Tents allowed"
 msgstr ""
 
-msgid "Camping Site"
+msgid "Campsite"
+msgstr ""
+
+msgid "Caravans allowed"
+msgstr ""
+
+msgid "Backcountry"
+msgstr ""
+
+msgid "Group only access"
 msgstr ""
 
 msgid "Food+Drinks"
@@ -23333,6 +23360,14 @@ msgid ""
 "resolution or better, and refreshed more frequently with ongoing updates."
 msgstr ""
 
+msgid "DigitalGlobe Premium Imagery Vintage"
+msgstr ""
+
+msgid ""
+"Imagery boundaries and capture dates. Labels appear at zoom level 14 and "
+"higher."
+msgstr ""
+
 msgid "DigitalGlobe Standard Imagery"
 msgstr ""
 
@@ -23342,6 +23377,9 @@ msgid ""
 "Landsat. Average age is 2.31 years, with some areas updated 2x per year."
 msgstr ""
 
+msgid "DigitalGlobe Standard Imagery Vintage"
+msgstr ""
+
 msgid "Esri World Imagery"
 msgstr ""
 
@@ -23405,6 +23443,12 @@ msgstr ""
 msgid "Strava cycling and running heatmap"
 msgstr ""
 
+msgid "Strava water sports heatmap"
+msgstr ""
+
+msgid "Strava winter sports heatmap"
+msgstr ""
+
 msgid "Locator Overlay"
 msgstr ""
 
@@ -23809,6 +23853,9 @@ msgstr ""
 msgid "SPW(allonie) most recent aerial imagery"
 msgstr ""
 
+msgid "SPW(allonie) 2016 aerial imagery"
+msgstr ""
+
 msgid "SPW(allonie) 2015 aerial imagery"
 msgstr ""
 
@@ -23854,6 +23901,14 @@ msgstr ""
 msgid "Addresses data from IBGE"
 msgstr ""
 
+msgid "Street names IBGE Salvador-BA"
+msgstr ""
+
+msgid ""
+"Streets geometry and names of Salvador, Bahia. Source: Faces de Logradouro - "
+"IBGE."
+msgstr ""
+
 msgid "Rio Mosaic 2013"
 msgstr ""
 
@@ -24584,6 +24639,9 @@ msgstr ""
 msgid "Japan GSI ortho Imagery"
 msgstr ""
 
+msgid "Japan GSI Standard Map"
+msgstr ""
+
 msgid "imagico.de OSM images for mapping: Aral Sea (low water level)"
 msgstr ""
 
@@ -24613,7 +24671,7 @@ msgstr ""
 msgid "20cm ortho - Latvia - Coastline"
 msgstr ""
 
-msgid "1.cikla ortofotokarte - Latvia"
+msgid "Orthophoto 1st cycle (1994-1999) - Latvia"
 msgstr ""
 
 msgid "ORT10LT (Lithuania)"
@@ -24622,6 +24680,9 @@ msgstr ""
 msgid "geoportail.lu all layers"
 msgstr ""
 
+msgid "geoportail.lu ortho latest"
+msgstr ""
+
 msgid "geoportail.lu ortho 2016"
 msgstr ""
 
@@ -26112,6 +26173,9 @@ msgstr ""
 msgid "{0} on a node. Should be used on a way."
 msgstr ""
 
+msgid "{0} on a node. Should be used on a way or relation."
+msgstr ""
+
 msgid "{0} on a node. Should be drawn as an area."
 msgstr ""
 
@@ -26339,6 +26403,9 @@ msgstr ""
 msgid "Nodes duplicating parent way tags"
 msgstr ""
 
+msgid "{0} together with {1} and {2}. Remove {0}."
+msgstr ""
+
 msgid ""
 "wikipedia tag has no language given, use ''wikipedia''=''language:page "
 "title''"
@@ -27103,6 +27170,21 @@ msgstr ""
 msgid "Importing..."
 msgstr ""
 
+msgid "Shape is started incorrectly"
+msgstr ""
+
+msgid "Can''t load SVG diagram"
+msgstr ""
+
+msgid "Can''t find root SVG element"
+msgstr ""
+
+msgid "Import primitives"
+msgstr ""
+
+msgid "Cannot find configuration file!"
+msgstr ""
+
 msgid "DXF files [ImportDxf plugin] (*.dxf)"
 msgstr ""
 
@@ -27742,6 +27824,9 @@ msgstr ""
 msgid "Download mode"
 msgstr ""
 
+msgid "Number of images to be pre-fetched (forwards and backwards)"
+msgstr ""
+
 msgid "You are logged in as ''{0}''."
 msgstr ""
 
@@ -27952,8 +28037,17 @@ msgid "only when manually requested"
 msgstr ""
 
 msgid ""
-"The downloaded OSM area is too big. Download mode has been changed to OSM "
-"area until the layer is restarted."
+"The Mapillary layer has stopped downloading images, because the requested "
+"area is too big!"
+msgstr ""
+
+msgid ""
+"To solve this problem, you could zoom in and load a smaller area of the map."
+msgstr ""
+
+msgid ""
+"To solve this problem, you could switch to download mode ''{0}'' and load "
+"Mapillary images for a smaller portion of the map."
 msgstr ""
 
 msgid "Downloading"
@@ -31265,19 +31359,6 @@ msgstr ""
 msgid "Merge Overlap (combine)"
 msgstr ""
 
-msgid ""
-"<html>A role based relation membership was copied to all new ways.<br>You "
-"should verify this and correct it when necessary.</html>"
-msgstr ""
-
-msgid ""
-"<html>A relation membership was copied to all new ways.<br>You should verify "
-"this and correct it when necessary.</html>"
-msgstr ""
-
-msgid "Split way"
-msgstr ""
-
 msgid "Michigan Left"
 msgstr ""
 
@@ -32732,254 +32813,254 @@ msgstr ""
 msgid "PT: Route passes a oneway road in the wrong direction"
 msgstr ""
 
-msgid "moved"
+msgid "Create Stops from GTFS ..."
 msgstr ""
 
-msgid "rail"
+msgid "Create Stops from a GTFS file"
 msgstr ""
 
-msgid "Can''t parse a time from this string."
+msgid "Select GTFS file (stops.txt)"
 msgstr ""
 
-msgid "Invalid value"
+msgid "File \"{0}\" does not exist"
 msgstr ""
 
-msgid "added"
+msgid "IOException \"{0}\" occurred"
 msgstr ""
 
-msgid "Public Transport: Enable GTFSStops"
+msgid ""
+"There exists no dataset. Try to download data from the server or open an OSM "
+"file."
 msgstr ""
 
-msgid "Public Transport: Catch GTFS stops"
+msgid "No data found"
 msgstr ""
 
-msgid "skipped"
+msgid "The GTFS file was empty."
 msgstr ""
 
-msgid "Public Transport: Disable GTFS"
+msgid "[ID] {0}"
 msgstr ""
 
-msgid "Create Stops from GTFS ..."
+msgid "Route patterns ..."
 msgstr ""
 
-msgid "Create Stops from a GTFS file"
+msgid "Edit Route patterns for public transport"
 msgstr ""
 
-msgid "Select GTFS file (stops.txt)"
+msgid "Route Patterns"
 msgstr ""
 
-msgid "File \"{0}\" does not exist"
+msgid "Overview"
 msgstr ""
 
-msgid "IOException \"{0}\" occurred"
+msgid "Itinerary"
 msgstr ""
 
-msgid ""
-"There exists no dataset. Try to download data from the server or open an OSM "
-"file."
+msgid "Stops"
 msgstr ""
 
-msgid "No data found"
+msgid "Meta"
 msgstr ""
 
-msgid "The GTFS file was empty."
+msgid "Existing route patterns:"
 msgstr ""
 
-msgid "Create Stops from GTFS"
+msgid "Reflect"
 msgstr ""
 
-msgid "GTFS-Stops"
+msgid "Required tags:"
 msgstr ""
 
-msgid "Type of stops to add"
+msgid "Common tags:"
 msgstr ""
 
-msgid "Time on your GPS device"
+msgid "Additional tags:"
 msgstr ""
 
-msgid "HH:MM:SS.sss"
+msgid "Add a new Tag"
 msgstr ""
 
-msgid "Time on your stopwatch"
+msgid "Name/Id"
 msgstr ""
 
-msgid "Time window"
+msgid "Find"
 msgstr ""
 
-msgid "seconds"
+msgid "Show"
 msgstr ""
 
-msgid "Move Threshold"
+msgid "Mark"
 msgstr ""
 
-msgid "Suggest Stops"
+msgid "Ref"
 msgstr ""
 
-msgid "Find"
+msgid "Stops are possible on the"
 msgstr ""
 
-msgid "Show"
+msgid "right hand side"
 msgstr ""
 
-msgid "Mark"
+msgid "left hand side"
 msgstr ""
 
-msgid "Catch"
+msgid "Maximum distance from route"
 msgstr ""
 
-msgid "Join"
+msgid "Suggest Stops"
 msgstr ""
 
-msgid "Public Transport: Join GTFS stops"
+msgid "Create Stops from GPX ..."
 msgstr ""
 
-msgid "State"
+msgid "Create Stops from a GPX file"
 msgstr ""
 
-msgid "[incomplete]"
+msgid "Select GPX file"
 msgstr ""
 
-msgid "[empty way]"
+msgid "The GPX file contained no tracks or waypoints."
 msgstr ""
 
-msgid "[ID] {0}"
+msgid "moved"
 msgstr ""
 
-msgid "[gap]"
+msgid "added"
 msgstr ""
 
-msgid "Route patterns ..."
+msgid "Public Transport: Enable GTFSStops"
 msgstr ""
 
-msgid "Edit Route patterns for public transport"
+msgid "Public Transport: Catch GTFS stops"
 msgstr ""
 
-msgid "Route Patterns"
+msgid "skipped"
 msgstr ""
 
-msgid "Overview"
+msgid "Public Transport: Disable GTFS"
 msgstr ""
 
-msgid "Itinerary"
+msgid "Public Transport: Join GTFS stops"
 msgstr ""
 
-msgid "Stops"
+msgid "Public Transport: Change stop type"
 msgstr ""
 
-msgid "Meta"
+msgid "Public Transport: Add track stop"
 msgstr ""
 
-msgid "Existing route patterns:"
+msgid "Public Transport: Delete track stop"
 msgstr ""
 
-msgid "Reflect"
+msgid "Public Transport: Detach track stop list"
 msgstr ""
 
-msgid "Required tags:"
+msgid "Public Transport: Edit track stop list"
 msgstr ""
 
-msgid "Common tags:"
+msgid "Public Transport: Relocate nodes in track stoplist"
 msgstr ""
 
-msgid "Additional tags:"
+msgid "Public Transport: sort track stop list"
 msgstr ""
 
-msgid "Add a new Tag"
+msgid "Public Transport: Suggest stops"
 msgstr ""
 
-msgid "Name/Id"
+msgid "Public Transport: Detach waypoints"
 msgstr ""
 
-msgid "Ref"
+msgid "Public Transport: Disable waypoints"
 msgstr ""
 
-msgid "Stops are possible on the"
+msgid "Public Transport: Enable waypoints"
 msgstr ""
 
-msgid "right hand side"
+msgid "Public Transport: Edit waypoint name"
 msgstr ""
 
-msgid "left hand side"
+msgid "rail"
 msgstr ""
 
-msgid "Maximum distance from route"
+msgid "Can''t parse a time from this string."
 msgstr ""
 
-msgid " [ID] {0}"
+msgid "Invalid value"
 msgstr ""
 
-msgid "Public Transport: Change stop type"
+msgid "Create Stops from GTFS"
 msgstr ""
 
-msgid "Create Stops from GPX ..."
+msgid "GTFS-Stops"
 msgstr ""
 
-msgid "Create Stops from a GPX file"
+msgid "Type of stops to add"
 msgstr ""
 
-msgid "Select GPX file"
+msgid "Time on your GPS device"
 msgstr ""
 
-msgid "The GPX file contained no tracks or waypoints."
+msgid "HH:MM:SS.sss"
 msgstr ""
 
-msgid "Create Stops from GPX"
+msgid "Time on your stopwatch"
 msgstr ""
 
-msgid "Tracks in this GPX file:"
+msgid "Time window"
 msgstr ""
 
-msgid "Detach"
+msgid "seconds"
 msgstr ""
 
-msgid "implicit"
+msgid "Move Threshold"
 msgstr ""
 
-msgid ""
-"The GPX file doesn''t contain valid trackpoints. Please use a GPX file that "
-"has trackpoints."
+msgid "Catch"
 msgstr ""
 
-msgid "GPX File Trouble"
+msgid "Join"
 msgstr ""
 
-msgid "unnamed"
+msgid "Create Stops from GPX"
 msgstr ""
 
-msgid "Public Transport: Add track stop"
+msgid "Tracks in this GPX file:"
 msgstr ""
 
-msgid "Public Transport: Delete track stop"
+msgid "Detach"
 msgstr ""
 
-msgid "Public Transport: Detach track stop list"
+msgid "implicit"
 msgstr ""
 
-msgid "Public Transport: Edit track stop list"
+msgid "State"
 msgstr ""
 
-msgid "Public Transport: Relocate nodes in track stoplist"
+msgid "[incomplete]"
 msgstr ""
 
-msgid "Public Transport: sort track stop list"
+msgid "[empty way]"
 msgstr ""
 
-msgid "Public Transport: Suggest stops"
+msgid "[gap]"
 msgstr ""
 
 msgid "Stopname"
 msgstr ""
 
-msgid "Public Transport: Detach waypoints"
+msgid " [ID] {0}"
 msgstr ""
 
-msgid "Public Transport: Disable waypoints"
+msgid ""
+"The GPX file doesn''t contain valid trackpoints. Please use a GPX file that "
+"has trackpoints."
 msgstr ""
 
-msgid "Public Transport: Enable waypoints"
+msgid "GPX File Trouble"
 msgstr ""
 
-msgid "Public Transport: Edit waypoint name"
+msgid "unnamed"
 msgstr ""
 
 msgid "Distance between stops"
@@ -33708,6 +33789,9 @@ msgstr ""
 msgid "JOSM Tag Editor Plugin"
 msgstr ""
 
+msgid "Presets"
+msgstr ""
+
 msgid "Abort tag editing and close dialog"
 msgstr ""
 
@@ -35633,6 +35717,26 @@ msgid_plural "Overwrite ''{0}'' tags {1} from {2} with new value ''{3}''?"
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Download from Sophox API"
+msgstr ""
+
+msgid ""
+"Find places of education at least 2km, and at most 3km from the center of "
+"the selection"
+msgstr ""
+
+msgid "Show/hide Sophox snippet list"
+msgstr ""
+
+msgid "help"
+msgstr ""
+
+msgid "Server: "
+msgstr ""
+
+msgid "Wikidata+OSM server"
+msgstr ""
+
 msgid "Search Wikidata items"
 msgstr ""
 
@@ -35706,26 +35810,6 @@ msgid ""
 "objects"
 msgstr ""
 
-msgid "Download from Wikosm API"
-msgstr ""
-
-msgid ""
-"Find places of education at least 2km, and at most 3km from the center of "
-"the selection"
-msgstr ""
-
-msgid "Show/hide Wikosm snippet list"
-msgstr ""
-
-msgid "help"
-msgstr ""
-
-msgid "Server: "
-msgstr ""
-
-msgid "Wikidata+OSM server"
-msgstr ""
-
 msgid "The Ultimate WMS Super-speed Turbo Challenge II"
 msgstr ""
 
diff --git a/i18n/po/zh_CN.po b/i18n/po/zh_CN.po
index deae92a..402405c 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-10-30 03:38+0100\n"
-"PO-Revision-Date: 2017-10-04 12:19+0000\n"
+"POT-Creation-Date: 2017-11-26 00:06+0100\n"
+"PO-Revision-Date: 2017-10-30 15:09+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-10-30 05:08+0000\n"
-"X-Generator: Launchpad (build 18493)\n"
+"X-Launchpad-Export-Date: 2017-11-26 05:11+0000\n"
+"X-Generator: Launchpad (build 18509)\n"
 "Language: zh_CN\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -420,12 +420,15 @@ msgstr "删除图层"
 msgid "Delete the active layer. Does not delete the associated file."
 msgstr "删除活动图层。不删除关联文件。"
 
-msgid "Toggle dialogs panel"
-msgstr "切换对话框面板"
+msgid "Dialogs panel"
+msgstr ""
 
 msgid "Toggle dialogs panel, maximize mapview"
 msgstr "切换对话框面板,最大化到地图视图"
 
+msgid "Toggle dialogs panel"
+msgstr "切换对话框面板"
+
 msgid "Distribute Nodes"
 msgstr "分布节点"
 
@@ -6481,6 +6484,9 @@ msgstr "坐标: "
 msgid "Coordinates (projected): "
 msgstr "坐标(投影): "
 
+msgid "UTM Zone"
+msgstr "UTM 区"
+
 msgid "Part of: "
 msgstr "部分: "
 
@@ -8408,7 +8414,7 @@ msgstr "{0}所有在当前选择中含有{1}作为其属性的对象。"
 msgid ""
 "Instead of <i>location</i> any valid place name can be used like address, "
 "city, etc."
-msgstr "可以使用任何有效的地名例如地址、城市等,而不是<i>location</i>。"
+msgstr "可以使用任何有效的地名例如地址、城市等代替<i>location</i>。"
 
 msgid ""
 "<span>Download objects that have some concrete key/value pair, only the key "
@@ -8424,7 +8430,7 @@ msgid ""
 "Instead of \"or\" - \"|\", \"||\" can be used, and instead of \"and\" - "
 "\"&\", \"&&\"."
 msgstr ""
-"可以使用基本逻辑运算符来创建更加复杂的查询。而非\"or\" - \"|\", \"||\"可以使用,而非\"and\" - \"&\", \"&&\"。"
+"可以使用基本逻辑运算符来创建更加复杂的查询。不仅是\"or\" - \"|\", \"||\",\"and\" - \"&\", \"&&\"也可以使用。"
 
 msgid "Class Type"
 msgstr "类别类型"
@@ -8813,6 +8819,11 @@ msgstr "选中“上传”以上传更改至 OSM 服务器。"
 msgid "Check \"Save\" to save the layer to the file specified on the left."
 msgstr "选中“保存”以将图层保存到左侧指定的文件。"
 
+msgid ""
+"A background upload is already in progress. Kindly wait for it to finish "
+"before uploading new changes"
+msgstr ""
+
 msgid "I would like someone to review my edits."
 msgstr "我想要某人来检验我的编辑"
 
@@ -9921,6 +9932,9 @@ msgstr "再次改变投影法,或删除图层。"
 msgid "Save Layer"
 msgstr "保存图层"
 
+msgid "Trying to set a read only data layer as edit layer"
+msgstr ""
+
 msgid "{0} note"
 msgid_plural "{0} notes"
 msgstr[0] "{0} 笔记"
@@ -10761,11 +10775,6 @@ msgstr "从“{0}”加载地图绘画风格失败。异常为:{1}"
 msgid "Failed to parse Mappaint styles from ''{0}''. Error was: {1}"
 msgstr "从“{0}”解析地图绘画风格失败。错误为:{1}"
 
-msgid ""
-"Detected deprecated ''{0}'' in ''{1}'' which will be removed shortly. Use "
-"''{2}'' instead."
-msgstr ""
-
 msgid "Failed to locate image ''{0}''"
 msgstr "定位图像“{0}”时失败"
 
@@ -11965,6 +11974,9 @@ msgstr "启动时显示欢迎页面"
 msgid "Show object ID in selection lists"
 msgstr "在选择范围列表显示对象 ID"
 
+msgid "Show node coordinates in selection lists"
+msgstr ""
+
 msgid "Show localized name in selection lists"
 msgstr "在选择范围列表中显示本地化的名称"
 
@@ -12732,9 +12744,6 @@ msgstr "UTM 大地测量系统"
 msgid "UTM"
 msgstr "UTM"
 
-msgid "UTM Zone"
-msgstr "UTM 区"
-
 msgid "North"
 msgstr "北"
 
@@ -13207,9 +13216,6 @@ msgstr "预置无父元素的子元素"
 msgid "Error parsing {0}: "
 msgstr "分析 {0} 时发生错误: "
 
-msgid "Presets"
-msgstr "预设组合(P)"
-
 msgid "Search for objects by preset..."
 msgstr "按预设组合搜索对象..."
 
@@ -15771,6 +15777,18 @@ msgstr "素食"
 msgid "korean"
 msgstr "韩式"
 
+msgid "donut"
+msgstr ""
+
+msgid "mediterranean"
+msgstr ""
+
+msgid "friture"
+msgstr ""
+
+msgid "crepe"
+msgstr ""
+
 msgid "Internet access"
 msgstr "网络接入"
 
@@ -18613,8 +18631,17 @@ msgstr "电源"
 msgid "Tents allowed"
 msgstr "允许帐篷"
 
-msgid "Camping Site"
-msgstr "露营区"
+msgid "Campsite"
+msgstr ""
+
+msgid "Caravans allowed"
+msgstr ""
+
+msgid "Backcountry"
+msgstr ""
+
+msgid "Group only access"
+msgstr ""
 
 msgid "Food+Drinks"
 msgstr "食物+饮料"
@@ -23444,6 +23471,14 @@ msgstr ""
 "DigitalGlobe-Premium是由DigitalGlobe底图构成的拼贴图像,其中特定区域包含+ "
 "Vivid或自定义兴趣区域图像,具有50厘米或更好的分辨率,并且在以后会更加频繁地更新。"
 
+msgid "DigitalGlobe Premium Imagery Vintage"
+msgstr ""
+
+msgid ""
+"Imagery boundaries and capture dates. Labels appear at zoom level 14 and "
+"higher."
+msgstr ""
+
 msgid "DigitalGlobe Standard Imagery"
 msgstr "DigitalGlobe Standard图像"
 
@@ -23455,6 +23490,9 @@ msgstr ""
 "DigitalGlobe-Standard是一套策略性的图像,覆盖了地球86%的面积,其中30-"
 "60cm分辨率可用,由Landsat补充。平均拍摄日期为2.31年前,部分地区每年更新2次。"
 
+msgid "DigitalGlobe Standard Imagery Vintage"
+msgstr ""
+
 msgid "Esri World Imagery"
 msgstr "Esri 全球图像"
 
@@ -23518,6 +23556,12 @@ msgstr "Strava跑步热力图"
 msgid "Strava cycling and running heatmap"
 msgstr "Strava骑行与跑步热力图"
 
+msgid "Strava water sports heatmap"
+msgstr ""
+
+msgid "Strava winter sports heatmap"
+msgstr ""
+
 msgid "Locator Overlay"
 msgstr "定位符叠加层"
 
@@ -23922,6 +23966,9 @@ msgstr "SPW(allonie) PICC 数个图像"
 msgid "SPW(allonie) most recent aerial imagery"
 msgstr "SPW(allonie) 最新航拍图像"
 
+msgid "SPW(allonie) 2016 aerial imagery"
+msgstr ""
+
 msgid "SPW(allonie) 2015 aerial imagery"
 msgstr "SPW(allonie) 2015年航拍图像"
 
@@ -23967,6 +24014,14 @@ msgstr "IBGE 联邦地区"
 msgid "Addresses data from IBGE"
 msgstr "地址信息来源于IBGE"
 
+msgid "Street names IBGE Salvador-BA"
+msgstr ""
+
+msgid ""
+"Streets geometry and names of Salvador, Bahia. Source: Faces de Logradouro - "
+"IBGE."
+msgstr ""
+
 msgid "Rio Mosaic 2013"
 msgstr "里约热内卢 (拼贴)(2013年)"
 
@@ -24697,6 +24752,9 @@ msgstr "南蒂罗尔地形基本图"
 msgid "Japan GSI ortho Imagery"
 msgstr "日本GSI 正射影像"
 
+msgid "Japan GSI Standard Map"
+msgstr ""
+
 msgid "imagico.de OSM images for mapping: Aral Sea (low water level)"
 msgstr "imagico.de 授权绘制的OSM图像: 咸海(低水位)"
 
@@ -24726,8 +24784,8 @@ msgstr "50厘米正射影像 - 拉脱维亚"
 msgid "20cm ortho - Latvia - Coastline"
 msgstr "20厘米正射影像 - 拉脱维亚 - 海岸线"
 
-msgid "1.cikla ortofotokarte - Latvia"
-msgstr "1.cikla 正射影像 - 拉脱维亚"
+msgid "Orthophoto 1st cycle (1994-1999) - Latvia"
+msgstr ""
 
 msgid "ORT10LT (Lithuania)"
 msgstr "ORT10LT (立陶宛)"
@@ -24735,8 +24793,11 @@ msgstr "ORT10LT (立陶宛)"
 msgid "geoportail.lu all layers"
 msgstr "geoportail.lu 全图层"
 
+msgid "geoportail.lu ortho latest"
+msgstr ""
+
 msgid "geoportail.lu ortho 2016"
-msgstr "geoportail.lu 正射影像(2016年)"
+msgstr ""
 
 msgid "Luxembourg Inspire Railway"
 msgstr "卢森堡 Inspire 铁路"
@@ -26226,6 +26287,9 @@ msgstr "错误的值:{0}"
 msgid "{0} on a node. Should be used on a way."
 msgstr "{0} 在节点上。应用于路径上。"
 
+msgid "{0} on a node. Should be used on a way or relation."
+msgstr ""
+
 msgid "{0} on a node. Should be drawn as an area."
 msgstr "{0} 在节点上。应绘为区域。"
 
@@ -26453,6 +26517,9 @@ msgstr "{0}无意义"
 msgid "Nodes duplicating parent way tags"
 msgstr "节点重复父路径的标签"
 
+msgid "{0} together with {1} and {2}. Remove {0}."
+msgstr ""
+
 msgid ""
 "wikipedia tag has no language given, use ''wikipedia''=''language:page "
 "title''"
@@ -27224,6 +27291,21 @@ msgstr "上传轨迹至 openstreetmap.org"
 msgid "Importing..."
 msgstr "正在导入..."
 
+msgid "Shape is started incorrectly"
+msgstr ""
+
+msgid "Can''t load SVG diagram"
+msgstr ""
+
+msgid "Can''t find root SVG element"
+msgstr ""
+
+msgid "Import primitives"
+msgstr ""
+
+msgid "Cannot find configuration file!"
+msgstr ""
+
 msgid "DXF files [ImportDxf plugin] (*.dxf)"
 msgstr "DXF文件[ImportDxf 插件] (*.dxf)"
 
@@ -27868,6 +27950,9 @@ msgstr "启用实验性功能(可能不稳定)"
 msgid "Download mode"
 msgstr "下载模式"
 
+msgid "Number of images to be pre-fetched (forwards and backwards)"
+msgstr ""
+
 msgid "You are logged in as ''{0}''."
 msgstr "您已登录为“{0}”。"
 
@@ -28075,8 +28160,17 @@ msgid "only when manually requested"
 msgstr ""
 
 msgid ""
-"The downloaded OSM area is too big. Download mode has been changed to OSM "
-"area until the layer is restarted."
+"The Mapillary layer has stopped downloading images, because the requested "
+"area is too big!"
+msgstr ""
+
+msgid ""
+"To solve this problem, you could zoom in and load a smaller area of the map."
+msgstr ""
+
+msgid ""
+"To solve this problem, you could switch to download mode ''{0}'' and load "
+"Mapillary images for a smaller portion of the map."
 msgstr ""
 
 msgid "Downloading"
@@ -31505,19 +31599,6 @@ msgstr "合并重叠的路径。"
 msgid "Merge Overlap (combine)"
 msgstr "合并重叠部分(结合)"
 
-msgid ""
-"<html>A role based relation membership was copied to all new ways.<br>You "
-"should verify this and correct it when necessary.</html>"
-msgstr "<html>以角色为基础的关系成员会复制到所有的新路径。<br>必要时您应该检验并修正它。</html>"
-
-msgid ""
-"<html>A relation membership was copied to all new ways.<br>You should verify "
-"this and correct it when necessary.</html>"
-msgstr "<html>将关系成员复制到所有的新路径。<br>您应该验证这一点,必要时予以纠正。</html>"
-
-msgid "Split way"
-msgstr "分割路径"
-
 msgid "Michigan Left"
 msgstr "密歇根左转"
 
@@ -32967,33 +33048,6 @@ msgstr ""
 msgid "PT: Route passes a oneway road in the wrong direction"
 msgstr ""
 
-msgid "moved"
-msgstr "已移动"
-
-msgid "rail"
-msgstr "第三轨"
-
-msgid "Can''t parse a time from this string."
-msgstr "无法从这个字符串中解析时间。"
-
-msgid "Invalid value"
-msgstr "无效的数值"
-
-msgid "added"
-msgstr "已添加"
-
-msgid "Public Transport: Enable GTFSStops"
-msgstr "公共交通:启用 GTFSStops"
-
-msgid "Public Transport: Catch GTFS stops"
-msgstr "公共交通:抓取 GTFS stops"
-
-msgid "skipped"
-msgstr "已跳过"
-
-msgid "Public Transport: Disable GTFS"
-msgstr "公共交通:禁用 GTFS"
-
 msgid "Create Stops from GTFS ..."
 msgstr "从 GTFS 建立停止点..."
 
@@ -33020,69 +33074,9 @@ msgstr "没有找到数据"
 msgid "The GTFS file was empty."
 msgstr "GTFS 文件是空的。"
 
-msgid "Create Stops from GTFS"
-msgstr ""
-
-msgid "GTFS-Stops"
-msgstr "GTFS-Stops"
-
-msgid "Type of stops to add"
-msgstr ""
-
-msgid "Time on your GPS device"
-msgstr "您 GPS 设备上的时间"
-
-msgid "HH:MM:SS.sss"
-msgstr "HH:MM:SS.sss"
-
-msgid "Time on your stopwatch"
-msgstr "您秒表上的时间"
-
-msgid "Time window"
-msgstr "时间窗口"
-
-msgid "seconds"
-msgstr "秒"
-
-msgid "Move Threshold"
-msgstr ""
-
-msgid "Suggest Stops"
-msgstr ""
-
-msgid "Find"
-msgstr "查找"
-
-msgid "Show"
-msgstr "显示"
-
-msgid "Mark"
-msgstr "标记"
-
-msgid "Catch"
-msgstr "抓取"
-
-msgid "Join"
-msgstr "联结"
-
-msgid "Public Transport: Join GTFS stops"
-msgstr ""
-
-msgid "State"
-msgstr "省/州"
-
-msgid "[incomplete]"
-msgstr "[不完整]"
-
-msgid "[empty way]"
-msgstr "[空路径]"
-
 msgid "[ID] {0}"
 msgstr "[ID] {0}"
 
-msgid "[gap]"
-msgstr "[缺口]"
-
 msgid "Route patterns ..."
 msgstr "路线模式..."
 
@@ -33125,6 +33119,15 @@ msgstr "添加一个新标签"
 msgid "Name/Id"
 msgstr "名称/Id"
 
+msgid "Find"
+msgstr "查找"
+
+msgid "Show"
+msgstr "显示"
+
+msgid "Mark"
+msgstr "标记"
+
 msgid "Ref"
 msgstr "编号"
 
@@ -33140,10 +33143,7 @@ msgstr "左侧"
 msgid "Maximum distance from route"
 msgstr "离路线的最大距离"
 
-msgid " [ID] {0}"
-msgstr " [ID] {0}"
-
-msgid "Public Transport: Change stop type"
+msgid "Suggest Stops"
 msgstr ""
 
 msgid "Create Stops from GPX ..."
@@ -33158,28 +33158,29 @@ msgstr "选择 GPX 文件"
 msgid "The GPX file contained no tracks or waypoints."
 msgstr "GPX 文件中不包含轨迹或路点。"
 
-msgid "Create Stops from GPX"
-msgstr ""
+msgid "moved"
+msgstr "已移动"
 
-msgid "Tracks in this GPX file:"
-msgstr "这个 GPX 文件中的轨迹:"
+msgid "added"
+msgstr "已添加"
 
-msgid "Detach"
-msgstr "分离"
+msgid "Public Transport: Enable GTFSStops"
+msgstr "公共交通:启用 GTFSStops"
 
-msgid "implicit"
-msgstr ""
+msgid "Public Transport: Catch GTFS stops"
+msgstr "公共交通:抓取 GTFS stops"
 
-msgid ""
-"The GPX file doesn''t contain valid trackpoints. Please use a GPX file that "
-"has trackpoints."
-msgstr "GPX 文件中不包含有效的轨迹点。请使用具有轨迹点的 GPX 文件。"
+msgid "skipped"
+msgstr "已跳过"
 
-msgid "GPX File Trouble"
-msgstr "GPX 文件问题"
+msgid "Public Transport: Disable GTFS"
+msgstr "公共交通:禁用 GTFS"
 
-msgid "unnamed"
-msgstr "未命名"
+msgid "Public Transport: Join GTFS stops"
+msgstr ""
+
+msgid "Public Transport: Change stop type"
+msgstr ""
 
 msgid "Public Transport: Add track stop"
 msgstr ""
@@ -33202,9 +33203,6 @@ msgstr ""
 msgid "Public Transport: Suggest stops"
 msgstr ""
 
-msgid "Stopname"
-msgstr ""
-
 msgid "Public Transport: Detach waypoints"
 msgstr "公共交通:分离路点"
 
@@ -33217,6 +33215,89 @@ msgstr "公共交通:启用路点"
 msgid "Public Transport: Edit waypoint name"
 msgstr "公共交通:编辑路点名称"
 
+msgid "rail"
+msgstr "第三轨"
+
+msgid "Can''t parse a time from this string."
+msgstr "无法从这个字符串中解析时间。"
+
+msgid "Invalid value"
+msgstr "无效的数值"
+
+msgid "Create Stops from GTFS"
+msgstr ""
+
+msgid "GTFS-Stops"
+msgstr "GTFS-Stops"
+
+msgid "Type of stops to add"
+msgstr ""
+
+msgid "Time on your GPS device"
+msgstr "您 GPS 设备上的时间"
+
+msgid "HH:MM:SS.sss"
+msgstr "HH:MM:SS.sss"
+
+msgid "Time on your stopwatch"
+msgstr "您秒表上的时间"
+
+msgid "Time window"
+msgstr "时间窗口"
+
+msgid "seconds"
+msgstr "秒"
+
+msgid "Move Threshold"
+msgstr ""
+
+msgid "Catch"
+msgstr "抓取"
+
+msgid "Join"
+msgstr "联结"
+
+msgid "Create Stops from GPX"
+msgstr ""
+
+msgid "Tracks in this GPX file:"
+msgstr "这个 GPX 文件中的轨迹:"
+
+msgid "Detach"
+msgstr "分离"
+
+msgid "implicit"
+msgstr ""
+
+msgid "State"
+msgstr "省/州"
+
+msgid "[incomplete]"
+msgstr "[不完整]"
+
+msgid "[empty way]"
+msgstr "[空路径]"
+
+msgid "[gap]"
+msgstr "[缺口]"
+
+msgid "Stopname"
+msgstr ""
+
+msgid " [ID] {0}"
+msgstr " [ID] {0}"
+
+msgid ""
+"The GPX file doesn''t contain valid trackpoints. Please use a GPX file that "
+"has trackpoints."
+msgstr "GPX 文件中不包含有效的轨迹点。请使用具有轨迹点的 GPX 文件。"
+
+msgid "GPX File Trouble"
+msgstr "GPX 文件问题"
+
+msgid "unnamed"
+msgstr "未命名"
+
 msgid "Distance between stops"
 msgstr ""
 
@@ -33947,6 +34028,9 @@ msgstr "启动标签编辑器对话框"
 msgid "JOSM Tag Editor Plugin"
 msgstr "JOSM 标签编辑器插件"
 
+msgid "Presets"
+msgstr "预设组合(P)"
+
 msgid "Abort tag editing and close dialog"
 msgstr "放弃标签的编辑,并关闭此对话框"
 
@@ -35916,6 +36000,26 @@ msgid_plural "Overwrite ''{0}'' tags {1} from {2} with new value ''{3}''?"
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Download from Sophox API"
+msgstr ""
+
+msgid ""
+"Find places of education at least 2km, and at most 3km from the center of "
+"the selection"
+msgstr ""
+
+msgid "Show/hide Sophox snippet list"
+msgstr ""
+
+msgid "help"
+msgstr ""
+
+msgid "Server: "
+msgstr ""
+
+msgid "Wikidata+OSM server"
+msgstr ""
+
 msgid "Search Wikidata items"
 msgstr ""
 
@@ -35989,26 +36093,6 @@ msgid ""
 "objects"
 msgstr "添加对应本文的“维基百科”标签到所选对象"
 
-msgid "Download from Wikosm API"
-msgstr ""
-
-msgid ""
-"Find places of education at least 2km, and at most 3km from the center of "
-"the selection"
-msgstr ""
-
-msgid "Show/hide Wikosm snippet list"
-msgstr ""
-
-msgid "help"
-msgstr ""
-
-msgid "Server: "
-msgstr ""
-
-msgid "Wikidata+OSM server"
-msgstr ""
-
 msgid "The Ultimate WMS Super-speed Turbo Challenge II"
 msgstr "第二版“最终 WMS 超高速涡轮增压挑战”"
 
diff --git a/i18n/po/zh_TW.po b/i18n/po/zh_TW.po
index 966ffb2..7d012cf 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-10-30 03:38+0100\n"
+"POT-Creation-Date: 2017-11-26 00:06+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-10-30 05:08+0000\n"
-"X-Generator: Launchpad (build 18493)\n"
+"X-Launchpad-Export-Date: 2017-11-26 05:11+0000\n"
+"X-Generator: Launchpad (build 18509)\n"
 "Language: zh_TW\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -417,12 +417,15 @@ msgstr "刪除圖層"
 msgid "Delete the active layer. Does not delete the associated file."
 msgstr "刪除目前圖層,但不刪除關連檔案。"
 
-msgid "Toggle dialogs panel"
-msgstr "切換對話盒面板"
+msgid "Dialogs panel"
+msgstr ""
 
 msgid "Toggle dialogs panel, maximize mapview"
 msgstr "切換對話盒面板,最大化地圖檢視"
 
+msgid "Toggle dialogs panel"
+msgstr "切換對話盒面板"
+
 msgid "Distribute Nodes"
 msgstr "分佈節點"
 
@@ -6464,6 +6467,9 @@ msgstr "坐標: "
 msgid "Coordinates (projected): "
 msgstr "坐標 (投影): "
 
+msgid "UTM Zone"
+msgstr "UTM 區"
+
 msgid "Part of: "
 msgstr ""
 
@@ -8772,6 +8778,11 @@ msgstr ""
 msgid "Check \"Save\" to save the layer to the file specified on the left."
 msgstr ""
 
+msgid ""
+"A background upload is already in progress. Kindly wait for it to finish "
+"before uploading new changes"
+msgstr ""
+
 msgid "I would like someone to review my edits."
 msgstr "我需要別人覆核我的編輯。"
 
@@ -9880,6 +9891,9 @@ msgstr "再變更投影法或是移除這個圖層。"
 msgid "Save Layer"
 msgstr "儲存圖層"
 
+msgid "Trying to set a read only data layer as edit layer"
+msgstr ""
+
 msgid "{0} note"
 msgid_plural "{0} notes"
 msgstr[0] "{0} 個註解"
@@ -10719,11 +10733,6 @@ msgstr "無法從 ''{0}'' 載入地圖繪製樣式,異常:{1}"
 msgid "Failed to parse Mappaint styles from ''{0}''. Error was: {1}"
 msgstr "無法從 ''{0}'' 貼上地圖繪製樣式,錯誤:{1}"
 
-msgid ""
-"Detected deprecated ''{0}'' in ''{1}'' which will be removed shortly. Use "
-"''{2}'' instead."
-msgstr ""
-
 msgid "Failed to locate image ''{0}''"
 msgstr ""
 
@@ -11915,6 +11924,9 @@ msgstr "啟動時顯示歡迎畫面"
 msgid "Show object ID in selection lists"
 msgstr "在選擇區域清單顯示物件 ID"
 
+msgid "Show node coordinates in selection lists"
+msgstr ""
+
 msgid "Show localized name in selection lists"
 msgstr "在選擇清單中顯示本地化的名稱"
 
@@ -12683,9 +12695,6 @@ msgstr "UTM 大地測量系統"
 msgid "UTM"
 msgstr "UTM"
 
-msgid "UTM Zone"
-msgstr "UTM 區"
-
 msgid "North"
 msgstr "北"
 
@@ -13156,9 +13165,6 @@ msgstr "預設次級元件沒有上層"
 msgid "Error parsing {0}: "
 msgstr "分析 {0} 時發生錯誤: "
 
-msgid "Presets"
-msgstr "預設組合"
-
 msgid "Search for objects by preset..."
 msgstr "依預設組合搜尋物件..."
 
@@ -15712,6 +15718,18 @@ msgstr "素食"
 msgid "korean"
 msgstr "韓國料理"
 
+msgid "donut"
+msgstr ""
+
+msgid "mediterranean"
+msgstr ""
+
+msgid "friture"
+msgstr ""
+
+msgid "crepe"
+msgstr ""
+
 msgid "Internet access"
 msgstr "可上網"
 
@@ -18554,8 +18572,17 @@ msgstr "電源供應"
 msgid "Tents allowed"
 msgstr "允許帳篷"
 
-msgid "Camping Site"
-msgstr "露營區"
+msgid "Campsite"
+msgstr ""
+
+msgid "Caravans allowed"
+msgstr ""
+
+msgid "Backcountry"
+msgstr ""
+
+msgid "Group only access"
+msgstr ""
 
 msgid "Food+Drinks"
 msgstr "食物+飲料"
@@ -23383,6 +23410,14 @@ msgid ""
 "resolution or better, and refreshed more frequently with ongoing updates."
 msgstr ""
 
+msgid "DigitalGlobe Premium Imagery Vintage"
+msgstr ""
+
+msgid ""
+"Imagery boundaries and capture dates. Labels appear at zoom level 14 and "
+"higher."
+msgstr ""
+
 msgid "DigitalGlobe Standard Imagery"
 msgstr ""
 
@@ -23392,6 +23427,9 @@ msgid ""
 "Landsat. Average age is 2.31 years, with some areas updated 2x per year."
 msgstr ""
 
+msgid "DigitalGlobe Standard Imagery Vintage"
+msgstr ""
+
 msgid "Esri World Imagery"
 msgstr ""
 
@@ -23455,6 +23493,12 @@ msgstr "Strava跑步熱力圖"
 msgid "Strava cycling and running heatmap"
 msgstr ""
 
+msgid "Strava water sports heatmap"
+msgstr ""
+
+msgid "Strava winter sports heatmap"
+msgstr ""
+
 msgid "Locator Overlay"
 msgstr ""
 
@@ -23859,6 +23903,9 @@ msgstr ""
 msgid "SPW(allonie) most recent aerial imagery"
 msgstr ""
 
+msgid "SPW(allonie) 2016 aerial imagery"
+msgstr ""
+
 msgid "SPW(allonie) 2015 aerial imagery"
 msgstr ""
 
@@ -23904,6 +23951,14 @@ msgstr ""
 msgid "Addresses data from IBGE"
 msgstr ""
 
+msgid "Street names IBGE Salvador-BA"
+msgstr ""
+
+msgid ""
+"Streets geometry and names of Salvador, Bahia. Source: Faces de Logradouro - "
+"IBGE."
+msgstr ""
+
 msgid "Rio Mosaic 2013"
 msgstr ""
 
@@ -24634,6 +24689,9 @@ msgstr ""
 msgid "Japan GSI ortho Imagery"
 msgstr ""
 
+msgid "Japan GSI Standard Map"
+msgstr ""
+
 msgid "imagico.de OSM images for mapping: Aral Sea (low water level)"
 msgstr ""
 
@@ -24663,7 +24721,7 @@ msgstr ""
 msgid "20cm ortho - Latvia - Coastline"
 msgstr ""
 
-msgid "1.cikla ortofotokarte - Latvia"
+msgid "Orthophoto 1st cycle (1994-1999) - Latvia"
 msgstr ""
 
 msgid "ORT10LT (Lithuania)"
@@ -24672,6 +24730,9 @@ msgstr "ORT10LT (立陶宛)"
 msgid "geoportail.lu all layers"
 msgstr ""
 
+msgid "geoportail.lu ortho latest"
+msgstr ""
+
 msgid "geoportail.lu ortho 2016"
 msgstr ""
 
@@ -26162,6 +26223,9 @@ msgstr "錯誤的值:{0}"
 msgid "{0} on a node. Should be used on a way."
 msgstr ""
 
+msgid "{0} on a node. Should be used on a way or relation."
+msgstr ""
+
 msgid "{0} on a node. Should be drawn as an area."
 msgstr ""
 
@@ -26389,6 +26453,9 @@ msgstr "{0} 不合理"
 msgid "Nodes duplicating parent way tags"
 msgstr "節點重複了上層路徑的標籤"
 
+msgid "{0} together with {1} and {2}. Remove {0}."
+msgstr ""
+
 msgid ""
 "wikipedia tag has no language given, use ''wikipedia''=''language:page "
 "title''"
@@ -27155,6 +27222,21 @@ msgstr "上傳軌跡至 openstreetmap.org"
 msgid "Importing..."
 msgstr "正在匯入..."
 
+msgid "Shape is started incorrectly"
+msgstr ""
+
+msgid "Can''t load SVG diagram"
+msgstr ""
+
+msgid "Can''t find root SVG element"
+msgstr ""
+
+msgid "Import primitives"
+msgstr ""
+
+msgid "Cannot find configuration file!"
+msgstr ""
+
 msgid "DXF files [ImportDxf plugin] (*.dxf)"
 msgstr "DXF 檔案 [匯入 DXF 插件] (*.dxf)"
 
@@ -27793,6 +27875,9 @@ msgstr ""
 msgid "Download mode"
 msgstr "下載模式"
 
+msgid "Number of images to be pre-fetched (forwards and backwards)"
+msgstr ""
+
 msgid "You are logged in as ''{0}''."
 msgstr "你已經登入為 ''{0}''。"
 
@@ -27999,8 +28084,17 @@ msgid "only when manually requested"
 msgstr ""
 
 msgid ""
-"The downloaded OSM area is too big. Download mode has been changed to OSM "
-"area until the layer is restarted."
+"The Mapillary layer has stopped downloading images, because the requested "
+"area is too big!"
+msgstr ""
+
+msgid ""
+"To solve this problem, you could zoom in and load a smaller area of the map."
+msgstr ""
+
+msgid ""
+"To solve this problem, you could switch to download mode ''{0}'' and load "
+"Mapillary images for a smaller portion of the map."
 msgstr ""
 
 msgid "Downloading"
@@ -31391,19 +31485,6 @@ msgstr ""
 msgid "Merge Overlap (combine)"
 msgstr ""
 
-msgid ""
-"<html>A role based relation membership was copied to all new ways.<br>You "
-"should verify this and correct it when necessary.</html>"
-msgstr "<html>以角色為基礎的關聯成員會複製到所有的新路徑。<br>必要時你應該檢驗並修正它。</html>"
-
-msgid ""
-"<html>A relation membership was copied to all new ways.<br>You should verify "
-"this and correct it when necessary.</html>"
-msgstr "<html>將關聯成員複製到所有的新路徑。<br>你應該在必要時才檢驗這個項目並修正它。</html>"
-
-msgid "Split way"
-msgstr ""
-
 msgid "Michigan Left"
 msgstr "密西根左轉"
 
@@ -32854,33 +32935,6 @@ msgstr ""
 msgid "PT: Route passes a oneway road in the wrong direction"
 msgstr ""
 
-msgid "moved"
-msgstr "已移動"
-
-msgid "rail"
-msgstr "軌"
-
-msgid "Can''t parse a time from this string."
-msgstr ""
-
-msgid "Invalid value"
-msgstr "無效的值"
-
-msgid "added"
-msgstr "已加入"
-
-msgid "Public Transport: Enable GTFSStops"
-msgstr "大眾運輸:啟用 GTFSStops"
-
-msgid "Public Transport: Catch GTFS stops"
-msgstr "大眾運輸:抓取 GTFS stops"
-
-msgid "skipped"
-msgstr "已跳過"
-
-msgid "Public Transport: Disable GTFS"
-msgstr "大眾運輸:停用 GTFS"
-
 msgid "Create Stops from GTFS ..."
 msgstr "從 GTFS 建立停止點..."
 
@@ -32907,69 +32961,9 @@ msgstr "找不到資料"
 msgid "The GTFS file was empty."
 msgstr "GTFS 檔案是空的。"
 
-msgid "Create Stops from GTFS"
-msgstr "從 GTFS 建立停靠站。"
-
-msgid "GTFS-Stops"
-msgstr "GTFS-停止點"
-
-msgid "Type of stops to add"
-msgstr "要加入的停靠站類型"
-
-msgid "Time on your GPS device"
-msgstr "GPS 裝置的時間"
-
-msgid "HH:MM:SS.sss"
-msgstr "HH:MM:SS.sss"
-
-msgid "Time on your stopwatch"
-msgstr "你的碼表上時間"
-
-msgid "Time window"
-msgstr "時間視窗"
-
-msgid "seconds"
-msgstr "秒"
-
-msgid "Move Threshold"
-msgstr "移動門檻值"
-
-msgid "Suggest Stops"
-msgstr "建議停靠站"
-
-msgid "Find"
-msgstr "尋找"
-
-msgid "Show"
-msgstr "顯示"
-
-msgid "Mark"
-msgstr "標記"
-
-msgid "Catch"
-msgstr "抓取"
-
-msgid "Join"
-msgstr "加入"
-
-msgid "Public Transport: Join GTFS stops"
-msgstr "大眾運輸:加入 GTFS 停靠站"
-
-msgid "State"
-msgstr "州"
-
-msgid "[incomplete]"
-msgstr "[不完整]"
-
-msgid "[empty way]"
-msgstr "[空白路徑]"
-
 msgid "[ID] {0}"
 msgstr "[ID] {0}"
 
-msgid "[gap]"
-msgstr "[空隙]"
-
 msgid "Route patterns ..."
 msgstr "路線模式 ..."
 
@@ -33012,6 +33006,15 @@ msgstr "新入先的標籤"
 msgid "Name/Id"
 msgstr "名稱/ID"
 
+msgid "Find"
+msgstr "尋找"
+
+msgid "Show"
+msgstr "顯示"
+
+msgid "Mark"
+msgstr "標記"
+
 msgid "Ref"
 msgstr ""
 
@@ -33027,11 +33030,8 @@ msgstr "左手邊"
 msgid "Maximum distance from route"
 msgstr "從路線最大距離"
 
-msgid " [ID] {0}"
-msgstr " [ID] {0}"
-
-msgid "Public Transport: Change stop type"
-msgstr "大眾運輸:變更停靠站類型"
+msgid "Suggest Stops"
+msgstr "建議停靠站"
 
 msgid "Create Stops from GPX ..."
 msgstr "從 GPX 建立停止點..."
@@ -33045,28 +33045,29 @@ msgstr "選取 GPX 檔案"
 msgid "The GPX file contained no tracks or waypoints."
 msgstr "GPX 檔案裏沒有軌跡或航點。"
 
-msgid "Create Stops from GPX"
-msgstr "從 GPX 建立停靠站"
+msgid "moved"
+msgstr "已移動"
 
-msgid "Tracks in this GPX file:"
-msgstr "GPX 檔案裏的軌跡:"
+msgid "added"
+msgstr "已加入"
 
-msgid "Detach"
-msgstr ""
+msgid "Public Transport: Enable GTFSStops"
+msgstr "大眾運輸:啟用 GTFSStops"
 
-msgid "implicit"
-msgstr ""
+msgid "Public Transport: Catch GTFS stops"
+msgstr "大眾運輸:抓取 GTFS stops"
 
-msgid ""
-"The GPX file doesn''t contain valid trackpoints. Please use a GPX file that "
-"has trackpoints."
-msgstr "GPX 檔案裏沒有有效的軌跡點位,請使用含有正確軌跡的 GPX 檔案。"
+msgid "skipped"
+msgstr "已跳過"
 
-msgid "GPX File Trouble"
-msgstr "GPX 檔案有問題"
+msgid "Public Transport: Disable GTFS"
+msgstr "大眾運輸:停用 GTFS"
 
-msgid "unnamed"
-msgstr "未命名的"
+msgid "Public Transport: Join GTFS stops"
+msgstr "大眾運輸:加入 GTFS 停靠站"
+
+msgid "Public Transport: Change stop type"
+msgstr "大眾運輸:變更停靠站類型"
 
 msgid "Public Transport: Add track stop"
 msgstr ""
@@ -33089,9 +33090,6 @@ msgstr ""
 msgid "Public Transport: Suggest stops"
 msgstr "大眾運輸:建議停靠站"
 
-msgid "Stopname"
-msgstr "停靠站名稱"
-
 msgid "Public Transport: Detach waypoints"
 msgstr ""
 
@@ -33104,6 +33102,89 @@ msgstr ""
 msgid "Public Transport: Edit waypoint name"
 msgstr ""
 
+msgid "rail"
+msgstr "軌"
+
+msgid "Can''t parse a time from this string."
+msgstr ""
+
+msgid "Invalid value"
+msgstr "無效的值"
+
+msgid "Create Stops from GTFS"
+msgstr "從 GTFS 建立停靠站。"
+
+msgid "GTFS-Stops"
+msgstr "GTFS-停止點"
+
+msgid "Type of stops to add"
+msgstr "要加入的停靠站類型"
+
+msgid "Time on your GPS device"
+msgstr "GPS 裝置的時間"
+
+msgid "HH:MM:SS.sss"
+msgstr "HH:MM:SS.sss"
+
+msgid "Time on your stopwatch"
+msgstr "你的碼表上時間"
+
+msgid "Time window"
+msgstr "時間視窗"
+
+msgid "seconds"
+msgstr "秒"
+
+msgid "Move Threshold"
+msgstr "移動門檻值"
+
+msgid "Catch"
+msgstr "抓取"
+
+msgid "Join"
+msgstr "加入"
+
+msgid "Create Stops from GPX"
+msgstr "從 GPX 建立停靠站"
+
+msgid "Tracks in this GPX file:"
+msgstr "GPX 檔案裏的軌跡:"
+
+msgid "Detach"
+msgstr ""
+
+msgid "implicit"
+msgstr ""
+
+msgid "State"
+msgstr "州"
+
+msgid "[incomplete]"
+msgstr "[不完整]"
+
+msgid "[empty way]"
+msgstr "[空白路徑]"
+
+msgid "[gap]"
+msgstr "[空隙]"
+
+msgid "Stopname"
+msgstr "停靠站名稱"
+
+msgid " [ID] {0}"
+msgstr " [ID] {0}"
+
+msgid ""
+"The GPX file doesn''t contain valid trackpoints. Please use a GPX file that "
+"has trackpoints."
+msgstr "GPX 檔案裏沒有有效的軌跡點位,請使用含有正確軌跡的 GPX 檔案。"
+
+msgid "GPX File Trouble"
+msgstr "GPX 檔案有問題"
+
+msgid "unnamed"
+msgstr "未命名的"
+
 msgid "Distance between stops"
 msgstr "停靠站之間距離"
 
@@ -33830,6 +33911,9 @@ msgstr "啟動標籤編輯器對話盒"
 msgid "JOSM Tag Editor Plugin"
 msgstr "JOSM 標籤編輯器外掛程式"
 
+msgid "Presets"
+msgstr "預設組合"
+
 msgid "Abort tag editing and close dialog"
 msgstr "關閉此對話盒並放棄標籤的編輯"
 
@@ -35770,6 +35854,26 @@ 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] "自 {2} 以 ''{3}'' 這個值去覆蓋 ''{0}'' 標籤 {1} 嗎?"
 
+msgid "Download from Sophox API"
+msgstr ""
+
+msgid ""
+"Find places of education at least 2km, and at most 3km from the center of "
+"the selection"
+msgstr ""
+
+msgid "Show/hide Sophox snippet list"
+msgstr ""
+
+msgid "help"
+msgstr "說明"
+
+msgid "Server: "
+msgstr "伺服器: "
+
+msgid "Wikidata+OSM server"
+msgstr "Wikidata+OSM 伺服器"
+
 msgid "Search Wikidata items"
 msgstr "搜尋維基數據項目"
 
@@ -35843,26 +35947,6 @@ msgid ""
 "objects"
 msgstr "添加與本文對應的維基百科「標籤」至已選擇物件"
 
-msgid "Download from Wikosm API"
-msgstr "從 Wikosm API 下載"
-
-msgid ""
-"Find places of education at least 2km, and at most 3km from the center of "
-"the selection"
-msgstr ""
-
-msgid "Show/hide Wikosm snippet list"
-msgstr "顯示/隱藏Wikosm片段列表"
-
-msgid "help"
-msgstr "說明"
-
-msgid "Server: "
-msgstr "伺服器: "
-
-msgid "Wikidata+OSM server"
-msgstr "Wikidata+OSM 伺服器"
-
 msgid "The Ultimate WMS Super-speed Turbo Challenge II"
 msgstr ""
 
diff --git a/images/presets/barrier/kerb_pattern.svg b/images/presets/barrier/kerb_pattern.svg
new file mode 100644
index 0000000..d992833
--- /dev/null
+++ b/images/presets/barrier/kerb_pattern.svg
@@ -0,0 +1,79 @@
+<?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="7"
+   height="7"
+   viewBox="0 0 7 7"
+   id="svg2"
+   version="1.1"
+   inkscape:version="0.92.2 (5c3e80d, 2017-08-06)"
+   sodipodi:docname="07.svg">
+  <defs
+     id="defs4" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="45.254834"
+     inkscape:cx="0.056141185"
+     inkscape:cy="4.0346337"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     units="px"
+     inkscape:window-width="1680"
+     inkscape:window-height="987"
+     inkscape:window-x="-8"
+     inkscape:window-y="-8"
+     inkscape:window-maximized="1">
+    <inkscape:grid
+       type="xygrid"
+       id="grid4136" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+        <cc:license
+           rdf:resource="http://creativecommons.org/publicdomain/zero/1.0/" />
+      </cc:Work>
+      <cc:License
+         rdf:about="http://creativecommons.org/publicdomain/zero/1.0/">
+        <cc:permits
+           rdf:resource="http://creativecommons.org/ns#Reproduction" />
+        <cc:permits
+           rdf:resource="http://creativecommons.org/ns#Distribution" />
+        <cc:permits
+           rdf:resource="http://creativecommons.org/ns#DerivativeWorks" />
+      </cc:License>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(0,-1045.3622)">
+    <path
+       style="fill:#b2b2b2;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 1.6,1046.3622 h 3.8 l -1.9,6 z"
+       id="path4145"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cccc" />
+  </g>
+</svg>
diff --git a/netbeans/nbproject/project.properties b/netbeans/nbproject/project.properties
index 3373c80..7dcd191 100644
--- a/netbeans/nbproject/project.properties
+++ b/netbeans/nbproject/project.properties
@@ -30,14 +30,14 @@ dist.dir=dist
 dist.jar=${dist.dir}/josm.jar
 dist.javadoc.dir=${dist.dir}/javadoc
 endorsed.classpath=
-excludes=org/apache/commons/compress/compressors/CompressorException.java,org/apache/commons/compress/compressors/CompressorStreamFactory.java,org/apache/commons/compress/compressors/CompressorStreamProvider.java,org/apache/commons/compress/compressors/FileNameUtil.java,org/apache/commons/compress/compressors/brotli/**,org/apache/commons/compress/compressors/bzip2/BZip2Utils.java,org/apache/commons/compress/compressors/deflate/**,org/apache/commons/compress/compressors/gzip/**,org/apache [...]
+excludes=org/apache/commons/compress/compressors/CompressorException.java,org/apache/commons/compress/compressors/CompressorStreamFactory.java,org/apache/commons/compress/compressors/CompressorStreamProvider.java,org/apache/commons/compress/compressors/FileNameUtil.java,org/apache/commons/compress/compressors/brotli/**,org/apache/commons/compress/compressors/bzip2/BZip2Utils.java,org/apache/commons/compress/compressors/deflate/**,org/apache/commons/compress/compressors/gzip/**,org/apache [...]
 file.reference.commons-collections-3.2.2.jar=../test/lib/unitils-core/commons-collections-3.2.2.jar
 file.reference.commons-lang-2.6.jar=../test/lib/unitils-core/commons-lang-2.6.jar
 file.reference.commons-logging-1.1.3.jar=../test/lib/unitils-core/commons-logging-1.1.3.jar
 file.reference.commons-testing-2.1.0.jar=../test/lib/commons-testing/commons-testing-2.1.0.jar
 file.reference.core-src=../src
 file.reference.debug-1.0.jar=../test/lib/fest/debug-1.0.jar
-file.reference.equalsverifier-2.3.3.jar=../test/lib/equalsverifier-2.3.3.jar
+file.reference.equalsverifier-2.4.jar=../test/lib/equalsverifier-2.4.jar
 file.reference.fest-assert-1.0.jar=../test/lib/fest/fest-assert-1.0.jar
 file.reference.fest-reflect-1.1.jar=../test/lib/fest/fest-reflect-1.1.jar
 file.reference.fest-swing-1.1.jar=../test/lib/fest/fest-swing-1.1.jar
@@ -57,13 +57,15 @@ file.reference.test-performance=../test/performance
 file.reference.test-unit=../test/unit
 file.reference.unitils-core-3.4.6.jar=../test/lib/unitils-core/unitils-core-3.4.6.jar
 file.reference.system-rules-1.16.1.jar=../test/lib/system-rules-1.16.1.jar
-file.reference.wiremock-standalone-2.7.1.jar=../test/lib/wiremock-standalone-2.7.1.jar
+file.reference.wiremock-standalone-2.10.1.jar=../test/lib/wiremock-standalone-2.10.1.jar
+file.reference.awaitility-3.0.0.jar=../test/lib/awaitility-3.0.0.jar
 includes=**/*.java
 jar.compress=false
 javac.classpath=
 # Space-separated list of extra javac options
 javac.compilerargs=-Xlint:unchecked -Xlint:cast -Xlint:dep-ann -Xlint:divzero -Xlint:empty -Xlint:finally -Xlint:overrides -Xlint:static -Xlint:try  -Xlint:deprecation
 javac.deprecation=true
+javac.external.vm=false
 javac.processorpath=\
     ${javac.classpath}
 javac.source=1.8
@@ -73,7 +75,7 @@ javac.test.classpath=\
     ${build.classes.dir}:\
     ${file.reference.junit-4.12.jar}:\
     ${file.reference.jfcunit.jar}:\
-    ${file.reference.equalsverifier-2.3.3.jar}:\
+    ${file.reference.equalsverifier-2.4.jar}:\
     ${file.reference.hamcrest-core-1.3.jar}:\
     ${file.reference.MRJToolkitStubs-1.0.jar}:\
     ${file.reference.debug-1.0.jar}:\
@@ -91,7 +93,8 @@ javac.test.classpath=\
     ${file.reference.ognl-2.6.9.jar}:\
     ${file.reference.unitils-core-3.4.6.jar}:\
     ${file.reference.system-rules-1.16.1.jar}:\
-    ${file.reference.wiremock-standalone-2.7.1.jar}:\
+    ${file.reference.wiremock-standalone-2.10.1.jar}:\
+    ${file.reference.awaitility-3.0.0.jar}:\
     ${file.reference.spotbugs.jar}:\
     ${file.reference.commons-testing-2.1.0.jar}
 javac.test.processorpath=\
diff --git a/src/com/drew/imaging/ImageProcessingException.java b/src/com/drew/imaging/ImageProcessingException.java
index af03460..0d15eba 100755
--- a/src/com/drew/imaging/ImageProcessingException.java
+++ b/src/com/drew/imaging/ImageProcessingException.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2002-2016 Drew Noakes
+ * Copyright 2002-2017 Drew Noakes
  *
  *    Licensed under the Apache License, Version 2.0 (the "License");
  *    you may not use this file except in compliance with the License.
diff --git a/src/com/drew/imaging/PhotographicConversions.java b/src/com/drew/imaging/PhotographicConversions.java
index 07549da..19a3a5c 100644
--- a/src/com/drew/imaging/PhotographicConversions.java
+++ b/src/com/drew/imaging/PhotographicConversions.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2002-2016 Drew Noakes
+ * Copyright 2002-2017 Drew Noakes
  *
  *    Licensed under the Apache License, Version 2.0 (the "License");
  *    you may not use this file except in compliance with the License.
diff --git a/src/com/drew/imaging/jpeg/JpegMetadataReader.java b/src/com/drew/imaging/jpeg/JpegMetadataReader.java
index 220f05d..4e78fb7 100644
--- a/src/com/drew/imaging/jpeg/JpegMetadataReader.java
+++ b/src/com/drew/imaging/jpeg/JpegMetadataReader.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2002-2016 Drew Noakes
+ * Copyright 2002-2017 Drew Noakes
  *
  *    Licensed under the Apache License, Version 2.0 (the "License");
  *    you may not use this file except in compliance with the License.
@@ -40,6 +40,8 @@ import com.drew.metadata.iptc.IptcReader;
 //import com.drew.metadata.jfif.JfifReader;
 //import com.drew.metadata.jfxx.JfxxReader;
 import com.drew.metadata.jpeg.JpegCommentReader;
+import com.drew.metadata.jpeg.JpegDhtReader;
+import com.drew.metadata.jpeg.JpegDnlReader;
 import com.drew.metadata.jpeg.JpegReader;
 //import com.drew.metadata.photoshop.DuckyReader;
 //import com.drew.metadata.photoshop.PhotoshopReader;
@@ -62,8 +64,10 @@ public class JpegMetadataReader
             //new IccReader(),
             //new PhotoshopReader(),
             //new DuckyReader(),
-            new IptcReader()//,
-            //new AdobeJpegReader()
+            new IptcReader(),
+            //new AdobeJpegReader(),
+            new JpegDhtReader(),
+            new JpegDnlReader()
     );
 
     @NotNull
diff --git a/src/com/drew/imaging/jpeg/JpegProcessingException.java b/src/com/drew/imaging/jpeg/JpegProcessingException.java
index e2009d6..61e2b09 100644
--- a/src/com/drew/imaging/jpeg/JpegProcessingException.java
+++ b/src/com/drew/imaging/jpeg/JpegProcessingException.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2002-2016 Drew Noakes
+ * Copyright 2002-2017 Drew Noakes
  *
  *    Licensed under the Apache License, Version 2.0 (the "License");
  *    you may not use this file except in compliance with the License.
diff --git a/src/com/drew/imaging/jpeg/JpegSegmentData.java b/src/com/drew/imaging/jpeg/JpegSegmentData.java
index 0468073..11c367e 100644
--- a/src/com/drew/imaging/jpeg/JpegSegmentData.java
+++ b/src/com/drew/imaging/jpeg/JpegSegmentData.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2002-2016 Drew Noakes
+ * Copyright 2002-2017 Drew Noakes
  *
  *    Licensed under the Apache License, Version 2.0 (the "License");
  *    you may not use this file except in compliance with the License.
@@ -51,6 +51,7 @@ public class JpegSegmentData
      * @param segmentType  the type of the segment being added
      * @param segmentBytes the byte array holding data for the segment being added
      */
+    @SuppressWarnings({"MismatchedQueryAndUpdateOfCollection"})
     public void addSegment(byte segmentType, @NotNull byte[] segmentBytes)
     {
         getOrCreateSegmentList(segmentType).add(segmentBytes);
@@ -205,6 +206,7 @@ public class JpegSegmentData
      * @param segmentType identifies the required segment
      * @param occurrence  the zero-based index of the segment occurrence to remove.
      */
+    @SuppressWarnings({"MismatchedQueryAndUpdateOfCollection"})
     public void removeSegmentOccurrence(@NotNull JpegSegmentType segmentType, int occurrence)
     {
         removeSegmentOccurrence(segmentType.byteValue, occurrence);
@@ -217,6 +219,7 @@ public class JpegSegmentData
      * @param segmentType identifies the required segment
      * @param occurrence  the zero-based index of the segment occurrence to remove.
      */
+    @SuppressWarnings({"MismatchedQueryAndUpdateOfCollection"})
     public void removeSegmentOccurrence(byte segmentType, int occurrence)
     {
         final List<byte[]> segmentList = _segmentDataMap.get(segmentType);
diff --git a/src/com/drew/imaging/jpeg/JpegSegmentMetadataReader.java b/src/com/drew/imaging/jpeg/JpegSegmentMetadataReader.java
index 53338b1..e1d2aef 100644
--- a/src/com/drew/imaging/jpeg/JpegSegmentMetadataReader.java
+++ b/src/com/drew/imaging/jpeg/JpegSegmentMetadataReader.java
@@ -12,7 +12,7 @@ public interface JpegSegmentMetadataReader
      * Gets the set of JPEG segment types that this reader is interested in.
      */
     @NotNull
-    public Iterable<JpegSegmentType> getSegmentTypes();
+    Iterable<JpegSegmentType> getSegmentTypes();
 
     /**
      * Extracts metadata from all instances of a particular JPEG segment type.
@@ -22,5 +22,5 @@ public interface JpegSegmentMetadataReader
      * @param metadata The {@link Metadata} object into which extracted values should be merged.
      * @param segmentType The {@link JpegSegmentType} being read.
      */
-    public void readJpegSegments(@NotNull final Iterable<byte[]> segments, @NotNull final Metadata metadata, @NotNull final JpegSegmentType segmentType);
+    void readJpegSegments(@NotNull final Iterable<byte[]> segments, @NotNull final Metadata metadata, @NotNull final JpegSegmentType segmentType);
 }
diff --git a/src/com/drew/imaging/jpeg/JpegSegmentReader.java b/src/com/drew/imaging/jpeg/JpegSegmentReader.java
index 69402af..a6b0b5c 100644
--- a/src/com/drew/imaging/jpeg/JpegSegmentReader.java
+++ b/src/com/drew/imaging/jpeg/JpegSegmentReader.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2002-2016 Drew Noakes
+ * Copyright 2002-2017 Drew Noakes
  *
  *    Licensed under the Apache License, Version 2.0 (the "License");
  *    you may not use this file except in compliance with the License.
diff --git a/src/com/drew/imaging/jpeg/JpegSegmentType.java b/src/com/drew/imaging/jpeg/JpegSegmentType.java
index 797fb01..85bf0cc 100644
--- a/src/com/drew/imaging/jpeg/JpegSegmentType.java
+++ b/src/com/drew/imaging/jpeg/JpegSegmentType.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2002-2016 Drew Noakes
+ * Copyright 2002-2017 Drew Noakes
  *
  *    Licensed under the Apache License, Version 2.0 (the "License");
  *    you may not use this file except in compliance with the License.
@@ -92,58 +92,73 @@ public enum JpegSegmentType
     /** Define Quantization Table segment identifier. */
     DQT((byte)0xDB, false),
 
+    /** Define Number of Lines segment identifier. */
+    DNL((byte)0xDC, false),
+
+    /** Define Restart Interval segment identifier. */
+    DRI((byte)0xDD, false),
+
+    /** Define Hierarchical Progression segment identifier. */
+    DHP((byte)0xDE, false),
+
+    /** EXPand reference component(s) segment identifier. */
+    EXP((byte)0xDF, false),
+
     /** Define Huffman Table segment identifier. */
     DHT((byte)0xC4, false),
 
-    /** Start-of-Frame (0) segment identifier. */
+    /** Define Arithmetic Coding conditioning segment identifier. */
+    DAC((byte)0xCC, false),
+
+    /** Start-of-Frame (0) segment identifier for Baseline DCT. */
     SOF0((byte)0xC0, true),
 
-    /** Start-of-Frame (1) segment identifier. */
+    /** Start-of-Frame (1) segment identifier for Extended sequential DCT. */
     SOF1((byte)0xC1, true),
 
-    /** Start-of-Frame (2) segment identifier. */
+    /** Start-of-Frame (2) segment identifier for Progressive DCT. */
     SOF2((byte)0xC2, true),
 
-    /** Start-of-Frame (3) segment identifier. */
+    /** Start-of-Frame (3) segment identifier for Lossless (sequential). */
     SOF3((byte)0xC3, true),
 
 //    /** Start-of-Frame (4) segment identifier. */
 //    SOF4((byte)0xC4, true),
 
-    /** Start-of-Frame (5) segment identifier. */
+    /** Start-of-Frame (5) segment identifier for Differential sequential DCT. */
     SOF5((byte)0xC5, true),
 
-    /** Start-of-Frame (6) segment identifier. */
+    /** Start-of-Frame (6) segment identifier for Differential progressive DCT. */
     SOF6((byte)0xC6, true),
 
-    /** Start-of-Frame (7) segment identifier. */
+    /** Start-of-Frame (7) segment identifier for Differential lossless (sequential). */
     SOF7((byte)0xC7, true),
 
-    /** Start-of-Frame (8) segment identifier. */
-    SOF8((byte)0xC8, true),
+    /** Reserved for JPEG extensions. */
+    JPG((byte)0xC8, true),
 
-    /** Start-of-Frame (9) segment identifier. */
+    /** Start-of-Frame (9) segment identifier for Extended sequential DCT. */
     SOF9((byte)0xC9, true),
 
-    /** Start-of-Frame (10) segment identifier. */
+    /** Start-of-Frame (10) segment identifier for Progressive DCT. */
     SOF10((byte)0xCA, true),
 
-    /** Start-of-Frame (11) segment identifier. */
+    /** Start-of-Frame (11) segment identifier for Lossless (sequential). */
     SOF11((byte)0xCB, true),
 
 //    /** Start-of-Frame (12) segment identifier. */
 //    SOF12((byte)0xCC, true),
 
-    /** Start-of-Frame (13) segment identifier. */
+    /** Start-of-Frame (13) segment identifier for Differential sequential DCT. */
     SOF13((byte)0xCD, true),
 
-    /** Start-of-Frame (14) segment identifier. */
+    /** Start-of-Frame (14) segment identifier for Differential progressive DCT. */
     SOF14((byte)0xCE, true),
 
-    /** Start-of-Frame (15) segment identifier. */
+    /** Start-of-Frame (15) segment identifier for Differential lossless (sequential). */
     SOF15((byte)0xCF, true),
 
-    /** JPEG comment segment identifier. */
+    /** JPEG comment segment identifier for comments. */
     COM((byte)0xFE, true);
 
     public static final Collection<JpegSegmentType> canContainMetadataTypes;
diff --git a/src/com/drew/imaging/jpeg/package-info.java b/src/com/drew/imaging/jpeg/package-info.java
new file mode 100644
index 0000000..5a1911f
--- /dev/null
+++ b/src/com/drew/imaging/jpeg/package-info.java
@@ -0,0 +1,4 @@
+/**
+ * Contains classes for working with JPEG files.
+ */
+package com.drew.imaging.jpeg;
diff --git a/src/com/drew/imaging/jpeg/package.html b/src/com/drew/imaging/jpeg/package.html
deleted file mode 100644
index becfebb..0000000
--- a/src/com/drew/imaging/jpeg/package.html
+++ /dev/null
@@ -1,33 +0,0 @@
-<!--
-  ~ Copyright 2002-2016 Drew Noakes
-  ~
-  ~    Licensed under the Apache License, Version 2.0 (the "License");
-  ~    you may not use this file except in compliance with the License.
-  ~    You may obtain a copy of the License at
-  ~
-  ~        http://www.apache.org/licenses/LICENSE-2.0
-  ~
-  ~    Unless required by applicable law or agreed to in writing, software
-  ~    distributed under the License is distributed on an "AS IS" BASIS,
-  ~    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  ~    See the License for the specific language governing permissions and
-  ~    limitations under the License.
-  ~
-  ~ More information about this project is available at:
-  ~
-  ~    https://drewnoakes.com/code/exif/
-  ~    https://github.com/drewnoakes/metadata-extractor
-  -->
-
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
-<html>
-<head>
-</head>
-<body bgcolor="white">
-
-Contains classes for working with JPEG files.
-
-<!-- Put @see and @since tags down here. -->
-
-</body>
-</html>
diff --git a/src/com/drew/imaging/package-info.java b/src/com/drew/imaging/package-info.java
new file mode 100644
index 0000000..5899a9a
--- /dev/null
+++ b/src/com/drew/imaging/package-info.java
@@ -0,0 +1,5 @@
+/**
+ * Contains classes for working with image file formats and photographic conversions.
+ * <!-- Put @see and @since tags down here. -->
+ */
+package com.drew.imaging;
diff --git a/src/com/drew/imaging/package.html b/src/com/drew/imaging/package.html
deleted file mode 100644
index 349a247..0000000
--- a/src/com/drew/imaging/package.html
+++ /dev/null
@@ -1,33 +0,0 @@
-<!--
-  ~ Copyright 2002-2016 Drew Noakes
-  ~
-  ~    Licensed under the Apache License, Version 2.0 (the "License");
-  ~    you may not use this file except in compliance with the License.
-  ~    You may obtain a copy of the License at
-  ~
-  ~        http://www.apache.org/licenses/LICENSE-2.0
-  ~
-  ~    Unless required by applicable law or agreed to in writing, software
-  ~    distributed under the License is distributed on an "AS IS" BASIS,
-  ~    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  ~    See the License for the specific language governing permissions and
-  ~    limitations under the License.
-  ~
-  ~ More information about this project is available at:
-  ~
-  ~    https://drewnoakes.com/code/exif/
-  ~    https://github.com/drewnoakes/metadata-extractor
-  -->
-
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
-<html>
-<head>
-</head>
-<body bgcolor="white">
-
-Contains classes for working with image file formats and photographic conversions.
-
-<!-- Put @see and @since tags down here. -->
-
-</body>
-</html>
diff --git a/src/com/drew/imaging/tiff/TiffDataFormat.java b/src/com/drew/imaging/tiff/TiffDataFormat.java
index dff2a5f..bf99dc4 100644
--- a/src/com/drew/imaging/tiff/TiffDataFormat.java
+++ b/src/com/drew/imaging/tiff/TiffDataFormat.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2002-2016 Drew Noakes
+ * Copyright 2002-2017 Drew Noakes
  *
  *    Licensed under the Apache License, Version 2.0 (the "License");
  *    you may not use this file except in compliance with the License.
diff --git a/src/com/drew/imaging/tiff/TiffHandler.java b/src/com/drew/imaging/tiff/TiffHandler.java
index 69382e7..fd24d06 100644
--- a/src/com/drew/imaging/tiff/TiffHandler.java
+++ b/src/com/drew/imaging/tiff/TiffHandler.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2002-2016 Drew Noakes
+ * Copyright 2002-2017 Drew Noakes
  *
  *    Licensed under the Apache License, Version 2.0 (the "License");
  *    you may not use this file except in compliance with the License.
@@ -24,6 +24,7 @@ import com.drew.lang.RandomAccessReader;
 import com.drew.lang.Rational;
 import com.drew.lang.annotations.NotNull;
 import com.drew.lang.annotations.Nullable;
+import com.drew.metadata.StringValue;
 
 import java.io.IOException;
 import java.util.Set;
@@ -51,8 +52,6 @@ public interface TiffHandler
 
     void endingIFD();
 
-    void completed(@NotNull final RandomAccessReader reader, final int tiffHeaderOffset);
-
     @Nullable
     Long tryCustomProcessFormat(int tagId, int formatCode, long componentCount);
 
@@ -67,7 +66,7 @@ public interface TiffHandler
     void error(@NotNull String message);
 
     void setByteArray(int tagId, @NotNull byte[] bytes);
-    void setString(int tagId, @NotNull String string);
+    void setString(int tagId, @NotNull StringValue string);
     void setRational(int tagId, @NotNull Rational rational);
     void setRationalArray(int tagId, @NotNull Rational[] array);
     void setFloat(int tagId, float float32);
diff --git a/src/com/drew/imaging/tiff/TiffProcessingException.java b/src/com/drew/imaging/tiff/TiffProcessingException.java
index 5ad55a8..123cc21 100644
--- a/src/com/drew/imaging/tiff/TiffProcessingException.java
+++ b/src/com/drew/imaging/tiff/TiffProcessingException.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2002-2016 Drew Noakes
+ * Copyright 2002-2017 Drew Noakes
  *
  *    Licensed under the Apache License, Version 2.0 (the "License");
  *    you may not use this file except in compliance with the License.
diff --git a/src/com/drew/imaging/tiff/TiffReader.java b/src/com/drew/imaging/tiff/TiffReader.java
index 22fd1ae..dd4aefe 100644
--- a/src/com/drew/imaging/tiff/TiffReader.java
+++ b/src/com/drew/imaging/tiff/TiffReader.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2002-2016 Drew Noakes
+ * Copyright 2002-2017 Drew Noakes
  *
  *    Licensed under the Apache License, Version 2.0 (the "License");
  *    you may not use this file except in compliance with the License.
@@ -76,8 +76,6 @@ public class TiffReader
 
         Set<Integer> processedIfdOffsets = new HashSet<Integer>();
         processIfd(handler, reader, processedIfdOffsets, firstIfdOffset, tiffHeaderOffset);
-
-        handler.completed(reader, tiffHeaderOffset);
     }
 
     /**
@@ -264,7 +262,7 @@ public class TiffReader
                 handler.setByteArray(tagId, reader.getBytes(tagValueOffset, componentCount));
                 break;
             case TiffDataFormat.CODE_STRING:
-                handler.setString(tagId, reader.getNullTerminatedString(tagValueOffset, componentCount));
+                handler.setString(tagId, reader.getNullTerminatedStringValue(tagValueOffset, componentCount, null));
                 break;
             case TiffDataFormat.CODE_RATIONAL_S:
                 if (componentCount == 1) {
diff --git a/src/com/drew/imaging/tiff/package-info.java b/src/com/drew/imaging/tiff/package-info.java
new file mode 100644
index 0000000..0bd2d4f
--- /dev/null
+++ b/src/com/drew/imaging/tiff/package-info.java
@@ -0,0 +1,4 @@
+/**
+ * Contains classes for working with TIFF format files.
+ */
+package com.drew.imaging.tiff;
diff --git a/src/com/drew/imaging/tiff/package.html b/src/com/drew/imaging/tiff/package.html
deleted file mode 100644
index e2d7bf7..0000000
--- a/src/com/drew/imaging/tiff/package.html
+++ /dev/null
@@ -1,33 +0,0 @@
-<!--
-  ~ Copyright 2002-2016 Drew Noakes
-  ~
-  ~    Licensed under the Apache License, Version 2.0 (the "License");
-  ~    you may not use this file except in compliance with the License.
-  ~    You may obtain a copy of the License at
-  ~
-  ~        http://www.apache.org/licenses/LICENSE-2.0
-  ~
-  ~    Unless required by applicable law or agreed to in writing, software
-  ~    distributed under the License is distributed on an "AS IS" BASIS,
-  ~    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  ~    See the License for the specific language governing permissions and
-  ~    limitations under the License.
-  ~
-  ~ More information about this project is available at:
-  ~
-  ~    https://drewnoakes.com/code/exif/
-  ~    https://github.com/drewnoakes/metadata-extractor
-  -->
-
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
-<html>
-<head>
-</head>
-<body bgcolor="white">
-
-Contains classes for working with TIFF format files.
-
-<!-- Put @see and @since tags down here. -->
-
-</body>
-</html>
diff --git a/src/com/drew/lang/BufferBoundsException.java b/src/com/drew/lang/BufferBoundsException.java
index 522995c..6045a0a 100755
--- a/src/com/drew/lang/BufferBoundsException.java
+++ b/src/com/drew/lang/BufferBoundsException.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2002-2016 Drew Noakes
+ * Copyright 2002-2017 Drew Noakes
  *
  *    Licensed under the Apache License, Version 2.0 (the "License");
  *    you may not use this file except in compliance with the License.
diff --git a/src/com/drew/lang/ByteArrayReader.java b/src/com/drew/lang/ByteArrayReader.java
index 17750e3..f5e58f0 100755
--- a/src/com/drew/lang/ByteArrayReader.java
+++ b/src/com/drew/lang/ByteArrayReader.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2002-2016 Drew Noakes
+ * Copyright 2002-2017 Drew Noakes
  *
  *    Licensed under the Apache License, Version 2.0 (the "License");
  *    you may not use this file except in compliance with the License.
@@ -21,10 +21,10 @@
 
 package com.drew.lang;
 
-import java.io.IOException;
-
 import com.drew.lang.annotations.NotNull;
 
+import java.io.IOException;
+
 /**
  * Provides methods to read specific values from a byte array, with a consistent, checked exception structure for
  * issues.
@@ -38,32 +38,52 @@ public class ByteArrayReader extends RandomAccessReader
 {
     @NotNull
     private final byte[] _buffer;
+    private final int _baseOffset;
 
+    @SuppressWarnings({ "ConstantConditions" })
+    @com.drew.lang.annotations.SuppressWarnings(value = "EI_EXPOSE_REP2", justification = "Design intent")
     public ByteArrayReader(@NotNull byte[] buffer)
     {
+        this(buffer, 0);
+    }
+
+    @SuppressWarnings({ "ConstantConditions" })
+    @com.drew.lang.annotations.SuppressWarnings(value = "EI_EXPOSE_REP2", justification = "Design intent")
+    public ByteArrayReader(@NotNull byte[] buffer, int baseOffset)
+    {
         if (buffer == null)
             throw new NullPointerException();
+        if (baseOffset < 0)
+            throw new IllegalArgumentException("Must be zero or greater");
 
         _buffer = buffer;
+        _baseOffset = baseOffset;
+    }
+
+    @Override
+    public int toUnshiftedOffset(int localOffset)
+    {
+        return localOffset + _baseOffset;
     }
 
     @Override
     public long getLength()
     {
-        return _buffer.length;
+        return _buffer.length - _baseOffset;
     }
 
     @Override
-    protected byte getByte(int index) throws IOException
+    public byte getByte(int index) throws IOException
     {
-        return _buffer[index];
+        validateIndex(index, 1);
+        return _buffer[index + _baseOffset];
     }
 
     @Override
     protected void validateIndex(int index, int bytesRequested) throws IOException
     {
         if (!isValidIndex(index, bytesRequested))
-            throw new BufferBoundsException(index, bytesRequested, _buffer.length);
+            throw new BufferBoundsException(toUnshiftedOffset(index), bytesRequested, _buffer.length);
     }
 
     @Override
@@ -71,7 +91,7 @@ public class ByteArrayReader extends RandomAccessReader
     {
         return bytesRequested >= 0
             && index >= 0
-            && (long)index + (long)bytesRequested - 1L < _buffer.length;
+            && (long)index + (long)bytesRequested - 1L < getLength();
     }
 
     @Override
@@ -81,7 +101,7 @@ public class ByteArrayReader extends RandomAccessReader
         validateIndex(index, count);
 
         byte[] bytes = new byte[count];
-        System.arraycopy(_buffer, index, bytes, 0, count);
+        System.arraycopy(_buffer, index + _baseOffset, bytes, 0, count);
         return bytes;
     }
 }
diff --git a/src/com/drew/metadata/exif/ExifInteropDescriptor.java b/src/com/drew/lang/Charsets.java
similarity index 53%
copy from src/com/drew/metadata/exif/ExifInteropDescriptor.java
copy to src/com/drew/lang/Charsets.java
index 65de2d6..dcb2efd 100644
--- a/src/com/drew/metadata/exif/ExifInteropDescriptor.java
+++ b/src/com/drew/lang/Charsets.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2002-2016 Drew Noakes
+ * Copyright 2002-2017 Drew Noakes
  *
  *    Licensed under the Apache License, Version 2.0 (the "License");
  *    you may not use this file except in compliance with the License.
@@ -18,19 +18,23 @@
  *    https://drewnoakes.com/code/exif/
  *    https://github.com/drewnoakes/metadata-extractor
  */
-package com.drew.metadata.exif;
+package com.drew.lang;
 
-import com.drew.lang.annotations.NotNull;
+import java.nio.charset.Charset;
 
 /**
- * Provides human-readable string representations of tag values stored in a {@link ExifInteropDirectory}.
+ * Holds a set of commonly used character encodings.
+ *
+ * Newer JDKs include java.nio.charset.StandardCharsets, but we cannot use that in this library.
  *
  * @author Drew Noakes https://drewnoakes.com
  */
-public class ExifInteropDescriptor extends ExifDescriptorBase<ExifInteropDirectory>
+public final class Charsets
 {
-    public ExifInteropDescriptor(@NotNull ExifInteropDirectory directory)
-    {
-        super(directory);
-    }
+    public static final Charset UTF_8 = Charset.forName("UTF-8");
+    public static final Charset UTF_16 = Charset.forName("UTF-16");
+    public static final Charset ISO_8859_1 = Charset.forName("ISO-8859-1");
+    public static final Charset ASCII = Charset.forName("US-ASCII");
+    public static final Charset UTF_16BE = Charset.forName("UTF-16BE");
+    public static final Charset UTF_16LE = Charset.forName("UTF-16LE");
 }
diff --git a/src/com/drew/lang/CompoundException.java b/src/com/drew/lang/CompoundException.java
index 3663c74..d065fec 100644
--- a/src/com/drew/lang/CompoundException.java
+++ b/src/com/drew/lang/CompoundException.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2002-2016 Drew Noakes
+ * Copyright 2002-2017 Drew Noakes
  *
  *    Licensed under the Apache License, Version 2.0 (the "License");
  *    you may not use this file except in compliance with the License.
diff --git a/src/com/drew/lang/GeoLocation.java b/src/com/drew/lang/GeoLocation.java
index f5aa6b5..a346484 100755
--- a/src/com/drew/lang/GeoLocation.java
+++ b/src/com/drew/lang/GeoLocation.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2002-2016 Drew Noakes
+ * Copyright 2002-2017 Drew Noakes
  *
  *    Licensed under the Apache License, Version 2.0 (the "License");
  *    you may not use this file except in compliance with the License.
diff --git a/src/com/drew/lang/RandomAccessReader.java b/src/com/drew/lang/RandomAccessReader.java
index 706dbdd..3965c41 100644
--- a/src/com/drew/lang/RandomAccessReader.java
+++ b/src/com/drew/lang/RandomAccessReader.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2002-2016 Drew Noakes
+ * Copyright 2002-2017 Drew Noakes
  *
  *    Licensed under the Apache License, Version 2.0 (the "License");
  *    you may not use this file except in compliance with the License.
@@ -21,10 +21,13 @@
 
 package com.drew.lang;
 
-import com.drew.lang.annotations.NotNull;
-
 import java.io.IOException;
 import java.io.UnsupportedEncodingException;
+import java.nio.charset.Charset;
+
+import com.drew.lang.annotations.NotNull;
+import com.drew.lang.annotations.Nullable;
+import com.drew.metadata.StringValue;
 
 /**
  * Base class for random access data reading operations of common data types.
@@ -35,7 +38,6 @@ import java.io.UnsupportedEncodingException;
  * Concrete implementations include:
  * <ul>
  *     <li>{@link ByteArrayReader}</li>
- *     <li>{@link RandomAccessStreamReader}</li>
  * </ul>
  *
  * @author Drew Noakes https://drewnoakes.com
@@ -44,6 +46,8 @@ public abstract class RandomAccessReader
 {
     private boolean _isMotorolaByteOrder = true;
 
+    public abstract int toUnshiftedOffset(int localOffset);
+
     /**
      * Gets the byte value at the specified byte <code>index</code>.
      * <p>
@@ -56,7 +60,7 @@ public abstract class RandomAccessReader
      * @throws BufferBoundsException if the requested byte is beyond the end of the underlying data source
      * @throws IOException if the byte is unable to be read
      */
-    protected abstract byte getByte(int index) throws IOException;
+    public abstract byte getByte(int index) throws IOException;
 
     /**
      * Returns the required number of bytes from the specified index from the underlying source.
@@ -88,11 +92,11 @@ public abstract class RandomAccessReader
     /**
      * Returns the length of the data source in bytes.
      * <p>
-     * This is a simple operation for implementations (such as {@link RandomAccessFileReader} and
+     * This is a simple operation for implementations (such as
      * {@link ByteArrayReader}) that have the entire data source available.
      * <p>
-     * Users of this method must be aware that sequentially accessed implementations such as
-     * {@link RandomAccessStreamReader} will have to read and buffer the entire data source in
+     * Users of this method must be aware that sequentially accessed implementations
+     * will have to read and buffer the entire data source in
      * order to determine the length.
      *
      * @return the length of the data source, in bytes.
@@ -206,12 +210,12 @@ public abstract class RandomAccessReader
 
         if (_isMotorolaByteOrder) {
             // Motorola - MSB first
-            return (short) (((short)getByte(index    ) << 8 & (short)0xFF00) |
-                            ((short)getByte(index + 1)      & (short)0xFF));
+            return (short) ((getByte(index    ) << 8 & (short)0xFF00) |
+                            (getByte(index + 1)      & (short)0xFF));
         } else {
             // Intel ordering - LSB first
-            return (short) (((short)getByte(index + 1) << 8 & (short)0xFF00) |
-                            ((short)getByte(index    )      & (short)0xFF));
+            return (short) ((getByte(index + 1) << 8 & (short)0xFF00) |
+                            (getByte(index    )      & (short)0xFF));
         }
     }
 
@@ -228,14 +232,14 @@ public abstract class RandomAccessReader
 
         if (_isMotorolaByteOrder) {
             // Motorola - MSB first (big endian)
-            return (((int)getByte(index    )) << 16 & 0xFF0000) |
-                   (((int)getByte(index + 1)) << 8  & 0xFF00) |
-                   (((int)getByte(index + 2))       & 0xFF);
+            return ((getByte(index    )) << 16 & 0xFF0000) |
+                   ((getByte(index + 1)) << 8  & 0xFF00) |
+                   ((getByte(index + 2))       & 0xFF);
         } else {
             // Intel ordering - LSB first (little endian)
-            return (((int)getByte(index + 2)) << 16 & 0xFF0000) |
-                   (((int)getByte(index + 1)) << 8  & 0xFF00) |
-                   (((int)getByte(index    ))       & 0xFF);
+            return ((getByte(index + 2)) << 16 & 0xFF0000) |
+                   ((getByte(index + 1)) << 8  & 0xFF00) |
+                   ((getByte(index    ))       & 0xFF);
         }
     }
 
@@ -255,13 +259,13 @@ public abstract class RandomAccessReader
             return (((long)getByte(index    )) << 24 & 0xFF000000L) |
                    (((long)getByte(index + 1)) << 16 & 0xFF0000L) |
                    (((long)getByte(index + 2)) << 8  & 0xFF00L) |
-                   (((long)getByte(index + 3))       & 0xFFL);
+                   ((getByte(index + 3))       & 0xFFL);
         } else {
             // Intel ordering - LSB first (little endian)
             return (((long)getByte(index + 3)) << 24 & 0xFF000000L) |
                    (((long)getByte(index + 2)) << 16 & 0xFF0000L) |
                    (((long)getByte(index + 1)) << 8  & 0xFF00L) |
-                   (((long)getByte(index    ))       & 0xFFL);
+                   ((getByte(index    ))       & 0xFFL);
         }
     }
 
@@ -311,7 +315,7 @@ public abstract class RandomAccessReader
                    ((long)getByte(index + 4) << 24 & 0xFF000000L) |
                    ((long)getByte(index + 5) << 16 & 0xFF0000L) |
                    ((long)getByte(index + 6) << 8  & 0xFF00L) |
-                   ((long)getByte(index + 7)       & 0xFFL);
+                   (getByte(index + 7)       & 0xFFL);
         } else {
             // Intel ordering - LSB first
             return ((long)getByte(index + 7) << 56 & 0xFF00000000000000L) |
@@ -321,7 +325,7 @@ public abstract class RandomAccessReader
                    ((long)getByte(index + 3) << 24 & 0xFF000000L) |
                    ((long)getByte(index + 2) << 16 & 0xFF0000L) |
                    ((long)getByte(index + 1) << 8  & 0xFF00L) |
-                   ((long)getByte(index    )       & 0xFFL);
+                   (getByte(index    )       & 0xFFL);
         }
     }
 
@@ -364,13 +368,19 @@ public abstract class RandomAccessReader
     }
 
     @NotNull
-    public String getString(int index, int bytesRequested) throws IOException
+    public StringValue getStringValue(int index, int bytesRequested, @Nullable Charset charset) throws IOException
     {
-        return new String(getBytes(index, bytesRequested));
+        return new StringValue(getBytes(index, bytesRequested), charset);
     }
 
     @NotNull
-    public String getString(int index, int bytesRequested, String charset) throws IOException
+    public String getString(int index, int bytesRequested, @NotNull Charset charset) throws IOException
+    {
+        return new String(getBytes(index, bytesRequested), charset.name());
+    }
+
+    @NotNull
+    public String getString(int index, int bytesRequested, @NotNull String charset) throws IOException
     {
         byte[] bytes = getBytes(index, bytesRequested);
         try {
@@ -391,17 +401,44 @@ public abstract class RandomAccessReader
      * @throws IOException The buffer does not contain enough bytes to satisfy this request.
      */
     @NotNull
-    public String getNullTerminatedString(int index, int maxLengthBytes) throws IOException
+    public String getNullTerminatedString(int index, int maxLengthBytes, @NotNull Charset charset) throws IOException
+    {
+        return new String(getNullTerminatedBytes(index, maxLengthBytes), charset.name());
+    }
+
+    @NotNull
+    public StringValue getNullTerminatedStringValue(int index, int maxLengthBytes, @Nullable Charset charset) throws IOException
     {
-        // NOTE currently only really suited to single-byte character strings
+        byte[] bytes = getNullTerminatedBytes(index, maxLengthBytes);
 
-        byte[] bytes = getBytes(index, maxLengthBytes);
+        return new StringValue(bytes, charset);
+    }
+
+    /**
+     * Returns the sequence of bytes punctuated by a <code>\0</code> value.
+     *
+     * @param index The index within the buffer at which to start reading the string.
+     * @param maxLengthBytes The maximum number of bytes to read. If a <code>\0</code> byte is not reached within this limit,
+     * the returned array will be <code>maxLengthBytes</code> long.
+     * @return The read byte array, excluding the null terminator.
+     * @throws IOException The buffer does not contain enough bytes to satisfy this request.
+     */
+    @NotNull
+    public byte[] getNullTerminatedBytes(int index, int maxLengthBytes) throws IOException
+    {
+        byte[] buffer = getBytes(index, maxLengthBytes);
 
         // Count the number of non-null bytes
         int length = 0;
-        while (length < bytes.length && bytes[length] != '\0')
+        while (length < buffer.length && buffer[length] != 0)
             length++;
 
-        return new String(bytes, 0, length);
+        if (length == maxLengthBytes)
+            return buffer;
+
+        byte[] bytes = new byte[length];
+        if (length > 0)
+            System.arraycopy(buffer, 0, bytes, 0, length);
+        return bytes;
     }
 }
diff --git a/src/com/drew/lang/Rational.java b/src/com/drew/lang/Rational.java
index 17d15d6..8a83002 100644
--- a/src/com/drew/lang/Rational.java
+++ b/src/com/drew/lang/Rational.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2002-2016 Drew Noakes
+ * Copyright 2002-2017 Drew Noakes
  *
  *    Licensed under the Apache License, Version 2.0 (the "License");
  *    you may not use this file except in compliance with the License.
@@ -35,7 +35,8 @@ import java.io.Serializable;
  *
  * @author Drew Noakes https://drewnoakes.com
  */
-public class Rational extends java.lang.Number implements Serializable
+ at SuppressWarnings("WeakerAccess")
+public class Rational extends java.lang.Number implements Comparable<Rational>, Serializable
 {
     private static final long serialVersionUID = 510688928138848770L;
 
@@ -174,6 +175,12 @@ public class Rational extends java.lang.Number implements Serializable
                 (_denominator == 0 && _numerator == 0);
     }
 
+    /** Checks if either the numerator or denominator are zero. */
+    public boolean isZero()
+    {
+        return _numerator == 0 || _denominator == 0;
+    }
+
     /**
      * Returns a string representation of the object of form <code>numerator/denominator</code>.
      *
@@ -211,16 +218,47 @@ public class Rational extends java.lang.Number implements Serializable
     }
 
     /**
-     * Decides whether a brute-force simplification calculation should be avoided
-     * by comparing the maximum number of possible calculations with some threshold.
+     * Compares two {@link Rational} instances, returning true if they are mathematically
+     * equivalent (in consistence with {@link Rational#equals(Object)} method).
      *
-     * @return true if the simplification should be performed, otherwise false
+     * @param that the {@link Rational} to compare this instance to.
+     * @return the value {@code 0} if this {@link Rational} is
+     *         equal to the argument {@link Rational} mathematically; a value less
+     *         than {@code 0} if this {@link Rational} is less
+     *         than the argument {@link Rational}; and a value greater
+     *         than {@code 0} if this {@link Rational} is greater than the argument
+     *         {@link Rational}.
      */
-    private boolean tooComplexForSimplification()
-    {
-        double maxPossibleCalculations = (((double) (Math.min(_denominator, _numerator) - 1) / 5d) + 2);
-        final int maxSimplificationCalculations = 1000;
-        return maxPossibleCalculations > maxSimplificationCalculations;
+    public int compareTo(@NotNull Rational that) {
+        return Double.compare(this.doubleValue(), that.doubleValue());
+    }
+
+    /**
+     * Indicates whether this instance and <code>other</code> are numerically equal,
+     * even if their representations differ.
+     *
+     * For example, 1/2 is equal to 10/20 by this method.
+     * Similarly, 1/0 is equal to 100/0 by this method.
+     * To test equal representations, use EqualsExact.
+     *
+     * @param other The rational value to compare with
+     */
+    public boolean equals(Rational other) {
+        return other.doubleValue() == doubleValue();
+    }
+
+    /**
+     * Indicates whether this instance and <code>other</code> have identical
+     * Numerator and Denominator.
+     * <p>
+     * For example, 1/2 is not equal to 10/20 by this method.
+     * Similarly, 1/0 is not equal to 100/0 by this method.
+     * To test numerically equivalence, use Equals(Rational).</p>
+     *
+     * @param other The rational value to compare with
+     */
+    public boolean equalsExact(Rational other) {
+        return getDenominator() == other.getDenominator() && getNumerator() == other.getNumerator();
     }
 
     /**
@@ -248,49 +286,38 @@ public class Rational extends java.lang.Number implements Serializable
 
     /**
      * <p>
-     * Simplifies the {@link Rational} number.</p>
-     * <p>
-     * Prime number series: 1, 2, 3, 5, 7, 9, 11, 13, 17</p>
-     * <p>
-     * To reduce a rational, need to see if both numerator and denominator are divisible
-     * by a common factor.  Using the prime number series in ascending order guarantees
-     * the minimum number of checks required.</p>
+     * Simplifies the representation of this {@link Rational} number.</p>
      * <p>
-     * However, generating the prime number series seems to be a hefty task.  Perhaps
-     * it's simpler to check if both d & n are divisible by all numbers from 2 {@literal ->}
-     * (Math.min(denominator, numerator) / 2).  In doing this, one can check for 2
-     * and 5 once, then ignore all even numbers, and all numbers ending in 0 or 5.
-     * This leaves four numbers from every ten to check.</p>
+     * For example, 5/10 simplifies to 1/2 because both Numerator
+     * and Denominator share a common factor of 5.</p>
      * <p>
-     * Therefore, the max number of pairs of modulus divisions required will be:</p>
-     * <pre><code>
-     *    4   Math.min(denominator, numerator) - 1
-     *   -- * ------------------------------------ + 2
-     *   10                    2
+     * Uses the Euclidean Algorithm to find the greatest common divisor.</p>
      *
-     *   Math.min(denominator, numerator) - 1
-     * = ------------------------------------ + 2
-     *                  5
-     * </code></pre>
-     *
-     * @return a simplified instance, or if the Rational could not be simplified,
-     *         returns itself (unchanged)
+     * @return A simplified instance if one exists, otherwise a copy of the original value.
      */
     @NotNull
     public Rational getSimplifiedInstance()
     {
-        if (tooComplexForSimplification()) {
-            return this;
-        }
-        for (int factor = 2; factor <= Math.min(_denominator, _numerator); factor++) {
-            if ((factor % 2 == 0 && factor > 2) || (factor % 5 == 0 && factor > 5)) {
-                continue;
-            }
-            if (_denominator % factor == 0 && _numerator % factor == 0) {
-                // found a common factor
-                return new Rational(_numerator / factor, _denominator / factor);
-            }
+        long gcd = GCD(_numerator, _denominator);
+
+        return new Rational(_numerator / gcd, _denominator / gcd);
+    }
+
+    private static long GCD(long a, long b)
+    {
+        if (a < 0)
+            a = -a;
+        if (b < 0)
+            b = -b;
+
+        while (a != 0 && b != 0)
+        {
+            if (a > b)
+                a %= b;
+            else
+                b %= a;
         }
-        return this;
+
+        return a == 0 ? b : a;
     }
 }
diff --git a/src/com/drew/lang/SequentialByteArrayReader.java b/src/com/drew/lang/SequentialByteArrayReader.java
index 6e24c8e..846efeb 100644
--- a/src/com/drew/lang/SequentialByteArrayReader.java
+++ b/src/com/drew/lang/SequentialByteArrayReader.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2002-2016 Drew Noakes
+ * Copyright 2002-2017 Drew Noakes
  *
  *    Licensed under the Apache License, Version 2.0 (the "License");
  *    you may not use this file except in compliance with the License.
@@ -36,11 +36,18 @@ public class SequentialByteArrayReader extends SequentialReader
     private final byte[] _bytes;
     private int _index;
 
+    @Override
+    public long getPosition()
+    {
+        return _index;
+    }
+
     public SequentialByteArrayReader(@NotNull byte[] bytes)
     {
         this(bytes, 0);
     }
 
+    @SuppressWarnings("ConstantConditions")
     public SequentialByteArrayReader(@NotNull byte[] bytes, int baseIndex)
     {
         if (bytes == null)
@@ -51,7 +58,7 @@ public class SequentialByteArrayReader extends SequentialReader
     }
 
     @Override
-    protected byte getByte() throws IOException
+    public byte getByte() throws IOException
     {
         if (_index >= _bytes.length) {
             throw new EOFException("End of data reached.");
@@ -75,6 +82,17 @@ public class SequentialByteArrayReader extends SequentialReader
     }
 
     @Override
+    public void getBytes(@NotNull byte[] buffer, int offset, int count) throws IOException
+    {
+        if (_index + count > _bytes.length) {
+            throw new EOFException("End of data reached.");
+        }
+
+        System.arraycopy(_bytes, _index, buffer, offset, count);
+        _index += count;
+    }
+
+    @Override
     public void skip(long n) throws IOException
     {
         if (n < 0) {
@@ -104,4 +122,9 @@ public class SequentialByteArrayReader extends SequentialReader
 
         return true;
     }
+
+    @Override
+    public int available() {
+        return _bytes.length - _index;
+    }
 }
diff --git a/src/com/drew/lang/SequentialReader.java b/src/com/drew/lang/SequentialReader.java
index 26415f2..d172aa9 100644
--- a/src/com/drew/lang/SequentialReader.java
+++ b/src/com/drew/lang/SequentialReader.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2002-2016 Drew Noakes
+ * Copyright 2002-2017 Drew Noakes
  *
  *    Licensed under the Apache License, Version 2.0 (the "License");
  *    you may not use this file except in compliance with the License.
@@ -22,26 +22,32 @@
 package com.drew.lang;
 
 import com.drew.lang.annotations.NotNull;
+import com.drew.lang.annotations.Nullable;
+import com.drew.metadata.StringValue;
 
 import java.io.EOFException;
 import java.io.IOException;
 import java.io.UnsupportedEncodingException;
+import java.nio.charset.Charset;
 
 /**
  * @author Drew Noakes https://drewnoakes.com
  */
+ at SuppressWarnings("WeakerAccess")
 public abstract class SequentialReader
 {
     // TODO review whether the masks are needed (in both this and RandomAccessReader)
 
     private boolean _isMotorolaByteOrder = true;
 
+    public abstract long getPosition() throws IOException;
+
     /**
      * Gets the next byte in the sequence.
      *
      * @return The read byte value
      */
-    protected abstract byte getByte() throws IOException;
+    public abstract byte getByte() throws IOException;
 
     /**
      * Returns the required number of bytes from the sequence.
@@ -53,6 +59,14 @@ public abstract class SequentialReader
     public abstract byte[] getBytes(int count) throws IOException;
 
     /**
+     * Retrieves bytes, writing them into a caller-provided buffer.
+     * @param buffer The array to write bytes to.
+     * @param offset The starting position within buffer to write to.
+     * @param count The number of bytes to be written.
+     */
+    public abstract void getBytes(@NotNull byte[] buffer, int offset, int count) throws IOException;
+
+    /**
      * Skips forward in the sequence. If the sequence ends, an {@link EOFException} is thrown.
      *
      * @param n the number of byte to skip. Must be zero or greater.
@@ -71,6 +85,24 @@ public abstract class SequentialReader
     public abstract boolean trySkip(long n) throws IOException;
 
     /**
+     * Returns an estimate of the number of bytes that can be read (or skipped
+     * over) from this {@link SequentialReader} without blocking by the next
+     * invocation of a method for this input stream. A single read or skip of
+     * this many bytes will not block, but may read or skip fewer bytes.
+     * <p>
+     * Note that while some implementations of {@link SequentialReader} like
+     * {@link SequentialByteArrayReader} will return the total remaining number
+     * of bytes in the stream, others will not. It is never correct to use the
+     * return value of this method to allocate a buffer intended to hold all
+     * data in this stream.
+     *
+     * @return an estimate of the number of bytes that can be read (or skipped
+     *         over) from this {@link SequentialReader} without blocking or
+     *         {@code 0} when it reaches the end of the input stream.
+     */
+    public abstract int available();
+
+    /**
      * Sets the endianness of this reader.
      * <ul>
      * <li><code>true</code> for Motorola (or big) endianness (also known as network byte order), with MSB before LSB.</li>
@@ -283,6 +315,19 @@ public abstract class SequentialReader
         }
     }
 
+    @NotNull
+    public String getString(int bytesRequested, @NotNull Charset charset) throws IOException
+    {
+        byte[] bytes = getBytes(bytesRequested);
+        return new String(bytes, charset);
+    }
+
+    @NotNull
+    public StringValue getStringValue(int bytesRequested, @Nullable Charset charset) throws IOException
+    {
+        return new StringValue(getBytes(bytesRequested), charset);
+    }
+
     /**
      * Creates a String from the stream, ending where <code>byte=='\0'</code> or where <code>length==maxLength</code>.
      *
@@ -292,17 +337,53 @@ public abstract class SequentialReader
      * @throws IOException The buffer does not contain enough bytes to satisfy this request.
      */
     @NotNull
-    public String getNullTerminatedString(int maxLengthBytes) throws IOException
+    public String getNullTerminatedString(int maxLengthBytes, Charset charset) throws IOException
+    {
+       return getNullTerminatedStringValue(maxLengthBytes, charset).toString();
+    }
+
+    /**
+     * Creates a String from the stream, ending where <code>byte=='\0'</code> or where <code>length==maxLength</code>.
+     *
+     * @param maxLengthBytes The maximum number of bytes to read.  If a <code>\0</code> byte is not reached within this limit,
+     *                       reading will stop and the string will be truncated to this length.
+     * @param charset The <code>Charset</code> to register with the returned <code>StringValue</code>, or <code>null</code> if the encoding
+     *                is unknown
+     * @return The read string.
+     * @throws IOException The buffer does not contain enough bytes to satisfy this request.
+     */
+    @NotNull
+    public StringValue getNullTerminatedStringValue(int maxLengthBytes, Charset charset) throws IOException
     {
-        // NOTE currently only really suited to single-byte character strings
+        byte[] bytes = getNullTerminatedBytes(maxLengthBytes);
 
-        byte[] bytes = new byte[maxLengthBytes];
+        return new StringValue(bytes, charset);
+    }
+
+    /**
+     * Returns the sequence of bytes punctuated by a <code>\0</code> value.
+     *
+     * @param maxLengthBytes The maximum number of bytes to read. If a <code>\0</code> byte is not reached within this limit,
+     * the returned array will be <code>maxLengthBytes</code> long.
+     * @return The read byte array, excluding the null terminator.
+     * @throws IOException The buffer does not contain enough bytes to satisfy this request.
+     */
+    @NotNull
+    public byte[] getNullTerminatedBytes(int maxLengthBytes) throws IOException
+    {
+        byte[] buffer = new byte[maxLengthBytes];
 
         // Count the number of non-null bytes
         int length = 0;
-        while (length < bytes.length && (bytes[length] = getByte()) != '\0')
+        while (length < buffer.length && (buffer[length] = getByte()) != 0)
             length++;
 
-        return new String(bytes, 0, length);
+        if (length == maxLengthBytes)
+            return buffer;
+
+        byte[] bytes = new byte[length];
+        if (length > 0)
+            System.arraycopy(buffer, 0, bytes, 0, length);
+        return bytes;
     }
 }
diff --git a/src/com/drew/lang/StreamReader.java b/src/com/drew/lang/StreamReader.java
index 2d4fa8f..1e30b12 100644
--- a/src/com/drew/lang/StreamReader.java
+++ b/src/com/drew/lang/StreamReader.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2002-2016 Drew Noakes
+ * Copyright 2002-2017 Drew Noakes
  *
  *    Licensed under the Apache License, Version 2.0 (the "License");
  *    you may not use this file except in compliance with the License.
@@ -36,20 +36,31 @@ public class StreamReader extends SequentialReader
     @NotNull
     private final InputStream _stream;
 
+    private long _pos;
+
+    @Override
+    public long getPosition()
+    {
+        return _pos;
+    }
+
+    @SuppressWarnings("ConstantConditions")
     public StreamReader(@NotNull InputStream stream)
     {
         if (stream == null)
             throw new NullPointerException();
 
         _stream = stream;
+        _pos = 0;
     }
 
     @Override
-    protected byte getByte() throws IOException
+    public byte getByte() throws IOException
     {
         int value = _stream.read();
         if (value == -1)
             throw new EOFException("End of data reached.");
+        _pos++;
         return (byte)value;
     }
 
@@ -58,17 +69,23 @@ public class StreamReader extends SequentialReader
     public byte[] getBytes(int count) throws IOException
     {
         byte[] bytes = new byte[count];
-        int totalBytesRead = 0;
+        getBytes(bytes, 0, count);
+        return bytes;
+    }
 
-        while (totalBytesRead != count) {
-            final int bytesRead = _stream.read(bytes, totalBytesRead, count - totalBytesRead);
+    @Override
+    public void getBytes(@NotNull byte[] buffer, int offset, int count) throws IOException
+    {
+        int totalBytesRead = 0;
+        while (totalBytesRead != count)
+        {
+            final int bytesRead = _stream.read(buffer, offset + totalBytesRead, count - totalBytesRead);
             if (bytesRead == -1)
                 throw new EOFException("End of data reached.");
             totalBytesRead += bytesRead;
             assert(totalBytesRead <= count);
         }
-
-        return bytes;
+        _pos += totalBytesRead;
     }
 
     @Override
@@ -92,6 +109,15 @@ public class StreamReader extends SequentialReader
         return skipInternal(n) == n;
     }
 
+    @Override
+    public int available() {
+        try {
+            return _stream.available();
+        } catch (IOException e) {
+            return 0;
+        }
+    }
+
     private long skipInternal(long n) throws IOException
     {
         // It seems that for some streams, such as BufferedInputStream, that skip can return
@@ -108,6 +134,7 @@ public class StreamReader extends SequentialReader
             if (skipped == 0)
                 break;
         }
+        _pos += skippedTotal;
         return skippedTotal;
     }
 }
diff --git a/src/com/drew/lang/StringUtil.java b/src/com/drew/lang/StringUtil.java
index 5196e90..9423c35 100755
--- a/src/com/drew/lang/StringUtil.java
+++ b/src/com/drew/lang/StringUtil.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2002-2016 Drew Noakes
+ * Copyright 2002-2017 Drew Noakes
  *
  *    Licensed under the Apache License, Version 2.0 (the "License");
  *    you may not use this file except in compliance with the License.
@@ -33,7 +33,7 @@ import java.util.Iterator;
 /**
  * @author Drew Noakes https://drewnoakes.com
  */
-public class StringUtil
+public final class StringUtil
 {
     @NotNull
     public static String join(@NotNull Iterable<? extends CharSequence> strings, @NotNull String delimiter)
diff --git a/src/com/drew/lang/annotations/NotNull.java b/src/com/drew/lang/annotations/NotNull.java
index 283d4aa..0c48378 100755
--- a/src/com/drew/lang/annotations/NotNull.java
+++ b/src/com/drew/lang/annotations/NotNull.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2002-2016 Drew Noakes
+ * Copyright 2002-2017 Drew Noakes
  *
  *    Licensed under the Apache License, Version 2.0 (the "License");
  *    you may not use this file except in compliance with the License.
diff --git a/src/com/drew/lang/annotations/Nullable.java b/src/com/drew/lang/annotations/Nullable.java
index 7d2394f..017d280 100755
--- a/src/com/drew/lang/annotations/Nullable.java
+++ b/src/com/drew/lang/annotations/Nullable.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2002-2016 Drew Noakes
+ * Copyright 2002-2017 Drew Noakes
  *
  *    Licensed under the Apache License, Version 2.0 (the "License");
  *    you may not use this file except in compliance with the License.
diff --git a/src/com/drew/lang/annotations/NotNull.java b/src/com/drew/lang/annotations/SuppressWarnings.java
old mode 100755
new mode 100644
similarity index 57%
copy from src/com/drew/lang/annotations/NotNull.java
copy to src/com/drew/lang/annotations/SuppressWarnings.java
index 283d4aa..8f18f1b
--- a/src/com/drew/lang/annotations/NotNull.java
+++ b/src/com/drew/lang/annotations/SuppressWarnings.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2002-2016 Drew Noakes
+ * Copyright 2002-2011 Andreas Ziermann
  *
  *    Licensed under the Apache License, Version 2.0 (the "License");
  *    you may not use this file except in compliance with the License.
@@ -22,8 +22,21 @@
 package com.drew.lang.annotations;
 
 /**
- * @author Drew Noakes https://drewnoakes.com
+ * Used to suppress specific code analysis warnings produced by the Findbugs tool.
+ *
+ * @author Andreas Ziermann
  */
-public @interface NotNull
+public @interface SuppressWarnings
 {
+    /**
+     * The name of the warning to be suppressed.
+     * @return The name of the warning to be suppressed.
+     */
+    @NotNull String value();
+
+    /**
+     * An explanation of why it is valid to suppress the warning in a particular situation/context.
+     * @return An explanation of why it is valid to suppress the warning in a particular situation/context.
+     */
+    @NotNull String justification();
 }
diff --git a/src/com/drew/lang/annotations/package-info.java b/src/com/drew/lang/annotations/package-info.java
new file mode 100644
index 0000000..5e2f5a5
--- /dev/null
+++ b/src/com/drew/lang/annotations/package-info.java
@@ -0,0 +1,5 @@
+/**
+ * Contains annotations used to extend the signatures of methods and fields, allowing tools such as IntelliJ IDEA
+ * to provide design-time warnings about potential run-time errors.
+ */
+package com.drew.lang.annotations;
diff --git a/src/com/drew/lang/annotations/package.html b/src/com/drew/lang/annotations/package.html
deleted file mode 100644
index a69add3..0000000
--- a/src/com/drew/lang/annotations/package.html
+++ /dev/null
@@ -1,34 +0,0 @@
-<!--
-  ~ Copyright 2002-2016 Drew Noakes
-  ~
-  ~    Licensed under the Apache License, Version 2.0 (the "License");
-  ~    you may not use this file except in compliance with the License.
-  ~    You may obtain a copy of the License at
-  ~
-  ~        http://www.apache.org/licenses/LICENSE-2.0
-  ~
-  ~    Unless required by applicable law or agreed to in writing, software
-  ~    distributed under the License is distributed on an "AS IS" BASIS,
-  ~    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  ~    See the License for the specific language governing permissions and
-  ~    limitations under the License.
-  ~
-  ~ More information about this project is available at:
-  ~
-  ~    https://drewnoakes.com/code/exif/
-  ~    https://github.com/drewnoakes/metadata-extractor
-  -->
-
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
-<html>
-<head>
-</head>
-<body bgcolor="white">
-
-Contains annotations used to extend the signatures of methods and fields, allowing tools such as IntelliJ IDEA
-to provide design-time warnings about potential run-time errors.
-
-<!-- Put @see and @since tags down here. -->
-
-</body>
-</html>
diff --git a/src/com/drew/lang/package-info.java b/src/com/drew/lang/package-info.java
new file mode 100644
index 0000000..6c4e041
--- /dev/null
+++ b/src/com/drew/lang/package-info.java
@@ -0,0 +1,4 @@
+/**
+ * Contains classes of generic utility.
+ */
+package com.drew.lang;
diff --git a/src/com/drew/lang/package.html b/src/com/drew/lang/package.html
deleted file mode 100644
index daefa78..0000000
--- a/src/com/drew/lang/package.html
+++ /dev/null
@@ -1,33 +0,0 @@
-<!--
-  ~ Copyright 2002-2016 Drew Noakes
-  ~
-  ~    Licensed under the Apache License, Version 2.0 (the "License");
-  ~    you may not use this file except in compliance with the License.
-  ~    You may obtain a copy of the License at
-  ~
-  ~        http://www.apache.org/licenses/LICENSE-2.0
-  ~
-  ~    Unless required by applicable law or agreed to in writing, software
-  ~    distributed under the License is distributed on an "AS IS" BASIS,
-  ~    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  ~    See the License for the specific language governing permissions and
-  ~    limitations under the License.
-  ~
-  ~ More information about this project is available at:
-  ~
-  ~    https://drewnoakes.com/code/exif/
-  ~    https://github.com/drewnoakes/metadata-extractor
-  -->
-
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
-<html>
-<head>
-</head>
-<body bgcolor="white">
-
-Contains classes of generic utility.
-
-<!-- Put @see and @since tags down here. -->
-
-</body>
-</html>
diff --git a/src/com/drew/metadata/Age.java b/src/com/drew/metadata/Age.java
index fb813b3..03d6cd6 100755
--- a/src/com/drew/metadata/Age.java
+++ b/src/com/drew/metadata/Age.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2002-2016 Drew Noakes
+ * Copyright 2002-2017 Drew Noakes
  *
  *    Licensed under the Apache License, Version 2.0 (the "License");
  *    you may not use this file except in compliance with the License.
@@ -50,9 +50,6 @@ public class Age
     @Nullable
     public static Age fromPanasonicString(@NotNull String s)
     {
-        if (s == null)
-            throw new NullPointerException();
-
         if (s.length() != 19 || s.startsWith("9999:99:99"))
             return null;
 
@@ -142,7 +139,7 @@ public class Age
     }
 
     @Override
-    public boolean equals(Object o)
+    public boolean equals(@Nullable Object o)
     {
         if (this == o) return true;
         if (o == null || getClass() != o.getClass()) return false;
diff --git a/src/com/drew/metadata/Directory.java b/src/com/drew/metadata/Directory.java
index 9bdd4bf..5ab379a 100644
--- a/src/com/drew/metadata/Directory.java
+++ b/src/com/drew/metadata/Directory.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2002-2016 Drew Noakes
+ * Copyright 2002-2017 Drew Noakes
  *
  *    Licensed under the Apache License, Version 2.0 (the "License");
  *    you may not use this file except in compliance with the License.
@@ -23,6 +23,7 @@ package com.drew.metadata;
 import com.drew.lang.Rational;
 import com.drew.lang.annotations.NotNull;
 import com.drew.lang.annotations.Nullable;
+import com.drew.lang.annotations.SuppressWarnings;
 
 import java.io.UnsupportedEncodingException;
 import java.lang.reflect.Array;
@@ -40,9 +41,10 @@ import java.util.regex.Pattern;
  *
  * @author Drew Noakes https://drewnoakes.com
  */
+ at java.lang.SuppressWarnings("WeakerAccess")
 public abstract class Directory
 {
-    private static final DecimalFormat _floatFormat = new DecimalFormat("0.###");
+    private static final String _floatFormatPattern = "0.###";
 
     /** Map of values hashed by type identifiers. */
     @NotNull
@@ -259,6 +261,20 @@ public abstract class Directory
     }
 
     /**
+     * Sets a <code>StringValue</code> value for the specified tag.
+     *
+     * @param tagType the tag's value as an int
+     * @param value   the value for the specified tag as a StringValue
+     */
+    @java.lang.SuppressWarnings({ "ConstantConditions" })
+    public void setStringValue(int tagType, @NotNull StringValue value)
+    {
+        if (value == null)
+            throw new NullPointerException("cannot set a null StringValue");
+        setObject(tagType, value);
+    }
+
+    /**
      * Sets a <code>String</code> value for the specified tag.
      *
      * @param tagType the tag's value as an int
@@ -284,6 +300,17 @@ public abstract class Directory
     }
 
     /**
+     * Sets a <code>StringValue[]</code> (array) for the specified tag.
+     *
+     * @param tagType the tag identifier
+     * @param strings the StringValue array to store
+     */
+    public void setStringValueArray(int tagType, @NotNull StringValue[] strings)
+    {
+        setObjectArray(tagType, strings);
+    }
+
+    /**
      * Sets a <code>boolean</code> value for the specified tag.
      *
      * @param tagType the tag's value as an int
@@ -439,12 +466,12 @@ public abstract class Directory
 
         if (o instanceof Number) {
             return ((Number)o).intValue();
-        } else if (o instanceof String) {
+        } else if (o instanceof String || o instanceof StringValue) {
             try {
-                return Integer.parseInt((String)o);
+                return Integer.parseInt(o.toString());
             } catch (NumberFormatException nfe) {
                 // convert the char array to an int
-                String s = (String)o;
+                String s = o.toString();
                 byte[] bytes = s.getBytes();
                 long val = 0;
                 for (byte aByte : bytes) {
@@ -465,13 +492,17 @@ public abstract class Directory
             int[] ints = (int[])o;
             if (ints.length == 1)
                 return ints[0];
+        } else if (o instanceof short[]) {
+            short[] shorts = (short[])o;
+            if (shorts.length == 1)
+                return (int)shorts[0];
         }
         return null;
     }
 
     /**
      * Gets the specified tag's value as a String array, if possible.  Only supported
-     * where the tag is set as String[], String, int[], byte[] or Rational[].
+     * where the tag is set as StringValue[], String[], StringValue, String, int[], byte[] or Rational[].
      *
      * @param tagType the tag identifier
      * @return the tag's value as an array of Strings. If the value is unset or cannot be converted, <code>null</code> is returned.
@@ -486,19 +517,30 @@ public abstract class Directory
             return (String[])o;
         if (o instanceof String)
             return new String[] { (String)o };
+        if (o instanceof StringValue)
+            return new String[] { o.toString() };
+        if (o instanceof StringValue[]) {
+            StringValue[] stringValues = (StringValue[])o;
+            String[] strings = new String[stringValues.length];
+            for (int i = 0; i < strings.length; i++)
+                strings[i] = stringValues[i].toString();
+            return strings;
+        }
         if (o instanceof int[]) {
             int[] ints = (int[])o;
             String[] strings = new String[ints.length];
             for (int i = 0; i < strings.length; i++)
                 strings[i] = Integer.toString(ints[i]);
             return strings;
-        } else if (o instanceof byte[]) {
+        }
+        if (o instanceof byte[]) {
             byte[] bytes = (byte[])o;
             String[] strings = new String[bytes.length];
             for (int i = 0; i < strings.length; i++)
                 strings[i] = Byte.toString(bytes[i]);
             return strings;
-        } else if (o instanceof Rational[]) {
+        }
+        if (o instanceof Rational[]) {
             Rational[] rationals = (Rational[])o;
             String[] strings = new String[rationals.length];
             for (int i = 0; i < strings.length; i++)
@@ -509,6 +551,26 @@ public abstract class Directory
     }
 
     /**
+     * Gets the specified tag's value as a StringValue array, if possible.
+     * Only succeeds if the tag is set as StringValue[], or StringValue.
+     *
+     * @param tagType the tag identifier
+     * @return the tag's value as an array of StringValues. If the value is unset or cannot be converted, <code>null</code> is returned.
+     */
+    @Nullable
+    public StringValue[] getStringValueArray(int tagType)
+    {
+        Object o = getObject(tagType);
+        if (o == null)
+            return null;
+        if (o instanceof StringValue[])
+            return (StringValue[])o;
+        if (o instanceof StringValue)
+            return new StringValue[] {(StringValue) o};
+        return null;
+    }
+
+    /**
      * Gets the specified tag's value as an int array, if possible.  Only supported
      * where the tag is set as String, Integer, int[], byte[] or Rational[].
      *
@@ -574,6 +636,8 @@ public abstract class Directory
         Object o = getObject(tagType);
         if (o == null) {
             return null;
+        } else if (o instanceof StringValue) {
+            return ((StringValue)o).getBytes();
         } else if (o instanceof Rational[]) {
             Rational[] rationals = (Rational[])o;
             byte[] bytes = new byte[rationals.length];
@@ -629,9 +693,9 @@ public abstract class Directory
         Object o = getObject(tagType);
         if (o == null)
             return null;
-        if (o instanceof String) {
+        if (o instanceof String || o instanceof StringValue) {
             try {
-                return Double.parseDouble((String)o);
+                return Double.parseDouble(o.toString());
             } catch (NumberFormatException nfe) {
                 return null;
             }
@@ -661,9 +725,9 @@ public abstract class Directory
         Object o = getObject(tagType);
         if (o == null)
             return null;
-        if (o instanceof String) {
+        if (o instanceof String || o instanceof StringValue) {
             try {
-                return Float.parseFloat((String)o);
+                return Float.parseFloat(o.toString());
             } catch (NumberFormatException nfe) {
                 return null;
             }
@@ -677,7 +741,7 @@ public abstract class Directory
     public long getLong(int tagType) throws MetadataException
     {
         Long value = getLongObject(tagType);
-        if (value!=null)
+        if (value != null)
             return value;
         Object o = getObject(tagType);
         if (o == null)
@@ -692,9 +756,9 @@ public abstract class Directory
         Object o = getObject(tagType);
         if (o == null)
             return null;
-        if (o instanceof String) {
+        if (o instanceof String || o instanceof StringValue) {
             try {
-                return Long.parseLong((String)o);
+                return Long.parseLong(o.toString());
             } catch (NumberFormatException nfe) {
                 return null;
             }
@@ -708,7 +772,7 @@ public abstract class Directory
     public boolean getBoolean(int tagType) throws MetadataException
     {
         Boolean value = getBooleanObject(tagType);
-        if (value!=null)
+        if (value != null)
             return value;
         Object o = getObject(tagType);
         if (o == null)
@@ -718,6 +782,7 @@ public abstract class Directory
 
     /** Returns the specified tag's value as a boolean.  If the tag is not set or cannot be converted, <code>null</code> is returned. */
     @Nullable
+    @SuppressWarnings(value = "NP_BOOLEAN_RETURN_NULL", justification = "keep API interface consistent")
     public Boolean getBooleanObject(int tagType)
     {
         Object o = getObject(tagType);
@@ -725,9 +790,9 @@ public abstract class Directory
             return null;
         if (o instanceof Boolean)
             return (Boolean)o;
-        if (o instanceof String) {
+        if (o instanceof String || o instanceof StringValue) {
             try {
-                return Boolean.getBoolean((String)o);
+                return Boolean.getBoolean(o.toString());
             } catch (NumberFormatException nfe) {
                 return null;
             }
@@ -787,7 +852,7 @@ public abstract class Directory
 
         java.util.Date date = null;
 
-        if (o instanceof String) {
+        if ((o instanceof String) || (o instanceof StringValue)) {
             // This seems to cover all known Exif and Xmp date strings
             // Note that "    :  :     :  :  " is a valid date string according to the Exif spec (which means 'unknown date'): http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif/datetimeoriginal.html
             String datePatterns[] = {
@@ -801,8 +866,10 @@ public abstract class Directory
                     "yyyy-MM-dd'T'HH:mm",
                     "yyyy-MM-dd",
                     "yyyy-MM",
+                    "yyyyMMdd", // as used in IPTC data
                     "yyyy" };
-            String dateString = (String)o;
+
+            String dateString = o.toString();
 
             // if the date string has subsecond information, it supersedes the subsecond parameter
             Pattern subsecondPattern = Pattern.compile("(\\d\\d:\\d\\d:\\d\\d)(\\.\\d+)");
@@ -944,13 +1011,13 @@ public abstract class Directory
                 for (int i = 0; i < arrayLength; i++) {
                     if (i != 0)
                         string.append(' ');
-                    string.append(_floatFormat.format(Array.getFloat(o, i)));
+                    string.append(new DecimalFormat(_floatFormatPattern).format(Array.getFloat(o, i)));
                 }
             } else if (componentType.getName().equals("double")) {
                 for (int i = 0; i < arrayLength; i++) {
                     if (i != 0)
                         string.append(' ');
-                    string.append(_floatFormat.format(Array.getDouble(o, i)));
+                    string.append(new DecimalFormat(_floatFormatPattern).format(Array.getDouble(o, i)));
                 }
             } else if (componentType.getName().equals("byte")) {
                 for (int i = 0; i < arrayLength; i++) {
@@ -966,10 +1033,10 @@ public abstract class Directory
         }
 
         if (o instanceof Double)
-            return _floatFormat.format(((Double)o).doubleValue());
+            return new DecimalFormat(_floatFormatPattern).format(((Double)o).doubleValue());
 
         if (o instanceof Float)
-            return _floatFormat.format(((Float)o).floatValue());
+            return new DecimalFormat(_floatFormatPattern).format(((Float)o).floatValue());
 
         // Note that several cameras leave trailing spaces (Olympus, Nikon) but this library is intended to show
         // the actual data within the file.  It is not inconceivable that whitespace may be significant here, so we
@@ -991,6 +1058,15 @@ public abstract class Directory
         }
     }
 
+    @Nullable
+    public StringValue getStringValue(int tagType)
+    {
+        Object o = getObject(tagType);
+        if (o instanceof StringValue)
+            return (StringValue)o;
+        return null;
+    }
+
     /**
      * Returns the object hashed for the particular tag type specified, if available.
      *
diff --git a/src/com/drew/metadata/exif/ExifIFD0Directory.java b/src/com/drew/metadata/ErrorDirectory.java
old mode 100755
new mode 100644
similarity index 56%
copy from src/com/drew/metadata/exif/ExifIFD0Directory.java
copy to src/com/drew/metadata/ErrorDirectory.java
index e1827af..7412421
--- a/src/com/drew/metadata/exif/ExifIFD0Directory.java
+++ b/src/com/drew/metadata/ErrorDirectory.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2002-2016 Drew Noakes
+ * Copyright 2002-2017 Drew Noakes
  *
  *    Licensed under the Apache License, Version 2.0 (the "License");
  *    you may not use this file except in compliance with the License.
@@ -18,50 +18,58 @@
  *    https://drewnoakes.com/code/exif/
  *    https://github.com/drewnoakes/metadata-extractor
  */
-
-package com.drew.metadata.exif;
-
-import java.util.HashMap;
+package com.drew.metadata;
 
 import com.drew.lang.annotations.NotNull;
+import java.util.*;
 
 /**
- * Describes Exif tags from the IFD0 directory.
+ * A directory to use for the reporting of errors. No values may be added to this directory, only warnings and errors.
  *
  * @author Drew Noakes https://drewnoakes.com
  */
-public class ExifIFD0Directory extends ExifDirectoryBase
+
+public final class ErrorDirectory extends Directory
 {
-    /** This tag is a pointer to the Exif SubIFD. */
-    public static final int TAG_EXIF_SUB_IFD_OFFSET = 0x8769;
 
-    /** This tag is a pointer to the Exif GPS IFD. */
-    public static final int TAG_GPS_INFO_OFFSET = 0x8825;
+    public ErrorDirectory()
+    {}
 
-    public ExifIFD0Directory()
+    public ErrorDirectory(String error)
     {
-        this.setDescriptor(new ExifIFD0Descriptor(this));
+        super.addError(error);
     }
 
+    @Override
     @NotNull
-    protected static final HashMap<Integer, String> _tagNameMap = new HashMap<Integer, String>();
-
-    static
+    public String getName()
     {
-        addExifTagNames(_tagNameMap);
+        return "Error";
     }
 
     @Override
     @NotNull
-    public String getName()
+    protected HashMap<Integer, String> getTagNameMap()
     {
-        return "Exif IFD0";
+        return new HashMap<Integer, String>();
     }
 
     @Override
     @NotNull
-    protected HashMap<Integer, String> getTagNameMap()
+    public String getTagName(int tagType)
+    {
+        return "";
+    }
+
+    @Override
+    public boolean hasTagName(int tagType)
+    {
+        return false;
+    }
+
+    @Override
+    public void setObject(int tagType, @NotNull Object value)
     {
-        return _tagNameMap;
+        throw new UnsupportedOperationException(String.format("Cannot add value to %s.", ErrorDirectory.class.getName()));
     }
 }
diff --git a/src/com/drew/metadata/Face.java b/src/com/drew/metadata/Face.java
index 5850f00..4178adb 100755
--- a/src/com/drew/metadata/Face.java
+++ b/src/com/drew/metadata/Face.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2002-2016 Drew Noakes
+ * Copyright 2002-2017 Drew Noakes
  *
  *    Licensed under the Apache License, Version 2.0 (the "License");
  *    you may not use this file except in compliance with the License.
diff --git a/src/com/drew/metadata/Metadata.java b/src/com/drew/metadata/Metadata.java
index 0ce8d5f..4d3d597 100644
--- a/src/com/drew/metadata/Metadata.java
+++ b/src/com/drew/metadata/Metadata.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2002-2016 Drew Noakes
+ * Copyright 2002-2017 Drew Noakes
  *
  *    Licensed under the Apache License, Version 2.0 (the "License");
  *    you may not use this file except in compliance with the License.
@@ -52,7 +52,7 @@ public final class Metadata
         return _directories;
     }
 
-    @Nullable
+    @NotNull
     @SuppressWarnings("unchecked")
     public <T extends Directory> Collection<T> getDirectoriesOfType(Class<T> type)
     {
diff --git a/src/com/drew/metadata/MetadataException.java b/src/com/drew/metadata/MetadataException.java
index 1520be7..25ba8bb 100644
--- a/src/com/drew/metadata/MetadataException.java
+++ b/src/com/drew/metadata/MetadataException.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2002-2016 Drew Noakes
+ * Copyright 2002-2017 Drew Noakes
  *
  *    Licensed under the Apache License, Version 2.0 (the "License");
  *    you may not use this file except in compliance with the License.
diff --git a/src/com/drew/metadata/file/FileMetadataDescriptor.java b/src/com/drew/metadata/StringValue.java
similarity index 52%
copy from src/com/drew/metadata/file/FileMetadataDescriptor.java
copy to src/com/drew/metadata/StringValue.java
index 85104c1..8c656e9 100644
--- a/src/com/drew/metadata/file/FileMetadataDescriptor.java
+++ b/src/com/drew/metadata/StringValue.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2002-2016 Drew Noakes
+ * Copyright 2002-2017 Drew Noakes
  *
  *    Licensed under the Apache License, Version 2.0 (the "License");
  *    you may not use this file except in compliance with the License.
@@ -18,45 +18,59 @@
  *    https://drewnoakes.com/code/exif/
  *    https://github.com/drewnoakes/metadata-extractor
  */
-package com.drew.metadata.file;
+package com.drew.metadata;
 
 import com.drew.lang.annotations.NotNull;
 import com.drew.lang.annotations.Nullable;
-import com.drew.metadata.TagDescriptor;
 
-import static com.drew.metadata.file.FileMetadataDirectory.*;
+import java.io.UnsupportedEncodingException;
+import java.nio.charset.Charset;
 
 /**
  * @author Drew Noakes https://drewnoakes.com
  */
-public class FileMetadataDescriptor extends TagDescriptor<FileMetadataDirectory>
+public final class StringValue
 {
-    public FileMetadataDescriptor(@NotNull FileMetadataDirectory directory)
+    @NotNull
+    private final byte[] _bytes;
+
+    @Nullable
+    private final Charset _charset;
+
+    public StringValue(@NotNull byte[] bytes, @Nullable Charset charset)
     {
-        super(directory);
+        _bytes = bytes;
+        _charset = charset;
     }
 
-    @Override
-    @Nullable
-    public String getDescription(int tagType)
+    @NotNull
+    public byte[] getBytes()
     {
-        switch (tagType) {
-            case TAG_FILE_SIZE:
-                return getFileSizeDescription();
-            default:
-                return super.getDescription(tagType);
-        }
+        return _bytes;
     }
 
     @Nullable
-    private String getFileSizeDescription()
+    public Charset getCharset()
+    {
+        return _charset;
+    }
+
+    @Override
+    public String toString()
     {
-        Long size = _directory.getLongObject(TAG_FILE_SIZE);
+        return toString(_charset);
+    }
 
-        if (size == null)
-            return null;
+    public String toString(@Nullable Charset charset)
+    {
+        if (charset != null) {
+            try {
+                return new String(_bytes, charset.name());
+            } catch (UnsupportedEncodingException ex) {
+                // fall through
+            }
+        }
 
-        return Long.toString(size) + " bytes";
+        return new String(_bytes);
     }
 }
-
diff --git a/src/com/drew/metadata/Tag.java b/src/com/drew/metadata/Tag.java
index aede481..3a05523 100644
--- a/src/com/drew/metadata/Tag.java
+++ b/src/com/drew/metadata/Tag.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2002-2016 Drew Noakes
+ * Copyright 2002-2017 Drew Noakes
  *
  *    Licensed under the Apache License, Version 2.0 (the "License");
  *    you may not use this file except in compliance with the License.
@@ -29,6 +29,7 @@ import com.drew.lang.annotations.Nullable;
  *
  * @author Drew Noakes https://drewnoakes.com
  */
+ at SuppressWarnings("unused")
 public class Tag
 {
     private final int _tagType;
@@ -83,7 +84,6 @@ public class Tag
      *
      * @return whether this tag has a name
      */
-    @NotNull
     public boolean hasTagName()
     {
         return _directory.hasTagName(_tagType);
diff --git a/src/com/drew/metadata/TagDescriptor.java b/src/com/drew/metadata/TagDescriptor.java
index 0550c3e..aef6bad 100644
--- a/src/com/drew/metadata/TagDescriptor.java
+++ b/src/com/drew/metadata/TagDescriptor.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2002-2016 Drew Noakes
+ * Copyright 2002-2017 Drew Noakes
  *
  *    Licensed under the Apache License, Version 2.0 (the "License");
  *    you may not use this file except in compliance with the License.
@@ -28,6 +28,7 @@ import com.drew.lang.annotations.Nullable;
 import java.io.UnsupportedEncodingException;
 import java.lang.reflect.Array;
 import java.math.RoundingMode;
+import java.nio.charset.Charset;
 import java.text.DecimalFormat;
 import java.text.SimpleDateFormat;
 import java.util.ArrayList;
@@ -73,7 +74,7 @@ public class TagDescriptor<T extends Directory>
         if (object.getClass().isArray()) {
             final int length = Array.getLength(object);
             if (length > 16) {
-                return String.format("[%d %s]", length, length == 1 ? "value" : "values");
+                return String.format("[%d values]", length);
             }
         }
 
@@ -268,7 +269,7 @@ public class TagDescriptor<T extends Directory>
     }
 
     @Nullable
-    protected String getAsciiStringFromBytes(int tag)
+    protected String getStringFromBytes(int tag, Charset cs)
     {
         byte[] values = _directory.getByteArray(tag);
 
@@ -276,7 +277,7 @@ public class TagDescriptor<T extends Directory>
             return null;
 
         try {
-            return new String(values, "ASCII").trim();
+            return new String(values, cs.name()).trim();
         } catch (UnsupportedEncodingException e) {
             return null;
         }
@@ -320,7 +321,7 @@ public class TagDescriptor<T extends Directory>
     {
         Rational[] values = _directory.getRationalArray(tag);
 
-        if (values == null || values.length != 4 || (values[0].doubleValue() == 0 && values[2].doubleValue() == 0))
+        if (values == null || values.length != 4 || (values[0].isZero() && values[2].isZero()))
             return null;
 
         StringBuilder sb = new StringBuilder();
@@ -330,7 +331,7 @@ public class TagDescriptor<T extends Directory>
         else
             sb.append(values[0].toSimpleString(true)).append('-').append(values[1].toSimpleString(true)).append("mm");
 
-        if (values[2].doubleValue() != 0) {
+        if (!values[2].isZero()) {
             sb.append(' ');
 
             DecimalFormat format = new DecimalFormat("0.0");
@@ -344,4 +345,122 @@ public class TagDescriptor<T extends Directory>
 
         return sb.toString();
     }
+
+    @Nullable
+    protected String getOrientationDescription(int tag)
+    {
+        return getIndexedDescription(tag, 1,
+            "Top, left side (Horizontal / normal)",
+            "Top, right side (Mirror horizontal)",
+            "Bottom, right side (Rotate 180)",
+            "Bottom, left side (Mirror vertical)",
+            "Left side, top (Mirror horizontal and rotate 270 CW)",
+            "Right side, top (Rotate 90 CW)",
+            "Right side, bottom (Mirror horizontal and rotate 90 CW)",
+            "Left side, bottom (Rotate 270 CW)");
+    }
+
+    @Nullable
+    protected String getShutterSpeedDescription(int tag)
+    {
+        // I believe this method to now be stable, but am leaving some alternative snippets of
+        // code in here, to assist anyone who's looking into this (given that I don't have a public CVS).
+
+//        float apexValue = _directory.getFloat(ExifSubIFDDirectory.TAG_SHUTTER_SPEED);
+//        int apexPower = (int)Math.pow(2.0, apexValue);
+//        return "1/" + apexPower + " sec";
+        // TODO test this method
+        // thanks to Mark Edwards for spotting and patching a bug in the calculation of this
+        // description (spotted bug using a Canon EOS 300D)
+        // thanks also to Gli Blr for spotting this bug
+        Float apexValue = _directory.getFloatObject(tag);
+        if (apexValue == null)
+            return null;
+        if (apexValue <= 1) {
+            float apexPower = (float)(1 / (Math.exp(apexValue * Math.log(2))));
+            long apexPower10 = Math.round((double)apexPower * 10.0);
+            float fApexPower = (float)apexPower10 / 10.0f;
+            DecimalFormat format = new DecimalFormat("0.##");
+            format.setRoundingMode(RoundingMode.HALF_UP);
+            return format.format(fApexPower) + " sec";
+        } else {
+            int apexPower = (int)((Math.exp(apexValue * Math.log(2))));
+            return "1/" + apexPower + " sec";
+        }
+
+/*
+        // This alternative implementation offered by Bill Richards
+        // TODO determine which is the correct / more-correct implementation
+        double apexValue = _directory.getDouble(ExifSubIFDDirectory.TAG_SHUTTER_SPEED);
+        double apexPower = Math.pow(2.0, apexValue);
+
+        StringBuffer sb = new StringBuffer();
+        if (apexPower > 1)
+            apexPower = Math.floor(apexPower);
+
+        if (apexPower < 1) {
+            sb.append((int)Math.round(1/apexPower));
+        } else {
+            sb.append("1/");
+            sb.append((int)apexPower);
+        }
+        sb.append(" sec");
+        return sb.toString();
+*/
+    }
+
+    // EXIF LightSource
+    @Nullable
+    protected String getLightSourceDescription(short wbtype)
+    {
+        switch (wbtype)
+        {
+            case 0:
+                return "Unknown";
+            case 1:
+                return "Daylight";
+            case 2:
+                return "Fluorescent";
+            case 3:
+                return "Tungsten (Incandescent)";
+            case 4:
+                return "Flash";
+            case 9:
+                return "Fine Weather";
+            case 10:
+                return "Cloudy";
+            case 11:
+                return "Shade";
+            case 12:
+                return "Daylight Fluorescent";    // (D 5700 - 7100K)
+            case 13:
+                return "Day White Fluorescent";   // (N 4600 - 5500K)
+            case 14:
+                return "Cool White Fluorescent";  // (W 3800 - 4500K)
+            case 15:
+                return "White Fluorescent";       // (WW 3250 - 3800K)
+            case 16:
+                return "Warm White Fluorescent";  // (L 2600 - 3250K)
+            case 17:
+                return "Standard Light A";
+            case 18:
+                return "Standard Light B";
+            case 19:
+                return "Standard Light C";
+            case 20:
+                return "D55";
+            case 21:
+                return "D65";
+            case 22:
+                return "D75";
+            case 23:
+                return "D50";
+            case 24:
+                return "ISO Studio Tungsten";
+            case 255:
+                return "Other";
+        }
+
+        return getDescription(wbtype);
+    }
 }
diff --git a/src/com/drew/metadata/exif/ExifDescriptorBase.java b/src/com/drew/metadata/exif/ExifDescriptorBase.java
index 50c1cab..551d0f1 100644
--- a/src/com/drew/metadata/exif/ExifDescriptorBase.java
+++ b/src/com/drew/metadata/exif/ExifDescriptorBase.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2002-2016 Drew Noakes
+ * Copyright 2002-2017 Drew Noakes
  *
  *    Licensed under the Apache License, Version 2.0 (the "License");
  *    you may not use this file except in compliance with the License.
@@ -25,11 +25,12 @@ import com.drew.imaging.PhotographicConversions;
 import com.drew.lang.Rational;
 import com.drew.lang.annotations.NotNull;
 import com.drew.lang.annotations.Nullable;
+import com.drew.lang.ByteArrayReader;
 import com.drew.metadata.Directory;
 import com.drew.metadata.TagDescriptor;
 
+import java.io.IOException;
 import java.io.UnsupportedEncodingException;
-import java.math.RoundingMode;
 import java.text.DecimalFormat;
 import java.util.HashMap;
 import java.util.Map;
@@ -41,6 +42,7 @@ import static com.drew.metadata.exif.ExifDirectoryBase.*;
  *
  * @author Drew Noakes https://drewnoakes.com
  */
+ at SuppressWarnings("WeakerAccess")
 public abstract class ExifDescriptorBase<T extends Directory> extends TagDescriptor<T>
 {
     /**
@@ -49,9 +51,6 @@ public abstract class ExifDescriptorBase<T extends Directory> extends TagDescrip
      */
     private final boolean _allowDecimalRepresentationOfRationals = true;
 
-    @NotNull
-    private static final java.text.DecimalFormat SimpleDecimalFormatter = new DecimalFormat("0.#");
-
     // Note for the potential addition of brightness presentation in eV:
     // Brightness of taken subject. To calculate Exposure(Ev) from BrightnessValue(Bv),
     // you must add SensitivityValue(Sv).
@@ -122,6 +121,8 @@ public abstract class ExifDescriptorBase<T extends Directory> extends TagDescrip
                 return getThresholdingDescription();
             case TAG_FILL_ORDER:
                 return getFillOrderDescription();
+            case TAG_CFA_PATTERN_2:
+                return getCfaPattern2Description();
             case TAG_EXPOSURE_TIME:
                 return getExposureTimeDescription();
             case TAG_SHUTTER_SPEED:
@@ -166,6 +167,8 @@ public abstract class ExifDescriptorBase<T extends Directory> extends TagDescrip
                 return getFileSourceDescription();
             case TAG_SCENE_TYPE:
                 return getSceneTypeDescription();
+            case TAG_CFA_PATTERN:
+                return getCfaPatternDescription();
             case TAG_COMPONENTS_CONFIGURATION:
                 return getComponentConfigurationDescription();
             case TAG_EXIF_VERSION:
@@ -233,9 +236,26 @@ public abstract class ExifDescriptorBase<T extends Directory> extends TagDescrip
     @Nullable
     public String getReferenceBlackWhiteDescription()
     {
+        // For some reason, sometimes this is read as a long[] and
+        // getIntArray isn't able to deal with it
         int[] ints = _directory.getIntArray(TAG_REFERENCE_BLACK_WHITE);
         if (ints==null || ints.length < 6)
-            return null;
+        {
+            Object o = _directory.getObject(TAG_REFERENCE_BLACK_WHITE);
+            if (o != null && (o instanceof long[]))
+            {
+                long[] longs = (long[])o;
+                if (longs.length < 6)
+                    return null;
+
+                ints = new int[longs.length];
+                for (int i = 0; i < longs.length; i++)
+                    ints[i] = (int)longs[i];
+            }
+            else
+                return null;
+        }
+
         int blackR = ints[0];
         int whiteR = ints[1];
         int blackG = ints[2];
@@ -278,15 +298,7 @@ public abstract class ExifDescriptorBase<T extends Directory> extends TagDescrip
     @Nullable
     public String getOrientationDescription()
     {
-        return getIndexedDescription(TAG_ORIENTATION, 1,
-            "Top, left side (Horizontal / normal)",
-            "Top, right side (Mirror horizontal)",
-            "Bottom, right side (Rotate 180)",
-            "Bottom, left side (Mirror vertical)",
-            "Left side, top (Mirror horizontal and rotate 270 CW)",
-            "Right side, top (Rotate 90 CW)",
-            "Right side, bottom (Mirror horizontal and rotate 90 CW)",
-            "Left side, bottom (Rotate 270 CW)");
+        return super.getOrientationDescription(TAG_ORIENTATION);
     }
 
     @Nullable
@@ -442,9 +454,10 @@ public abstract class ExifDescriptorBase<T extends Directory> extends TagDescrip
     @Nullable
     public String getNewSubfileTypeDescription()
     {
-        return getIndexedDescription(TAG_NEW_SUBFILE_TYPE, 1,
+        return getIndexedDescription(TAG_NEW_SUBFILE_TYPE, 0,
             "Full-resolution image",
             "Reduced-resolution image",
+            "Single page of multi-page image",
             "Single page of multi-page reduced-resolution image",
             "Transparency mask",
             "Transparency mask of reduced-resolution image",
@@ -586,7 +599,7 @@ public abstract class ExifDescriptorBase<T extends Directory> extends TagDescrip
             ? null
             : value.getNumerator() == 0
                 ? "Digital zoom not used"
-                : SimpleDecimalFormatter.format(value.doubleValue());
+                : new DecimalFormat("0.#").format(value.doubleValue());
     }
 
     @Nullable
@@ -690,6 +703,162 @@ public abstract class ExifDescriptorBase<T extends Directory> extends TagDescrip
         );
     }
 
+    /// <summary>
+    /// String description of CFA Pattern
+    /// </summary>
+    /// <remarks>
+    /// Converted from Exiftool version 10.33 created by Phil Harvey
+    /// http://www.sno.phy.queensu.ca/~phil/exiftool/
+    /// lib\Image\ExifTool\Exif.pm
+    ///
+    /// Indicates the color filter array (CFA) geometric pattern of the image sensor when a one-chip color area sensor is used.
+    /// It does not apply to all sensing methods.
+    /// </remarks>
+    @Nullable
+    public String getCfaPatternDescription()
+    {
+        return formatCFAPattern(decodeCfaPattern(TAG_CFA_PATTERN));
+    }
+
+    /// <summary>
+    /// String description of CFA Pattern
+    /// </summary>
+    /// <remarks>
+    /// Indicates the color filter array (CFA) geometric pattern of the image sensor when a one-chip color area sensor is used.
+    /// It does not apply to all sensing methods.
+    ///
+    /// ExifDirectoryBase.TAG_CFA_PATTERN_2 holds only the pixel pattern. ExifDirectoryBase.TAG_CFA_REPEAT_PATTERN_DIM is expected to exist and pass
+    /// some conditional tests.
+    /// </remarks>
+    @Nullable
+    public String getCfaPattern2Description()
+    {
+        byte[] values = _directory.getByteArray(TAG_CFA_PATTERN_2);
+        if (values == null)
+            return null;
+
+        int[] repeatPattern = _directory.getIntArray(TAG_CFA_REPEAT_PATTERN_DIM);
+        if (repeatPattern == null)
+            return String.format("Repeat Pattern not found for CFAPattern (%s)", super.getDescription(TAG_CFA_PATTERN_2));
+
+        if (repeatPattern.length == 2 && values.length == (repeatPattern[0] * repeatPattern[1]))
+        {
+            int[] intpattern = new int[2 + values.length];
+            intpattern[0] = repeatPattern[0];
+            intpattern[1] = repeatPattern[1];
+
+            for (int i = 0; i < values.length; i++)
+                intpattern[i + 2] = values[i] & 0xFF;   // convert the values[i] byte to unsigned
+
+            return formatCFAPattern(intpattern);
+        }
+
+        return String.format("Unknown Pattern (%s)", super.getDescription(TAG_CFA_PATTERN_2));
+    }
+
+    @Nullable
+    private static String formatCFAPattern(@Nullable int[] pattern)
+    {
+        if (pattern == null)
+            return null;
+        if (pattern.length < 2)
+            return "<truncated data>";
+        if (pattern[0] == 0 && pattern[1] == 0)
+            return "<zero pattern size>";
+
+        int end = 2 + pattern[0] * pattern[1];
+        if (end > pattern.length)
+            return "<invalid pattern size>";
+
+        String[] cfaColors = { "Red", "Green", "Blue", "Cyan", "Magenta", "Yellow", "White" };
+
+        StringBuilder ret = new StringBuilder();
+        ret.append("[");
+        for (int pos = 2; pos < end; pos++)
+        {
+            if (pattern[pos] <= cfaColors.length - 1)
+                ret.append(cfaColors[pattern[pos]]);
+            else
+                ret.append("Unknown");      // indicated pattern position is outside the array bounds
+
+            if ((pos - 2) % pattern[1] == 0)
+                ret.append(",");
+            else if(pos != end - 1)
+                ret.append("][");
+        }
+        ret.append("]");
+
+        return ret.toString();
+    }
+
+    /// <summary>
+    /// Decode raw CFAPattern value
+    /// </summary>
+    /// <remarks>
+    /// Converted from Exiftool version 10.33 created by Phil Harvey
+    /// http://www.sno.phy.queensu.ca/~phil/exiftool/
+    /// lib\Image\ExifTool\Exif.pm
+    ///
+    /// The value consists of:
+    /// - Two short, being the grid width and height of the repeated pattern.
+    /// - Next, for every pixel in that pattern, an identification code.
+    /// </remarks>
+    @Nullable
+    private int[] decodeCfaPattern(int tagType)
+    {
+        int[] ret;
+
+        byte[] values = _directory.getByteArray(tagType);
+        if (values == null)
+            return null;
+
+        if (values.length < 4)
+        {
+            ret = new int[values.length];
+            for (int i = 0; i < values.length; i++)
+                ret[i] = values[i];
+            return ret;
+        }
+
+        ret = new int[values.length - 2];
+
+        try {
+            ByteArrayReader reader = new ByteArrayReader(values);
+
+            // first two values should be read as 16-bits (2 bytes)
+            short item0 = reader.getInt16(0);
+            short item1 = reader.getInt16(2);
+
+            Boolean copyArray = false;
+            int end = 2 + item0 * item1;
+            if (end > values.length) // sanity check in case of byte order problems; calculated 'end' should be <= length of the values
+            {
+                // try swapping byte order (I have seen this order different than in EXIF)
+                reader.setMotorolaByteOrder(!reader.isMotorolaByteOrder());
+                item0 = reader.getInt16(0);
+                item1 = reader.getInt16(2);
+
+                if (values.length >= (2 + item0 * item1))
+                    copyArray = true;
+            }
+            else
+                copyArray = true;
+
+            if(copyArray)
+            {
+                ret[0] = item0;
+                ret[1] = item1;
+
+                for (int i = 4; i < values.length; i++)
+                    ret[i - 2] = reader.getInt8(i);
+            }
+        } catch (IOException ex) {
+            _directory.addError("IO exception processing data: " + ex.getMessage());
+        }
+
+        return ret;
+    }
+
     @Nullable
     public String getFileSourceDescription()
     {
@@ -1001,50 +1170,7 @@ public abstract class ExifDescriptorBase<T extends Directory> extends TagDescrip
     @Nullable
     public String getShutterSpeedDescription()
     {
-        // I believe this method to now be stable, but am leaving some alternative snippets of
-        // code in here, to assist anyone who's looking into this (given that I don't have a public CVS).
-
-//        float apexValue = _directory.getFloat(ExifSubIFDDirectory.TAG_SHUTTER_SPEED);
-//        int apexPower = (int)Math.pow(2.0, apexValue);
-//        return "1/" + apexPower + " sec";
-        // TODO test this method
-        // thanks to Mark Edwards for spotting and patching a bug in the calculation of this
-        // description (spotted bug using a Canon EOS 300D)
-        // thanks also to Gli Blr for spotting this bug
-        Float apexValue = _directory.getFloatObject(TAG_SHUTTER_SPEED);
-        if (apexValue == null)
-            return null;
-        if (apexValue <= 1) {
-            float apexPower = (float)(1 / (Math.exp(apexValue * Math.log(2))));
-            long apexPower10 = Math.round((double)apexPower * 10.0);
-            float fApexPower = (float)apexPower10 / 10.0f;
-            DecimalFormat format = new DecimalFormat("0.##");
-            format.setRoundingMode(RoundingMode.HALF_UP);
-            return format.format(fApexPower) + " sec";
-        } else {
-            int apexPower = (int)((Math.exp(apexValue * Math.log(2))));
-            return "1/" + apexPower + " sec";
-        }
-
-/*
-        // This alternative implementation offered by Bill Richards
-        // TODO determine which is the correct / more-correct implementation
-        double apexValue = _directory.getDouble(ExifSubIFDDirectory.TAG_SHUTTER_SPEED);
-        double apexPower = Math.pow(2.0, apexValue);
-
-        StringBuffer sb = new StringBuffer();
-        if (apexPower > 1)
-            apexPower = Math.floor(apexPower);
-
-        if (apexPower < 1) {
-            sb.append((int)Math.round(1/apexPower));
-        } else {
-            sb.append("1/");
-            sb.append((int)apexPower);
-        }
-        sb.append(" sec");
-        return sb.toString();
-*/
+        return super.getShutterSpeedDescription(TAG_SHUTTER_SPEED);
     }
 
     @Nullable
diff --git a/src/com/drew/metadata/exif/ExifDirectoryBase.java b/src/com/drew/metadata/exif/ExifDirectoryBase.java
index 8e426a8..56c288d 100644
--- a/src/com/drew/metadata/exif/ExifDirectoryBase.java
+++ b/src/com/drew/metadata/exif/ExifDirectoryBase.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2002-2016 Drew Noakes
+ * Copyright 2002-2017 Drew Noakes
  *
  *    Licensed under the Apache License, Version 2.0 (the "License");
  *    you may not use this file except in compliance with the License.
@@ -30,6 +30,7 @@ import java.util.HashMap;
  *
  * @author Drew Noakes https://drewnoakes.com
  */
+ at SuppressWarnings("WeakerAccess")
 public abstract class ExifDirectoryBase extends Directory
 {
     public static final int TAG_INTEROP_INDEX = 0x0001;
@@ -125,6 +126,8 @@ public abstract class ExifDirectoryBase extends Directory
     public static final int TAG_PAGE_NAME                         = 0x011D;
 
     public static final int TAG_RESOLUTION_UNIT                   = 0x0128;
+    public static final int TAG_PAGE_NUMBER                       = 0x0129;
+
     public static final int TAG_TRANSFER_FUNCTION                 = 0x012D;
     public static final int TAG_SOFTWARE                          = 0x0131;
     public static final int TAG_DATETIME                          = 0x0132;
@@ -149,6 +152,15 @@ public abstract class ExifDirectoryBase extends Directory
     public static final int TAG_JPEG_TABLES                       = 0x015B;
     public static final int TAG_JPEG_PROC                         = 0x0200;
 
+    // 0x0201 can have all kinds of descriptions for thumbnail starting index
+    // 0x0202 can have all kinds of descriptions for thumbnail length
+    public static final int TAG_JPEG_RESTART_INTERVAL = 0x0203;
+    public static final int TAG_JPEG_LOSSLESS_PREDICTORS = 0x0205;
+    public static final int TAG_JPEG_POINT_TRANSFORMS = 0x0206;
+    public static final int TAG_JPEG_Q_TABLES = 0x0207;
+    public static final int TAG_JPEG_DC_TABLES = 0x0208;
+    public static final int TAG_JPEG_AC_TABLES = 0x0209;
+
     public static final int TAG_YCBCR_COEFFICIENTS                = 0x0211;
     public static final int TAG_YCBCR_SUBSAMPLING                 = 0x0212;
     public static final int TAG_YCBCR_POSITIONING                 = 0x0213;
@@ -266,6 +278,11 @@ public abstract class ExifDirectoryBase extends Directory
     public static final int TAG_METERING_MODE                     = 0x9207;
 
     /**
+     * @deprecated use {@link com.drew.metadata.exif.ExifDirectoryBase#TAG_WHITE_BALANCE} instead.
+     */
+    @Deprecated
+    public static final int TAG_LIGHT_SOURCE                      = 0x9208;
+    /**
      * White balance (aka light source). '0' means unknown, '1' daylight,
      * '2' fluorescent, '3' tungsten, '10' flash, '17' standard light A,
      * '18' standard light B, '19' standard light C, '20' D55, '21' D65,
@@ -573,7 +590,7 @@ public abstract class ExifDirectoryBase extends Directory
     /** Rational64u. */
     public static final int TAG_GAMMA                             = 0xA500;
 
-    public static final int TAG_PRINT_IM                          = 0xC4A5;
+    public static final int TAG_PRINT_IMAGE_MATCHING_INFO         = 0xC4A5;
 
     public static final int TAG_PANASONIC_TITLE                   = 0xC6D2;
     public static final int TAG_PANASONIC_TITLE_2                 = 0xC6D3;
@@ -611,6 +628,7 @@ public abstract class ExifDirectoryBase extends Directory
         map.put(TAG_PLANAR_CONFIGURATION, "Planar Configuration");
         map.put(TAG_PAGE_NAME, "Page Name");
         map.put(TAG_RESOLUTION_UNIT, "Resolution Unit");
+        map.put(TAG_PAGE_NUMBER, "Page Number");
         map.put(TAG_TRANSFER_FUNCTION, "Transfer Function");
         map.put(TAG_SOFTWARE, "Software");
         map.put(TAG_DATETIME, "Date/Time");
@@ -627,6 +645,14 @@ public abstract class ExifDirectoryBase extends Directory
         map.put(TAG_TRANSFER_RANGE, "Transfer Range");
         map.put(TAG_JPEG_TABLES, "JPEG Tables");
         map.put(TAG_JPEG_PROC, "JPEG Proc");
+
+        map.put(TAG_JPEG_RESTART_INTERVAL, "JPEG Restart Interval");
+        map.put(TAG_JPEG_LOSSLESS_PREDICTORS, "JPEG Lossless Predictors");
+        map.put(TAG_JPEG_POINT_TRANSFORMS, "JPEG Point Transforms");
+        map.put(TAG_JPEG_Q_TABLES, "JPEGQ Tables");
+        map.put(TAG_JPEG_DC_TABLES, "JPEGDC Tables");
+        map.put(TAG_JPEG_AC_TABLES, "JPEGAC Tables");
+
         map.put(TAG_YCBCR_COEFFICIENTS, "YCbCr Coefficients");
         map.put(TAG_YCBCR_SUBSAMPLING, "YCbCr Sub-Sampling");
         map.put(TAG_YCBCR_POSITIONING, "YCbCr Positioning");
@@ -729,7 +755,7 @@ public abstract class ExifDirectoryBase extends Directory
         map.put(TAG_LENS_MODEL, "Lens Model");
         map.put(TAG_LENS_SERIAL_NUMBER, "Lens Serial Number");
         map.put(TAG_GAMMA, "Gamma");
-        map.put(TAG_PRINT_IM, "Print IM");
+        map.put(TAG_PRINT_IMAGE_MATCHING_INFO, "Print Image Matching (PIM) Info");
         map.put(TAG_PANASONIC_TITLE, "Panasonic Title");
         map.put(TAG_PANASONIC_TITLE_2, "Panasonic Title (2)");
         map.put(TAG_PADDING, "Padding");
diff --git a/src/com/drew/metadata/exif/ExifIFD0Descriptor.java b/src/com/drew/metadata/exif/ExifIFD0Descriptor.java
index 522e0fd..6d8084b 100755
--- a/src/com/drew/metadata/exif/ExifIFD0Descriptor.java
+++ b/src/com/drew/metadata/exif/ExifIFD0Descriptor.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2002-2016 Drew Noakes
+ * Copyright 2002-2017 Drew Noakes
  *
  *    Licensed under the Apache License, Version 2.0 (the "License");
  *    you may not use this file except in compliance with the License.
@@ -28,6 +28,7 @@ import com.drew.lang.annotations.NotNull;
  *
  * @author Drew Noakes https://drewnoakes.com
  */
+ at SuppressWarnings("WeakerAccess")
 public class ExifIFD0Descriptor extends ExifDescriptorBase<ExifIFD0Directory>
 {
     public ExifIFD0Descriptor(@NotNull ExifIFD0Directory directory)
diff --git a/src/com/drew/metadata/exif/ExifIFD0Directory.java b/src/com/drew/metadata/exif/ExifIFD0Directory.java
index e1827af..c8dd415 100755
--- a/src/com/drew/metadata/exif/ExifIFD0Directory.java
+++ b/src/com/drew/metadata/exif/ExifIFD0Directory.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2002-2016 Drew Noakes
+ * Copyright 2002-2017 Drew Noakes
  *
  *    Licensed under the Apache License, Version 2.0 (the "License");
  *    you may not use this file except in compliance with the License.
@@ -30,6 +30,7 @@ import com.drew.lang.annotations.NotNull;
  *
  * @author Drew Noakes https://drewnoakes.com
  */
+ at SuppressWarnings("WeakerAccess")
 public class ExifIFD0Directory extends ExifDirectoryBase
 {
     /** This tag is a pointer to the Exif SubIFD. */
diff --git a/src/com/drew/metadata/exif/ExifSubIFDDescriptor.java b/src/com/drew/metadata/exif/ExifImageDescriptor.java
old mode 100755
new mode 100644
similarity index 79%
copy from src/com/drew/metadata/exif/ExifSubIFDDescriptor.java
copy to src/com/drew/metadata/exif/ExifImageDescriptor.java
index 5d07a31..2e11159
--- a/src/com/drew/metadata/exif/ExifSubIFDDescriptor.java
+++ b/src/com/drew/metadata/exif/ExifImageDescriptor.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2002-2016 Drew Noakes
+ * Copyright 2002-2017 Drew Noakes
  *
  *    Licensed under the Apache License, Version 2.0 (the "License");
  *    you may not use this file except in compliance with the License.
@@ -23,13 +23,14 @@ package com.drew.metadata.exif;
 import com.drew.lang.annotations.NotNull;
 
 /**
- * Provides human-readable string representations of tag values stored in a {@link ExifSubIFDDirectory}.
+ * Provides human-readable string representations of tag values stored in a {@link ExifImageDirectory}.
  *
  * @author Drew Noakes https://drewnoakes.com
  */
-public class ExifSubIFDDescriptor extends ExifDescriptorBase<ExifSubIFDDirectory>
+ at SuppressWarnings("WeakerAccess")
+public class ExifImageDescriptor extends ExifDescriptorBase<ExifImageDirectory>
 {
-    public ExifSubIFDDescriptor(@NotNull ExifSubIFDDirectory directory)
+    public ExifImageDescriptor(@NotNull ExifImageDirectory directory)
     {
         super(directory);
     }
diff --git a/src/com/drew/metadata/exif/ExifInteropDirectory.java b/src/com/drew/metadata/exif/ExifImageDirectory.java
similarity index 73%
copy from src/com/drew/metadata/exif/ExifInteropDirectory.java
copy to src/com/drew/metadata/exif/ExifImageDirectory.java
index ffd0bf4..8da34c1 100644
--- a/src/com/drew/metadata/exif/ExifInteropDirectory.java
+++ b/src/com/drew/metadata/exif/ExifImageDirectory.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2002-2016 Drew Noakes
+ * Copyright 2002-2017 Drew Noakes
  *
  *    Licensed under the Apache License, Version 2.0 (the "License");
  *    you may not use this file except in compliance with the License.
@@ -25,11 +25,15 @@ import com.drew.lang.annotations.NotNull;
 import java.util.HashMap;
 
 /**
- * Describes Exif interoperability tags.
+ * Describes One of several Exif directories.
+ *
+ * Holds information about image IFD's in a chain after the first. The first page is stored in IFD0.
+ * Currently, this only applied to multi-page TIFF images
  *
  * @author Drew Noakes https://drewnoakes.com
  */
-public class ExifInteropDirectory extends ExifDirectoryBase
+ at SuppressWarnings("WeakerAccess")
+public class ExifImageDirectory extends ExifDirectoryBase
 {
     @NotNull
     protected static final HashMap<Integer, String> _tagNameMap = new HashMap<Integer, String>();
@@ -39,16 +43,16 @@ public class ExifInteropDirectory extends ExifDirectoryBase
         addExifTagNames(_tagNameMap);
     }
 
-    public ExifInteropDirectory()
+    public ExifImageDirectory()
     {
-        this.setDescriptor(new ExifInteropDescriptor(this));
+        this.setDescriptor(new ExifImageDescriptor(this));
     }
 
     @Override
     @NotNull
     public String getName()
     {
-        return "Interoperability";
+        return "Exif Image";
     }
 
     @Override
diff --git a/src/com/drew/metadata/exif/ExifInteropDescriptor.java b/src/com/drew/metadata/exif/ExifInteropDescriptor.java
index 65de2d6..2029f42 100644
--- a/src/com/drew/metadata/exif/ExifInteropDescriptor.java
+++ b/src/com/drew/metadata/exif/ExifInteropDescriptor.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2002-2016 Drew Noakes
+ * Copyright 2002-2017 Drew Noakes
  *
  *    Licensed under the Apache License, Version 2.0 (the "License");
  *    you may not use this file except in compliance with the License.
@@ -27,6 +27,7 @@ import com.drew.lang.annotations.NotNull;
  *
  * @author Drew Noakes https://drewnoakes.com
  */
+ at SuppressWarnings("WeakerAccess")
 public class ExifInteropDescriptor extends ExifDescriptorBase<ExifInteropDirectory>
 {
     public ExifInteropDescriptor(@NotNull ExifInteropDirectory directory)
diff --git a/src/com/drew/metadata/exif/ExifInteropDirectory.java b/src/com/drew/metadata/exif/ExifInteropDirectory.java
index ffd0bf4..ee0f543 100644
--- a/src/com/drew/metadata/exif/ExifInteropDirectory.java
+++ b/src/com/drew/metadata/exif/ExifInteropDirectory.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2002-2016 Drew Noakes
+ * Copyright 2002-2017 Drew Noakes
  *
  *    Licensed under the Apache License, Version 2.0 (the "License");
  *    you may not use this file except in compliance with the License.
@@ -29,6 +29,7 @@ import java.util.HashMap;
  *
  * @author Drew Noakes https://drewnoakes.com
  */
+ at SuppressWarnings("WeakerAccess")
 public class ExifInteropDirectory extends ExifDirectoryBase
 {
     @NotNull
diff --git a/src/com/drew/metadata/exif/ExifReader.java b/src/com/drew/metadata/exif/ExifReader.java
index 4bfbc12..ffc77c6 100644
--- a/src/com/drew/metadata/exif/ExifReader.java
+++ b/src/com/drew/metadata/exif/ExifReader.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2002-2016 Drew Noakes
+ * Copyright 2002-2017 Drew Noakes
  *
  *    Licensed under the Apache License, Version 2.0 (the "License");
  *    you may not use this file except in compliance with the License.
@@ -41,23 +41,12 @@ import java.util.Collections;
  *
  * @author Drew Noakes https://drewnoakes.com
  */
+ at SuppressWarnings("WeakerAccess")
 public class ExifReader implements JpegSegmentMetadataReader
 {
     /** Exif data stored in JPEG files' APP1 segment are preceded by this six character preamble. */
     public static final String JPEG_SEGMENT_PREAMBLE = "Exif\0\0";
 
-    private boolean _storeThumbnailBytes = true;
-
-    public boolean isStoreThumbnailBytes()
-    {
-        return _storeThumbnailBytes;
-    }
-
-    public void setStoreThumbnailBytes(boolean storeThumbnailBytes)
-    {
-        _storeThumbnailBytes = storeThumbnailBytes;
-    }
-
     @NotNull
     public Iterable<JpegSegmentType> getSegmentTypes()
     {
@@ -88,20 +77,24 @@ public class ExifReader implements JpegSegmentMetadataReader
         extract(reader, metadata, readerOffset, null);
     }
 
-    /** Reads TIFF formatted Exif data a specified offset within a {@link RandomAccessReader}. */
+    /** Reads TIFF formatted Exif data at a specified offset within a {@link RandomAccessReader}. */
     public void extract(@NotNull final RandomAccessReader reader, @NotNull final Metadata metadata, int readerOffset, @Nullable Directory parentDirectory)
     {
+        ExifTiffHandler exifTiffHandler = new ExifTiffHandler(metadata, parentDirectory);
+
         try {
             // Read the TIFF-formatted Exif data
             new TiffReader().processTiff(
                 reader,
-                new ExifTiffHandler(metadata, _storeThumbnailBytes, parentDirectory),
+                exifTiffHandler,
                 readerOffset
             );
         } catch (TiffProcessingException e) {
+            exifTiffHandler.error("Exception processing TIFF data: " + e.getMessage());
             // TODO what do to with this error state?
             e.printStackTrace(System.err);
         } catch (IOException e) {
+            exifTiffHandler.error("Exception processing TIFF data: " + e.getMessage());
             // TODO what do to with this error state?
             e.printStackTrace(System.err);
         }
diff --git a/src/com/drew/metadata/exif/ExifSubIFDDescriptor.java b/src/com/drew/metadata/exif/ExifSubIFDDescriptor.java
index 5d07a31..e00b171 100755
--- a/src/com/drew/metadata/exif/ExifSubIFDDescriptor.java
+++ b/src/com/drew/metadata/exif/ExifSubIFDDescriptor.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2002-2016 Drew Noakes
+ * Copyright 2002-2017 Drew Noakes
  *
  *    Licensed under the Apache License, Version 2.0 (the "License");
  *    you may not use this file except in compliance with the License.
@@ -27,6 +27,7 @@ import com.drew.lang.annotations.NotNull;
  *
  * @author Drew Noakes https://drewnoakes.com
  */
+ at SuppressWarnings("WeakerAccess")
 public class ExifSubIFDDescriptor extends ExifDescriptorBase<ExifSubIFDDirectory>
 {
     public ExifSubIFDDescriptor(@NotNull ExifSubIFDDirectory directory)
diff --git a/src/com/drew/metadata/exif/ExifSubIFDDirectory.java b/src/com/drew/metadata/exif/ExifSubIFDDirectory.java
index 59aaadb..a1c7319 100755
--- a/src/com/drew/metadata/exif/ExifSubIFDDirectory.java
+++ b/src/com/drew/metadata/exif/ExifSubIFDDirectory.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2002-2016 Drew Noakes
+ * Copyright 2002-2017 Drew Noakes
  *
  *    Licensed under the Apache License, Version 2.0 (the "License");
  *    you may not use this file except in compliance with the License.
@@ -20,18 +20,19 @@
  */
 package com.drew.metadata.exif;
 
+import com.drew.lang.annotations.NotNull;
+import com.drew.lang.annotations.Nullable;
+
 import java.util.Date;
 import java.util.HashMap;
 import java.util.TimeZone;
 
-import com.drew.lang.annotations.NotNull;
-import com.drew.lang.annotations.Nullable;
-
 /**
  * Describes Exif tags from the SubIFD directory.
  *
  * @author Drew Noakes https://drewnoakes.com
  */
+ at SuppressWarnings("WeakerAccess")
 public class ExifSubIFDDirectory extends ExifDirectoryBase
 {
     /** This tag is a pointer to the Exif Interop IFD. */
@@ -87,7 +88,7 @@ public class ExifSubIFDDirectory extends ExifDirectoryBase
      * @return A Date object representing when this image was captured, if possible, otherwise null
      */
     @Nullable
-    public Date getDateOriginal(TimeZone timeZone)
+    public Date getDateOriginal(@Nullable TimeZone timeZone)
     {
         return getDate(TAG_DATETIME_ORIGINAL, getString(TAG_SUBSECOND_TIME_ORIGINAL), timeZone);
     }
@@ -115,7 +116,7 @@ public class ExifSubIFDDirectory extends ExifDirectoryBase
      * @return A Date object representing when this image was digitized, if possible, otherwise null
      */
     @Nullable
-    public Date getDateDigitized(TimeZone timeZone)
+    public Date getDateDigitized(@Nullable TimeZone timeZone)
     {
         return getDate(TAG_DATETIME_DIGITIZED, getString(TAG_SUBSECOND_TIME_DIGITIZED), timeZone);
     }
diff --git a/src/com/drew/metadata/exif/ExifThumbnailDescriptor.java b/src/com/drew/metadata/exif/ExifThumbnailDescriptor.java
index d8a88bb..e2694a3 100755
--- a/src/com/drew/metadata/exif/ExifThumbnailDescriptor.java
+++ b/src/com/drew/metadata/exif/ExifThumbnailDescriptor.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2002-2016 Drew Noakes
+ * Copyright 2002-2017 Drew Noakes
  *
  *    Licensed under the Apache License, Version 2.0 (the "License");
  *    you may not use this file except in compliance with the License.
@@ -32,6 +32,7 @@ import com.drew.lang.annotations.Nullable;
  *
  * @author Drew Noakes https://drewnoakes.com
  */
+ at SuppressWarnings("WeakerAccess")
 public class ExifThumbnailDescriptor extends ExifDescriptorBase<ExifThumbnailDirectory>
 {
     public ExifThumbnailDescriptor(@NotNull ExifThumbnailDirectory directory)
diff --git a/src/com/drew/metadata/exif/ExifThumbnailDirectory.java b/src/com/drew/metadata/exif/ExifThumbnailDirectory.java
index 82a45d2..56122e3 100755
--- a/src/com/drew/metadata/exif/ExifThumbnailDirectory.java
+++ b/src/com/drew/metadata/exif/ExifThumbnailDirectory.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2002-2016 Drew Noakes
+ * Copyright 2002-2017 Drew Noakes
  *
  *    Licensed under the Apache License, Version 2.0 (the "License");
  *    you may not use this file except in compliance with the License.
@@ -21,19 +21,16 @@
 
 package com.drew.metadata.exif;
 
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.util.HashMap;
-
 import com.drew.lang.annotations.NotNull;
-import com.drew.lang.annotations.Nullable;
-import com.drew.metadata.MetadataException;
+
+import java.util.HashMap;
 
 /**
  * One of several Exif directories.  Otherwise known as IFD1, this directory holds information about an embedded thumbnail image.
  *
  * @author Drew Noakes https://drewnoakes.com
  */
+ at SuppressWarnings("WeakerAccess")
 public class ExifThumbnailDirectory extends ExifDirectoryBase
 {
     /**
@@ -45,6 +42,12 @@ public class ExifThumbnailDirectory extends ExifDirectoryBase
      */
     public static final int TAG_THUMBNAIL_LENGTH = 0x0202;
 
+    /**
+     * @deprecated use {@link com.drew.metadata.exif.ExifDirectoryBase#TAG_COMPRESSION} instead.
+     */
+    @Deprecated
+    public static final int TAG_THUMBNAIL_COMPRESSION = 0x0103;
+
     @NotNull
     protected static final HashMap<Integer, String> _tagNameMap = new HashMap<Integer, String>();
 
@@ -56,9 +59,6 @@ public class ExifThumbnailDirectory extends ExifDirectoryBase
         _tagNameMap.put(TAG_THUMBNAIL_LENGTH, "Thumbnail Length");
     }
 
-    @Nullable
-    private byte[] _thumbnailData;
-
     public ExifThumbnailDirectory()
     {
         this.setDescriptor(new ExifThumbnailDescriptor(this));
@@ -77,226 +77,4 @@ public class ExifThumbnailDirectory extends ExifDirectoryBase
     {
         return _tagNameMap;
     }
-
-    public boolean hasThumbnailData()
-    {
-        return _thumbnailData != null;
-    }
-
-    @Nullable
-    public byte[] getThumbnailData()
-    {
-        return _thumbnailData;
-    }
-
-    public void setThumbnailData(@Nullable byte[] data)
-    {
-        _thumbnailData = data;
-    }
-
-    public void writeThumbnail(@NotNull String filename) throws MetadataException, IOException
-    {
-        byte[] data = _thumbnailData;
-
-        if (data == null)
-            throw new MetadataException("No thumbnail data exists.");
-
-        FileOutputStream stream = null;
-        try {
-            stream = new FileOutputStream(filename);
-            stream.write(data);
-        } finally {
-            if (stream != null)
-                stream.close();
-        }
-    }
-
-/*
-    // This thumbnail extraction code is not complete, and is included to assist anyone who feels like looking into
-    // it.  Please share any progress with the original author, and hence the community.  Thanks.
-
-    public Image getThumbnailImage() throws MetadataException
-    {
-        if (!hasThumbnailData())
-            return null;
-
-        int compression = 0;
-        try {
-            compression = this.getInt(ExifSubIFDDirectory.TAG_COMPRESSION);
-        } catch (Throwable e) {
-            this.addError("Unable to determine thumbnail type " + e.getMessage());
-        }
-
-        final byte[] thumbnailBytes = getThumbnailData();
-
-        if (compression == ExifSubIFDDirectory.COMPRESSION_JPEG)
-        {
-            // JPEG Thumbnail
-            // operate directly on thumbnailBytes
-            return decodeBytesAsImage(thumbnailBytes);
-        }
-        else if (compression == ExifSubIFDDirectory.COMPRESSION_NONE)
-        {
-            // uncompressed thumbnail (raw RGB data)
-            if (!this.containsTag(ExifSubIFDDirectory.TAG_PHOTOMETRIC_INTERPRETATION))
-                return null;
-
-            try
-            {
-                // If the image is RGB format, then convert it to a bitmap
-                final int photometricInterpretation = this.getInt(ExifSubIFDDirectory.TAG_PHOTOMETRIC_INTERPRETATION);
-                if (photometricInterpretation == ExifSubIFDDirectory.PHOTOMETRIC_INTERPRETATION_RGB)
-                {
-                    // RGB
-                    Image image = createImageFromRawRgb(thumbnailBytes);
-                    return image;
-                }
-                else if (photometricInterpretation == ExifSubIFDDirectory.PHOTOMETRIC_INTERPRETATION_YCBCR)
-                {
-                    // YCbCr
-                    Image image = createImageFromRawYCbCr(thumbnailBytes);
-                    return image;
-                }
-                else if (photometricInterpretation == ExifSubIFDDirectory.PHOTOMETRIC_INTERPRETATION_MONOCHROME)
-                {
-                    // Monochrome
-                    return null;
-                }
-            } catch (Throwable e) {
-                this.addError("Unable to extract thumbnail: " + e.getMessage());
-            }
-        }
-        return null;
-    }
-
-    /**
-     * Handle the YCbCr thumbnail encoding used by Ricoh RDC4200/4300, Fuji DS-7/300 and DX-5/7/9 cameras.
-     *
-     * At DX-5/7/9, YCbCrSubsampling(0x0212) has values of '2,1', PlanarConfiguration(0x011c) has a value '1'. So the
-     * data align of this image is below.
-     *
-     * Y(0,0),Y(1,0),Cb(0,0),Cr(0,0), Y(2,0),Y(3,0),Cb(2,0),Cr(3.0), Y(4,0),Y(5,0),Cb(4,0),Cr(4,0). . . .
-     *
-     * The numbers in parenthesis are pixel coordinates. DX series' YCbCrCoefficients(0x0211) has values '0.299/0.587/0.114',
-     * ReferenceBlackWhite(0x0214) has values '0,255,128,255,128,255'. Therefore to convert from Y/Cb/Cr to RGB is;
-     *
-     * B(0,0)=(Cb-128)*(2-0.114*2)+Y(0,0)
-     * R(0,0)=(Cr-128)*(2-0.299*2)+Y(0,0)
-     * G(0,0)=(Y(0,0)-0.114*B(0,0)-0.299*R(0,0))/0.587
-     *
-     * Horizontal subsampling is a value '2', so you can calculate B(1,0)/R(1,0)/G(1,0) by using the Y(1,0) and Cr(0,0)/Cb(0,0).
-     * Repeat this conversion by value of ImageWidth(0x0100) and ImageLength(0x0101).
-     *
-     * @param thumbnailBytes
-     * @return
-     * @throws com.drew.metadata.MetadataException
-     * /
-    private Image createImageFromRawYCbCr(byte[] thumbnailBytes) throws MetadataException
-    {
-        /*
-            Y  =  0.257R + 0.504G + 0.098B + 16
-            Cb = -0.148R - 0.291G + 0.439B + 128
-            Cr =  0.439R - 0.368G - 0.071B + 128
-
-            G = 1.164(Y-16) - 0.391(Cb-128) - 0.813(Cr-128)
-            R = 1.164(Y-16) + 1.596(Cr-128)
-            B = 1.164(Y-16) + 2.018(Cb-128)
-
-            R, G and B range from 0 to 255.
-            Y ranges from 16 to 235.
-            Cb and Cr range from 16 to 240.
-
-            http://www.faqs.org/faqs/graphics/colorspace-faq/
-        * /
-
-        int length = thumbnailBytes.length; // this.getInt(ExifSubIFDDirectory.TAG_STRIP_BYTE_COUNTS);
-        final int imageWidth = this.getInt(ExifSubIFDDirectory.TAG_THUMBNAIL_IMAGE_WIDTH);
-        final int imageHeight = this.getInt(ExifSubIFDDirectory.TAG_THUMBNAIL_IMAGE_HEIGHT);
-//        final int headerLength = 54;
-//        byte[] result = new byte[length + headerLength];
-//        // Add a windows BMP header described:
-//        // http://www.onicos.com/staff/iz/formats/bmp.html
-//        result[0] = 'B';
-//        result[1] = 'M'; // File Type identifier
-//        result[3] = (byte)(result.length / 256);
-//        result[2] = (byte)result.length;
-//        result[10] = (byte)headerLength;
-//        result[14] = 40; // MS Windows BMP header
-//        result[18] = (byte)imageWidth;
-//        result[22] = (byte)imageHeight;
-//        result[26] = 1;  // 1 Plane
-//        result[28] = 24; // Colour depth
-//        result[34] = (byte)length;
-//        result[35] = (byte)(length / 256);
-
-        final BufferedImage image = new BufferedImage(imageWidth, imageHeight, BufferedImage.TYPE_INT_RGB);
-
-        // order is YCbCr and image is upside down, bitmaps are BGR
-////        for (int i = headerLength, dataOffset = length; i<result.length; i += 3, dataOffset -= 3)
-//        {
-//            final int y =  thumbnailBytes[dataOffset - 2] & 0xFF;
-//            final int cb = thumbnailBytes[dataOffset - 1] & 0xFF;
-//            final int cr = thumbnailBytes[dataOffset] & 0xFF;
-//            if (y<16 || y>235 || cb<16 || cb>240 || cr<16 || cr>240)
-//                "".toString();
-//
-//            int g = (int)(1.164*(y-16) - 0.391*(cb-128) - 0.813*(cr-128));
-//            int r = (int)(1.164*(y-16) + 1.596*(cr-128));
-//            int b = (int)(1.164*(y-16) + 2.018*(cb-128));
-//
-////            result[i] = (byte)b;
-////            result[i + 1] = (byte)g;
-////            result[i + 2] = (byte)r;
-//
-//            // TODO compose the image here
-//            image.setRGB(1, 2, 3);
-//        }
-
-        return image;
-    }
-
-    /**
-     * Creates a thumbnail image in (Windows) BMP format from raw RGB data.
-     * @param thumbnailBytes
-     * @return
-     * @throws com.drew.metadata.MetadataException
-     * /
-    private Image createImageFromRawRgb(byte[] thumbnailBytes) throws MetadataException
-    {
-        final int length = thumbnailBytes.length; // this.getInt(ExifSubIFDDirectory.TAG_STRIP_BYTE_COUNTS);
-        final int imageWidth = this.getInt(ExifSubIFDDirectory.TAG_THUMBNAIL_IMAGE_WIDTH);
-        final int imageHeight = this.getInt(ExifSubIFDDirectory.TAG_THUMBNAIL_IMAGE_HEIGHT);
-//        final int headerLength = 54;
-//        final byte[] result = new byte[length + headerLength];
-//        // Add a windows BMP header described:
-//        // http://www.onicos.com/staff/iz/formats/bmp.html
-//        result[0] = 'B';
-//        result[1] = 'M'; // File Type identifier
-//        result[3] = (byte)(result.length / 256);
-//        result[2] = (byte)result.length;
-//        result[10] = (byte)headerLength;
-//        result[14] = 40; // MS Windows BMP header
-//        result[18] = (byte)imageWidth;
-//        result[22] = (byte)imageHeight;
-//        result[26] = 1;  // 1 Plane
-//        result[28] = 24; // Colour depth
-//        result[34] = (byte)length;
-//        result[35] = (byte)(length / 256);
-
-        final BufferedImage image = new BufferedImage(imageWidth, imageHeight, BufferedImage.TYPE_INT_RGB);
-
-        // order is RGB and image is upside down, bitmaps are BGR
-//        for (int i = headerLength, dataOffset = length; i<result.length; i += 3, dataOffset -= 3)
-//        {
-//            byte b = thumbnailBytes[dataOffset - 2];
-//            byte g = thumbnailBytes[dataOffset - 1];
-//            byte r = thumbnailBytes[dataOffset];
-//
-//            // TODO compose the image here
-//            image.setRGB(1, 2, 3);
-//        }
-
-        return image;
-    }
-*/
 }
diff --git a/src/com/drew/metadata/exif/ExifTiffHandler.java b/src/com/drew/metadata/exif/ExifTiffHandler.java
index 93b6b3b..106d281 100644
--- a/src/com/drew/metadata/exif/ExifTiffHandler.java
+++ b/src/com/drew/metadata/exif/ExifTiffHandler.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2002-2016 Drew Noakes
+ * Copyright 2002-2017 Drew Noakes
  *
  *    Licensed under the Apache License, Version 2.0 (the "License");
  *    you may not use this file except in compliance with the License.
@@ -20,21 +20,27 @@
  */
 package com.drew.metadata.exif;
 
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.util.Arrays;
+import java.util.Set;
+
+import com.drew.imaging.jpeg.JpegMetadataReader;
+import com.drew.imaging.jpeg.JpegProcessingException;
 import com.drew.imaging.tiff.TiffProcessingException;
 import com.drew.imaging.tiff.TiffReader;
+import com.drew.lang.Charsets;
 import com.drew.lang.RandomAccessReader;
 import com.drew.lang.SequentialByteArrayReader;
 import com.drew.lang.annotations.NotNull;
 import com.drew.lang.annotations.Nullable;
 import com.drew.metadata.Directory;
 import com.drew.metadata.Metadata;
+import com.drew.metadata.StringValue;
 import com.drew.metadata.exif.makernotes.*;
 import com.drew.metadata.iptc.IptcReader;
 import com.drew.metadata.tiff.DirectoryTiffHandler;
 
-import java.io.IOException;
-import java.util.Set;
-
 /**
  * Implementation of {@link com.drew.imaging.tiff.TiffHandler} used for handling TIFF tags according to the Exif
  * standard.
@@ -45,12 +51,9 @@ import java.util.Set;
  */
 public class ExifTiffHandler extends DirectoryTiffHandler
 {
-    private final boolean _storeThumbnailBytes;
-
-    public ExifTiffHandler(@NotNull Metadata metadata, boolean storeThumbnailBytes, @Nullable Directory parentDirectory)
+    public ExifTiffHandler(@NotNull Metadata metadata, @Nullable Directory parentDirectory)
     {
-        super(metadata, ExifIFD0Directory.class);
-        _storeThumbnailBytes = storeThumbnailBytes;
+        super(metadata);
 
         if (parentDirectory != null)
             _currentDirectory.setParent(parentDirectory);
@@ -63,8 +66,18 @@ public class ExifTiffHandler extends DirectoryTiffHandler
         final int olympusRawTiffMarker2 = 0x5352; // for ORF files
         final int panasonicRawTiffMarker = 0x0055; // for RW2 files
 
-        if (marker != standardTiffMarker && marker != olympusRawTiffMarker && marker != olympusRawTiffMarker2 && marker != panasonicRawTiffMarker) {
-            throw new TiffProcessingException("Unexpected TIFF marker: 0x" + Integer.toHexString(marker));
+        switch (marker)
+        {
+            case standardTiffMarker:
+            case olympusRawTiffMarker:      // Todo: implement an IFD0, if there is one
+            case olympusRawTiffMarker2:     // Todo: implement an IFD0, if there is one
+                pushDirectory(ExifIFD0Directory.class);
+                break;
+            case panasonicRawTiffMarker:
+                pushDirectory(PanasonicRawIFD0Directory.class);
+                break;
+            default:
+                throw new TiffProcessingException(String.format("Unexpected TIFF marker: 0x%X", marker));
         }
     }
 
@@ -75,7 +88,7 @@ public class ExifTiffHandler extends DirectoryTiffHandler
             return true;
         }
 
-        if (_currentDirectory instanceof ExifIFD0Directory) {
+        if (_currentDirectory instanceof ExifIFD0Directory || _currentDirectory instanceof PanasonicRawIFD0Directory) {
             if (tagId == ExifIFD0Directory.TAG_EXIF_SUB_IFD_OFFSET) {
                 pushDirectory(ExifSubIFDDirectory.class);
                 return true;
@@ -95,14 +108,33 @@ public class ExifTiffHandler extends DirectoryTiffHandler
         }
 
         if (_currentDirectory instanceof OlympusMakernoteDirectory) {
-            if (tagId == OlympusMakernoteDirectory.TAG_EQUIPMENT) {
-                pushDirectory(OlympusEquipmentMakernoteDirectory.class);
-                return true;
-            }
-
-            if (tagId == OlympusMakernoteDirectory.TAG_CAMERA_SETTINGS) {
-                pushDirectory(OlympusCameraSettingsMakernoteDirectory.class);
-                return true;
+            // Note: these also appear in customProcessTag because some are IFD pointers while others begin immediately
+            // for the same directories
+            switch(tagId) {
+                case OlympusMakernoteDirectory.TAG_EQUIPMENT:
+                    pushDirectory(OlympusEquipmentMakernoteDirectory.class);
+                    return true;
+                case OlympusMakernoteDirectory.TAG_CAMERA_SETTINGS:
+                    pushDirectory(OlympusCameraSettingsMakernoteDirectory.class);
+                    return true;
+                case OlympusMakernoteDirectory.TAG_RAW_DEVELOPMENT:
+                    pushDirectory(OlympusRawDevelopmentMakernoteDirectory.class);
+                    return true;
+                case OlympusMakernoteDirectory.TAG_RAW_DEVELOPMENT_2:
+                    pushDirectory(OlympusRawDevelopment2MakernoteDirectory.class);
+                    return true;
+                case OlympusMakernoteDirectory.TAG_IMAGE_PROCESSING:
+                    pushDirectory(OlympusImageProcessingMakernoteDirectory.class);
+                    return true;
+                case OlympusMakernoteDirectory.TAG_FOCUS_INFO:
+                    pushDirectory(OlympusFocusInfoMakernoteDirectory.class);
+                    return true;
+                case OlympusMakernoteDirectory.TAG_RAW_INFO:
+                    pushDirectory(OlympusRawInfoMakernoteDirectory.class);
+                    return true;
+                case OlympusMakernoteDirectory.TAG_MAIN_INFO:
+                    pushDirectory(OlympusMakernoteDirectory.class);
+                    return true;
             }
         }
 
@@ -112,8 +144,14 @@ public class ExifTiffHandler extends DirectoryTiffHandler
     public boolean hasFollowerIfd()
     {
         // In Exif, the only known 'follower' IFD is the thumbnail one, however this may not be the case.
-        if (_currentDirectory instanceof ExifIFD0Directory) {
-            pushDirectory(ExifThumbnailDirectory.class);
+        // UPDATE: In multipage TIFFs, the 'follower' IFD points to the next image in the set
+        if (_currentDirectory instanceof ExifIFD0Directory || _currentDirectory instanceof ExifImageDirectory) {
+            // If the PageNumber tag is defined, assume this is a multipage TIFF or similar
+            // TODO: Find better ways to know which follower Directory should be used
+            if (_currentDirectory.containsTag(ExifDirectoryBase.TAG_PAGE_NUMBER))
+                pushDirectory(ExifImageDirectory.class);
+            else
+                pushDirectory(ExifThumbnailDirectory.class);
             return true;
         }
 
@@ -132,6 +170,10 @@ public class ExifTiffHandler extends DirectoryTiffHandler
         if (formatCode == 13)
             return componentCount * 4;
 
+        // an unknown (0) formatCode needs to be potentially handled later as a highly custom directory tag
+        if(formatCode == 0)
+            return 0L;
+
         return null;
     }
 
@@ -142,6 +184,20 @@ public class ExifTiffHandler extends DirectoryTiffHandler
                                     final int tagId,
                                     final int byteCount) throws IOException
     {
+        // Some 0x0000 tags have a 0 byteCount. Determine whether it's bad.
+        if (tagId == 0)
+        {
+            if (_currentDirectory.containsTag(tagId))
+            {
+                // Let it go through for now. Some directories handle it, some don't
+                return false;
+            }
+
+            // Skip over 0x0000 tags that don't have any associated bytes. No idea what it contains in this case, if anything.
+            if (byteCount == 0)
+                return true;
+        }
+
         // Custom processing for the Makernote tag
         if (tagId == ExifSubIFDDirectory.TAG_MAKERNOTE && _currentDirectory instanceof ExifSubIFDDirectory) {
             return processMakernote(tagOffset, processedIfdOffsets, tiffHeaderOffset, reader);
@@ -158,24 +214,145 @@ public class ExifTiffHandler extends DirectoryTiffHandler
             return false;
         }
 
+        if (HandlePrintIM(_currentDirectory, tagId))
+        {
+            PrintIMDirectory printIMDirectory = new PrintIMDirectory();
+            printIMDirectory.setParent(_currentDirectory);
+            _metadata.addDirectory(printIMDirectory);
+            ProcessPrintIM(printIMDirectory, tagOffset, reader, byteCount);
+            return true;
+        }
+
+        // Note: these also appear in tryEnterSubIfd because some are IFD pointers while others begin immediately
+        // for the same directories
+        if(_currentDirectory instanceof OlympusMakernoteDirectory)
+        {
+            switch (tagId)
+            {
+                case OlympusMakernoteDirectory.TAG_EQUIPMENT:
+                    pushDirectory(OlympusEquipmentMakernoteDirectory.class);
+                    TiffReader.processIfd(this, reader, processedIfdOffsets, tagOffset, tiffHeaderOffset);
+                    return true;
+                case OlympusMakernoteDirectory.TAG_CAMERA_SETTINGS:
+                    pushDirectory(OlympusCameraSettingsMakernoteDirectory.class);
+                    TiffReader.processIfd(this, reader, processedIfdOffsets, tagOffset, tiffHeaderOffset);
+                    return true;
+                case OlympusMakernoteDirectory.TAG_RAW_DEVELOPMENT:
+                    pushDirectory(OlympusRawDevelopmentMakernoteDirectory.class);
+                    TiffReader.processIfd(this, reader, processedIfdOffsets, tagOffset, tiffHeaderOffset);
+                    return true;
+                case OlympusMakernoteDirectory.TAG_RAW_DEVELOPMENT_2:
+                    pushDirectory(OlympusRawDevelopment2MakernoteDirectory.class);
+                    TiffReader.processIfd(this, reader, processedIfdOffsets, tagOffset, tiffHeaderOffset);
+                    return true;
+                case OlympusMakernoteDirectory.TAG_IMAGE_PROCESSING:
+                    pushDirectory(OlympusImageProcessingMakernoteDirectory.class);
+                    TiffReader.processIfd(this, reader, processedIfdOffsets, tagOffset, tiffHeaderOffset);
+                    return true;
+                case OlympusMakernoteDirectory.TAG_FOCUS_INFO:
+                    pushDirectory(OlympusFocusInfoMakernoteDirectory.class);
+                    TiffReader.processIfd(this, reader, processedIfdOffsets, tagOffset, tiffHeaderOffset);
+                    return true;
+                case OlympusMakernoteDirectory.TAG_RAW_INFO:
+                    pushDirectory(OlympusRawInfoMakernoteDirectory.class);
+                    TiffReader.processIfd(this, reader, processedIfdOffsets, tagOffset, tiffHeaderOffset);
+                    return true;
+                case OlympusMakernoteDirectory.TAG_MAIN_INFO:
+                    pushDirectory(OlympusMakernoteDirectory.class);
+                    TiffReader.processIfd(this, reader, processedIfdOffsets, tagOffset, tiffHeaderOffset);
+                    return true;
+            }
+        }
+
+        if (_currentDirectory instanceof PanasonicRawIFD0Directory)
+        {
+            // these contain binary data with specific offsets, and can't be processed as regular ifd's.
+            // The binary data is broken into 'fake' tags and there is a pattern.
+            switch (tagId)
+            {
+                case PanasonicRawIFD0Directory.TagWbInfo:
+                    PanasonicRawWbInfoDirectory dirWbInfo = new PanasonicRawWbInfoDirectory();
+                    dirWbInfo.setParent(_currentDirectory);
+                    _metadata.addDirectory(dirWbInfo);
+                    ProcessBinary(dirWbInfo, tagOffset, reader, byteCount, false, 2);
+                    return true;
+                case PanasonicRawIFD0Directory.TagWbInfo2:
+                    PanasonicRawWbInfo2Directory dirWbInfo2 = new PanasonicRawWbInfo2Directory();
+                    dirWbInfo2.setParent(_currentDirectory);
+                    _metadata.addDirectory(dirWbInfo2);
+                    ProcessBinary(dirWbInfo2, tagOffset, reader, byteCount, false, 3);
+                    return true;
+                case PanasonicRawIFD0Directory.TagDistortionInfo:
+                    PanasonicRawDistortionDirectory dirDistort = new PanasonicRawDistortionDirectory();
+                    dirDistort.setParent(_currentDirectory);
+                    _metadata.addDirectory(dirDistort);
+                    ProcessBinary(dirDistort, tagOffset, reader, byteCount, true, 1);
+                    return true;
+            }
+        }
+
+        // Panasonic RAW sometimes contains an embedded version of the data as a JPG file.
+        if (tagId == PanasonicRawIFD0Directory.TagJpgFromRaw && _currentDirectory instanceof PanasonicRawIFD0Directory)
+        {
+            byte[] jpegrawbytes = reader.getBytes(tagOffset, byteCount);
+
+            // Extract information from embedded image since it is metadata-rich
+            ByteArrayInputStream jpegmem = new ByteArrayInputStream(jpegrawbytes);
+            try {
+                Metadata jpegDirectory = JpegMetadataReader.readMetadata(jpegmem);
+                for (Directory directory : jpegDirectory.getDirectories()) {
+                    directory.setParent(_currentDirectory);
+                    _metadata.addDirectory(directory);
+                }
+                return true;
+            } catch (JpegProcessingException e) {
+                _currentDirectory.addError("Error processing JpgFromRaw: " + e.getMessage());
+            } catch (IOException e) {
+                _currentDirectory.addError("Error reading JpgFromRaw: " + e.getMessage());
+            }
+        }
+
         return false;
     }
 
-    public void completed(@NotNull final RandomAccessReader reader, final int tiffHeaderOffset)
+    private static void ProcessBinary(@NotNull final Directory directory, final int tagValueOffset, @NotNull final RandomAccessReader reader, final int byteCount, final Boolean issigned, final int arrayLength) throws IOException
     {
-        if (_storeThumbnailBytes) {
-            // after the extraction process, if we have the correct tags, we may be able to store thumbnail information
-            ExifThumbnailDirectory thumbnailDirectory = _metadata.getFirstDirectoryOfType(ExifThumbnailDirectory.class);
-            if (thumbnailDirectory != null && thumbnailDirectory.containsTag(ExifThumbnailDirectory.TAG_COMPRESSION)) {
-                Integer offset = thumbnailDirectory.getInteger(ExifThumbnailDirectory.TAG_THUMBNAIL_OFFSET);
-                Integer length = thumbnailDirectory.getInteger(ExifThumbnailDirectory.TAG_THUMBNAIL_LENGTH);
-                if (offset != null && length != null) {
-                    try {
-                        byte[] thumbnailData = reader.getBytes(tiffHeaderOffset + offset, length);
-                        thumbnailDirectory.setThumbnailData(thumbnailData);
-                    } catch (IOException ex) {
-                        thumbnailDirectory.addError("Invalid thumbnail data specification: " + ex.getMessage());
+        // expects signed/unsigned int16 (for now)
+        //int byteSize = issigned ? sizeof(short) : sizeof(ushort);
+        int byteSize = 2;
+
+        // 'directory' is assumed to contain tags that correspond to the byte position unless it's a set of bytes
+        for (int i = 0; i < byteCount; i++)
+        {
+            if (directory.hasTagName(i))
+            {
+                // only process this tag if the 'next' integral tag exists. Otherwise, it's a set of bytes
+                if (i < byteCount - 1 && directory.hasTagName(i + 1))
+                {
+                    if(issigned)
+                        directory.setObject(i, reader.getInt16(tagValueOffset + (i* byteSize)));
+                    else
+                        directory.setObject(i, reader.getUInt16(tagValueOffset + (i* byteSize)));
+                }
+                else
+                {
+                    // the next arrayLength bytes are a multi-byte value
+                    if (issigned)
+                    {
+                        short[] val = new short[arrayLength];
+                        for (int j = 0; j<val.length; j++)
+                            val[j] = reader.getInt16(tagValueOffset + ((i + j) * byteSize));
+                        directory.setObjectArray(i, val);
                     }
+                    else
+                    {
+                        int[] val = new int[arrayLength];
+                        for (int j = 0; j<val.length; j++)
+                            val[j] = reader.getUInt16(tagValueOffset + ((i + j) * byteSize));
+                        directory.setObjectArray(i, val);
+                    }
+
+                    i += arrayLength - 1;
                 }
             }
         }
@@ -189,20 +366,18 @@ public class ExifTiffHandler extends DirectoryTiffHandler
         // Determine the camera model and makernote format.
         Directory ifd0Directory = _metadata.getFirstDirectoryOfType(ExifIFD0Directory.class);
 
-        if (ifd0Directory == null)
-            return false;
-
-        String cameraMake = ifd0Directory.getString(ExifIFD0Directory.TAG_MAKE);
+        String cameraMake = ifd0Directory == null ? null : ifd0Directory.getString(ExifIFD0Directory.TAG_MAKE);
 
-        final String firstTwoChars = reader.getString(makernoteOffset, 2);
-        final String firstThreeChars = reader.getString(makernoteOffset, 3);
-        final String firstFourChars = reader.getString(makernoteOffset, 4);
-        final String firstFiveChars = reader.getString(makernoteOffset, 5);
-        final String firstSixChars = reader.getString(makernoteOffset, 6);
-        final String firstSevenChars = reader.getString(makernoteOffset, 7);
-        final String firstEightChars = reader.getString(makernoteOffset, 8);
-        final String firstTenChars = reader.getString(makernoteOffset, 10);
-        final String firstTwelveChars = reader.getString(makernoteOffset, 12);
+        final String firstTwoChars    = reader.getString(makernoteOffset, 2, Charsets.UTF_8);
+        final String firstThreeChars  = reader.getString(makernoteOffset, 3, Charsets.UTF_8);
+        final String firstFourChars   = reader.getString(makernoteOffset, 4, Charsets.UTF_8);
+        final String firstFiveChars   = reader.getString(makernoteOffset, 5, Charsets.UTF_8);
+        final String firstSixChars    = reader.getString(makernoteOffset, 6, Charsets.UTF_8);
+        final String firstSevenChars  = reader.getString(makernoteOffset, 7, Charsets.UTF_8);
+        final String firstEightChars  = reader.getString(makernoteOffset, 8, Charsets.UTF_8);
+        final String firstNineChars   = reader.getString(makernoteOffset, 9, Charsets.UTF_8);
+        final String firstTenChars    = reader.getString(makernoteOffset, 10, Charsets.UTF_8);
+        final String firstTwelveChars = reader.getString(makernoteOffset, 12, Charsets.UTF_8);
 
         boolean byteOrderBefore = reader.isMotorolaByteOrder();
 
@@ -242,7 +417,7 @@ public class ExifTiffHandler extends DirectoryTiffHandler
                         TiffReader.processIfd(this, reader, processedIfdOffsets, makernoteOffset + 18, makernoteOffset + 10);
                         break;
                     default:
-                        ifd0Directory.addError("Unsupported Nikon makernote data ignored.");
+                        _currentDirectory.addError("Unsupported Nikon makernote data ignored.");
                         break;
                 }
             } else {
@@ -253,6 +428,12 @@ public class ExifTiffHandler extends DirectoryTiffHandler
         } else if ("SONY CAM".equals(firstEightChars) || "SONY DSC".equals(firstEightChars)) {
             pushDirectory(SonyType1MakernoteDirectory.class);
             TiffReader.processIfd(this, reader, processedIfdOffsets, makernoteOffset + 12, tiffHeaderOffset);
+        // Do this check LAST after most other Sony checks
+        } else if (cameraMake != null && cameraMake.startsWith("SONY") &&
+                !Arrays.equals(reader.getBytes(makernoteOffset, 2), new byte[]{ 0x01, 0x00 }) ) {
+            // The IFD begins with the first Makernote byte (no ASCII name). Used in SR2 and ARW images
+            pushDirectory(SonyType1MakernoteDirectory.class);
+            TiffReader.processIfd(this, reader, processedIfdOffsets, makernoteOffset, tiffHeaderOffset);
         } else if ("SEMC MS\u0000\u0000\u0000\u0000\u0000".equals(firstTwelveChars)) {
             // force MM for this directory
             reader.setMotorolaByteOrder(true);
@@ -293,7 +474,23 @@ public class ExifTiffHandler extends DirectoryTiffHandler
             TiffReader.processIfd(this, reader, processedIfdOffsets, makernoteOffset + 22, tiffHeaderOffset);
         } else if ("LEICA".equals(firstFiveChars)) {
             reader.setMotorolaByteOrder(false);
-            if ("Leica Camera AG".equals(cameraMake)) {
+
+            // used by the X1/X2/X VARIO/T
+            // (X1 starts with "LEICA\0\x01\0", Make is "LEICA CAMERA AG")
+            // (X2 starts with "LEICA\0\x05\0", Make is "LEICA CAMERA AG")
+            // (X VARIO starts with "LEICA\0\x04\0", Make is "LEICA CAMERA AG")
+            // (T (Typ 701) starts with "LEICA\0\0x6", Make is "LEICA CAMERA AG")
+            // (X (Typ 113) starts with "LEICA\0\0x7", Make is "LEICA CAMERA AG")
+
+            if ("LEICA\0\u0001\0".equals(firstEightChars) ||
+                "LEICA\0\u0004\0".equals(firstEightChars) ||
+                "LEICA\0\u0005\0".equals(firstEightChars) ||
+                "LEICA\0\u0006\0".equals(firstEightChars) ||
+                "LEICA\0\u0007\0".equals(firstEightChars))
+            {
+                pushDirectory(LeicaType5MakernoteDirectory.class);
+                TiffReader.processIfd(this, reader, processedIfdOffsets, makernoteOffset + 8, makernoteOffset);
+            } else if ("Leica Camera AG".equals(cameraMake)) {
                 pushDirectory(LeicaMakernoteDirectory.class);
                 TiffReader.processIfd(this, reader, processedIfdOffsets, makernoteOffset + 8, tiffHeaderOffset);
             } else if ("LEICA".equals(cameraMake)) {
@@ -303,7 +500,7 @@ public class ExifTiffHandler extends DirectoryTiffHandler
             } else {
                 return false;
             }
-        } else if ("Panasonic\u0000\u0000\u0000".equals(reader.getString(makernoteOffset, 12))) {
+        } else if ("Panasonic\u0000\u0000\u0000".equals(reader.getString(makernoteOffset, 12, Charsets.UTF_8))) {
             // NON-Standard TIFF IFD Data using Panasonic Tags. There is no Next-IFD pointer after the IFD
             // Offsets are relative to the start of the TIFF header at the beginning of the EXIF segment
             // more information here: http://www.ozhiker.com/electronics/pjmt/jpeg_info/panasonic_mn.html
@@ -348,6 +545,25 @@ public class ExifTiffHandler extends DirectoryTiffHandler
                 pushDirectory(RicohMakernoteDirectory.class);
                 TiffReader.processIfd(this, reader, processedIfdOffsets, makernoteOffset + 8, makernoteOffset);
             }
+        } else if (firstTenChars.equals("Apple iOS\0")) {
+            // Always in Motorola byte order
+            boolean orderBefore = reader.isMotorolaByteOrder();
+            reader.setMotorolaByteOrder(true);
+            pushDirectory(AppleMakernoteDirectory.class);
+            TiffReader.processIfd(this, reader, processedIfdOffsets, makernoteOffset + 14, makernoteOffset);
+            reader.setMotorolaByteOrder(orderBefore);
+        } else if (reader.getUInt16(makernoteOffset) == ReconyxHyperFireMakernoteDirectory.MAKERNOTE_VERSION) {
+            ReconyxHyperFireMakernoteDirectory directory = new ReconyxHyperFireMakernoteDirectory();
+            _metadata.addDirectory(directory);
+            processReconyxHyperFireMakernote(directory, makernoteOffset, reader);
+        } else if (firstNineChars.equalsIgnoreCase("RECONYXUF")) {
+            ReconyxUltraFireMakernoteDirectory directory = new ReconyxUltraFireMakernoteDirectory();
+            _metadata.addDirectory(directory);
+            processReconyxUltraFireMakernote(directory, makernoteOffset, reader);
+        } else if ("SAMSUNG".equals(cameraMake)) {
+            // Only handles Type2 notes correctly. Others aren't implemented, and it's complex to determine which ones to use
+            pushDirectory(SamsungType2MakernoteDirectory.class);
+            TiffReader.processIfd(this, reader, processedIfdOffsets, makernoteOffset, tiffHeaderOffset);
         } else {
             // The makernote is not comprehended by this library.
             // If you are reading this and believe a particular camera's image should be processed, get in touch.
@@ -358,12 +574,97 @@ public class ExifTiffHandler extends DirectoryTiffHandler
         return true;
     }
 
+    private static Boolean HandlePrintIM(@NotNull final Directory directory, final int tagId)
+    {
+        if (tagId == ExifDirectoryBase.TAG_PRINT_IMAGE_MATCHING_INFO)
+            return true;
+
+        if (tagId == 0x0E00)
+        {
+            // Tempting to say every tagid of 0x0E00 is a PIM tag, but can't be 100% sure
+            if (directory instanceof CasioType2MakernoteDirectory ||
+                directory instanceof KyoceraMakernoteDirectory ||
+                directory instanceof NikonType2MakernoteDirectory ||
+                directory instanceof OlympusMakernoteDirectory ||
+                directory instanceof PanasonicMakernoteDirectory ||
+                directory instanceof PentaxMakernoteDirectory ||
+                directory instanceof RicohMakernoteDirectory ||
+                directory instanceof SanyoMakernoteDirectory ||
+                directory instanceof SonyType1MakernoteDirectory)
+                return true;
+        }
+
+        return false;
+    }
+
+    /// <summary>
+    /// Process PrintIM IFD
+    /// </summary>
+    /// <remarks>
+    /// Converted from Exiftool version 10.33 created by Phil Harvey
+    /// http://www.sno.phy.queensu.ca/~phil/exiftool/
+    /// lib\Image\ExifTool\PrintIM.pm
+    /// </remarks>
+    private static void ProcessPrintIM(@NotNull final PrintIMDirectory directory, final int tagValueOffset, @NotNull final RandomAccessReader reader, final int byteCount) throws IOException
+    {
+        Boolean resetByteOrder = null;
+
+        if (byteCount == 0)
+        {
+            directory.addError("Empty PrintIM data");
+            return;
+        }
+
+        if (byteCount <= 15)
+        {
+            directory.addError("Bad PrintIM data");
+            return;
+        }
+
+        String header = reader.getString(tagValueOffset, 12, Charsets.UTF_8);
+
+        if (!header.startsWith("PrintIM")) //, StringComparison.Ordinal))
+        {
+            directory.addError("Invalid PrintIM header");
+            return;
+        }
+
+        // check size of PrintIM block
+        int num = reader.getUInt16(tagValueOffset + 14);
+        if (byteCount < 16 + num * 6)
+        {
+            // size is too big, maybe byte ordering is wrong
+            resetByteOrder = reader.isMotorolaByteOrder();
+            reader.setMotorolaByteOrder(!reader.isMotorolaByteOrder());
+            num = reader.getUInt16(tagValueOffset + 14);
+            if (byteCount < 16 + num * 6)
+            {
+                directory.addError("Bad PrintIM size");
+                return;
+            }
+        }
+
+        directory.setObject(PrintIMDirectory.TagPrintImVersion, header.substring(8, 12));
+
+        for (int n = 0; n < num; n++)
+        {
+            int pos = tagValueOffset + 16 + n * 6;
+            int tag = reader.getUInt16(pos);
+            long val = reader.getUInt32(pos + 2);
+
+            directory.setObject(tag, val);
+        }
+
+        if (resetByteOrder != null)
+            reader.setMotorolaByteOrder(resetByteOrder);
+    }
+
     private static void processKodakMakernote(@NotNull final KodakMakernoteDirectory directory, final int tagValueOffset, @NotNull final RandomAccessReader reader)
     {
         // Kodak's makernote is not in IFD format. It has values at fixed offsets.
         int dataOffset = tagValueOffset + 8;
         try {
-            directory.setString(KodakMakernoteDirectory.TAG_KODAK_MODEL, reader.getString(dataOffset, 8));
+            directory.setStringValue(KodakMakernoteDirectory.TAG_KODAK_MODEL, reader.getStringValue(dataOffset, 8, Charsets.UTF_8));
             directory.setInt(KodakMakernoteDirectory.TAG_QUALITY, reader.getUInt8(dataOffset + 9));
             directory.setInt(KodakMakernoteDirectory.TAG_BURST_MODE, reader.getUInt8(dataOffset + 10));
             directory.setInt(KodakMakernoteDirectory.TAG_IMAGE_WIDTH, reader.getUInt16(dataOffset + 12));
@@ -393,5 +694,148 @@ public class ExifTiffHandler extends DirectoryTiffHandler
             directory.addError("Error processing Kodak makernote data: " + ex.getMessage());
         }
     }
+
+    private static void processReconyxHyperFireMakernote(@NotNull final ReconyxHyperFireMakernoteDirectory directory, final int makernoteOffset, @NotNull final RandomAccessReader reader) throws IOException
+    {
+        directory.setObject(ReconyxHyperFireMakernoteDirectory.TAG_MAKERNOTE_VERSION, reader.getUInt16(makernoteOffset));
+
+        int major = reader.getUInt16(makernoteOffset + ReconyxHyperFireMakernoteDirectory.TAG_FIRMWARE_VERSION);
+        int minor = reader.getUInt16(makernoteOffset + ReconyxHyperFireMakernoteDirectory.TAG_FIRMWARE_VERSION + 2);
+        int revision = reader.getUInt16(makernoteOffset + ReconyxHyperFireMakernoteDirectory.TAG_FIRMWARE_VERSION + 4);
+        String buildYear = String.format("%04X", reader.getUInt16(makernoteOffset + ReconyxHyperFireMakernoteDirectory.TAG_FIRMWARE_VERSION + 6));
+        String buildDate = String.format("%04X", reader.getUInt16(makernoteOffset + ReconyxHyperFireMakernoteDirectory.TAG_FIRMWARE_VERSION + 8));
+        String buildYearAndDate = buildYear + buildDate;
+        Integer build;
+        try {
+            build = Integer.parseInt(buildYearAndDate);
+        } catch (NumberFormatException e) {
+            build = null;
+        }
+        if (build != null)
+        {
+            directory.setString(ReconyxHyperFireMakernoteDirectory.TAG_FIRMWARE_VERSION, String.format("%d.%d.%d.%s", major, minor, revision, build));
+        }
+        else
+        {
+            directory.setString(ReconyxHyperFireMakernoteDirectory.TAG_FIRMWARE_VERSION, String.format("%d.%d.%d", major, minor, revision));
+            directory.addError("Error processing Reconyx HyperFire makernote data: build '" + buildYearAndDate + "' is not in the expected format and will be omitted from Firmware Version.");
+        }
+
+        directory.setString(ReconyxHyperFireMakernoteDirectory.TAG_TRIGGER_MODE, String.valueOf((char)reader.getUInt16(makernoteOffset + ReconyxHyperFireMakernoteDirectory.TAG_TRIGGER_MODE)));
+        directory.setIntArray(ReconyxHyperFireMakernoteDirectory.TAG_SEQUENCE,
+                      new int[]
+                      {
+                          reader.getUInt16(makernoteOffset + ReconyxHyperFireMakernoteDirectory.TAG_SEQUENCE),
+                          reader.getUInt16(makernoteOffset + ReconyxHyperFireMakernoteDirectory.TAG_SEQUENCE + 2)
+                      });
+
+        int eventNumberHigh = reader.getUInt16(makernoteOffset + ReconyxHyperFireMakernoteDirectory.TAG_EVENT_NUMBER);
+        int eventNumberLow = reader.getUInt16(makernoteOffset + ReconyxHyperFireMakernoteDirectory.TAG_EVENT_NUMBER + 2);
+        directory.setInt(ReconyxHyperFireMakernoteDirectory.TAG_EVENT_NUMBER, (eventNumberHigh << 16) + eventNumberLow);
+
+        int seconds = reader.getUInt16(makernoteOffset + ReconyxHyperFireMakernoteDirectory.TAG_DATE_TIME_ORIGINAL);
+        int minutes = reader.getUInt16(makernoteOffset + ReconyxHyperFireMakernoteDirectory.TAG_DATE_TIME_ORIGINAL + 2);
+        int hour = reader.getUInt16(makernoteOffset + ReconyxHyperFireMakernoteDirectory.TAG_DATE_TIME_ORIGINAL + 4);
+        int month = reader.getUInt16(makernoteOffset + ReconyxHyperFireMakernoteDirectory.TAG_DATE_TIME_ORIGINAL + 6);
+        int day = reader.getUInt16(makernoteOffset + ReconyxHyperFireMakernoteDirectory.TAG_DATE_TIME_ORIGINAL + 8);
+        int year = reader.getUInt16(makernoteOffset + ReconyxHyperFireMakernoteDirectory.TAG_DATE_TIME_ORIGINAL + 10);
+
+        if ((seconds >= 0 && seconds < 60) &&
+            (minutes >= 0 && minutes < 60) &&
+            (hour >= 0 && hour < 24) &&
+            (month >= 1 && month < 13) &&
+            (day >= 1 && day < 32) &&
+            (year >= 1 && year <= 9999))
+        {
+            directory.setString(ReconyxHyperFireMakernoteDirectory.TAG_DATE_TIME_ORIGINAL,
+                    String.format("%4d:%2d:%2d %2d:%2d:%2d", year, month, day, hour, minutes, seconds));
+        }
+        else
+        {
+            directory.addError("Error processing Reconyx HyperFire makernote data: Date/Time Original " + year + "-" + month + "-" + day + " " + hour + ":" + minutes + ":" + seconds + " is not a valid date/time.");
+        }
+
+        directory.setInt(ReconyxHyperFireMakernoteDirectory.TAG_MOON_PHASE, reader.getUInt16(makernoteOffset + ReconyxHyperFireMakernoteDirectory.TAG_MOON_PHASE));
+        directory.setInt(ReconyxHyperFireMakernoteDirectory.TAG_AMBIENT_TEMPERATURE_FAHRENHEIT, reader.getInt16(makernoteOffset + ReconyxHyperFireMakernoteDirectory.TAG_AMBIENT_TEMPERATURE_FAHRENHEIT));
+        directory.setInt(ReconyxHyperFireMakernoteDirectory.TAG_AMBIENT_TEMPERATURE, reader.getInt16(makernoteOffset + ReconyxHyperFireMakernoteDirectory.TAG_AMBIENT_TEMPERATURE));
+        //directory.setByteArray(ReconyxHyperFireMakernoteDirectory.TAG_SERIAL_NUMBER, reader.getBytes(makernoteOffset + ReconyxHyperFireMakernoteDirectory.TAG_SERIAL_NUMBER, 28));
+        directory.setStringValue(ReconyxHyperFireMakernoteDirectory.TAG_SERIAL_NUMBER, new StringValue(reader.getBytes(makernoteOffset + ReconyxHyperFireMakernoteDirectory.TAG_SERIAL_NUMBER, 28), Charsets.UTF_16LE));
+        // two unread bytes: the serial number's terminating null
+
+        directory.setInt(ReconyxHyperFireMakernoteDirectory.TAG_CONTRAST, reader.getUInt16(makernoteOffset + ReconyxHyperFireMakernoteDirectory.TAG_CONTRAST));
+        directory.setInt(ReconyxHyperFireMakernoteDirectory.TAG_BRIGHTNESS, reader.getUInt16(makernoteOffset + ReconyxHyperFireMakernoteDirectory.TAG_BRIGHTNESS));
+        directory.setInt(ReconyxHyperFireMakernoteDirectory.TAG_SHARPNESS, reader.getUInt16(makernoteOffset + ReconyxHyperFireMakernoteDirectory.TAG_SHARPNESS));
+        directory.setInt(ReconyxHyperFireMakernoteDirectory.TAG_SATURATION, reader.getUInt16(makernoteOffset + ReconyxHyperFireMakernoteDirectory.TAG_SATURATION));
+        directory.setInt(ReconyxHyperFireMakernoteDirectory.TAG_INFRARED_ILLUMINATOR, reader.getUInt16(makernoteOffset + ReconyxHyperFireMakernoteDirectory.TAG_INFRARED_ILLUMINATOR));
+        directory.setInt(ReconyxHyperFireMakernoteDirectory.TAG_MOTION_SENSITIVITY, reader.getUInt16(makernoteOffset + ReconyxHyperFireMakernoteDirectory.TAG_MOTION_SENSITIVITY));
+        directory.setDouble(ReconyxHyperFireMakernoteDirectory.TAG_BATTERY_VOLTAGE, reader.getUInt16(makernoteOffset + ReconyxHyperFireMakernoteDirectory.TAG_BATTERY_VOLTAGE) / 1000.0);
+        directory.setString(ReconyxHyperFireMakernoteDirectory.TAG_USER_LABEL, reader.getNullTerminatedString(makernoteOffset + ReconyxHyperFireMakernoteDirectory.TAG_USER_LABEL, 44, Charsets.UTF_8));
+    }
+
+    private static void processReconyxUltraFireMakernote(@NotNull final ReconyxUltraFireMakernoteDirectory directory, final int makernoteOffset, @NotNull final RandomAccessReader reader) throws IOException
+    {
+        directory.setString(ReconyxUltraFireMakernoteDirectory.TAG_LABEL, reader.getString(makernoteOffset, 9, Charsets.UTF_8));
+        /*uint makernoteID = ByteConvert.FromBigEndianToNative(reader.GetUInt32(makernoteOffset + ReconyxUltraFireMakernoteDirectory.TagMakernoteID));
+        directory.Set(ReconyxUltraFireMakernoteDirectory.TagMakernoteID, makernoteID);
+        if (makernoteID != ReconyxUltraFireMakernoteDirectory.MAKERNOTE_ID)
+        {
+            directory.addError("Error processing Reconyx UltraFire makernote data: unknown Makernote ID 0x" + makernoteID.ToString("x8"));
+            return;
+        }
+        directory.Set(ReconyxUltraFireMakernoteDirectory.TagMakernoteSize, ByteConvert.FromBigEndianToNative(reader.GetUInt32(makernoteOffset + ReconyxUltraFireMakernoteDirectory.TagMakernoteSize)));
+        uint makernotePublicID = ByteConvert.FromBigEndianToNative(reader.GetUInt32(makernoteOffset + ReconyxUltraFireMakernoteDirectory.TagMakernotePublicID));
+        directory.Set(ReconyxUltraFireMakernoteDirectory.TagMakernotePublicID, makernotePublicID);
+        if (makernotePublicID != ReconyxUltraFireMakernoteDirectory.MAKERNOTE_PUBLIC_ID)
+        {
+            directory.addError("Error processing Reconyx UltraFire makernote data: unknown Makernote Public ID 0x" + makernotePublicID.ToString("x8"));
+            return;
+        }*/
+        //directory.Set(ReconyxUltraFireMakernoteDirectory.TagMakernotePublicSize, ByteConvert.FromBigEndianToNative(reader.GetUInt16(makernoteOffset + ReconyxUltraFireMakernoteDirectory.TagMakernotePublicSize)));
+
+        //directory.Set(ReconyxUltraFireMakernoteDirectory.TagCameraVersion, ProcessReconyxUltraFireVersion(makernoteOffset + ReconyxUltraFireMakernoteDirectory.TagCameraVersion, reader));
+        //directory.Set(ReconyxUltraFireMakernoteDirectory.TagUibVersion, ProcessReconyxUltraFireVersion(makernoteOffset + ReconyxUltraFireMakernoteDirectory.TagUibVersion, reader));
+        //directory.Set(ReconyxUltraFireMakernoteDirectory.TagBtlVersion, ProcessReconyxUltraFireVersion(makernoteOffset + ReconyxUltraFireMakernoteDirectory.TagBtlVersion, reader));
+        //directory.Set(ReconyxUltraFireMakernoteDirectory.TagPexVersion, ProcessReconyxUltraFireVersion(makernoteOffset + ReconyxUltraFireMakernoteDirectory.TagPexVersion, reader));
+
+        directory.setString(ReconyxUltraFireMakernoteDirectory.TAG_EVENT_TYPE, reader.getString(makernoteOffset + ReconyxUltraFireMakernoteDirectory.TAG_EVENT_TYPE, 1, Charsets.UTF_8));
+        directory.setIntArray(ReconyxUltraFireMakernoteDirectory.TAG_SEQUENCE,
+                      new int[]
+                      {
+                          reader.getByte(makernoteOffset + ReconyxUltraFireMakernoteDirectory.TAG_SEQUENCE),
+                          reader.getByte(makernoteOffset + ReconyxUltraFireMakernoteDirectory.TAG_SEQUENCE + 1)
+                      });
+        //directory.Set(ReconyxUltraFireMakernoteDirectory.TagEventNumber, ByteConvert.FromBigEndianToNative(reader.GetUInt32(makernoteOffset + ReconyxUltraFireMakernoteDirectory.TagEventNumber)));
+
+        byte seconds = reader.getByte(makernoteOffset + ReconyxUltraFireMakernoteDirectory.TAG_DATE_TIME_ORIGINAL);
+        byte minutes = reader.getByte(makernoteOffset + ReconyxUltraFireMakernoteDirectory.TAG_DATE_TIME_ORIGINAL + 1);
+        byte hour = reader.getByte(makernoteOffset + ReconyxUltraFireMakernoteDirectory.TAG_DATE_TIME_ORIGINAL + 2);
+        byte day = reader.getByte(makernoteOffset + ReconyxUltraFireMakernoteDirectory.TAG_DATE_TIME_ORIGINAL + 3);
+        byte month = reader.getByte(makernoteOffset + ReconyxUltraFireMakernoteDirectory.TAG_DATE_TIME_ORIGINAL + 4);
+        /*ushort year = ByteConvert.FromBigEndianToNative(reader.GetUInt16(makernoteOffset + ReconyxUltraFireMakernoteDirectory.TagDateTimeOriginal + 5));
+        if ((seconds >= 0 && seconds < 60) &&
+            (minutes >= 0 && minutes < 60) &&
+            (hour >= 0 && hour < 24) &&
+            (month >= 1 && month < 13) &&
+            (day >= 1 && day < 32) &&
+            (year >= 1 && year <= 9999))
+        {
+            directory.Set(ReconyxUltraFireMakernoteDirectory.TAG_DATE_TIME_ORIGINAL, new DateTime(year, month, day, hour, minutes, seconds, DateTimeKind.Unspecified));
+        }
+        else
+        {
+            directory.addError("Error processing Reconyx UltraFire makernote data: Date/Time Original " + year + "-" + month + "-" + day + " " + hour + ":" + minutes + ":" + seconds + " is not a valid date/time.");
+        }*/
+        //directory.Set(ReconyxUltraFireMakernoteDirectory.TagDayOfWeek, reader.GetByte(makernoteOffset + ReconyxUltraFireMakernoteDirectory.TagDayOfWeek));
+
+        directory.setInt(ReconyxUltraFireMakernoteDirectory.TAG_MOON_PHASE, reader.getByte(makernoteOffset + ReconyxUltraFireMakernoteDirectory.TAG_MOON_PHASE));
+        //directory.Set(ReconyxUltraFireMakernoteDirectory.TagAmbientTemperatureFahrenheit, ByteConvert.FromBigEndianToNative(reader.GetInt16(makernoteOffset + ReconyxUltraFireMakernoteDirectory.TagAmbientTemperatureFahrenheit)));
+        //directory.Set(ReconyxUltraFireMakernoteDirectory.TagAmbientTemperature, ByteConvert.FromBigEndianToNative(reader.GetInt16(makernoteOffset + ReconyxUltraFireMakernoteDirectory.TagAmbientTemperature)));
+
+        directory.setInt(ReconyxUltraFireMakernoteDirectory.TAG_FLASH, reader.getByte(makernoteOffset + ReconyxUltraFireMakernoteDirectory.TAG_FLASH));
+        //directory.Set(ReconyxUltraFireMakernoteDirectory.TagBatteryVoltage, ByteConvert.FromBigEndianToNative(reader.GetUInt16(makernoteOffset + ReconyxUltraFireMakernoteDirectory.TagBatteryVoltage)) / 1000.0);
+        directory.setStringValue(ReconyxUltraFireMakernoteDirectory.TAG_SERIAL_NUMBER, new StringValue(reader.getBytes(makernoteOffset + ReconyxUltraFireMakernoteDirectory.TAG_SERIAL_NUMBER, 14), Charsets.UTF_8));
+        // unread byte: the serial number's terminating null
+        directory.setString(ReconyxUltraFireMakernoteDirectory.TAG_USER_LABEL, reader.getNullTerminatedString(makernoteOffset + ReconyxUltraFireMakernoteDirectory.TAG_USER_LABEL, 20, Charsets.UTF_8));
+    }
 }
 
diff --git a/src/com/drew/metadata/exif/GpsDescriptor.java b/src/com/drew/metadata/exif/GpsDescriptor.java
index 403b19b..0887a35 100644
--- a/src/com/drew/metadata/exif/GpsDescriptor.java
+++ b/src/com/drew/metadata/exif/GpsDescriptor.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2002-2016 Drew Noakes
+ * Copyright 2002-2017 Drew Noakes
  *
  *    Licensed under the Apache License, Version 2.0 (the "License");
  *    you may not use this file except in compliance with the License.
@@ -35,6 +35,7 @@ import static com.drew.metadata.exif.GpsDirectory.*;
  *
  * @author Drew Noakes https://drewnoakes.com
  */
+ at SuppressWarnings("WeakerAccess")
 public class GpsDescriptor extends TagDescriptor<GpsDirectory>
 {
     public GpsDescriptor(@NotNull GpsDirectory directory)
diff --git a/src/com/drew/metadata/exif/GpsDirectory.java b/src/com/drew/metadata/exif/GpsDirectory.java
index e22a4f8..e9ce932 100644
--- a/src/com/drew/metadata/exif/GpsDirectory.java
+++ b/src/com/drew/metadata/exif/GpsDirectory.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2002-2016 Drew Noakes
+ * Copyright 2002-2017 Drew Noakes
  *
  *    Licensed under the Apache License, Version 2.0 (the "License");
  *    you may not use this file except in compliance with the License.
@@ -37,6 +37,7 @@ import java.util.Locale;
  *
  * @author Drew Noakes https://drewnoakes.com
  */
+ at SuppressWarnings("WeakerAccess")
 public class GpsDirectory extends ExifDirectoryBase
 {
     /** GPS tag version GPSVersionID 0 0 BYTE 4 */
diff --git a/src/com/drew/metadata/exif/PanasonicRawDistortionDescriptor.java b/src/com/drew/metadata/exif/PanasonicRawDistortionDescriptor.java
new file mode 100644
index 0000000..dd08840
--- /dev/null
+++ b/src/com/drew/metadata/exif/PanasonicRawDistortionDescriptor.java
@@ -0,0 +1,159 @@
+/*
+ * Copyright 2002-2017 Drew Noakes
+ *
+ *    Licensed under the Apache License, Version 2.0 (the "License");
+ *    you may not use this file except in compliance with the License.
+ *    You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing, software
+ *    distributed under the License is distributed on an "AS IS" BASIS,
+ *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *    See the License for the specific language governing permissions and
+ *    limitations under the License.
+ *
+ * More information about this project is available at:
+ *
+ *    https://drewnoakes.com/code/exif/
+ *    https://github.com/drewnoakes/metadata-extractor
+ */
+
+package com.drew.metadata.exif;
+
+import com.drew.lang.Rational;
+import com.drew.lang.annotations.NotNull;
+import com.drew.lang.annotations.Nullable;
+import com.drew.metadata.TagDescriptor;
+
+import static com.drew.metadata.exif.PanasonicRawDistortionDirectory.*;
+
+/**
+ * Provides human-readable string representations of tag values stored in a {@link PanasonicRawDistortionDirectory}.
+ *
+ * @author Kevin Mott https://github.com/kwhopper
+ * @author Drew Noakes https://drewnoakes.com
+ */
+ at SuppressWarnings("WeakerAccess")
+public class PanasonicRawDistortionDescriptor extends TagDescriptor<PanasonicRawDistortionDirectory>
+{
+    public PanasonicRawDistortionDescriptor(@NotNull PanasonicRawDistortionDirectory directory)
+    {
+        super(directory);
+    }
+
+    @Override
+    @Nullable
+    public String getDescription(int tagType)
+    {
+        switch (tagType) {
+            case TagDistortionParam02:
+                return getDistortionParam02Description();
+            case TagDistortionParam04:
+                return getDistortionParam04Description();
+            case TagDistortionScale:
+                return getDistortionScaleDescription();
+            case TagDistortionCorrection:
+                return getDistortionCorrectionDescription();
+            case TagDistortionParam08:
+                return getDistortionParam08Description();
+            case TagDistortionParam09:
+                return getDistortionParam09Description();
+            case TagDistortionParam11:
+                return getDistortionParam11Description();
+            default:
+                return super.getDescription(tagType);
+        }
+    }
+
+    @Nullable
+    public String getWbTypeDescription(int tagType)
+    {
+        Integer wbtype = _directory.getInteger(tagType);
+        if (wbtype == null)
+            return null;
+
+        return super.getLightSourceDescription(wbtype.shortValue());
+    }
+
+    @Nullable
+    public String getDistortionParam02Description()
+    {
+        Integer value = _directory.getInteger(TagDistortionParam02);
+        if (value == null)
+            return null;
+
+        return new Rational(value, 32678).toString();
+    }
+
+    @Nullable
+    public String getDistortionParam04Description()
+    {
+        Integer value = _directory.getInteger(TagDistortionParam04);
+        if (value == null)
+            return null;
+
+        return new Rational(value, 32678).toString();
+    }
+
+    @Nullable
+    public String getDistortionScaleDescription()
+    {
+        Integer value = _directory.getInteger(TagDistortionScale);
+        if (value == null)
+            return null;
+
+        //return (1 / (1 + value / 32768)).toString();
+        return Integer.toString(1 / (1 + value / 32768));
+    }
+
+    @Nullable
+    public String getDistortionCorrectionDescription()
+    {
+        Integer value = _directory.getInteger(TagDistortionCorrection);
+        if (value == null)
+            return null;
+
+        // (have seen the upper 4 bits set for GF5 and GX1, giving a value of -4095 - PH)
+        int mask = 0x000f;
+        switch (value & mask)
+        {
+            case 0:
+                return "Off";
+            case 1:
+                return "On";
+            default:
+                return "Unknown (" + value + ")";
+        }
+    }
+
+    @Nullable
+    public String getDistortionParam08Description()
+    {
+        Integer value = _directory.getInteger(TagDistortionParam08);
+        if (value == null)
+            return null;
+
+        return new Rational(value, 32678).toString();
+    }
+
+    @Nullable
+    public String getDistortionParam09Description()
+    {
+        Integer value = _directory.getInteger(TagDistortionParam09);
+        if (value == null)
+            return null;
+
+        return new Rational(value, 32678).toString();
+    }
+
+    @Nullable
+    public String getDistortionParam11Description()
+    {
+        Integer value = _directory.getInteger(TagDistortionParam11);
+        if (value == null)
+            return null;
+
+        return new Rational(value, 32678).toString();
+    }
+}
diff --git a/src/com/drew/metadata/exif/PanasonicRawDistortionDirectory.java b/src/com/drew/metadata/exif/PanasonicRawDistortionDirectory.java
new file mode 100644
index 0000000..c86e664
--- /dev/null
+++ b/src/com/drew/metadata/exif/PanasonicRawDistortionDirectory.java
@@ -0,0 +1,86 @@
+/*
+ * Copyright 2002-2017 Drew Noakes
+ *
+ *    Licensed under the Apache License, Version 2.0 (the "License");
+ *    you may not use this file except in compliance with the License.
+ *    You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing, software
+ *    distributed under the License is distributed on an "AS IS" BASIS,
+ *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *    See the License for the specific language governing permissions and
+ *    limitations under the License.
+ *
+ * More information about this project is available at:
+ *
+ *    https://drewnoakes.com/code/exif/
+ *    https://github.com/drewnoakes/metadata-extractor
+ */
+
+package com.drew.metadata.exif;
+
+import com.drew.lang.annotations.NotNull;
+import com.drew.metadata.Directory;
+
+import java.util.HashMap;
+
+/**
+ * These tags can be found in Panasonic/Leica RAW, RW2 and RWL images. The index values are 'fake' but
+ * chosen specifically to make processing easier
+ *
+ * @author Kevin Mott https://github.com/kwhopper
+ * @author Drew Noakes https://drewnoakes.com
+ */
+ at SuppressWarnings("WeakerAccess")
+public class PanasonicRawDistortionDirectory extends Directory
+{
+    // 0 and 1 are checksums
+
+    public static final int TagDistortionParam02 = 2;
+
+    public static final int TagDistortionParam04 = 4;
+    public static final int TagDistortionScale = 5;
+
+    public static final int TagDistortionCorrection = 7;
+    public static final int TagDistortionParam08 = 8;
+    public static final int TagDistortionParam09 = 9;
+
+    public static final int TagDistortionParam11 = 11;
+    public static final int TagDistortionN = 12;
+
+    @NotNull
+    protected static final HashMap<Integer, String> _tagNameMap = new HashMap<Integer, String>();
+
+    static
+    {
+        _tagNameMap.put(TagDistortionParam02, "Distortion Param 2");
+        _tagNameMap.put(TagDistortionParam04, "Distortion Param 4");
+        _tagNameMap.put(TagDistortionScale, "Distortion Scale");
+        _tagNameMap.put(TagDistortionCorrection, "Distortion Correction");
+        _tagNameMap.put(TagDistortionParam08, "Distortion Param 8");
+        _tagNameMap.put(TagDistortionParam09, "Distortion Param 9");
+        _tagNameMap.put(TagDistortionParam11, "Distortion Param 11");
+        _tagNameMap.put(TagDistortionN, "Distortion N");
+    }
+
+    public PanasonicRawDistortionDirectory()
+    {
+        this.setDescriptor(new PanasonicRawDistortionDescriptor(this));
+    }
+
+    @Override
+    @NotNull
+    public String getName()
+    {
+        return "PanasonicRaw DistortionInfo";
+    }
+
+    @Override
+    @NotNull
+    protected HashMap<Integer, String> getTagNameMap()
+    {
+        return _tagNameMap;
+    }
+}
diff --git a/src/com/drew/metadata/exif/makernotes/SonyType6MakernoteDescriptor.java b/src/com/drew/metadata/exif/PanasonicRawIFD0Descriptor.java
similarity index 63%
copy from src/com/drew/metadata/exif/makernotes/SonyType6MakernoteDescriptor.java
copy to src/com/drew/metadata/exif/PanasonicRawIFD0Descriptor.java
index 7962b5b..61efbac 100644
--- a/src/com/drew/metadata/exif/makernotes/SonyType6MakernoteDescriptor.java
+++ b/src/com/drew/metadata/exif/PanasonicRawIFD0Descriptor.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2002-2016 Drew Noakes
+ * Copyright 2002-2017 Drew Noakes
  *
  *    Licensed under the Apache License, Version 2.0 (the "License");
  *    you may not use this file except in compliance with the License.
@@ -19,22 +19,24 @@
  *    https://github.com/drewnoakes/metadata-extractor
  */
 
-package com.drew.metadata.exif.makernotes;
+package com.drew.metadata.exif;
 
 import com.drew.lang.annotations.NotNull;
 import com.drew.lang.annotations.Nullable;
 import com.drew.metadata.TagDescriptor;
 
-import static com.drew.metadata.exif.makernotes.SonyType6MakernoteDirectory.*;
+import static com.drew.metadata.exif.PanasonicRawIFD0Directory.*;
 
 /**
- * Provides human-readable string representations of tag values stored in a {@link SonyType6MakernoteDirectory}.
+ * Provides human-readable string representations of tag values stored in a {@link PanasonicRawIFD0Directory}.
  *
+ * @author Kevin Mott https://github.com/kwhopper
  * @author Drew Noakes https://drewnoakes.com
  */
-public class SonyType6MakernoteDescriptor extends TagDescriptor<SonyType6MakernoteDirectory>
+ at SuppressWarnings("WeakerAccess")
+public class PanasonicRawIFD0Descriptor extends TagDescriptor<PanasonicRawIFD0Directory>
 {
-    public SonyType6MakernoteDescriptor(@NotNull SonyType6MakernoteDirectory directory)
+    public PanasonicRawIFD0Descriptor(@NotNull PanasonicRawIFD0Directory directory)
     {
         super(directory);
     }
@@ -43,17 +45,14 @@ public class SonyType6MakernoteDescriptor extends TagDescriptor<SonyType6Makerno
     @Nullable
     public String getDescription(int tagType)
     {
-        switch (tagType) {
-            case TAG_MAKERNOTE_THUMB_VERSION:
-                return getMakernoteThumbVersionDescription();
+        switch (tagType)
+        {
+            case TagPanasonicRawVersion:
+                return getVersionBytesDescription(TagPanasonicRawVersion, 2);
+            case TagOrientation:
+                return getOrientationDescription(TagOrientation);
             default:
                 return super.getDescription(tagType);
         }
     }
-
-    @Nullable
-    public String getMakernoteThumbVersionDescription()
-    {
-        return getVersionBytesDescription(TAG_MAKERNOTE_THUMB_VERSION, 2);
-    }
 }
diff --git a/src/com/drew/metadata/exif/PanasonicRawIFD0Directory.java b/src/com/drew/metadata/exif/PanasonicRawIFD0Directory.java
new file mode 100644
index 0000000..bc94052
--- /dev/null
+++ b/src/com/drew/metadata/exif/PanasonicRawIFD0Directory.java
@@ -0,0 +1,153 @@
+/*
+ * Copyright 2002-2017 Drew Noakes
+ *
+ *    Licensed under the Apache License, Version 2.0 (the "License");
+ *    you may not use this file except in compliance with the License.
+ *    You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing, software
+ *    distributed under the License is distributed on an "AS IS" BASIS,
+ *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *    See the License for the specific language governing permissions and
+ *    limitations under the License.
+ *
+ * More information about this project is available at:
+ *
+ *    https://drewnoakes.com/code/exif/
+ *    https://github.com/drewnoakes/metadata-extractor
+ */
+
+package com.drew.metadata.exif;
+
+import com.drew.lang.annotations.NotNull;
+import com.drew.metadata.Directory;
+
+import java.util.HashMap;
+
+/**
+ * These tags are found in IFD0 of Panasonic/Leica RAW, RW2 and RWL images.
+ *
+ * @author Kevin Mott https://github.com/kwhopper
+ * @author Drew Noakes https://drewnoakes.com
+ */
+ at SuppressWarnings("WeakerAccess")
+public class PanasonicRawIFD0Directory extends Directory
+{
+    public static final int TagPanasonicRawVersion = 0x0001;
+    public static final int TagSensorWidth = 0x0002;
+    public static final int TagSensorHeight = 0x0003;
+    public static final int TagSensorTopBorder = 0x0004;
+    public static final int TagSensorLeftBorder = 0x0005;
+    public static final int TagSensorBottomBorder = 0x0006;
+    public static final int TagSensorRightBorder = 0x0007;
+
+    public static final int TagBlackLevel1 = 0x0008;
+    public static final int TagBlackLevel2 = 0x0009;
+    public static final int TagBlackLevel3 = 0x000a;
+    public static final int TagLinearityLimitRed = 0x000e;
+    public static final int TagLinearityLimitGreen = 0x000f;
+    public static final int TagLinearityLimitBlue = 0x0010;
+    public static final int TagRedBalance = 0x0011;
+    public static final int TagBlueBalance = 0x0012;
+    public static final int TagWbInfo = 0x0013;
+
+    public static final int TagIso = 0x0017;
+    public static final int TagHighIsoMultiplierRed = 0x0018;
+    public static final int TagHighIsoMultiplierGreen = 0x0019;
+    public static final int TagHighIsoMultiplierBlue = 0x001a;
+    public static final int TagBlackLevelRed = 0x001c;
+    public static final int TagBlackLevelGreen = 0x001d;
+    public static final int TagBlackLevelBlue = 0x001e;
+    public static final int TagWbRedLevel = 0x0024;
+    public static final int TagWbGreenLevel = 0x0025;
+    public static final int TagWbBlueLevel = 0x0026;
+
+    public static final int TagWbInfo2 = 0x0027;
+
+    public static final int TagJpgFromRaw = 0x002e;
+
+    public static final int TagCropTop = 0x002f;
+    public static final int TagCropLeft = 0x0030;
+    public static final int TagCropBottom = 0x0031;
+    public static final int TagCropRight = 0x0032;
+
+    public static final int TagMake = 0x010f;
+    public static final int TagModel = 0x0110;
+    public static final int TagStripOffsets = 0x0111;
+    public static final int TagOrientation = 0x0112;
+    public static final int TagRowsPerStrip = 0x0116;
+    public static final int TagStripByteCounts = 0x0117;
+    public static final int TagRawDataOffset = 0x0118;
+
+    public static final int TagDistortionInfo = 0x0119;
+
+    public PanasonicRawIFD0Directory()
+    {
+        this.setDescriptor(new PanasonicRawIFD0Descriptor(this));
+    }
+
+    @NotNull
+    protected static final HashMap<Integer, String> _tagNameMap = new HashMap<Integer, String>();
+
+    static
+    {
+        _tagNameMap.put(TagPanasonicRawVersion, "Panasonic Raw Version");
+        _tagNameMap.put(TagSensorWidth, "Sensor Width");
+        _tagNameMap.put(TagSensorHeight, "Sensor Height");
+        _tagNameMap.put(TagSensorTopBorder, "Sensor Top Border");
+        _tagNameMap.put(TagSensorLeftBorder, "Sensor Left Border");
+        _tagNameMap.put(TagSensorBottomBorder, "Sensor Bottom Border");
+        _tagNameMap.put(TagSensorRightBorder, "Sensor Right Border");
+
+        _tagNameMap.put(TagBlackLevel1, "Black Level 1");
+        _tagNameMap.put(TagBlackLevel2, "Black Level 2");
+        _tagNameMap.put(TagBlackLevel3, "Black Level 3");
+        _tagNameMap.put(TagLinearityLimitRed, "Linearity Limit Red");
+        _tagNameMap.put(TagLinearityLimitGreen, "Linearity Limit Green");
+        _tagNameMap.put(TagLinearityLimitBlue, "Linearity Limit Blue");
+        _tagNameMap.put(TagRedBalance, "Red Balance");
+        _tagNameMap.put(TagBlueBalance, "Blue Balance");
+
+        _tagNameMap.put(TagIso, "ISO");
+        _tagNameMap.put(TagHighIsoMultiplierRed, "High ISO Multiplier Red");
+        _tagNameMap.put(TagHighIsoMultiplierGreen, "High ISO Multiplier Green");
+        _tagNameMap.put(TagHighIsoMultiplierBlue, "High ISO Multiplier Blue");
+        _tagNameMap.put(TagBlackLevelRed, "Black Level Red");
+        _tagNameMap.put(TagBlackLevelGreen, "Black Level Green");
+        _tagNameMap.put(TagBlackLevelBlue, "Black Level Blue");
+        _tagNameMap.put(TagWbRedLevel, "WB Red Level");
+        _tagNameMap.put(TagWbGreenLevel, "WB Green Level");
+        _tagNameMap.put(TagWbBlueLevel, "WB Blue Level");
+
+        _tagNameMap.put(TagJpgFromRaw, "Jpg From Raw");
+
+        _tagNameMap.put(TagCropTop, "Crop Top");
+        _tagNameMap.put(TagCropLeft, "Crop Left");
+        _tagNameMap.put(TagCropBottom, "Crop Bottom");
+        _tagNameMap.put(TagCropRight, "Crop Right");
+
+        _tagNameMap.put(TagMake, "Make");
+        _tagNameMap.put(TagModel, "Model");
+        _tagNameMap.put(TagStripOffsets, "Strip Offsets");
+        _tagNameMap.put(TagOrientation, "Orientation");
+        _tagNameMap.put(TagRowsPerStrip, "Rows Per Strip");
+        _tagNameMap.put(TagStripByteCounts, "Strip Byte Counts");
+        _tagNameMap.put(TagRawDataOffset, "Raw Data Offset");
+    }
+
+    @Override
+    @NotNull
+    public String getName()
+    {
+        return "PanasonicRaw Exif IFD0";
+    }
+
+    @Override
+    @NotNull
+    protected HashMap<Integer, String> getTagNameMap()
+    {
+        return _tagNameMap;
+    }
+}
diff --git a/src/com/drew/metadata/exif/makernotes/SonyType6MakernoteDescriptor.java b/src/com/drew/metadata/exif/PanasonicRawWbInfo2Descriptor.java
similarity index 57%
copy from src/com/drew/metadata/exif/makernotes/SonyType6MakernoteDescriptor.java
copy to src/com/drew/metadata/exif/PanasonicRawWbInfo2Descriptor.java
index 7962b5b..60af647 100644
--- a/src/com/drew/metadata/exif/makernotes/SonyType6MakernoteDescriptor.java
+++ b/src/com/drew/metadata/exif/PanasonicRawWbInfo2Descriptor.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2002-2016 Drew Noakes
+ * Copyright 2002-2017 Drew Noakes
  *
  *    Licensed under the Apache License, Version 2.0 (the "License");
  *    you may not use this file except in compliance with the License.
@@ -19,22 +19,24 @@
  *    https://github.com/drewnoakes/metadata-extractor
  */
 
-package com.drew.metadata.exif.makernotes;
+package com.drew.metadata.exif;
 
 import com.drew.lang.annotations.NotNull;
 import com.drew.lang.annotations.Nullable;
 import com.drew.metadata.TagDescriptor;
 
-import static com.drew.metadata.exif.makernotes.SonyType6MakernoteDirectory.*;
+import static com.drew.metadata.exif.PanasonicRawWbInfo2Directory.*;
 
 /**
- * Provides human-readable string representations of tag values stored in a {@link SonyType6MakernoteDirectory}.
+ * Provides human-readable string representations of tag values stored in a {@link PanasonicRawWbInfo2Directory}.
  *
+ * @author Kevin Mott https://github.com/kwhopper
  * @author Drew Noakes https://drewnoakes.com
  */
-public class SonyType6MakernoteDescriptor extends TagDescriptor<SonyType6MakernoteDirectory>
+ at SuppressWarnings("WeakerAccess")
+public class PanasonicRawWbInfo2Descriptor extends TagDescriptor<PanasonicRawWbInfo2Directory>
 {
-    public SonyType6MakernoteDescriptor(@NotNull SonyType6MakernoteDirectory directory)
+    public PanasonicRawWbInfo2Descriptor(@NotNull PanasonicRawWbInfo2Directory directory)
     {
         super(directory);
     }
@@ -44,16 +46,26 @@ public class SonyType6MakernoteDescriptor extends TagDescriptor<SonyType6Makerno
     public String getDescription(int tagType)
     {
         switch (tagType) {
-            case TAG_MAKERNOTE_THUMB_VERSION:
-                return getMakernoteThumbVersionDescription();
+            case TagWbType1:
+            case TagWbType2:
+            case TagWbType3:
+            case TagWbType4:
+            case TagWbType5:
+            case TagWbType6:
+            case TagWbType7:
+                return getWbTypeDescription(tagType);
             default:
                 return super.getDescription(tagType);
         }
     }
 
     @Nullable
-    public String getMakernoteThumbVersionDescription()
+    public String getWbTypeDescription(int tagType)
     {
-        return getVersionBytesDescription(TAG_MAKERNOTE_THUMB_VERSION, 2);
+        Integer wbtype = _directory.getInteger(tagType);
+        if (wbtype == null)
+            return null;
+
+        return super.getLightSourceDescription(wbtype.shortValue());
     }
 }
diff --git a/src/com/drew/metadata/exif/PanasonicRawWbInfo2Directory.java b/src/com/drew/metadata/exif/PanasonicRawWbInfo2Directory.java
new file mode 100644
index 0000000..2f29ab1
--- /dev/null
+++ b/src/com/drew/metadata/exif/PanasonicRawWbInfo2Directory.java
@@ -0,0 +1,103 @@
+/*
+ * Copyright 2002-2017 Drew Noakes
+ *
+ *    Licensed under the Apache License, Version 2.0 (the "License");
+ *    you may not use this file except in compliance with the License.
+ *    You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing, software
+ *    distributed under the License is distributed on an "AS IS" BASIS,
+ *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *    See the License for the specific language governing permissions and
+ *    limitations under the License.
+ *
+ * More information about this project is available at:
+ *
+ *    https://drewnoakes.com/code/exif/
+ *    https://github.com/drewnoakes/metadata-extractor
+ */
+
+package com.drew.metadata.exif;
+
+import com.drew.lang.annotations.NotNull;
+import com.drew.metadata.Directory;
+
+import java.util.HashMap;
+
+/**
+ * These tags can be found in Panasonic/Leica RAW, RW2 and RWL images. The index values are 'fake' but
+ * chosen specifically to make processing easier
+ *
+ * @author Kevin Mott https://github.com/kwhopper
+ * @author Drew Noakes https://drewnoakes.com
+ */
+ at SuppressWarnings("WeakerAccess")
+public class PanasonicRawWbInfo2Directory extends Directory
+{
+    public static final int TagNumWbEntries = 0;
+
+    public static final int TagWbType1 = 1;
+    public static final int TagWbRgbLevels1 = 2;
+
+    public static final int TagWbType2 = 5;
+    public static final int TagWbRgbLevels2 = 6;
+
+    public static final int TagWbType3 = 9;
+    public static final int TagWbRgbLevels3 = 10;
+
+    public static final int TagWbType4 = 13;
+    public static final int TagWbRgbLevels4 = 14;
+
+    public static final int TagWbType5 = 17;
+    public static final int TagWbRgbLevels5 = 18;
+
+    public static final int TagWbType6 = 21;
+    public static final int TagWbRgbLevels6 = 22;
+
+    public static final int TagWbType7 = 25;
+    public static final int TagWbRgbLevels7 = 26;
+
+    @NotNull
+    protected static final HashMap<Integer, String> _tagNameMap = new HashMap<Integer, String>();
+
+    static
+    {
+        _tagNameMap.put(TagNumWbEntries, "Num WB Entries");
+        _tagNameMap.put(TagNumWbEntries, "Num WB Entries");
+        _tagNameMap.put(TagWbType1, "WB Type 1");
+        _tagNameMap.put(TagWbRgbLevels1, "WB RGB Levels 1");
+        _tagNameMap.put(TagWbType2, "WB Type 2");
+        _tagNameMap.put(TagWbRgbLevels2, "WB RGB Levels 2");
+        _tagNameMap.put(TagWbType3, "WB Type 3");
+        _tagNameMap.put(TagWbRgbLevels3, "WB RGB Levels 3");
+        _tagNameMap.put(TagWbType4, "WB Type 4");
+        _tagNameMap.put(TagWbRgbLevels4, "WB RGB Levels 4");
+        _tagNameMap.put(TagWbType5, "WB Type 5");
+        _tagNameMap.put(TagWbRgbLevels5, "WB RGB Levels 5");
+        _tagNameMap.put(TagWbType6, "WB Type 6");
+        _tagNameMap.put(TagWbRgbLevels6, "WB RGB Levels 6");
+        _tagNameMap.put(TagWbType7, "WB Type 7");
+        _tagNameMap.put(TagWbRgbLevels7, "WB RGB Levels 7");
+    }
+
+    public PanasonicRawWbInfo2Directory()
+    {
+        this.setDescriptor(new PanasonicRawWbInfo2Descriptor(this));
+    }
+
+    @Override
+    @NotNull
+    public String getName()
+    {
+        return "PanasonicRaw WbInfo2";
+    }
+
+    @Override
+    @NotNull
+    protected HashMap<Integer, String> getTagNameMap()
+    {
+        return _tagNameMap;
+    }
+}
diff --git a/src/com/drew/metadata/exif/makernotes/SonyType6MakernoteDescriptor.java b/src/com/drew/metadata/exif/PanasonicRawWbInfoDescriptor.java
similarity index 57%
copy from src/com/drew/metadata/exif/makernotes/SonyType6MakernoteDescriptor.java
copy to src/com/drew/metadata/exif/PanasonicRawWbInfoDescriptor.java
index 7962b5b..61ff4a2 100644
--- a/src/com/drew/metadata/exif/makernotes/SonyType6MakernoteDescriptor.java
+++ b/src/com/drew/metadata/exif/PanasonicRawWbInfoDescriptor.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2002-2016 Drew Noakes
+ * Copyright 2002-2017 Drew Noakes
  *
  *    Licensed under the Apache License, Version 2.0 (the "License");
  *    you may not use this file except in compliance with the License.
@@ -19,22 +19,24 @@
  *    https://github.com/drewnoakes/metadata-extractor
  */
 
-package com.drew.metadata.exif.makernotes;
+package com.drew.metadata.exif;
 
 import com.drew.lang.annotations.NotNull;
 import com.drew.lang.annotations.Nullable;
 import com.drew.metadata.TagDescriptor;
 
-import static com.drew.metadata.exif.makernotes.SonyType6MakernoteDirectory.*;
+import static com.drew.metadata.exif.PanasonicRawWbInfoDirectory.*;
 
 /**
- * Provides human-readable string representations of tag values stored in a {@link SonyType6MakernoteDirectory}.
+ * Provides human-readable string representations of tag values stored in a {@link PanasonicRawWbInfoDirectory}.
  *
+ * @author Kevin Mott https://github.com/kwhopper
  * @author Drew Noakes https://drewnoakes.com
  */
-public class SonyType6MakernoteDescriptor extends TagDescriptor<SonyType6MakernoteDirectory>
+ at SuppressWarnings("WeakerAccess")
+public class PanasonicRawWbInfoDescriptor extends TagDescriptor<PanasonicRawWbInfoDirectory>
 {
-    public SonyType6MakernoteDescriptor(@NotNull SonyType6MakernoteDirectory directory)
+    public PanasonicRawWbInfoDescriptor(@NotNull PanasonicRawWbInfoDirectory directory)
     {
         super(directory);
     }
@@ -44,16 +46,26 @@ public class SonyType6MakernoteDescriptor extends TagDescriptor<SonyType6Makerno
     public String getDescription(int tagType)
     {
         switch (tagType) {
-            case TAG_MAKERNOTE_THUMB_VERSION:
-                return getMakernoteThumbVersionDescription();
+            case TagWbType1:
+            case TagWbType2:
+            case TagWbType3:
+            case TagWbType4:
+            case TagWbType5:
+            case TagWbType6:
+            case TagWbType7:
+                return getWbTypeDescription(tagType);
             default:
                 return super.getDescription(tagType);
         }
     }
 
     @Nullable
-    public String getMakernoteThumbVersionDescription()
+    public String getWbTypeDescription(int tagType)
     {
-        return getVersionBytesDescription(TAG_MAKERNOTE_THUMB_VERSION, 2);
+        Integer wbtype = _directory.getInteger(tagType);
+        if (wbtype == null)
+            return null;
+
+        return super.getLightSourceDescription(wbtype.shortValue());
     }
 }
diff --git a/src/com/drew/metadata/exif/PanasonicRawWbInfoDirectory.java b/src/com/drew/metadata/exif/PanasonicRawWbInfoDirectory.java
new file mode 100644
index 0000000..036c761
--- /dev/null
+++ b/src/com/drew/metadata/exif/PanasonicRawWbInfoDirectory.java
@@ -0,0 +1,102 @@
+/*
+ * Copyright 2002-2017 Drew Noakes
+ *
+ *    Licensed under the Apache License, Version 2.0 (the "License");
+ *    you may not use this file except in compliance with the License.
+ *    You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing, software
+ *    distributed under the License is distributed on an "AS IS" BASIS,
+ *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *    See the License for the specific language governing permissions and
+ *    limitations under the License.
+ *
+ * More information about this project is available at:
+ *
+ *    https://drewnoakes.com/code/exif/
+ *    https://github.com/drewnoakes/metadata-extractor
+ */
+
+package com.drew.metadata.exif;
+
+import com.drew.lang.annotations.NotNull;
+import com.drew.metadata.Directory;
+
+import java.util.HashMap;
+
+/**
+ * These tags can be found in Panasonic/Leica RAW, RW2 and RWL images. The index values are 'fake' but
+ * chosen specifically to make processing easier
+ *
+ * @author Kevin Mott https://github.com/kwhopper
+ * @author Drew Noakes https://drewnoakes.com
+ */
+ at SuppressWarnings("WeakerAccess")
+public class PanasonicRawWbInfoDirectory extends Directory
+{
+    public static final int TagNumWbEntries = 0;
+
+    public static final int TagWbType1 = 1;
+    public static final int TagWbRbLevels1 = 2;
+
+    public static final int TagWbType2 = 4;
+    public static final int TagWbRbLevels2 = 5;
+
+    public static final int TagWbType3 = 7;
+    public static final int TagWbRbLevels3 = 8;
+
+    public static final int TagWbType4 = 10;
+    public static final int TagWbRbLevels4 = 11;
+
+    public static final int TagWbType5 = 13;
+    public static final int TagWbRbLevels5 = 14;
+
+    public static final int TagWbType6 = 16;
+    public static final int TagWbRbLevels6 = 17;
+
+    public static final int TagWbType7 = 19;
+    public static final int TagWbRbLevels7 = 20;
+
+    @NotNull
+    protected static final HashMap<Integer, String> _tagNameMap = new HashMap<Integer, String>();
+
+    static
+    {
+        _tagNameMap.put(TagNumWbEntries, "Num WB Entries");
+        _tagNameMap.put(TagWbType1, "WB Type 1");
+        _tagNameMap.put(TagWbRbLevels1, "WB RGB Levels 1");
+        _tagNameMap.put(TagWbType2, "WB Type 2");
+        _tagNameMap.put(TagWbRbLevels2, "WB RGB Levels 2");
+        _tagNameMap.put(TagWbType3, "WB Type 3");
+        _tagNameMap.put(TagWbRbLevels3, "WB RGB Levels 3");
+        _tagNameMap.put(TagWbType4, "WB Type 4");
+        _tagNameMap.put(TagWbRbLevels4, "WB RGB Levels 4");
+        _tagNameMap.put(TagWbType5, "WB Type 5");
+        _tagNameMap.put(TagWbRbLevels5, "WB RGB Levels 5");
+        _tagNameMap.put(TagWbType6, "WB Type 6");
+        _tagNameMap.put(TagWbRbLevels6, "WB RGB Levels 6");
+        _tagNameMap.put(TagWbType7, "WB Type 7");
+        _tagNameMap.put(TagWbRbLevels7, "WB RGB Levels 7");
+    }
+
+    public PanasonicRawWbInfoDirectory()
+    {
+        this.setDescriptor(new PanasonicRawWbInfoDescriptor(this));
+    }
+
+    @Override
+    @NotNull
+    public String getName()
+    {
+        return "PanasonicRaw WbInfo";
+    }
+
+    @Override
+    @NotNull
+    protected HashMap<Integer, String> getTagNameMap()
+    {
+        return _tagNameMap;
+    }
+}
diff --git a/src/com/drew/metadata/exif/makernotes/SonyType6MakernoteDescriptor.java b/src/com/drew/metadata/exif/PrintIMDescriptor.java
similarity index 65%
copy from src/com/drew/metadata/exif/makernotes/SonyType6MakernoteDescriptor.java
copy to src/com/drew/metadata/exif/PrintIMDescriptor.java
index 7962b5b..50400ee 100644
--- a/src/com/drew/metadata/exif/makernotes/SonyType6MakernoteDescriptor.java
+++ b/src/com/drew/metadata/exif/PrintIMDescriptor.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2002-2016 Drew Noakes
+ * Copyright 2002-2017 Drew Noakes
  *
  *    Licensed under the Apache License, Version 2.0 (the "License");
  *    you may not use this file except in compliance with the License.
@@ -19,22 +19,24 @@
  *    https://github.com/drewnoakes/metadata-extractor
  */
 
-package com.drew.metadata.exif.makernotes;
+package com.drew.metadata.exif;
 
 import com.drew.lang.annotations.NotNull;
 import com.drew.lang.annotations.Nullable;
 import com.drew.metadata.TagDescriptor;
 
-import static com.drew.metadata.exif.makernotes.SonyType6MakernoteDirectory.*;
+import static com.drew.metadata.exif.PrintIMDirectory.*;
 
 /**
- * Provides human-readable string representations of tag values stored in a {@link SonyType6MakernoteDirectory}.
+ * Provides human-readable string representations of tag values stored in a {@link PrintIMDirectory}.
  *
+ * @author Kevin Mott https://github.com/kwhopper
  * @author Drew Noakes https://drewnoakes.com
  */
-public class SonyType6MakernoteDescriptor extends TagDescriptor<SonyType6MakernoteDirectory>
+ at SuppressWarnings("WeakerAccess")
+public class PrintIMDescriptor extends TagDescriptor<PrintIMDirectory>
 {
-    public SonyType6MakernoteDescriptor(@NotNull SonyType6MakernoteDirectory directory)
+    public PrintIMDescriptor(@NotNull PrintIMDirectory directory)
     {
         super(directory);
     }
@@ -44,16 +46,13 @@ public class SonyType6MakernoteDescriptor extends TagDescriptor<SonyType6Makerno
     public String getDescription(int tagType)
     {
         switch (tagType) {
-            case TAG_MAKERNOTE_THUMB_VERSION:
-                return getMakernoteThumbVersionDescription();
-            default:
+            case TagPrintImVersion:
                 return super.getDescription(tagType);
+            default:
+                Integer value = _directory.getInteger(tagType);
+                if (value == null)
+                    return null;
+                return String.format("0x%08x", value);
         }
     }
-
-    @Nullable
-    public String getMakernoteThumbVersionDescription()
-    {
-        return getVersionBytesDescription(TAG_MAKERNOTE_THUMB_VERSION, 2);
-    }
 }
diff --git a/src/com/drew/metadata/exif/ExifIFD0Directory.java b/src/com/drew/metadata/exif/PrintIMDirectory.java
old mode 100755
new mode 100644
similarity index 68%
copy from src/com/drew/metadata/exif/ExifIFD0Directory.java
copy to src/com/drew/metadata/exif/PrintIMDirectory.java
index e1827af..abada9c
--- a/src/com/drew/metadata/exif/ExifIFD0Directory.java
+++ b/src/com/drew/metadata/exif/PrintIMDirectory.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2002-2016 Drew Noakes
+ * Copyright 2002-2017 Drew Noakes
  *
  *    Licensed under the Apache License, Version 2.0 (the "License");
  *    you may not use this file except in compliance with the License.
@@ -21,41 +21,41 @@
 
 package com.drew.metadata.exif;
 
-import java.util.HashMap;
-
 import com.drew.lang.annotations.NotNull;
+import com.drew.metadata.Directory;
+
+import java.util.HashMap;
 
 /**
- * Describes Exif tags from the IFD0 directory.
+ * These tags can be found in Epson proprietary metadata. The index values are 'fake' but
+ * chosen specifically to make processing easier
  *
+ * @author Kevin Mott https://github.com/kwhopper
  * @author Drew Noakes https://drewnoakes.com
  */
-public class ExifIFD0Directory extends ExifDirectoryBase
+ at SuppressWarnings("WeakerAccess")
+public class PrintIMDirectory extends Directory
 {
-    /** This tag is a pointer to the Exif SubIFD. */
-    public static final int TAG_EXIF_SUB_IFD_OFFSET = 0x8769;
-
-    /** This tag is a pointer to the Exif GPS IFD. */
-    public static final int TAG_GPS_INFO_OFFSET = 0x8825;
-
-    public ExifIFD0Directory()
-    {
-        this.setDescriptor(new ExifIFD0Descriptor(this));
-    }
+    public static final int TagPrintImVersion = 0x0000;
 
     @NotNull
     protected static final HashMap<Integer, String> _tagNameMap = new HashMap<Integer, String>();
 
     static
     {
-        addExifTagNames(_tagNameMap);
+        _tagNameMap.put(TagPrintImVersion, "PrintIM Version");
+    }
+
+    public PrintIMDirectory()
+    {
+        this.setDescriptor(new PrintIMDescriptor(this));
     }
 
     @Override
     @NotNull
     public String getName()
     {
-        return "Exif IFD0";
+        return "PrintIM";
     }
 
     @Override
diff --git a/src/com/drew/metadata/exif/makernotes/SonyType6MakernoteDescriptor.java b/src/com/drew/metadata/exif/makernotes/AppleMakernoteDescriptor.java
similarity index 66%
copy from src/com/drew/metadata/exif/makernotes/SonyType6MakernoteDescriptor.java
copy to src/com/drew/metadata/exif/makernotes/AppleMakernoteDescriptor.java
index 7962b5b..daabd18 100644
--- a/src/com/drew/metadata/exif/makernotes/SonyType6MakernoteDescriptor.java
+++ b/src/com/drew/metadata/exif/makernotes/AppleMakernoteDescriptor.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2002-2016 Drew Noakes
+ * Copyright 2002-2017 Drew Noakes
  *
  *    Licensed under the Apache License, Version 2.0 (the "License");
  *    you may not use this file except in compliance with the License.
@@ -18,23 +18,23 @@
  *    https://drewnoakes.com/code/exif/
  *    https://github.com/drewnoakes/metadata-extractor
  */
-
 package com.drew.metadata.exif.makernotes;
 
 import com.drew.lang.annotations.NotNull;
 import com.drew.lang.annotations.Nullable;
 import com.drew.metadata.TagDescriptor;
 
-import static com.drew.metadata.exif.makernotes.SonyType6MakernoteDirectory.*;
-
 /**
- * Provides human-readable string representations of tag values stored in a {@link SonyType6MakernoteDirectory}.
+ * Provides human-readable string representations of tag values stored in a {@link AppleMakernoteDirectory}.
+ * <p>
+ * Using information from http://owl.phy.queensu.ca/~phil/exiftool/TagNames/Apple.html
  *
  * @author Drew Noakes https://drewnoakes.com
  */
-public class SonyType6MakernoteDescriptor extends TagDescriptor<SonyType6MakernoteDirectory>
+ at SuppressWarnings("WeakerAccess")
+public class AppleMakernoteDescriptor extends TagDescriptor<AppleMakernoteDirectory>
 {
-    public SonyType6MakernoteDescriptor(@NotNull SonyType6MakernoteDirectory directory)
+    public AppleMakernoteDescriptor(@NotNull AppleMakernoteDirectory directory)
     {
         super(directory);
     }
@@ -44,16 +44,16 @@ public class SonyType6MakernoteDescriptor extends TagDescriptor<SonyType6Makerno
     public String getDescription(int tagType)
     {
         switch (tagType) {
-            case TAG_MAKERNOTE_THUMB_VERSION:
-                return getMakernoteThumbVersionDescription();
+            case AppleMakernoteDirectory.TAG_HDR_IMAGE_TYPE:
+                return getHdrImageTypeDescription();
             default:
                 return super.getDescription(tagType);
         }
     }
 
     @Nullable
-    public String getMakernoteThumbVersionDescription()
+    public String getHdrImageTypeDescription()
     {
-        return getVersionBytesDescription(TAG_MAKERNOTE_THUMB_VERSION, 2);
+        return getIndexedDescription(AppleMakernoteDirectory.TAG_HDR_IMAGE_TYPE, 3, "HDR Image", "Original Image");
     }
 }
diff --git a/src/com/drew/metadata/exif/makernotes/KyoceraMakernoteDirectory.java b/src/com/drew/metadata/exif/makernotes/AppleMakernoteDirectory.java
similarity index 64%
copy from src/com/drew/metadata/exif/makernotes/KyoceraMakernoteDirectory.java
copy to src/com/drew/metadata/exif/makernotes/AppleMakernoteDirectory.java
index 716a625..604c73e 100644
--- a/src/com/drew/metadata/exif/makernotes/KyoceraMakernoteDirectory.java
+++ b/src/com/drew/metadata/exif/makernotes/AppleMakernoteDirectory.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2002-2016 Drew Noakes
+ * Copyright 2002-2017 Drew Noakes
  *
  *    Licensed under the Apache License, Version 2.0 (the "License");
  *    you may not use this file except in compliance with the License.
@@ -26,34 +26,39 @@ import com.drew.metadata.Directory;
 import java.util.HashMap;
 
 /**
- * Describes tags specific to Kyocera and Contax cameras.
+ * Describes tags specific to Apple cameras.
+ * <p>
+ * Using information from http://owl.phy.queensu.ca/~phil/exiftool/TagNames/Apple.html
  *
  * @author Drew Noakes https://drewnoakes.com
  */
-public class KyoceraMakernoteDirectory extends Directory
+ at SuppressWarnings("WeakerAccess")
+public class AppleMakernoteDirectory extends Directory
 {
-    public static final int TAG_PROPRIETARY_THUMBNAIL = 0x0001;
-    public static final int TAG_PRINT_IMAGE_MATCHING_INFO = 0x0E00;
+    public static final int TAG_RUN_TIME = 0x0003;
+    public static final int TAG_HDR_IMAGE_TYPE = 0x000a;
+    public static final int TAG_BURST_UUID = 0x000b;
 
     @NotNull
     protected static final HashMap<Integer, String> _tagNameMap = new HashMap<Integer, String>();
 
     static
     {
-        _tagNameMap.put(TAG_PROPRIETARY_THUMBNAIL, "Proprietary Thumbnail Format Data");
-        _tagNameMap.put(TAG_PRINT_IMAGE_MATCHING_INFO, "Print Image Matching (PIM) Info");
+        _tagNameMap.put(TAG_RUN_TIME, "Run Time");
+        _tagNameMap.put(TAG_HDR_IMAGE_TYPE, "HDR Image Type");
+        _tagNameMap.put(TAG_BURST_UUID, "Burst UUID");
     }
 
-    public KyoceraMakernoteDirectory()
+    public AppleMakernoteDirectory()
     {
-        this.setDescriptor(new KyoceraMakernoteDescriptor(this));
+        this.setDescriptor(new AppleMakernoteDescriptor(this));
     }
 
     @Override
     @NotNull
     public String getName()
     {
-        return "Kyocera/Contax Makernote";
+        return "Apple Makernote";
     }
 
     @Override
diff --git a/src/com/drew/metadata/exif/makernotes/CanonMakernoteDescriptor.java b/src/com/drew/metadata/exif/makernotes/CanonMakernoteDescriptor.java
index a53a393..4eb035a 100644
--- a/src/com/drew/metadata/exif/makernotes/CanonMakernoteDescriptor.java
+++ b/src/com/drew/metadata/exif/makernotes/CanonMakernoteDescriptor.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2002-2016 Drew Noakes
+ * Copyright 2002-2017 Drew Noakes
  *
  *    Licensed under the Apache License, Version 2.0 (the "License");
  *    you may not use this file except in compliance with the License.
@@ -25,6 +25,7 @@ import com.drew.lang.annotations.Nullable;
 import com.drew.metadata.TagDescriptor;
 
 import java.text.DecimalFormat;
+import java.util.HashMap;
 
 import static com.drew.metadata.exif.makernotes.CanonMakernoteDirectory.*;
 
@@ -33,6 +34,7 @@ import static com.drew.metadata.exif.makernotes.CanonMakernoteDirectory.*;
  *
  * @author Drew Noakes https://drewnoakes.com
  */
+ at SuppressWarnings("WeakerAccess")
 public class CanonMakernoteDescriptor extends TagDescriptor<CanonMakernoteDirectory>
 {
     public CanonMakernoteDescriptor(@NotNull CanonMakernoteDirectory directory)
@@ -53,6 +55,8 @@ public class CanonMakernoteDescriptor extends TagDescriptor<CanonMakernoteDirect
                 return getFocusTypeDescription();
             case CameraSettings.TAG_DIGITAL_ZOOM:
                 return getDigitalZoomDescription();
+            case CameraSettings.TAG_RECORD_MODE:
+                return getRecordModeDescription();
             case CameraSettings.TAG_QUALITY:
                 return getQualityDescription();
             case CameraSettings.TAG_MACRO_MODE:
@@ -101,6 +105,28 @@ public class CanonMakernoteDescriptor extends TagDescriptor<CanonMakernoteDirect
                 return getAfPointUsedDescription();
             case FocalLength.TAG_FLASH_BIAS:
                 return getFlashBiasDescription();
+            case AFInfo.TAG_AF_POINTS_IN_FOCUS:
+                return getTagAfPointsInFocus();
+            case CameraSettings.TAG_MAX_APERTURE:
+                return getMaxApertureDescription();
+            case CameraSettings.TAG_MIN_APERTURE:
+                return getMinApertureDescription();
+            case CameraSettings.TAG_FOCUS_CONTINUOUS:
+                return getFocusContinuousDescription();
+            case CameraSettings.TAG_AE_SETTING:
+                return getAESettingDescription();
+            case CanonMakernoteDirectory.CameraSettings.TAG_DISPLAY_APERTURE:
+                return getDisplayApertureDescription();
+            case CanonMakernoteDirectory.CameraSettings.TAG_SPOT_METERING_MODE:
+                return getSpotMeteringModeDescription();
+            case CanonMakernoteDirectory.CameraSettings.TAG_PHOTO_EFFECT:
+                return getPhotoEffectDescription();
+            case CanonMakernoteDirectory.CameraSettings.TAG_MANUAL_FLASH_OUTPUT:
+                return getManualFlashOutputDescription();
+            case CanonMakernoteDirectory.CameraSettings.TAG_COLOR_TONE:
+                return getColorToneDescription();
+            case CanonMakernoteDirectory.CameraSettings.TAG_SRAW_QUALITY:
+                return getSRawQualityDescription();
 
             // It turns out that these values are dependent upon the camera model and therefore the below code was
             // incorrect for some Canon models.  This needs to be revisited.
@@ -345,7 +371,7 @@ public class CanonMakernoteDescriptor extends TagDescriptor<CanonMakernoteDirect
         // not
         //  0, 0.33,  0.5, 0.66,  1
 
-        return ((isNegative) ? "-" : "") + Float.toString(value / 32f) + " EV";
+        return (isNegative ? "-" : "") + Float.toString(value / 32f) + " EV";
     }
 
     @Nullable
@@ -366,6 +392,28 @@ public class CanonMakernoteDescriptor extends TagDescriptor<CanonMakernoteDirect
     }
 
     @Nullable
+    public String getTagAfPointsInFocus()
+    {
+        Integer value = _directory.getInteger(AFInfo.TAG_AF_POINTS_IN_FOCUS);
+        if (value == null)
+            return null;
+
+        StringBuilder sb = new StringBuilder();
+
+        for (int i = 0; i < 16; i++)
+        {
+            if ((value & 1 << i) != 0)
+            {
+                if (sb.length() != 0)
+                    sb.append(',');
+                sb.append(i);
+            }
+        }
+
+        return sb.length() == 0 ? "None" : sb.toString();
+    }
+
+    @Nullable
     public String getWhiteBalanceDescription()
     {
         return getIndexedDescription(
@@ -392,16 +440,16 @@ public class CanonMakernoteDescriptor extends TagDescriptor<CanonMakernoteDirect
         Integer value = _directory.getInteger(CameraSettings.TAG_FLASH_DETAILS);
         if (value == null)
             return null;
-        if (((value >> 14) & 1) > 0) {
+        if (((value >> 14) & 1) != 0) {
             return "External E-TTL";
         }
-        if (((value >> 13) & 1) > 0) {
+        if (((value >> 13) & 1) != 0) {
             return "Internal flash";
         }
-        if (((value >> 11) & 1) > 0) {
+        if (((value >> 11) & 1) != 0) {
             return "FP sync used";
         }
-        if (((value >> 4) & 1) > 0) {
+        if (((value >> 4) & 1) != 0) {
             return "FP sync enabled";
         }
         return "Unknown (" + value + ")";
@@ -460,7 +508,31 @@ public class CanonMakernoteDescriptor extends TagDescriptor<CanonMakernoteDirect
         if (value == null)
             return null;
 
-        return "Lens type: " + Integer.toString(value);
+        return _lensTypeById.containsKey(value)
+            ? _lensTypeById.get(value)
+            : String.format("Unknown (%d)", value);
+    }
+
+    @Nullable
+    public String getMaxApertureDescription()
+    {
+        Integer value = _directory.getInteger(CameraSettings.TAG_MAX_APERTURE);
+        if (value == null)
+            return null;
+        if (value > 512)
+            return String.format("Unknown (%d)", value);
+        return getFStopDescription(Math.exp(decodeCanonEv(value) * Math.log(2.0) / 2.0));
+    }
+
+    @Nullable
+    public String getMinApertureDescription()
+    {
+        Integer value = _directory.getInteger(CameraSettings.TAG_MIN_APERTURE);
+        if (value == null)
+            return null;
+        if (value > 512)
+            return String.format("Unknown (%d)", value);
+        return getFStopDescription(Math.exp(decodeCanonEv(value) * Math.log(2.0) / 2.0));
     }
 
     @Nullable
@@ -498,7 +570,7 @@ public class CanonMakernoteDescriptor extends TagDescriptor<CanonMakernoteDirect
 
         // Canon PowerShot S3 is special
         int canonMask = 0x4000;
-        if ((value & canonMask) > 0)
+        if ((value & canonMask) != 0)
             return "" + (value & ~canonMask);
 
         switch (value) {
@@ -699,6 +771,12 @@ public class CanonMakernoteDescriptor extends TagDescriptor<CanonMakernoteDirect
     }
 
     @Nullable
+    public String getRecordModeDescription()
+    {
+        return getIndexedDescription(CameraSettings.TAG_RECORD_MODE, 1, "JPEG", "CRW+THM", "AVI+THM", "TIF", "TIF+JPEG", "CR2", "CR2+JPEG", null, "MOV", "MP4");
+    }
+
+    @Nullable
     public String getFocusTypeDescription()
     {
         Integer value = _directory.getInteger(CameraSettings.TAG_FOCUS_TYPE);
@@ -723,4 +801,355 @@ public class CanonMakernoteDescriptor extends TagDescriptor<CanonMakernoteDirect
     {
         return getIndexedDescription(CameraSettings.TAG_FLASH_ACTIVITY, "Flash did not fire", "Flash fired");
     }
+
+    @Nullable
+    public String getFocusContinuousDescription()
+    {
+        return getIndexedDescription(CameraSettings.TAG_FOCUS_CONTINUOUS, 0,
+            "Single", "Continuous", null, null, null, null, null, null, "Manual");
+    }
+
+    @Nullable
+    public String getAESettingDescription()
+    {
+        return getIndexedDescription(CameraSettings.TAG_AE_SETTING, 0,
+            "Normal AE", "Exposure Compensation", "AE Lock", "AE Lock + Exposure Comp.", "No AE");
+    }
+
+    @Nullable
+    public String getDisplayApertureDescription()
+    {
+        Integer value = _directory.getInteger(CameraSettings.TAG_DISPLAY_APERTURE);
+        if (value == null)
+            return null;
+
+        if (value == 0xFFFF)
+            return value.toString();
+        return getFStopDescription(value / 10f);
+    }
+
+    @Nullable
+    public String getSpotMeteringModeDescription()
+    {
+        return getIndexedDescription(CanonMakernoteDirectory.CameraSettings.TAG_SPOT_METERING_MODE, 0,
+            "Center", "AF Point");
+    }
+
+    @Nullable
+    public String getPhotoEffectDescription()
+    {
+        Integer value = _directory.getInteger(CameraSettings.TAG_PHOTO_EFFECT);
+        if (value == null)
+            return null;
+
+        switch (value)
+        {
+            case 0:
+                return "Off";
+            case 1:
+                return "Vivid";
+            case 2:
+                return "Neutral";
+            case 3:
+                return "Smooth";
+            case 4:
+                return "Sepia";
+            case 5:
+                return "B&W";
+            case 6:
+                return "Custom";
+            case 100:
+                return "My Color Data";
+            default:
+                return "Unknown (" + value + ")";
+        }
+    }
+
+    @Nullable
+    public String getManualFlashOutputDescription()
+    {
+        Integer value = _directory.getInteger(CameraSettings.TAG_MANUAL_FLASH_OUTPUT);
+        if (value == null)
+            return null;
+
+        switch (value)
+        {
+            case 0:
+                return "n/a";
+            case 0x500:
+                return "Full";
+            case 0x502:
+                return "Medium";
+            case 0x504:
+                return "Low";
+            case 0x7fff:
+                return "n/a";   // (EOS models)
+            default:
+                return "Unknown (" + value + ")";
+        }
+    }
+
+    @Nullable
+    public String getColorToneDescription()
+    {
+        Integer value = _directory.getInteger(CameraSettings.TAG_COLOR_TONE);
+        if (value == null)
+            return null;
+
+        return value == 0x7fff ? "n/a" : value.toString();
+    }
+
+    @Nullable
+    public String getSRawQualityDescription()
+    {
+        return getIndexedDescription(CanonMakernoteDirectory.CameraSettings.TAG_SRAW_QUALITY, 0, "n/a", "sRAW1 (mRAW)", "sRAW2 (sRAW)");
+    }
+
+    /**
+     * Canon hex-based EV (modulo 0x20) to real number.
+     *
+     * Converted from Exiftool version 10.10 created by Phil Harvey
+     * http://www.sno.phy.queensu.ca/~phil/exiftool/
+     * lib\Image\ExifTool\Canon.pm
+     *
+     *         eg) 0x00 -> 0
+     *             0x0c -> 0.33333
+     *             0x10 -> 0.5
+     *             0x14 -> 0.66666
+     *             0x20 -> 1   ... etc
+     */
+    private double decodeCanonEv(int val)
+    {
+        int sign = 1;
+        if (val < 0)
+        {
+            val = -val;
+            sign = -1;
+        }
+
+        int frac = val & 0x1f;
+        val -= frac;
+
+        if (frac == 0x0c)
+            frac = 0x20 / 3;
+        else if (frac == 0x14)
+            frac = 0x40 / 3;
+
+        return sign * (val + frac) / (double)0x20;
+    }
+
+    /**
+     *  Map from <see cref="CanonMakernoteDirectory.CameraSettings.TagLensType"/> to string descriptions.
+     *
+     *  Data sourced from http://www.sno.phy.queensu.ca/~phil/exiftool/TagNames/Canon.html#LensType
+     *
+     *  Note that only Canon lenses are listed. Lenses from other manufacturers may identify themselves to the camera
+     *  as being from this set, but in fact may be quite different. This limits the usefulness of this data,
+     *  unfortunately.
+     */
+    private static final HashMap<Integer, String> _lensTypeById = new HashMap<Integer, String>();
+
+    static {
+        _lensTypeById.put(1, "Canon EF 50mm f/1.8");
+        _lensTypeById.put(2, "Canon EF 28mm f/2.8");
+        _lensTypeById.put(3, "Canon EF 135mm f/2.8 Soft");
+        _lensTypeById.put(4, "Canon EF 35-105mm f/3.5-4.5 or Sigma Lens");
+        _lensTypeById.put(5, "Canon EF 35-70mm f/3.5-4.5");
+        _lensTypeById.put(6, "Canon EF 28-70mm f/3.5-4.5 or Sigma or Tokina Lens");
+        _lensTypeById.put(7, "Canon EF 100-300mm f/5.6L");
+        _lensTypeById.put(8, "Canon EF 100-300mm f/5.6 or Sigma or Tokina Lens");
+        _lensTypeById.put(9, "Canon EF 70-210mm f/4");
+        _lensTypeById.put(10, "Canon EF 50mm f/2.5 Macro or Sigma Lens");
+        _lensTypeById.put(11, "Canon EF 35mm f/2");
+        _lensTypeById.put(13, "Canon EF 15mm f/2.8 Fisheye");
+        _lensTypeById.put(14, "Canon EF 50-200mm f/3.5-4.5L");
+        _lensTypeById.put(15, "Canon EF 50-200mm f/3.5-4.5");
+        _lensTypeById.put(16, "Canon EF 35-135mm f/3.5-4.5");
+        _lensTypeById.put(17, "Canon EF 35-70mm f/3.5-4.5A");
+        _lensTypeById.put(18, "Canon EF 28-70mm f/3.5-4.5");
+        _lensTypeById.put(20, "Canon EF 100-200mm f/4.5A");
+        _lensTypeById.put(21, "Canon EF 80-200mm f/2.8L");
+        _lensTypeById.put(22, "Canon EF 20-35mm f/2.8L or Tokina Lens");
+        _lensTypeById.put(23, "Canon EF 35-105mm f/3.5-4.5");
+        _lensTypeById.put(24, "Canon EF 35-80mm f/4-5.6 Power Zoom");
+        _lensTypeById.put(25, "Canon EF 35-80mm f/4-5.6 Power Zoom");
+        _lensTypeById.put(26, "Canon EF 100mm f/2.8 Macro or Other Lens");
+        _lensTypeById.put(27, "Canon EF 35-80mm f/4-5.6");
+        _lensTypeById.put(28, "Canon EF 80-200mm f/4.5-5.6 or Tamron Lens");
+        _lensTypeById.put(29, "Canon EF 50mm f/1.8 II");
+        _lensTypeById.put(30, "Canon EF 35-105mm f/4.5-5.6");
+        _lensTypeById.put(31, "Canon EF 75-300mm f/4-5.6 or Tamron Lens");
+        _lensTypeById.put(32, "Canon EF 24mm f/2.8 or Sigma Lens");
+        _lensTypeById.put(33, "Voigtlander or Carl Zeiss Lens");
+        _lensTypeById.put(35, "Canon EF 35-80mm f/4-5.6");
+        _lensTypeById.put(36, "Canon EF 38-76mm f/4.5-5.6");
+        _lensTypeById.put(37, "Canon EF 35-80mm f/4-5.6 or Tamron Lens");
+        _lensTypeById.put(38, "Canon EF 80-200mm f/4.5-5.6");
+        _lensTypeById.put(39, "Canon EF 75-300mm f/4-5.6");
+        _lensTypeById.put(40, "Canon EF 28-80mm f/3.5-5.6");
+        _lensTypeById.put(41, "Canon EF 28-90mm f/4-5.6");
+        _lensTypeById.put(42, "Canon EF 28-200mm f/3.5-5.6 or Tamron Lens");
+        _lensTypeById.put(43, "Canon EF 28-105mm f/4-5.6");
+        _lensTypeById.put(44, "Canon EF 90-300mm f/4.5-5.6");
+        _lensTypeById.put(45, "Canon EF-S 18-55mm f/3.5-5.6 [II]");
+        _lensTypeById.put(46, "Canon EF 28-90mm f/4-5.6");
+        _lensTypeById.put(47, "Zeiss Milvus 35mm f/2 or 50mm f/2");
+        _lensTypeById.put(48, "Canon EF-S 18-55mm f/3.5-5.6 IS");
+        _lensTypeById.put(49, "Canon EF-S 55-250mm f/4-5.6 IS");
+        _lensTypeById.put(50, "Canon EF-S 18-200mm f/3.5-5.6 IS");
+        _lensTypeById.put(51, "Canon EF-S 18-135mm f/3.5-5.6 IS");
+        _lensTypeById.put(52, "Canon EF-S 18-55mm f/3.5-5.6 IS II");
+        _lensTypeById.put(53, "Canon EF-S 18-55mm f/3.5-5.6 III");
+        _lensTypeById.put(54, "Canon EF-S 55-250mm f/4-5.6 IS II");
+        _lensTypeById.put(94, "Canon TS-E 17mm f/4L");
+        _lensTypeById.put(95, "Canon TS-E 24.0mm f/3.5 L II");
+        _lensTypeById.put(124, "Canon MP-E 65mm f/2.8 1-5x Macro Photo");
+        _lensTypeById.put(125, "Canon TS-E 24mm f/3.5L");
+        _lensTypeById.put(126, "Canon TS-E 45mm f/2.8");
+        _lensTypeById.put(127, "Canon TS-E 90mm f/2.8");
+        _lensTypeById.put(129, "Canon EF 300mm f/2.8L");
+        _lensTypeById.put(130, "Canon EF 50mm f/1.0L");
+        _lensTypeById.put(131, "Canon EF 28-80mm f/2.8-4L or Sigma Lens");
+        _lensTypeById.put(132, "Canon EF 1200mm f/5.6L");
+        _lensTypeById.put(134, "Canon EF 600mm f/4L IS");
+        _lensTypeById.put(135, "Canon EF 200mm f/1.8L");
+        _lensTypeById.put(136, "Canon EF 300mm f/2.8L");
+        _lensTypeById.put(137, "Canon EF 85mm f/1.2L or Sigma or Tamron Lens");
+        _lensTypeById.put(138, "Canon EF 28-80mm f/2.8-4L");
+        _lensTypeById.put(139, "Canon EF 400mm f/2.8L");
+        _lensTypeById.put(140, "Canon EF 500mm f/4.5L");
+        _lensTypeById.put(141, "Canon EF 500mm f/4.5L");
+        _lensTypeById.put(142, "Canon EF 300mm f/2.8L IS");
+        _lensTypeById.put(143, "Canon EF 500mm f/4L IS or Sigma Lens");
+        _lensTypeById.put(144, "Canon EF 35-135mm f/4-5.6 USM");
+        _lensTypeById.put(145, "Canon EF 100-300mm f/4.5-5.6 USM");
+        _lensTypeById.put(146, "Canon EF 70-210mm f/3.5-4.5 USM");
+        _lensTypeById.put(147, "Canon EF 35-135mm f/4-5.6 USM");
+        _lensTypeById.put(148, "Canon EF 28-80mm f/3.5-5.6 USM");
+        _lensTypeById.put(149, "Canon EF 100mm f/2 USM");
+        _lensTypeById.put(150, "Canon EF 14mm f/2.8L or Sigma Lens");
+        _lensTypeById.put(151, "Canon EF 200mm f/2.8L");
+        _lensTypeById.put(152, "Canon EF 300mm f/4L IS or Sigma Lens");
+        _lensTypeById.put(153, "Canon EF 35-350mm f/3.5-5.6L or Sigma or Tamron Lens");
+        _lensTypeById.put(154, "Canon EF 20mm f/2.8 USM or Zeiss Lens");
+        _lensTypeById.put(155, "Canon EF 85mm f/1.8 USM");
+        _lensTypeById.put(156, "Canon EF 28-105mm f/3.5-4.5 USM or Tamron Lens");
+        _lensTypeById.put(160, "Canon EF 20-35mm f/3.5-4.5 USM or Tamron or Tokina Lens");
+        _lensTypeById.put(161, "Canon EF 28-70mm f/2.8L or Sigma or Tamron Lens");
+        _lensTypeById.put(162, "Canon EF 200mm f/2.8L");
+        _lensTypeById.put(163, "Canon EF 300mm f/4L");
+        _lensTypeById.put(164, "Canon EF 400mm f/5.6L");
+        _lensTypeById.put(165, "Canon EF 70-200mm f/2.8 L");
+        _lensTypeById.put(166, "Canon EF 70-200mm f/2.8 L + 1.4x");
+        _lensTypeById.put(167, "Canon EF 70-200mm f/2.8 L + 2x");
+        _lensTypeById.put(168, "Canon EF 28mm f/1.8 USM or Sigma Lens");
+        _lensTypeById.put(169, "Canon EF 17-35mm f/2.8L or Sigma Lens");
+        _lensTypeById.put(170, "Canon EF 200mm f/2.8L II");
+        _lensTypeById.put(171, "Canon EF 300mm f/4L");
+        _lensTypeById.put(172, "Canon EF 400mm f/5.6L or Sigma Lens");
+        _lensTypeById.put(173, "Canon EF 180mm Macro f/3.5L or Sigma Lens");
+        _lensTypeById.put(174, "Canon EF 135mm f/2L or Other Lens");
+        _lensTypeById.put(175, "Canon EF 400mm f/2.8L");
+        _lensTypeById.put(176, "Canon EF 24-85mm f/3.5-4.5 USM");
+        _lensTypeById.put(177, "Canon EF 300mm f/4L IS");
+        _lensTypeById.put(178, "Canon EF 28-135mm f/3.5-5.6 IS");
+        _lensTypeById.put(179, "Canon EF 24mm f/1.4L");
+        _lensTypeById.put(180, "Canon EF 35mm f/1.4L or Other Lens");
+        _lensTypeById.put(181, "Canon EF 100-400mm f/4.5-5.6L IS + 1.4x or Sigma Lens");
+        _lensTypeById.put(182, "Canon EF 100-400mm f/4.5-5.6L IS + 2x or Sigma Lens");
+        _lensTypeById.put(183, "Canon EF 100-400mm f/4.5-5.6L IS or Sigma Lens");
+        _lensTypeById.put(184, "Canon EF 400mm f/2.8L + 2x");
+        _lensTypeById.put(185, "Canon EF 600mm f/4L IS");
+        _lensTypeById.put(186, "Canon EF 70-200mm f/4L");
+        _lensTypeById.put(187, "Canon EF 70-200mm f/4L + 1.4x");
+        _lensTypeById.put(188, "Canon EF 70-200mm f/4L + 2x");
+        _lensTypeById.put(189, "Canon EF 70-200mm f/4L + 2.8x");
+        _lensTypeById.put(190, "Canon EF 100mm f/2.8 Macro USM");
+        _lensTypeById.put(191, "Canon EF 400mm f/4 DO IS");
+        _lensTypeById.put(193, "Canon EF 35-80mm f/4-5.6 USM");
+        _lensTypeById.put(194, "Canon EF 80-200mm f/4.5-5.6 USM");
+        _lensTypeById.put(195, "Canon EF 35-105mm f/4.5-5.6 USM");
+        _lensTypeById.put(196, "Canon EF 75-300mm f/4-5.6 USM");
+        _lensTypeById.put(197, "Canon EF 75-300mm f/4-5.6 IS USM");
+        _lensTypeById.put(198, "Canon EF 50mm f/1.4 USM or Zeiss Lens");
+        _lensTypeById.put(199, "Canon EF 28-80mm f/3.5-5.6 USM");
+        _lensTypeById.put(200, "Canon EF 75-300mm f/4-5.6 USM");
+        _lensTypeById.put(201, "Canon EF 28-80mm f/3.5-5.6 USM");
+        _lensTypeById.put(202, "Canon EF 28-80mm f/3.5-5.6 USM IV");
+        _lensTypeById.put(208, "Canon EF 22-55mm f/4-5.6 USM");
+        _lensTypeById.put(209, "Canon EF 55-200mm f/4.5-5.6");
+        _lensTypeById.put(210, "Canon EF 28-90mm f/4-5.6 USM");
+        _lensTypeById.put(211, "Canon EF 28-200mm f/3.5-5.6 USM");
+        _lensTypeById.put(212, "Canon EF 28-105mm f/4-5.6 USM");
+        _lensTypeById.put(213, "Canon EF 90-300mm f/4.5-5.6 USM or Tamron Lens");
+        _lensTypeById.put(214, "Canon EF-S 18-55mm f/3.5-5.6 USM");
+        _lensTypeById.put(215, "Canon EF 55-200mm f/4.5-5.6 II USM");
+        _lensTypeById.put(217, "Tamron AF 18-270mm f/3.5-6.3 Di II VC PZD");
+        _lensTypeById.put(224, "Canon EF 70-200mm f/2.8L IS");
+        _lensTypeById.put(225, "Canon EF 70-200mm f/2.8L IS + 1.4x");
+        _lensTypeById.put(226, "Canon EF 70-200mm f/2.8L IS + 2x");
+        _lensTypeById.put(227, "Canon EF 70-200mm f/2.8L IS + 2.8x");
+        _lensTypeById.put(228, "Canon EF 28-105mm f/3.5-4.5 USM");
+        _lensTypeById.put(229, "Canon EF 16-35mm f/2.8L");
+        _lensTypeById.put(230, "Canon EF 24-70mm f/2.8L");
+        _lensTypeById.put(231, "Canon EF 17-40mm f/4L");
+        _lensTypeById.put(232, "Canon EF 70-300mm f/4.5-5.6 DO IS USM");
+        _lensTypeById.put(233, "Canon EF 28-300mm f/3.5-5.6L IS");
+        _lensTypeById.put(234, "Canon EF-S 17-85mm f/4-5.6 IS USM or Tokina Lens");
+        _lensTypeById.put(235, "Canon EF-S 10-22mm f/3.5-4.5 USM");
+        _lensTypeById.put(236, "Canon EF-S 60mm f/2.8 Macro USM");
+        _lensTypeById.put(237, "Canon EF 24-105mm f/4L IS");
+        _lensTypeById.put(238, "Canon EF 70-300mm f/4-5.6 IS USM");
+        _lensTypeById.put(239, "Canon EF 85mm f/1.2L II");
+        _lensTypeById.put(240, "Canon EF-S 17-55mm f/2.8 IS USM");
+        _lensTypeById.put(241, "Canon EF 50mm f/1.2L");
+        _lensTypeById.put(242, "Canon EF 70-200mm f/4L IS");
+        _lensTypeById.put(243, "Canon EF 70-200mm f/4L IS + 1.4x");
+        _lensTypeById.put(244, "Canon EF 70-200mm f/4L IS + 2x");
+        _lensTypeById.put(245, "Canon EF 70-200mm f/4L IS + 2.8x");
+        _lensTypeById.put(246, "Canon EF 16-35mm f/2.8L II");
+        _lensTypeById.put(247, "Canon EF 14mm f/2.8L II USM");
+        _lensTypeById.put(248, "Canon EF 200mm f/2L IS or Sigma Lens");
+        _lensTypeById.put(249, "Canon EF 800mm f/5.6L IS");
+        _lensTypeById.put(250, "Canon EF 24mm f/1.4L II or Sigma Lens");
+        _lensTypeById.put(251, "Canon EF 70-200mm f/2.8L IS II USM");
+        _lensTypeById.put(252, "Canon EF 70-200mm f/2.8L IS II USM + 1.4x");
+        _lensTypeById.put(253, "Canon EF 70-200mm f/2.8L IS II USM + 2x");
+        _lensTypeById.put(254, "Canon EF 100mm f/2.8L Macro IS USM");
+        _lensTypeById.put(255, "Sigma 24-105mm f/4 DG OS HSM | A or Other Sigma Lens");
+        _lensTypeById.put(488, "Canon EF-S 15-85mm f/3.5-5.6 IS USM");
+        _lensTypeById.put(489, "Canon EF 70-300mm f/4-5.6L IS USM");
+        _lensTypeById.put(490, "Canon EF 8-15mm f/4L Fisheye USM");
+        _lensTypeById.put(491, "Canon EF 300mm f/2.8L IS II USM");
+        _lensTypeById.put(492, "Canon EF 400mm f/2.8L IS II USM");
+        _lensTypeById.put(493, "Canon EF 500mm f/4L IS II USM or EF 24-105mm f4L IS USM");
+        _lensTypeById.put(494, "Canon EF 600mm f/4.0L IS II USM");
+        _lensTypeById.put(495, "Canon EF 24-70mm f/2.8L II USM");
+        _lensTypeById.put(496, "Canon EF 200-400mm f/4L IS USM");
+        _lensTypeById.put(499, "Canon EF 200-400mm f/4L IS USM + 1.4x");
+        _lensTypeById.put(502, "Canon EF 28mm f/2.8 IS USM");
+        _lensTypeById.put(503, "Canon EF 24mm f/2.8 IS USM");
+        _lensTypeById.put(504, "Canon EF 24-70mm f/4L IS USM");
+        _lensTypeById.put(505, "Canon EF 35mm f/2 IS USM");
+        _lensTypeById.put(506, "Canon EF 400mm f/4 DO IS II USM");
+        _lensTypeById.put(507, "Canon EF 16-35mm f/4L IS USM");
+        _lensTypeById.put(508, "Canon EF 11-24mm f/4L USM");
+        _lensTypeById.put(747, "Canon EF 100-400mm f/4.5-5.6L IS II USM");
+        _lensTypeById.put(750, "Canon EF 35mm f/1.4L II USM");
+        _lensTypeById.put(4142, "Canon EF-S 18-135mm f/3.5-5.6 IS STM");
+        _lensTypeById.put(4143, "Canon EF-M 18-55mm f/3.5-5.6 IS STM or Tamron Lens");
+        _lensTypeById.put(4144, "Canon EF 40mm f/2.8 STM");
+        _lensTypeById.put(4145, "Canon EF-M 22mm f/2 STM");
+        _lensTypeById.put(4146, "Canon EF-S 18-55mm f/3.5-5.6 IS STM");
+        _lensTypeById.put(4147, "Canon EF-M 11-22mm f/4-5.6 IS STM");
+        _lensTypeById.put(4148, "Canon EF-S 55-250mm f/4-5.6 IS STM");
+        _lensTypeById.put(4149, "Canon EF-M 55-200mm f/4.5-6.3 IS STM");
+        _lensTypeById.put(4150, "Canon EF-S 10-18mm f/4.5-5.6 IS STM");
+        _lensTypeById.put(4152, "Canon EF 24-105mm f/3.5-5.6 IS STM");
+        _lensTypeById.put(4153, "Canon EF-M 15-45mm f/3.5-6.3 IS STM");
+        _lensTypeById.put(4154, "Canon EF-S 24mm f/2.8 STM");
+        _lensTypeById.put(4156, "Canon EF 50mm f/1.8 STM");
+        _lensTypeById.put(36912, "Canon EF-S 18-135mm f/3.5-5.6 IS USM");
+        _lensTypeById.put(65535, "N/A");
+    }
 }
diff --git a/src/com/drew/metadata/exif/makernotes/CanonMakernoteDirectory.java b/src/com/drew/metadata/exif/makernotes/CanonMakernoteDirectory.java
index dd6f8d7..cfe9c50 100644
--- a/src/com/drew/metadata/exif/makernotes/CanonMakernoteDirectory.java
+++ b/src/com/drew/metadata/exif/makernotes/CanonMakernoteDirectory.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2002-2016 Drew Noakes
+ * Copyright 2002-2017 Drew Noakes
  *
  *    Licensed under the Apache License, Version 2.0 (the "License");
  *    you may not use this file except in compliance with the License.
@@ -34,6 +34,7 @@ import java.util.HashMap;
  *
  * @author Drew Noakes https://drewnoakes.com
  */
+ at SuppressWarnings("WeakerAccess")
 public class CanonMakernoteDirectory extends Directory
 {
     // These TAG_*_ARRAY Exif tags map to arrays of int16 values which are split out into separate 'fake' tags.
@@ -158,7 +159,7 @@ public class CanonMakernoteDirectory extends Directory
          */
         public static final int TAG_FOCUS_MODE_1 = OFFSET + 0x07;
         public static final int TAG_UNKNOWN_3 = OFFSET + 0x08;
-        public static final int TAG_UNKNOWN_4 = OFFSET + 0x09;
+        public static final int TAG_RECORD_MODE = OFFSET + 0x09;
         /**
          * 0 = Large
          * 1 = Medium
@@ -248,21 +249,32 @@ public class CanonMakernoteDirectory extends Directory
         public static final int TAG_LONG_FOCAL_LENGTH = OFFSET + 0x17;
         public static final int TAG_SHORT_FOCAL_LENGTH = OFFSET + 0x18;
         public static final int TAG_FOCAL_UNITS_PER_MM = OFFSET + 0x19;
-        public static final int TAG_UNKNOWN_9 = OFFSET + 0x1A;
-        public static final int TAG_UNKNOWN_10 = OFFSET + 0x1B;
+        public static final int TAG_MAX_APERTURE = OFFSET + 0x1A;
+        public static final int TAG_MIN_APERTURE = OFFSET + 0x1B;
         /**
          * 0 = Flash Did Not Fire
          * 1 = Flash Fired
          */
         public static final int TAG_FLASH_ACTIVITY = OFFSET + 0x1C;
         public static final int TAG_FLASH_DETAILS = OFFSET + 0x1D;
-        public static final int TAG_UNKNOWN_12 = OFFSET + 0x1E;
-        public static final int TAG_UNKNOWN_13 = OFFSET + 0x1F;
+        public static final int TAG_FOCUS_CONTINUOUS = OFFSET + 0x1E;
+        public static final int TAG_AE_SETTING = OFFSET + 0x1F;
         /**
          * 0 = Focus Mode: Single
          * 1 = Focus Mode: Continuous
          */
         public static final int TAG_FOCUS_MODE_2 = OFFSET + 0x20;
+
+        public static final int TAG_DISPLAY_APERTURE = OFFSET + 0x21;
+        public static final int TAG_ZOOM_SOURCE_WIDTH = OFFSET + 0x22;
+        public static final int TAG_ZOOM_TARGET_WIDTH = OFFSET + 0x23;
+
+        public static final int TAG_SPOT_METERING_MODE = OFFSET + 0x25;
+        public static final int TAG_PHOTO_EFFECT = OFFSET + 0x26;
+        public static final int TAG_MANUAL_FLASH_OUTPUT = OFFSET + 0x27;
+
+        public static final int TAG_COLOR_TONE = OFFSET + 0x29;
+        public static final int TAG_SRAW_QUALITY = OFFSET + 0x2D;
     }
 
     public final static class FocalLength
@@ -514,16 +526,24 @@ public class CanonMakernoteDirectory extends Directory
         _tagNameMap.put(CameraSettings.TAG_QUALITY, "Quality");
         _tagNameMap.put(CameraSettings.TAG_UNKNOWN_2, "Unknown Camera Setting 2");
         _tagNameMap.put(CameraSettings.TAG_UNKNOWN_3, "Unknown Camera Setting 3");
-        _tagNameMap.put(CameraSettings.TAG_UNKNOWN_4, "Unknown Camera Setting 4");
+        _tagNameMap.put(CameraSettings.TAG_RECORD_MODE, "Record Mode");
         _tagNameMap.put(CameraSettings.TAG_DIGITAL_ZOOM, "Digital Zoom");
         _tagNameMap.put(CameraSettings.TAG_FOCUS_TYPE, "Focus Type");
         _tagNameMap.put(CameraSettings.TAG_UNKNOWN_7, "Unknown Camera Setting 7");
         _tagNameMap.put(CameraSettings.TAG_LENS_TYPE, "Lens Type");
-        _tagNameMap.put(CameraSettings.TAG_UNKNOWN_9, "Unknown Camera Setting 9");
-        _tagNameMap.put(CameraSettings.TAG_UNKNOWN_10, "Unknown Camera Setting 10");
+        _tagNameMap.put(CameraSettings.TAG_MAX_APERTURE, "Max Aperture");
+        _tagNameMap.put(CameraSettings.TAG_MIN_APERTURE, "Min Aperture");
         _tagNameMap.put(CameraSettings.TAG_FLASH_ACTIVITY, "Flash Activity");
-        _tagNameMap.put(CameraSettings.TAG_UNKNOWN_12, "Unknown Camera Setting 12");
-        _tagNameMap.put(CameraSettings.TAG_UNKNOWN_13, "Unknown Camera Setting 13");
+        _tagNameMap.put(CameraSettings.TAG_FOCUS_CONTINUOUS, "Focus Continuous");
+        _tagNameMap.put(CameraSettings.TAG_AE_SETTING, "AE Setting");
+        _tagNameMap.put(CameraSettings.TAG_DISPLAY_APERTURE, "Display Aperture");
+        _tagNameMap.put(CameraSettings.TAG_ZOOM_SOURCE_WIDTH, "Zoom Source Width");
+        _tagNameMap.put(CameraSettings.TAG_ZOOM_TARGET_WIDTH, "Zoom Target Width");
+        _tagNameMap.put(CameraSettings.TAG_SPOT_METERING_MODE, "Spot Metering Mode");
+        _tagNameMap.put(CameraSettings.TAG_PHOTO_EFFECT, "Photo Effect");
+        _tagNameMap.put(CameraSettings.TAG_MANUAL_FLASH_OUTPUT, "Manual Flash Output");
+        _tagNameMap.put(CameraSettings.TAG_COLOR_TONE, "Color Tone");
+        _tagNameMap.put(CameraSettings.TAG_SRAW_QUALITY, "SRAW Quality");
 
         _tagNameMap.put(FocalLength.TAG_WHITE_BALANCE, "White Balance");
         _tagNameMap.put(FocalLength.TAG_SEQUENCE_NUMBER, "Sequence Number");
@@ -575,7 +595,7 @@ public class CanonMakernoteDirectory extends Directory
         _tagNameMap.put(AFInfo.TAG_AF_AREA_HEIGHT, "AF Area Height");
         _tagNameMap.put(AFInfo.TAG_AF_AREA_X_POSITIONS, "AF Area X Positions");
         _tagNameMap.put(AFInfo.TAG_AF_AREA_Y_POSITIONS, "AF Area Y Positions");
-        _tagNameMap.put(AFInfo.TAG_AF_POINTS_IN_FOCUS, "AF Points in Focus Count");
+        _tagNameMap.put(AFInfo.TAG_AF_POINTS_IN_FOCUS, "AF Points in Focus");
         _tagNameMap.put(AFInfo.TAG_PRIMARY_AF_POINT_1, "Primary AF Point 1");
         _tagNameMap.put(AFInfo.TAG_PRIMARY_AF_POINT_2, "Primary AF Point 2");
 
@@ -671,6 +691,12 @@ public class CanonMakernoteDirectory extends Directory
     {
         // TODO is there some way to drop out 'null' or 'zero' values that are present in the array to reduce the noise?
 
+        if (!(array instanceof int[])) {
+            // no special handling...
+            super.setObjectArray(tagType, array);
+            return;
+        }
+
         // Certain Canon tags contain arrays of values that we split into 'fake' tags as each
         // index in the array has its own meaning and decoding.
         // Pick those tags out here and throw away the original array.
@@ -708,9 +734,59 @@ public class CanonMakernoteDirectory extends Directory
 //                    setInt(subTagTypeBase + i + 1, ints[i] & 0x0F);
 //                break;
             case TAG_AF_INFO_ARRAY: {
-                int[] ints = (int[])array;
-                for (int i = 0; i < ints.length; i++)
-                    setInt(AFInfo.OFFSET + i, ints[i]);
+                // Notes from Exiftool 10.10 by Phil Harvey, lib\Image\Exiftool\Canon.pm:
+                // Auto-focus information used by many older Canon models. The values in this
+                // record are sequential, and some have variable sizes based on the value of
+                // numafpoints (which may be 1,5,7,9,15,45, or 53). The AFArea coordinates are
+                // given in a system where the image has dimensions given by AFImageWidth and
+                // AFImageHeight, and 0,0 is the image center. The direction of the Y axis
+                // depends on the camera model, with positive Y upwards for EOS models, but
+                // apparently downwards for PowerShot models.
+
+                // AFInfo is another array with 'fake' tags. The first int of the array contains
+                // the number of AF points. Iterate through the array one byte at a time, generally
+                // assuming one byte corresponds to one tag UNLESS certain tag numbers are encountered.
+                // For these, read specific subsequent bytes from the array based on the tag type. The
+                // number of bytes read can vary.
+
+                int[] values = (int[])array;
+                int numafpoints = values[0];
+                int tagnumber = 0;
+                for (int i = 0; i < values.length; i++)
+                {
+                    // These two tags store 'numafpoints' bytes of data in the array
+                    if (AFInfo.OFFSET + tagnumber == AFInfo.TAG_AF_AREA_X_POSITIONS ||
+                        AFInfo.OFFSET + tagnumber == AFInfo.TAG_AF_AREA_Y_POSITIONS)
+                    {
+                        // There could be incorrect data in the array, so boundary check
+                        if (values.length - 1 >= (i + numafpoints))
+                        {
+                            short[] areaPositions = new short[numafpoints];
+                            for (int j = 0; j < areaPositions.length; j++)
+                                areaPositions[j] = (short)values[i + j];
+
+                            super.setObjectArray(AFInfo.OFFSET + tagnumber, areaPositions);
+                        }
+                        i += numafpoints - 1;   // assume these bytes are processed and skip
+                    }
+                    else if (AFInfo.OFFSET + tagnumber == AFInfo.TAG_AF_POINTS_IN_FOCUS)
+                    {
+                        short[] pointsInFocus = new short[((numafpoints + 15) / 16)];
+
+                        // There could be incorrect data in the array, so boundary check
+                        if (values.length - 1 >= (i + pointsInFocus.length))
+                        {
+                            for (int j = 0; j < pointsInFocus.length; j++)
+                                pointsInFocus[j] = (short)values[i + j];
+
+                            super.setObjectArray(AFInfo.OFFSET + tagnumber, pointsInFocus);
+                        }
+                        i += pointsInFocus.length - 1;  // assume these bytes are processed and skip
+                    }
+                    else
+                        super.setObjectArray(AFInfo.OFFSET + tagnumber, values[i]);
+                    tagnumber++;
+                }
                 break;
             }
             default: {
diff --git a/src/com/drew/metadata/exif/makernotes/CasioType1MakernoteDescriptor.java b/src/com/drew/metadata/exif/makernotes/CasioType1MakernoteDescriptor.java
index 5b48f9d..5207cef 100644
--- a/src/com/drew/metadata/exif/makernotes/CasioType1MakernoteDescriptor.java
+++ b/src/com/drew/metadata/exif/makernotes/CasioType1MakernoteDescriptor.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2002-2016 Drew Noakes
+ * Copyright 2002-2017 Drew Noakes
  *
  *    Licensed under the Apache License, Version 2.0 (the "License");
  *    you may not use this file except in compliance with the License.
@@ -31,6 +31,7 @@ import static com.drew.metadata.exif.makernotes.CasioType1MakernoteDirectory.*;
  *
  * @author Drew Noakes https://drewnoakes.com
  */
+ at SuppressWarnings("WeakerAccess")
 public class CasioType1MakernoteDescriptor extends TagDescriptor<CasioType1MakernoteDirectory>
 {
     public CasioType1MakernoteDescriptor(@NotNull CasioType1MakernoteDirectory directory)
diff --git a/src/com/drew/metadata/exif/makernotes/CasioType1MakernoteDirectory.java b/src/com/drew/metadata/exif/makernotes/CasioType1MakernoteDirectory.java
index f52bc2d..04fcaad 100644
--- a/src/com/drew/metadata/exif/makernotes/CasioType1MakernoteDirectory.java
+++ b/src/com/drew/metadata/exif/makernotes/CasioType1MakernoteDirectory.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2002-2016 Drew Noakes
+ * Copyright 2002-2017 Drew Noakes
  *
  *    Licensed under the Apache License, Version 2.0 (the "License");
  *    you may not use this file except in compliance with the License.
@@ -33,6 +33,7 @@ import java.util.HashMap;
  *
  * @author Drew Noakes https://drewnoakes.com
  */
+ at SuppressWarnings("WeakerAccess")
 public class CasioType1MakernoteDirectory extends Directory
 {
     public static final int TAG_RECORDING_MODE = 0x0001;
diff --git a/src/com/drew/metadata/exif/makernotes/CasioType2MakernoteDescriptor.java b/src/com/drew/metadata/exif/makernotes/CasioType2MakernoteDescriptor.java
index b43e58d..3cf2d1b 100644
--- a/src/com/drew/metadata/exif/makernotes/CasioType2MakernoteDescriptor.java
+++ b/src/com/drew/metadata/exif/makernotes/CasioType2MakernoteDescriptor.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2002-2016 Drew Noakes
+ * Copyright 2002-2017 Drew Noakes
  *
  *    Licensed under the Apache License, Version 2.0 (the "License");
  *    you may not use this file except in compliance with the License.
@@ -31,6 +31,7 @@ import static com.drew.metadata.exif.makernotes.CasioType2MakernoteDirectory.*;
  *
  * @author Drew Noakes https://drewnoakes.com
  */
+ at SuppressWarnings("WeakerAccess")
 public class CasioType2MakernoteDescriptor extends TagDescriptor<CasioType2MakernoteDirectory>
 {
     public CasioType2MakernoteDescriptor(@NotNull CasioType2MakernoteDirectory directory)
@@ -67,8 +68,6 @@ public class CasioType2MakernoteDescriptor extends TagDescriptor<CasioType2Maker
                 return getContrastDescription();
             case TAG_SHARPNESS:
                 return getSharpnessDescription();
-            case TAG_PRINT_IMAGE_MATCHING_INFO:
-                return getPrintImageMatchingInfoDescription();
             case TAG_PREVIEW_THUMBNAIL:
                 return getCasioPreviewThumbnailDescription();
             case TAG_WHITE_BALANCE_BIAS:
@@ -211,13 +210,6 @@ public class CasioType2MakernoteDescriptor extends TagDescriptor<CasioType2Maker
     }
 
     @Nullable
-    public String getPrintImageMatchingInfoDescription()
-    {
-        // TODO research PIM specification http://www.ozhiker.com/electronics/pjmt/jpeg_info/pim.html
-        return _directory.getString(TAG_PRINT_IMAGE_MATCHING_INFO);
-    }
-
-    @Nullable
     public String getSharpnessDescription()
     {
         return getIndexedDescription(TAG_SHARPNESS, "-1", "Normal", "+1");
diff --git a/src/com/drew/metadata/exif/makernotes/CasioType2MakernoteDirectory.java b/src/com/drew/metadata/exif/makernotes/CasioType2MakernoteDirectory.java
index 2868e13..55b273e 100644
--- a/src/com/drew/metadata/exif/makernotes/CasioType2MakernoteDirectory.java
+++ b/src/com/drew/metadata/exif/makernotes/CasioType2MakernoteDirectory.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2002-2016 Drew Noakes
+ * Copyright 2002-2017 Drew Noakes
  *
  *    Licensed under the Apache License, Version 2.0 (the "License");
  *    you may not use this file except in compliance with the License.
@@ -33,6 +33,7 @@ import java.util.HashMap;
  *
  * @author Drew Noakes https://drewnoakes.com
  */
+ at SuppressWarnings("WeakerAccess")
 public class CasioType2MakernoteDirectory extends Directory
 {
     /**
diff --git a/src/com/drew/metadata/exif/makernotes/FujifilmMakernoteDescriptor.java b/src/com/drew/metadata/exif/makernotes/FujifilmMakernoteDescriptor.java
index cb6f92e..e033998 100644
--- a/src/com/drew/metadata/exif/makernotes/FujifilmMakernoteDescriptor.java
+++ b/src/com/drew/metadata/exif/makernotes/FujifilmMakernoteDescriptor.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2002-2016 Drew Noakes
+ * Copyright 2002-2017 Drew Noakes
  *
  *    Licensed under the Apache License, Version 2.0 (the "License");
  *    you may not use this file except in compliance with the License.
@@ -48,6 +48,7 @@ import static com.drew.metadata.exif.makernotes.FujifilmMakernoteDirectory.*;
  *
  * @author Drew Noakes https://drewnoakes.com
  */
+ at SuppressWarnings("WeakerAccess")
 public class FujifilmMakernoteDescriptor extends TagDescriptor<FujifilmMakernoteDirectory>
 {
     public FujifilmMakernoteDescriptor(@NotNull FujifilmMakernoteDirectory directory)
diff --git a/src/com/drew/metadata/exif/makernotes/FujifilmMakernoteDirectory.java b/src/com/drew/metadata/exif/makernotes/FujifilmMakernoteDirectory.java
index bb9d0e9..047bbdb 100644
--- a/src/com/drew/metadata/exif/makernotes/FujifilmMakernoteDirectory.java
+++ b/src/com/drew/metadata/exif/makernotes/FujifilmMakernoteDirectory.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2002-2016 Drew Noakes
+ * Copyright 2002-2017 Drew Noakes
  *
  *    Licensed under the Apache License, Version 2.0 (the "License");
  *    you may not use this file except in compliance with the License.
@@ -30,6 +30,7 @@ import java.util.HashMap;
  *
  * @author Drew Noakes https://drewnoakes.com
  */
+ at SuppressWarnings("WeakerAccess")
 public class FujifilmMakernoteDirectory extends Directory
 {
     public static final int TAG_MAKERNOTE_VERSION = 0x0000;
diff --git a/src/com/drew/metadata/exif/makernotes/KodakMakernoteDescriptor.java b/src/com/drew/metadata/exif/makernotes/KodakMakernoteDescriptor.java
index c670c4f..eedebe1 100644
--- a/src/com/drew/metadata/exif/makernotes/KodakMakernoteDescriptor.java
+++ b/src/com/drew/metadata/exif/makernotes/KodakMakernoteDescriptor.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2002-2016 Drew Noakes
+ * Copyright 2002-2017 Drew Noakes
  *
  *    Licensed under the Apache License, Version 2.0 (the "License");
  *    you may not use this file except in compliance with the License.
@@ -31,6 +31,7 @@ import static com.drew.metadata.exif.makernotes.KodakMakernoteDirectory.*;
  *
  * @author Drew Noakes https://drewnoakes.com
  */
+ at SuppressWarnings("WeakerAccess")
 public class KodakMakernoteDescriptor extends TagDescriptor<KodakMakernoteDirectory>
 {
     public KodakMakernoteDescriptor(@NotNull KodakMakernoteDirectory directory)
diff --git a/src/com/drew/metadata/exif/makernotes/KodakMakernoteDirectory.java b/src/com/drew/metadata/exif/makernotes/KodakMakernoteDirectory.java
index 975d639..dbf9308 100644
--- a/src/com/drew/metadata/exif/makernotes/KodakMakernoteDirectory.java
+++ b/src/com/drew/metadata/exif/makernotes/KodakMakernoteDirectory.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2002-2016 Drew Noakes
+ * Copyright 2002-2017 Drew Noakes
  *
  *    Licensed under the Apache License, Version 2.0 (the "License");
  *    you may not use this file except in compliance with the License.
@@ -30,6 +30,7 @@ import java.util.HashMap;
  *
  * @author Drew Noakes https://drewnoakes.com
  */
+ at SuppressWarnings("WeakerAccess")
 public class KodakMakernoteDirectory extends Directory
 {
     public final static int TAG_KODAK_MODEL = 0;
diff --git a/src/com/drew/metadata/exif/makernotes/KyoceraMakernoteDescriptor.java b/src/com/drew/metadata/exif/makernotes/KyoceraMakernoteDescriptor.java
index 4b58723..65b0b80 100644
--- a/src/com/drew/metadata/exif/makernotes/KyoceraMakernoteDescriptor.java
+++ b/src/com/drew/metadata/exif/makernotes/KyoceraMakernoteDescriptor.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2002-2016 Drew Noakes
+ * Copyright 2002-2017 Drew Noakes
  *
  *    Licensed under the Apache License, Version 2.0 (the "License");
  *    you may not use this file except in compliance with the License.
@@ -38,6 +38,7 @@ import static com.drew.metadata.exif.makernotes.KyoceraMakernoteDirectory.*;
  *
  * @author Drew Noakes https://drewnoakes.com
  */
+ at SuppressWarnings("WeakerAccess")
 public class KyoceraMakernoteDescriptor extends TagDescriptor<KyoceraMakernoteDirectory>
 {
     public KyoceraMakernoteDescriptor(@NotNull KyoceraMakernoteDirectory directory)
@@ -50,8 +51,6 @@ public class KyoceraMakernoteDescriptor extends TagDescriptor<KyoceraMakernoteDi
     public String getDescription(int tagType)
     {
         switch (tagType) {
-            case TAG_PRINT_IMAGE_MATCHING_INFO:
-                return getPrintImageMatchingInfoDescription();
             case TAG_PROPRIETARY_THUMBNAIL:
                 return getProprietaryThumbnailDataDescription();
             default:
@@ -60,12 +59,6 @@ public class KyoceraMakernoteDescriptor extends TagDescriptor<KyoceraMakernoteDi
     }
 
     @Nullable
-    public String getPrintImageMatchingInfoDescription()
-    {
-        return getByteLengthDescription(TAG_PRINT_IMAGE_MATCHING_INFO);
-    }
-
-    @Nullable
     public String getProprietaryThumbnailDataDescription()
     {
         return getByteLengthDescription(TAG_PROPRIETARY_THUMBNAIL);
diff --git a/src/com/drew/metadata/exif/makernotes/KyoceraMakernoteDirectory.java b/src/com/drew/metadata/exif/makernotes/KyoceraMakernoteDirectory.java
index 716a625..f67c0a7 100644
--- a/src/com/drew/metadata/exif/makernotes/KyoceraMakernoteDirectory.java
+++ b/src/com/drew/metadata/exif/makernotes/KyoceraMakernoteDirectory.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2002-2016 Drew Noakes
+ * Copyright 2002-2017 Drew Noakes
  *
  *    Licensed under the Apache License, Version 2.0 (the "License");
  *    you may not use this file except in compliance with the License.
@@ -30,6 +30,7 @@ import java.util.HashMap;
  *
  * @author Drew Noakes https://drewnoakes.com
  */
+ at SuppressWarnings("WeakerAccess")
 public class KyoceraMakernoteDirectory extends Directory
 {
     public static final int TAG_PROPRIETARY_THUMBNAIL = 0x0001;
diff --git a/src/com/drew/metadata/exif/makernotes/LeicaMakernoteDescriptor.java b/src/com/drew/metadata/exif/makernotes/LeicaMakernoteDescriptor.java
index 1969846..af70827 100644
--- a/src/com/drew/metadata/exif/makernotes/LeicaMakernoteDescriptor.java
+++ b/src/com/drew/metadata/exif/makernotes/LeicaMakernoteDescriptor.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2002-2016 Drew Noakes
+ * Copyright 2002-2017 Drew Noakes
  *
  *    Licensed under the Apache License, Version 2.0 (the "License");
  *    you may not use this file except in compliance with the License.
@@ -33,6 +33,7 @@ import static com.drew.metadata.exif.makernotes.LeicaMakernoteDirectory.*;
  *
  * @author Drew Noakes https://drewnoakes.com
  */
+ at SuppressWarnings("WeakerAccess")
 public class LeicaMakernoteDescriptor extends TagDescriptor<LeicaMakernoteDirectory>
 {
     public LeicaMakernoteDescriptor(@NotNull LeicaMakernoteDirectory directory)
diff --git a/src/com/drew/metadata/exif/makernotes/LeicaMakernoteDirectory.java b/src/com/drew/metadata/exif/makernotes/LeicaMakernoteDirectory.java
index d8533e8..3d23dc2 100644
--- a/src/com/drew/metadata/exif/makernotes/LeicaMakernoteDirectory.java
+++ b/src/com/drew/metadata/exif/makernotes/LeicaMakernoteDirectory.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2002-2016 Drew Noakes
+ * Copyright 2002-2017 Drew Noakes
  *
  *    Licensed under the Apache License, Version 2.0 (the "License");
  *    you may not use this file except in compliance with the License.
@@ -32,6 +32,7 @@ import java.util.HashMap;
  *
  * @author Drew Noakes https://drewnoakes.com
  */
+ at SuppressWarnings("WeakerAccess")
 public class LeicaMakernoteDirectory extends Directory
 {
     public static final int TAG_QUALITY = 0x0300;
diff --git a/src/com/drew/metadata/exif/makernotes/LeicaType5MakernoteDescriptor.java b/src/com/drew/metadata/exif/makernotes/LeicaType5MakernoteDescriptor.java
new file mode 100644
index 0000000..3096cb1
--- /dev/null
+++ b/src/com/drew/metadata/exif/makernotes/LeicaType5MakernoteDescriptor.java
@@ -0,0 +1,79 @@
+/*
+ * Copyright 2002-2017 Drew Noakes
+ *
+ *    Licensed under the Apache License, Version 2.0 (the "License");
+ *    you may not use this file except in compliance with the License.
+ *    You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing, software
+ *    distributed under the License is distributed on an "AS IS" BASIS,
+ *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *    See the License for the specific language governing permissions and
+ *    limitations under the License.
+ *
+ * More information about this project is available at:
+ *
+ *    https://drewnoakes.com/code/exif/
+ *    https://github.com/drewnoakes/metadata-extractor
+ */
+package com.drew.metadata.exif.makernotes;
+
+import com.drew.lang.annotations.NotNull;
+import com.drew.lang.annotations.Nullable;
+import com.drew.metadata.TagDescriptor;
+
+import static com.drew.metadata.exif.makernotes.LeicaType5MakernoteDirectory.*;
+
+/**
+ * Provides human-readable string representations of tag values stored in a {@link LeicaType5MakernoteDirectory}.
+ * <p>
+ * Tag reference from: http://www.sno.phy.queensu.ca/~phil/exiftool/TagNames/Panasonic.html
+ *
+ * @author Kevin Mott https://github.com/kwhopper
+ * @author Drew Noakes https://drewnoakes.com
+ */
+ at SuppressWarnings("WeakerAccess")
+public class LeicaType5MakernoteDescriptor extends TagDescriptor<LeicaType5MakernoteDirectory>
+{
+    public LeicaType5MakernoteDescriptor(@NotNull LeicaType5MakernoteDirectory directory)
+    {
+        super(directory);
+    }
+
+    @Override
+    @Nullable
+    public String getDescription(int tagType)
+    {
+        switch (tagType) {
+            case TagExposureMode:
+                return getExposureModeDescription();
+            default:
+                return super.getDescription(tagType);
+        }
+    }
+
+    @Nullable
+    public String getExposureModeDescription()
+    {
+        byte[] values = _directory.getByteArray(TagExposureMode);
+        if (values == null || values.length < 4)
+            return null;
+
+        String join = String.format("%d %d %d %d", values[0], values[1], values[2], values[3]);
+
+        if(join.equals("0 0 0 0"))
+            return "Program AE";
+        else if(join.equals("1 0 0 0"))
+            return "Aperture-priority AE";
+        else if(join.equals("1 1 0 0"))
+            return "Aperture-priority AE (1)";
+        else if(join.equals("2 0 0 0"))
+            return "Shutter speed priority AE";  // guess
+        else if(join.equals("3 0 0 0"))
+            return "Manual";
+        else
+            return String.format("Unknown (%s)", join);
+    }
+}
diff --git a/src/com/drew/metadata/exif/makernotes/SonyType6MakernoteDirectory.java b/src/com/drew/metadata/exif/makernotes/LeicaType5MakernoteDirectory.java
similarity index 50%
copy from src/com/drew/metadata/exif/makernotes/SonyType6MakernoteDirectory.java
copy to src/com/drew/metadata/exif/makernotes/LeicaType5MakernoteDirectory.java
index d354715..ad8492e 100644
--- a/src/com/drew/metadata/exif/makernotes/SonyType6MakernoteDirectory.java
+++ b/src/com/drew/metadata/exif/makernotes/LeicaType5MakernoteDirectory.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2002-2016 Drew Noakes
+ * Copyright 2002-2017 Drew Noakes
  *
  *    Licensed under the Apache License, Version 2.0 (the "License");
  *    you may not use this file except in compliance with the License.
@@ -18,7 +18,6 @@
  *    https://drewnoakes.com/code/exif/
  *    https://github.com/drewnoakes/metadata-extractor
  */
-
 package com.drew.metadata.exif.makernotes;
 
 import com.drew.lang.annotations.NotNull;
@@ -27,38 +26,48 @@ import com.drew.metadata.Directory;
 import java.util.HashMap;
 
 /**
- * Describes tags specific to Sony cameras that use the Sony Type 6 makernote tags.
+ * Describes tags specific to certain Leica cameras.
+ * <p>
+ * Tag reference from: http://www.sno.phy.queensu.ca/~phil/exiftool/TagNames/Panasonic.html
  *
+ * @author Kevin Mott https://github.com/kwhopper
  * @author Drew Noakes https://drewnoakes.com
  */
-public class SonyType6MakernoteDirectory extends Directory
+ at SuppressWarnings("WeakerAccess")
+public class LeicaType5MakernoteDirectory extends Directory
 {
-    public static final int TAG_MAKERNOTE_THUMB_OFFSET = 0x0513;
-    public static final int TAG_MAKERNOTE_THUMB_LENGTH = 0x0514;
-//    public static final int TAG_UNKNOWN_1 = 0x0515;
-    public static final int TAG_MAKERNOTE_THUMB_VERSION = 0x2000;
+    public static final int TagLensModel = 0x0303;
+    public static final int TagOriginalFileName = 0x0407;
+    public static final int TagOriginalDirectory = 0x0408;
+    public static final int TagExposureMode = 0x040d;
+    public static final int TagShotInfo = 0x0410;
+    public static final int TagFilmMode = 0x0412;
+    public static final int TagWbRgbLevels = 0x0413;
 
     @NotNull
     protected static final HashMap<Integer, String> _tagNameMap = new HashMap<Integer, String>();
 
     static
     {
-        _tagNameMap.put(TAG_MAKERNOTE_THUMB_OFFSET, "Makernote Thumb Offset");
-        _tagNameMap.put(TAG_MAKERNOTE_THUMB_LENGTH, "Makernote Thumb Length");
-//        _tagNameMap.put(TAG_UNKNOWN_1, "Sony-6-0x0203");
-        _tagNameMap.put(TAG_MAKERNOTE_THUMB_VERSION, "Makernote Thumb Version");
+        _tagNameMap.put(TagLensModel, "Lens Model");
+        _tagNameMap.put(TagOriginalFileName, "Original File Name");
+        _tagNameMap.put(TagOriginalDirectory, "Original Directory");
+        _tagNameMap.put(TagExposureMode, "Exposure Mode");
+        _tagNameMap.put(TagShotInfo, "Shot Info" );
+        _tagNameMap.put(TagFilmMode, "Film Mode");
+        _tagNameMap.put(TagWbRgbLevels, "WB RGB Levels");
     }
 
-    public SonyType6MakernoteDirectory()
+    public LeicaType5MakernoteDirectory()
     {
-        this.setDescriptor(new SonyType6MakernoteDescriptor(this));
+        this.setDescriptor(new LeicaType5MakernoteDescriptor(this));
     }
 
     @Override
     @NotNull
     public String getName()
     {
-        return "Sony Makernote";
+        return "Leica Makernote";
     }
 
     @Override
diff --git a/src/com/drew/metadata/exif/makernotes/NikonType1MakernoteDescriptor.java b/src/com/drew/metadata/exif/makernotes/NikonType1MakernoteDescriptor.java
index 55cc62c..0825052 100644
--- a/src/com/drew/metadata/exif/makernotes/NikonType1MakernoteDescriptor.java
+++ b/src/com/drew/metadata/exif/makernotes/NikonType1MakernoteDescriptor.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2002-2016 Drew Noakes
+ * Copyright 2002-2017 Drew Noakes
  *
  *    Licensed under the Apache License, Version 2.0 (the "License");
  *    you may not use this file except in compliance with the License.
@@ -43,6 +43,7 @@ import static com.drew.metadata.exif.makernotes.NikonType1MakernoteDirectory.*;
  *
  * @author Drew Noakes https://drewnoakes.com
  */
+ at SuppressWarnings("WeakerAccess")
 public class NikonType1MakernoteDescriptor extends TagDescriptor<NikonType1MakernoteDirectory>
 {
     public NikonType1MakernoteDescriptor(@NotNull NikonType1MakernoteDirectory directory)
diff --git a/src/com/drew/metadata/exif/makernotes/NikonType1MakernoteDirectory.java b/src/com/drew/metadata/exif/makernotes/NikonType1MakernoteDirectory.java
index 91b8ca7..53bf7e6 100644
--- a/src/com/drew/metadata/exif/makernotes/NikonType1MakernoteDirectory.java
+++ b/src/com/drew/metadata/exif/makernotes/NikonType1MakernoteDirectory.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2002-2016 Drew Noakes
+ * Copyright 2002-2017 Drew Noakes
  *
  *    Licensed under the Apache License, Version 2.0 (the "License");
  *    you may not use this file except in compliance with the License.
@@ -39,6 +39,7 @@ import java.util.HashMap;
  *
  * @author Drew Noakes https://drewnoakes.com
  */
+ at SuppressWarnings("WeakerAccess")
 public class NikonType1MakernoteDirectory extends Directory
 {
     public static final int TAG_UNKNOWN_1 = 0x0002;
diff --git a/src/com/drew/metadata/exif/makernotes/NikonType2MakernoteDescriptor.java b/src/com/drew/metadata/exif/makernotes/NikonType2MakernoteDescriptor.java
index 86e3268..7f1bf46 100644
--- a/src/com/drew/metadata/exif/makernotes/NikonType2MakernoteDescriptor.java
+++ b/src/com/drew/metadata/exif/makernotes/NikonType2MakernoteDescriptor.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2002-2016 Drew Noakes
+ * Copyright 2002-2017 Drew Noakes
  *
  *    Licensed under the Apache License, Version 2.0 (the "License");
  *    you may not use this file except in compliance with the License.
@@ -36,6 +36,7 @@ import static com.drew.metadata.exif.makernotes.NikonType2MakernoteDirectory.*;
  *
  * @author Drew Noakes https://drewnoakes.com
  */
+ at SuppressWarnings("WeakerAccess")
 public class NikonType2MakernoteDescriptor extends TagDescriptor<NikonType2MakernoteDirectory>
 {
     public NikonType2MakernoteDescriptor(@NotNull NikonType2MakernoteDirectory directory)
diff --git a/src/com/drew/metadata/exif/makernotes/NikonType2MakernoteDirectory.java b/src/com/drew/metadata/exif/makernotes/NikonType2MakernoteDirectory.java
index 299dce3..3ffb795 100644
--- a/src/com/drew/metadata/exif/makernotes/NikonType2MakernoteDirectory.java
+++ b/src/com/drew/metadata/exif/makernotes/NikonType2MakernoteDirectory.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2002-2016 Drew Noakes
+ * Copyright 2002-2017 Drew Noakes
  *
  *    Licensed under the Apache License, Version 2.0 (the "License");
  *    you may not use this file except in compliance with the License.
@@ -44,6 +44,7 @@ import java.util.HashMap;
  *
  * @author Drew Noakes https://drewnoakes.com
  */
+ at SuppressWarnings("WeakerAccess")
 public class NikonType2MakernoteDirectory extends Directory
 {
     /**
@@ -759,7 +760,7 @@ public class NikonType2MakernoteDirectory extends Directory
     public static final int TAG_UNKNOWN_49 = 0x00BB;
     public static final int TAG_UNKNOWN_50 = 0x00BD;
     public static final int TAG_UNKNOWN_51 = 0x0103;
-    public static final int TAG_PRINT_IM = 0x0E00;
+    public static final int TAG_PRINT_IMAGE_MATCHING_INFO = 0x0E00;
 
     /**
      * Data about changes set by Nikon Capture Editor.
@@ -892,7 +893,7 @@ public class NikonType2MakernoteDirectory extends Directory
         _tagNameMap.put(TAG_UNKNOWN_49, "Unknown 49");
         _tagNameMap.put(TAG_UNKNOWN_50, "Unknown 50");
         _tagNameMap.put(TAG_UNKNOWN_51, "Unknown 51");
-        _tagNameMap.put(TAG_PRINT_IM, "Print IM");
+        _tagNameMap.put(TAG_PRINT_IMAGE_MATCHING_INFO, "Print IM");
         _tagNameMap.put(TAG_UNKNOWN_52, "Unknown 52");
         _tagNameMap.put(TAG_UNKNOWN_53, "Unknown 53");
         _tagNameMap.put(TAG_NIKON_CAPTURE_VERSION, "Nikon Capture Version");
diff --git a/src/com/drew/metadata/exif/makernotes/OlympusCameraSettingsMakernoteDescriptor.java b/src/com/drew/metadata/exif/makernotes/OlympusCameraSettingsMakernoteDescriptor.java
index 703fbd1..c674c6a 100644
--- a/src/com/drew/metadata/exif/makernotes/OlympusCameraSettingsMakernoteDescriptor.java
+++ b/src/com/drew/metadata/exif/makernotes/OlympusCameraSettingsMakernoteDescriptor.java
@@ -40,6 +40,7 @@ import static com.drew.metadata.exif.makernotes.OlympusCameraSettingsMakernoteDi
  * @author Kevin Mott https://github.com/kwhopper
  * @author Drew Noakes https://drewnoakes.com
  */
+ at SuppressWarnings("WeakerAccess")
 public class OlympusCameraSettingsMakernoteDescriptor extends TagDescriptor<OlympusCameraSettingsMakernoteDirectory>
 {
     public OlympusCameraSettingsMakernoteDescriptor(@NotNull OlympusCameraSettingsMakernoteDirectory directory)
@@ -142,6 +143,8 @@ public class OlympusCameraSettingsMakernoteDescriptor extends TagDescriptor<Olym
                 return getToneLevelDescription();
             case TagArtFilterEffect:
                 return getArtFilterEffectDescription();
+            case TagColorCreatorEffect:
+                return getColorCreatorEffectDescription();
 
             case TagDriveMode:
                 return getDriveModeDescription();
@@ -406,8 +409,10 @@ public class OlympusCameraSettingsMakernoteDescriptor extends TagDescriptor<Olym
         int p3 = (int)(values[index + 2].doubleValue() * 100);
         int p4 = (int)(values[index + 3].doubleValue() * 100);
 
-        return String.format("(%d%%,%d%%) (%d%%,%d%%)", p1, p2, p3, p4);
+        if(p1 + p2 + p3 + p4 == 0)
+            return "n/a";
 
+        return String.format("(%d%%,%d%%) (%d%%,%d%%)", p1, p2, p3, p4);
     }
 
     @Nullable
@@ -1018,12 +1023,10 @@ public class OlympusCameraSettingsMakernoteDescriptor extends TagDescriptor<Olym
 
         StringBuilder sb = new StringBuilder();
         for (int i = 0; i < values.length; i++) {
-            if (i == 1)
-                sb.append("Highlights ");
-            else if (i == 5)
-                sb.append("Shadows ");
-
-            sb.append(values[i]).append("; ");
+            if (i == 0 || i == 4 || i == 8 || i == 12 || i == 16 || i == 20 || i == 24)
+                sb.append(_toneLevelType.get(values[i])).append("; ");
+            else
+                sb.append(values[i]).append("; ");
         }
 
         return sb.substring(0, sb.length() - 2);
@@ -1033,13 +1036,15 @@ public class OlympusCameraSettingsMakernoteDescriptor extends TagDescriptor<Olym
     public String getArtFilterEffectDescription()
     {
         int[] values = _directory.getIntArray(TagArtFilterEffect);
-        if (values == null || values.length == 0)
+        if (values == null)
             return null;
 
         StringBuilder sb = new StringBuilder();
         for (int i = 0; i < values.length; i++) {
             if (i == 0) {
-                sb.append((_filters.containsKey(values[i]) ? _filters.get(values[i]) : "[unknown]"));
+                sb.append((_filters.containsKey(values[i]) ? _filters.get(values[i]) : "[unknown]")).append("; ");
+            } else if (i == 3) {
+                sb.append("Partial Color ").append(values[i]).append("; ");
             } else if (i == 4) {
                 switch (values[i]) {
                     case 0x0000:
@@ -1067,10 +1072,53 @@ public class OlympusCameraSettingsMakernoteDescriptor extends TagDescriptor<Olym
                         sb.append("Unknown (").append(values[i]).append(")");
                         break;
                 }
+                sb.append("; ");
+            } else if (i == 6) {
+                switch (values[i]) {
+                    case 0:
+                        sb.append("No Color Filter");
+                        break;
+                    case 1:
+                        sb.append("Yellow Color Filter");
+                        break;
+                    case 2:
+                        sb.append("Orange Color Filter");
+                        break;
+                    case 3:
+                        sb.append("Red Color Filter");
+                        break;
+                    case 4:
+                        sb.append("Green Color Filter");
+                        break;
+                    default:
+                        sb.append("Unknown (").append(values[i]).append(")");
+                        break;
+                }
+                sb.append("; ");
             } else {
-                sb.append(values[i]);
+                sb.append(values[i]).append("; ");
+            }
+        }
+
+        return sb.substring(0, sb.length() - 2);
+    }
+
+    @Nullable
+    public String getColorCreatorEffectDescription()
+    {
+        int[] values = _directory.getIntArray(TagColorCreatorEffect);
+        if (values == null)
+            return null;
+
+        StringBuilder sb = new StringBuilder();
+        for (int i = 0; i < values.length; i++) {
+            if (i == 0) {
+                sb.append("Color ").append(values[i]).append("; ");
+            } else if (i == 3) {
+                sb.append("Strength ").append(values[i]).append("; ");
+            } else {
+                sb.append(values[i]).append("; ");
             }
-            sb.append("; ");
         }
 
         return sb.substring(0, sb.length() - 2);
@@ -1293,6 +1341,7 @@ public class OlympusCameraSettingsMakernoteDescriptor extends TagDescriptor<Olym
         return String.format("%d (min %d, max %d)", values[0], values[1], values[2]);
     }
 
+    @Nullable
     private String getFiltersDescription(int tagId)
     {
         int[] values = _directory.getIntArray(tagId);
@@ -1311,6 +1360,7 @@ public class OlympusCameraSettingsMakernoteDescriptor extends TagDescriptor<Olym
         return sb.substring(0, sb.length() - 2);
     }
 
+    private static final HashMap<Integer, String> _toneLevelType = new HashMap<Integer, String>();
     // ArtFilter, ArtFilterEffect and MagicFilter values
     private static final HashMap<Integer, String> _filters = new HashMap<Integer, String>();
 
@@ -1353,5 +1403,10 @@ public class OlympusCameraSettingsMakernoteDescriptor extends TagDescriptor<Olym
         _filters.put(39, "Partial Color");
         _filters.put(40, "Partial Color II");
         _filters.put(41, "Partial Color III");
+
+        _toneLevelType.put(0, "0");
+        _toneLevelType.put(-31999, "Highlights ");
+        _toneLevelType.put(-31998, "Shadows ");
+        _toneLevelType.put(-31997, "Midtones ");
     }
 }
diff --git a/src/com/drew/metadata/exif/makernotes/OlympusCameraSettingsMakernoteDirectory.java b/src/com/drew/metadata/exif/makernotes/OlympusCameraSettingsMakernoteDirectory.java
index 26514bf..90247c5 100644
--- a/src/com/drew/metadata/exif/makernotes/OlympusCameraSettingsMakernoteDirectory.java
+++ b/src/com/drew/metadata/exif/makernotes/OlympusCameraSettingsMakernoteDirectory.java
@@ -32,6 +32,7 @@ import java.util.HashMap;
  * @author Kevin Mott https://github.com/kwhopper
  * @author Drew Noakes https://drewnoakes.com
  */
+ at SuppressWarnings("WeakerAccess")
 public class OlympusCameraSettingsMakernoteDirectory extends Directory
 {
     public static final int TagCameraSettingsVersion = 0x0000;
@@ -88,6 +89,7 @@ public class OlympusCameraSettingsMakernoteDirectory extends Directory
     public static final int TagPictureModeEffect = 0x52d;
     public static final int TagToneLevel = 0x52e;
     public static final int TagArtFilterEffect = 0x52f;
+    public static final int TagColorCreatorEffect = 0x532;
 
     public static final int TagDriveMode = 0x600;
     public static final int TagPanoramaMode = 0x601;
@@ -161,6 +163,7 @@ public class OlympusCameraSettingsMakernoteDirectory extends Directory
         _tagNameMap.put(TagPictureModeEffect, "Picture Mode Effect");
         _tagNameMap.put(TagToneLevel, "Tone Level");
         _tagNameMap.put(TagArtFilterEffect, "Art Filter Effect");
+        _tagNameMap.put(TagColorCreatorEffect, "Color Creator Effect");
 
         _tagNameMap.put(TagDriveMode, "Drive Mode");
         _tagNameMap.put(TagPanoramaMode, "Panorama Mode");
diff --git a/src/com/drew/metadata/exif/makernotes/OlympusEquipmentMakernoteDescriptor.java b/src/com/drew/metadata/exif/makernotes/OlympusEquipmentMakernoteDescriptor.java
index 4684b65..e37302d 100644
--- a/src/com/drew/metadata/exif/makernotes/OlympusEquipmentMakernoteDescriptor.java
+++ b/src/com/drew/metadata/exif/makernotes/OlympusEquipmentMakernoteDescriptor.java
@@ -39,6 +39,7 @@ import static com.drew.metadata.exif.makernotes.OlympusEquipmentMakernoteDirecto
  * @author Kevin Mott https://github.com/kwhopper
  * @author Drew Noakes https://drewnoakes.com
  */
+ at SuppressWarnings("WeakerAccess")
 public class OlympusEquipmentMakernoteDescriptor extends TagDescriptor<OlympusEquipmentMakernoteDirectory>
 {
     public OlympusEquipmentMakernoteDescriptor(@NotNull OlympusEquipmentMakernoteDirectory directory)
@@ -52,48 +53,63 @@ public class OlympusEquipmentMakernoteDescriptor extends TagDescriptor<OlympusEq
     {
         switch (tagType) {
             case TAG_EQUIPMENT_VERSION:
-                return GetEquipmentVersionDescription();
+                return getEquipmentVersionDescription();
+            case TAG_CAMERA_TYPE_2:
+                return getCameraType2Description();
             case TAG_FOCAL_PLANE_DIAGONAL:
-                return GetFocalPlaneDiagonalDescription();
+                return getFocalPlaneDiagonalDescription();
             case TAG_BODY_FIRMWARE_VERSION:
-                return GetBodyFirmwareVersionDescription();
+                return getBodyFirmwareVersionDescription();
             case TAG_LENS_TYPE:
-                return GetLensTypeDescription();
+                return getLensTypeDescription();
             case TAG_LENS_FIRMWARE_VERSION:
-                return GetLensFirmwareVersionDescription();
+                return getLensFirmwareVersionDescription();
             case TAG_MAX_APERTURE_AT_MIN_FOCAL:
-                return GetMaxApertureAtMinFocalDescription();
+                return getMaxApertureAtMinFocalDescription();
             case TAG_MAX_APERTURE_AT_MAX_FOCAL:
-                return GetMaxApertureAtMaxFocalDescription();
+                return getMaxApertureAtMaxFocalDescription();
             case TAG_MAX_APERTURE:
-                return GetMaxApertureDescription();
+                return getMaxApertureDescription();
             case TAG_LENS_PROPERTIES:
-                return GetLensPropertiesDescription();
+                return getLensPropertiesDescription();
             case TAG_EXTENDER:
-                return GetExtenderDescription();
+                return getExtenderDescription();
             case TAG_FLASH_TYPE:
-                return GetFlashTypeDescription();
+                return getFlashTypeDescription();
             case TAG_FLASH_MODEL:
-                return GetFlashModelDescription();
+                return getFlashModelDescription();
             default:
                 return super.getDescription(tagType);
         }
     }
 
     @Nullable
-    public String GetEquipmentVersionDescription()
+    public String getEquipmentVersionDescription()
     {
         return getVersionBytesDescription(TAG_EQUIPMENT_VERSION, 4);
     }
 
     @Nullable
-    public String GetFocalPlaneDiagonalDescription()
+    public String getCameraType2Description()
+    {
+        String cameratype = _directory.getString(TAG_CAMERA_TYPE_2);
+        if(cameratype == null)
+            return null;
+
+        if(OlympusMakernoteDirectory.OlympusCameraTypes.containsKey(cameratype))
+            return OlympusMakernoteDirectory.OlympusCameraTypes.get(cameratype);
+
+        return cameratype;
+    }
+
+    @Nullable
+    public String getFocalPlaneDiagonalDescription()
     {
         return _directory.getString(TAG_FOCAL_PLANE_DIAGONAL) + " mm";
     }
 
     @Nullable
-    public String GetBodyFirmwareVersionDescription()
+    public String getBodyFirmwareVersionDescription()
     {
         Integer value = _directory.getInteger(TAG_BODY_FIRMWARE_VERSION);
         if (value == null)
@@ -106,7 +122,7 @@ public class OlympusEquipmentMakernoteDescriptor extends TagDescriptor<OlympusEq
     }
 
     @Nullable
-    public String GetLensTypeDescription()
+    public String getLensTypeDescription()
     {
         String str = _directory.getString(TAG_LENS_TYPE);
 
@@ -139,7 +155,7 @@ public class OlympusEquipmentMakernoteDescriptor extends TagDescriptor<OlympusEq
     }
 
     @Nullable
-    public String GetLensFirmwareVersionDescription()
+    public String getLensFirmwareVersionDescription()
     {
         Integer value = _directory.getInteger(TAG_LENS_FIRMWARE_VERSION);
         if (value == null)
@@ -152,7 +168,7 @@ public class OlympusEquipmentMakernoteDescriptor extends TagDescriptor<OlympusEq
     }
 
     @Nullable
-    public String GetMaxApertureAtMinFocalDescription()
+    public String getMaxApertureAtMinFocalDescription()
     {
         Integer value = _directory.getInteger(TAG_MAX_APERTURE_AT_MIN_FOCAL);
         if (value == null)
@@ -163,7 +179,7 @@ public class OlympusEquipmentMakernoteDescriptor extends TagDescriptor<OlympusEq
     }
 
     @Nullable
-    public String GetMaxApertureAtMaxFocalDescription()
+    public String getMaxApertureAtMaxFocalDescription()
     {
         Integer value = _directory.getInteger(TAG_MAX_APERTURE_AT_MAX_FOCAL);
         if (value == null)
@@ -174,7 +190,7 @@ public class OlympusEquipmentMakernoteDescriptor extends TagDescriptor<OlympusEq
     }
 
     @Nullable
-    public String GetMaxApertureDescription()
+    public String getMaxApertureDescription()
     {
         Integer value = _directory.getInteger(TAG_MAX_APERTURE);
         if (value == null)
@@ -190,7 +206,7 @@ public class OlympusEquipmentMakernoteDescriptor extends TagDescriptor<OlympusEq
     }
 
     @Nullable
-    public String GetLensPropertiesDescription()
+    public String getLensPropertiesDescription()
     {
         Integer value = _directory.getInteger(TAG_LENS_PROPERTIES);
         if (value == null)
@@ -200,7 +216,7 @@ public class OlympusEquipmentMakernoteDescriptor extends TagDescriptor<OlympusEq
     }
 
     @Nullable
-    public String GetExtenderDescription()
+    public String getExtenderDescription()
     {
         String str = _directory.getString(TAG_EXTENDER);
 
@@ -233,14 +249,14 @@ public class OlympusEquipmentMakernoteDescriptor extends TagDescriptor<OlympusEq
     }
 
     @Nullable
-    public String GetFlashTypeDescription()
+    public String getFlashTypeDescription()
     {
         return getIndexedDescription(TAG_FLASH_TYPE,
             "None", null, "Simple E-System", "E-System");
     }
 
     @Nullable
-    public String GetFlashModelDescription()
+    public String getFlashModelDescription()
     {
         return getIndexedDescription(TAG_FLASH_MODEL,
             "None", "FL-20", "FL-50", "RF-11", "TF-22", "FL-36", "FL-50R", "FL-36R");
diff --git a/src/com/drew/metadata/exif/makernotes/OlympusEquipmentMakernoteDirectory.java b/src/com/drew/metadata/exif/makernotes/OlympusEquipmentMakernoteDirectory.java
index 3548c3f..eb3d50c 100644
--- a/src/com/drew/metadata/exif/makernotes/OlympusEquipmentMakernoteDirectory.java
+++ b/src/com/drew/metadata/exif/makernotes/OlympusEquipmentMakernoteDirectory.java
@@ -32,6 +32,7 @@ import java.util.HashMap;
  * @author Kevin Mott https://github.com/kwhopper
  * @author Drew Noakes https://drewnoakes.com
  */
+ at SuppressWarnings("WeakerAccess")
 public class OlympusEquipmentMakernoteDirectory extends Directory
 {
     public static final int TAG_EQUIPMENT_VERSION = 0x0000;
diff --git a/src/com/drew/metadata/exif/makernotes/OlympusFocusInfoMakernoteDescriptor.java b/src/com/drew/metadata/exif/makernotes/OlympusFocusInfoMakernoteDescriptor.java
new file mode 100644
index 0000000..b219b1d
--- /dev/null
+++ b/src/com/drew/metadata/exif/makernotes/OlympusFocusInfoMakernoteDescriptor.java
@@ -0,0 +1,217 @@
+/*
+ * Copyright 2002-2015 Drew Noakes
+ *
+ *    Licensed under the Apache License, Version 2.0 (the "License");
+ *    you may not use this file except in compliance with the License.
+ *    You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing, software
+ *    distributed under the License is distributed on an "AS IS" BASIS,
+ *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *    See the License for the specific language governing permissions and
+ *    limitations under the License.
+ *
+ * More information about this project is available at:
+ *
+ *    https://drewnoakes.com/code/exif/
+ *    https://github.com/drewnoakes/metadata-extractor
+ */
+package com.drew.metadata.exif.makernotes;
+
+import com.drew.lang.Rational;
+import com.drew.lang.annotations.NotNull;
+import com.drew.lang.annotations.Nullable;
+import com.drew.metadata.TagDescriptor;
+
+import static com.drew.metadata.exif.makernotes.OlympusFocusInfoMakernoteDirectory.*;
+
+/**
+ * Provides human-readable String representations of tag values stored in a {@link OlympusFocusInfoMakernoteDirectory}.
+ * <p>
+ * Some Description functions converted from Exiftool version 10.10 created by Phil Harvey
+ * http://www.sno.phy.queensu.ca/~phil/exiftool/
+ * lib\Image\ExifTool\Olympus.pm
+ *
+ * @author Kevin Mott https://github.com/kwhopper
+ * @author Drew Noakes https://drewnoakes.com
+ */
+ at SuppressWarnings("WeakerAccess")
+public class OlympusFocusInfoMakernoteDescriptor extends TagDescriptor<OlympusFocusInfoMakernoteDirectory>
+{
+    public OlympusFocusInfoMakernoteDescriptor(@NotNull OlympusFocusInfoMakernoteDirectory directory)
+    {
+        super(directory);
+    }
+
+    @Override
+    @Nullable
+    public String getDescription(int tagType)
+    {
+        switch (tagType) {
+            case TagFocusInfoVersion:
+                return getFocusInfoVersionDescription();
+            case TagAutoFocus:
+                return getAutoFocusDescription();
+            case TagFocusDistance:
+                return getFocusDistanceDescription();
+            case TagAfPoint:
+                return getAfPointDescription();
+            case TagExternalFlash:
+                return getExternalFlashDescription();
+            case TagExternalFlashBounce:
+                return getExternalFlashBounceDescription();
+            case TagExternalFlashZoom:
+                return getExternalFlashZoomDescription();
+            case TagManualFlash:
+                return getManualFlashDescription();
+            case TagMacroLed:
+                return getMacroLedDescription();
+            case TagSensorTemperature:
+                return getSensorTemperatureDescription();
+            case TagImageStabilization:
+                return getImageStabilizationDescription();
+            default:
+                return super.getDescription(tagType);
+        }
+    }
+
+    @Nullable
+    public String getFocusInfoVersionDescription()
+    {
+        return getVersionBytesDescription(TagFocusInfoVersion, 4);
+    }
+
+    @Nullable
+    public String getAutoFocusDescription()
+    {
+        return getIndexedDescription(TagAutoFocus,
+            "Off", "On");
+    }
+
+    @Nullable
+    public String getFocusDistanceDescription()
+    {
+        Rational value = _directory.getRational(TagFocusDistance);
+        if (value == null)
+            return "inf";
+        if (value.getNumerator() == 0xFFFFFFFFL || value.getNumerator() == 0x00000000L)
+            return "inf";
+
+        return value.getNumerator() / 1000.0 + " m";
+    }
+
+    @Nullable
+    public String getAfPointDescription()
+    {
+        Integer value = _directory.getInteger(TagAfPoint);
+        if (value == null)
+            return null;
+
+        return value.toString();
+    }
+
+    @Nullable
+    public String getExternalFlashDescription()
+    {
+        int[] values = _directory.getIntArray(TagExternalFlash);
+        if (values == null || values.length < 2)
+            return null;
+
+        String join = String.format("%d %d", (short)values[0], (short)values[1]);
+
+        if(join.equals("0 0"))
+            return "Off";
+        else if(join.equals("1 0"))
+            return "On";
+        else
+            return "Unknown (" + join + ")";
+    }
+
+    @Nullable
+    public String getExternalFlashBounceDescription()
+    {
+        return getIndexedDescription(TagExternalFlashBounce,
+                "Bounce or Off", "Direct");
+    }
+
+    @Nullable
+    public String getExternalFlashZoomDescription()
+    {
+        int[] values = _directory.getIntArray(TagExternalFlashZoom);
+        if (values == null)
+        {
+            // check if it's only one value long also
+            Integer value = _directory.getInteger(TagExternalFlashZoom);
+            if(value == null)
+                return null;
+
+            values = new int[1];
+            values[0] = value;
+        }
+
+        if (values.length == 0)
+            return null;
+
+        String join = String.format("%d", (short)values[0]);
+        if(values.length > 1)
+            join += " " + String.format("%d", (short)values[1]);
+
+        if(join.equals("0"))
+            return "Off";
+        else if(join.equals("1"))
+            return "On";
+        else if(join.equals("0 0"))
+            return "Off";
+        else if(join.equals("1 0"))
+            return "On";
+        else
+            return "Unknown (" + join + ")";
+
+    }
+
+    @Nullable
+    public String getManualFlashDescription()
+    {
+        int[] values = _directory.getIntArray(TagManualFlash);
+        if (values == null)
+            return null;
+
+        if ((short)values[0] == 0)
+            return "Off";
+
+        if ((short)values[1] == 1)
+            return "Full";
+        return "On (1/" + (short)values[1] + " strength)";
+    }
+
+    @Nullable
+    public String getMacroLedDescription()
+    {
+        return getIndexedDescription(TagMacroLed,
+                "Off", "On");
+    }
+
+    /// <remarks>
+    /// <para>TODO: Complete when Camera Model is available.</para>
+    /// <para>There are differences in how to interpret this tag that can only be reconciled by knowing the model.</para>
+    /// </remarks>
+    @Nullable
+    public String getSensorTemperatureDescription()
+    {
+        return _directory.getString(TagSensorTemperature);
+    }
+
+    @Nullable
+    public String getImageStabilizationDescription()
+    {
+        byte[] values = _directory.getByteArray(TagImageStabilization);
+        if (values == null)
+            return null;
+
+        if((values[0] | values[1] | values[2] | values[3]) == 0x0)
+            return "Off";
+        return "On, " + ((values[43] & 1) > 0 ? "Mode 1" : "Mode 2");
+    }
+}
diff --git a/src/com/drew/metadata/exif/makernotes/OlympusFocusInfoMakernoteDirectory.java b/src/com/drew/metadata/exif/makernotes/OlympusFocusInfoMakernoteDirectory.java
new file mode 100644
index 0000000..898ae3d
--- /dev/null
+++ b/src/com/drew/metadata/exif/makernotes/OlympusFocusInfoMakernoteDirectory.java
@@ -0,0 +1,110 @@
+/*
+ * Copyright 2002-2015 Drew Noakes
+ *
+ *    Licensed under the Apache License, Version 2.0 (the "License");
+ *    you may not use this file except in compliance with the License.
+ *    You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing, software
+ *    distributed under the License is distributed on an "AS IS" BASIS,
+ *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *    See the License for the specific language governing permissions and
+ *    limitations under the License.
+ *
+ * More information about this project is available at:
+ *
+ *    https://drewnoakes.com/code/exif/
+ *    https://github.com/drewnoakes/metadata-extractor
+ */
+package com.drew.metadata.exif.makernotes;
+
+import com.drew.lang.annotations.NotNull;
+import com.drew.metadata.Directory;
+
+import java.util.HashMap;
+
+/**
+ * The Olympus focus info makernote is used by many manufacturers (Epson, Konica, Minolta and Agfa...), and as such contains some tags
+ * that appear specific to those manufacturers.
+ *
+ * @author Kevin Mott https://github.com/kwhopper
+ * @author Drew Noakes https://drewnoakes.com
+ */
+ at SuppressWarnings("WeakerAccess")
+public class OlympusFocusInfoMakernoteDirectory extends Directory
+{
+    public static final int TagFocusInfoVersion = 0x0000;
+    public static final int TagAutoFocus = 0x0209;
+    public static final int TagSceneDetect = 0x0210;
+    public static final int TagSceneArea = 0x0211;
+    public static final int TagSceneDetectData = 0x0212;
+
+    public static final int TagZoomStepCount = 0x0300;
+    public static final int TagFocusStepCount = 0x0301;
+    public static final int TagFocusStepInfinity = 0x0303;
+    public static final int TagFocusStepNear = 0x0304;
+    public static final int TagFocusDistance = 0x0305;
+    public static final int TagAfPoint = 0x0308;
+    // 0x031a Continuous AF parameters?
+    public static final int TagAfInfo = 0x0328;    // ifd
+
+    public static final int TagExternalFlash = 0x1201;
+    public static final int TagExternalFlashGuideNumber = 0x1203;
+    public static final int TagExternalFlashBounce = 0x1204;
+    public static final int TagExternalFlashZoom = 0x1205;
+    public static final int TagInternalFlash = 0x1208;
+    public static final int TagManualFlash = 0x1209;
+    public static final int TagMacroLed = 0x120A;
+
+    public static final int TagSensorTemperature = 0x1500;
+
+    public static final int TagImageStabilization = 0x1600;
+
+    @NotNull
+    protected static final HashMap<Integer, String> _tagNameMap = new HashMap<Integer, String>();
+
+    static {
+        _tagNameMap.put(TagFocusInfoVersion, "Focus Info Version");
+        _tagNameMap.put(TagAutoFocus, "Auto Focus");
+        _tagNameMap.put(TagSceneDetect, "Scene Detect");
+        _tagNameMap.put(TagSceneArea, "Scene Area");
+        _tagNameMap.put(TagSceneDetectData, "Scene Detect Data");
+        _tagNameMap.put(TagZoomStepCount, "Zoom Step Count");
+        _tagNameMap.put(TagFocusStepCount, "Focus Step Count");
+        _tagNameMap.put(TagFocusStepInfinity, "Focus Step Infinity");
+        _tagNameMap.put(TagFocusStepNear, "Focus Step Near");
+        _tagNameMap.put(TagFocusDistance, "Focus Distance");
+        _tagNameMap.put(TagAfPoint, "AF Point");
+        _tagNameMap.put(TagAfInfo, "AF Info");
+        _tagNameMap.put(TagExternalFlash, "External Flash");
+        _tagNameMap.put(TagExternalFlashGuideNumber, "External Flash Guide Number");
+        _tagNameMap.put(TagExternalFlashBounce, "External Flash Bounce");
+        _tagNameMap.put(TagExternalFlashZoom, "External Flash Zoom");
+        _tagNameMap.put(TagInternalFlash, "Internal Flash");
+        _tagNameMap.put(TagManualFlash, "Manual Flash");
+        _tagNameMap.put(TagMacroLed, "Macro LED");
+        _tagNameMap.put(TagSensorTemperature, "Sensor Temperature");
+        _tagNameMap.put(TagImageStabilization, "Image Stabilization");
+    }
+
+    public OlympusFocusInfoMakernoteDirectory()
+    {
+        this.setDescriptor(new OlympusFocusInfoMakernoteDescriptor(this));
+    }
+
+    @Override
+    @NotNull
+    public String getName()
+    {
+        return "Olympus Focus Info";
+    }
+
+    @Override
+    @NotNull
+    protected HashMap<Integer, String> getTagNameMap()
+    {
+        return _tagNameMap;
+    }
+}
diff --git a/src/com/drew/metadata/exif/makernotes/OlympusImageProcessingMakernoteDescriptor.java b/src/com/drew/metadata/exif/makernotes/OlympusImageProcessingMakernoteDescriptor.java
new file mode 100644
index 0000000..c2add9a
--- /dev/null
+++ b/src/com/drew/metadata/exif/makernotes/OlympusImageProcessingMakernoteDescriptor.java
@@ -0,0 +1,240 @@
+/*
+ * Copyright 2002-2015 Drew Noakes
+ *
+ *    Licensed under the Apache License, Version 2.0 (the "License");
+ *    you may not use this file except in compliance with the License.
+ *    You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing, software
+ *    distributed under the License is distributed on an "AS IS" BASIS,
+ *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *    See the License for the specific language governing permissions and
+ *    limitations under the License.
+ *
+ * More information about this project is available at:
+ *
+ *    https://drewnoakes.com/code/exif/
+ *    https://github.com/drewnoakes/metadata-extractor
+ */
+package com.drew.metadata.exif.makernotes;
+
+import com.drew.lang.annotations.NotNull;
+import com.drew.lang.annotations.Nullable;
+import com.drew.metadata.TagDescriptor;
+
+import static com.drew.metadata.exif.makernotes.OlympusImageProcessingMakernoteDirectory.*;
+
+/**
+ * Provides human-readable String representations of tag values stored in a {@link OlympusImageProcessingMakernoteDirectory}.
+ * <p>
+ * Some Description functions converted from Exiftool version 10.33 created by Phil Harvey
+ * http://www.sno.phy.queensu.ca/~phil/exiftool/
+ * lib\Image\ExifTool\Olympus.pm
+ *
+ * @author Kevin Mott https://github.com/kwhopper
+ * @author Drew Noakes https://drewnoakes.com
+ */
+ at SuppressWarnings("WeakerAccess")
+public class OlympusImageProcessingMakernoteDescriptor extends TagDescriptor<OlympusImageProcessingMakernoteDirectory>
+{
+    public OlympusImageProcessingMakernoteDescriptor(@NotNull OlympusImageProcessingMakernoteDirectory directory)
+    {
+        super(directory);
+    }
+
+    @Override
+    @Nullable
+    public String getDescription(int tagType)
+    {
+        switch (tagType) {
+            case TagImageProcessingVersion:
+                return getImageProcessingVersionDescription();
+            case TagColorMatrix:
+                return getColorMatrixDescription();
+            case TagNoiseReduction2:
+                return getNoiseReduction2Description();
+            case TagDistortionCorrection2:
+                return getDistortionCorrection2Description();
+            case TagShadingCompensation2:
+                return getShadingCompensation2Description();
+            case TagMultipleExposureMode:
+                return getMultipleExposureModeDescription();
+            case TagAspectRatio:
+                return getAspectRatioDescription();
+            case TagKeystoneCompensation:
+                return getKeystoneCompensationDescription();
+            case TagKeystoneDirection:
+                return getKeystoneDirectionDescription();
+            default:
+                return super.getDescription(tagType);
+        }
+    }
+
+    @Nullable
+    public String getImageProcessingVersionDescription()
+    {
+        return getVersionBytesDescription(TagImageProcessingVersion, 4);
+    }
+
+    @Nullable
+    public String getColorMatrixDescription()
+    {
+        int[] obj = _directory.getIntArray(TagColorMatrix);
+        if (obj == null)
+            return null;
+
+        StringBuilder sb = new StringBuilder();
+        for (int i = 0; i < obj.length; i++) {
+            if (i != 0)
+                sb.append(" ");
+            sb.append((short)obj[i]);
+        }
+        return sb.toString();
+    }
+
+    @Nullable
+    public String getNoiseReduction2Description()
+    {
+        Integer value = _directory.getInteger(TagNoiseReduction2);
+        if (value == null)
+            return null;
+
+        if (value == 0)
+            return "(none)";
+
+        StringBuilder sb = new StringBuilder();
+        short v = value.shortValue();
+
+        if (( v       & 1) != 0) sb.append("Noise Reduction, ");
+        if (((v >> 1) & 1) != 0) sb.append("Noise Filter, ");
+        if (((v >> 2) & 1) != 0) sb.append("Noise Filter (ISO Boost), ");
+
+        return sb.substring(0, sb.length() - 2);
+    }
+
+    @Nullable
+    public String getDistortionCorrection2Description()
+    {
+        return getIndexedDescription(TagDistortionCorrection2, "Off", "On");
+    }
+
+    @Nullable
+    public String getShadingCompensation2Description()
+    {
+        return getIndexedDescription(TagShadingCompensation2, "Off", "On");
+    }
+
+    @Nullable
+    public String getMultipleExposureModeDescription()
+    {
+        int[] values = _directory.getIntArray(TagMultipleExposureMode);
+        if (values == null)
+        {
+            // check if it's only one value long also
+            Integer value = _directory.getInteger(TagMultipleExposureMode);
+            if(value == null)
+                return null;
+
+            values = new int[1];
+            values[0] = value;
+        }
+
+        if (values.length == 0)
+            return null;
+
+        StringBuilder sb = new StringBuilder();
+
+        switch ((short)values[0])
+        {
+            case 0:
+                sb.append("Off");
+                break;
+            case 2:
+                sb.append("On (2 frames)");
+                break;
+            case 3:
+                sb.append("On (3 frames)");
+                break;
+            default:
+                sb.append("Unknown (").append((short)values[0]).append(")");
+                break;
+        }
+
+        if (values.length > 1)
+            sb.append("; ").append((short)values[1]);
+
+        return sb.toString();
+    }
+
+    @Nullable
+    public String getAspectRatioDescription()
+    {
+        byte[] values = _directory.getByteArray(TagAspectRatio);
+        if (values == null || values.length < 2)
+            return null;
+
+        String join = String.format("%d %d", values[0], values[1]);
+
+        String ret;
+        if(join.equals("1 1"))
+            ret = "4:3";
+        else if(join.equals("1 4"))
+            ret = "1:1";
+        else if(join.equals("2 1"))
+            ret = "3:2 (RAW)";
+        else if(join.equals("2 2"))
+            ret = "3:2";
+        else if(join.equals("3 1"))
+            ret = "16:9 (RAW)";
+        else if(join.equals("3 3"))
+            ret = "16:9";
+        else if(join.equals("4 1"))
+            ret = "1:1 (RAW)";
+        else if(join.equals("4 4"))
+            ret = "6:6";
+        else if(join.equals("5 5"))
+            ret = "5:4";
+        else if(join.equals("6 6"))
+            ret = "7:6";
+        else if(join.equals("7 7"))
+            ret = "6:5";
+        else if(join.equals("8 8"))
+            ret = "7:5";
+        else if(join.equals("9 1"))
+            ret = "3:4 (RAW)";
+        else if(join.equals("9 9"))
+            ret = "3:4";
+        else
+            ret = "Unknown (" + join + ")";
+
+        return ret;
+    }
+
+    @Nullable
+    public String getKeystoneCompensationDescription()
+    {
+        byte[] values = _directory.getByteArray(TagKeystoneCompensation);
+        if (values == null || values.length < 2)
+            return null;
+
+        String join = String.format("%d %d", values[0], values[1]);
+
+        String ret;
+        if(join.equals("0 0"))
+            ret = "Off";
+        else if(join.equals("0 1"))
+            ret = "On";
+        else
+            ret = "Unknown (" + join + ")";
+
+        return ret;
+    }
+
+    @Nullable
+    public String getKeystoneDirectionDescription()
+    {
+        return getIndexedDescription(TagKeystoneDirection, "Vertical", "Horizontal");
+    }
+}
\ No newline at end of file
diff --git a/src/com/drew/metadata/exif/makernotes/OlympusImageProcessingMakernoteDirectory.java b/src/com/drew/metadata/exif/makernotes/OlympusImageProcessingMakernoteDirectory.java
new file mode 100644
index 0000000..4452584
--- /dev/null
+++ b/src/com/drew/metadata/exif/makernotes/OlympusImageProcessingMakernoteDirectory.java
@@ -0,0 +1,212 @@
+/*
+ * Copyright 2002-2015 Drew Noakes
+ *
+ *    Licensed under the Apache License, Version 2.0 (the "License");
+ *    you may not use this file except in compliance with the License.
+ *    You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing, software
+ *    distributed under the License is distributed on an "AS IS" BASIS,
+ *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *    See the License for the specific language governing permissions and
+ *    limitations under the License.
+ *
+ * More information about this project is available at:
+ *
+ *    https://drewnoakes.com/code/exif/
+ *    https://github.com/drewnoakes/metadata-extractor
+ */
+package com.drew.metadata.exif.makernotes;
+
+import com.drew.lang.annotations.NotNull;
+import com.drew.metadata.Directory;
+
+import java.util.HashMap;
+
+/**
+ * The Olympus image processing makernote is used by many manufacturers (Epson, Konica, Minolta and Agfa...), and as such contains some tags
+ * that appear specific to those manufacturers.
+ *
+ * @author Kevin Mott https://github.com/kwhopper
+ * @author Drew Noakes https://drewnoakes.com
+ */
+ at SuppressWarnings("WeakerAccess")
+public class OlympusImageProcessingMakernoteDirectory extends Directory
+{
+    public static final int TagImageProcessingVersion = 0x0000;
+    public static final int TagWbRbLevels = 0x0100;
+    // 0x0101 - in-camera AutoWB unless it is all 0's or all 256's (ref IB)
+    public static final int TagWbRbLevels3000K = 0x0102;
+    public static final int TagWbRbLevels3300K = 0x0103;
+    public static final int TagWbRbLevels3600K = 0x0104;
+    public static final int TagWbRbLevels3900K = 0x0105;
+    public static final int TagWbRbLevels4000K = 0x0106;
+    public static final int TagWbRbLevels4300K = 0x0107;
+    public static final int TagWbRbLevels4500K = 0x0108;
+    public static final int TagWbRbLevels4800K = 0x0109;
+    public static final int TagWbRbLevels5300K = 0x010a;
+    public static final int TagWbRbLevels6000K = 0x010b;
+    public static final int TagWbRbLevels6600K = 0x010c;
+    public static final int TagWbRbLevels7500K = 0x010d;
+    public static final int TagWbRbLevelsCwB1 = 0x010e;
+    public static final int TagWbRbLevelsCwB2 = 0x010f;
+    public static final int TagWbRbLevelsCwB3 = 0x0110;
+    public static final int TagWbRbLevelsCwB4 = 0x0111;
+    public static final int TagWbGLevel3000K = 0x0113;
+    public static final int TagWbGLevel3300K = 0x0114;
+    public static final int TagWbGLevel3600K = 0x0115;
+    public static final int TagWbGLevel3900K = 0x0116;
+    public static final int TagWbGLevel4000K = 0x0117;
+    public static final int TagWbGLevel4300K = 0x0118;
+    public static final int TagWbGLevel4500K = 0x0119;
+    public static final int TagWbGLevel4800K = 0x011a;
+    public static final int TagWbGLevel5300K = 0x011b;
+    public static final int TagWbGLevel6000K = 0x011c;
+    public static final int TagWbGLevel6600K = 0x011d;
+    public static final int TagWbGLevel7500K = 0x011e;
+    public static final int TagWbGLevel = 0x011f;
+    // 0x0121 = WB preset for flash (about 6000K) (ref IB)
+    // 0x0125 = WB preset for underwater (ref IB)
+
+    public static final int TagColorMatrix = 0x0200;
+    // color matrices (ref 11):
+    // 0x0201-0x020d are sRGB color matrices
+    // 0x020e-0x021a are Adobe RGB color matrices
+    // 0x021b-0x0227 are ProPhoto RGB color matrices
+    // 0x0228 and 0x0229 are ColorMatrix for E-330
+    // 0x0250-0x0252 are sRGB color matrices
+    // 0x0253-0x0255 are Adobe RGB color matrices
+    // 0x0256-0x0258 are ProPhoto RGB color matrices
+
+    public static final int TagEnhancer = 0x0300;
+    public static final int TagEnhancerValues = 0x0301;
+    public static final int TagCoringFilter = 0x0310;
+    public static final int TagCoringValues = 0x0311;
+    public static final int TagBlackLevel2 = 0x0600;
+    public static final int TagGainBase = 0x0610;
+    public static final int TagValidBits = 0x0611;
+    public static final int TagCropLeft = 0x0612;
+    public static final int TagCropTop = 0x0613;
+    public static final int TagCropWidth = 0x0614;
+    public static final int TagCropHeight = 0x0615;
+    public static final int TagUnknownBlock1 = 0x0635;
+    public static final int TagUnknownBlock2 = 0x0636;
+
+    // 0x0800 LensDistortionParams, float[9] (ref 11)
+    // 0x0801 LensShadingParams, int16u[16] (ref 11)
+    public static final int TagSensorCalibration = 0x0805;
+
+    public static final int TagNoiseReduction2 = 0x1010;
+    public static final int TagDistortionCorrection2 = 0x1011;
+    public static final int TagShadingCompensation2 = 0x1012;
+    public static final int TagMultipleExposureMode = 0x101c;
+    public static final int TagUnknownBlock3 = 0x1103;
+    public static final int TagUnknownBlock4 = 0x1104;
+    public static final int TagAspectRatio = 0x1112;
+    public static final int TagAspectFrame = 0x1113;
+    public static final int TagFacesDetected = 0x1200;
+    public static final int TagFaceDetectArea = 0x1201;
+    public static final int TagMaxFaces = 0x1202;
+    public static final int TagFaceDetectFrameSize = 0x1203;
+    public static final int TagFaceDetectFrameCrop = 0x1207;
+    public static final int TagCameraTemperature = 0x1306;
+
+    public static final int TagKeystoneCompensation = 0x1900;
+    public static final int TagKeystoneDirection = 0x1901;
+    // 0x1905 - focal length (PH, E-M1)
+    public static final int TagKeystoneValue = 0x1906;
+
+    @NotNull
+    protected static final HashMap<Integer, String> _tagNameMap = new HashMap<Integer, String>();
+
+    static {
+        _tagNameMap.put(TagImageProcessingVersion, "Image Processing Version");
+        _tagNameMap.put(TagWbRbLevels, "WB RB Levels");
+        _tagNameMap.put(TagWbRbLevels3000K, "WB RB Levels 3000K");
+        _tagNameMap.put(TagWbRbLevels3300K, "WB RB Levels 3300K");
+        _tagNameMap.put(TagWbRbLevels3600K, "WB RB Levels 3600K");
+        _tagNameMap.put(TagWbRbLevels3900K, "WB RB Levels 3900K");
+        _tagNameMap.put(TagWbRbLevels4000K, "WB RB Levels 4000K");
+        _tagNameMap.put(TagWbRbLevels4300K, "WB RB Levels 4300K");
+        _tagNameMap.put(TagWbRbLevels4500K, "WB RB Levels 4500K");
+        _tagNameMap.put(TagWbRbLevels4800K, "WB RB Levels 4800K");
+        _tagNameMap.put(TagWbRbLevels5300K, "WB RB Levels 5300K");
+        _tagNameMap.put(TagWbRbLevels6000K, "WB RB Levels 6000K");
+        _tagNameMap.put(TagWbRbLevels6600K, "WB RB Levels 6600K");
+        _tagNameMap.put(TagWbRbLevels7500K, "WB RB Levels 7500K");
+        _tagNameMap.put(TagWbRbLevelsCwB1, "WB RB Levels CWB1");
+        _tagNameMap.put(TagWbRbLevelsCwB2, "WB RB Levels CWB2");
+        _tagNameMap.put(TagWbRbLevelsCwB3, "WB RB Levels CWB3");
+        _tagNameMap.put(TagWbRbLevelsCwB4, "WB RB Levels CWB4");
+        _tagNameMap.put(TagWbGLevel3000K, "WB G Level 3000K");
+        _tagNameMap.put(TagWbGLevel3300K, "WB G Level 3300K");
+        _tagNameMap.put(TagWbGLevel3600K, "WB G Level 3600K");
+        _tagNameMap.put(TagWbGLevel3900K, "WB G Level 3900K");
+        _tagNameMap.put(TagWbGLevel4000K, "WB G Level 4000K");
+        _tagNameMap.put(TagWbGLevel4300K, "WB G Level 4300K");
+        _tagNameMap.put(TagWbGLevel4500K, "WB G Level 4500K");
+        _tagNameMap.put(TagWbGLevel4800K, "WB G Level 4800K");
+        _tagNameMap.put(TagWbGLevel5300K, "WB G Level 5300K");
+        _tagNameMap.put(TagWbGLevel6000K, "WB G Level 6000K");
+        _tagNameMap.put(TagWbGLevel6600K, "WB G Level 6600K");
+        _tagNameMap.put(TagWbGLevel7500K, "WB G Level 7500K");
+        _tagNameMap.put(TagWbGLevel, "WB G Level");
+
+        _tagNameMap.put(TagColorMatrix, "Color Matrix");
+
+        _tagNameMap.put(TagEnhancer, "Enhancer");
+        _tagNameMap.put(TagEnhancerValues, "Enhancer Values");
+        _tagNameMap.put(TagCoringFilter, "Coring Filter");
+        _tagNameMap.put(TagCoringValues, "Coring Values");
+        _tagNameMap.put(TagBlackLevel2, "Black Level 2");
+        _tagNameMap.put(TagGainBase, "Gain Base");
+        _tagNameMap.put(TagValidBits, "Valid Bits");
+        _tagNameMap.put(TagCropLeft, "Crop Left");
+        _tagNameMap.put(TagCropTop, "Crop Top");
+        _tagNameMap.put(TagCropWidth, "Crop Width");
+        _tagNameMap.put(TagCropHeight, "Crop Height");
+        _tagNameMap.put(TagUnknownBlock1, "Unknown Block 1");
+        _tagNameMap.put(TagUnknownBlock2, "Unknown Block 2");
+
+        _tagNameMap.put(TagSensorCalibration, "Sensor Calibration");
+
+        _tagNameMap.put(TagNoiseReduction2, "Noise Reduction 2");
+        _tagNameMap.put(TagDistortionCorrection2, "Distortion Correction 2");
+        _tagNameMap.put(TagShadingCompensation2, "Shading Compensation 2");
+        _tagNameMap.put(TagMultipleExposureMode, "Multiple Exposure Mode");
+        _tagNameMap.put(TagUnknownBlock3, "Unknown Block 3");
+        _tagNameMap.put(TagUnknownBlock4, "Unknown Block 4");
+        _tagNameMap.put(TagAspectRatio, "Aspect Ratio");
+        _tagNameMap.put(TagAspectFrame, "Aspect Frame");
+        _tagNameMap.put(TagFacesDetected, "Faces Detected");
+        _tagNameMap.put(TagFaceDetectArea, "Face Detect Area");
+        _tagNameMap.put(TagMaxFaces, "Max Faces");
+        _tagNameMap.put(TagFaceDetectFrameSize, "Face Detect Frame Size");
+        _tagNameMap.put(TagFaceDetectFrameCrop, "Face Detect Frame Crop");
+        _tagNameMap.put(TagCameraTemperature , "Camera Temperature");
+        _tagNameMap.put(TagKeystoneCompensation, "Keystone Compensation");
+        _tagNameMap.put(TagKeystoneDirection, "Keystone Direction");
+        _tagNameMap.put(TagKeystoneValue, "Keystone Value");
+    }
+
+    public OlympusImageProcessingMakernoteDirectory()
+    {
+        this.setDescriptor(new OlympusImageProcessingMakernoteDescriptor(this));
+    }
+
+    @Override
+    @NotNull
+    public String getName()
+    {
+        return "Olympus Image Processing";
+    }
+
+    @Override
+    @NotNull
+    protected HashMap<Integer, String> getTagNameMap()
+    {
+        return _tagNameMap;
+    }
+}
diff --git a/src/com/drew/metadata/exif/makernotes/OlympusMakernoteDescriptor.java b/src/com/drew/metadata/exif/makernotes/OlympusMakernoteDescriptor.java
index 943a375..41a313d 100644
--- a/src/com/drew/metadata/exif/makernotes/OlympusMakernoteDescriptor.java
+++ b/src/com/drew/metadata/exif/makernotes/OlympusMakernoteDescriptor.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2002-2016 Drew Noakes
+ * Copyright 2002-2017 Drew Noakes
  *
  *    Licensed under the Apache License, Version 2.0 (the "License");
  *    you may not use this file except in compliance with the License.
@@ -20,6 +20,8 @@
  */
 package com.drew.metadata.exif.makernotes;
 
+import com.drew.imaging.PhotographicConversions;
+import com.drew.lang.Rational;
 import com.drew.lang.DateUtil;
 import com.drew.lang.annotations.NotNull;
 import com.drew.lang.annotations.Nullable;
@@ -35,6 +37,7 @@ import static com.drew.metadata.exif.makernotes.OlympusMakernoteDirectory.*;
  *
  * @author Drew Noakes https://drewnoakes.com
  */
+ at SuppressWarnings("WeakerAccess")
 public class OlympusMakernoteDescriptor extends TagDescriptor<OlympusMakernoteDirectory>
 {
     // TODO extend support for some offset-encoded byte[] tags: http://www.ozhiker.com/electronics/pjmt/jpeg_info/olympus_mn.html
@@ -65,10 +68,22 @@ public class OlympusMakernoteDescriptor extends TagDescriptor<OlympusMakernoteDi
                 return getMacroModeDescription();
             case TAG_BW_MODE:
                 return getBWModeDescription();
-            case TAG_DIGI_ZOOM_RATIO:
-                return getDigiZoomRatioDescription();
+            case TAG_DIGITAL_ZOOM:
+                return getDigitalZoomDescription();
+            case TAG_FOCAL_PLANE_DIAGONAL:
+                return getFocalPlaneDiagonalDescription();
+            case TAG_CAMERA_TYPE:
+                return getCameraTypeDescription();
             case TAG_CAMERA_ID:
                 return getCameraIdDescription();
+            case TAG_ONE_TOUCH_WB:
+                return getOneTouchWbDescription();
+            case TAG_SHUTTER_SPEED_VALUE:
+                return getShutterSpeedDescription();
+            case TAG_ISO_VALUE:
+                return getIsoValueDescription();
+            case TAG_APERTURE_VALUE:
+                return getApertureValueDescription();
             case TAG_FLASH_MODE:
                 return getFlashModeDescription();
             case TAG_FOCUS_RANGE:
@@ -77,6 +92,18 @@ public class OlympusMakernoteDescriptor extends TagDescriptor<OlympusMakernoteDi
                 return getFocusModeDescription();
             case TAG_SHARPNESS:
                 return getSharpnessDescription();
+            case TAG_COLOUR_MATRIX:
+                return getColorMatrixDescription();
+            case TAG_WB_MODE:
+                return getWbModeDescription();
+            case TAG_RED_BALANCE:
+                return getRedBalanceDescription();
+            case TAG_BLUE_BALANCE:
+                return getBlueBalanceDescription();
+            case TAG_CONTRAST:
+                return getContrastDescription();
+            case TAG_PREVIEW_IMAGE_VALID:
+                return getPreviewImageValidDescription();
 
             case CameraSettings.TAG_EXPOSURE_MODE:
                 return getExposureModeDescription();
@@ -101,7 +128,7 @@ public class OlympusMakernoteDescriptor extends TagDescriptor<OlympusMakernoteDi
             case CameraSettings.TAG_MACRO_MODE:
                 return getMacroModeCameraSettingDescription();
             case CameraSettings.TAG_DIGITAL_ZOOM:
-                return getDigitalZoomDescription();
+                return getDigitalZoomCameraSettingDescription();
             case CameraSettings.TAG_EXPOSURE_COMPENSATION:
                 return getExposureCompensationDescription();
             case CameraSettings.TAG_BRACKET_STEP:
@@ -137,7 +164,7 @@ public class OlympusMakernoteDescriptor extends TagDescriptor<OlympusMakernoteDi
             case CameraSettings.TAG_SATURATION:
                 return getSaturationDescription();
             case CameraSettings.TAG_CONTRAST:
-                return getContrastDescription();
+                return getContrastCameraSettingDescription();
             case CameraSettings.TAG_SHARPNESS:
                 return getSharpnessCameraSettingDescription();
             case CameraSettings.TAG_SUBJECT_PROGRAM:
@@ -304,7 +331,7 @@ public class OlympusMakernoteDescriptor extends TagDescriptor<OlympusMakernoteDi
     }
 
     @Nullable
-    public String getDigitalZoomDescription()
+    public String getDigitalZoomCameraSettingDescription()
     {
         return getIndexedDescription(CameraSettings.TAG_DIGITAL_ZOOM, "Off", "Electronic magnification", "Digital zoom 2x");
     }
@@ -467,7 +494,7 @@ public class OlympusMakernoteDescriptor extends TagDescriptor<OlympusMakernoteDi
     }
 
     @Nullable
-    public String getContrastDescription()
+    public String getContrastCameraSettingDescription()
     {
         Long value = _directory.getLongObject(CameraSettings.TAG_CONTRAST);
         return value == null ? null : Long.toString(value-3);
@@ -646,6 +673,93 @@ public class OlympusMakernoteDescriptor extends TagDescriptor<OlympusMakernoteDi
     }
 
     @Nullable
+    public String getColorMatrixDescription()
+    {
+        int[] obj = _directory.getIntArray(TAG_COLOUR_MATRIX);
+        if (obj == null)
+            return null;
+
+        StringBuilder sb = new StringBuilder();
+        for (int i = 0; i < obj.length; i++) {
+            sb.append((short)obj[i]);
+            if (i < obj.length - 1)
+                sb.append(" ");
+        }
+        return sb.length() == 0 ? null : sb.toString();
+    }
+
+    @Nullable
+    public String getWbModeDescription()
+    {
+        int[] obj = _directory.getIntArray(TAG_WB_MODE);
+        if (obj == null)
+            return null;
+
+        String val = String.format("%d %d", obj[0], obj[1]);
+
+        if(val.equals("1 0"))
+            return "Auto";
+        else if(val.equals("1 2"))
+            return "Auto (2)";
+        else if(val.equals("1 4"))
+            return "Auto (4)";
+        else if(val.equals("2 2"))
+            return "3000 Kelvin";
+        else if(val.equals("2 3"))
+            return "3700 Kelvin";
+        else if(val.equals("2 4"))
+            return "4000 Kelvin";
+        else if(val.equals("2 5"))
+            return "4500 Kelvin";
+        else if(val.equals("2 6"))
+            return "5500 Kelvin";
+        else if(val.equals("2 7"))
+            return "6500 Kelvin";
+        else if(val.equals("2 8"))
+            return "7500 Kelvin";
+        else if(val.equals("3 0"))
+            return "One-touch";
+        else
+            return "Unknown " + val;
+    }
+
+    @Nullable
+    public String getRedBalanceDescription()
+    {
+        int[] values = _directory.getIntArray(TAG_RED_BALANCE);
+        if (values == null)
+            return null;
+
+        short value = (short)values[0];
+
+        return String.valueOf((double)value/256d);
+    }
+
+    @Nullable
+    public String getBlueBalanceDescription()
+    {
+        int[] values = _directory.getIntArray(TAG_BLUE_BALANCE);
+        if (values == null)
+            return null;
+
+        short value = (short)values[0];
+
+        return String.valueOf((double)value/256d);
+    }
+
+    @Nullable
+    public String getContrastDescription()
+    {
+        return getIndexedDescription(TAG_CONTRAST, "High", "Normal", "Low");
+    }
+
+    @Nullable
+    public String getPreviewImageValidDescription()
+    {
+        return getIndexedDescription(TAG_PREVIEW_IMAGE_VALID, "No", "Yes");
+    }
+
+    @Nullable
     public String getFocusModeDescription()
     {
         return getIndexedDescription(TAG_FOCUS_MODE, "Auto", "Manual");
@@ -664,9 +778,36 @@ public class OlympusMakernoteDescriptor extends TagDescriptor<OlympusMakernoteDi
     }
 
     @Nullable
-    public String getDigiZoomRatioDescription()
+    public String getDigitalZoomDescription()
+    {
+        Rational value = _directory.getRational(TAG_DIGITAL_ZOOM);
+        if (value == null)
+            return null;
+        return value.toSimpleString(false);
+    }
+
+    @Nullable
+    public String getFocalPlaneDiagonalDescription()
+    {
+        Rational value = _directory.getRational(TAG_FOCAL_PLANE_DIAGONAL);
+        if (value == null)
+            return null;
+
+        DecimalFormat format = new DecimalFormat("0.###");
+        return format.format(value.doubleValue()) + " mm";
+    }
+
+    @Nullable
+    public String getCameraTypeDescription()
     {
-        return getIndexedDescription(TAG_DIGI_ZOOM_RATIO, "Normal", null, "Digital 2x Zoom");
+        String cameratype = _directory.getString(TAG_CAMERA_TYPE);
+        if(cameratype == null)
+            return null;
+
+        if(OlympusMakernoteDirectory.OlympusCameraTypes.containsKey(cameratype))
+            return OlympusMakernoteDirectory.OlympusCameraTypes.get(cameratype);
+
+        return cameratype;
     }
 
     @Nullable
@@ -679,6 +820,38 @@ public class OlympusMakernoteDescriptor extends TagDescriptor<OlympusMakernoteDi
     }
 
     @Nullable
+    public String getOneTouchWbDescription()
+    {
+        return getIndexedDescription(TAG_ONE_TOUCH_WB, "Off", "On", "On (Preset)");
+    }
+
+    @Nullable
+    public String getShutterSpeedDescription()
+    {
+        return super.getShutterSpeedDescription(TAG_SHUTTER_SPEED_VALUE);
+    }
+
+    @Nullable
+    public String getIsoValueDescription()
+    {
+        Rational value = _directory.getRational(TAG_ISO_VALUE);
+        if (value == null)
+            return null;
+
+        return String.valueOf(Math.round(Math.pow(2, value.doubleValue() - 5) * 100));
+    }
+
+    @Nullable
+    public String getApertureValueDescription()
+    {
+        Double aperture = _directory.getDoubleObject(TAG_APERTURE_VALUE);
+        if (aperture == null)
+            return null;
+        double fStop = PhotographicConversions.apertureToFStop(aperture);
+        return getFStopDescription(fStop);
+    }
+
+    @Nullable
     public String getMacroModeDescription()
     {
         return getIndexedDescription(TAG_MACRO_MODE, "Normal (no macro)", "Macro");
@@ -693,7 +866,56 @@ public class OlympusMakernoteDescriptor extends TagDescriptor<OlympusMakernoteDi
     @Nullable
     public String getJpegQualityDescription()
     {
-        return getIndexedDescription(TAG_JPEG_QUALITY,
+        String cameratype = _directory.getString(TAG_CAMERA_TYPE);
+
+        if(cameratype != null)
+        {
+            Integer value = _directory.getInteger(TAG_JPEG_QUALITY);
+            if(value == null)
+                return null;
+
+            if((cameratype.startsWith("SX") && !cameratype.startsWith("SX151"))
+                || cameratype.startsWith("D4322"))
+            {
+                switch (value)
+                {
+                    case 0:
+                        return "Standard Quality (Low)";
+                    case 1:
+                        return "High Quality (Normal)";
+                    case 2:
+                        return "Super High Quality (Fine)";
+                    case 6:
+                        return "RAW";
+                    default:
+                        return "Unknown (" + value.toString() + ")";
+                }
+            }
+            else
+            {
+                switch (value)
+                {
+                    case 0:
+                        return "Standard Quality (Low)";
+                    case 1:
+                        return "High Quality (Normal)";
+                    case 2:
+                        return "Super High Quality (Fine)";
+                    case 4:
+                        return "RAW";
+                    case 5:
+                        return "Medium-Fine";
+                    case 6:
+                        return "Small-Fine";
+                    case 33:
+                        return "Uncompressed";
+                    default:
+                        return "Unknown (" + value.toString() + ")";
+                }
+            }
+        }
+        else
+            return getIndexedDescription(TAG_JPEG_QUALITY,
             1,
             "Standard Quality",
             "High Quality",
diff --git a/src/com/drew/metadata/exif/makernotes/OlympusMakernoteDirectory.java b/src/com/drew/metadata/exif/makernotes/OlympusMakernoteDirectory.java
index 3f3debb..2856a66 100644
--- a/src/com/drew/metadata/exif/makernotes/OlympusMakernoteDirectory.java
+++ b/src/com/drew/metadata/exif/makernotes/OlympusMakernoteDirectory.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2002-2016 Drew Noakes
+ * Copyright 2002-2017 Drew Noakes
  *
  *    Licensed under the Apache License, Version 2.0 (the "License");
  *    you may not use this file except in compliance with the License.
@@ -33,6 +33,7 @@ import java.util.HashMap;
  *
  * @author Drew Noakes https://drewnoakes.com
  */
+ at SuppressWarnings("WeakerAccess")
 public class OlympusMakernoteDirectory extends Directory
 {
     /** Used by Konica / Minolta cameras. */
@@ -116,10 +117,10 @@ public class OlympusMakernoteDirectory extends Directory
     public static final int TAG_BW_MODE = 0x0203;
 
     /** Zoom Factor (0 or 1 = normal) */
-    public static final int TAG_DIGI_ZOOM_RATIO = 0x0204;
+    public static final int TAG_DIGITAL_ZOOM = 0x0204;
     public static final int TAG_FOCAL_PLANE_DIAGONAL = 0x0205;
     public static final int TAG_LENS_DISTORTION_PARAMETERS = 0x0206;
-    public static final int TAG_FIRMWARE_VERSION = 0x0207;
+    public static final int TAG_CAMERA_TYPE = 0x0207;
     public static final int TAG_PICT_INFO = 0x0208;
     public static final int TAG_CAMERA_ID = 0x0209;
 
@@ -145,7 +146,8 @@ public class OlympusMakernoteDirectory extends Directory
     public static final int TAG_WHITE_BALANCE_BRACKET = 0x0303;
     public static final int TAG_WHITE_BALANCE_BIAS = 0x0304;
     public static final int TAG_SCENE_MODE = 0x0403;
-    public static final int TAG_FIRMWARE = 0x0404;
+    public static final int TAG_SERIAL_NUMBER_1 = 0x0404;
+    public static final int TAG_FIRMWARE = 0x0405;
 
     /**
      * See the PIM specification here:
@@ -175,25 +177,27 @@ public class OlympusMakernoteDirectory extends Directory
     public static final int TAG_FLASH_CHARGE_LEVEL = 0x1010;
     public static final int TAG_COLOUR_MATRIX = 0x1011;
     public static final int TAG_BLACK_LEVEL = 0x1012;
-//    public static final int TAG_ = 0x1013;
-//    public static final int TAG_ = 0x1014;
-    public static final int TAG_WHITE_BALANCE = 0x1015;
+    public static final int TAG_COLOR_TEMPERATURE_BG = 0x1013;
+    public static final int TAG_COLOR_TEMPERATURE_RG = 0x1014;
+    public static final int TAG_WB_MODE = 0x1015;
 //    public static final int TAG_ = 0x1016;
-    public static final int TAG_RED_BIAS = 0x1017;
-    public static final int TAG_BLUE_BIAS = 0x1018;
+    public static final int TAG_RED_BALANCE = 0x1017;
+    public static final int TAG_BLUE_BALANCE = 0x1018;
     public static final int TAG_COLOR_MATRIX_NUMBER = 0x1019;
-    public static final int TAG_SERIAL_NUMBER = 0x101A;
-//    public static final int TAG_ = 0x101B;
-//    public static final int TAG_ = 0x101C;
-//    public static final int TAG_ = 0x101D;
-//    public static final int TAG_ = 0x101E;
-//    public static final int TAG_ = 0x101F;
-//    public static final int TAG_ = 0x1020;
-//    public static final int TAG_ = 0x1021;
-//    public static final int TAG_ = 0x1022;
+    public static final int TAG_SERIAL_NUMBER_2 = 0x101A;
+
+    public static final int TAG_EXTERNAL_FLASH_AE1_0 = 0x101B;
+    public static final int TAG_EXTERNAL_FLASH_AE2_0 = 0x101C;
+    public static final int TAG_INTERNAL_FLASH_AE1_0 = 0x101D;
+    public static final int TAG_INTERNAL_FLASH_AE2_0 = 0x101E;
+    public static final int TAG_EXTERNAL_FLASH_AE1 = 0x101F;
+    public static final int TAG_EXTERNAL_FLASH_AE2 = 0x1020;
+    public static final int TAG_INTERNAL_FLASH_AE1 = 0x1021;
+    public static final int TAG_INTERNAL_FLASH_AE2 = 0x1022;
+
     public static final int TAG_FLASH_BIAS = 0x1023;
-//    public static final int TAG_ = 0x1024;
-//    public static final int TAG_ = 0x1025;
+    public static final int TAG_INTERNAL_FLASH_TABLE = 0x1024;
+    public static final int TAG_EXTERNAL_FLASH_G_VALUE = 0x1025;
     public static final int TAG_EXTERNAL_FLASH_BOUNCE = 0x1026;
     public static final int TAG_EXTERNAL_FLASH_ZOOM = 0x1027;
     public static final int TAG_EXTERNAL_FLASH_MODE = 0x1028;
@@ -202,21 +206,24 @@ public class OlympusMakernoteDirectory extends Directory
     public static final int TAG_COLOUR_CONTROL = 0x102B;
     public static final int TAG_VALID_BITS = 0x102C;
     public static final int TAG_CORING_FILTER = 0x102D;
-    public static final int TAG_FINAL_WIDTH = 0x102E;
-    public static final int TAG_FINAL_HEIGHT = 0x102F;
-//    public static final int TAG_ = 0x1030;
-//    public static final int TAG_ = 0x1031;
+    public static final int TAG_OLYMPUS_IMAGE_WIDTH = 0x102E;
+    public static final int TAG_OLYMPUS_IMAGE_HEIGHT = 0x102F;
+    public static final int TAG_SCENE_DETECT = 0x1030;
+    public static final int TAG_SCENE_AREA = 0x1031;
 //    public static final int TAG_ = 0x1032;
-//    public static final int TAG_ = 0x1033;
+    public static final int TAG_SCENE_DETECT_DATA = 0x1033;
     public static final int TAG_COMPRESSION_RATIO = 0x1034;
-    public static final int TAG_THUMBNAIL = 0x1035;
-    public static final int TAG_THUMBNAIL_OFFSET = 0x1036;
-    public static final int TAG_THUMBNAIL_LENGTH = 0x1037;
-//    public static final int TAG_ = 0x1038;
+    public static final int TAG_PREVIEW_IMAGE_VALID = 0x1035;
+    public static final int TAG_PREVIEW_IMAGE_START = 0x1036;
+    public static final int TAG_PREVIEW_IMAGE_LENGTH = 0x1037;
+    public static final int TAG_AF_RESULT = 0x1038;
     public static final int TAG_CCD_SCAN_MODE = 0x1039;
     public static final int TAG_NOISE_REDUCTION = 0x103A;
     public static final int TAG_INFINITY_LENS_STEP = 0x103B;
     public static final int TAG_NEAR_LENS_STEP = 0x103C;
+    public static final int TAG_LIGHT_VALUE_CENTER = 0x103D;
+    public static final int TAG_LIGHT_VALUE_PERIPHERY = 0x103E;
+    public static final int TAG_FIELD_COUNT = 0x103F;
     public static final int TAG_EQUIPMENT = 0x2010;
     public static final int TAG_CAMERA_SETTINGS = 0x2020;
     public static final int TAG_RAW_DEVELOPMENT = 0x2030;
@@ -224,6 +231,7 @@ public class OlympusMakernoteDirectory extends Directory
     public static final int TAG_IMAGE_PROCESSING = 0x2040;
     public static final int TAG_FOCUS_INFO = 0x2050;
     public static final int TAG_RAW_INFO = 0x3000;
+    public static final int TAG_MAIN_INFO = 0x4000;
 
     public final static class CameraSettings
     {
@@ -301,10 +309,10 @@ public class OlympusMakernoteDirectory extends Directory
         _tagNameMap.put(TAG_JPEG_QUALITY, "JPEG Quality");
         _tagNameMap.put(TAG_MACRO_MODE, "Macro");
         _tagNameMap.put(TAG_BW_MODE, "BW Mode");
-        _tagNameMap.put(TAG_DIGI_ZOOM_RATIO, "DigiZoom Ratio");
+        _tagNameMap.put(TAG_DIGITAL_ZOOM, "Digital Zoom");
         _tagNameMap.put(TAG_FOCAL_PLANE_DIAGONAL, "Focal Plane Diagonal");
         _tagNameMap.put(TAG_LENS_DISTORTION_PARAMETERS, "Lens Distortion Parameters");
-        _tagNameMap.put(TAG_FIRMWARE_VERSION, "Firmware Version");
+        _tagNameMap.put(TAG_CAMERA_TYPE, "Camera Type");
         _tagNameMap.put(TAG_PICT_INFO, "Pict Info");
         _tagNameMap.put(TAG_CAMERA_ID, "Camera Id");
         _tagNameMap.put(TAG_IMAGE_WIDTH, "Image Width");
@@ -317,6 +325,7 @@ public class OlympusMakernoteDirectory extends Directory
         _tagNameMap.put(TAG_WHITE_BALANCE_BRACKET, "White Balance Bracket");
         _tagNameMap.put(TAG_WHITE_BALANCE_BIAS, "White Balance Bias");
         _tagNameMap.put(TAG_SCENE_MODE, "Scene Mode");
+        _tagNameMap.put(TAG_SERIAL_NUMBER_1, "Serial Number");
         _tagNameMap.put(TAG_FIRMWARE, "Firmware");
         _tagNameMap.put(TAG_PRINT_IMAGE_MATCHING_INFO, "Print Image Matching (PIM) Info");
         _tagNameMap.put(TAG_DATA_DUMP_1, "Data Dump");
@@ -340,12 +349,24 @@ public class OlympusMakernoteDirectory extends Directory
         _tagNameMap.put(TAG_FLASH_CHARGE_LEVEL, "Flash Charge Level");
         _tagNameMap.put(TAG_COLOUR_MATRIX, "Colour Matrix");
         _tagNameMap.put(TAG_BLACK_LEVEL, "Black Level");
-        _tagNameMap.put(TAG_WHITE_BALANCE, "White Balance");
-        _tagNameMap.put(TAG_RED_BIAS, "Red Bias");
-        _tagNameMap.put(TAG_BLUE_BIAS, "Blue Bias");
+        _tagNameMap.put(TAG_COLOR_TEMPERATURE_BG, "Color Temperature BG");
+        _tagNameMap.put(TAG_COLOR_TEMPERATURE_RG, "Color Temperature RG");
+        _tagNameMap.put(TAG_WB_MODE, "White Balance Mode");
+        _tagNameMap.put(TAG_RED_BALANCE, "Red Balance");
+        _tagNameMap.put(TAG_BLUE_BALANCE, "Blue Balance");
         _tagNameMap.put(TAG_COLOR_MATRIX_NUMBER, "Color Matrix Number");
-        _tagNameMap.put(TAG_SERIAL_NUMBER, "Serial Number");
+        _tagNameMap.put(TAG_SERIAL_NUMBER_2, "Serial Number");
+        _tagNameMap.put(TAG_EXTERNAL_FLASH_AE1_0, "External Flash AE1 0");
+        _tagNameMap.put(TAG_EXTERNAL_FLASH_AE2_0, "External Flash AE2 0");
+        _tagNameMap.put(TAG_INTERNAL_FLASH_AE1_0, "Internal Flash AE1 0");
+        _tagNameMap.put(TAG_INTERNAL_FLASH_AE2_0, "Internal Flash AE2 0");
+        _tagNameMap.put(TAG_EXTERNAL_FLASH_AE1, "External Flash AE1");
+        _tagNameMap.put(TAG_EXTERNAL_FLASH_AE2, "External Flash AE2");
+        _tagNameMap.put(TAG_INTERNAL_FLASH_AE1, "Internal Flash AE1");
+        _tagNameMap.put(TAG_INTERNAL_FLASH_AE2, "Internal Flash AE2");
         _tagNameMap.put(TAG_FLASH_BIAS, "Flash Bias");
+        _tagNameMap.put(TAG_INTERNAL_FLASH_TABLE, "Internal Flash Table");
+        _tagNameMap.put(TAG_EXTERNAL_FLASH_G_VALUE, "External Flash G Value");
         _tagNameMap.put(TAG_EXTERNAL_FLASH_BOUNCE, "External Flash Bounce");
         _tagNameMap.put(TAG_EXTERNAL_FLASH_ZOOM, "External Flash Zoom");
         _tagNameMap.put(TAG_EXTERNAL_FLASH_MODE, "External Flash Mode");
@@ -354,16 +375,23 @@ public class OlympusMakernoteDirectory extends Directory
         _tagNameMap.put(TAG_COLOUR_CONTROL, "Colour Control");
         _tagNameMap.put(TAG_VALID_BITS, "Valid Bits");
         _tagNameMap.put(TAG_CORING_FILTER, "Coring Filter");
-        _tagNameMap.put(TAG_FINAL_WIDTH, "Final Width");
-        _tagNameMap.put(TAG_FINAL_HEIGHT, "Final Height");
+        _tagNameMap.put(TAG_OLYMPUS_IMAGE_WIDTH, "Olympus Image Width");
+        _tagNameMap.put(TAG_OLYMPUS_IMAGE_HEIGHT, "Olympus Image Height");
+        _tagNameMap.put(TAG_SCENE_DETECT, "Scene Detect");
+        _tagNameMap.put(TAG_SCENE_AREA, "Scene Area");
+        _tagNameMap.put(TAG_SCENE_DETECT_DATA, "Scene Detect Data");
         _tagNameMap.put(TAG_COMPRESSION_RATIO, "Compression Ratio");
-        _tagNameMap.put(TAG_THUMBNAIL, "Thumbnail");
-        _tagNameMap.put(TAG_THUMBNAIL_OFFSET, "Thumbnail Offset");
-        _tagNameMap.put(TAG_THUMBNAIL_LENGTH, "Thumbnail Length");
+        _tagNameMap.put(TAG_PREVIEW_IMAGE_VALID, "Preview Image Valid");
+        _tagNameMap.put(TAG_PREVIEW_IMAGE_START, "Preview Image Start");
+        _tagNameMap.put(TAG_PREVIEW_IMAGE_LENGTH, "Preview Image Length");
+        _tagNameMap.put(TAG_AF_RESULT, "AF Result");
         _tagNameMap.put(TAG_CCD_SCAN_MODE, "CCD Scan Mode");
         _tagNameMap.put(TAG_NOISE_REDUCTION, "Noise Reduction");
         _tagNameMap.put(TAG_INFINITY_LENS_STEP, "Infinity Lens Step");
         _tagNameMap.put(TAG_NEAR_LENS_STEP, "Near Lens Step");
+        _tagNameMap.put(TAG_LIGHT_VALUE_CENTER, "Light Value Center");
+        _tagNameMap.put(TAG_LIGHT_VALUE_PERIPHERY, "Light Value Periphery");
+        _tagNameMap.put(TAG_FIELD_COUNT, "Field Count");
         _tagNameMap.put(TAG_EQUIPMENT, "Equipment");
         _tagNameMap.put(TAG_CAMERA_SETTINGS, "Camera Settings");
         _tagNameMap.put(TAG_RAW_DEVELOPMENT, "Raw Development");
@@ -371,6 +399,7 @@ public class OlympusMakernoteDirectory extends Directory
         _tagNameMap.put(TAG_IMAGE_PROCESSING, "Image Processing");
         _tagNameMap.put(TAG_FOCUS_INFO, "Focus Info");
         _tagNameMap.put(TAG_RAW_INFO, "Raw Info");
+        _tagNameMap.put(TAG_MAIN_INFO, "Main Info");
 
         _tagNameMap.put(CameraSettings.TAG_EXPOSURE_MODE, "Exposure Mode");
         _tagNameMap.put(CameraSettings.TAG_FLASH_MODE, "Flash Mode");
@@ -475,4 +504,334 @@ public class OlympusMakernoteDirectory extends Directory
     {
         return _tagNameMap;
     }
+
+    // <summary>
+    // These values are currently decoded only for Olympus models.  Models with
+    // Olympus-style maker notes from other brands such as Acer, BenQ, Hitachi, HP,
+    // Premier, Konica-Minolta, Maginon, Ricoh, Rollei, SeaLife, Sony, Supra,
+    // Vivitar are not listed.
+    // </summary>
+    // <remarks>
+    // Converted from Exiftool version 10.33 created by Phil Harvey
+    // http://www.sno.phy.queensu.ca/~phil/exiftool/
+    // lib\Image\ExifTool\Olympus.pm
+    // </remarks>
+    public static final HashMap<String, String> OlympusCameraTypes = new HashMap<String, String>();
+
+    static {
+        OlympusCameraTypes.put("D4028", "X-2,C-50Z");
+        OlympusCameraTypes.put("D4029", "E-20,E-20N,E-20P");
+        OlympusCameraTypes.put("D4034", "C720UZ");
+        OlympusCameraTypes.put("D4040", "E-1");
+        OlympusCameraTypes.put("D4041", "E-300");
+        OlympusCameraTypes.put("D4083", "C2Z,D520Z,C220Z");
+        OlympusCameraTypes.put("D4106", "u20D,S400D,u400D");
+        OlympusCameraTypes.put("D4120", "X-1");
+        OlympusCameraTypes.put("D4122", "u10D,S300D,u300D");
+        OlympusCameraTypes.put("D4125", "AZ-1");
+        OlympusCameraTypes.put("D4141", "C150,D390");
+        OlympusCameraTypes.put("D4193", "C-5000Z");
+        OlympusCameraTypes.put("D4194", "X-3,C-60Z");
+        OlympusCameraTypes.put("D4199", "u30D,S410D,u410D");
+        OlympusCameraTypes.put("D4205", "X450,D535Z,C370Z");
+        OlympusCameraTypes.put("D4210", "C160,D395");
+        OlympusCameraTypes.put("D4211", "C725UZ");
+        OlympusCameraTypes.put("D4213", "FerrariMODEL2003");
+        OlympusCameraTypes.put("D4216", "u15D");
+        OlympusCameraTypes.put("D4217", "u25D");
+        OlympusCameraTypes.put("D4220", "u-miniD,Stylus V");
+        OlympusCameraTypes.put("D4221", "u40D,S500,uD500");
+        OlympusCameraTypes.put("D4231", "FerrariMODEL2004");
+        OlympusCameraTypes.put("D4240", "X500,D590Z,C470Z");
+        OlympusCameraTypes.put("D4244", "uD800,S800");
+        OlympusCameraTypes.put("D4256", "u720SW,S720SW");
+        OlympusCameraTypes.put("D4261", "X600,D630,FE5500");
+        OlympusCameraTypes.put("D4262", "uD600,S600");
+        OlympusCameraTypes.put("D4301", "u810/S810"); // (yes, "/".  Olympus is not consistent in the notation)
+        OlympusCameraTypes.put("D4302", "u710,S710");
+        OlympusCameraTypes.put("D4303", "u700,S700");
+        OlympusCameraTypes.put("D4304", "FE100,X710");
+        OlympusCameraTypes.put("D4305", "FE110,X705");
+        OlympusCameraTypes.put("D4310", "FE-130,X-720");
+        OlympusCameraTypes.put("D4311", "FE-140,X-725");
+        OlympusCameraTypes.put("D4312", "FE150,X730");
+        OlympusCameraTypes.put("D4313", "FE160,X735");
+        OlympusCameraTypes.put("D4314", "u740,S740");
+        OlympusCameraTypes.put("D4315", "u750,S750");
+        OlympusCameraTypes.put("D4316", "u730/S730");
+        OlympusCameraTypes.put("D4317", "FE115,X715");
+        OlympusCameraTypes.put("D4321", "SP550UZ");
+        OlympusCameraTypes.put("D4322", "SP510UZ");
+        OlympusCameraTypes.put("D4324", "FE170,X760");
+        OlympusCameraTypes.put("D4326", "FE200");
+        OlympusCameraTypes.put("D4327", "FE190/X750"); // (also SX876)
+        OlympusCameraTypes.put("D4328", "u760,S760");
+        OlympusCameraTypes.put("D4330", "FE180/X745"); // (also SX875)
+        OlympusCameraTypes.put("D4331", "u1000/S1000");
+        OlympusCameraTypes.put("D4332", "u770SW,S770SW");
+        OlympusCameraTypes.put("D4333", "FE240/X795");
+        OlympusCameraTypes.put("D4334", "FE210,X775");
+        OlympusCameraTypes.put("D4336", "FE230/X790");
+        OlympusCameraTypes.put("D4337", "FE220,X785");
+        OlympusCameraTypes.put("D4338", "u725SW,S725SW");
+        OlympusCameraTypes.put("D4339", "FE250/X800");
+        OlympusCameraTypes.put("D4341", "u780,S780");
+        OlympusCameraTypes.put("D4343", "u790SW,S790SW");
+        OlympusCameraTypes.put("D4344", "u1020,S1020");
+        OlympusCameraTypes.put("D4346", "FE15,X10");
+        OlympusCameraTypes.put("D4348", "FE280,X820,C520");
+        OlympusCameraTypes.put("D4349", "FE300,X830");
+        OlympusCameraTypes.put("D4350", "u820,S820");
+        OlympusCameraTypes.put("D4351", "u1200,S1200");
+        OlympusCameraTypes.put("D4352", "FE270,X815,C510");
+        OlympusCameraTypes.put("D4353", "u795SW,S795SW");
+        OlympusCameraTypes.put("D4354", "u1030SW,S1030SW");
+        OlympusCameraTypes.put("D4355", "SP560UZ");
+        OlympusCameraTypes.put("D4356", "u1010,S1010");
+        OlympusCameraTypes.put("D4357", "u830,S830");
+        OlympusCameraTypes.put("D4359", "u840,S840");
+        OlympusCameraTypes.put("D4360", "FE350WIDE,X865");
+        OlympusCameraTypes.put("D4361", "u850SW,S850SW");
+        OlympusCameraTypes.put("D4362", "FE340,X855,C560");
+        OlympusCameraTypes.put("D4363", "FE320,X835,C540");
+        OlympusCameraTypes.put("D4364", "SP570UZ");
+        OlympusCameraTypes.put("D4366", "FE330,X845,C550");
+        OlympusCameraTypes.put("D4368", "FE310,X840,C530");
+        OlympusCameraTypes.put("D4370", "u1050SW,S1050SW");
+        OlympusCameraTypes.put("D4371", "u1060,S1060");
+        OlympusCameraTypes.put("D4372", "FE370,X880,C575");
+        OlympusCameraTypes.put("D4374", "SP565UZ");
+        OlympusCameraTypes.put("D4377", "u1040,S1040");
+        OlympusCameraTypes.put("D4378", "FE360,X875,C570");
+        OlympusCameraTypes.put("D4379", "FE20,X15,C25");
+        OlympusCameraTypes.put("D4380", "uT6000,ST6000");
+        OlympusCameraTypes.put("D4381", "uT8000,ST8000");
+        OlympusCameraTypes.put("D4382", "u9000,S9000");
+        OlympusCameraTypes.put("D4384", "SP590UZ");
+        OlympusCameraTypes.put("D4385", "FE3010,X895");
+        OlympusCameraTypes.put("D4386", "FE3000,X890");
+        OlympusCameraTypes.put("D4387", "FE35,X30");
+        OlympusCameraTypes.put("D4388", "u550WP,S550WP");
+        OlympusCameraTypes.put("D4390", "FE5000,X905");
+        OlympusCameraTypes.put("D4391", "u5000");
+        OlympusCameraTypes.put("D4392", "u7000,S7000");
+        OlympusCameraTypes.put("D4396", "FE5010,X915");
+        OlympusCameraTypes.put("D4397", "FE25,X20");
+        OlympusCameraTypes.put("D4398", "FE45,X40");
+        OlympusCameraTypes.put("D4401", "XZ-1");
+        OlympusCameraTypes.put("D4402", "uT6010,ST6010");
+        OlympusCameraTypes.put("D4406", "u7010,S7010 / u7020,S7020");
+        OlympusCameraTypes.put("D4407", "FE4010,X930");
+        OlympusCameraTypes.put("D4408", "X560WP");
+        OlympusCameraTypes.put("D4409", "FE26,X21");
+        OlympusCameraTypes.put("D4410", "FE4000,X920,X925");
+        OlympusCameraTypes.put("D4411", "FE46,X41,X42");
+        OlympusCameraTypes.put("D4412", "FE5020,X935");
+        OlympusCameraTypes.put("D4413", "uTough-3000");
+        OlympusCameraTypes.put("D4414", "StylusTough-6020");
+        OlympusCameraTypes.put("D4415", "StylusTough-8010");
+        OlympusCameraTypes.put("D4417", "u5010,S5010");
+        OlympusCameraTypes.put("D4418", "u7040,S7040");
+        OlympusCameraTypes.put("D4419", "u9010,S9010");
+        OlympusCameraTypes.put("D4423", "FE4040");
+        OlympusCameraTypes.put("D4424", "FE47,X43");
+        OlympusCameraTypes.put("D4426", "FE4030,X950");
+        OlympusCameraTypes.put("D4428", "FE5030,X965,X960");
+        OlympusCameraTypes.put("D4430", "u7030,S7030");
+        OlympusCameraTypes.put("D4432", "SP600UZ");
+        OlympusCameraTypes.put("D4434", "SP800UZ");
+        OlympusCameraTypes.put("D4439", "FE4020,X940");
+        OlympusCameraTypes.put("D4442", "FE5035");
+        OlympusCameraTypes.put("D4448", "FE4050,X970");
+        OlympusCameraTypes.put("D4450", "FE5050,X985");
+        OlympusCameraTypes.put("D4454", "u-7050");
+        OlympusCameraTypes.put("D4464", "T10,X27");
+        OlympusCameraTypes.put("D4470", "FE5040,X980");
+        OlympusCameraTypes.put("D4472", "TG-310");
+        OlympusCameraTypes.put("D4474", "TG-610");
+        OlympusCameraTypes.put("D4476", "TG-810");
+        OlympusCameraTypes.put("D4478", "VG145,VG140,D715");
+        OlympusCameraTypes.put("D4479", "VG130,D710");
+        OlympusCameraTypes.put("D4480", "VG120,D705");
+        OlympusCameraTypes.put("D4482", "VR310,D720");
+        OlympusCameraTypes.put("D4484", "VR320,D725");
+        OlympusCameraTypes.put("D4486", "VR330,D730");
+        OlympusCameraTypes.put("D4488", "VG110,D700");
+        OlympusCameraTypes.put("D4490", "SP-610UZ");
+        OlympusCameraTypes.put("D4492", "SZ-10");
+        OlympusCameraTypes.put("D4494", "SZ-20");
+        OlympusCameraTypes.put("D4496", "SZ-30MR");
+        OlympusCameraTypes.put("D4498", "SP-810UZ");
+        OlympusCameraTypes.put("D4500", "SZ-11");
+        OlympusCameraTypes.put("D4504", "TG-615");
+        OlympusCameraTypes.put("D4508", "TG-620");
+        OlympusCameraTypes.put("D4510", "TG-820");
+        OlympusCameraTypes.put("D4512", "TG-1");
+        OlympusCameraTypes.put("D4516", "SH-21");
+        OlympusCameraTypes.put("D4519", "SZ-14");
+        OlympusCameraTypes.put("D4520", "SZ-31MR");
+        OlympusCameraTypes.put("D4521", "SH-25MR");
+        OlympusCameraTypes.put("D4523", "SP-720UZ");
+        OlympusCameraTypes.put("D4529", "VG170");
+        OlympusCameraTypes.put("D4531", "XZ-2");
+        OlympusCameraTypes.put("D4535", "SP-620UZ");
+        OlympusCameraTypes.put("D4536", "TG-320");
+        OlympusCameraTypes.put("D4537", "VR340,D750");
+        OlympusCameraTypes.put("D4538", "VG160,X990,D745");
+        OlympusCameraTypes.put("D4541", "SZ-12");
+        OlympusCameraTypes.put("D4545", "VH410");
+        OlympusCameraTypes.put("D4546", "XZ-10"); //IB
+        OlympusCameraTypes.put("D4547", "TG-2");
+        OlympusCameraTypes.put("D4548", "TG-830");
+        OlympusCameraTypes.put("D4549", "TG-630");
+        OlympusCameraTypes.put("D4550", "SH-50");
+        OlympusCameraTypes.put("D4553", "SZ-16,DZ-105");
+        OlympusCameraTypes.put("D4562", "SP-820UZ");
+        OlympusCameraTypes.put("D4566", "SZ-15");
+        OlympusCameraTypes.put("D4572", "STYLUS1");
+        OlympusCameraTypes.put("D4574", "TG-3");
+        OlympusCameraTypes.put("D4575", "TG-850");
+        OlympusCameraTypes.put("D4579", "SP-100EE");
+        OlympusCameraTypes.put("D4580", "SH-60");
+        OlympusCameraTypes.put("D4581", "SH-1");
+        OlympusCameraTypes.put("D4582", "TG-835");
+        OlympusCameraTypes.put("D4585", "SH-2 / SH-3");
+        OlympusCameraTypes.put("D4586", "TG-4");
+        OlympusCameraTypes.put("D4587", "TG-860");
+        OlympusCameraTypes.put("D4591", "TG-870");
+        OlympusCameraTypes.put("D4809", "C2500L");
+        OlympusCameraTypes.put("D4842", "E-10");
+        OlympusCameraTypes.put("D4856", "C-1");
+        OlympusCameraTypes.put("D4857", "C-1Z,D-150Z");
+        OlympusCameraTypes.put("DCHC", "D500L");
+        OlympusCameraTypes.put("DCHT", "D600L / D620L");
+        OlympusCameraTypes.put("K0055", "AIR-A01");
+        OlympusCameraTypes.put("S0003", "E-330");
+        OlympusCameraTypes.put("S0004", "E-500");
+        OlympusCameraTypes.put("S0009", "E-400");
+        OlympusCameraTypes.put("S0010", "E-510");
+        OlympusCameraTypes.put("S0011", "E-3");
+        OlympusCameraTypes.put("S0013", "E-410");
+        OlympusCameraTypes.put("S0016", "E-420");
+        OlympusCameraTypes.put("S0017", "E-30");
+        OlympusCameraTypes.put("S0018", "E-520");
+        OlympusCameraTypes.put("S0019", "E-P1");
+        OlympusCameraTypes.put("S0023", "E-620");
+        OlympusCameraTypes.put("S0026", "E-P2");
+        OlympusCameraTypes.put("S0027", "E-PL1");
+        OlympusCameraTypes.put("S0029", "E-450");
+        OlympusCameraTypes.put("S0030", "E-600");
+        OlympusCameraTypes.put("S0032", "E-P3");
+        OlympusCameraTypes.put("S0033", "E-5");
+        OlympusCameraTypes.put("S0034", "E-PL2");
+        OlympusCameraTypes.put("S0036", "E-M5");
+        OlympusCameraTypes.put("S0038", "E-PL3");
+        OlympusCameraTypes.put("S0039", "E-PM1");
+        OlympusCameraTypes.put("S0040", "E-PL1s");
+        OlympusCameraTypes.put("S0042", "E-PL5");
+        OlympusCameraTypes.put("S0043", "E-PM2");
+        OlympusCameraTypes.put("S0044", "E-P5");
+        OlympusCameraTypes.put("S0045", "E-PL6");
+        OlympusCameraTypes.put("S0046", "E-PL7"); //IB
+        OlympusCameraTypes.put("S0047", "E-M1");
+        OlympusCameraTypes.put("S0051", "E-M10");
+        OlympusCameraTypes.put("S0052", "E-M5MarkII"); //IB
+        OlympusCameraTypes.put("S0059", "E-M10MarkII");
+        OlympusCameraTypes.put("S0061", "PEN-F"); //forum7005
+        OlympusCameraTypes.put("S0065", "E-PL8");
+        OlympusCameraTypes.put("S0067", "E-M1MarkII");
+        OlympusCameraTypes.put("SR45", "D220");
+        OlympusCameraTypes.put("SR55", "D320L");
+        OlympusCameraTypes.put("SR83", "D340L");
+        OlympusCameraTypes.put("SR85", "C830L,D340R");
+        OlympusCameraTypes.put("SR852", "C860L,D360L");
+        OlympusCameraTypes.put("SR872", "C900Z,D400Z");
+        OlympusCameraTypes.put("SR874", "C960Z,D460Z");
+        OlympusCameraTypes.put("SR951", "C2000Z");
+        OlympusCameraTypes.put("SR952", "C21");
+        OlympusCameraTypes.put("SR953", "C21T.commu");
+        OlympusCameraTypes.put("SR954", "C2020Z");
+        OlympusCameraTypes.put("SR955", "C990Z,D490Z");
+        OlympusCameraTypes.put("SR956", "C211Z");
+        OlympusCameraTypes.put("SR959", "C990ZS,D490Z");
+        OlympusCameraTypes.put("SR95A", "C2100UZ");
+        OlympusCameraTypes.put("SR971", "C100,D370");
+        OlympusCameraTypes.put("SR973", "C2,D230");
+        OlympusCameraTypes.put("SX151", "E100RS");
+        OlympusCameraTypes.put("SX351", "C3000Z / C3030Z");
+        OlympusCameraTypes.put("SX354", "C3040Z");
+        OlympusCameraTypes.put("SX355", "C2040Z");
+        OlympusCameraTypes.put("SX357", "C700UZ");
+        OlympusCameraTypes.put("SX358", "C200Z,D510Z");
+        OlympusCameraTypes.put("SX374", "C3100Z,C3020Z");
+        OlympusCameraTypes.put("SX552", "C4040Z");
+        OlympusCameraTypes.put("SX553", "C40Z,D40Z");
+        OlympusCameraTypes.put("SX556", "C730UZ");
+        OlympusCameraTypes.put("SX558", "C5050Z");
+        OlympusCameraTypes.put("SX571", "C120,D380");
+        OlympusCameraTypes.put("SX574", "C300Z,D550Z");
+        OlympusCameraTypes.put("SX575", "C4100Z,C4000Z");
+        OlympusCameraTypes.put("SX751", "X200,D560Z,C350Z");
+        OlympusCameraTypes.put("SX752", "X300,D565Z,C450Z");
+        OlympusCameraTypes.put("SX753", "C750UZ");
+        OlympusCameraTypes.put("SX754", "C740UZ");
+        OlympusCameraTypes.put("SX755", "C755UZ");
+        OlympusCameraTypes.put("SX756", "C5060WZ");
+        OlympusCameraTypes.put("SX757", "C8080WZ");
+        OlympusCameraTypes.put("SX758", "X350,D575Z,C360Z");
+        OlympusCameraTypes.put("SX759", "X400,D580Z,C460Z");
+        OlympusCameraTypes.put("SX75A", "AZ-2ZOOM");
+        OlympusCameraTypes.put("SX75B", "D595Z,C500Z");
+        OlympusCameraTypes.put("SX75C", "X550,D545Z,C480Z");
+        OlympusCameraTypes.put("SX75D", "IR-300");
+        OlympusCameraTypes.put("SX75F", "C55Z,C5500Z");
+        OlympusCameraTypes.put("SX75G", "C170,D425");
+        OlympusCameraTypes.put("SX75J", "C180,D435");
+        OlympusCameraTypes.put("SX771", "C760UZ");
+        OlympusCameraTypes.put("SX772", "C770UZ");
+        OlympusCameraTypes.put("SX773", "C745UZ");
+        OlympusCameraTypes.put("SX774", "X250,D560Z,C350Z");
+        OlympusCameraTypes.put("SX775", "X100,D540Z,C310Z");
+        OlympusCameraTypes.put("SX776", "C460ZdelSol");
+        OlympusCameraTypes.put("SX777", "C765UZ");
+        OlympusCameraTypes.put("SX77A", "D555Z,C315Z");
+        OlympusCameraTypes.put("SX851", "C7070WZ");
+        OlympusCameraTypes.put("SX852", "C70Z,C7000Z");
+        OlympusCameraTypes.put("SX853", "SP500UZ");
+        OlympusCameraTypes.put("SX854", "SP310");
+        OlympusCameraTypes.put("SX855", "SP350");
+        OlympusCameraTypes.put("SX873", "SP320");
+        OlympusCameraTypes.put("SX875", "FE180/X745"); // (also D4330)
+        OlympusCameraTypes.put("SX876", "FE190/X750"); // (also D4327)
+
+        //   other brands
+        //    4MP9Q3", "Camera 4MP-9Q3'
+        //    4MP9T2", "BenQ DC C420 / Camera 4MP-9T2'
+        //    5MP9Q3", "Camera 5MP-9Q3" },
+        //    5MP9X9", "Camera 5MP-9X9" },
+        //   '5MP-9T'=> 'Camera 5MP-9T3" },
+        //   '5MP-9Y'=> 'Camera 5MP-9Y2" },
+        //   '6MP-9U'=> 'Camera 6MP-9U9" },
+        //    7MP9Q3", "Camera 7MP-9Q3" },
+        //   '8MP-9U'=> 'Camera 8MP-9U4" },
+        //    CE5330", "Acer CE-5330" },
+        //   'CP-853'=> 'Acer CP-8531" },
+        //    CS5531", "Acer CS5531" },
+        //    DC500 ", "SeaLife DC500" },
+        //    DC7370", "Camera 7MP-9GA" },
+        //    DC7371", "Camera 7MP-9GM" },
+        //    DC7371", "Hitachi HDC-751E" },
+        //    DC7375", "Hitachi HDC-763E / Rollei RCP-7330X / Ricoh Caplio RR770 / Vivitar ViviCam 7330" },
+        //   'DC E63'=> 'BenQ DC E63+" },
+        //   'DC P86'=> 'BenQ DC P860" },
+        //    DS5340", "Maginon Performic S5 / Premier 5MP-9M7" },
+        //    DS5341", "BenQ E53+ / Supra TCM X50 / Maginon X50 / Premier 5MP-9P8" },
+        //    DS5346", "Premier 5MP-9Q2" },
+        //    E500  ", "Konica Minolta DiMAGE E500" },
+        //    MAGINO", "Maginon X60" },
+        //    Mz60  ", "HP Photosmart Mz60" },
+        //    Q3DIGI", "Camera 5MP-9Q3" },
+        //    SLIMLI", "Supra Slimline X6" },
+        //    V8300s", "Vivitar V8300s" },
+    }
 }
diff --git a/src/com/drew/metadata/exif/makernotes/OlympusRawDevelopment2MakernoteDescriptor.java b/src/com/drew/metadata/exif/makernotes/OlympusRawDevelopment2MakernoteDescriptor.java
new file mode 100644
index 0000000..90743fa
--- /dev/null
+++ b/src/com/drew/metadata/exif/makernotes/OlympusRawDevelopment2MakernoteDescriptor.java
@@ -0,0 +1,230 @@
+/*
+ * Copyright 2002-2015 Drew Noakes
+ *
+ *    Licensed under the Apache License, Version 2.0 (the "License");
+ *    you may not use this file except in compliance with the License.
+ *    You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing, software
+ *    distributed under the License is distributed on an "AS IS" BASIS,
+ *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *    See the License for the specific language governing permissions and
+ *    limitations under the License.
+ *
+ * More information about this project is available at:
+ *
+ *    https://drewnoakes.com/code/exif/
+ *    https://github.com/drewnoakes/metadata-extractor
+ */
+package com.drew.metadata.exif.makernotes;
+
+import com.drew.lang.annotations.NotNull;
+import com.drew.lang.annotations.Nullable;
+import com.drew.metadata.TagDescriptor;
+
+import java.util.HashMap;
+
+import static com.drew.metadata.exif.makernotes.OlympusRawDevelopment2MakernoteDirectory.*;
+
+/**
+ * Provides human-readable String representations of tag values stored in a {@link OlympusRawDevelopment2MakernoteDirectory}.
+ * <p>
+ * Some Description functions converted from Exiftool version 10.10 created by Phil Harvey
+ * http://www.sno.phy.queensu.ca/~phil/exiftool/
+ * lib\Image\ExifTool\Olympus.pm
+ *
+ * @author Kevin Mott https://github.com/kwhopper
+ * @author Drew Noakes https://drewnoakes.com
+ */
+ at SuppressWarnings("WeakerAccess")
+public class OlympusRawDevelopment2MakernoteDescriptor extends TagDescriptor<OlympusRawDevelopment2MakernoteDirectory>
+{
+    public OlympusRawDevelopment2MakernoteDescriptor(@NotNull OlympusRawDevelopment2MakernoteDirectory directory)
+    {
+        super(directory);
+    }
+
+    @Override
+    @Nullable
+    public String getDescription(int tagType)
+    {
+        switch (tagType) {
+            case TagRawDevVersion:
+                return getRawDevVersionDescription();
+            case TagRawDevExposureBiasValue:
+                return getRawDevExposureBiasValueDescription();
+            case TagRawDevColorSpace:
+                return getRawDevColorSpaceDescription();
+            case TagRawDevNoiseReduction:
+                return getRawDevNoiseReductionDescription();
+            case TagRawDevEngine:
+                return getRawDevEngineDescription();
+            case TagRawDevPictureMode:
+                return getRawDevPictureModeDescription();
+            case TagRawDevPmBwFilter:
+                return getRawDevPmBwFilterDescription();
+            case TagRawDevPmPictureTone:
+                return getRawDevPmPictureToneDescription();
+            case TagRawDevArtFilter:
+                return getRawDevArtFilterDescription();
+            default:
+                return super.getDescription(tagType);
+        }
+    }
+
+    @Nullable
+    public String getRawDevVersionDescription()
+    {
+        return getVersionBytesDescription(TagRawDevVersion, 4);
+    }
+
+    @Nullable
+    public String getRawDevExposureBiasValueDescription()
+    {
+        return getIndexedDescription(TagRawDevExposureBiasValue,
+                1, "Color Temperature", "Gray Point");
+    }
+
+    @Nullable
+    public String getRawDevColorSpaceDescription()
+    {
+        return getIndexedDescription(TagRawDevColorSpace,
+            "sRGB", "Adobe RGB", "Pro Photo RGB");
+    }
+
+    @Nullable
+    public String getRawDevNoiseReductionDescription()
+    {
+        Integer value = _directory.getInteger(TagRawDevNoiseReduction);
+        if (value == null)
+            return null;
+
+        if (value == 0)
+            return "(none)";
+
+        StringBuilder sb = new StringBuilder();
+        int v = value;
+
+        if ((v        & 1) != 0) sb.append("Noise Reduction, ");
+        if (((v >> 1) & 1) != 0) sb.append("Noise Filter, ");
+        if (((v >> 2) & 1) != 0) sb.append("Noise Filter (ISO Boost), ");
+
+        return sb.substring(0, sb.length() - 2);
+    }
+
+    @Nullable
+    public String getRawDevEngineDescription()
+    {
+        return getIndexedDescription(TagRawDevEngine,
+            "High Speed", "High Function", "Advanced High Speed", "Advanced High Function");
+    }
+
+    @Nullable
+    public String getRawDevPictureModeDescription()
+    {
+        Integer value = _directory.getInteger(TagRawDevPictureMode);
+        if (value == null)
+            return null;
+
+        switch (value)
+        {
+            case 1:
+                return "Vivid";
+            case 2:
+                return "Natural";
+            case 3:
+                return "Muted";
+            case 256:
+                return "Monotone";
+            case 512:
+                return "Sepia";
+            default:
+                return "Unknown (" + value + ")";
+        }
+    }
+
+    @Nullable
+    public String getRawDevPmBwFilterDescription()
+    {
+        return getIndexedDescription(TagRawDevPmBwFilter,
+            "Neutral", "Yellow", "Orange", "Red", "Green");
+    }
+
+    @Nullable
+    public String getRawDevPmPictureToneDescription()
+    {
+        return getIndexedDescription(TagRawDevPmPictureTone,
+            "Neutral", "Sepia", "Blue", "Purple", "Green");
+    }
+
+    @Nullable
+    public String getRawDevArtFilterDescription()
+    {
+        return getFilterDescription(TagRawDevArtFilter);
+    }
+
+    @Nullable
+    public String getFilterDescription(int tag)
+    {
+        int[] values = _directory.getIntArray(tag);
+        if (values == null || values.length == 0)
+            return null;
+
+        StringBuilder sb = new StringBuilder();
+        for (int i = 0; i < values.length; i++) {
+            if (i == 0)
+                sb.append(_filters.containsKey(values[i]) ? _filters.get(values[i]) : "[unknown]");
+            else
+                sb.append(values[i]).append("; ");
+            sb.append("; ");
+        }
+
+        return sb.substring(0, sb.length() - 2);
+    }
+
+    // RawDevArtFilter values
+    private static final HashMap<Integer, String> _filters = new HashMap<Integer, String>();
+
+    static {
+        _filters.put(0, "Off");
+        _filters.put(1, "Soft Focus");
+        _filters.put(2, "Pop Art");
+        _filters.put(3, "Pale & Light Color");
+        _filters.put(4, "Light Tone");
+        _filters.put(5, "Pin Hole");
+        _filters.put(6, "Grainy Film");
+        _filters.put(9, "Diorama");
+        _filters.put(10, "Cross Process");
+        _filters.put(12, "Fish Eye");
+        _filters.put(13, "Drawing");
+        _filters.put(14, "Gentle Sepia");
+        _filters.put(15, "Pale & Light Color II");
+        _filters.put(16, "Pop Art II");
+        _filters.put(17, "Pin Hole II");
+        _filters.put(18, "Pin Hole III");
+        _filters.put(19, "Grainy Film II");
+        _filters.put(20, "Dramatic Tone");
+        _filters.put(21, "Punk");
+        _filters.put(22, "Soft Focus 2");
+        _filters.put(23, "Sparkle");
+        _filters.put(24, "Watercolor");
+        _filters.put(25, "Key Line");
+        _filters.put(26, "Key Line II");
+        _filters.put(27, "Miniature");
+        _filters.put(28, "Reflection");
+        _filters.put(29, "Fragmented");
+        _filters.put(31, "Cross Process II");
+        _filters.put(32, "Dramatic Tone II");
+        _filters.put(33, "Watercolor I");
+        _filters.put(34, "Watercolor II");
+        _filters.put(35, "Diorama II");
+        _filters.put(36, "Vintage");
+        _filters.put(37, "Vintage II");
+        _filters.put(38, "Vintage III");
+        _filters.put(39, "Partial Color");
+        _filters.put(40, "Partial Color II");
+        _filters.put(41, "Partial Color III");
+    }
+}
diff --git a/src/com/drew/metadata/exif/makernotes/OlympusRawDevelopment2MakernoteDirectory.java b/src/com/drew/metadata/exif/makernotes/OlympusRawDevelopment2MakernoteDirectory.java
new file mode 100644
index 0000000..e25b8b1
--- /dev/null
+++ b/src/com/drew/metadata/exif/makernotes/OlympusRawDevelopment2MakernoteDirectory.java
@@ -0,0 +1,111 @@
+/*
+ * Copyright 2002-2015 Drew Noakes
+ *
+ *    Licensed under the Apache License, Version 2.0 (the "License");
+ *    you may not use this file except in compliance with the License.
+ *    You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing, software
+ *    distributed under the License is distributed on an "AS IS" BASIS,
+ *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *    See the License for the specific language governing permissions and
+ *    limitations under the License.
+ *
+ * More information about this project is available at:
+ *
+ *    https://drewnoakes.com/code/exif/
+ *    https://github.com/drewnoakes/metadata-extractor
+ */
+package com.drew.metadata.exif.makernotes;
+
+import com.drew.lang.annotations.NotNull;
+import com.drew.metadata.Directory;
+
+import java.util.HashMap;
+
+/**
+ * The Olympus raw development 2 makernote is used by many manufacturers (Epson, Konica, Minolta and Agfa...), and as such contains some tags
+ * that appear specific to those manufacturers.
+ *
+ * @author Kevin Mott https://github.com/kwhopper
+ * @author Drew Noakes https://drewnoakes.com
+ */
+ at SuppressWarnings("WeakerAccess")
+public class OlympusRawDevelopment2MakernoteDirectory extends Directory
+{    
+    public static final int TagRawDevVersion = 0x0000;
+    public static final int TagRawDevExposureBiasValue = 0x0100;
+    public static final int TagRawDevWhiteBalance = 0x0101;
+    public static final int TagRawDevWhiteBalanceValue = 0x0102;
+    public static final int TagRawDevWbFineAdjustment = 0x0103;
+    public static final int TagRawDevGrayPoint = 0x0104;
+    public static final int TagRawDevContrastValue = 0x0105;
+    public static final int TagRawDevSharpnessValue = 0x0106;
+    public static final int TagRawDevSaturationEmphasis = 0x0107;
+    public static final int TagRawDevMemoryColorEmphasis = 0x0108;
+    public static final int TagRawDevColorSpace = 0x0109;
+    public static final int TagRawDevNoiseReduction = 0x010a;
+    public static final int TagRawDevEngine = 0x010b;
+    public static final int TagRawDevPictureMode = 0x010c;
+    public static final int TagRawDevPmSaturation = 0x010d;
+    public static final int TagRawDevPmContrast = 0x010e;
+    public static final int TagRawDevPmSharpness = 0x010f;
+    public static final int TagRawDevPmBwFilter = 0x0110;
+    public static final int TagRawDevPmPictureTone = 0x0111;
+    public static final int TagRawDevGradation = 0x0112;
+    public static final int TagRawDevSaturation3 = 0x0113;
+    public static final int TagRawDevAutoGradation = 0x0119;
+    public static final int TagRawDevPmNoiseFilter = 0x0120;
+    public static final int TagRawDevArtFilter = 0x0121;
+
+    @NotNull
+    protected static final HashMap<Integer, String> _tagNameMap = new HashMap<Integer, String>();
+
+    static {        
+        _tagNameMap.put(TagRawDevVersion, "Raw Dev Version");
+        _tagNameMap.put(TagRawDevExposureBiasValue, "Raw Dev Exposure Bias Value");
+        _tagNameMap.put(TagRawDevWhiteBalance, "Raw Dev White Balance");
+        _tagNameMap.put(TagRawDevWhiteBalanceValue, "Raw Dev White Balance Value");
+        _tagNameMap.put(TagRawDevWbFineAdjustment, "Raw Dev WB Fine Adjustment");
+        _tagNameMap.put(TagRawDevGrayPoint, "Raw Dev Gray Point");
+        _tagNameMap.put(TagRawDevContrastValue, "Raw Dev Contrast Value");
+        _tagNameMap.put(TagRawDevSharpnessValue, "Raw Dev Sharpness Value");
+        _tagNameMap.put(TagRawDevSaturationEmphasis, "Raw Dev Saturation Emphasis");
+        _tagNameMap.put(TagRawDevMemoryColorEmphasis, "Raw Dev Memory Color Emphasis");
+        _tagNameMap.put(TagRawDevColorSpace, "Raw Dev Color Space");
+        _tagNameMap.put(TagRawDevNoiseReduction, "Raw Dev Noise Reduction");
+        _tagNameMap.put(TagRawDevEngine, "Raw Dev Engine");
+        _tagNameMap.put(TagRawDevPictureMode, "Raw Dev Picture Mode");
+        _tagNameMap.put(TagRawDevPmSaturation, "Raw Dev PM Saturation");
+        _tagNameMap.put(TagRawDevPmContrast, "Raw Dev PM Contrast");
+        _tagNameMap.put(TagRawDevPmSharpness, "Raw Dev PM Sharpness");
+        _tagNameMap.put(TagRawDevPmBwFilter, "Raw Dev PM BW Filter");
+        _tagNameMap.put(TagRawDevPmPictureTone, "Raw Dev PM Picture Tone");
+        _tagNameMap.put(TagRawDevGradation, "Raw Dev Gradation");
+        _tagNameMap.put(TagRawDevSaturation3, "Raw Dev Saturation 3");
+        _tagNameMap.put(TagRawDevAutoGradation, "Raw Dev Auto Gradation");
+        _tagNameMap.put(TagRawDevPmNoiseFilter, "Raw Dev PM Noise Filter");
+        _tagNameMap.put(TagRawDevArtFilter, "Raw Dev Art Filter");
+    }
+
+    public OlympusRawDevelopment2MakernoteDirectory()
+    {
+        this.setDescriptor(new OlympusRawDevelopment2MakernoteDescriptor(this));
+    }
+
+    @Override
+    @NotNull
+    public String getName()
+    {
+        return "Olympus Raw Development 2";
+    }
+
+    @Override
+    @NotNull
+    protected HashMap<Integer, String> getTagNameMap()
+    {
+        return _tagNameMap;
+    }
+}
diff --git a/src/com/drew/metadata/exif/makernotes/OlympusRawDevelopmentMakernoteDescriptor.java b/src/com/drew/metadata/exif/makernotes/OlympusRawDevelopmentMakernoteDescriptor.java
new file mode 100644
index 0000000..d7c88c4
--- /dev/null
+++ b/src/com/drew/metadata/exif/makernotes/OlympusRawDevelopmentMakernoteDescriptor.java
@@ -0,0 +1,155 @@
+/*
+ * Copyright 2002-2015 Drew Noakes
+ *
+ *    Licensed under the Apache License, Version 2.0 (the "License");
+ *    you may not use this file except in compliance with the License.
+ *    You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing, software
+ *    distributed under the License is distributed on an "AS IS" BASIS,
+ *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *    See the License for the specific language governing permissions and
+ *    limitations under the License.
+ *
+ * More information about this project is available at:
+ *
+ *    https://drewnoakes.com/code/exif/
+ *    https://github.com/drewnoakes/metadata-extractor
+ */
+package com.drew.metadata.exif.makernotes;
+
+import com.drew.lang.annotations.NotNull;
+import com.drew.lang.annotations.Nullable;
+import com.drew.metadata.TagDescriptor;
+
+import static com.drew.metadata.exif.makernotes.OlympusRawDevelopmentMakernoteDirectory.*;
+
+/**
+ * Provides human-readable String representations of tag values stored in a {@link OlympusRawDevelopmentMakernoteDirectory}.
+ * <p>
+ * Some Description functions converted from Exiftool version 10.10 created by Phil Harvey
+ * http://www.sno.phy.queensu.ca/~phil/exiftool/
+ * lib\Image\ExifTool\Olympus.pm
+ *
+ * @author Kevin Mott https://github.com/kwhopper
+ * @author Drew Noakes https://drewnoakes.com
+ */
+ at SuppressWarnings("WeakerAccess")
+public class OlympusRawDevelopmentMakernoteDescriptor extends TagDescriptor<OlympusRawDevelopmentMakernoteDirectory>
+{
+    public OlympusRawDevelopmentMakernoteDescriptor(@NotNull OlympusRawDevelopmentMakernoteDirectory directory)
+    {
+        super(directory);
+    }
+
+    @Override
+    @Nullable
+    public String getDescription(int tagType)
+    {
+        switch (tagType) {
+            case TagRawDevVersion:
+                return getRawDevVersionDescription();
+            case TagRawDevColorSpace:
+                return getRawDevColorSpaceDescription();
+            case TagRawDevEngine:
+                return getRawDevEngineDescription();
+            case TagRawDevNoiseReduction:
+                return getRawDevNoiseReductionDescription();
+            case TagRawDevEditStatus:
+                return getRawDevEditStatusDescription();
+            case TagRawDevSettings:
+                return getRawDevSettingsDescription();
+            default:
+                return super.getDescription(tagType);
+        }
+    }
+
+    @Nullable
+    public String getRawDevVersionDescription()
+    {
+        return getVersionBytesDescription(TagRawDevVersion, 4);
+    }
+
+    @Nullable
+    public String getRawDevColorSpaceDescription()
+    {
+        return getIndexedDescription(TagRawDevColorSpace,
+            "sRGB", "Adobe RGB", "Pro Photo RGB");
+    }
+
+    @Nullable
+    public String getRawDevEngineDescription()
+    {
+        return getIndexedDescription(TagRawDevEngine,
+            "High Speed", "High Function", "Advanced High Speed", "Advanced High Function");
+    }
+
+    @Nullable
+    public String getRawDevNoiseReductionDescription()
+    {
+        Integer value = _directory.getInteger(TagRawDevNoiseReduction);
+        if (value == null)
+            return null;
+
+        if (value == 0)
+            return "(none)";
+
+        StringBuilder sb = new StringBuilder();
+        int v = value;
+
+        if ((v        & 1) != 0) sb.append("Noise Reduction, ");
+        if (((v >> 1) & 1) != 0) sb.append("Noise Filter, ");
+        if (((v >> 2) & 1) != 0) sb.append("Noise Filter (ISO Boost), ");
+
+        return sb.substring(0, sb.length() - 2);
+    }
+
+    @Nullable
+    public String getRawDevEditStatusDescription()
+    {
+        Integer value = _directory.getInteger(TagRawDevEditStatus);
+        if (value == null)
+            return null;
+
+        switch (value)
+        {
+            case 0:
+                return "Original";
+            case 1:
+                return "Edited (Landscape)";
+            case 6:
+            case 8:
+                return "Edited (Portrait)";
+            default:
+                return "Unknown (" + value + ")";
+        }
+    }
+
+    @Nullable
+    public String getRawDevSettingsDescription()
+    {
+        Integer value = _directory.getInteger(TagRawDevSettings);
+        if (value == null)
+            return null;
+
+        if (value == 0)
+            return "(none)";
+
+        StringBuilder sb = new StringBuilder();
+        int v = value;
+
+        if ((v        & 1) != 0) sb.append("WB Color Temp, ");
+        if (((v >> 1) & 1) != 0) sb.append("WB Gray Point, ");
+        if (((v >> 2) & 1) != 0) sb.append("Saturation, ");
+        if (((v >> 3) & 1) != 0) sb.append("Contrast, ");
+        if (((v >> 4) & 1) != 0) sb.append("Sharpness, ");
+        if (((v >> 5) & 1) != 0) sb.append("Color Space, ");
+        if (((v >> 6) & 1) != 0) sb.append("High Function, ");
+        if (((v >> 7) & 1) != 0) sb.append("Noise Reduction, ");
+
+        return sb.substring(0, sb.length() - 2);
+    }
+
+}
diff --git a/src/com/drew/metadata/exif/makernotes/OlympusRawDevelopmentMakernoteDirectory.java b/src/com/drew/metadata/exif/makernotes/OlympusRawDevelopmentMakernoteDirectory.java
new file mode 100644
index 0000000..13ec7e5
--- /dev/null
+++ b/src/com/drew/metadata/exif/makernotes/OlympusRawDevelopmentMakernoteDirectory.java
@@ -0,0 +1,91 @@
+/*
+ * Copyright 2002-2015 Drew Noakes
+ *
+ *    Licensed under the Apache License, Version 2.0 (the "License");
+ *    you may not use this file except in compliance with the License.
+ *    You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing, software
+ *    distributed under the License is distributed on an "AS IS" BASIS,
+ *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *    See the License for the specific language governing permissions and
+ *    limitations under the License.
+ *
+ * More information about this project is available at:
+ *
+ *    https://drewnoakes.com/code/exif/
+ *    https://github.com/drewnoakes/metadata-extractor
+ */
+package com.drew.metadata.exif.makernotes;
+
+import com.drew.lang.annotations.NotNull;
+import com.drew.metadata.Directory;
+
+import java.util.HashMap;
+
+/**
+ * The Olympus raw development makernote is used by many manufacturers (Epson, Konica, Minolta and Agfa...), and as such contains some tags
+ * that appear specific to those manufacturers.
+ *
+ * @author Kevin Mott https://github.com/kwhopper
+ * @author Drew Noakes https://drewnoakes.com
+ */
+ at SuppressWarnings("WeakerAccess")
+public class OlympusRawDevelopmentMakernoteDirectory extends Directory
+{
+    public static final int TagRawDevVersion = 0x0000;
+    public static final int TagRawDevExposureBiasValue = 0x0100;
+    public static final int TagRawDevWhiteBalanceValue = 0x0101;
+    public static final int TagRawDevWbFineAdjustment = 0x0102;
+    public static final int TagRawDevGrayPoint = 0x0103;
+    public static final int TagRawDevSaturationEmphasis = 0x0104;
+    public static final int TagRawDevMemoryColorEmphasis = 0x0105;
+    public static final int TagRawDevContrastValue = 0x0106;
+    public static final int TagRawDevSharpnessValue = 0x0107;
+    public static final int TagRawDevColorSpace = 0x0108;
+    public static final int TagRawDevEngine = 0x0109;
+    public static final int TagRawDevNoiseReduction = 0x010a;
+    public static final int TagRawDevEditStatus = 0x010b;
+    public static final int TagRawDevSettings = 0x010c;
+
+    @NotNull
+    protected static final HashMap<Integer, String> _tagNameMap = new HashMap<Integer, String>();
+
+    static {
+        _tagNameMap.put(TagRawDevVersion, "Raw Dev Version");
+        _tagNameMap.put(TagRawDevExposureBiasValue, "Raw Dev Exposure Bias Value");
+        _tagNameMap.put(TagRawDevWhiteBalanceValue, "Raw Dev White Balance Value");
+        _tagNameMap.put(TagRawDevWbFineAdjustment, "Raw Dev WB Fine Adjustment");
+        _tagNameMap.put(TagRawDevGrayPoint, "Raw Dev Gray Point");
+        _tagNameMap.put(TagRawDevSaturationEmphasis, "Raw Dev Saturation Emphasis");
+        _tagNameMap.put(TagRawDevMemoryColorEmphasis, "Raw Dev Memory Color Emphasis");
+        _tagNameMap.put(TagRawDevContrastValue, "Raw Dev Contrast Value");
+        _tagNameMap.put(TagRawDevSharpnessValue, "Raw Dev Sharpness Value");
+        _tagNameMap.put(TagRawDevColorSpace, "Raw Dev Color Space");
+        _tagNameMap.put(TagRawDevEngine, "Raw Dev Engine");
+        _tagNameMap.put(TagRawDevNoiseReduction, "Raw Dev Noise Reduction");
+        _tagNameMap.put(TagRawDevEditStatus, "Raw Dev Edit Status");
+        _tagNameMap.put(TagRawDevSettings, "Raw Dev Settings");
+    }
+
+    public OlympusRawDevelopmentMakernoteDirectory()
+    {
+        this.setDescriptor(new OlympusRawDevelopmentMakernoteDescriptor(this));
+    }
+
+    @Override
+    @NotNull
+    public String getName()
+    {
+        return "Olympus Raw Development";
+    }
+
+    @Override
+    @NotNull
+    protected HashMap<Integer, String> getTagNameMap()
+    {
+        return _tagNameMap;
+    }
+}
diff --git a/src/com/drew/metadata/exif/makernotes/OlympusRawInfoMakernoteDescriptor.java b/src/com/drew/metadata/exif/makernotes/OlympusRawInfoMakernoteDescriptor.java
new file mode 100644
index 0000000..aac65ae
--- /dev/null
+++ b/src/com/drew/metadata/exif/makernotes/OlympusRawInfoMakernoteDescriptor.java
@@ -0,0 +1,141 @@
+/*
+ * Copyright 2002-2015 Drew Noakes
+ *
+ *    Licensed under the Apache License, Version 2.0 (the "License");
+ *    you may not use this file except in compliance with the License.
+ *    You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing, software
+ *    distributed under the License is distributed on an "AS IS" BASIS,
+ *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *    See the License for the specific language governing permissions and
+ *    limitations under the License.
+ *
+ * More information about this project is available at:
+ *
+ *    https://drewnoakes.com/code/exif/
+ *    https://github.com/drewnoakes/metadata-extractor
+ */
+package com.drew.metadata.exif.makernotes;
+
+import com.drew.lang.Rational;
+import com.drew.lang.annotations.NotNull;
+import com.drew.lang.annotations.Nullable;
+import com.drew.metadata.TagDescriptor;
+
+import static com.drew.metadata.exif.makernotes.OlympusRawInfoMakernoteDirectory.*;
+
+/**
+ * Provides human-readable String representations of tag values stored in a {@link OlympusRawInfoMakernoteDirectory}.
+ * <p>
+ * Some Description functions converted from Exiftool version 10.33 created by Phil Harvey
+ * http://www.sno.phy.queensu.ca/~phil/exiftool/
+ * lib\Image\ExifTool\Olympus.pm
+ *
+ * @author Kevin Mott https://github.com/kwhopper
+ * @author Drew Noakes https://drewnoakes.com
+ */
+ at SuppressWarnings("WeakerAccess")
+public class OlympusRawInfoMakernoteDescriptor extends TagDescriptor<OlympusRawInfoMakernoteDirectory>
+{
+    public OlympusRawInfoMakernoteDescriptor(@NotNull OlympusRawInfoMakernoteDirectory directory)
+    {
+        super(directory);
+    }
+
+    @Override
+    @Nullable
+    public String getDescription(int tagType)
+    {
+        switch (tagType) {
+            case TagRawInfoVersion:
+                return getVersionBytesDescription(TagRawInfoVersion, 4);
+            case TagColorMatrix2:
+                return getColorMatrix2Description();
+            case TagYCbCrCoefficients:
+                return getYCbCrCoefficientsDescription();
+            case TagLightSource:
+                return getOlympusLightSourceDescription();
+            default:
+                return super.getDescription(tagType);
+        }
+    }
+
+    @Nullable
+    public String getColorMatrix2Description()
+    {
+        int[] values = _directory.getIntArray(TagColorMatrix2);
+        if (values == null)
+            return null;
+
+        StringBuilder sb = new StringBuilder();
+        for (int i = 0; i < values.length; i++) {
+            sb.append((short)values[i]);
+            if (i < values.length - 1)
+                sb.append(" ");
+        }
+        return sb.length() == 0 ? null : sb.toString();
+    }
+
+    @Nullable
+    public String getYCbCrCoefficientsDescription()
+    {
+        int[] values = _directory.getIntArray(TagYCbCrCoefficients);
+        if (values == null)
+            return null;
+
+        Rational[] ret = new Rational[values.length / 2];
+        for(int i = 0; i < values.length / 2; i++)
+        {
+            ret[i] = new Rational((short)values[2*i], (short)values[2*i + 1]);
+        }
+
+        StringBuilder sb = new StringBuilder();
+        for (int i = 0; i < ret.length; i++) {
+            sb.append(ret[i].doubleValue());
+            if (i < ret.length - 1)
+                sb.append(" ");
+        }
+        return sb.length() == 0 ? null : sb.toString();
+    }
+    
+    @Nullable
+    public String getOlympusLightSourceDescription()
+    {
+        Integer value = _directory.getInteger(TagLightSource);
+        if (value == null)
+            return null;
+
+        switch (value.shortValue())
+        {
+            case 0:
+                return "Unknown";
+            case 16:
+                return "Shade";
+            case 17:
+                return "Cloudy";
+            case 18:
+                return "Fine Weather";
+            case 20:
+                return "Tungsten (Incandescent)";
+            case 22:
+                return "Evening Sunlight";
+            case 33:
+                return "Daylight Fluorescent";
+            case 34:
+                return "Day White Fluorescent";
+            case 35:
+                return "Cool White Fluorescent";
+            case 36:
+                return "White Fluorescent";
+            case 256:
+                return "One Touch White Balance";
+            case 512:
+                return "Custom 1-4";
+            default:
+                return "Unknown (" + value + ")";
+        }
+    }
+}
diff --git a/src/com/drew/metadata/exif/makernotes/OlympusRawInfoMakernoteDirectory.java b/src/com/drew/metadata/exif/makernotes/OlympusRawInfoMakernoteDirectory.java
new file mode 100644
index 0000000..629cf60
--- /dev/null
+++ b/src/com/drew/metadata/exif/makernotes/OlympusRawInfoMakernoteDirectory.java
@@ -0,0 +1,142 @@
+/*
+ * Copyright 2002-2015 Drew Noakes
+ *
+ *    Licensed under the Apache License, Version 2.0 (the "License");
+ *    you may not use this file except in compliance with the License.
+ *    You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing, software
+ *    distributed under the License is distributed on an "AS IS" BASIS,
+ *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *    See the License for the specific language governing permissions and
+ *    limitations under the License.
+ *
+ * More information about this project is available at:
+ *
+ *    https://drewnoakes.com/code/exif/
+ *    https://github.com/drewnoakes/metadata-extractor
+ */
+package com.drew.metadata.exif.makernotes;
+
+import com.drew.lang.annotations.NotNull;
+import com.drew.metadata.Directory;
+
+import java.util.HashMap;
+
+/**
+ * These tags are found only in ORF images of some models (eg. C8080WZ)
+ *
+ * @author Kevin Mott https://github.com/kwhopper
+ * @author Drew Noakes https://drewnoakes.com
+ */
+ at SuppressWarnings("WeakerAccess")
+public class OlympusRawInfoMakernoteDirectory extends Directory
+{
+    public static final int TagRawInfoVersion = 0x0000;
+    public static final int TagWbRbLevelsUsed = 0x0100;
+    public static final int TagWbRbLevelsAuto = 0x0110;
+    public static final int TagWbRbLevelsShade = 0x0120;
+    public static final int TagWbRbLevelsCloudy = 0x0121;
+    public static final int TagWbRbLevelsFineWeather = 0x0122;
+    public static final int TagWbRbLevelsTungsten = 0x0123;
+    public static final int TagWbRbLevelsEveningSunlight = 0x0124;
+    public static final int TagWbRbLevelsDaylightFluor = 0x0130;
+    public static final int TagWbRbLevelsDayWhiteFluor = 0x0131;
+    public static final int TagWbRbLevelsCoolWhiteFluor = 0x0132;
+    public static final int TagWbRbLevelsWhiteFluorescent = 0x0133;
+
+    public static final int TagColorMatrix2 = 0x0200;
+    public static final int TagCoringFilter = 0x0310;
+    public static final int TagCoringValues = 0x0311;
+    public static final int TagBlackLevel2 = 0x0600;
+    public static final int TagYCbCrCoefficients = 0x0601;
+    public static final int TagValidPixelDepth = 0x0611;
+    public static final int TagCropLeft = 0x0612;
+    public static final int TagCropTop = 0x0613;
+    public static final int TagCropWidth = 0x0614;
+    public static final int TagCropHeight = 0x0615;
+
+    public static final int TagLightSource = 0x1000;
+
+    //the following 5 tags all have 3 values: val, min, max
+    public static final int TagWhiteBalanceComp = 0x1001;
+    public static final int TagSaturationSetting = 0x1010;
+    public static final int TagHueSetting = 0x1011;
+    public static final int TagContrastSetting = 0x1012;
+    public static final int TagSharpnessSetting = 0x1013;
+
+    // settings written by Camedia Master 4.x
+    public static final int TagCmExposureCompensation = 0x2000;
+    public static final int TagCmWhiteBalance = 0x2001;
+    public static final int TagCmWhiteBalanceComp = 0x2002;
+    public static final int TagCmWhiteBalanceGrayPoint = 0x2010;
+    public static final int TagCmSaturation = 0x2020;
+    public static final int TagCmHue = 0x2021;
+    public static final int TagCmContrast = 0x2022;
+    public static final int TagCmSharpness = 0x2023;
+
+    @NotNull
+    protected static final HashMap<Integer, String> _tagNameMap = new HashMap<Integer, String>();
+
+    static {
+        _tagNameMap.put(TagRawInfoVersion, "Raw Info Version");
+        _tagNameMap.put(TagWbRbLevelsUsed, "WB RB Levels Used");
+        _tagNameMap.put(TagWbRbLevelsAuto, "WB RB Levels Auto");
+        _tagNameMap.put(TagWbRbLevelsShade, "WB RB Levels Shade");
+        _tagNameMap.put(TagWbRbLevelsCloudy, "WB RB Levels Cloudy");
+        _tagNameMap.put(TagWbRbLevelsFineWeather, "WB RB Levels Fine Weather");
+        _tagNameMap.put(TagWbRbLevelsTungsten, "WB RB Levels Tungsten");
+        _tagNameMap.put(TagWbRbLevelsEveningSunlight, "WB RB Levels Evening Sunlight");
+        _tagNameMap.put(TagWbRbLevelsDaylightFluor, "WB RB Levels Daylight Fluor");
+        _tagNameMap.put(TagWbRbLevelsDayWhiteFluor, "WB RB Levels Day White Fluor");
+        _tagNameMap.put(TagWbRbLevelsCoolWhiteFluor, "WB RB Levels Cool White Fluor");
+        _tagNameMap.put(TagWbRbLevelsWhiteFluorescent, "WB RB Levels White Fluorescent");
+        _tagNameMap.put(TagColorMatrix2, "Color Matrix 2");
+        _tagNameMap.put(TagCoringFilter, "Coring Filter");
+        _tagNameMap.put(TagCoringValues, "Coring Values");
+        _tagNameMap.put(TagBlackLevel2, "Black Level 2");
+        _tagNameMap.put(TagYCbCrCoefficients, "YCbCrCoefficients");
+        _tagNameMap.put(TagValidPixelDepth, "Valid Pixel Depth");
+        _tagNameMap.put(TagCropLeft, "Crop Left");
+        _tagNameMap.put(TagCropTop, "Crop Top");
+        _tagNameMap.put(TagCropWidth, "Crop Width");
+        _tagNameMap.put(TagCropHeight, "Crop Height");
+        _tagNameMap.put(TagLightSource, "Light Source");
+
+        _tagNameMap.put(TagWhiteBalanceComp, "White Balance Comp");
+        _tagNameMap.put(TagSaturationSetting, "Saturation Setting");
+        _tagNameMap.put(TagHueSetting, "Hue Setting");
+        _tagNameMap.put(TagContrastSetting, "Contrast Setting");
+        _tagNameMap.put(TagSharpnessSetting, "Sharpness Setting");
+
+        _tagNameMap.put(TagCmExposureCompensation, "CM Exposure Compensation");
+        _tagNameMap.put(TagCmWhiteBalance, "CM White Balance");
+        _tagNameMap.put(TagCmWhiteBalanceComp, "CM White Balance Comp");
+        _tagNameMap.put(TagCmWhiteBalanceGrayPoint, "CM White Balance Gray Point");
+        _tagNameMap.put(TagCmSaturation, "CM Saturation");
+        _tagNameMap.put(TagCmHue, "CM Hue");
+        _tagNameMap.put(TagCmContrast, "CM Contrast");
+        _tagNameMap.put(TagCmSharpness, "CM Sharpness");
+    }
+
+    public OlympusRawInfoMakernoteDirectory()
+    {
+        this.setDescriptor(new OlympusRawInfoMakernoteDescriptor(this));
+    }
+
+    @Override
+    @NotNull
+    public String getName()
+    {
+        return "Olympus Raw Info";
+    }
+
+    @Override
+    @NotNull
+    protected HashMap<Integer, String> getTagNameMap()
+    {
+        return _tagNameMap;
+    }
+}
diff --git a/src/com/drew/metadata/exif/makernotes/PanasonicMakernoteDescriptor.java b/src/com/drew/metadata/exif/makernotes/PanasonicMakernoteDescriptor.java
index 98a59a4..d5e4943 100644
--- a/src/com/drew/metadata/exif/makernotes/PanasonicMakernoteDescriptor.java
+++ b/src/com/drew/metadata/exif/makernotes/PanasonicMakernoteDescriptor.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2002-2016 Drew Noakes
+ * Copyright 2002-2017 Drew Noakes
  *
  *    Licensed under the Apache License, Version 2.0 (the "License");
  *    you may not use this file except in compliance with the License.
@@ -21,6 +21,7 @@
 package com.drew.metadata.exif.makernotes;
 
 import com.drew.lang.ByteArrayReader;
+import com.drew.lang.Charsets;
 import com.drew.lang.RandomAccessReader;
 import com.drew.lang.annotations.NotNull;
 import com.drew.lang.annotations.Nullable;
@@ -28,6 +29,7 @@ import com.drew.metadata.Age;
 import com.drew.metadata.Face;
 import com.drew.metadata.TagDescriptor;
 
+import java.text.DecimalFormat;
 import java.io.IOException;
 
 import static com.drew.metadata.exif.makernotes.PanasonicMakernoteDirectory.*;
@@ -44,6 +46,7 @@ import static com.drew.metadata.exif.makernotes.PanasonicMakernoteDirectory.*;
  * @author Drew Noakes https://drewnoakes.com
  * @author Philipp Sandhaus
  */
+ at SuppressWarnings("WeakerAccess")
 public class PanasonicMakernoteDescriptor extends TagDescriptor<PanasonicMakernoteDirectory>
 {
     public PanasonicMakernoteDescriptor(@NotNull PanasonicMakernoteDirectory directory)
@@ -108,8 +111,8 @@ public class PanasonicMakernoteDescriptor extends TagDescriptor<PanasonicMakerno
                 return getDetectedFacesDescription();
             case TAG_TRANSFORM:
                 return getTransformDescription();
-			case TAG_TRANSFORM_1:
-	            return getTransform1Description();
+            case TAG_TRANSFORM_1:
+                return getTransform1Description();
             case TAG_INTELLIGENT_EXPOSURE:
                 return getIntelligentExposureDescription();
             case TAG_FLASH_WARNING:
@@ -126,20 +129,18 @@ public class PanasonicMakernoteDescriptor extends TagDescriptor<PanasonicMakerno
                 return getIntelligentResolutionDescription();
             case TAG_FACE_RECOGNITION_INFO:
                 return getRecognizedFacesDescription();
-            case TAG_PRINT_IMAGE_MATCHING_INFO:
-                return getPrintImageMatchingInfoDescription();
             case TAG_SCENE_MODE:
                 return getSceneModeDescription();
             case TAG_FLASH_FIRED:
                 return getFlashFiredDescription();
             case TAG_TEXT_STAMP:
-		        return getTextStampDescription();
-			case TAG_TEXT_STAMP_1:
-	             return getTextStamp1Description();
-			case TAG_TEXT_STAMP_2:
-		         return getTextStamp2Description();
-			case TAG_TEXT_STAMP_3:
-			     return getTextStamp3Description();
+                return getTextStampDescription();
+            case TAG_TEXT_STAMP_1:
+                return getTextStamp1Description();
+            case TAG_TEXT_STAMP_2:
+                return getTextStamp2Description();
+            case TAG_TEXT_STAMP_3:
+                return getTextStamp3Description();
             case TAG_MAKERNOTE_VERSION:
                 return getMakernoteVersionDescription();
             case TAG_EXIF_VERSION:
@@ -147,27 +148,62 @@ public class PanasonicMakernoteDescriptor extends TagDescriptor<PanasonicMakerno
             case TAG_INTERNAL_SERIAL_NUMBER:
                 return getInternalSerialNumberDescription();
             case TAG_TITLE:
-	            return getTitleDescription();
-			case TAG_BABY_NAME:
-	            return getBabyNameDescription();
-			case TAG_LOCATION:
-	            return getLocationDescription();
-			case TAG_BABY_AGE:
-		        return getBabyAgeDescription();
-			case TAG_BABY_AGE_1:
-		        return getBabyAge1Description();
-			default:
+                return getTitleDescription();
+            case TAG_BRACKET_SETTINGS:
+                return getBracketSettingsDescription();
+            case TAG_FLASH_CURTAIN:
+                return getFlashCurtainDescription();
+            case TAG_LONG_EXPOSURE_NOISE_REDUCTION:
+                return getLongExposureNoiseReductionDescription();
+            case TAG_BABY_NAME:
+                return getBabyNameDescription();
+            case TAG_LOCATION:
+                return getLocationDescription();
+
+            case TAG_LENS_FIRMWARE_VERSION:
+                return getLensFirmwareVersionDescription();
+            case TAG_INTELLIGENT_D_RANGE:
+                return getIntelligentDRangeDescription();
+            case TAG_CLEAR_RETOUCH:
+                return getClearRetouchDescription();
+            case TAG_PHOTO_STYLE:
+                return getPhotoStyleDescription();
+            case TAG_SHADING_COMPENSATION:
+                return getShadingCompensationDescription();
+
+            case TAG_ACCELEROMETER_Z:
+                return getAccelerometerZDescription();
+            case TAG_ACCELEROMETER_X:
+                return getAccelerometerXDescription();
+            case TAG_ACCELEROMETER_Y:
+                return getAccelerometerYDescription();
+            case TAG_CAMERA_ORIENTATION:
+                return getCameraOrientationDescription();
+            case TAG_ROLL_ANGLE:
+                return getRollAngleDescription();
+            case TAG_PITCH_ANGLE:
+                return getPitchAngleDescription();
+            case TAG_SWEEP_PANORAMA_DIRECTION:
+                return getSweepPanoramaDirectionDescription();
+            case TAG_TIMER_RECORDING:
+                return getTimerRecordingDescription();
+            case TAG_HDR:
+                return getHDRDescription();
+            case TAG_SHUTTER_TYPE:
+                return getShutterTypeDescription();
+            case TAG_TOUCH_AE:
+                return getTouchAeDescription();
+
+            case TAG_BABY_AGE:
+                return getBabyAgeDescription();
+            case TAG_BABY_AGE_1:
+                return getBabyAge1Description();
+            default:
                 return super.getDescription(tagType);
         }
     }
 
     @Nullable
-    public String getPrintImageMatchingInfoDescription()
-    {
-        return getByteLengthDescription(TAG_PRINT_IMAGE_MATCHING_INFO);
-    }
-
-    @Nullable
     public String getTextStampDescription()
     {
         return getIndexedDescription(TAG_TEXT_STAMP, 1, "Off", "On");
@@ -278,45 +314,240 @@ public class PanasonicMakernoteDescriptor extends TagDescriptor<PanasonicMakerno
     }
 
     @Nullable
+    private static String trim(@Nullable String s)
+    {
+        return s == null ? null : s.trim();
+    }
+
+    @Nullable
     public String getCountryDescription()
     {
-        return getAsciiStringFromBytes(TAG_COUNTRY);
+        return trim(getStringFromBytes(TAG_COUNTRY, Charsets.UTF_8));
     }
 
     @Nullable
     public String getStateDescription()
     {
-        return getAsciiStringFromBytes(TAG_STATE);
+        return trim(getStringFromBytes(TAG_STATE, Charsets.UTF_8));
     }
 
     @Nullable
     public String getCityDescription()
     {
-        return getAsciiStringFromBytes(TAG_CITY);
+        return trim(getStringFromBytes(TAG_CITY, Charsets.UTF_8));
     }
 
     @Nullable
     public String getLandmarkDescription()
     {
-        return getAsciiStringFromBytes(TAG_LANDMARK);
+        return trim(getStringFromBytes(TAG_LANDMARK, Charsets.UTF_8));
     }
 
-	@Nullable
+    @Nullable
     public String getTitleDescription()
     {
-        return getAsciiStringFromBytes(TAG_TITLE);
+        return trim(getStringFromBytes(TAG_TITLE, Charsets.UTF_8));
     }
 
-	@Nullable
+    @Nullable
+    public String getBracketSettingsDescription()
+    {
+        return getIndexedDescription(TAG_BRACKET_SETTINGS,
+            "No Bracket", "3 Images, Sequence 0/-/+", "3 Images, Sequence -/0/+", "5 Images, Sequence 0/-/+",
+            "5 Images, Sequence -/0/+", "7 Images, Sequence 0/-/+", "7 Images, Sequence -/0/+");
+    }
+
+    @Nullable
+    public String getFlashCurtainDescription()
+    {
+        return getIndexedDescription(TAG_FLASH_CURTAIN,
+            "n/a", "1st", "2nd");
+    }
+
+    @Nullable
+    public String getLongExposureNoiseReductionDescription()
+    {
+        return getIndexedDescription(TAG_LONG_EXPOSURE_NOISE_REDUCTION, 1,
+            "Off", "On");
+    }
+
+    @Nullable
+    public String getLensFirmwareVersionDescription()
+    {
+        // lens version has 4 parts separated by periods
+        byte[] bytes = _directory.getByteArray(TAG_LENS_FIRMWARE_VERSION);
+        if (bytes == null)
+            return null;
+
+        StringBuilder sb = new StringBuilder();
+        for (int i = 0; i < bytes.length; i++) {
+            sb.append(bytes[i]);
+            if (i < bytes.length - 1)
+                sb.append(".");
+        }
+        return sb.toString();
+        //return string.Join(".", bytes.Select(b => b.ToString()).ToArray());
+    }
+
+    @Nullable
+    public String getIntelligentDRangeDescription()
+    {
+        return getIndexedDescription(TAG_INTELLIGENT_D_RANGE,
+            "Off", "Low", "Standard", "High");
+    }
+
+    @Nullable
+    public String getClearRetouchDescription()
+    {
+        return getIndexedDescription(TAG_CLEAR_RETOUCH,
+                "Off", "On");
+
+    }
+
+    @Nullable
+    public String getPhotoStyleDescription()
+    {
+        return getIndexedDescription(TAG_PHOTO_STYLE,
+            "Auto", "Standard or Custom", "Vivid", "Natural", "Monochrome", "Scenery", "Portrait");
+    }
+
+    @Nullable
+    public String getShadingCompensationDescription()
+    {
+        return getIndexedDescription(TAG_SHADING_COMPENSATION,
+            "Off", "On");
+    }
+
+    @Nullable
+    public String getAccelerometerZDescription()
+    {
+        Integer value = _directory.getInteger(TAG_ACCELEROMETER_Z);
+        if (value == null)
+            return null;
+
+        // positive is acceleration upwards
+        return String.valueOf(value.shortValue());
+    }
+
+    @Nullable
+    public String getAccelerometerXDescription()
+    {
+        Integer value = _directory.getInteger(TAG_ACCELEROMETER_X);
+        if (value == null)
+            return null;
+
+        // positive is acceleration to the left
+        return String.valueOf(value.shortValue());
+    }
+
+    @Nullable
+    public String getAccelerometerYDescription()
+    {
+        Integer value = _directory.getInteger(TAG_ACCELEROMETER_Y);
+        if (value == null)
+            return null;
+
+        // positive is acceleration backwards
+        return String.valueOf(value.shortValue());
+    }
+
+    @Nullable
+    public String getCameraOrientationDescription()
+    {
+        return getIndexedDescription(TAG_CAMERA_ORIENTATION,
+                "Normal", "Rotate CW", "Rotate 180", "Rotate CCW", "Tilt Upwards", "Tile Downwards");
+    }
+
+    @Nullable
+    public String getRollAngleDescription()
+    {
+        Integer value = _directory.getInteger(TAG_ROLL_ANGLE);
+        if (value == null)
+            return null;
+
+        DecimalFormat format = new DecimalFormat("0.#");
+        // converted to degrees of clockwise camera rotation
+        return format.format(value.shortValue() / 10.0);
+    }
+
+    @Nullable
+    public String getPitchAngleDescription()
+    {
+        Integer value = _directory.getInteger(TAG_PITCH_ANGLE);
+        if (value == null)
+            return null;
+
+        DecimalFormat format = new DecimalFormat("0.#");
+        // converted to degrees of upward camera tilt
+        return format.format(-value.shortValue() / 10.0);
+    }
+
+    @Nullable
+    public String getSweepPanoramaDirectionDescription()
+    {
+        return getIndexedDescription(TAG_SWEEP_PANORAMA_DIRECTION,
+                "Off", "Left to Right", "Right to Left", "Top to Bottom", "Bottom to Top");
+    }
+
+    @Nullable
+    public String getTimerRecordingDescription()
+    {
+        return getIndexedDescription(TAG_TIMER_RECORDING,
+                "Off", "Time Lapse", "Stop-motion Animation");
+    }
+
+    @Nullable
+    public String getHDRDescription()
+    {
+        Integer value = _directory.getInteger(TAG_HDR);
+        if (value == null)
+            return null;
+
+        switch (value)
+        {
+            case 0:
+                return "Off";
+            case 100:
+                return "1 EV";
+            case 200:
+                return "2 EV";
+            case 300:
+                return "3 EV";
+            case 32868:
+                return "1 EV (Auto)";
+            case 32968:
+                return "2 EV (Auto)";
+            case 33068:
+                return "3 EV (Auto)";
+            default:
+                return String.format("Unknown (%d)", value);
+        }
+    }
+
+    @Nullable
+    public String getShutterTypeDescription()
+    {
+        return getIndexedDescription(TAG_SHUTTER_TYPE,
+                "Mechanical", "Electronic", "Hybrid");
+    }
+
+    @Nullable
+    public String getTouchAeDescription()
+    {
+        return getIndexedDescription(TAG_TOUCH_AE,
+                "Off", "On");
+    }
+
+    @Nullable
     public String getBabyNameDescription()
     {
-        return getAsciiStringFromBytes(TAG_BABY_NAME);
+        return trim(getStringFromBytes(TAG_BABY_NAME, Charsets.UTF_8));
     }
 
 	@Nullable
     public String getLocationDescription()
     {
-        return getAsciiStringFromBytes(TAG_LOCATION);
+        return trim(getStringFromBytes(TAG_LOCATION, Charsets.UTF_8));
     }
 
     @Nullable
diff --git a/src/com/drew/metadata/exif/makernotes/PanasonicMakernoteDirectory.java b/src/com/drew/metadata/exif/makernotes/PanasonicMakernoteDirectory.java
index a53bcdc..b2b6c25 100644
--- a/src/com/drew/metadata/exif/makernotes/PanasonicMakernoteDirectory.java
+++ b/src/com/drew/metadata/exif/makernotes/PanasonicMakernoteDirectory.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2002-2016 Drew Noakes
+ * Copyright 2002-2017 Drew Noakes
  *
  *    Licensed under the Apache License, Version 2.0 (the "License");
  *    you may not use this file except in compliance with the License.
@@ -37,6 +37,7 @@ import java.util.HashMap;
  * @author Drew Noakes https://drewnoakes.com
  * @author Philipp Sandhaus
  */
+ at SuppressWarnings("WeakerAccess")
 public class PanasonicMakernoteDirectory extends Directory
 {
 
@@ -353,16 +354,23 @@ public class PanasonicMakernoteDirectory extends Directory
     public static final int TAG_SHARPNESS = 0x0041;
     public static final int TAG_FILM_MODE = 0x0042;
 
+    public static final int TAG_COLOR_TEMP_KELVIN = 0x0044;
+    public static final int TAG_BRACKET_SETTINGS = 0x0045;
+
     /**
-	 * WB adjust AB. Positive is a shift toward blue.
-	 */
-	public static final int TAG_WB_ADJUST_AB = 0x0046;
+    * WB adjust AB. Positive is a shift toward blue.
+    */
+    public static final int TAG_WB_ADJUST_AB = 0x0046;
     /**
-	 * WB adjust GM. Positive is a shift toward green.
-	 */
-	public static final int TAG_WB_ADJUST_GM = 0x0047;
+    * WB adjust GM. Positive is a shift toward green.
+    */
+    public static final int TAG_WB_ADJUST_GM = 0x0047;
 
+    public static final int TAG_FLASH_CURTAIN = 0x0048;
+    public static final int TAG_LONG_EXPOSURE_NOISE_REDUCTION = 0x0049;
 
+    public static final int TAG_PANASONIC_IMAGE_WIDTH = 0x004b;
+    public static final int TAG_PANASONIC_IMAGE_HEIGHT = 0x004c;
     public static final int TAG_AF_POINT_POSITION = 0x004d;
 
 
@@ -383,6 +391,7 @@ public class PanasonicMakernoteDirectory extends Directory
     public static final int TAG_LENS_TYPE = 0x0051;
     public static final int TAG_LENS_SERIAL_NUMBER = 0x0052;
     public static final int TAG_ACCESSORY_TYPE = 0x0053;
+    public static final int TAG_ACCESSORY_SERIAL_NUMBER = 0x0054;
 
     /**
      * (decoded as two 16-bit signed integers)
@@ -402,10 +411,35 @@ public class PanasonicMakernoteDirectory extends Directory
     */
     public static final int TAG_INTELLIGENT_EXPOSURE = 0x005d;
 
-    /**
-	  * Info at http://www.ozhiker.com/electronics/pjmt/jpeg_info/pim.html
-     */
-	public static final int TAG_PRINT_IMAGE_MATCHING_INFO = 0x0E00;
+    public static final int TAG_LENS_FIRMWARE_VERSION = 0x0060;
+    public static final int TAG_BURST_SPEED = 0x0077;
+    public static final int TAG_INTELLIGENT_D_RANGE = 0x0079;
+    public static final int TAG_CLEAR_RETOUCH = 0x007c;
+    public static final int TAG_CITY2 = 0x0080;
+    public static final int TAG_PHOTO_STYLE = 0x0089;
+    public static final int TAG_SHADING_COMPENSATION = 0x008a;
+
+    public static final int TAG_ACCELEROMETER_Z = 0x008c;
+    public static final int TAG_ACCELEROMETER_X = 0x008d;
+    public static final int TAG_ACCELEROMETER_Y = 0x008e;
+    public static final int TAG_CAMERA_ORIENTATION = 0x008f;
+    public static final int TAG_ROLL_ANGLE = 0x0090;
+    public static final int TAG_PITCH_ANGLE = 0x0091;
+    public static final int TAG_SWEEP_PANORAMA_DIRECTION = 0x0093;
+    public static final int TAG_SWEEP_PANORAMA_FIELD_OF_VIEW = 0x0094;
+    public static final int TAG_TIMER_RECORDING = 0x0096;
+
+    public static final int TAG_INTERNAL_ND_FILTER = 0x009d;
+    public static final int TAG_HDR = 0x009e;
+    public static final int TAG_SHUTTER_TYPE = 0x009f;
+
+    public static final int TAG_CLEAR_RETOUCH_VALUE = 0x00a3;
+    public static final int TAG_TOUCH_AE = 0x00ab;
+
+    /**
+    * Info at http://www.ozhiker.com/electronics/pjmt/jpeg_info/pim.html
+    */
+    public static final int TAG_PRINT_IMAGE_MATCHING_INFO = 0x0E00;
 
     /**
      * Byte Indexes:                                                                       <br>
@@ -433,9 +467,9 @@ public class PanasonicMakernoteDirectory extends Directory
     public static final int TAG_FLASH_WARNING = 0x0062;
     public static final int TAG_RECOGNIZED_FACE_FLAGS = 0x0063;
     public static final int TAG_TITLE = 0x0065;
-	public static final int TAG_BABY_NAME = 0x0066;
-	public static final int TAG_LOCATION = 0x0067;
-	public static final int TAG_COUNTRY = 0x0069;
+    public static final int TAG_BABY_NAME = 0x0066;
+    public static final int TAG_LOCATION = 0x0067;
+    public static final int TAG_COUNTRY = 0x0069;
     public static final int TAG_STATE = 0x006b;
     public static final int TAG_CITY = 0x006d;
     public static final int TAG_LANDMARK = 0x006f;
@@ -454,8 +488,8 @@ public class PanasonicMakernoteDirectory extends Directory
     public static final int TAG_WB_BLUE_LEVEL = 0x8006;
     public static final int TAG_FLASH_FIRED = 0x8007;
     public static final int TAG_TEXT_STAMP_2 = 0x8008;
-	public static final int TAG_TEXT_STAMP_3 = 0x8009;
-	public static final int TAG_BABY_AGE_1 = 0x8010;
+    public static final int TAG_TEXT_STAMP_3 = 0x8009;
+    public static final int TAG_BABY_AGE_1 = 0x8010;
 
 	/**
      * (decoded as two 16-bit signed integers)
@@ -505,43 +539,76 @@ public class PanasonicMakernoteDirectory extends Directory
         _tagNameMap.put(TAG_WORLD_TIME_LOCATION, "World Time Location");
         _tagNameMap.put(TAG_TEXT_STAMP, "Text Stamp");
         _tagNameMap.put(TAG_PROGRAM_ISO, "Program ISO");
-		_tagNameMap.put(TAG_ADVANCED_SCENE_MODE, "Advanced Scene Mode");
+	_tagNameMap.put(TAG_ADVANCED_SCENE_MODE, "Advanced Scene Mode");
         _tagNameMap.put(TAG_PRINT_IMAGE_MATCHING_INFO, "Print Image Matching (PIM) Info");
         _tagNameMap.put(TAG_FACES_DETECTED, "Number of Detected Faces");
         _tagNameMap.put(TAG_SATURATION, "Saturation");
         _tagNameMap.put(TAG_SHARPNESS, "Sharpness");
         _tagNameMap.put(TAG_FILM_MODE, "Film Mode");
+        _tagNameMap.put(TAG_COLOR_TEMP_KELVIN, "Color Temp Kelvin");
+        _tagNameMap.put(TAG_BRACKET_SETTINGS, "Bracket Settings");
         _tagNameMap.put(TAG_WB_ADJUST_AB, "White Balance Adjust (AB)");
-		_tagNameMap.put(TAG_WB_ADJUST_GM, "White Balance Adjust (GM)");
-		_tagNameMap.put(TAG_AF_POINT_POSITION, "Af Point Position");
+	_tagNameMap.put(TAG_WB_ADJUST_GM, "White Balance Adjust (GM)");
+
+        _tagNameMap.put(TAG_FLASH_CURTAIN, "Flash Curtain");
+        _tagNameMap.put(TAG_LONG_EXPOSURE_NOISE_REDUCTION, "Long Exposure Noise Reduction");
+        _tagNameMap.put(TAG_PANASONIC_IMAGE_WIDTH, "Panasonic Image Width");
+        _tagNameMap.put(TAG_PANASONIC_IMAGE_HEIGHT, "Panasonic Image Height");
+
+        _tagNameMap.put(TAG_AF_POINT_POSITION, "Af Point Position");
         _tagNameMap.put(TAG_FACE_DETECTION_INFO, "Face Detection Info");
         _tagNameMap.put(TAG_LENS_TYPE, "Lens Type");
         _tagNameMap.put(TAG_LENS_SERIAL_NUMBER, "Lens Serial Number");
         _tagNameMap.put(TAG_ACCESSORY_TYPE, "Accessory Type");
+        _tagNameMap.put(TAG_ACCESSORY_SERIAL_NUMBER, "Accessory Serial Number");
         _tagNameMap.put(TAG_TRANSFORM, "Transform");
         _tagNameMap.put(TAG_INTELLIGENT_EXPOSURE, "Intelligent Exposure");
+        _tagNameMap.put(TAG_LENS_FIRMWARE_VERSION, "Lens Firmware Version");
         _tagNameMap.put(TAG_FACE_RECOGNITION_INFO, "Face Recognition Info");
         _tagNameMap.put(TAG_FLASH_WARNING, "Flash Warning");
         _tagNameMap.put(TAG_RECOGNIZED_FACE_FLAGS, "Recognized Face Flags");
-		_tagNameMap.put(TAG_TITLE, "Title");
-		_tagNameMap.put(TAG_BABY_NAME, "Baby Name");
-		_tagNameMap.put(TAG_LOCATION, "Location");
-		_tagNameMap.put(TAG_COUNTRY, "Country");
+        _tagNameMap.put(TAG_TITLE, "Title");
+        _tagNameMap.put(TAG_BABY_NAME, "Baby Name");
+        _tagNameMap.put(TAG_LOCATION, "Location");
+        _tagNameMap.put(TAG_COUNTRY, "Country");
         _tagNameMap.put(TAG_STATE, "State");
         _tagNameMap.put(TAG_CITY, "City");
         _tagNameMap.put(TAG_LANDMARK, "Landmark");
         _tagNameMap.put(TAG_INTELLIGENT_RESOLUTION, "Intelligent Resolution");
+        _tagNameMap.put(TAG_BURST_SPEED, "Burst Speed");
+        _tagNameMap.put(TAG_INTELLIGENT_D_RANGE, "Intelligent D-Range");
+        _tagNameMap.put(TAG_CLEAR_RETOUCH, "Clear Retouch");
+        _tagNameMap.put(TAG_CITY2, "City 2");
+        _tagNameMap.put(TAG_PHOTO_STYLE, "Photo Style");
+        _tagNameMap.put(TAG_SHADING_COMPENSATION, "Shading Compensation");
+
+        _tagNameMap.put(TAG_ACCELEROMETER_Z, "Accelerometer Z");
+        _tagNameMap.put(TAG_ACCELEROMETER_X, "Accelerometer X");
+        _tagNameMap.put(TAG_ACCELEROMETER_Y, "Accelerometer Y");
+        _tagNameMap.put(TAG_CAMERA_ORIENTATION, "Camera Orientation");
+        _tagNameMap.put(TAG_ROLL_ANGLE, "Roll Angle");
+        _tagNameMap.put(TAG_PITCH_ANGLE, "Pitch Angle");
+        _tagNameMap.put(TAG_SWEEP_PANORAMA_DIRECTION, "Sweep Panorama Direction");
+        _tagNameMap.put(TAG_SWEEP_PANORAMA_FIELD_OF_VIEW, "Sweep Panorama Field Of View");
+        _tagNameMap.put(TAG_TIMER_RECORDING, "Timer Recording");
+
+        _tagNameMap.put(TAG_INTERNAL_ND_FILTER, "Internal ND Filter");
+        _tagNameMap.put(TAG_HDR, "HDR");
+        _tagNameMap.put(TAG_SHUTTER_TYPE, "Shutter Type");
+        _tagNameMap.put(TAG_CLEAR_RETOUCH_VALUE, "Clear Retouch Value");
+        _tagNameMap.put(TAG_TOUCH_AE, "Touch AE");
+
         _tagNameMap.put(TAG_MAKERNOTE_VERSION, "Makernote Version");
         _tagNameMap.put(TAG_SCENE_MODE, "Scene Mode");
         _tagNameMap.put(TAG_WB_RED_LEVEL, "White Balance (Red)");
         _tagNameMap.put(TAG_WB_GREEN_LEVEL, "White Balance (Green)");
         _tagNameMap.put(TAG_WB_BLUE_LEVEL, "White Balance (Blue)");
         _tagNameMap.put(TAG_FLASH_FIRED, "Flash Fired");
-		_tagNameMap.put(TAG_TEXT_STAMP_1, "Text Stamp 1");
-		_tagNameMap.put(TAG_TEXT_STAMP_2, "Text Stamp 2");
-		_tagNameMap.put(TAG_TEXT_STAMP_3, "Text Stamp 3");
-		_tagNameMap.put(TAG_BABY_AGE_1, "Baby Age 1");
-		_tagNameMap.put(TAG_TRANSFORM_1, "Transform 1");
+        _tagNameMap.put(TAG_TEXT_STAMP_1, "Text Stamp 1");
+        _tagNameMap.put(TAG_TEXT_STAMP_2, "Text Stamp 2");
+        _tagNameMap.put(TAG_TEXT_STAMP_3, "Text Stamp 3");
+        _tagNameMap.put(TAG_BABY_AGE_1, "Baby Age 1");
+        _tagNameMap.put(TAG_TRANSFORM_1, "Transform 1");
     }
 
     public PanasonicMakernoteDirectory()
diff --git a/src/com/drew/metadata/exif/makernotes/PentaxMakernoteDescriptor.java b/src/com/drew/metadata/exif/makernotes/PentaxMakernoteDescriptor.java
index d50b0a7..40ae317 100644
--- a/src/com/drew/metadata/exif/makernotes/PentaxMakernoteDescriptor.java
+++ b/src/com/drew/metadata/exif/makernotes/PentaxMakernoteDescriptor.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2002-2016 Drew Noakes
+ * Copyright 2002-2017 Drew Noakes
  *
  *    Licensed under the Apache License, Version 2.0 (the "License");
  *    you may not use this file except in compliance with the License.
@@ -34,6 +34,7 @@ import static com.drew.metadata.exif.makernotes.PentaxMakernoteDirectory.*;
  *
  * @author Drew Noakes https://drewnoakes.com
  */
+ at SuppressWarnings("WeakerAccess")
 public class PentaxMakernoteDescriptor extends TagDescriptor<PentaxMakernoteDirectory>
 {
     public PentaxMakernoteDescriptor(@NotNull PentaxMakernoteDirectory directory)
diff --git a/src/com/drew/metadata/exif/makernotes/PentaxMakernoteDirectory.java b/src/com/drew/metadata/exif/makernotes/PentaxMakernoteDirectory.java
index 935dc36..8915c62 100644
--- a/src/com/drew/metadata/exif/makernotes/PentaxMakernoteDirectory.java
+++ b/src/com/drew/metadata/exif/makernotes/PentaxMakernoteDirectory.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2002-2016 Drew Noakes
+ * Copyright 2002-2017 Drew Noakes
  *
  *    Licensed under the Apache License, Version 2.0 (the "License");
  *    you may not use this file except in compliance with the License.
@@ -30,6 +30,7 @@ import java.util.HashMap;
  *
  * @author Drew Noakes https://drewnoakes.com
  */
+ at SuppressWarnings("WeakerAccess")
 public class PentaxMakernoteDirectory extends Directory
 {
     /**
diff --git a/src/com/drew/metadata/exif/makernotes/ReconyxHyperFireMakernoteDescriptor.java b/src/com/drew/metadata/exif/makernotes/ReconyxHyperFireMakernoteDescriptor.java
new file mode 100644
index 0000000..97f0190
--- /dev/null
+++ b/src/com/drew/metadata/exif/makernotes/ReconyxHyperFireMakernoteDescriptor.java
@@ -0,0 +1,105 @@
+/*
+ * Copyright 2002-2017 Drew Noakes
+ *
+ *    Licensed under the Apache License, Version 2.0 (the "License");
+ *    you may not use this file except in compliance with the License.
+ *    You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing, software
+ *    distributed under the License is distributed on an "AS IS" BASIS,
+ *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *    See the License for the specific language governing permissions and
+ *    limitations under the License.
+ *
+ * More information about this project is available at:
+ *
+ *    https://drewnoakes.com/code/exif/
+ *    https://github.com/drewnoakes/metadata-extractor
+ */
+
+package com.drew.metadata.exif.makernotes;
+
+import com.drew.lang.annotations.NotNull;
+import com.drew.lang.annotations.Nullable;
+import com.drew.metadata.StringValue;
+import com.drew.metadata.TagDescriptor;
+
+import java.text.DateFormat;
+import java.text.DecimalFormat;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+
+import static com.drew.metadata.exif.makernotes.ReconyxHyperFireMakernoteDirectory.*;
+
+/**
+ * Provides human-readable string representations of tag values stored in a {@link ReconyxHyperFireMakernoteDirectory}.
+ *
+ * @author Todd West http://cascadescarnivoreproject.blogspot.com
+ */
+ at SuppressWarnings("WeakerAccess")
+public class ReconyxHyperFireMakernoteDescriptor extends TagDescriptor<ReconyxHyperFireMakernoteDirectory>
+{
+    public ReconyxHyperFireMakernoteDescriptor(@NotNull ReconyxHyperFireMakernoteDirectory directory)
+    {
+        super(directory);
+    }
+
+    @Override
+    @Nullable
+    public String getDescription(int tagType)
+    {
+        switch (tagType) {
+            case TAG_MAKERNOTE_VERSION:
+                return String.format("%d", _directory.getInteger(tagType));
+            case TAG_FIRMWARE_VERSION:
+                return _directory.getString(tagType);
+            case TAG_TRIGGER_MODE:
+                return _directory.getString(tagType);
+            case TAG_SEQUENCE:
+                int[] sequence = _directory.getIntArray(tagType);
+                if (sequence == null)
+                    return null;
+                return String.format("%d/%d", sequence[0], sequence[1]);
+            case TAG_EVENT_NUMBER:
+                return String.format("%d", _directory.getInteger(tagType));
+            case TAG_MOTION_SENSITIVITY:
+                return String.format("%d", _directory.getInteger(tagType));
+            case TAG_BATTERY_VOLTAGE:
+                Double value = _directory.getDoubleObject(tagType);
+                DecimalFormat formatter = new DecimalFormat("0.000");
+                return value == null ? null : formatter.format(value);
+            case TAG_DATE_TIME_ORIGINAL:
+                String date = _directory.getString(tagType);
+                try {
+                    DateFormat parser = new SimpleDateFormat("yyyy:MM:dd HH:mm:ss");
+                    return parser.format(parser.parse(date));
+                } catch (ParseException e) {
+                    return null;
+                }
+            case TAG_MOON_PHASE:
+                return getIndexedDescription(tagType, "New", "Waxing Crescent", "First Quarter", "Waxing Gibbous", "Full", "Waning Gibbous", "Last Quarter", "Waning Crescent");
+            case TAG_AMBIENT_TEMPERATURE_FAHRENHEIT:
+            case TAG_AMBIENT_TEMPERATURE:
+                return String.format("%d", _directory.getInteger(tagType));
+            case TAG_SERIAL_NUMBER:
+                // default is UTF_16LE
+                StringValue svalue = _directory.getStringValue(tagType);
+                if(svalue == null)
+                    return null;
+                return svalue.toString();
+            case TAG_CONTRAST:
+            case TAG_BRIGHTNESS:
+            case TAG_SHARPNESS:
+            case TAG_SATURATION:
+                return String.format("%d", _directory.getInteger(tagType));
+            case TAG_INFRARED_ILLUMINATOR:
+                return getIndexedDescription(tagType, "Off", "On");
+            case TAG_USER_LABEL:
+                return _directory.getString(tagType);
+            default:
+                return super.getDescription(tagType);
+        }
+    }
+}
diff --git a/src/com/drew/metadata/exif/makernotes/ReconyxHyperFireMakernoteDirectory.java b/src/com/drew/metadata/exif/makernotes/ReconyxHyperFireMakernoteDirectory.java
new file mode 100644
index 0000000..74dbb2e
--- /dev/null
+++ b/src/com/drew/metadata/exif/makernotes/ReconyxHyperFireMakernoteDirectory.java
@@ -0,0 +1,105 @@
+/*
+ * Copyright 2002-2017 Drew Noakes
+ *
+ *    Licensed under the Apache License, Version 2.0 (the "License");
+ *    you may not use this file except in compliance with the License.
+ *    You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing, software
+ *    distributed under the License is distributed on an "AS IS" BASIS,
+ *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *    See the License for the specific language governing permissions and
+ *    limitations under the License.
+ *
+ * More information about this project is available at:
+ *
+ *    https://drewnoakes.com/code/exif/
+ *    https://github.com/drewnoakes/metadata-extractor
+ */
+
+package com.drew.metadata.exif.makernotes;
+
+import com.drew.lang.annotations.NotNull;
+import com.drew.metadata.Directory;
+
+import java.util.HashMap;
+
+/**
+ * Describes tags specific to Reconyx HyperFire cameras.
+ *
+ * Reconyx uses a fixed makernote block.  Tag values are the byte index of the tag within the makernote.
+ * @author Todd West http://cascadescarnivoreproject.blogspot.com
+ */
+ at SuppressWarnings("WeakerAccess")
+public class ReconyxHyperFireMakernoteDirectory extends Directory
+{
+    /**
+     * Version number used for identifying makernotes from Reconyx HyperFire cameras.
+     */
+    public static final int MAKERNOTE_VERSION = 61697;
+
+    public static final int TAG_MAKERNOTE_VERSION = 0;
+    public static final int TAG_FIRMWARE_VERSION = 2;
+    public static final int TAG_TRIGGER_MODE = 12;
+    public static final int TAG_SEQUENCE = 14;
+    public static final int TAG_EVENT_NUMBER = 18;
+    public static final int TAG_DATE_TIME_ORIGINAL = 22;
+    public static final int TAG_MOON_PHASE = 36;
+    public static final int TAG_AMBIENT_TEMPERATURE_FAHRENHEIT = 38;
+    public static final int TAG_AMBIENT_TEMPERATURE = 40;
+    public static final int TAG_SERIAL_NUMBER = 42;
+    public static final int TAG_CONTRAST = 72;
+    public static final int TAG_BRIGHTNESS = 74;
+    public static final int TAG_SHARPNESS = 76;
+    public static final int TAG_SATURATION = 78;
+    public static final int TAG_INFRARED_ILLUMINATOR = 80;
+    public static final int TAG_MOTION_SENSITIVITY = 82;
+    public static final int TAG_BATTERY_VOLTAGE = 84;
+    public static final int TAG_USER_LABEL = 86;
+
+    @NotNull
+    protected static final HashMap<Integer, String> _tagNameMap = new HashMap<Integer, String>();
+
+    static
+    {
+        _tagNameMap.put(TAG_MAKERNOTE_VERSION, "Makernote Version");
+        _tagNameMap.put(TAG_FIRMWARE_VERSION, "Firmware Version");
+        _tagNameMap.put(TAG_TRIGGER_MODE, "Trigger Mode");
+        _tagNameMap.put(TAG_SEQUENCE, "Sequence");
+        _tagNameMap.put(TAG_EVENT_NUMBER, "Event Number");
+        _tagNameMap.put(TAG_DATE_TIME_ORIGINAL, "Date/Time Original");
+        _tagNameMap.put(TAG_MOON_PHASE, "Moon Phase");
+        _tagNameMap.put(TAG_AMBIENT_TEMPERATURE_FAHRENHEIT, "Ambient Temperature Fahrenheit");
+        _tagNameMap.put(TAG_AMBIENT_TEMPERATURE, "Ambient Temperature");
+        _tagNameMap.put(TAG_SERIAL_NUMBER, "Serial Number");
+        _tagNameMap.put(TAG_CONTRAST, "Contrast");
+        _tagNameMap.put(TAG_BRIGHTNESS, "Brightness");
+        _tagNameMap.put(TAG_SHARPNESS, "Sharpness");
+        _tagNameMap.put(TAG_SATURATION, "Saturation");
+        _tagNameMap.put(TAG_INFRARED_ILLUMINATOR, "Infrared Illuminator");
+        _tagNameMap.put(TAG_MOTION_SENSITIVITY, "Motion Sensitivity");
+        _tagNameMap.put(TAG_BATTERY_VOLTAGE, "Battery Voltage");
+        _tagNameMap.put(TAG_USER_LABEL, "User Label");
+    }
+
+    public ReconyxHyperFireMakernoteDirectory()
+    {
+        this.setDescriptor(new ReconyxHyperFireMakernoteDescriptor(this));
+    }
+
+    @Override
+    @NotNull
+    public String getName()
+    {
+        return "Reconyx HyperFire Makernote";
+    }
+
+    @Override
+    @NotNull
+    protected HashMap<Integer, String> getTagNameMap()
+    {
+        return _tagNameMap;
+    }
+}
diff --git a/src/com/drew/metadata/exif/makernotes/ReconyxUltraFireMakernoteDescriptor.java b/src/com/drew/metadata/exif/makernotes/ReconyxUltraFireMakernoteDescriptor.java
new file mode 100644
index 0000000..86d4e70
--- /dev/null
+++ b/src/com/drew/metadata/exif/makernotes/ReconyxUltraFireMakernoteDescriptor.java
@@ -0,0 +1,110 @@
+/*
+ * Copyright 2002-2017 Drew Noakes
+ *
+ *    Licensed under the Apache License, Version 2.0 (the "License");
+ *    you may not use this file except in compliance with the License.
+ *    You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing, software
+ *    distributed under the License is distributed on an "AS IS" BASIS,
+ *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *    See the License for the specific language governing permissions and
+ *    limitations under the License.
+ *
+ * More information about this project is available at:
+ *
+ *    https://drewnoakes.com/code/exif/
+ *    https://github.com/drewnoakes/metadata-extractor
+ */
+
+package com.drew.metadata.exif.makernotes;
+
+import com.drew.lang.annotations.NotNull;
+import com.drew.lang.annotations.Nullable;
+import com.drew.metadata.StringValue;
+import com.drew.metadata.TagDescriptor;
+
+import java.text.DateFormat;
+import java.text.DecimalFormat;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+
+import static com.drew.metadata.exif.makernotes.ReconyxUltraFireMakernoteDirectory.*;
+
+/**
+ * Provides human-readable string representations of tag values stored in a {@link ReconyxUltraFireMakernoteDirectory}.
+ *
+ * @author Todd West http://cascadescarnivoreproject.blogspot.com
+ */
+ at SuppressWarnings("WeakerAccess")
+public class ReconyxUltraFireMakernoteDescriptor extends TagDescriptor<ReconyxUltraFireMakernoteDirectory>
+{
+    public ReconyxUltraFireMakernoteDescriptor(@NotNull ReconyxUltraFireMakernoteDirectory directory)
+    {
+        super(directory);
+    }
+
+    @Override
+    @Nullable
+    public String getDescription(int tagType)
+    {
+        switch (tagType) {
+            case TAG_LABEL:
+                return _directory.getString(tagType);
+            case TAG_MAKERNOTE_ID:
+                return String.format("0x%08X", _directory.getInteger(tagType));
+            case TAG_MAKERNOTE_SIZE:
+                return String.format("%d", _directory.getInteger(tagType));
+            case TAG_MAKERNOTE_PUBLIC_ID:
+                return String.format("0x%08X", _directory.getInteger(tagType));
+            case TAG_MAKERNOTE_PUBLIC_SIZE:
+                return String.format("%d", _directory.getInteger(tagType));
+            case TAG_CAMERA_VERSION:
+            case TAG_UIB_VERSION:
+            case TAG_BTL_VERSION:
+            case TAG_PEX_VERSION:
+            case TAG_EVENT_TYPE:
+                return _directory.getString(tagType);
+            case TAG_SEQUENCE:
+                int[] sequence = _directory.getIntArray(tagType);
+                if (sequence == null)
+                    return null;
+                return String.format("%d/%d", sequence[0], sequence[1]);
+            case TAG_EVENT_NUMBER:
+                return String.format("%d", _directory.getInteger(tagType));
+            case TAG_DATE_TIME_ORIGINAL:
+                String date = _directory.getString(tagType);
+                try {
+                    DateFormat parser = new SimpleDateFormat("yyyy:MM:dd HH:mm:ss");
+                    return parser.format(parser.parse(date));
+                } catch (ParseException e) {
+                    return null;
+                }
+            /*case TAG_DAY_OF_WEEK:
+                return getIndexedDescription(tagType, CultureInfo.CurrentCulture.DateTimeFormat.DayNames);*/
+            case TAG_MOON_PHASE:
+                return getIndexedDescription(tagType, "New", "Waxing Crescent", "First Quarter", "Waxing Gibbous", "Full", "Waning Gibbous", "Last Quarter", "Waning Crescent");
+            case TAG_AMBIENT_TEMPERATURE_FAHRENHEIT:
+            case TAG_AMBIENT_TEMPERATURE:
+                return String.format("%d", _directory.getInteger(tagType));
+            case TAG_FLASH:
+                return getIndexedDescription(tagType, "Off", "On");
+            case TAG_BATTERY_VOLTAGE:
+                Double value = _directory.getDoubleObject(tagType);
+                DecimalFormat formatter = new DecimalFormat("0.000");
+                return value == null ? null : formatter.format(value);
+            case TAG_SERIAL_NUMBER:
+                // default is UTF_8
+                StringValue svalue = _directory.getStringValue(tagType);
+                if(svalue == null)
+                    return null;
+                return svalue.toString();
+            case TAG_USER_LABEL:
+                return _directory.getString(tagType);
+            default:
+                return super.getDescription(tagType);
+        }
+    }
+}
diff --git a/src/com/drew/metadata/exif/makernotes/ReconyxUltraFireMakernoteDirectory.java b/src/com/drew/metadata/exif/makernotes/ReconyxUltraFireMakernoteDirectory.java
new file mode 100644
index 0000000..d518ba7
--- /dev/null
+++ b/src/com/drew/metadata/exif/makernotes/ReconyxUltraFireMakernoteDirectory.java
@@ -0,0 +1,116 @@
+/*
+ * Copyright 2002-2017 Drew Noakes
+ *
+ *    Licensed under the Apache License, Version 2.0 (the "License");
+ *    you may not use this file except in compliance with the License.
+ *    You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing, software
+ *    distributed under the License is distributed on an "AS IS" BASIS,
+ *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *    See the License for the specific language governing permissions and
+ *    limitations under the License.
+ *
+ * More information about this project is available at:
+ *
+ *    https://drewnoakes.com/code/exif/
+ *    https://github.com/drewnoakes/metadata-extractor
+ */
+
+package com.drew.metadata.exif.makernotes;
+
+import com.drew.lang.annotations.NotNull;
+import com.drew.metadata.Directory;
+
+import java.util.HashMap;
+
+/**
+ * Describes tags specific to Reconyx UltraFire cameras.
+ *
+ * Reconyx uses a fixed makernote block.  Tag values are the byte index of the tag within the makernote.
+ * @author Todd West http://cascadescarnivoreproject.blogspot.com
+ */
+ at SuppressWarnings("WeakerAccess")
+public class ReconyxUltraFireMakernoteDirectory extends Directory
+{
+    /**
+     * Version number used for identifying makernotes from Reconyx UltraFire cameras.
+     */
+    public static final int MAKERNOTE_ID = 0x00010000;
+
+    /**
+     * Version number used for identifying the public portion of makernotes from Reconyx UltraFire cameras.
+     */
+    public static final int MAKERNOTE_PUBLIC_ID = 0x07f10001;
+
+    public static final int TAG_LABEL = 0;
+    public static final int TAG_MAKERNOTE_ID = 10;
+    public static final int TAG_MAKERNOTE_SIZE = 14;
+    public static final int TAG_MAKERNOTE_PUBLIC_ID = 18;
+    public static final int TAG_MAKERNOTE_PUBLIC_SIZE = 22;
+    public static final int TAG_CAMERA_VERSION = 24;
+    public static final int TAG_UIB_VERSION = 31;
+    public static final int TAG_BTL_VERSION = 38;
+    public static final int TAG_PEX_VERSION = 45;
+    public static final int TAG_EVENT_TYPE = 52;
+    public static final int TAG_SEQUENCE = 53;
+    public static final int TAG_EVENT_NUMBER = 55;
+    public static final int TAG_DATE_TIME_ORIGINAL = 59;
+    public static final int TAG_DAY_OF_WEEK = 66;
+    public static final int TAG_MOON_PHASE = 67;
+    public static final int TAG_AMBIENT_TEMPERATURE_FAHRENHEIT = 68;
+    public static final int TAG_AMBIENT_TEMPERATURE = 70;
+    public static final int TAG_FLASH = 72;
+    public static final int TAG_BATTERY_VOLTAGE = 73;
+    public static final int TAG_SERIAL_NUMBER = 75;
+    public static final int TAG_USER_LABEL = 80;
+
+    @NotNull
+    protected static final HashMap<Integer, String> _tagNameMap = new HashMap<Integer, String>();
+
+    static
+    {
+        _tagNameMap.put(TAG_LABEL, "Makernote Label");
+        _tagNameMap.put(TAG_MAKERNOTE_ID, "Makernote ID");
+        _tagNameMap.put(TAG_MAKERNOTE_SIZE, "Makernote Size");
+        _tagNameMap.put(TAG_MAKERNOTE_PUBLIC_ID, "Makernote Public ID");
+        _tagNameMap.put(TAG_MAKERNOTE_PUBLIC_SIZE, "Makernote Public Size");
+        _tagNameMap.put(TAG_CAMERA_VERSION, "Camera Version");
+        _tagNameMap.put(TAG_UIB_VERSION, "Uib Version");
+        _tagNameMap.put(TAG_BTL_VERSION, "Btl Version");
+        _tagNameMap.put(TAG_PEX_VERSION, "Pex Version");
+        _tagNameMap.put(TAG_EVENT_TYPE, "Event Type");
+        _tagNameMap.put(TAG_SEQUENCE, "Sequence");
+        _tagNameMap.put(TAG_EVENT_NUMBER, "Event Number");
+        _tagNameMap.put(TAG_DATE_TIME_ORIGINAL, "Date/Time Original");
+        _tagNameMap.put(TAG_DAY_OF_WEEK, "Day of Week");
+        _tagNameMap.put(TAG_MOON_PHASE, "Moon Phase");
+        _tagNameMap.put(TAG_AMBIENT_TEMPERATURE_FAHRENHEIT, "Ambient Temperature Fahrenheit");
+        _tagNameMap.put(TAG_AMBIENT_TEMPERATURE, "Ambient Temperature");
+        _tagNameMap.put(TAG_FLASH, "Flash");
+        _tagNameMap.put(TAG_BATTERY_VOLTAGE, "Battery Voltage");
+        _tagNameMap.put(TAG_SERIAL_NUMBER, "Serial Number");
+        _tagNameMap.put(TAG_USER_LABEL, "User Label");
+    }
+
+    public ReconyxUltraFireMakernoteDirectory()
+    {
+        this.setDescriptor(new ReconyxUltraFireMakernoteDescriptor(this));
+    }
+
+    @Override
+    @NotNull
+    public String getName()
+    {
+        return "Reconyx UltraFire Makernote";
+    }
+
+    @Override
+    @NotNull
+    protected HashMap<Integer, String> getTagNameMap()
+    {
+        return _tagNameMap;
+    }
+}
diff --git a/src/com/drew/metadata/exif/makernotes/RicohMakernoteDescriptor.java b/src/com/drew/metadata/exif/makernotes/RicohMakernoteDescriptor.java
index 2cafe45..ace1cbc 100644
--- a/src/com/drew/metadata/exif/makernotes/RicohMakernoteDescriptor.java
+++ b/src/com/drew/metadata/exif/makernotes/RicohMakernoteDescriptor.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2002-2016 Drew Noakes
+ * Copyright 2002-2017 Drew Noakes
  *
  *    Licensed under the Apache License, Version 2.0 (the "License");
  *    you may not use this file except in compliance with the License.
@@ -25,13 +25,14 @@ import com.drew.lang.annotations.Nullable;
 import com.drew.metadata.TagDescriptor;
 
 /**
- * Provides human-readable string representations of tag values stored in a {@link RicohMakernoteDescriptor}.
+ * Provides human-readable string representations of tag values stored in a {@link RicohMakernoteDirectory}.
  * <p>
  * Some information about this makernote taken from here:
  * http://www.ozhiker.com/electronics/pjmt/jpeg_info/ricoh_mn.html
  *
  * @author Drew Noakes https://drewnoakes.com
  */
+ at SuppressWarnings("WeakerAccess")
 public class RicohMakernoteDescriptor extends TagDescriptor<RicohMakernoteDirectory>
 {
     public RicohMakernoteDescriptor(@NotNull RicohMakernoteDirectory directory)
@@ -44,20 +45,12 @@ public class RicohMakernoteDescriptor extends TagDescriptor<RicohMakernoteDirect
     public String getDescription(int tagType)
     {
         switch (tagType) {
-//            case TAG_PRINT_IMAGE_MATCHING_INFO:
-//                return getPrintImageMatchingInfoDescription();
 //            case TAG_PROPRIETARY_THUMBNAIL:
 //                return getProprietaryThumbnailDataDescription();
             default:
                 return super.getDescription(tagType);
         }
     }
-
-//    @Nullable
-//    public String getPrintImageMatchingInfoDescription()
-//    {
-//        return getByteLengthDescription(TAG_PRINT_IMAGE_MATCHING_INFO);
-//    }
 //
 //    @Nullable
 //    public String getProprietaryThumbnailDataDescription()
diff --git a/src/com/drew/metadata/exif/makernotes/RicohMakernoteDirectory.java b/src/com/drew/metadata/exif/makernotes/RicohMakernoteDirectory.java
index 066c81b..da36a58 100644
--- a/src/com/drew/metadata/exif/makernotes/RicohMakernoteDirectory.java
+++ b/src/com/drew/metadata/exif/makernotes/RicohMakernoteDirectory.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2002-2016 Drew Noakes
+ * Copyright 2002-2017 Drew Noakes
  *
  *    Licensed under the Apache License, Version 2.0 (the "License");
  *    you may not use this file except in compliance with the License.
@@ -30,6 +30,7 @@ import java.util.HashMap;
  *
  * @author Drew Noakes https://drewnoakes.com
  */
+ at SuppressWarnings("WeakerAccess")
 public class RicohMakernoteDirectory extends Directory
 {
     public static final int TAG_MAKERNOTE_DATA_TYPE = 0x0001;
diff --git a/src/com/drew/metadata/exif/makernotes/SamsungType2MakernoteDescriptor.java b/src/com/drew/metadata/exif/makernotes/SamsungType2MakernoteDescriptor.java
new file mode 100644
index 0000000..dc747ed
--- /dev/null
+++ b/src/com/drew/metadata/exif/makernotes/SamsungType2MakernoteDescriptor.java
@@ -0,0 +1,213 @@
+/*
+ * Copyright 2002-2017 Drew Noakes
+ *
+ *    Licensed under the Apache License, Version 2.0 (the "License");
+ *    you may not use this file except in compliance with the License.
+ *    You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing, software
+ *    distributed under the License is distributed on an "AS IS" BASIS,
+ *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *    See the License for the specific language governing permissions and
+ *    limitations under the License.
+ *
+ * More information about this project is available at:
+ *
+ *    https://drewnoakes.com/code/exif/
+ *    https://github.com/drewnoakes/metadata-extractor
+ */
+
+package com.drew.metadata.exif.makernotes;
+
+import com.drew.lang.annotations.NotNull;
+import com.drew.lang.annotations.Nullable;
+import com.drew.metadata.TagDescriptor;
+
+import static com.drew.metadata.exif.makernotes.SamsungType2MakernoteDirectory.*;
+
+/**
+ * Provides human-readable string representations of tag values stored in a {@link SamsungType2MakernoteDirectory}.
+ * <p>
+ * Tag reference from: http://www.sno.phy.queensu.ca/~phil/exiftool/TagNames/Samsung.html
+ *
+ * @author Kevin Mott https://github.com/kwhopper
+ * @author Drew Noakes https://drewnoakes.com
+ */
+ at SuppressWarnings("WeakerAccess")
+public class SamsungType2MakernoteDescriptor extends TagDescriptor<SamsungType2MakernoteDirectory>
+{
+    public SamsungType2MakernoteDescriptor(@NotNull SamsungType2MakernoteDirectory directory)
+    {
+        super(directory);
+    }
+
+    @Override
+    @Nullable
+    public String getDescription(int tagType)
+    {
+        switch (tagType) {
+            case TagMakerNoteVersion:
+                return getMakernoteVersionDescription();
+            case TagDeviceType:
+                return getDeviceTypeDescription();
+            case TagSamsungModelId:
+                return getSamsungModelIdDescription();
+
+            case TagCameraTemperature:
+                return getCameraTemperatureDescription();
+
+            case TagFaceDetect:
+                return getFaceDetectDescription();
+            case TagFaceRecognition:
+                return getFaceRecognitionDescription();
+            default:
+                return super.getDescription(tagType);
+        }
+    }
+
+    @Nullable
+    public String getMakernoteVersionDescription()
+    {
+        return getVersionBytesDescription(TagMakerNoteVersion, 2);
+    }
+
+    @Nullable
+    public String getDeviceTypeDescription()
+    {
+        Integer value = _directory.getInteger(TagDeviceType);
+        if (value == null)
+            return null;
+
+        switch (value)
+        {
+            case 0x1000:
+                return "Compact Digital Camera";
+            case 0x2000:
+                return "High-end NX Camera";
+            case 0x3000:
+                return "HXM Video Camera";
+            case 0x12000:
+                return "Cell Phone";
+            case 0x300000:
+                return "SMX Video Camera";
+            default:
+                return String.format("Unknown (%d)", value);
+        }
+    }
+
+    @Nullable
+    public String getSamsungModelIdDescription()
+    {
+        Integer value = _directory.getInteger(TagSamsungModelId);
+        if (value == null)
+            return null;
+
+        switch (value)
+        {
+            case 0x100101c:
+                return "NX10";
+            /*case 0x1001226:
+                    return "HMX-S10BP";*/
+            case 0x1001226:
+                    return "HMX-S15BP";
+            case 0x1001233:
+                    return "HMX-Q10";
+            /*case 0x1001234:
+                    return "HMX-H300";*/
+            case 0x1001234:
+                    return "HMX-H304";
+            case 0x100130c:
+                    return "NX100";
+            case 0x1001327:
+                    return "NX11";
+            case 0x170104e:
+                    return "ES70, ES71 / VLUU ES70, ES71 / SL600";
+            case 0x1701052:
+                    return "ES73 / VLUU ES73 / SL605";
+            case 0x1701300:
+                    return "ES28 / VLUU ES28";
+            case 0x1701303:
+                    return "ES74,ES75,ES78 / VLUU ES75,ES78";
+            case 0x2001046:
+                    return "PL150 / VLUU PL150 / TL210 / PL151";
+            case 0x2001311:
+                    return "PL120,PL121 / VLUU PL120,PL121";
+            case 0x2001315:
+                    return "PL170,PL171 / VLUUPL170,PL171";
+            case 0x200131e:
+                    return "PL210, PL211 / VLUU PL210, PL211";
+            case 0x2701317:
+                    return "PL20,PL21 / VLUU PL20,PL21";
+            case 0x2a0001b:
+                    return "WP10 / VLUU WP10 / AQ100";
+            case 0x3000000:
+                    return "Various Models (0x3000000)";
+            case 0x3a00018:
+                    return "Various Models (0x3a00018)";
+            case 0x400101f:
+                    return "ST1000 / ST1100 / VLUU ST1000 / CL65";
+            case 0x4001022:
+                    return "ST550 / VLUU ST550 / TL225";
+            case 0x4001025:
+                    return "Various Models (0x4001025)";
+            case 0x400103e:
+                    return "VLUU ST5500, ST5500, CL80";
+            case 0x4001041:
+                    return "VLUU ST5000, ST5000, TL240";
+            case 0x4001043:
+                    return "ST70 / VLUU ST70 / ST71";
+            case 0x400130a:
+                    return "Various Models (0x400130a)";
+            case 0x400130e:
+                    return "ST90,ST91 / VLUU ST90,ST91";
+            case 0x4001313:
+                    return "VLUU ST95, ST95";
+            case 0x4a00015:
+                    return "VLUU ST60";
+            case 0x4a0135b:
+                    return "ST30, ST65 / VLUU ST65 / ST67";
+            case 0x5000000:
+                    return "Various Models (0x5000000)";
+            case 0x5001038:
+                    return "Various Models (0x5001038)";
+            case 0x500103a:
+                    return "WB650 / VLUU WB650 / WB660";
+            case 0x500103c:
+                    return "WB600 / VLUU WB600 / WB610";
+            case 0x500133e:
+                    return "WB150 / WB150F / WB152 / WB152F / WB151";
+            case 0x5a0000f:
+                    return "WB5000 / HZ25W";
+            case 0x6001036:
+                    return "EX1";
+            case 0x700131c:
+                    return "VLUU SH100, SH100";
+            case 0x27127002:
+                    return "SMX - C20N";
+            default:
+                return String.format("Unknown (%d)", value);
+        }
+    }
+
+    @Nullable
+    private String getCameraTemperatureDescription()
+    {
+        return getFormattedInt(TagCameraTemperature, "%d C");
+    }
+
+    @Nullable
+    public String getFaceDetectDescription()
+    {
+        return getIndexedDescription(TagFaceDetect,
+            "Off", "On");
+    }
+
+    @Nullable
+    public String getFaceRecognitionDescription()
+    {
+        return getIndexedDescription(TagFaceRecognition,
+            "Off", "On");
+    }
+}
diff --git a/src/com/drew/metadata/exif/makernotes/SamsungType2MakernoteDirectory.java b/src/com/drew/metadata/exif/makernotes/SamsungType2MakernoteDirectory.java
new file mode 100644
index 0000000..5af173c
--- /dev/null
+++ b/src/com/drew/metadata/exif/makernotes/SamsungType2MakernoteDirectory.java
@@ -0,0 +1,89 @@
+/*
+ * Copyright 2002-2017 Drew Noakes
+ *
+ *    Licensed under the Apache License, Version 2.0 (the "License");
+ *    you may not use this file except in compliance with the License.
+ *    You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing, software
+ *    distributed under the License is distributed on an "AS IS" BASIS,
+ *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *    See the License for the specific language governing permissions and
+ *    limitations under the License.
+ *
+ * More information about this project is available at:
+ *
+ *    https://drewnoakes.com/code/exif/
+ *    https://github.com/drewnoakes/metadata-extractor
+ */
+
+package com.drew.metadata.exif.makernotes;
+
+import com.drew.lang.annotations.NotNull;
+import com.drew.metadata.Directory;
+
+import java.util.HashMap;
+
+/**
+ * Describes tags specific certain 'newer' Samsung cameras.
+ * <p>
+ * Tag reference from: http://www.sno.phy.queensu.ca/~phil/exiftool/TagNames/Samsung.html
+ *
+ * @author Kevin Mott https://github.com/kwhopper
+ * @author Drew Noakes https://drewnoakes.com
+ */
+ at SuppressWarnings("WeakerAccess")
+public class SamsungType2MakernoteDirectory extends Directory
+{
+    // This list is incomplete
+    public static final int TagMakerNoteVersion = 0x001;
+    public static final int TagDeviceType = 0x0002;
+    public static final int TagSamsungModelId = 0x0003;
+
+    public static final int TagCameraTemperature = 0x0043;
+
+    public static final int TagFaceDetect = 0x0100;
+    public static final int TagFaceRecognition = 0x0120;
+    public static final int TagFaceName = 0x0123;
+
+    // following tags found only in SRW images
+    public static final int TagFirmwareName = 0xa001;
+
+    @NotNull
+    protected static final HashMap<Integer, String> _tagNameMap = new HashMap<Integer, String>();
+
+    static
+    {
+        _tagNameMap.put(TagMakerNoteVersion, "Maker Note Version");
+        _tagNameMap.put(TagDeviceType, "Device Type");
+        _tagNameMap.put(TagSamsungModelId, "Model Id");
+
+        _tagNameMap.put(TagCameraTemperature, "Camera Temperature");
+
+        _tagNameMap.put(TagFaceDetect, "Face Detect");
+        _tagNameMap.put(TagFaceRecognition, "Face Recognition");
+        _tagNameMap.put(TagFaceName, "Face Name");
+        _tagNameMap.put(TagFirmwareName, "Firmware Name");
+    }
+
+    public SamsungType2MakernoteDirectory()
+    {
+        this.setDescriptor(new SamsungType2MakernoteDescriptor(this));
+    }
+
+    @Override
+    @NotNull
+    public String getName()
+    {
+        return "Samsung Makernote";
+    }
+
+    @Override
+    @NotNull
+    protected HashMap<Integer, String> getTagNameMap()
+    {
+        return _tagNameMap;
+    }
+}
diff --git a/src/com/drew/metadata/exif/makernotes/SanyoMakernoteDescriptor.java b/src/com/drew/metadata/exif/makernotes/SanyoMakernoteDescriptor.java
index 6c2b43f..3367fa1 100644
--- a/src/com/drew/metadata/exif/makernotes/SanyoMakernoteDescriptor.java
+++ b/src/com/drew/metadata/exif/makernotes/SanyoMakernoteDescriptor.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2002-2016 Drew Noakes
+ * Copyright 2002-2017 Drew Noakes
  *
  *    Licensed under the Apache License, Version 2.0 (the "License");
  *    you may not use this file except in compliance with the License.
@@ -32,6 +32,7 @@ import static com.drew.metadata.exif.makernotes.SanyoMakernoteDirectory.*;
  *
  * @author Drew Noakes https://drewnoakes.com
  */
+ at SuppressWarnings("WeakerAccess")
 public class SanyoMakernoteDescriptor extends TagDescriptor<SanyoMakernoteDirectory>
 {
     public SanyoMakernoteDescriptor(@NotNull SanyoMakernoteDirectory directory)
diff --git a/src/com/drew/metadata/exif/makernotes/SanyoMakernoteDirectory.java b/src/com/drew/metadata/exif/makernotes/SanyoMakernoteDirectory.java
index 702e97c..e22d1fb 100644
--- a/src/com/drew/metadata/exif/makernotes/SanyoMakernoteDirectory.java
+++ b/src/com/drew/metadata/exif/makernotes/SanyoMakernoteDirectory.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2002-2016 Drew Noakes
+ * Copyright 2002-2017 Drew Noakes
  *
  *    Licensed under the Apache License, Version 2.0 (the "License");
  *    you may not use this file except in compliance with the License.
@@ -31,6 +31,7 @@ import java.util.HashMap;
  *
  * @author Drew Noakes https://drewnoakes.com
  */
+ at SuppressWarnings("WeakerAccess")
 public class SanyoMakernoteDirectory extends Directory
 {
     public static final int TAG_MAKERNOTE_OFFSET = 0x00ff;
@@ -61,7 +62,7 @@ public class SanyoMakernoteDirectory extends Directory
     public static final int TAG_SEQUENCE_SHOT_INTERVAL = 0x0224;
     public static final int TAG_FLASH_MODE = 0x0225;
 
-    public static final int TAG_PRINT_IM = 0x0e00;
+    public static final int TAG_PRINT_IMAGE_MATCHING_INFO = 0x0E00;
 
     public static final int TAG_DATA_DUMP = 0x0f00;
 
@@ -98,7 +99,7 @@ public class SanyoMakernoteDirectory extends Directory
         _tagNameMap.put(TAG_SEQUENCE_SHOT_INTERVAL, "Sequence Shot Interval");
         _tagNameMap.put(TAG_FLASH_MODE, "Flash Mode");
 
-        _tagNameMap.put(TAG_PRINT_IM, "Print IM");
+        _tagNameMap.put(TAG_PRINT_IMAGE_MATCHING_INFO, "Print IM");
 
         _tagNameMap.put(TAG_DATA_DUMP, "Data Dump");
     }
diff --git a/src/com/drew/metadata/exif/makernotes/SigmaMakernoteDescriptor.java b/src/com/drew/metadata/exif/makernotes/SigmaMakernoteDescriptor.java
index c0e0081..3111378 100644
--- a/src/com/drew/metadata/exif/makernotes/SigmaMakernoteDescriptor.java
+++ b/src/com/drew/metadata/exif/makernotes/SigmaMakernoteDescriptor.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2002-2016 Drew Noakes
+ * Copyright 2002-2017 Drew Noakes
  *
  *    Licensed under the Apache License, Version 2.0 (the "License");
  *    you may not use this file except in compliance with the License.
@@ -32,6 +32,7 @@ import static com.drew.metadata.exif.makernotes.SigmaMakernoteDirectory.*;
  *
  * @author Drew Noakes https://drewnoakes.com
  */
+ at SuppressWarnings("WeakerAccess")
 public class SigmaMakernoteDescriptor extends TagDescriptor<SigmaMakernoteDirectory>
 {
     public SigmaMakernoteDescriptor(@NotNull SigmaMakernoteDirectory directory)
diff --git a/src/com/drew/metadata/exif/makernotes/SigmaMakernoteDirectory.java b/src/com/drew/metadata/exif/makernotes/SigmaMakernoteDirectory.java
index 76d2867..c62b002 100644
--- a/src/com/drew/metadata/exif/makernotes/SigmaMakernoteDirectory.java
+++ b/src/com/drew/metadata/exif/makernotes/SigmaMakernoteDirectory.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2002-2016 Drew Noakes
+ * Copyright 2002-2017 Drew Noakes
  *
  *    Licensed under the Apache License, Version 2.0 (the "License");
  *    you may not use this file except in compliance with the License.
@@ -31,6 +31,7 @@ import java.util.HashMap;
  *
  * @author Drew Noakes https://drewnoakes.com
  */
+ at SuppressWarnings("WeakerAccess")
 public class SigmaMakernoteDirectory extends Directory
 {
     public static final int TAG_SERIAL_NUMBER = 0x2;
diff --git a/src/com/drew/metadata/exif/makernotes/SonyType1MakernoteDescriptor.java b/src/com/drew/metadata/exif/makernotes/SonyType1MakernoteDescriptor.java
index f394095..12e383b 100644
--- a/src/com/drew/metadata/exif/makernotes/SonyType1MakernoteDescriptor.java
+++ b/src/com/drew/metadata/exif/makernotes/SonyType1MakernoteDescriptor.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2002-2016 Drew Noakes
+ * Copyright 2002-2017 Drew Noakes
  *
  *    Licensed under the Apache License, Version 2.0 (the "License");
  *    you may not use this file except in compliance with the License.
@@ -32,6 +32,7 @@ import static com.drew.metadata.exif.makernotes.SonyType1MakernoteDirectory.*;
  *
  * @author Drew Noakes https://drewnoakes.com
  */
+ at SuppressWarnings("WeakerAccess")
 public class SonyType1MakernoteDescriptor extends TagDescriptor<SonyType1MakernoteDirectory>
 {
     public SonyType1MakernoteDescriptor(@NotNull SonyType1MakernoteDirectory directory)
@@ -432,19 +433,43 @@ public class SonyType1MakernoteDescriptor extends TagDescriptor<SonyType1Makerno
     @Nullable
     public String getVignettingCorrectionDescription()
     {
-        return getIndexedDescription(TAG_VIGNETTING_CORRECTION, "Off", null, "Auto");
+        Integer value = _directory.getInteger(TAG_VIGNETTING_CORRECTION);
+        if (value == null)
+            return null;
+        switch (value) {
+            case 0: return "Off";
+            case 2: return "Auto";
+            case 0xffffffff: return "N/A";
+            default: return String.format("Unknown (%d)", value);
+        }
     }
 
     @Nullable
     public String getLateralChromaticAberrationDescription()
     {
-        return getIndexedDescription(TAG_LATERAL_CHROMATIC_ABERRATION, "Off", null, "Auto");
+        Integer value = _directory.getInteger(TAG_LATERAL_CHROMATIC_ABERRATION);
+        if (value == null)
+            return null;
+        switch (value) {
+            case 0: return "Off";
+            case 2: return "Auto";
+            case 0xffffffff: return "N/A";
+            default: return String.format("Unknown (%d)", value);
+        }
     }
 
     @Nullable
     public String getDistortionCorrectionDescription()
     {
-        return getIndexedDescription(TAG_DISTORTION_CORRECTION, "Off", null, "Auto");
+        Integer value = _directory.getInteger(TAG_DISTORTION_CORRECTION);
+        if (value == null)
+            return null;
+        switch (value) {
+            case 0: return "Off";
+            case 2: return "Auto";
+            case 0xffffffff: return "N/A";
+            default: return String.format("Unknown (%d)", value);
+        }
     }
 
     @Nullable
diff --git a/src/com/drew/metadata/exif/makernotes/SonyType1MakernoteDirectory.java b/src/com/drew/metadata/exif/makernotes/SonyType1MakernoteDirectory.java
index d4f3b6c..2a23ffb 100644
--- a/src/com/drew/metadata/exif/makernotes/SonyType1MakernoteDirectory.java
+++ b/src/com/drew/metadata/exif/makernotes/SonyType1MakernoteDirectory.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2002-2016 Drew Noakes
+ * Copyright 2002-2017 Drew Noakes
  *
  *    Licensed under the Apache License, Version 2.0 (the "License");
  *    you may not use this file except in compliance with the License.
@@ -30,6 +30,7 @@ import java.util.HashMap;
  *
  * @author Drew Noakes https://drewnoakes.com
  */
+ at SuppressWarnings("WeakerAccess")
 public class SonyType1MakernoteDirectory extends Directory
 {
     public static final int TAG_CAMERA_INFO = 0x0010;
@@ -140,7 +141,7 @@ public class SonyType1MakernoteDirectory extends Directory
         _tagNameMap.put(TAG_WHITE_BALANCE, "White Balance");
         _tagNameMap.put(TAG_EXTRA_INFO, "Extra Info");
 
-        _tagNameMap.put(TAG_PRINT_IMAGE_MATCHING_INFO, "Print Image Matching Info");
+        _tagNameMap.put(TAG_PRINT_IMAGE_MATCHING_INFO, "Print Image Matching (PIM) Info");
 
         _tagNameMap.put(TAG_MULTI_BURST_MODE, "Multi Burst Mode");
         _tagNameMap.put(TAG_MULTI_BURST_IMAGE_WIDTH, "Multi Burst Image Width");
diff --git a/src/com/drew/metadata/exif/makernotes/SonyType6MakernoteDescriptor.java b/src/com/drew/metadata/exif/makernotes/SonyType6MakernoteDescriptor.java
index 7962b5b..c08f33a 100644
--- a/src/com/drew/metadata/exif/makernotes/SonyType6MakernoteDescriptor.java
+++ b/src/com/drew/metadata/exif/makernotes/SonyType6MakernoteDescriptor.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2002-2016 Drew Noakes
+ * Copyright 2002-2017 Drew Noakes
  *
  *    Licensed under the Apache License, Version 2.0 (the "License");
  *    you may not use this file except in compliance with the License.
@@ -32,6 +32,7 @@ import static com.drew.metadata.exif.makernotes.SonyType6MakernoteDirectory.*;
  *
  * @author Drew Noakes https://drewnoakes.com
  */
+ at SuppressWarnings("WeakerAccess")
 public class SonyType6MakernoteDescriptor extends TagDescriptor<SonyType6MakernoteDirectory>
 {
     public SonyType6MakernoteDescriptor(@NotNull SonyType6MakernoteDirectory directory)
diff --git a/src/com/drew/metadata/exif/makernotes/SonyType6MakernoteDirectory.java b/src/com/drew/metadata/exif/makernotes/SonyType6MakernoteDirectory.java
index d354715..90690a1 100644
--- a/src/com/drew/metadata/exif/makernotes/SonyType6MakernoteDirectory.java
+++ b/src/com/drew/metadata/exif/makernotes/SonyType6MakernoteDirectory.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2002-2016 Drew Noakes
+ * Copyright 2002-2017 Drew Noakes
  *
  *    Licensed under the Apache License, Version 2.0 (the "License");
  *    you may not use this file except in compliance with the License.
@@ -31,6 +31,7 @@ import java.util.HashMap;
  *
  * @author Drew Noakes https://drewnoakes.com
  */
+ at SuppressWarnings("WeakerAccess")
 public class SonyType6MakernoteDirectory extends Directory
 {
     public static final int TAG_MAKERNOTE_THUMB_OFFSET = 0x0513;
diff --git a/src/com/drew/metadata/exif/makernotes/package-info.java b/src/com/drew/metadata/exif/makernotes/package-info.java
new file mode 100644
index 0000000..a3bc025
--- /dev/null
+++ b/src/com/drew/metadata/exif/makernotes/package-info.java
@@ -0,0 +1,5 @@
+/**
+ * Contains {@link com.drew.metadata.Directory} and {@link com.drew.metadata.TagDescriptor} classes related to the
+ * modelling of manufacturer-specific makernotes.
+ */
+package com.drew.metadata.exif.makernotes;
diff --git a/src/com/drew/metadata/exif/makernotes/package.html b/src/com/drew/metadata/exif/makernotes/package.html
deleted file mode 100644
index ad9c9d5..0000000
--- a/src/com/drew/metadata/exif/makernotes/package.html
+++ /dev/null
@@ -1,33 +0,0 @@
-<!--
-  ~ Copyright 2002-2016 Drew Noakes
-  ~
-  ~    Licensed under the Apache License, Version 2.0 (the "License");
-  ~    you may not use this file except in compliance with the License.
-  ~    You may obtain a copy of the License at
-  ~
-  ~        http://www.apache.org/licenses/LICENSE-2.0
-  ~
-  ~    Unless required by applicable law or agreed to in writing, software
-  ~    distributed under the License is distributed on an "AS IS" BASIS,
-  ~    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  ~    See the License for the specific language governing permissions and
-  ~    limitations under the License.
-  ~
-  ~ More information about this project is available at:
-  ~
-  ~    https://drewnoakes.com/code/exif/
-  ~    https://github.com/drewnoakes/metadata-extractor
-  -->
-
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
-<html>
-<head>
-</head>
-<body bgcolor="white">
-
-Contains {@link com.drew.metadata.Directory} and {@link com.drew.metadata.TagDescriptor} classes related to the modelling of manufacturer-specific makernotes.
-
-<!-- Put @see and @since tags down here. -->
-
-</body>
-</html>
diff --git a/src/com/drew/metadata/exif/package-info.java b/src/com/drew/metadata/exif/package-info.java
new file mode 100644
index 0000000..707b8d6
--- /dev/null
+++ b/src/com/drew/metadata/exif/package-info.java
@@ -0,0 +1,4 @@
+/**
+ * Contains classes for the extraction and modelling of Exif metadata and camera manufacturer-specific makernotes.
+ */
+package com.drew.metadata.exif;
diff --git a/src/com/drew/metadata/exif/package.html b/src/com/drew/metadata/exif/package.html
deleted file mode 100644
index 6fc6484..0000000
--- a/src/com/drew/metadata/exif/package.html
+++ /dev/null
@@ -1,33 +0,0 @@
-<!--
-  ~ Copyright 2002-2016 Drew Noakes
-  ~
-  ~    Licensed under the Apache License, Version 2.0 (the "License");
-  ~    you may not use this file except in compliance with the License.
-  ~    You may obtain a copy of the License at
-  ~
-  ~        http://www.apache.org/licenses/LICENSE-2.0
-  ~
-  ~    Unless required by applicable law or agreed to in writing, software
-  ~    distributed under the License is distributed on an "AS IS" BASIS,
-  ~    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  ~    See the License for the specific language governing permissions and
-  ~    limitations under the License.
-  ~
-  ~ More information about this project is available at:
-  ~
-  ~    https://drewnoakes.com/code/exif/
-  ~    https://github.com/drewnoakes/metadata-extractor
-  -->
-
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
-<html>
-<head>
-</head>
-<body bgcolor="white">
-
-Contains classes for the extraction and modelling of Exif metadata and camera manufacturer-specific makernotes.
-
-<!-- Put @see and @since tags down here. -->
-
-</body>
-</html>
diff --git a/src/com/drew/metadata/file/FileMetadataDescriptor.java b/src/com/drew/metadata/file/FileMetadataDescriptor.java
index 85104c1..601ea7d 100644
--- a/src/com/drew/metadata/file/FileMetadataDescriptor.java
+++ b/src/com/drew/metadata/file/FileMetadataDescriptor.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2002-2016 Drew Noakes
+ * Copyright 2002-2017 Drew Noakes
  *
  *    Licensed under the Apache License, Version 2.0 (the "License");
  *    you may not use this file except in compliance with the License.
@@ -29,6 +29,7 @@ import static com.drew.metadata.file.FileMetadataDirectory.*;
 /**
  * @author Drew Noakes https://drewnoakes.com
  */
+ at SuppressWarnings("WeakerAccess")
 public class FileMetadataDescriptor extends TagDescriptor<FileMetadataDirectory>
 {
     public FileMetadataDescriptor(@NotNull FileMetadataDirectory directory)
diff --git a/src/com/drew/metadata/file/FileMetadataDirectory.java b/src/com/drew/metadata/file/FileMetadataDirectory.java
index 89e6122..f01d832 100644
--- a/src/com/drew/metadata/file/FileMetadataDirectory.java
+++ b/src/com/drew/metadata/file/FileMetadataDirectory.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2002-2016 Drew Noakes
+ * Copyright 2002-2017 Drew Noakes
  *
  *    Licensed under the Apache License, Version 2.0 (the "License");
  *    you may not use this file except in compliance with the License.
@@ -28,6 +28,7 @@ import java.util.HashMap;
 /**
  * @author Drew Noakes https://drewnoakes.com
  */
+ at SuppressWarnings("WeakerAccess")
 public class FileMetadataDirectory extends Directory
 {
     public static final int TAG_FILE_NAME = 1;
diff --git a/src/com/drew/metadata/file/FileMetadataReader.java b/src/com/drew/metadata/file/FileMetadataReader.java
index bc18376..8cb5135 100644
--- a/src/com/drew/metadata/file/FileMetadataReader.java
+++ b/src/com/drew/metadata/file/FileMetadataReader.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2002-2016 Drew Noakes
+ * Copyright 2002-2017 Drew Noakes
  *
  *    Licensed under the Apache License, Version 2.0 (the "License");
  *    you may not use this file except in compliance with the License.
diff --git a/src/com/drew/metadata/file/package-info.java b/src/com/drew/metadata/file/package-info.java
new file mode 100644
index 0000000..d8c0b47
--- /dev/null
+++ b/src/com/drew/metadata/file/package-info.java
@@ -0,0 +1,6 @@
+/**
+ * Contains classes for the extraction and modelling of file system metadata.
+ *
+ * @since 2.8.0
+ */
+package com.drew.metadata.file;
diff --git a/src/com/drew/metadata/file/package.html b/src/com/drew/metadata/file/package.html
deleted file mode 100644
index 9e513ae..0000000
--- a/src/com/drew/metadata/file/package.html
+++ /dev/null
@@ -1,34 +0,0 @@
-<!--
-  ~ Copyright 2002-2016 Drew Noakes
-  ~
-  ~    Licensed under the Apache License, Version 2.0 (the "License");
-  ~    you may not use this file except in compliance with the License.
-  ~    You may obtain a copy of the License at
-  ~
-  ~        http://www.apache.org/licenses/LICENSE-2.0
-  ~
-  ~    Unless required by applicable law or agreed to in writing, software
-  ~    distributed under the License is distributed on an "AS IS" BASIS,
-  ~    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  ~    See the License for the specific language governing permissions and
-  ~    limitations under the License.
-  ~
-  ~ More information about this project is available at:
-  ~
-  ~    https://drewnoakes.com/code/exif/
-  ~    https://github.com/drewnoakes/metadata-extractor
-  -->
-
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
-<html>
-<head>
-</head>
-<body bgcolor="white">
-
-Contains classes for the extraction and modelling of file system metadata.
-
-<!-- Put @see and @since tags down here. -->
- at since 2.8.0
-
-</body>
-</html>
diff --git a/src/com/drew/metadata/iptc/IptcDescriptor.java b/src/com/drew/metadata/iptc/IptcDescriptor.java
index 005e04e..468dda5 100644
--- a/src/com/drew/metadata/iptc/IptcDescriptor.java
+++ b/src/com/drew/metadata/iptc/IptcDescriptor.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2002-2016 Drew Noakes
+ * Copyright 2002-2017 Drew Noakes
  *
  *    Licensed under the Apache License, Version 2.0 (the "License");
  *    you may not use this file except in compliance with the License.
@@ -34,6 +34,7 @@ import static com.drew.metadata.iptc.IptcDirectory.*;
  *
  * @author Drew Noakes https://drewnoakes.com
  */
+ at SuppressWarnings("WeakerAccess")
 public class IptcDescriptor extends TagDescriptor<IptcDirectory>
 {
     public IptcDescriptor(@NotNull IptcDirectory directory)
diff --git a/src/com/drew/metadata/iptc/IptcDirectory.java b/src/com/drew/metadata/iptc/IptcDirectory.java
index b8e4393..0e436df 100644
--- a/src/com/drew/metadata/iptc/IptcDirectory.java
+++ b/src/com/drew/metadata/iptc/IptcDirectory.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2002-2016 Drew Noakes
+ * Copyright 2002-2017 Drew Noakes
  *
  *    Licensed under the Apache License, Version 2.0 (the "License");
  *    you may not use this file except in compliance with the License.
@@ -37,6 +37,7 @@ import java.util.List;
  *
  * @author Drew Noakes https://drewnoakes.com
  */
+ at SuppressWarnings("WeakerAccess")
 public class IptcDirectory extends Directory
 {
     // IPTC EnvelopeRecord Tags
diff --git a/src/com/drew/metadata/iptc/IptcReader.java b/src/com/drew/metadata/iptc/IptcReader.java
index 06b067e..3787bc7 100644
--- a/src/com/drew/metadata/iptc/IptcReader.java
+++ b/src/com/drew/metadata/iptc/IptcReader.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2002-2016 Drew Noakes
+ * Copyright 2002-2017 Drew Noakes
  *
  *    Licensed under the Apache License, Version 2.0 (the "License");
  *    you may not use this file except in compliance with the License.
@@ -28,8 +28,10 @@ import com.drew.lang.annotations.NotNull;
 import com.drew.lang.annotations.Nullable;
 import com.drew.metadata.Directory;
 import com.drew.metadata.Metadata;
+import com.drew.metadata.StringValue;
 
 import java.io.IOException;
+import java.nio.charset.Charset;
 import java.util.Collections;
 
 /**
@@ -55,6 +57,7 @@ public class IptcReader implements JpegSegmentMetadataReader
     public static final int DATA_RECORD = 8;
     public static final int POST_DATA_RECORD = 9;
 */
+    private static final byte IptcMarkerByte = 0x1c;
 
     @NotNull
     public Iterable<JpegSegmentType> getSegmentTypes()
@@ -66,7 +69,7 @@ public class IptcReader implements JpegSegmentMetadataReader
     {
         for (byte[] segmentBytes : segments) {
             // Ensure data starts with the IPTC marker byte
-            if (segmentBytes.length != 0 && segmentBytes[0] == 0x1c) {
+            if (segmentBytes.length != 0 && segmentBytes[0] == IptcMarkerByte) {
                 extract(new SequentialByteArrayReader(segmentBytes), metadata, segmentBytes.length);
             }
         }
@@ -106,11 +109,11 @@ public class IptcReader implements JpegSegmentMetadataReader
                 return;
             }
 
-            if (startByte != 0x1c) {
+            if (startByte != IptcMarkerByte) {
                 // NOTE have seen images where there was one extra byte at the end, giving
                 // offset==length at this point, which is not worth logging as an error.
                 if (offset != length)
-                    directory.addError("Invalid IPTC tag marker at offset " + (offset - 1) + ". Expected '0x1c' but got '0x" + Integer.toHexString(startByte) + "'.");
+                    directory.addError("Invalid IPTC tag marker at offset " + (offset - 1) + ". Expected '0x" + Integer.toHexString(IptcMarkerByte) + "' but got '0x" + Integer.toHexString(startByte) + "'.");
                 return;
             }
 
@@ -163,18 +166,15 @@ public class IptcReader implements JpegSegmentMetadataReader
             return;
         }
 
-        String string = null;
-
         switch (tagIdentifier) {
             case IptcDirectory.TAG_CODED_CHARACTER_SET:
                 byte[] bytes = reader.getBytes(tagByteCount);
-                String charset = Iso2022Converter.convertISO2022CharsetToJavaCharset(bytes);
-                if (charset == null) {
+                String charsetName = Iso2022Converter.convertISO2022CharsetToJavaCharset(bytes);
+                if (charsetName == null) {
                     // Unable to determine the charset, so fall through and treat tag as a regular string
-                    string = new String(bytes);
-                    break;
+                    charsetName = new String(bytes);
                 }
-                directory.setString(tagIdentifier, charset);
+                directory.setString(tagIdentifier, charsetName);
                 return;
             case IptcDirectory.TAG_ENVELOPE_RECORD_VERSION:
             case IptcDirectory.TAG_APPLICATION_RECORD_VERSION:
@@ -200,32 +200,38 @@ public class IptcReader implements JpegSegmentMetadataReader
 
         // If we haven't returned yet, treat it as a string
         // NOTE that there's a chance we've already loaded the value as a string above, but failed to parse the value
-        if (string == null) {
-            String encoding = directory.getString(IptcDirectory.TAG_CODED_CHARACTER_SET);
-            if (encoding != null) {
-                string = reader.getString(tagByteCount, encoding);
-            } else {
-                byte[] bytes = reader.getBytes(tagByteCount);
-                encoding = Iso2022Converter.guessEncoding(bytes);
-                string = encoding != null ? new String(bytes, encoding) : new String(bytes);
-            }
+        String charSetName = directory.getString(IptcDirectory.TAG_CODED_CHARACTER_SET);
+        Charset charset = null;
+        try {
+            if (charSetName != null)
+                charset = Charset.forName(charSetName);
+        } catch (Throwable ignored) {
+        }
+
+        StringValue string;
+        if (charSetName != null) {
+            string = reader.getStringValue(tagByteCount, charset);
+        } else {
+            byte[] bytes = reader.getBytes(tagByteCount);
+            Charset charSet = Iso2022Converter.guessCharSet(bytes);
+            string = charSet != null ? new StringValue(bytes, charSet) : new StringValue(bytes, null);
         }
 
         if (directory.containsTag(tagIdentifier)) {
-            // this fancy string[] business avoids using an ArrayList for performance reasons
-            String[] oldStrings = directory.getStringArray(tagIdentifier);
-            String[] newStrings;
+            // this fancy StringValue[] business avoids using an ArrayList for performance reasons
+            StringValue[] oldStrings = directory.getStringValueArray(tagIdentifier);
+            StringValue[] newStrings;
             if (oldStrings == null) {
                 // TODO hitting this block means any prior value(s) are discarded
-                newStrings = new String[1];
+                newStrings = new StringValue[1];
             } else {
-                newStrings = new String[oldStrings.length + 1];
+                newStrings = new StringValue[oldStrings.length + 1];
                 System.arraycopy(oldStrings, 0, newStrings, 0, oldStrings.length);
             }
             newStrings[newStrings.length - 1] = string;
-            directory.setStringArray(tagIdentifier, newStrings);
+            directory.setStringValueArray(tagIdentifier, newStrings);
         } else {
-            directory.setString(tagIdentifier, string);
+            directory.setStringValue(tagIdentifier, string);
         }
     }
 }
diff --git a/src/com/drew/metadata/iptc/Iso2022Converter.java b/src/com/drew/metadata/iptc/Iso2022Converter.java
index a57e5dd..8beb9a1 100644
--- a/src/com/drew/metadata/iptc/Iso2022Converter.java
+++ b/src/com/drew/metadata/iptc/Iso2022Converter.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2002-2016 Drew Noakes
+ * Copyright 2002-2017 Drew Noakes
  *
  *    Licensed under the Apache License, Version 2.0 (the "License");
  *    you may not use this file except in compliance with the License.
@@ -58,16 +58,16 @@ public final class Iso2022Converter
     }
 
     /**
-     * Attempts to guess the encoding of a string provided as a byte array.
+     * Attempts to guess the {@link Charset} of a string provided as a byte array.
      * <p>
-     * Encodings trialled are, in order:
+     * Charsets trialled are, in order:
      * <ul>
      *     <li>UTF-8</li>
      *     <li><code>System.getProperty("file.encoding")</code></li>
      *     <li>ISO-8859-1</li>
      * </ul>
      * <p>
-     * Its only purpose is to guess the encoding if and only if iptc tag coded character set is not set. If the
+     * Its only purpose is to guess the Charset if and only if IPTC tag coded character set is not set. If the
      * encoding is not UTF-8, the tag should be set. Otherwise it is bad practice. This method tries to
      * workaround this issue since some metadata manipulating tools do not prevent such bad practice.
      * <p>
@@ -78,17 +78,18 @@ public final class Iso2022Converter
      * @return the name of the encoding or null if none could be guessed
      */
     @Nullable
-    static String guessEncoding(@NotNull final byte[] bytes)
+    static Charset guessCharSet(@NotNull final byte[] bytes)
     {
         String[] encodings = { UTF_8, System.getProperty("file.encoding"), ISO_8859_1 };
 
         for (String encoding : encodings)
         {
-            CharsetDecoder cs = Charset.forName(encoding).newDecoder();
+            Charset charset = Charset.forName(encoding);
+            CharsetDecoder cs = charset.newDecoder();
 
             try {
                 cs.decode(ByteBuffer.wrap(bytes));
-                return encoding;
+                return charset;
             } catch (CharacterCodingException e) {
                 // fall through...
             }
diff --git a/src/com/drew/metadata/iptc/package-info.java b/src/com/drew/metadata/iptc/package-info.java
new file mode 100644
index 0000000..8e0f4f9
--- /dev/null
+++ b/src/com/drew/metadata/iptc/package-info.java
@@ -0,0 +1,4 @@
+/**
+ * Contains classes for the extraction and modelling of IPTC metadata.
+ */
+package com.drew.metadata.iptc;
diff --git a/src/com/drew/metadata/iptc/package.html b/src/com/drew/metadata/iptc/package.html
deleted file mode 100644
index 033c1ed..0000000
--- a/src/com/drew/metadata/iptc/package.html
+++ /dev/null
@@ -1,33 +0,0 @@
-<!--
-  ~ Copyright 2002-2016 Drew Noakes
-  ~
-  ~    Licensed under the Apache License, Version 2.0 (the "License");
-  ~    you may not use this file except in compliance with the License.
-  ~    You may obtain a copy of the License at
-  ~
-  ~        http://www.apache.org/licenses/LICENSE-2.0
-  ~
-  ~    Unless required by applicable law or agreed to in writing, software
-  ~    distributed under the License is distributed on an "AS IS" BASIS,
-  ~    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  ~    See the License for the specific language governing permissions and
-  ~    limitations under the License.
-  ~
-  ~ More information about this project is available at:
-  ~
-  ~    https://drewnoakes.com/code/exif/
-  ~    https://github.com/drewnoakes/metadata-extractor
-  -->
-
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
-<html>
-<head>
-</head>
-<body bgcolor="white">
-
-Contains classes for the extraction and modelling of IPTC metadata.
-
-<!-- Put @see and @since tags down here. -->
-
-</body>
-</html>
diff --git a/src/com/drew/metadata/file/FileMetadataDescriptor.java b/src/com/drew/metadata/jpeg/HuffmanTablesDescriptor.java
similarity index 57%
copy from src/com/drew/metadata/file/FileMetadataDescriptor.java
copy to src/com/drew/metadata/jpeg/HuffmanTablesDescriptor.java
index 85104c1..cb83321 100644
--- a/src/com/drew/metadata/file/FileMetadataDescriptor.java
+++ b/src/com/drew/metadata/jpeg/HuffmanTablesDescriptor.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2002-2016 Drew Noakes
+ * Copyright 2002-2017 Drew Noakes
  *
  *    Licensed under the Apache License, Version 2.0 (the "License");
  *    you may not use this file except in compliance with the License.
@@ -18,20 +18,28 @@
  *    https://drewnoakes.com/code/exif/
  *    https://github.com/drewnoakes/metadata-extractor
  */
-package com.drew.metadata.file;
+package com.drew.metadata.jpeg;
 
 import com.drew.lang.annotations.NotNull;
 import com.drew.lang.annotations.Nullable;
 import com.drew.metadata.TagDescriptor;
 
-import static com.drew.metadata.file.FileMetadataDirectory.*;
+import static com.drew.metadata.jpeg.HuffmanTablesDirectory.*;
 
 /**
- * @author Drew Noakes https://drewnoakes.com
+ * Provides a human-readable string version of the tag stored in a HuffmanTableDirectory.
+ *
+ * <ul>
+ *   <li>https://en.wikipedia.org/wiki/Huffman_coding</li>
+ *   <li>http://stackoverflow.com/a/4954117</li>
+ * </ul>
+ *
+ * @author Nadahar
  */
-public class FileMetadataDescriptor extends TagDescriptor<FileMetadataDirectory>
+ at SuppressWarnings("WeakerAccess")
+public class HuffmanTablesDescriptor extends TagDescriptor<HuffmanTablesDirectory>
 {
-    public FileMetadataDescriptor(@NotNull FileMetadataDirectory directory)
+    public HuffmanTablesDescriptor(@NotNull HuffmanTablesDirectory directory)
     {
         super(directory);
     }
@@ -41,22 +49,19 @@ public class FileMetadataDescriptor extends TagDescriptor<FileMetadataDirectory>
     public String getDescription(int tagType)
     {
         switch (tagType) {
-            case TAG_FILE_SIZE:
-                return getFileSizeDescription();
+            case TAG_NUMBER_OF_TABLES:
+                return getNumberOfTablesDescription();
             default:
                 return super.getDescription(tagType);
         }
     }
 
     @Nullable
-    private String getFileSizeDescription()
+    public String getNumberOfTablesDescription()
     {
-        Long size = _directory.getLongObject(TAG_FILE_SIZE);
-
-        if (size == null)
+        Integer value = _directory.getInteger(TAG_NUMBER_OF_TABLES);
+        if (value==null)
             return null;
-
-        return Long.toString(size) + " bytes";
+        return value + (value == 1 ? " Huffman table" : " Huffman tables");
     }
 }
-
diff --git a/src/com/drew/metadata/jpeg/HuffmanTablesDirectory.java b/src/com/drew/metadata/jpeg/HuffmanTablesDirectory.java
new file mode 100644
index 0000000..b03a518
--- /dev/null
+++ b/src/com/drew/metadata/jpeg/HuffmanTablesDirectory.java
@@ -0,0 +1,360 @@
+/*
+ * Copyright 2002-2017 Drew Noakes
+ *
+ *    Licensed under the Apache License, Version 2.0 (the "License");
+ *    you may not use this file except in compliance with the License.
+ *    You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing, software
+ *    distributed under the License is distributed on an "AS IS" BASIS,
+ *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *    See the License for the specific language governing permissions and
+ *    limitations under the License.
+ *
+ * More information about this project is available at:
+ *
+ *    https://drewnoakes.com/code/exif/
+ *    https://github.com/drewnoakes/metadata-extractor
+ */
+package com.drew.metadata.jpeg;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import com.drew.lang.annotations.NotNull;
+import com.drew.metadata.Directory;
+import com.drew.metadata.MetadataException;
+
+/**
+ * Directory of tables for the DHT (Define Huffman Table(s)) segment.
+ *
+ * @author Nadahar
+ */
+ at SuppressWarnings("WeakerAccess")
+public class HuffmanTablesDirectory extends Directory {
+
+    public static final int TAG_NUMBER_OF_TABLES = 1;
+
+    protected static final byte[] TYPICAL_LUMINANCE_DC_LENGTHS = {
+        (byte) 0x00, (byte) 0x01, (byte) 0x05, (byte) 0x01, (byte) 0x01, (byte) 0x01, (byte) 0x01, (byte) 0x01,
+        (byte) 0x01, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00
+    };
+
+    protected static final byte[] TYPICAL_LUMINANCE_DC_VALUES = {
+        (byte) 0x00, (byte) 0x01, (byte) 0x02, (byte) 0x03, (byte) 0x04, (byte) 0x05, (byte) 0x06, (byte) 0x07,
+        (byte) 0x08, (byte) 0x09, (byte) 0x0A, (byte) 0x0B
+    };
+
+    protected static final byte[] TYPICAL_CHROMINANCE_DC_LENGTHS = {
+        (byte) 0x00, (byte) 0x03, (byte) 0x01, (byte) 0x01, (byte) 0x01, (byte) 0x01, (byte) 0x01, (byte) 0x01,
+        (byte) 0x01, (byte) 0x01, (byte) 0x01, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00
+    };
+
+    protected static final byte[] TYPICAL_CHROMINANCE_DC_VALUES = {
+        (byte) 0x00, (byte) 0x01, (byte) 0x02, (byte) 0x03, (byte) 0x04, (byte) 0x05, (byte) 0x06, (byte) 0x07,
+        (byte) 0x08, (byte) 0x09, (byte) 0x0A, (byte) 0x0B
+    };
+
+    protected static final byte[] TYPICAL_LUMINANCE_AC_LENGTHS = {
+        (byte) 0x00, (byte) 0x02, (byte) 0x01, (byte) 0x03, (byte) 0x03, (byte) 0x02, (byte) 0x04, (byte) 0x03,
+        (byte) 0x05, (byte) 0x05, (byte) 0x04, (byte) 0x04, (byte) 0x00, (byte) 0x00, (byte) 0x01, (byte) 0x7D
+    };
+
+    protected static final byte[] TYPICAL_LUMINANCE_AC_VALUES = {
+        (byte) 0x01, (byte) 0x02, (byte) 0x03, (byte) 0x00, (byte) 0x04, (byte) 0x11, (byte) 0x05, (byte) 0x12,
+        (byte) 0x21, (byte) 0x31, (byte) 0x41, (byte) 0x06, (byte) 0x13, (byte) 0x51, (byte) 0x61, (byte) 0x07,
+        (byte) 0x22, (byte) 0x71, (byte) 0x14, (byte) 0x32, (byte) 0x81, (byte) 0x91, (byte) 0xA1, (byte) 0x08,
+        (byte) 0x23, (byte) 0x42, (byte) 0xB1, (byte) 0xC1, (byte) 0x15, (byte) 0x52, (byte) 0xD1, (byte) 0xF0,
+        (byte) 0x24, (byte) 0x33, (byte) 0x62, (byte) 0x72, (byte) 0x82, (byte) 0x09, (byte) 0x0A, (byte) 0x16,
+        (byte) 0x17, (byte) 0x18, (byte) 0x19, (byte) 0x1A, (byte) 0x25, (byte) 0x26, (byte) 0x27, (byte) 0x28,
+        (byte) 0x29, (byte) 0x2A, (byte) 0x34, (byte) 0x35, (byte) 0x36, (byte) 0x37, (byte) 0x38, (byte) 0x39,
+        (byte) 0x3A, (byte) 0x43, (byte) 0x44, (byte) 0x45, (byte) 0x46, (byte) 0x47, (byte) 0x48, (byte) 0x49,
+        (byte) 0x4A, (byte) 0x53, (byte) 0x54, (byte) 0x55, (byte) 0x56, (byte) 0x57, (byte) 0x58, (byte) 0x59,
+        (byte) 0x5A, (byte) 0x63, (byte) 0x64, (byte) 0x65, (byte) 0x66, (byte) 0x67, (byte) 0x68, (byte) 0x69,
+        (byte) 0x6A, (byte) 0x73, (byte) 0x74, (byte) 0x75, (byte) 0x76, (byte) 0x77, (byte) 0x78, (byte) 0x79,
+        (byte) 0x7A, (byte) 0x83, (byte) 0x84, (byte) 0x85, (byte) 0x86, (byte) 0x87, (byte) 0x88, (byte) 0x89,
+        (byte) 0x8A, (byte) 0x92, (byte) 0x93, (byte) 0x94, (byte) 0x95, (byte) 0x96, (byte) 0x97, (byte) 0x98,
+        (byte) 0x99, (byte) 0x9A, (byte) 0xA2, (byte) 0xA3, (byte) 0xA4, (byte) 0xA5, (byte) 0xA6, (byte) 0xA7,
+        (byte) 0xA8, (byte) 0xA9, (byte) 0xAA, (byte) 0xB2, (byte) 0xB3, (byte) 0xB4, (byte) 0xB5, (byte) 0xB6,
+        (byte) 0xB7, (byte) 0xB8, (byte) 0xB9, (byte) 0xBA, (byte) 0xC2, (byte) 0xC3, (byte) 0xC4, (byte) 0xC5,
+        (byte) 0xC6, (byte) 0xC7, (byte) 0xC8, (byte) 0xC9, (byte) 0xCA, (byte) 0xD2, (byte) 0xD3, (byte) 0xD4,
+        (byte) 0xD5, (byte) 0xD6, (byte) 0xD7, (byte) 0xD8, (byte) 0xD9, (byte) 0xDA, (byte) 0xE1, (byte) 0xE2,
+        (byte) 0xE3, (byte) 0xE4, (byte) 0xE5, (byte) 0xE6, (byte) 0xE7, (byte) 0xE8, (byte) 0xE9, (byte) 0xEA,
+        (byte) 0xF1, (byte) 0xF2, (byte) 0xF3, (byte) 0xF4, (byte) 0xF5, (byte) 0xF6, (byte) 0xF7, (byte) 0xF8,
+        (byte) 0xF9, (byte) 0xFA
+    };
+
+    protected static final byte[] TYPICAL_CHROMINANCE_AC_LENGTHS = {
+        (byte) 0x00, (byte) 0x02, (byte) 0x01, (byte) 0x02, (byte) 0x04, (byte) 0x04, (byte) 0x03, (byte) 0x04,
+        (byte) 0x07, (byte) 0x05, (byte) 0x04, (byte) 0x04, (byte) 0x00, (byte) 0x01, (byte) 0x02, (byte) 0x77
+    };
+
+    protected static final byte[] TYPICAL_CHROMINANCE_AC_VALUES = {
+        (byte) 0x00, (byte) 0x01, (byte) 0x02, (byte) 0x03, (byte) 0x11, (byte) 0x04, (byte) 0x05, (byte) 0x21,
+        (byte) 0x31, (byte) 0x06, (byte) 0x12, (byte) 0x41, (byte) 0x51, (byte) 0x07, (byte) 0x61, (byte) 0x71,
+        (byte) 0x13, (byte) 0x22, (byte) 0x32, (byte) 0x81, (byte) 0x08, (byte) 0x14, (byte) 0x42, (byte) 0x91,
+        (byte) 0xA1, (byte) 0xB1, (byte) 0xC1, (byte) 0x09, (byte) 0x23, (byte) 0x33, (byte) 0x52, (byte) 0xF0,
+        (byte) 0x15, (byte) 0x62, (byte) 0x72, (byte) 0xD1, (byte) 0x0A, (byte) 0x16, (byte) 0x24, (byte) 0x34,
+        (byte) 0xE1, (byte) 0x25, (byte) 0xF1, (byte) 0x17, (byte) 0x18, (byte) 0x19, (byte) 0x1A, (byte) 0x26,
+        (byte) 0x27, (byte) 0x28, (byte) 0x29, (byte) 0x2A, (byte) 0x35, (byte) 0x36, (byte) 0x37, (byte) 0x38,
+        (byte) 0x39, (byte) 0x3A, (byte) 0x43, (byte) 0x44, (byte) 0x45, (byte) 0x46, (byte) 0x47, (byte) 0x48,
+        (byte) 0x49, (byte) 0x4A, (byte) 0x53, (byte) 0x54, (byte) 0x55, (byte) 0x56, (byte) 0x57, (byte) 0x58,
+        (byte) 0x59, (byte) 0x5A, (byte) 0x63, (byte) 0x64, (byte) 0x65, (byte) 0x66, (byte) 0x67, (byte) 0x68,
+        (byte) 0x69, (byte) 0x6A, (byte) 0x73, (byte) 0x74, (byte) 0x75, (byte) 0x76, (byte) 0x77, (byte) 0x78,
+        (byte) 0x79, (byte) 0x7A, (byte) 0x82, (byte) 0x83, (byte) 0x84, (byte) 0x85, (byte) 0x86, (byte) 0x87,
+        (byte) 0x88, (byte) 0x89, (byte) 0x8A, (byte) 0x92, (byte) 0x93, (byte) 0x94, (byte) 0x95, (byte) 0x96,
+        (byte) 0x97, (byte) 0x98, (byte) 0x99, (byte) 0x9A, (byte) 0xA2, (byte) 0xA3, (byte) 0xA4, (byte) 0xA5,
+        (byte) 0xA6, (byte) 0xA7, (byte) 0xA8, (byte) 0xA9, (byte) 0xAA, (byte) 0xB2, (byte) 0xB3, (byte) 0xB4,
+        (byte) 0xB5, (byte) 0xB6, (byte) 0xB7, (byte) 0xB8, (byte) 0xB9, (byte) 0xBA, (byte) 0xC2, (byte) 0xC3,
+        (byte) 0xC4, (byte) 0xC5, (byte) 0xC6, (byte) 0xC7, (byte) 0xC8, (byte) 0xC9, (byte) 0xCA, (byte) 0xD2,
+        (byte) 0xD3, (byte) 0xD4, (byte) 0xD5, (byte) 0xD6, (byte) 0xD7, (byte) 0xD8, (byte) 0xD9, (byte) 0xDA,
+        (byte) 0xE2, (byte) 0xE3, (byte) 0xE4, (byte) 0xE5, (byte) 0xE6, (byte) 0xE7, (byte) 0xE8, (byte) 0xE9,
+        (byte) 0xEA, (byte) 0xF2, (byte) 0xF3, (byte) 0xF4, (byte) 0xF5, (byte) 0xF6, (byte) 0xF7, (byte) 0xF8,
+        (byte) 0xF9, (byte) 0xFA
+    };
+
+    @NotNull
+    protected final List<HuffmanTable> tables = new ArrayList<HuffmanTable>(4);
+
+    @NotNull
+    protected static final HashMap<Integer, String> _tagNameMap = new HashMap<Integer, String>();
+
+    static
+    {
+        _tagNameMap.put(TAG_NUMBER_OF_TABLES, "Number of Tables");
+    }
+
+    public HuffmanTablesDirectory()
+    {
+        this.setDescriptor(new HuffmanTablesDescriptor(this));
+    }
+
+    @Override
+    @NotNull
+    public String getName()
+    {
+        return "Huffman";
+    }
+
+    @Override
+    @NotNull
+    protected HashMap<Integer, String> getTagNameMap()
+    {
+        return _tagNameMap;
+    }
+
+    /**
+     * @param tableNumber The zero-based index of the table. This number is normally between 0 and 3.
+     *                    Use {@link #getNumberOfTables} for bounds-checking.
+     * @return The {@link HuffmanTable} having the specified number.
+     */
+    @NotNull
+    public HuffmanTable getTable(int tableNumber)
+    {
+        return tables.get(tableNumber);
+    }
+
+    /**
+     * @return The number of Huffman tables held by this {@link HuffmanTablesDirectory} instance.
+     */
+    public int getNumberOfTables() throws MetadataException
+    {
+        return getInt(HuffmanTablesDirectory.TAG_NUMBER_OF_TABLES);
+    }
+
+    /**
+     * @return The {@link List} of {@link HuffmanTable}s in this
+     *         {@link Directory}.
+     */
+    @NotNull
+    protected List<HuffmanTable> getTables() {
+        return tables;
+    }
+
+    /**
+     * Evaluates whether all the tables in this {@link HuffmanTablesDirectory}
+     * are "typical" Huffman tables.
+     * <p>
+     * "Typical" has a special meaning in this context as the JPEG standard
+     * (ISO/IEC 10918 or ITU-T T.81) defines 4 Huffman tables that has been
+     * developed from the average statistics of a large set of images with 8-bit
+     * precision. Using these instead of calculating the optimal Huffman tables
+     * for a given image is faster, and is preferred by many hardware encoders
+     * and some hardware decoders.
+     * <p>
+     * Even though the JPEG standard doesn't define these as "standard tables"
+     * and requires a decoder to be able to read any valid Huffman tables, some
+     * are in reality limited decoding images using these "typical" tables.
+     * Standards like DCF (Design rule for Camera File system) and DLNA (Digital
+     * Living Network Alliance) actually requires any compliant JPEG to use only
+     * the "typical" Huffman tables.
+     * <p>
+     * This is also related to the term "optimized" JPEG. An "optimized" JPEG is
+     * a JPEG that doesn't use the "typical" Huffman tables.
+     *
+     * @return Whether or not all the tables in this
+     *         {@link HuffmanTablesDirectory} are the predefined "typical"
+     *         Huffman tables.
+     */
+    public boolean isTypical() {
+        if (tables.size() == 0) {
+            return false;
+        }
+        for (HuffmanTable table : tables) {
+            if (!table.isTypical()) {
+                return false;
+            }
+        }
+        return true;
+    }
+
+    /**
+     * The opposite of {@link #isTypical()}.
+     *
+     * @return Whether or not the tables in this {@link HuffmanTablesDirectory}
+     *         are "optimized" - which means that at least one of them aren't
+     *         one of the "typical" Huffman tables.
+     */
+    public boolean isOptimized() {
+        return !isTypical();
+    }
+
+    /**
+     * An instance of this class holds a JPEG Huffman table.
+     */
+    public static class HuffmanTable {
+        private final int tableLength;
+        private final HuffmanTableClass tableClass;
+        private final int tableDestinationId;
+        private final byte[] lengthBytes;
+        private final byte[] valueBytes;
+
+        public HuffmanTable (
+            @NotNull HuffmanTableClass
+            tableClass,
+            int tableDestinationId,
+            @NotNull byte[] lBytes,
+            @NotNull byte[] vBytes
+        ) {
+            this.tableClass = tableClass;
+            this.tableDestinationId = tableDestinationId;
+            this.lengthBytes = lBytes;
+            this.valueBytes = vBytes;
+            this.tableLength = vBytes.length + 17;
+        }
+
+        /**
+         * @return The table length in bytes.
+         */
+        public int getTableLength() {
+            return tableLength;
+        }
+
+
+        /**
+         * @return The {@link HuffmanTableClass} of this table.
+         */
+        public HuffmanTableClass getTableClass() {
+            return tableClass;
+        }
+
+
+        /**
+         * @return the the destination identifier for this table.
+         */
+        public int getTableDestinationId() {
+            return tableDestinationId;
+        }
+
+
+        /**
+         * @return A byte array with the L values for this table.
+         */
+        public byte[] getLengthBytes() {
+            if (lengthBytes == null)
+                return null;
+            byte[] result = new byte[lengthBytes.length];
+            System.arraycopy(lengthBytes, 0, result, 0, lengthBytes.length);
+            return result;
+        }
+
+
+        /**
+         * @return A byte array with the V values for this table.
+         */
+        public byte[] getValueBytes() {
+            if (valueBytes == null)
+                return null;
+            byte[] result = new byte[valueBytes.length];
+            System.arraycopy(valueBytes, 0, result, 0, valueBytes.length);
+            return result;
+        }
+
+        /**
+         * Evaluates whether this table is a "typical" Huffman table.
+         * <p>
+         * "Typical" has a special meaning in this context as the JPEG standard
+         * (ISO/IEC 10918 or ITU-T T.81) defines 4 Huffman tables that has been
+         * developed from the average statistics of a large set of images with
+         * 8-bit precision. Using these instead of calculating the optimal
+         * Huffman tables for a given image is faster, and is preferred by many
+         * hardware encoders and some hardware decoders.
+         * <p>
+         * Even though the JPEG standard doesn't define these as
+         * "standard tables" and requires a decoder to be able to read any valid
+         * Huffman tables, some are in reality limited decoding images using
+         * these "typical" tables. Standards like DCF (Design rule for Camera
+         * File system) and DLNA (Digital Living Network Alliance) actually
+         * requires any compliant JPEG to use only the "typical" Huffman tables.
+         * <p>
+         * This is also related to the term "optimized" JPEG. An "optimized"
+         * JPEG is a JPEG that doesn't use the "typical" Huffman tables.
+         *
+         * @return Whether or not this table is one of the predefined "typical"
+         *         Huffman tables.
+         */
+        public boolean isTypical() {
+            if (tableClass == HuffmanTableClass.DC) {
+                return
+                    Arrays.equals(lengthBytes, TYPICAL_LUMINANCE_DC_LENGTHS) &&
+                    Arrays.equals(valueBytes, TYPICAL_LUMINANCE_DC_VALUES) ||
+                    Arrays.equals(lengthBytes, TYPICAL_CHROMINANCE_DC_LENGTHS) &&
+                    Arrays.equals(valueBytes, TYPICAL_CHROMINANCE_DC_VALUES);
+            } else if (tableClass == HuffmanTableClass.AC) {
+                return
+                    Arrays.equals(lengthBytes, TYPICAL_LUMINANCE_AC_LENGTHS) &&
+                    Arrays.equals(valueBytes, TYPICAL_LUMINANCE_AC_VALUES) ||
+                    Arrays.equals(lengthBytes, TYPICAL_CHROMINANCE_AC_LENGTHS) &&
+                    Arrays.equals(valueBytes, TYPICAL_CHROMINANCE_AC_VALUES);
+            }
+            return false;
+        }
+
+        /**
+         * The opposite of {@link #isTypical()}.
+         *
+         * @return Whether or not this table is "optimized" - which means that
+         *         it isn't one of the "typical" Huffman tables.
+         */
+        public boolean isOptimized() {
+            return !isTypical();
+        }
+
+        public enum HuffmanTableClass {
+            DC,
+            AC,
+            UNKNOWN;
+
+            public static HuffmanTableClass typeOf(int value) {
+                switch (value) {
+                    case 0: return DC;
+                    case 1 : return AC;
+                    default: return UNKNOWN;
+                }
+            }
+        }
+    }
+}
diff --git a/src/com/drew/metadata/jpeg/JpegCommentDescriptor.java b/src/com/drew/metadata/jpeg/JpegCommentDescriptor.java
index b3f4192..98f7f44 100644
--- a/src/com/drew/metadata/jpeg/JpegCommentDescriptor.java
+++ b/src/com/drew/metadata/jpeg/JpegCommentDescriptor.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2002-2016 Drew Noakes
+ * Copyright 2002-2017 Drew Noakes
  *
  *    Licensed under the Apache License, Version 2.0 (the "License");
  *    you may not use this file except in compliance with the License.
@@ -29,6 +29,7 @@ import com.drew.metadata.TagDescriptor;
  *
  * @author Drew Noakes https://drewnoakes.com
  */
+ at SuppressWarnings("WeakerAccess")
 public class JpegCommentDescriptor extends TagDescriptor<JpegCommentDirectory>
 {
     public JpegCommentDescriptor(@NotNull JpegCommentDirectory directory)
diff --git a/src/com/drew/metadata/jpeg/JpegCommentDirectory.java b/src/com/drew/metadata/jpeg/JpegCommentDirectory.java
index e103d1d..69975de 100644
--- a/src/com/drew/metadata/jpeg/JpegCommentDirectory.java
+++ b/src/com/drew/metadata/jpeg/JpegCommentDirectory.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2002-2016 Drew Noakes
+ * Copyright 2002-2017 Drew Noakes
  *
  *    Licensed under the Apache License, Version 2.0 (the "License");
  *    you may not use this file except in compliance with the License.
@@ -30,6 +30,7 @@ import java.util.HashMap;
  *
  * @author Drew Noakes https://drewnoakes.com
  */
+ at SuppressWarnings("WeakerAccess")
 public class JpegCommentDirectory extends Directory
 {
     /**
diff --git a/src/com/drew/metadata/jpeg/JpegCommentReader.java b/src/com/drew/metadata/jpeg/JpegCommentReader.java
index bcc2517..8170ba5 100644
--- a/src/com/drew/metadata/jpeg/JpegCommentReader.java
+++ b/src/com/drew/metadata/jpeg/JpegCommentReader.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2002-2016 Drew Noakes
+ * Copyright 2002-2017 Drew Noakes
  *
  *    Licensed under the Apache License, Version 2.0 (the "License");
  *    you may not use this file except in compliance with the License.
@@ -24,6 +24,7 @@ import com.drew.imaging.jpeg.JpegSegmentMetadataReader;
 import com.drew.imaging.jpeg.JpegSegmentType;
 import com.drew.lang.annotations.NotNull;
 import com.drew.metadata.Metadata;
+import com.drew.metadata.StringValue;
 
 import java.util.Collections;
 
@@ -48,7 +49,7 @@ public class JpegCommentReader implements JpegSegmentMetadataReader
             metadata.addDirectory(directory);
 
             // The entire contents of the directory are the comment
-            directory.setString(JpegCommentDirectory.TAG_COMMENT, new String(segmentBytes));
+            directory.setStringValue(JpegCommentDirectory.TAG_COMMENT, new StringValue(segmentBytes, null));
         }
     }
 }
diff --git a/src/com/drew/metadata/jpeg/JpegComponent.java b/src/com/drew/metadata/jpeg/JpegComponent.java
index 782b646..7554523 100644
--- a/src/com/drew/metadata/jpeg/JpegComponent.java
+++ b/src/com/drew/metadata/jpeg/JpegComponent.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2002-2016 Drew Noakes
+ * Copyright 2002-2017 Drew Noakes
  *
  *    Licensed under the Apache License, Version 2.0 (the "License");
  *    you may not use this file except in compliance with the License.
@@ -88,4 +88,15 @@ public class JpegComponent implements Serializable
     {
         return _samplingFactorByte & 0x0F;
     }
+
+    @NotNull
+    @Override
+    public String toString() {
+        return String.format(
+            "Quantization table %d, Sampling factors %d horiz/%d vert",
+            _quantizationTableNumber,
+            getHorizontalSamplingFactor(),
+            getVerticalSamplingFactor()
+        );
+    }
 }
diff --git a/src/com/drew/metadata/jpeg/JpegDescriptor.java b/src/com/drew/metadata/jpeg/JpegDescriptor.java
index 8efbee7..c9aeeb7 100644
--- a/src/com/drew/metadata/jpeg/JpegDescriptor.java
+++ b/src/com/drew/metadata/jpeg/JpegDescriptor.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2002-2016 Drew Noakes
+ * Copyright 2002-2017 Drew Noakes
  *
  *    Licensed under the Apache License, Version 2.0 (the "License");
  *    you may not use this file except in compliance with the License.
@@ -32,6 +32,7 @@ import static com.drew.metadata.jpeg.JpegDirectory.*;
  *
  * @author Drew Noakes https://drewnoakes.com
  */
+ at SuppressWarnings("WeakerAccess")
 public class JpegDescriptor extends TagDescriptor<JpegDirectory>
 {
     public JpegDescriptor(@NotNull JpegDirectory directory)
@@ -123,8 +124,6 @@ public class JpegDescriptor extends TagDescriptor<JpegDirectory>
         if (value==null)
             return null;
 
-        return value.getComponentName() + " component: Quantization table " + value.getQuantizationTableNumber()
-            + ", Sampling factors " + value.getHorizontalSamplingFactor()
-            + " horiz/" + value.getVerticalSamplingFactor() + " vert";
+        return value.getComponentName() + " component: " + value;
     }
 }
diff --git a/src/com/drew/metadata/jpeg/JpegDhtReader.java b/src/com/drew/metadata/jpeg/JpegDhtReader.java
new file mode 100644
index 0000000..f8f7691
--- /dev/null
+++ b/src/com/drew/metadata/jpeg/JpegDhtReader.java
@@ -0,0 +1,101 @@
+/*
+ * Copyright 2002-2017 Drew Noakes
+ *
+ *    Licensed under the Apache License, Version 2.0 (the "License");
+ *    you may not use this file except in compliance with the License.
+ *    You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing, software
+ *    distributed under the License is distributed on an "AS IS" BASIS,
+ *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *    See the License for the specific language governing permissions and
+ *    limitations under the License.
+ *
+ * More information about this project is available at:
+ *
+ *    https://drewnoakes.com/code/exif/
+ *    https://github.com/drewnoakes/metadata-extractor
+ */
+package com.drew.metadata.jpeg;
+
+import com.drew.imaging.jpeg.JpegSegmentMetadataReader;
+import com.drew.imaging.jpeg.JpegSegmentType;
+import com.drew.lang.SequentialByteArrayReader;
+import com.drew.lang.SequentialReader;
+import com.drew.lang.annotations.NotNull;
+import com.drew.metadata.Metadata;
+import com.drew.metadata.jpeg.HuffmanTablesDirectory.HuffmanTable;
+import com.drew.metadata.jpeg.HuffmanTablesDirectory.HuffmanTable.HuffmanTableClass;
+import java.io.IOException;
+import java.util.Collections;
+
+/**
+ * Reader for JPEG Huffman tables, found in the DHT JPEG segment.
+ *
+ * @author Nadahar
+ */
+public class JpegDhtReader implements JpegSegmentMetadataReader
+{
+    @NotNull
+    public Iterable<JpegSegmentType> getSegmentTypes()
+    {
+        return Collections.singletonList(JpegSegmentType.DHT);
+    }
+
+    public void readJpegSegments(@NotNull Iterable<byte[]> segments, @NotNull Metadata metadata, @NotNull JpegSegmentType segmentType)
+    {
+        for (byte[] segmentBytes : segments) {
+            extract(new SequentialByteArrayReader(segmentBytes), metadata);
+        }
+    }
+
+    /**
+     * Performs the DHT tables extraction, adding found tables to the specified
+     * instance of {@link Metadata}.
+     */
+    public void extract(@NotNull final SequentialReader reader, @NotNull final Metadata metadata)
+    {
+        HuffmanTablesDirectory directory = metadata.getFirstDirectoryOfType(HuffmanTablesDirectory.class);
+        if (directory == null) {
+            directory = new HuffmanTablesDirectory();
+            metadata.addDirectory(directory);
+        }
+
+        try {
+            while (reader.available() > 0) {
+                byte header = reader.getByte();
+                HuffmanTableClass tableClass = HuffmanTableClass.typeOf((header & 0xF0) >> 4);
+                int tableDestinationId = header & 0xF;
+
+                byte[] lBytes = getBytes(reader, 16);
+                int vCount = 0;
+                for (byte b : lBytes) {
+                    vCount += (b & 0xFF);
+                }
+                byte[] vBytes = getBytes(reader, vCount);
+                directory.getTables().add(new HuffmanTable(tableClass, tableDestinationId, lBytes, vBytes));
+            }
+        } catch (IOException me) {
+            directory.addError(me.getMessage());
+        }
+
+        directory.setInt(HuffmanTablesDirectory.TAG_NUMBER_OF_TABLES, directory.getTables().size());
+    }
+
+    private byte[] getBytes(@NotNull final SequentialReader reader, int count) throws IOException {
+        byte[] bytes = new byte[count];
+        for (int i = 0; i < count; i++) {
+            byte b = reader.getByte();
+            if ((b & 0xFF) == 0xFF) {
+                byte stuffing = reader.getByte();
+                if (stuffing != 0x00) {
+                    throw new IOException("Marker " + JpegSegmentType.fromByte(stuffing) + " found inside DHT segment");
+                }
+            }
+            bytes[i] = b;
+        }
+        return bytes;
+    }
+}
diff --git a/src/com/drew/metadata/jpeg/JpegDirectory.java b/src/com/drew/metadata/jpeg/JpegDirectory.java
index 8c456fc..09a3004 100644
--- a/src/com/drew/metadata/jpeg/JpegDirectory.java
+++ b/src/com/drew/metadata/jpeg/JpegDirectory.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2002-2016 Drew Noakes
+ * Copyright 2002-2017 Drew Noakes
  *
  *    Licensed under the Apache License, Version 2.0 (the "License");
  *    you may not use this file except in compliance with the License.
@@ -32,6 +32,7 @@ import java.util.HashMap;
  *
  * @author Darrell Silver http://www.darrellsilver.com and Drew Noakes https://drewnoakes.com
  */
+ at SuppressWarnings("WeakerAccess")
 public class JpegDirectory extends Directory
 {
     public static final int TAG_COMPRESSION_TYPE = -3;
diff --git a/src/com/drew/metadata/jpeg/JpegDnlReader.java b/src/com/drew/metadata/jpeg/JpegDnlReader.java
new file mode 100644
index 0000000..f7ed753
--- /dev/null
+++ b/src/com/drew/metadata/jpeg/JpegDnlReader.java
@@ -0,0 +1,77 @@
+/*
+ * Copyright 2002-2017 Drew Noakes
+ *
+ *    Licensed under the Apache License, Version 2.0 (the "License");
+ *    you may not use this file except in compliance with the License.
+ *    You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing, software
+ *    distributed under the License is distributed on an "AS IS" BASIS,
+ *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *    See the License for the specific language governing permissions and
+ *    limitations under the License.
+ *
+ * More information about this project is available at:
+ *
+ *    https://drewnoakes.com/code/exif/
+ *    https://github.com/drewnoakes/metadata-extractor
+ */
+package com.drew.metadata.jpeg;
+
+import com.drew.imaging.jpeg.JpegSegmentMetadataReader;
+import com.drew.imaging.jpeg.JpegSegmentType;
+import com.drew.lang.SequentialByteArrayReader;
+import com.drew.lang.SequentialReader;
+import com.drew.lang.annotations.NotNull;
+import com.drew.metadata.ErrorDirectory;
+import com.drew.metadata.Metadata;
+
+import java.io.IOException;
+import java.util.Arrays;
+import java.util.Collections;
+
+/**
+ * Decodes JPEG DNL data, adjusting the image height with information missing from the JPEG SOFx segment.
+ *
+ * @author Nadahar
+ */
+public class JpegDnlReader implements JpegSegmentMetadataReader
+{
+    @NotNull
+    public Iterable<JpegSegmentType> getSegmentTypes()
+    {
+        return Collections.singletonList(JpegSegmentType.DNL);
+    }
+
+    public void readJpegSegments(@NotNull Iterable<byte[]> segments, @NotNull Metadata metadata, @NotNull JpegSegmentType segmentType)
+    {
+        for (byte[] segmentBytes : segments) {
+            extract(segmentBytes, metadata, segmentType);
+        }
+    }
+
+    public void extract(byte[] segmentBytes, Metadata metadata, JpegSegmentType segmentType)
+    {
+        JpegDirectory directory = metadata.getFirstDirectoryOfType(JpegDirectory.class);
+        if (directory == null) {
+            ErrorDirectory errorDirectory = new ErrorDirectory();
+            metadata.addDirectory(errorDirectory);
+            errorDirectory.addError("DNL segment found without SOFx - illegal JPEG format");
+            return;
+        }
+
+        SequentialReader reader = new SequentialByteArrayReader(segmentBytes);
+
+        try {
+            // Only set height from DNL if it's not already defined
+            Integer i = directory.getInteger(JpegDirectory.TAG_IMAGE_HEIGHT);
+            if (i == null || i == 0) {
+                directory.setInt(JpegDirectory.TAG_IMAGE_HEIGHT, reader.getUInt16());
+            }
+        } catch (IOException ex) {
+            directory.addError(ex.getMessage());
+        }
+    }
+}
diff --git a/src/com/drew/metadata/jpeg/JpegReader.java b/src/com/drew/metadata/jpeg/JpegReader.java
index dcf50ae..9e6bf66 100644
--- a/src/com/drew/metadata/jpeg/JpegReader.java
+++ b/src/com/drew/metadata/jpeg/JpegReader.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2002-2016 Drew Noakes
+ * Copyright 2002-2017 Drew Noakes
  *
  *    Licensed under the Apache License, Version 2.0 (the "License");
  *    you may not use this file except in compliance with the License.
@@ -51,7 +51,7 @@ public class JpegReader implements JpegSegmentMetadataReader
             JpegSegmentType.SOF5,
             JpegSegmentType.SOF6,
             JpegSegmentType.SOF7,
-            JpegSegmentType.SOF8,
+//            JpegSegmentType.JPG,
             JpegSegmentType.SOF9,
             JpegSegmentType.SOF10,
             JpegSegmentType.SOF11,
diff --git a/src/com/drew/metadata/jpeg/package-info.java b/src/com/drew/metadata/jpeg/package-info.java
new file mode 100644
index 0000000..ad36e22
--- /dev/null
+++ b/src/com/drew/metadata/jpeg/package-info.java
@@ -0,0 +1,4 @@
+/**
+ * Contains classes for the extraction and modelling of JPEG file format metadata.
+ */
+package com.drew.metadata.jpeg;
diff --git a/src/com/drew/metadata/jpeg/package.html b/src/com/drew/metadata/jpeg/package.html
deleted file mode 100644
index 4f24376..0000000
--- a/src/com/drew/metadata/jpeg/package.html
+++ /dev/null
@@ -1,33 +0,0 @@
-<!--
-  ~ Copyright 2002-2016 Drew Noakes
-  ~
-  ~    Licensed under the Apache License, Version 2.0 (the "License");
-  ~    you may not use this file except in compliance with the License.
-  ~    You may obtain a copy of the License at
-  ~
-  ~        http://www.apache.org/licenses/LICENSE-2.0
-  ~
-  ~    Unless required by applicable law or agreed to in writing, software
-  ~    distributed under the License is distributed on an "AS IS" BASIS,
-  ~    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  ~    See the License for the specific language governing permissions and
-  ~    limitations under the License.
-  ~
-  ~ More information about this project is available at:
-  ~
-  ~    https://drewnoakes.com/code/exif/
-  ~    https://github.com/drewnoakes/metadata-extractor
-  -->
-
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
-<html>
-<head>
-</head>
-<body bgcolor="white">
-
-Contains classes for the extraction and modelling of JPEG file format metadata.
-
-<!-- Put @see and @since tags down here. -->
-
-</body>
-</html>
diff --git a/src/com/drew/metadata/package-info.java b/src/com/drew/metadata/package-info.java
new file mode 100644
index 0000000..2037413
--- /dev/null
+++ b/src/com/drew/metadata/package-info.java
@@ -0,0 +1,6 @@
+/**
+ * Provides classes for generic modelling of metadata directories and tags.
+ * <p />
+ * Contains base types for metadata processing abstraction.
+ */
+package com.drew.metadata;
diff --git a/src/com/drew/metadata/package.html b/src/com/drew/metadata/package.html
deleted file mode 100644
index 6485237..0000000
--- a/src/com/drew/metadata/package.html
+++ /dev/null
@@ -1,33 +0,0 @@
-<!--
-  ~ Copyright 2002-2016 Drew Noakes
-  ~
-  ~    Licensed under the Apache License, Version 2.0 (the "License");
-  ~    you may not use this file except in compliance with the License.
-  ~    You may obtain a copy of the License at
-  ~
-  ~        http://www.apache.org/licenses/LICENSE-2.0
-  ~
-  ~    Unless required by applicable law or agreed to in writing, software
-  ~    distributed under the License is distributed on an "AS IS" BASIS,
-  ~    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  ~    See the License for the specific language governing permissions and
-  ~    limitations under the License.
-  ~
-  ~ More information about this project is available at:
-  ~
-  ~    https://drewnoakes.com/code/exif/
-  ~    https://github.com/drewnoakes/metadata-extractor
-  -->
-
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
-<html>
-<head>
-</head>
-<body bgcolor="white">
-
-Provides classes for generic modelling of metadata directories and tags.  Contains base types for metadata processing abstraction.
-
-<!-- Put @see and @since tags down here. -->
-
-</body>
-</html>
diff --git a/src/com/drew/metadata/tiff/DirectoryTiffHandler.java b/src/com/drew/metadata/tiff/DirectoryTiffHandler.java
index da17dca..163e86a 100644
--- a/src/com/drew/metadata/tiff/DirectoryTiffHandler.java
+++ b/src/com/drew/metadata/tiff/DirectoryTiffHandler.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2002-2016 Drew Noakes
+ * Copyright 2002-2017 Drew Noakes
  *
  *    Licensed under the Apache License, Version 2.0 (the "License");
  *    you may not use this file except in compliance with the License.
@@ -24,7 +24,9 @@ import com.drew.imaging.tiff.TiffHandler;
 import com.drew.lang.Rational;
 import com.drew.lang.annotations.NotNull;
 import com.drew.metadata.Directory;
+import com.drew.metadata.ErrorDirectory;
 import com.drew.metadata.Metadata;
+import com.drew.metadata.StringValue;
 
 import java.util.Stack;
 
@@ -40,17 +42,9 @@ public abstract class DirectoryTiffHandler implements TiffHandler
     protected Directory _currentDirectory;
     protected final Metadata _metadata;
 
-    protected DirectoryTiffHandler(Metadata metadata, Class<? extends Directory> initialDirectoryClass)
+    protected DirectoryTiffHandler(Metadata metadata)
     {
         _metadata = metadata;
-        try {
-            _currentDirectory = initialDirectoryClass.newInstance();
-        } catch (InstantiationException e) {
-            throw new RuntimeException(e);
-        } catch (IllegalAccessException e) {
-            throw new RuntimeException(e);
-        }
-        _metadata.addDirectory(_currentDirectory);
     }
 
     public void endingIFD()
@@ -60,27 +54,49 @@ public abstract class DirectoryTiffHandler implements TiffHandler
 
     protected void pushDirectory(@NotNull Class<? extends Directory> directoryClass)
     {
-        _directoryStack.push(_currentDirectory);
+        Directory newDirectory = null;
+
         try {
-            Directory newDirectory = directoryClass.newInstance();
-            newDirectory.setParent(_currentDirectory);
-            _currentDirectory = newDirectory;
+            newDirectory = directoryClass.newInstance();
         } catch (InstantiationException e) {
             throw new RuntimeException(e);
         } catch (IllegalAccessException e) {
             throw new RuntimeException(e);
         }
-        _metadata.addDirectory(_currentDirectory);
+
+        if (newDirectory != null)
+        {
+            // If this is the first directory, don't add to the stack
+            if (_currentDirectory != null)
+            {
+                _directoryStack.push(_currentDirectory);
+                newDirectory.setParent(_currentDirectory);
+            }
+            _currentDirectory = newDirectory;
+            _metadata.addDirectory(_currentDirectory);
+        }
     }
 
     public void warn(@NotNull String message)
     {
-        _currentDirectory.addError(message);
+        getCurrentOrErrorDirectory().addError(message);
     }
 
     public void error(@NotNull String message)
     {
-        _currentDirectory.addError(message);
+        getCurrentOrErrorDirectory().addError(message);
+    }
+
+    @NotNull
+    private Directory getCurrentOrErrorDirectory()
+    {
+        if (_currentDirectory != null)
+            return _currentDirectory;
+        ErrorDirectory error = _metadata.getFirstDirectoryOfType(ErrorDirectory.class);
+        if (error != null)
+            return error;
+        pushDirectory(ErrorDirectory.class);
+        return _currentDirectory;
     }
 
     public void setByteArray(int tagId, @NotNull byte[] bytes)
@@ -88,9 +104,9 @@ public abstract class DirectoryTiffHandler implements TiffHandler
         _currentDirectory.setByteArray(tagId, bytes);
     }
 
-    public void setString(int tagId, @NotNull String string)
+    public void setString(int tagId, @NotNull StringValue string)
     {
-        _currentDirectory.setString(tagId, string);
+        _currentDirectory.setStringValue(tagId, string);
     }
 
     public void setRational(int tagId, @NotNull Rational rational)
diff --git a/src/com/drew/metadata/tiff/package-info.java b/src/com/drew/metadata/tiff/package-info.java
new file mode 100644
index 0000000..28f57bb
--- /dev/null
+++ b/src/com/drew/metadata/tiff/package-info.java
@@ -0,0 +1,6 @@
+/**
+ * Contains classes for the extraction and modelling of TIFF file metadata.
+ *
+ * @since 2.7.0
+ */
+package com.drew.metadata.tiff;
diff --git a/src/com/drew/metadata/tiff/package.html b/src/com/drew/metadata/tiff/package.html
deleted file mode 100644
index f3609b5..0000000
--- a/src/com/drew/metadata/tiff/package.html
+++ /dev/null
@@ -1,34 +0,0 @@
-<!--
-  ~ Copyright 2002-2016 Drew Noakes
-  ~
-  ~    Licensed under the Apache License, Version 2.0 (the "License");
-  ~    you may not use this file except in compliance with the License.
-  ~    You may obtain a copy of the License at
-  ~
-  ~        http://www.apache.org/licenses/LICENSE-2.0
-  ~
-  ~    Unless required by applicable law or agreed to in writing, software
-  ~    distributed under the License is distributed on an "AS IS" BASIS,
-  ~    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  ~    See the License for the specific language governing permissions and
-  ~    limitations under the License.
-  ~
-  ~ More information about this project is available at:
-  ~
-  ~    https://drewnoakes.com/code/exif/
-  ~    https://github.com/drewnoakes/metadata-extractor
-  -->
-
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
-<html>
-<head>
-</head>
-<body bgcolor="white">
-
-Contains classes for the extraction and modelling of TIFF file metadata.
-
-<!-- Put @see and @since tags down here. -->
- at since 2.7.0
-
-</body>
-</html>
diff --git a/src/org/openstreetmap/josm/actions/AbstractMergeAction.java b/src/org/openstreetmap/josm/actions/AbstractMergeAction.java
index 165b485..3e4efd7 100644
--- a/src/org/openstreetmap/josm/actions/AbstractMergeAction.java
+++ b/src/org/openstreetmap/josm/actions/AbstractMergeAction.java
@@ -108,7 +108,7 @@ public abstract class AbstractMergeAction extends JosmAction {
 
         JPanel pnl = new JPanel(new GridBagLayout());
         pnl.add(new JLabel(label), GBC.eol());
-        pnl.add(layerList, GBC.eol());
+        pnl.add(layerList, GBC.eol().fill(GBC.HORIZONTAL));
         if (GraphicsEnvironment.isHeadless()) {
             // return first layer in headless mode, for unit tests
             return targetLayers[0];
diff --git a/src/org/openstreetmap/josm/actions/AbstractPasteAction.java b/src/org/openstreetmap/josm/actions/AbstractPasteAction.java
index abaa44f..99e49ab 100644
--- a/src/org/openstreetmap/josm/actions/AbstractPasteAction.java
+++ b/src/org/openstreetmap/josm/actions/AbstractPasteAction.java
@@ -3,6 +3,7 @@ package org.openstreetmap.josm.actions;
 
 import java.awt.MouseInfo;
 import java.awt.Point;
+import java.awt.PointerInfo;
 import java.awt.datatransfer.FlavorEvent;
 import java.awt.datatransfer.FlavorListener;
 import java.awt.datatransfer.Transferable;
@@ -74,11 +75,14 @@ public abstract class AbstractPasteAction extends JosmAction implements FlavorLi
         // But this does not work if the shortcut is changed to a single key (see #9055)
         // Observed behaviour: getActionCommand() returns Action.NAME when triggered via menu, but shortcut text when triggered with it
         if (e != null && !getValue(NAME).equals(e.getActionCommand())) {
-            final Point mp = MouseInfo.getPointerInfo().getLocation();
-            final Point tl = mapView.getLocationOnScreen();
-            final Point pos = new Point(mp.x-tl.x, mp.y-tl.y);
-            if (mapView.contains(pos)) {
-                mPosition = mapView.getEastNorth(pos.x, pos.y);
+            final PointerInfo pointerInfo = MouseInfo.getPointerInfo();
+            if (pointerInfo != null) {
+                final Point mp = pointerInfo.getLocation();
+                final Point tl = mapView.getLocationOnScreen();
+                final Point pos = new Point(mp.x-tl.x, mp.y-tl.y);
+                if (mapView.contains(pos)) {
+                    mPosition = mapView.getEastNorth(pos.x, pos.y);
+                }
             }
         }
         return mPosition;
diff --git a/src/org/openstreetmap/josm/actions/AlignInCircleAction.java b/src/org/openstreetmap/josm/actions/AlignInCircleAction.java
index 1f7f09e..cffe117 100644
--- a/src/org/openstreetmap/josm/actions/AlignInCircleAction.java
+++ b/src/org/openstreetmap/josm/actions/AlignInCircleAction.java
@@ -20,6 +20,7 @@ import org.openstreetmap.josm.command.Command;
 import org.openstreetmap.josm.command.MoveCommand;
 import org.openstreetmap.josm.command.SequenceCommand;
 import org.openstreetmap.josm.data.coor.EastNorth;
+import org.openstreetmap.josm.data.coor.PolarCoor;
 import org.openstreetmap.josm.data.osm.DataSet;
 import org.openstreetmap.josm.data.osm.Node;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
@@ -51,58 +52,18 @@ public final class AlignInCircleAction extends JosmAction {
         putValue("help", ht("/Action/AlignInCircle"));
     }
 
-    private static double distance(EastNorth n, EastNorth m) {
-        double easd, nord;
-        easd = n.east() - m.east();
-        nord = n.north() - m.north();
-        return Math.sqrt(easd * easd + nord * nord);
-    }
-
-    public static class PolarCoor {
-        private double radius;
-        private double angle;
-        private EastNorth origin = new EastNorth(0, 0);
-        private double azimuth;
-
-        PolarCoor(double radius, double angle) {
-            this(radius, angle, new EastNorth(0, 0), 0);
-        }
-
-        PolarCoor(double radius, double angle, EastNorth origin, double azimuth) {
-            this.radius = radius;
-            this.angle = angle;
-            this.origin = origin;
-            this.azimuth = azimuth;
-        }
-
-        PolarCoor(EastNorth en) {
-            this(en, new EastNorth(0, 0), 0);
-        }
-
-        PolarCoor(EastNorth en, EastNorth origin, double azimuth) {
-            radius = distance(en, origin);
-            angle = Math.atan2(en.north() - origin.north(), en.east() - origin.east());
-            this.origin = origin;
-            this.azimuth = azimuth;
-        }
-
-        public EastNorth toEastNorth() {
-            return new EastNorth(radius * Math.cos(angle - azimuth) + origin.east(), radius * Math.sin(angle - azimuth)
-                    + origin.north());
-        }
-
-        /**
-         * Create a MoveCommand to move a node to this PolarCoor.
-         * @param n Node to move
-         * @return new MoveCommand
-         */
-        public MoveCommand createMoveCommand(Node n) {
-            EastNorth en = toEastNorth();
-            return new MoveCommand(n, en.east() - n.getEastNorth().east(), en.north() - n.getEastNorth().north());
-        }
+    /**
+     * Create a {@link MoveCommand} to move a node to a PolarCoor.
+     * @param n Node to move
+     * @param coor polar coordinate where to move the node
+     * @return new MoveCommand
+     * @since 13107
+     */
+    public static MoveCommand createMoveCommand(Node n, PolarCoor coor) {
+        EastNorth en = coor.toEastNorth();
+        return new MoveCommand(n, en.east() - n.getEastNorth().east(), en.north() - n.getEastNorth().north());
     }
 
-
     /**
      * Perform AlignInCircle action.
      *
@@ -183,13 +144,13 @@ public final class AlignInCircleAction extends JosmAction {
                 center = outside.get(0).getEastNorth();
             } else if (outside.size() == 1 && inside.size() == 1) {
                 center = outside.get(0).getEastNorth();
-                radius = distance(center, inside.get(0).getEastNorth());
+                radius = center.distance(inside.get(0).getEastNorth());
             } else if (inside.size() == 2 && outside.isEmpty()) {
                 // 2 nodes inside, define diameter
                 EastNorth en0 = inside.get(0).getEastNorth();
                 EastNorth en1 = inside.get(1).getEastNorth();
                 center = new EastNorth((en0.east() + en1.east()) / 2, (en0.north() + en1.north()) / 2);
-                radius = distance(en0, en1) / 2;
+                radius = en0.distance(en1) / 2;
             }
 
             fixNodes.addAll(inside);
@@ -234,7 +195,7 @@ public final class AlignInCircleAction extends JosmAction {
         // relative to the distance from the N or S poles.
         if (radius == 0) {
             for (Node n : nodes) {
-                radius += distance(center, n.getEastNorth());
+                radius += center.distance(n.getEastNorth());
             }
             radius = radius / nodes.size();
         }
@@ -260,23 +221,22 @@ public final class AlignInCircleAction extends JosmAction {
                     break;
             }
             Node first = nodes.get(i % nodeCount);
-            PolarCoor pcFirst = new PolarCoor(first.getEastNorth(), center, 0);
-            pcFirst.radius = radius;
-            cmds.add(pcFirst.createMoveCommand(first));
+            PolarCoor pcFirst = new PolarCoor(radius, PolarCoor.computeAngle(first.getEastNorth(), center), center);
+            cmds.add(createMoveCommand(first, pcFirst));
             if (j > i + 1) {
                 double delta;
                 if (j == i + nodeCount) {
                     delta = 2 * Math.PI / nodeCount;
                 } else {
-                    PolarCoor pcLast = new PolarCoor(nodes.get(j % nodeCount).getEastNorth(), center, 0);
+                    PolarCoor pcLast = new PolarCoor(nodes.get(j % nodeCount).getEastNorth(), center);
                     delta = pcLast.angle - pcFirst.angle;
                     if (delta < 0) // Assume each PolarCoor.angle is in range ]-pi; pi]
                         delta += 2*Math.PI;
                     delta /= j - i;
                 }
                 for (int k = i+1; k < j; k++) {
-                    PolarCoor p = new PolarCoor(radius, pcFirst.angle + (k-i)*delta, center, 0);
-                    cmds.add(p.createMoveCommand(nodes.get(k % nodeCount)));
+                    PolarCoor p = new PolarCoor(radius, pcFirst.angle + (k-i)*delta, center);
+                    cmds.add(createMoveCommand(nodes.get(k % nodeCount), p));
                 }
             }
             i = j; // Update start point for next iteration
diff --git a/src/org/openstreetmap/josm/actions/AlignInLineAction.java b/src/org/openstreetmap/josm/actions/AlignInLineAction.java
index 453a877..2e2169d 100644
--- a/src/org/openstreetmap/josm/actions/AlignInLineAction.java
+++ b/src/org/openstreetmap/josm/actions/AlignInLineAction.java
@@ -20,6 +20,7 @@ import org.openstreetmap.josm.command.Command;
 import org.openstreetmap.josm.command.MoveCommand;
 import org.openstreetmap.josm.command.SequenceCommand;
 import org.openstreetmap.josm.data.coor.EastNorth;
+import org.openstreetmap.josm.data.coor.PolarCoor;
 import org.openstreetmap.josm.data.osm.DataSet;
 import org.openstreetmap.josm.data.osm.Node;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
@@ -171,7 +172,10 @@ public final class AlignInLineAction extends JosmAction {
             return;
 
         try {
-            MainApplication.undoRedo.add(buildCommand());
+            Command cmd = buildCommand(getLayerManager().getEditDataSet());
+            if (cmd != null) {
+                MainApplication.undoRedo.add(cmd);
+            }
         } catch (InvalidSelection except) {
             Logging.debug(except);
             new Notification(except.getMessage())
@@ -182,12 +186,12 @@ public final class AlignInLineAction extends JosmAction {
 
     /**
      * Builds "align in line" command depending on the selected objects.
+     * @param ds data set in which the command operates
      * @return the resulting command to execute to perform action
      * @throws InvalidSelection if a polygon is selected, or if a node is used by 3 or more ways
-     * @since 12562
+     * @since 13108
      */
-    public Command buildCommand() throws InvalidSelection {
-        DataSet ds = getLayerManager().getEditDataSet();
+    public Command buildCommand(DataSet ds) throws InvalidSelection {
         List<Node> selectedNodes = new ArrayList<>(ds.getSelectedNodes());
         List<Way> selectedWays = new ArrayList<>(ds.getSelectedWays());
         selectedWays.removeIf(OsmPrimitive::isIncomplete);
@@ -274,7 +278,7 @@ public final class AlignInLineAction extends JosmAction {
             } else
                 throw new InvalidSelection(tr("Intersection of three or more ways can not be solved. Abort."));
         }
-        return new SequenceCommand(tr("Align Nodes in Line"), cmds);
+        return cmds.isEmpty() ? null : new SequenceCommand(tr("Align Nodes in Line"), cmds);
     }
 
     /**
@@ -307,8 +311,7 @@ public final class AlignInLineAction extends JosmAction {
                 EastNorth c = node.getEastNorth();
                 double[] angle = new double[4];
                 for (int i = 0; i < 4; i++) {
-                    EastNorth p = neighbors.get(i).getEastNorth();
-                    angle[i] = Math.atan2(p.north() - c.north(), p.east() - c.east());
+                    angle[i] = PolarCoor.computeAngle(neighbors.get(i).getEastNorth(), c);
                 }
                 double[] deltaAngle = new double[3];
                 for (int i = 0; i < 3; i++) {
diff --git a/src/org/openstreetmap/josm/actions/CopyCoordinatesAction.java b/src/org/openstreetmap/josm/actions/CopyCoordinatesAction.java
index 1a4f627..08915a6 100644
--- a/src/org/openstreetmap/josm/actions/CopyCoordinatesAction.java
+++ b/src/org/openstreetmap/josm/actions/CopyCoordinatesAction.java
@@ -19,6 +19,9 @@ import org.openstreetmap.josm.tools.Shortcut;
  */
 public class CopyCoordinatesAction extends JosmAction {
 
+    /**
+     * Constructs a new {@code CopyCoordinatesAction}.
+     */
     public CopyCoordinatesAction() {
         super(tr("Copy Coordinates"), null,
                 tr("Copy coordinates of selected nodes to clipboard."),
diff --git a/src/org/openstreetmap/josm/actions/CreateCircleAction.java b/src/org/openstreetmap/josm/actions/CreateCircleAction.java
index 9a729bf..446e958 100644
--- a/src/org/openstreetmap/josm/actions/CreateCircleAction.java
+++ b/src/org/openstreetmap/josm/actions/CreateCircleAction.java
@@ -24,6 +24,7 @@ import org.openstreetmap.josm.command.Command;
 import org.openstreetmap.josm.command.SequenceCommand;
 import org.openstreetmap.josm.data.coor.EastNorth;
 import org.openstreetmap.josm.data.coor.LatLon;
+import org.openstreetmap.josm.data.coor.PolarCoor;
 import org.openstreetmap.josm.data.osm.DataSet;
 import org.openstreetmap.josm.data.osm.Node;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
@@ -107,8 +108,7 @@ public final class CreateCircleAction extends JosmAction {
         private final Node node;
 
         PolarNode(EastNorth center, Node n) {
-            EastNorth pt = n.getEastNorth();
-            this.a = Math.atan2(pt.north() - center.north(), pt.east() - center.east());
+            this.a = PolarCoor.computeAngle(n.getEastNorth(), center);
             this.node = n;
         }
     }
diff --git a/src/org/openstreetmap/josm/actions/CreateMultipolygonAction.java b/src/org/openstreetmap/josm/actions/CreateMultipolygonAction.java
index 2690953..eccb25c 100644
--- a/src/org/openstreetmap/josm/actions/CreateMultipolygonAction.java
+++ b/src/org/openstreetmap/josm/actions/CreateMultipolygonAction.java
@@ -449,8 +449,13 @@ public class CreateMultipolygonAction extends JosmAction {
                     fixed = true;
                 }
             }
-            if (fixed && !relation.isNew())
-                commands.add(new ChangeCommand(relation, r2));
+            if (fixed && !relation.isNew()) {
+                DataSet ds = relation.getDataSet();
+                if (ds == null) {
+                    ds = MainApplication.getLayerManager().getEditDataSet();
+                }
+                commands.add(new ChangeCommand(ds, relation, r2));
+            }
         }
 
         return commands;
diff --git a/src/org/openstreetmap/josm/actions/DialogsToggleAction.java b/src/org/openstreetmap/josm/actions/DialogsToggleAction.java
index af67d42..469867c 100644
--- a/src/org/openstreetmap/josm/actions/DialogsToggleAction.java
+++ b/src/org/openstreetmap/josm/actions/DialogsToggleAction.java
@@ -27,7 +27,7 @@ public class DialogsToggleAction extends ToggleAction {
      * Constructs a new {@code DialogsToggleAction}.
      */
     public DialogsToggleAction() {
-        super(tr("Toggle dialogs panel"),
+        super(tr("Dialogs panel"),
               (ImageProvider) null, /* no icon */
               tr("Toggle dialogs panel, maximize mapview"),
               Shortcut.registerShortcut("menu:view:dialogspanel", tr("Toggle dialogs panel"), KeyEvent.VK_TAB, Shortcut.DIRECT),
diff --git a/src/org/openstreetmap/josm/actions/DownloadPrimitiveAction.java b/src/org/openstreetmap/josm/actions/DownloadPrimitiveAction.java
index b0189b4..5ca154f 100644
--- a/src/org/openstreetmap/josm/actions/DownloadPrimitiveAction.java
+++ b/src/org/openstreetmap/josm/actions/DownloadPrimitiveAction.java
@@ -22,6 +22,9 @@ import org.openstreetmap.josm.tools.Shortcut;
  */
 public class DownloadPrimitiveAction extends JosmAction {
 
+    /**
+     * Action shortcut (ctrl-shift-O by default), made public in order to be used from {@code GettingStarted} page.
+     */
     public static final Shortcut SHORTCUT = Shortcut.registerShortcut("system:download_primitive", tr("File: {0}", tr("Download object...")),
             KeyEvent.VK_O, Shortcut.CTRL_SHIFT);
 
@@ -36,7 +39,6 @@ public class DownloadPrimitiveAction extends JosmAction {
 
     @Override
     public void actionPerformed(ActionEvent e) {
-
         DownloadObjectDialog dialog = new DownloadObjectDialog();
         if (dialog.showDialog().getValue() != dialog.getContinueButtonIndex()) return;
 
@@ -44,6 +46,7 @@ public class DownloadPrimitiveAction extends JosmAction {
     }
 
     /**
+     * Submits the download task for the given primitive ids.
      * @param newLayer if the data should be downloaded into a new layer
      * @param ids List of primitive id to download
      * @param downloadReferrers if the referrers of the object should be downloaded as well, i.e., parent relations, and for nodes,
diff --git a/src/org/openstreetmap/josm/actions/ExpertToggleAction.java b/src/org/openstreetmap/josm/actions/ExpertToggleAction.java
index 1ebe807..18c45da 100644
--- a/src/org/openstreetmap/josm/actions/ExpertToggleAction.java
+++ b/src/org/openstreetmap/josm/actions/ExpertToggleAction.java
@@ -42,7 +42,7 @@ public class ExpertToggleAction extends ToggleAction {
     }
 
     /**
-     * Register a expert mode change listener
+     * Register a expert mode change listener.
      *
      * @param listener the listener. Ignored if null.
      */
@@ -50,6 +50,11 @@ public class ExpertToggleAction extends ToggleAction {
         addExpertModeChangeListener(listener, false);
     }
 
+    /**
+     * Register a expert mode change listener, and optionnally fires it.
+     * @param listener the listener. Ignored if null.
+     * @param fireWhenAdding if true, the listener will be fired immediately after added
+     */
     public static synchronized void addExpertModeChangeListener(ExpertModeChangeListener listener, boolean fireWhenAdding) {
         if (listener == null) return;
         listeners.addWeakListener(listener);
diff --git a/src/org/openstreetmap/josm/actions/JoinAreasAction.java b/src/org/openstreetmap/josm/actions/JoinAreasAction.java
index db80716..90b0750 100644
--- a/src/org/openstreetmap/josm/actions/JoinAreasAction.java
+++ b/src/org/openstreetmap/josm/actions/JoinAreasAction.java
@@ -600,7 +600,7 @@ public class JoinAreasAction extends JosmAction {
         // retrieve effective dataset before joining the ways (which affects the selection, thus, the <ways> collection)
         // Dataset retrieving allows to call this code without relying on Main.getCurrentDataSet(), thus, on a mapview instance
         if (!areas.isEmpty()) {
-            ds = areas.iterator().next().getOuterWay().getDataSet();
+            ds = areas.get(0).getOuterWay().getDataSet();
         }
 
         boolean hasChanges = false;
diff --git a/src/org/openstreetmap/josm/actions/MapRectifierWMSmenuAction.java b/src/org/openstreetmap/josm/actions/MapRectifierWMSmenuAction.java
index f14b3b1..12e0dff 100644
--- a/src/org/openstreetmap/josm/actions/MapRectifierWMSmenuAction.java
+++ b/src/org/openstreetmap/josm/actions/MapRectifierWMSmenuAction.java
@@ -52,6 +52,7 @@ public class MapRectifierWMSmenuAction extends JosmAction {
         private JRadioButton btn;
 
         /**
+         * Constructs a new {@code RectifierService}.
          * @param name Name of the rectifing service
          * @param url URL to the service where users can register, upload, etc.
          * @param wmsUrl URL to the WMS server where JOSM will grab the images. Insert __s__ where the ID should be placed
diff --git a/src/org/openstreetmap/josm/actions/OrthogonalizeAction.java b/src/org/openstreetmap/josm/actions/OrthogonalizeAction.java
index 59dbbbc..79271ec 100644
--- a/src/org/openstreetmap/josm/actions/OrthogonalizeAction.java
+++ b/src/org/openstreetmap/josm/actions/OrthogonalizeAction.java
@@ -25,6 +25,7 @@ import org.openstreetmap.josm.command.Command;
 import org.openstreetmap.josm.command.MoveCommand;
 import org.openstreetmap.josm.command.SequenceCommand;
 import org.openstreetmap.josm.data.coor.EastNorth;
+import org.openstreetmap.josm.data.coor.PolarCoor;
 import org.openstreetmap.josm.data.osm.Node;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.data.osm.Way;
@@ -436,14 +437,20 @@ public final class OrthogonalizeAction extends JosmAction {
      * Class contains everything we need to know about a single way.
      */
     private static class WayData {
-        public final List<Node> wayNodes;       // The assigned way
-        public final int nSeg;                  // Number of Segments of the Way
-        public final int nNode;                 // Number of Nodes of the Way
-        public final Direction[] segDirections; // Direction of the segments
+        /** The assigned way */
+        public final List<Node> wayNodes;
+        /** Number of Segments of the Way */
+        public final int nSeg;
+        /** Number of Nodes of the Way */
+        public final int nNode;
+        /** Direction of the segments */
+        public final Direction[] segDirections;
         // segment i goes from node i to node (i+1)
-        public EastNorth segSum;          // (Vector-)sum of all horizontal segments plus the sum of all vertical
+        /** (Vector-)sum of all horizontal segments plus the sum of all vertical */
+        public EastNorth segSum;
         // segments turned by 90 degrees
-        public double heading;            // heading of segSum == approximate heading of the way
+        /** heading of segSum == approximate heading of the way */
+        public double heading;
 
         WayData(List<Node> wayNodes) {
             this.wayNodes = wayNodes;
@@ -574,7 +581,7 @@ public final class OrthogonalizeAction extends JosmAction {
         }
 
         public static double polar(EastNorth en1, EastNorth en2) {
-            return Math.atan2(en2.north() - en1.north(), en2.east() - en1.east());
+            return PolarCoor.computeAngle(en2, en1);
         }
     }
 
diff --git a/src/org/openstreetmap/josm/actions/PurgeAction.java b/src/org/openstreetmap/josm/actions/PurgeAction.java
index 2bd9d9a..b66034e 100644
--- a/src/org/openstreetmap/josm/actions/PurgeAction.java
+++ b/src/org/openstreetmap/josm/actions/PurgeAction.java
@@ -159,7 +159,7 @@ public class PurgeAction extends JosmAction {
             JButton addToSelection = new JButton(new AbstractAction() {
                 {
                     putValue(SHORT_DESCRIPTION, tr("Add to selection"));
-                    putValue(SMALL_ICON, ImageProvider.get("dialogs", "select"));
+                    new ImageProvider("dialogs", "select").getResource().attachImageIcon(this, true);
                 }
 
                 @Override
diff --git a/src/org/openstreetmap/josm/actions/RenameLayerAction.java b/src/org/openstreetmap/josm/actions/RenameLayerAction.java
index e7bd82e..2f9c30e 100644
--- a/src/org/openstreetmap/josm/actions/RenameLayerAction.java
+++ b/src/org/openstreetmap/josm/actions/RenameLayerAction.java
@@ -38,7 +38,8 @@ public class RenameLayerAction extends AbstractAction {
      * @param layer layer to rename
      */
     public RenameLayerAction(File file, Layer layer) {
-        super(tr("Rename layer"), ImageProvider.get("dialogs", "edit"));
+        super(tr("Rename layer"));
+        new ImageProvider("dialogs", "edit").getResource().attachImageIcon(this, true);
         this.file = file;
         this.layer = layer;
         this.putValue("help", ht("/Action/RenameLayer"));
diff --git a/src/org/openstreetmap/josm/actions/ReverseWayAction.java b/src/org/openstreetmap/josm/actions/ReverseWayAction.java
index c91fdf4..f992b59 100644
--- a/src/org/openstreetmap/josm/actions/ReverseWayAction.java
+++ b/src/org/openstreetmap/josm/actions/ReverseWayAction.java
@@ -141,6 +141,7 @@ public final class ReverseWayAction extends JosmAction {
     }
 
     /**
+     * Reverses a given way.
      * @param w the way
      * @return the reverse command and the tag correction commands
      * @throws UserCancelException if user cancels a reverse warning dialog
diff --git a/src/org/openstreetmap/josm/actions/SaveActionBase.java b/src/org/openstreetmap/josm/actions/SaveActionBase.java
index 34f85c2..95d27c4 100644
--- a/src/org/openstreetmap/josm/actions/SaveActionBase.java
+++ b/src/org/openstreetmap/josm/actions/SaveActionBase.java
@@ -20,6 +20,7 @@ import org.openstreetmap.josm.gui.ExtendedDialog;
 import org.openstreetmap.josm.gui.io.importexport.FileExporter;
 import org.openstreetmap.josm.gui.layer.Layer;
 import org.openstreetmap.josm.gui.layer.OsmDataLayer;
+import org.openstreetmap.josm.gui.util.GuiHelper;
 import org.openstreetmap.josm.gui.widgets.AbstractFileChooser;
 import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.Logging;
@@ -104,8 +105,9 @@ public abstract class SaveActionBase extends DiskAccessAction {
                 }
             }
             if (!exported) {
-                JOptionPane.showMessageDialog(Main.parent, tr("No Exporter found! Nothing saved."), tr("Warning"),
-                        JOptionPane.WARNING_MESSAGE);
+                GuiHelper.runInEDTAndWait(() ->
+                    JOptionPane.showMessageDialog(Main.parent, tr("No Exporter found! Nothing saved."), tr("Warning"),
+                        JOptionPane.WARNING_MESSAGE));
                 return false;
             } else if (canceled) {
                 return false;
diff --git a/src/org/openstreetmap/josm/actions/SplitWayAction.java b/src/org/openstreetmap/josm/actions/SplitWayAction.java
index f9e82c3..abd3742 100644
--- a/src/org/openstreetmap/josm/actions/SplitWayAction.java
+++ b/src/org/openstreetmap/josm/actions/SplitWayAction.java
@@ -63,6 +63,7 @@ public class SplitWayAction extends JosmAction {
         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})
@@ -427,7 +428,7 @@ public class SplitWayAction extends JosmAction {
      * @param wayChunks the list of way chunks into the way is split. Must not be null.
      * @param selection The list of currently selected primitives
      * @return the result from the split operation
-     * @deprecated to be removed end of 2017. Use {@link #splitWay(Way, List, Collection)} instead
+     * @deprecated to be removed end of 2017. Use {@link SplitWayCommand#splitWay} instead
      */
     @Deprecated
     public static SplitWayResult splitWay(OsmDataLayer layer, Way way, List<List<Node>> wayChunks,
@@ -448,7 +449,7 @@ public class SplitWayAction extends JosmAction {
      * @param selection The list of currently selected primitives
      * @return the result from the split operation
      * @since 12718
-     * @deprecated to be removed end of 2017. Use {@link #splitWay(Way, List, Collection)} instead
+     * @deprecated to be removed end of 2017. Use {@link SplitWayCommand#splitWay} instead
      */
     @Deprecated
     public static SplitWayResult splitWay(Way way, List<List<Node>> wayChunks,
@@ -473,7 +474,7 @@ public class SplitWayAction extends JosmAction {
      * @param splitStrategy The strategy used to determine which way chunk should reuse the old id and its history
      * @return the result from the split operation
      * @since 8954
-     * @deprecated to be removed end of 2017. Use {@link #splitWay(Way, List, Collection, Strategy)} instead
+     * @deprecated to be removed end of 2017. Use {@link SplitWayCommand#splitWay} instead
      */
     @Deprecated
     public static SplitWayResult splitWay(OsmDataLayer layer, Way way, List<List<Node>> wayChunks,
@@ -532,7 +533,7 @@ public class SplitWayAction extends JosmAction {
      * @param atNodes the list of nodes where the way is split. Must not be null.
      * @param selection The list of currently selected primitives
      * @return the result from the split operation
-     * @deprecated to be removed end of 2017. Use {@link #split(Way, List, Collection)} instead
+     * @deprecated 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) {
@@ -554,7 +555,7 @@ public class SplitWayAction extends JosmAction {
      * @param selection The list of currently selected primitives
      * @return the result from the split operation
      * @since 12718
-     * @deprecated to be removed end of 2017. Use {@link #splitWay(Way, List, Collection)} instead
+     * @deprecated 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) {
diff --git a/src/org/openstreetmap/josm/actions/ToggleUploadDiscouragedLayerAction.java b/src/org/openstreetmap/josm/actions/ToggleUploadDiscouragedLayerAction.java
index 2d6d752..a15a58e 100644
--- a/src/org/openstreetmap/josm/actions/ToggleUploadDiscouragedLayerAction.java
+++ b/src/org/openstreetmap/josm/actions/ToggleUploadDiscouragedLayerAction.java
@@ -1,6 +1,7 @@
 // License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.actions;
 
+import static org.openstreetmap.josm.gui.help.HelpUtil.ht;
 import static org.openstreetmap.josm.tools.I18n.tr;
 
 import java.awt.Component;
@@ -29,9 +30,11 @@ public class ToggleUploadDiscouragedLayerAction extends AbstractAction implement
      * @param layer the layer for which to toggle the {@linkplain OsmDataLayer#setUploadDiscouraged(boolean) discouraged upload flag}
      */
     public ToggleUploadDiscouragedLayerAction(OsmDataLayer layer) {
-        super(tr("Discourage upload"), ImageProvider.get("no_upload"));
+        super(tr("Discourage upload"));
+        new ImageProvider("no_upload").getResource().attachImageIcon(this, true);
         this.layer = layer;
         setEnabled(layer.isUploadable());
+        putValue("help", ht("/Action/EncourageDiscourageUpload"));
     }
 
     @Override
diff --git a/src/org/openstreetmap/josm/actions/UploadAction.java b/src/org/openstreetmap/josm/actions/UploadAction.java
index c433203..1d3f9d4 100644
--- a/src/org/openstreetmap/josm/actions/UploadAction.java
+++ b/src/org/openstreetmap/josm/actions/UploadAction.java
@@ -9,6 +9,7 @@ import java.awt.event.KeyEvent;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
+import java.util.Optional;
 
 import javax.swing.JOptionPane;
 
@@ -24,11 +25,13 @@ import org.openstreetmap.josm.data.conflict.ConflictCollection;
 import org.openstreetmap.josm.data.osm.Changeset;
 import org.openstreetmap.josm.gui.HelpAwareOptionPane;
 import org.openstreetmap.josm.gui.MainApplication;
+import org.openstreetmap.josm.gui.io.AsynchronousUploadPrimitivesTask;
 import org.openstreetmap.josm.gui.io.UploadDialog;
 import org.openstreetmap.josm.gui.io.UploadPrimitivesTask;
 import org.openstreetmap.josm.gui.layer.AbstractModifiableLayer;
 import org.openstreetmap.josm.gui.layer.OsmDataLayer;
 import org.openstreetmap.josm.gui.util.GuiHelper;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.ImageProvider;
 import org.openstreetmap.josm.tools.Shortcut;
 import org.openstreetmap.josm.tools.Utils;
@@ -57,6 +60,8 @@ public class UploadAction extends JosmAction {
     private static final List<UploadHook> UPLOAD_HOOKS = new LinkedList<>();
     private static final List<UploadHook> LATE_UPLOAD_HOOKS = new LinkedList<>();
 
+    private static final String IS_ASYNC_UPLOAD_ENABLED = "asynchronous.upload";
+
     static {
         /**
          * Calls validator before upload.
@@ -138,16 +143,18 @@ public class UploadAction extends JosmAction {
         putValue("help", ht("/Action/Upload"));
     }
 
-    /**
-     * Refreshes the enabled state
-     *
-     */
     @Override
     protected void updateEnabledState() {
         OsmDataLayer editLayer = getLayerManager().getEditLayer();
         setEnabled(editLayer != null && editLayer.isUploadable());
     }
 
+    /**
+     * Check whether the preconditions are met to upload data from a given layer, if applicable.
+     * @param layer layer to check
+     * @return {@code true} if the preconditions are met, or not applicable
+     * @see #checkPreUploadConditions(AbstractModifiableLayer, APIDataSet)
+     */
     public static boolean checkPreUploadConditions(AbstractModifiableLayer layer) {
         return checkPreUploadConditions(layer,
                 layer instanceof OsmDataLayer ? new APIDataSet(((OsmDataLayer) layer).data) : null);
@@ -257,14 +264,24 @@ public class UploadAction extends JosmAction {
             hook.modifyChangesetTags(changesetTags);
         }
 
-        MainApplication.worker.execute(
-                new UploadPrimitivesTask(
-                        UploadDialog.getUploadDialog().getUploadStrategySpecification(),
-                        layer,
-                        apiData,
-                        cs
-                )
-        );
+        if (Config.getPref().getBoolean(IS_ASYNC_UPLOAD_ENABLED, true)) {
+            Optional<AsynchronousUploadPrimitivesTask> asyncUploadTask = AsynchronousUploadPrimitivesTask.createAsynchronousUploadTask(
+                    UploadDialog.getUploadDialog().getUploadStrategySpecification(),
+                    layer,
+                    apiData,
+                    cs);
+
+            if (asyncUploadTask.isPresent()) {
+                MainApplication.worker.execute(asyncUploadTask.get());
+            }
+        } else {
+            MainApplication.worker.execute(
+                    new UploadPrimitivesTask(
+                            UploadDialog.getUploadDialog().getUploadStrategySpecification(),
+                            layer,
+                            apiData,
+                            cs));
+        }
     }
 
     @Override
diff --git a/src/org/openstreetmap/josm/actions/mapmode/DrawAction.java b/src/org/openstreetmap/josm/actions/mapmode/DrawAction.java
index 7eeeb85..31636fa 100644
--- a/src/org/openstreetmap/josm/actions/mapmode/DrawAction.java
+++ b/src/org/openstreetmap/josm/actions/mapmode/DrawAction.java
@@ -965,6 +965,7 @@ public class DrawAction extends MapMode implements MapViewPaintable, DataSelecti
     }
 
     /**
+     * Replies the parent way of a node, if it is the end of exactly one usable way.
      * @param n node
      * @return If the node is the end of exactly one way, return this.
      *  <code>null</code> otherwise.
diff --git a/src/org/openstreetmap/josm/actions/mapmode/ExtrudeAction.java b/src/org/openstreetmap/josm/actions/mapmode/ExtrudeAction.java
index 9e56e34..9771289 100644
--- a/src/org/openstreetmap/josm/actions/mapmode/ExtrudeAction.java
+++ b/src/org/openstreetmap/josm/actions/mapmode/ExtrudeAction.java
@@ -1094,10 +1094,8 @@ public class ExtrudeAction extends MapMode implements MapViewPaintable, KeyPress
                         g2.setColor(helperColor);
                         g2.setStroke(helperStrokeDash);
                         // Draw a guideline along the normal.
-                        Line2D normline;
                         Point2D centerpoint = mv.getPoint2D(p1.interpolate(p2, .5));
-                        normline = createSemiInfiniteLine(centerpoint, normalUnitVector, g2);
-                        g2.draw(normline);
+                        g2.draw(createSemiInfiniteLine(centerpoint, normalUnitVector, g2));
                         // Draw right angle marker on initial position, only when moving at right angle
                         if (activeMoveDirection.perpendicular) {
                             // EastNorth units per pixel
@@ -1190,7 +1188,7 @@ public class ExtrudeAction extends MapMode implements MapViewPaintable, KeyPress
      * @return created line
      */
     private static Line2D createSemiInfiniteLine(Point2D start, Point2D unitvector, Graphics2D g) {
-        Rectangle bounds = g.getDeviceConfiguration().getBounds();
+        Rectangle bounds = g.getClipBounds();
         try {
             AffineTransform invtrans = g.getTransform().createInverse();
             Point2D widthpoint = invtrans.deltaTransform(new Point2D.Double(bounds.width, 0), null);
diff --git a/src/org/openstreetmap/josm/actions/mapmode/SelectAction.java b/src/org/openstreetmap/josm/actions/mapmode/SelectAction.java
index ca3a295..f486758 100644
--- a/src/org/openstreetmap/josm/actions/mapmode/SelectAction.java
+++ b/src/org/openstreetmap/josm/actions/mapmode/SelectAction.java
@@ -17,6 +17,7 @@ import java.util.HashSet;
 import java.util.Iterator;
 import java.util.LinkedList;
 import java.util.Optional;
+import java.util.Set;
 
 import javax.swing.JOptionPane;
 
@@ -828,16 +829,19 @@ public class SelectAction extends MapMode implements ModifierExListener, KeyPres
                 MainApplication.undoRedo.undo();
             }
         }
-        int max = Config.getPref().getInt("warn.move.maxelements", 20), limit = max;
+        Set<Node> nodes = new HashSet<>();
+        int max = Config.getPref().getInt("warn.move.maxelements", 20);
         for (OsmPrimitive osm : getLayerManager().getEditDataSet().getSelected()) {
             if (osm instanceof Way) {
-                limit -= ((Way) osm).getNodes().size();
+                nodes.addAll(((Way) osm).getNodes());
+            } else if (osm instanceof Node) {
+                nodes.add((Node) osm);
             }
-            if (--limit < 0) {
+            if (nodes.size() > max) {
                 break;
             }
         }
-        if (limit < 0) {
+        if (nodes.size() > max) {
             final ExtendedDialog ed = new ConfirmMoveDialog();
             ed.setContent(
                     /* for correct i18n of plural forms - see #9110 */
diff --git a/src/org/openstreetmap/josm/actions/relation/AddSelectionToRelations.java b/src/org/openstreetmap/josm/actions/relation/AddSelectionToRelations.java
index 6131534..304939f 100644
--- a/src/org/openstreetmap/josm/actions/relation/AddSelectionToRelations.java
+++ b/src/org/openstreetmap/josm/actions/relation/AddSelectionToRelations.java
@@ -30,7 +30,7 @@ public class AddSelectionToRelations extends AbstractRelationAction implements S
     * Constructs a new <code>AddSelectionToRelation</code>.
     */
     public AddSelectionToRelations() {
-        putValue(SMALL_ICON, ImageProvider.get("dialogs/conflict", "copyendright"));
+        new ImageProvider("dialogs/conflict", "copyendright").getResource().attachImageIcon(this, true);
         putValue(SHORT_DESCRIPTION, tr("Add all objects selected in the current dataset after the last member"));
     }
 
diff --git a/src/org/openstreetmap/josm/actions/relation/DownloadMembersAction.java b/src/org/openstreetmap/josm/actions/relation/DownloadMembersAction.java
index 513d63a..71cb251 100644
--- a/src/org/openstreetmap/josm/actions/relation/DownloadMembersAction.java
+++ b/src/org/openstreetmap/josm/actions/relation/DownloadMembersAction.java
@@ -27,7 +27,7 @@ public class DownloadMembersAction extends AbstractRelationAction {
     public DownloadMembersAction() {
         putValue(SHORT_DESCRIPTION, tr("Download all members of the selected relations"));
         putValue(NAME, tr("Download members"));
-        putValue(SMALL_ICON, ImageProvider.get("dialogs", "downloadincomplete"));
+        new ImageProvider("dialogs", "downloadincomplete").getResource().attachImageIcon(this, true);
         putValue("help", ht("/Dialog/RelationList#DownloadMembers"));
     }
 
diff --git a/src/org/openstreetmap/josm/actions/relation/DownloadSelectedIncompleteMembersAction.java b/src/org/openstreetmap/josm/actions/relation/DownloadSelectedIncompleteMembersAction.java
index b80cb6d..9396ff6 100644
--- a/src/org/openstreetmap/josm/actions/relation/DownloadSelectedIncompleteMembersAction.java
+++ b/src/org/openstreetmap/josm/actions/relation/DownloadSelectedIncompleteMembersAction.java
@@ -30,7 +30,7 @@ public class DownloadSelectedIncompleteMembersAction extends AbstractRelationAct
      */
     public DownloadSelectedIncompleteMembersAction() {
         putValue(SHORT_DESCRIPTION, tr("Download incomplete members of selected relations"));
-        putValue(SMALL_ICON, ImageProvider.get("dialogs/relation", "downloadincompleteselected"));
+        new ImageProvider("dialogs/relation", "downloadincompleteselected").getResource().attachImageIcon(this, true);
         putValue(NAME, tr("Download incomplete members"));
     }
 
diff --git a/src/org/openstreetmap/josm/actions/relation/SelectInRelationListAction.java b/src/org/openstreetmap/josm/actions/relation/SelectInRelationListAction.java
index be5c6db..80a3bf0 100644
--- a/src/org/openstreetmap/josm/actions/relation/SelectInRelationListAction.java
+++ b/src/org/openstreetmap/josm/actions/relation/SelectInRelationListAction.java
@@ -21,7 +21,7 @@ public class SelectInRelationListAction extends AbstractRelationAction {
     public SelectInRelationListAction() {
         putValue(NAME, tr("Select in relation list"));
         putValue(SHORT_DESCRIPTION, tr("Select relation in relation list."));
-        putValue(SMALL_ICON, ImageProvider.get("dialogs", "selectionlist"));
+        new ImageProvider("dialogs", "selectionlist").getResource().attachImageIcon(this, true);
     }
 
     @Override
diff --git a/src/org/openstreetmap/josm/actions/relation/SelectMembersAction.java b/src/org/openstreetmap/josm/actions/relation/SelectMembersAction.java
index 1931be2..9ff4d10 100644
--- a/src/org/openstreetmap/josm/actions/relation/SelectMembersAction.java
+++ b/src/org/openstreetmap/josm/actions/relation/SelectMembersAction.java
@@ -28,7 +28,7 @@ public class SelectMembersAction extends AbstractRelationAction {
     public SelectMembersAction(boolean add) {
         putValue(SHORT_DESCRIPTION, add ? tr("Add the members of all selected relations to current selection")
                 : tr("Select the members of all selected relations"));
-        putValue(SMALL_ICON, ImageProvider.get("selectall"));
+        new ImageProvider("selectall").getResource().attachImageIcon(this, true);
         putValue(NAME, add ? tr("Select members (add)") : tr("Select members"));
         this.add = add;
     }
diff --git a/src/org/openstreetmap/josm/actions/search/SearchAction.java b/src/org/openstreetmap/josm/actions/search/SearchAction.java
index 25eb3b0..3bb07d5 100644
--- a/src/org/openstreetmap/josm/actions/search/SearchAction.java
+++ b/src/org/openstreetmap/josm/actions/search/SearchAction.java
@@ -200,11 +200,24 @@ public class SearchAction extends JosmAction implements ParameterizedAction {
             this.hcb = hcb;
         }
 
+        /**
+         * Adds the title (prefix) label at the beginning of the row. Should be called only once.
+         * @param title English title
+         * @return {@code this} for easy chaining
+         */
         public SearchKeywordRow addTitle(String title) {
             add(new JLabel(tr("{0}: ", title)));
             return this;
         }
 
+        /**
+         * Adds an example keyword label at the end of the row. Can be called several times.
+         * @param displayText displayed HTML text
+         * @param insertText optional: if set, makes the label clickable, and {@code insertText} will be inserted in search string
+         * @param description optional: HTML text to be displayed in the tooltip
+         * @param examples optional: examples joined as HTML list in the tooltip
+         * @return {@code this} for easy chaining
+         */
         public SearchKeywordRow addKeyword(String displayText, final String insertText, String description, String... examples) {
             JLabel label = new JLabel("<html>"
                     + "<style>td{border:1px solid gray; font-weight:normal;}</style>"
@@ -670,6 +683,7 @@ public class SearchAction extends JosmAction implements ParameterizedAction {
          * @param result The result collection, including the initial collection.
          * @param foundMatches The number of matches added to the result.
          * @param setting The setting used.
+         * @param parent parent component
          */
         void receiveSearchResult(DataSet ds, Collection<OsmPrimitive> result, int foundMatches, SearchSetting setting, Component parent);
     }
diff --git a/src/org/openstreetmap/josm/command/Command.java b/src/org/openstreetmap/josm/command/Command.java
index 2d08bd6..903cb62 100644
--- a/src/org/openstreetmap/josm/command/Command.java
+++ b/src/org/openstreetmap/josm/command/Command.java
@@ -44,7 +44,7 @@ public abstract class Command implements PseudoCommand {
     public static final int IS_INCOMPLETE = 2;
 
     private static final class CloneVisitor implements OsmPrimitiveVisitor {
-        public final Map<OsmPrimitive, PrimitiveData> orig = new LinkedHashMap<>();
+        final Map<OsmPrimitive, PrimitiveData> orig = new LinkedHashMap<>();
 
         @Override
         public void visit(Node n) {
diff --git a/src/org/openstreetmap/josm/command/SplitWayCommand.java b/src/org/openstreetmap/josm/command/SplitWayCommand.java
index 683a681..4303785 100644
--- a/src/org/openstreetmap/josm/command/SplitWayCommand.java
+++ b/src/org/openstreetmap/josm/command/SplitWayCommand.java
@@ -442,15 +442,25 @@ public class SplitWayCommand extends SequenceCommand {
     }
 
     static OsmPrimitive findVia(Relation r, String type) {
-        for (RelationMember rmv : r.getMembers()) {
-            if (("restriction".equals(type) && "via".equals(rmv.getRole()))
-             || ("destination_sign".equals(type) && rmv.hasRole("sign", "intersection"))) {
-                return rmv.getMember();
+        if (type != null) {
+            switch (type) {
+            case "restriction":
+                return findRelationMember(r, "via").orElse(null);
+            case "destination_sign":
+                // Prefer intersection over sign, see #12347
+                return findRelationMember(r, "intersection").orElse(findRelationMember(r, "sign").orElse(null));
+            default:
+                return null;
             }
         }
         return null;
     }
 
+    static Optional<OsmPrimitive> findRelationMember(Relation r, String role) {
+        return r.getMembers().stream().filter(rmv -> role.equals(rmv.getRole()))
+                .map(RelationMember::getMember).findAny();
+    }
+
     /**
      * Splits the way {@code way} at the nodes in {@code atNodes} and replies
      * the result of this process in an instance of {@link SplitWayCommand}.
diff --git a/src/org/openstreetmap/josm/command/conflict/WayNodesConflictResolverCommand.java b/src/org/openstreetmap/josm/command/conflict/WayNodesConflictResolverCommand.java
index ba4f118..6492e14 100644
--- a/src/org/openstreetmap/josm/command/conflict/WayNodesConflictResolverCommand.java
+++ b/src/org/openstreetmap/josm/command/conflict/WayNodesConflictResolverCommand.java
@@ -30,6 +30,7 @@ public class WayNodesConflictResolverCommand extends ConflictResolveCommand {
     private final List<Node> mergedNodeList;
 
     /**
+     * Constructs a new {@code WayNodesConflictResolverCommand}.
      * @param conflict the conflict data set
      * @param mergedNodeList the list of merged nodes
      */
diff --git a/src/org/openstreetmap/josm/corrector/ReverseWayTagCorrector.java b/src/org/openstreetmap/josm/corrector/ReverseWayTagCorrector.java
index 8c06136..81385ca 100644
--- a/src/org/openstreetmap/josm/corrector/ReverseWayTagCorrector.java
+++ b/src/org/openstreetmap/josm/corrector/ReverseWayTagCorrector.java
@@ -189,6 +189,12 @@ public class ReverseWayTagCorrector extends TagCorrector<Way> {
         return true;
     }
 
+    /**
+     * Returns the subset of irreversible ways.
+     * @param ways all ways
+     * @return the subset of irreversible ways
+     * @see #isReversible(Way)
+     */
     public static List<Way> irreversibleWays(List<Way> ways) {
         List<Way> newWays = new ArrayList<>(ways);
         for (Way way : ways) {
@@ -199,6 +205,11 @@ public class ReverseWayTagCorrector extends TagCorrector<Way> {
         return newWays;
     }
 
+    /**
+     * Inverts sign of a numeric value.
+     * @param value numeric value
+     * @return opposite numeric value
+     */
     public static String invertNumber(String value) {
         Pattern pattern = Pattern.compile("^([+-]?)(\\d.*)$", Pattern.CASE_INSENSITIVE);
         Matcher matcher = pattern.matcher(value);
diff --git a/src/org/openstreetmap/josm/corrector/TagCorrector.java b/src/org/openstreetmap/josm/corrector/TagCorrector.java
index ad2052a..33c6c91 100644
--- a/src/org/openstreetmap/josm/corrector/TagCorrector.java
+++ b/src/org/openstreetmap/josm/corrector/TagCorrector.java
@@ -42,12 +42,20 @@ import org.openstreetmap.josm.tools.UserCancelException;
  * Abstract base class for automatic tag corrections.
  *
  * Subclasses call applyCorrections() with maps of the requested
- * corrections and a dialog is pesented to the user to
+ * corrections and a dialog is presented to the user to
  * confirm these changes.
  * @param <P> The type of OSM primitive to correct
  */
 public abstract class TagCorrector<P extends OsmPrimitive> {
 
+    /**
+     * Executes the tag correction.
+     * @param oldprimitive old primitive
+     * @param primitive new primitive
+     * @return A list of commands
+     * @throws UserCancelException If the user canceled
+     * @see #applyCorrections(DataSet, Map, Map, String)
+     */
     public abstract Collection<Command> execute(P oldprimitive, P primitive) throws UserCancelException;
 
     private static final String[] APPLICATION_OPTIONS = new String[] {
diff --git a/src/org/openstreetmap/josm/data/APIDataSet.java b/src/org/openstreetmap/josm/data/APIDataSet.java
index 52e5621..7a16cb8 100644
--- a/src/org/openstreetmap/josm/data/APIDataSet.java
+++ b/src/org/openstreetmap/josm/data/APIDataSet.java
@@ -25,6 +25,7 @@ import org.openstreetmap.josm.data.osm.PrimitiveId;
 import org.openstreetmap.josm.data.osm.Relation;
 import org.openstreetmap.josm.data.osm.RelationMember;
 import org.openstreetmap.josm.data.osm.Way;
+import org.openstreetmap.josm.tools.Logging;
 import org.openstreetmap.josm.tools.Utils;
 
 /**
@@ -39,6 +40,35 @@ public class APIDataSet {
     private List<OsmPrimitive> toDelete;
 
     /**
+     * The type of operation we can perform with OSM API on a primitive.
+     * @since 13161
+     */
+    public enum APIOperation {
+        /** Add a new primitive */
+        ADD,
+        /** Update an existing primitive */
+        UPDATE,
+        /** Delete an existing primitive */
+        DELETE;
+
+        /**
+         * Determines the API operation to perform on a primitive.
+         * @param osm OSM primitive
+         * @return the API operation to perform on {@code osm}
+         */
+        public static APIOperation of(OsmPrimitive osm) {
+            if (osm.isNewOrUndeleted() && !osm.isDeleted()) {
+                return ADD;
+            } else if (osm.isModified() && !osm.isDeleted()) {
+                return UPDATE;
+            } else if (osm.isDeleted() && !osm.isNew() && osm.isModified() && osm.isVisible()) {
+                return DELETE;
+            }
+            return null;
+        }
+    }
+
+    /**
      * creates a new empty data set
      */
     public APIDataSet() {
@@ -68,12 +98,14 @@ public class APIDataSet {
         toDelete.clear();
 
         for (OsmPrimitive osm :primitives) {
-            if (osm.isNewOrUndeleted() && !osm.isDeleted()) {
-                toAdd.add(osm);
-            } else if (osm.isModified() && !osm.isDeleted()) {
-                toUpdate.add(osm);
-            } else if (osm.isDeleted() && !osm.isNew() && osm.isModified() && osm.isVisible()) {
-                toDelete.add(osm);
+            APIOperation op = APIOperation.of(osm);
+            if (op != null) {
+                switch (op) {
+                    case ADD: toAdd.add(osm); break;
+                    case UPDATE: toUpdate.add(osm); break;
+                    case DELETE: toDelete.add(osm); break;
+                    default: Logging.trace("Ignored primitive {0} -> {1}", osm, op);
+                }
             }
         }
         final Comparator<OsmPrimitive> orderingNodesWaysRelations = OsmPrimitiveComparator.orderingNodesWaysRelations();
diff --git a/src/org/openstreetmap/josm/data/Preferences.java b/src/org/openstreetmap/josm/data/Preferences.java
index d08d996..d4e1572 100644
--- a/src/org/openstreetmap/josm/data/Preferences.java
+++ b/src/org/openstreetmap/josm/data/Preferences.java
@@ -38,14 +38,17 @@ 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.ColorInfo;
 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;
+import org.openstreetmap.josm.io.OfflineAccessException;
+import org.openstreetmap.josm.io.OnlineResource;
 import org.openstreetmap.josm.spi.preferences.AbstractPreferences;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.spi.preferences.IBaseDirectories;
 import org.openstreetmap.josm.spi.preferences.IPreferences;
 import org.openstreetmap.josm.spi.preferences.ListListSetting;
@@ -53,9 +56,6 @@ 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.io.OfflineAccessException;
-import org.openstreetmap.josm.io.OnlineResource;
-import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.CheckParameterUtil;
 import org.openstreetmap.josm.tools.ColorHelper;
 import org.openstreetmap.josm.tools.I18n;
@@ -335,6 +335,8 @@ public class Preferences extends AbstractPreferences {
     }
 
     /**
+     * @param key preference key
+     * @return listener list for this key
      * @deprecated deprecated private method
      */
     @Deprecated
@@ -382,6 +384,9 @@ public class Preferences extends AbstractPreferences {
     }
 
     /**
+     * @param key preference key
+     * @param oldValue old value
+     * @param newValue new value
      * @deprecated deprecated private method
      */
     @Deprecated
@@ -430,6 +435,9 @@ public class Preferences extends AbstractPreferences {
     }
 
     /**
+     * @param createIfMissing if true, automatically creates this directory,
+     * in case it is missing
+     * @return the preferences directory
      * @deprecated use {@link #getDirs()} or (more generally) {@link Config#getDirs()}
      */
     @Deprecated
@@ -450,6 +458,9 @@ public class Preferences extends AbstractPreferences {
     }
 
     /**
+     * @param createIfMissing if true, automatically creates this directory,
+     * in case it is missing
+     * @return the user data directory
      * @deprecated use {@link #getDirs()} or (more generally) {@link Config#getDirs()}
      */
     @Deprecated
@@ -495,6 +506,9 @@ public class Preferences extends AbstractPreferences {
     }
 
     /**
+     * @param createIfMissing if true, automatically creates this directory,
+     * in case it is missing
+     * @return the cache directory
      * @deprecated use {@link #getDirs()} or (more generally) {@link Config#getDirs()}
      */
     @Deprecated
@@ -944,6 +958,8 @@ public class Preferences extends AbstractPreferences {
 
     /**
      * only for preferences
+     * @param o color key
+     * @return translated color name
      * @deprecated (since 12987) no longer supported
      */
     @Deprecated
diff --git a/src/org/openstreetmap/josm/data/coor/Coordinate.java b/src/org/openstreetmap/josm/data/coor/Coordinate.java
index 7d61edb..79b9505 100644
--- a/src/org/openstreetmap/josm/data/coor/Coordinate.java
+++ b/src/org/openstreetmap/josm/data/coor/Coordinate.java
@@ -98,11 +98,11 @@ abstract class Coordinate implements Serializable {
      * @param r size
      * @return BBox around this coordinate
      * @since 6203
-     * @deprecated no longer supported
+     * @deprecated use {@link BBox#BBox(double, double, double)} instead
      */
     @Deprecated
     public BBox toBBox(final double r) {
-        return new BBox(x - r, y - r, x + r, y + r);
+        return new BBox(x, y, r);
     }
 
     @Override
@@ -116,6 +116,6 @@ abstract class Coordinate implements Serializable {
         if (obj == null || getClass() != obj.getClass()) return false;
         Coordinate that = (Coordinate) obj;
         return Double.compare(that.x, x) == 0 &&
-                Double.compare(that.y, y) == 0;
+               Double.compare(that.y, y) == 0;
     }
 }
diff --git a/src/org/openstreetmap/josm/data/coor/PolarCoor.java b/src/org/openstreetmap/josm/data/coor/PolarCoor.java
new file mode 100644
index 0000000..6dcbdf5
--- /dev/null
+++ b/src/org/openstreetmap/josm/data/coor/PolarCoor.java
@@ -0,0 +1,107 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.data.coor;
+
+import java.io.Serializable;
+import java.util.Objects;
+
+/**
+ * Polar coordinate.
+ * @since 13107 (extracted from {@code AlignInCircleAction})
+ */
+public class PolarCoor implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * Radial coordinate (distance from the pole).
+     */
+    public final double radius;
+
+    /**
+     * Angular coordinate in radians.
+     */
+    public final double angle;
+
+    /**
+     * Reference point (analogous to the origin of a Cartesian coordinate system).
+     */
+    public final EastNorth pole;
+
+    /**
+     * Constructs a new {@code PolarCoor}, using {@code (0,0)} as pole.
+     * @param radius radial coordinate (distance from the pole)
+     * @param angle angular coordinate in radians
+     */
+    public PolarCoor(double radius, double angle) {
+        this(radius, angle, new EastNorth(0, 0));
+    }
+
+    /**
+     * Constructs a new {@code PolarCoor}.
+     * @param radius radial coordinate (distance from the pole)
+     * @param angle angular coordinate in radians
+     * @param pole reference point (analogous to the origin of a Cartesian coordinate system)
+     */
+    public PolarCoor(double radius, double angle, EastNorth pole) {
+        this.radius = radius;
+        this.angle = angle;
+        this.pole = pole;
+    }
+
+    /**
+     * Constructs a new {@code PolarCoor} from an {@link EastNorth}, using {@code (0,0)} as pole.
+     * @param en east/north coordinates
+     */
+    public PolarCoor(EastNorth en) {
+        this(en, new EastNorth(0, 0));
+    }
+
+    /**
+     * Constructs a new {@code PolarCoor}.
+     * @param en east/north coordinates
+     * @param pole reference point (analogous to the origin of a Cartesian coordinate system)
+     */
+    public PolarCoor(EastNorth en, EastNorth pole) {
+        this(en.distance(pole), computeAngle(en, pole), pole);
+    }
+
+    /**
+     * Compute polar angle between an east/north and the pole.
+     * @param en east/north coordinates
+     * @param pole reference point (analogous to the origin of a Cartesian coordinate system)
+     * @return polar angle in radians
+     */
+    public static double computeAngle(EastNorth en, EastNorth pole) {
+        return Math.atan2(en.north() - pole.north(), en.east() - pole.east());
+    }
+
+    /**
+     * Converts this {@code PolarCoor} to an {@link EastNorth} instance.
+     * @return a new {@code EastNorth} instance
+     */
+    public EastNorth toEastNorth() {
+        return new EastNorth(
+                radius * Math.cos(angle) + pole.east(),
+                radius * Math.sin(angle) + pole.north());
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(radius, angle, pole);
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj) return true;
+        if (obj == null || getClass() != obj.getClass()) return false;
+        PolarCoor that = (PolarCoor) obj;
+        return Double.compare(that.radius, radius) == 0 &&
+               Double.compare(that.angle, angle) == 0 &&
+               Objects.equals(that.pole, pole);
+    }
+
+    @Override
+    public String toString() {
+        return "PolarCoor [radius=" + radius + ", angle=" + angle + ", pole=" + pole + ']';
+    }
+}
diff --git a/src/org/openstreetmap/josm/data/gpx/GpxData.java b/src/org/openstreetmap/josm/data/gpx/GpxData.java
index 7ba62f7..d023169 100644
--- a/src/org/openstreetmap/josm/data/gpx/GpxData.java
+++ b/src/org/openstreetmap/josm/data/gpx/GpxData.java
@@ -106,7 +106,7 @@ public class GpxData extends WithAttributes implements Data {
      * Merges data from another object.
      * @param other existing GPX data
      */
-    public void mergeFrom(GpxData other) {
+    public synchronized void mergeFrom(GpxData other) {
         if (storageFile == null && other.storageFile != null) {
             storageFile = other.storageFile;
         }
@@ -124,9 +124,9 @@ public class GpxData extends WithAttributes implements Data {
                 put(k, ent.getValue());
             }
         }
-        other.getTracks().forEach(this::addTrack);
-        other.getRoutes().forEach(this::addRoute);
-        other.getWaypoints().forEach(this::addWaypoint);
+        other.privateTracks.forEach(this::addTrack);
+        other.privateRoutes.forEach(this::addRoute);
+        other.privateWaypoints.forEach(this::addWaypoint);
         dataSources.addAll(other.dataSources);
         fireInvalidate();
     }
@@ -135,7 +135,7 @@ public class GpxData extends WithAttributes implements Data {
      * Get all tracks contained in this data set.
      * @return The tracks.
      */
-    public Collection<GpxTrack> getTracks() {
+    public synchronized Collection<GpxTrack> getTracks() {
         return Collections.unmodifiableCollection(privateTracks);
     }
 
@@ -144,7 +144,7 @@ public class GpxData extends WithAttributes implements Data {
      * @param track The new track
      * @since 12156
      */
-    public void addTrack(GpxTrack track) {
+    public synchronized void addTrack(GpxTrack track) {
         if (privateTracks.stream().anyMatch(t -> t == track)) {
             throw new IllegalArgumentException(MessageFormat.format("The track was already added to this data: {0}", track));
         }
@@ -158,7 +158,7 @@ public class GpxData extends WithAttributes implements Data {
      * @param track The old track
      * @since 12156
      */
-    public void removeTrack(GpxTrack track) {
+    public synchronized void removeTrack(GpxTrack track) {
         if (!privateTracks.removeIf(t -> t == track)) {
             throw new IllegalArgumentException(MessageFormat.format("The track was not in this data: {0}", track));
         }
@@ -171,7 +171,7 @@ public class GpxData extends WithAttributes implements Data {
      * @return The routes
      * @since 12156
      */
-    public Collection<GpxRoute> getRoutes() {
+    public synchronized Collection<GpxRoute> getRoutes() {
         return Collections.unmodifiableCollection(privateRoutes);
     }
 
@@ -180,7 +180,7 @@ public class GpxData extends WithAttributes implements Data {
      * @param route The new route
      * @since 12156
      */
-    public void addRoute(GpxRoute route) {
+    public synchronized void addRoute(GpxRoute route) {
         if (privateRoutes.stream().anyMatch(r -> r == route)) {
             throw new IllegalArgumentException(MessageFormat.format("The route was already added to this data: {0}", route));
         }
@@ -193,7 +193,7 @@ public class GpxData extends WithAttributes implements Data {
      * @param route The old route
      * @since 12156
      */
-    public void removeRoute(GpxRoute route) {
+    public synchronized void removeRoute(GpxRoute route) {
         if (!privateRoutes.removeIf(r -> r == route)) {
             throw new IllegalArgumentException(MessageFormat.format("The route was not in this data: {0}", route));
         }
@@ -205,7 +205,7 @@ public class GpxData extends WithAttributes implements Data {
      * @return The way points.
      * @since 12156
      */
-    public Collection<WayPoint> getWaypoints() {
+    public synchronized Collection<WayPoint> getWaypoints() {
         return Collections.unmodifiableCollection(privateWaypoints);
     }
 
@@ -214,7 +214,7 @@ public class GpxData extends WithAttributes implements Data {
      * @param waypoint The new waypoint
      * @since 12156
      */
-    public void addWaypoint(WayPoint waypoint) {
+    public synchronized void addWaypoint(WayPoint waypoint) {
         if (privateWaypoints.stream().anyMatch(w -> w == waypoint)) {
             throw new IllegalArgumentException(MessageFormat.format("The route was already added to this data: {0}", waypoint));
         }
@@ -227,7 +227,7 @@ public class GpxData extends WithAttributes implements Data {
      * @param waypoint The old waypoint
      * @since 12156
      */
-    public void removeWaypoint(WayPoint waypoint) {
+    public synchronized void removeWaypoint(WayPoint waypoint) {
         if (!privateWaypoints.removeIf(w -> w == waypoint)) {
             throw new IllegalArgumentException(MessageFormat.format("The route was not in this data: {0}", waypoint));
         }
@@ -238,7 +238,7 @@ public class GpxData extends WithAttributes implements Data {
      * Determines if this GPX data has one or more track points
      * @return {@code true} if this GPX data has track points, {@code false} otherwise
      */
-    public boolean hasTrackPoints() {
+    public synchronized boolean hasTrackPoints() {
         return getTrackPoints().findAny().isPresent();
     }
 
@@ -250,7 +250,7 @@ public class GpxData extends WithAttributes implements Data {
      * @see GpxTrackSegment#getWayPoints()
      * @since 12156
      */
-    public Stream<WayPoint> getTrackPoints() {
+    public synchronized Stream<WayPoint> getTrackPoints() {
         return getTracks().stream().flatMap(trk -> trk.getSegments().stream()).flatMap(trkseg -> trkseg.getWayPoints().stream());
     }
 
@@ -258,15 +258,15 @@ public class GpxData extends WithAttributes implements Data {
      * Determines if this GPX data has one or more route points
      * @return {@code true} if this GPX data has route points, {@code false} otherwise
      */
-    public boolean hasRoutePoints() {
-        return getRoutes().stream().anyMatch(rte -> !rte.routePoints.isEmpty());
+    public synchronized boolean hasRoutePoints() {
+        return privateRoutes.stream().anyMatch(rte -> !rte.routePoints.isEmpty());
     }
 
     /**
      * Determines if this GPX data is empty (i.e. does not contain any point)
      * @return {@code true} if this GPX data is empty, {@code false} otherwise
      */
-    public boolean isEmpty() {
+    public synchronized boolean isEmpty() {
         return !hasRoutePoints() && !hasTrackPoints() && waypoints.isEmpty();
     }
 
@@ -300,16 +300,16 @@ public class GpxData extends WithAttributes implements Data {
      * @see #getMetaBounds()
      * @see #dataSources
      */
-    public Bounds recalculateBounds() {
+    public synchronized Bounds recalculateBounds() {
         Bounds bounds = null;
-        for (WayPoint wpt : getWaypoints()) {
+        for (WayPoint wpt : privateWaypoints) {
             if (bounds == null) {
                 bounds = new Bounds(wpt.getCoor());
             } else {
                 bounds.extend(wpt.getCoor());
             }
         }
-        for (GpxRoute rte : getRoutes()) {
+        for (GpxRoute rte : privateRoutes) {
             for (WayPoint wpt : rte.routePoints) {
                 if (bounds == null) {
                     bounds = new Bounds(wpt.getCoor());
@@ -318,7 +318,7 @@ public class GpxData extends WithAttributes implements Data {
                 }
             }
         }
-        for (GpxTrack trk : getTracks()) {
+        for (GpxTrack trk : privateTracks) {
             Bounds trkBounds = trk.getBounds();
             if (trkBounds != null) {
                 if (bounds == null) {
@@ -335,8 +335,8 @@ public class GpxData extends WithAttributes implements Data {
      * calculates the sum of the lengths of all track segments
      * @return the length in meters
      */
-    public double length() {
-        return getTracks().stream().mapToDouble(GpxTrack::length).sum();
+    public synchronized double length() {
+        return privateTracks.stream().mapToDouble(GpxTrack::length).sum();
     }
 
     /**
@@ -361,7 +361,7 @@ public class GpxData extends WithAttributes implements Data {
     * works correctly @since 5815
      * @return minimum and maximum dates in array of 2 elements
     */
-    public Date[] getMinMaxTimeForAllTracks() {
+    public synchronized Date[] getMinMaxTimeForAllTracks() {
         double now = System.currentTimeMillis() / 1000.0;
         final DoubleSummaryStatistics statistics = tracks.stream()
                 .flatMap(trk -> trk.getSegments().stream())
@@ -383,7 +383,7 @@ public class GpxData extends WithAttributes implements Data {
      * @return the closest point on the track to p, which may be the first or last point if off the
      * end of a segment, or may be null if nothing close enough
      */
-    public WayPoint nearestPointOnTrack(EastNorth p, double tolerance) {
+    public synchronized WayPoint nearestPointOnTrack(EastNorth p, double tolerance) {
         /*
          * assume the coordinates of P are xp,yp, and those of a section of track between two
          * trackpoints are R=xr,yr and S=xs,ys. Let N be the projected point.
@@ -413,7 +413,7 @@ public class GpxData extends WithAttributes implements Data {
         double px = p.east();
         double py = p.north();
         double rx = 0.0, ry = 0.0, sx, sy, x, y;
-        for (GpxTrack track : getTracks()) {
+        for (GpxTrack track : privateTracks) {
             for (GpxTrackSegment seg : track.getSegments()) {
                 WayPoint r = null;
                 for (WayPoint wpSeg : seg.getWayPoints()) {
@@ -501,8 +501,8 @@ public class GpxData extends WithAttributes implements Data {
     /**
      * Resets the internal caches of east/north coordinates.
      */
-    public void resetEastNorthCache() {
-        getWaypoints().forEach(WayPoint::invalidateEastNorthCache);
+    public synchronized void resetEastNorthCache() {
+        privateWaypoints.forEach(WayPoint::invalidateEastNorthCache);
         getTrackPoints().forEach(WayPoint::invalidateEastNorthCache);
         for (GpxRoute route: getRoutes()) {
             if (route.routePoints == null) {
@@ -593,7 +593,7 @@ public class GpxData extends WithAttributes implements Data {
     }
 
     @Override
-    public int hashCode() {
+    public synchronized int hashCode() {
         final int prime = 31;
         int result = 1;
         result = prime * result + ((dataSources == null) ? 0 : dataSources.hashCode());
@@ -604,7 +604,7 @@ public class GpxData extends WithAttributes implements Data {
     }
 
     @Override
-    public boolean equals(Object obj) {
+    public synchronized boolean equals(Object obj) {
         if (this == obj)
             return true;
         if (obj == null)
diff --git a/src/org/openstreetmap/josm/data/imagery/TMSCachedTileLoader.java b/src/org/openstreetmap/josm/data/imagery/TMSCachedTileLoader.java
index 6bf73f8..430d6bc 100644
--- a/src/org/openstreetmap/josm/data/imagery/TMSCachedTileLoader.java
+++ b/src/org/openstreetmap/josm/data/imagery/TMSCachedTileLoader.java
@@ -126,6 +126,11 @@ public class TMSCachedTileLoader implements TileLoader, CachedTileLoader {
         }
     }
 
+    @Override
+    public boolean hasOutstandingTasks() {
+        return downloadExecutor.getTaskCount() > downloadExecutor.getCompletedTaskCount();
+    }
+
     /**
      * Sets the download executor that will be used to download tiles instead of default one.
      * You can use {@link #getNewThreadPoolExecutor} to create a new download executor with separate
diff --git a/src/org/openstreetmap/josm/data/imagery/WMTSTileSource.java b/src/org/openstreetmap/josm/data/imagery/WMTSTileSource.java
index ba79978..9608b5e 100644
--- a/src/org/openstreetmap/josm/data/imagery/WMTSTileSource.java
+++ b/src/org/openstreetmap/josm/data/imagery/WMTSTileSource.java
@@ -55,6 +55,7 @@ import org.openstreetmap.josm.data.projection.Projections;
 import org.openstreetmap.josm.gui.ExtendedDialog;
 import org.openstreetmap.josm.gui.layer.NativeScaleLayer.ScaleList;
 import org.openstreetmap.josm.io.CachedFile;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.CheckParameterUtil;
 import org.openstreetmap.josm.tools.GBC;
 import org.openstreetmap.josm.tools.Logging;
@@ -357,7 +358,7 @@ public class WMTSTileSource extends AbstractTMSTileSource implements TemplatedTi
      */
     private Collection<Layer> getCapabilities() throws IOException {
         try (CachedFile cf = new CachedFile(baseUrl); InputStream in = cf.setHttpHeaders(headers).
-                setMaxAge(7 * CachedFile.DAYS).
+                setMaxAge(Config.getPref().getLong("wmts.capabilities.cache.max_age", 7 * CachedFile.DAYS)).
                 setCachingStrategy(CachedFile.CachingStrategy.IfModifiedSince).
                 getInputStream()) {
             byte[] data = Utils.readBytesFromStream(in);
diff --git a/src/org/openstreetmap/josm/data/osm/BBox.java b/src/org/openstreetmap/josm/data/osm/BBox.java
index 8cd4b21..bf6c053 100644
--- a/src/org/openstreetmap/josm/data/osm/BBox.java
+++ b/src/org/openstreetmap/josm/data/osm/BBox.java
@@ -65,7 +65,20 @@ public class BBox {
     }
 
     /**
-     * Create minimal  BBox so that {@code this.bounds(ax,ay)} and {@code this.bounds(bx,by)} will both return true
+     * Creates bbox around the coordinate (x, y).
+     * Coordinate defines center of bbox, its edge will be 2*r.
+     *
+     * @param x X coordinate
+     * @param y Y coordinate
+     * @param r size
+     * @since 13140
+     */
+    public BBox(double x, double y, double r) {
+        this(x - r, y - r, x + r, y + r);
+    }
+
+    /**
+     * Create minimal BBox so that {@code this.bounds(ax,ay)} and {@code this.bounds(bx,by)} will both return true
      * @param ax left or right X value (-180 .. 180)
      * @param ay top or bottom Y value (-90 .. 90)
      * @param bx left or right X value (-180 .. 180)
diff --git a/src/org/openstreetmap/josm/data/osm/DataSet.java b/src/org/openstreetmap/josm/data/osm/DataSet.java
index a0e92c6..6775c2c 100644
--- a/src/org/openstreetmap/josm/data/osm/DataSet.java
+++ b/src/org/openstreetmap/josm/data/osm/DataSet.java
@@ -24,6 +24,7 @@ import java.util.function.Predicate;
 import java.util.stream.Stream;
 
 import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.data.APIDataSet.APIOperation;
 import org.openstreetmap.josm.data.Bounds;
 import org.openstreetmap.josm.data.Data;
 import org.openstreetmap.josm.data.DataSource;
@@ -1135,6 +1136,19 @@ public final class DataSet extends QuadBucketPrimitiveStore implements Data, Pro
     }
 
     /**
+     * Replies true if there is at least one primitive in this dataset which requires to be uploaded to server.
+     * @return true if there is at least one primitive in this dataset which requires to be uploaded to server
+     * @since 13161
+     */
+    public boolean requiresUploadToServer() {
+        for (OsmPrimitive p: allPrimitives) {
+            if (APIOperation.of(p) != null)
+                return true;
+        }
+        return false;
+    }
+
+    /**
      * Adds a new data set listener.
      * @param dsl The data set listener to add
      */
diff --git a/src/org/openstreetmap/josm/data/osm/DefaultNameFormatter.java b/src/org/openstreetmap/josm/data/osm/DefaultNameFormatter.java
index 3f4247f..81850a6 100644
--- a/src/org/openstreetmap/josm/data/osm/DefaultNameFormatter.java
+++ b/src/org/openstreetmap/josm/data/osm/DefaultNameFormatter.java
@@ -185,14 +185,14 @@ public class DefaultNameFormatter implements NameFormatter, HistoryNameFormatter
             } else {
                 preset.nameTemplate.appendText(name, node);
             }
-            if (node.getCoor() != null) {
-                name.append(" \u200E(").append(CoordinateFormatManager.getDefaultFormat().latToString(node)).append(", ")
+            if (node.isLatLonKnown() && Config.getPref().getBoolean("osm-primitives.showcoor")) {
+                name.append(" \u200E(")
+                    .append(CoordinateFormatManager.getDefaultFormat().latToString(node)).append(", ")
                     .append(CoordinateFormatManager.getDefaultFormat().lonToString(node)).append(')');
             }
         }
         decorateNameWithId(name, node);
 
-
         String result = name.toString();
         for (NameFormatterHook hook: formatHooks) {
             String hookResult = hook.checkFormat(node, result);
diff --git a/src/org/openstreetmap/josm/data/osm/FilterModel.java b/src/org/openstreetmap/josm/data/osm/FilterModel.java
index 694ef5e..a563488 100644
--- a/src/org/openstreetmap/josm/data/osm/FilterModel.java
+++ b/src/org/openstreetmap/josm/data/osm/FilterModel.java
@@ -20,7 +20,6 @@ import org.openstreetmap.josm.data.StructUtils;
 import org.openstreetmap.josm.data.osm.Filter.FilterPreferenceEntry;
 import org.openstreetmap.josm.data.osm.search.SearchParseError;
 import org.openstreetmap.josm.gui.MainApplication;
-import org.openstreetmap.josm.gui.layer.OsmDataLayer;
 import org.openstreetmap.josm.gui.widgets.OSDLabel;
 import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.Logging;
@@ -199,10 +198,7 @@ public class FilterModel {
     }
 
     private static void updateMap() {
-        OsmDataLayer editLayer = MainApplication.getLayerManager().getEditLayer();
-        if (editLayer != null) {
-            editLayer.invalidate();
-        }
+        MainApplication.getLayerManager().invalidateEditLayer();
     }
 
     /**
diff --git a/src/org/openstreetmap/josm/data/osm/IPrimitive.java b/src/org/openstreetmap/josm/data/osm/IPrimitive.java
index 76a5491..8b2c313 100644
--- a/src/org/openstreetmap/josm/data/osm/IPrimitive.java
+++ b/src/org/openstreetmap/josm/data/osm/IPrimitive.java
@@ -185,8 +185,8 @@ public interface IPrimitive extends Tagged, PrimitiveId {
     void setRawTimestamp(int timestamp);
 
     /**
-     * Determines if this primitive has no timestam information.
-     * @return {@code true} if this primitive has no timestam information
+     * Determines if this primitive has no timestamp information.
+     * @return {@code true} if this primitive has no timestamp information
      * @see #getTimestamp
      * @see #getRawTimestamp
      */
diff --git a/src/org/openstreetmap/josm/data/osm/OsmPrimitive.java b/src/org/openstreetmap/josm/data/osm/OsmPrimitive.java
index 0ea5094..1e6e24d 100644
--- a/src/org/openstreetmap/josm/data/osm/OsmPrimitive.java
+++ b/src/org/openstreetmap/josm/data/osm/OsmPrimitive.java
@@ -1226,6 +1226,7 @@ public abstract class OsmPrimitive extends AbstractPrimitive implements Comparab
         setChangesetId(data.getChangesetId());
         setDeleted(data.isDeleted());
         setModified(data.isModified());
+        setVisible(data.isVisible());
         setIncomplete(data.isIncomplete());
         version = data.getVersion();
     }
diff --git a/src/org/openstreetmap/josm/data/osm/User.java b/src/org/openstreetmap/josm/data/osm/User.java
index 3c23f97..e5c3f56 100644
--- a/src/org/openstreetmap/josm/data/osm/User.java
+++ b/src/org/openstreetmap/josm/data/osm/User.java
@@ -69,7 +69,9 @@ public final class User {
     public static synchronized User createOsmUser(long uid, String name) {
 
         if (lastUser != null && lastUser.getId() == uid) {
-            lastUser.setPreferredName(name);
+            if (name != null) {
+                lastUser.setPreferredName(name);
+            }
             return lastUser;
         }
 
@@ -158,9 +160,10 @@ public final class User {
      * Adds a user name to the list if it is not there, yet.
      *
      * @param name User name
+     * @throws NullPointerException if name is null
      */
     public void addName(String name) {
-        names.add(name);
+        names.add(Objects.requireNonNull(name, "name"));
     }
 
     /**
@@ -169,6 +172,7 @@ public final class User {
      * Rationale: A user can change its name multiple times and after reading various (outdated w.r.t. user name)
      * data files it is unclear which is the up-to-date user name.
      * @param name the preferred user name to set
+     * @throws NullPointerException if name is null
      */
     public void setPreferredName(String name) {
         if (names.size() == 1 && names.contains(name)) {
@@ -176,7 +180,7 @@ public final class User {
         }
         final Collection<String> allNames = new LinkedHashSet<>(names);
         names.clear();
-        names.add(name);
+        names.add(Objects.requireNonNull(name, "name"));
         names.addAll(allNames);
     }
 
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 a4337a7..24cbf28 100644
--- a/src/org/openstreetmap/josm/data/osm/visitor/paint/StyledMapRenderer.java
+++ b/src/org/openstreetmap/josm/data/osm/visitor/paint/StyledMapRenderer.java
@@ -427,6 +427,7 @@ public class StyledMapRenderer extends AbstractMapRenderer {
                     g.setStroke(new BasicStroke(2 * extent, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER, 4));
                     g.draw(area);
                     g.setClip(oldClip);
+                    g.setStroke(new BasicStroke());
                 }
             } else {
                 Image img = fillImage.getImage(disabled);
diff --git a/src/org/openstreetmap/josm/data/osm/visitor/paint/relations/MultipolygonCache.java b/src/org/openstreetmap/josm/data/osm/visitor/paint/relations/MultipolygonCache.java
index 9a37b10..2696098 100644
--- a/src/org/openstreetmap/josm/data/osm/visitor/paint/relations/MultipolygonCache.java
+++ b/src/org/openstreetmap/josm/data/osm/visitor/paint/relations/MultipolygonCache.java
@@ -42,13 +42,11 @@ public final class MultipolygonCache implements DataSetListener, LayerChangeList
 
     private static final MultipolygonCache INSTANCE = new MultipolygonCache();
 
-    private final Map<DataSet, Map<Relation, Multipolygon>> cache;
+    private final Map<DataSet, Map<Relation, Multipolygon>> cache = new ConcurrentHashMap<>(); // see ticket 11833
 
-    private final Collection<PolyData> selectedPolyData;
+    private final Collection<PolyData> selectedPolyData = new ArrayList<>();
 
     private MultipolygonCache() {
-        this.cache = new ConcurrentHashMap<>(); // see ticket 11833
-        this.selectedPolyData = new ArrayList<>();
         Main.addProjectionChangeListener(this);
         DataSet.addSelectionListener(this);
         MainApplication.getLayerManager().addLayerChangeListener(this);
@@ -91,9 +89,11 @@ public final class MultipolygonCache implements DataSetListener, LayerChangeList
             if (multipolygon == null || forceRefresh) {
                 multipolygon = new Multipolygon(r);
                 map2.put(r, multipolygon);
-                for (PolyData pd : multipolygon.getCombinedPolygons()) {
-                    if (pd.isSelected()) {
-                        selectedPolyData.add(pd);
+                synchronized (this) {
+                    for (PolyData pd : multipolygon.getCombinedPolygons()) {
+                        if (pd.isSelected()) {
+                            selectedPolyData.add(pd);
+                        }
                     }
                 }
             }
@@ -293,7 +293,7 @@ public final class MultipolygonCache implements DataSetListener, LayerChangeList
     }
 
     @Override
-    public void selectionChanged(Collection<? extends OsmPrimitive> newSelection) {
+    public synchronized void selectionChanged(Collection<? extends OsmPrimitive> newSelection) {
 
         for (Iterator<PolyData> it = selectedPolyData.iterator(); it.hasNext();) {
             it.next().setSelected(false);
diff --git a/src/org/openstreetmap/josm/data/projection/proj/TransverseMercator.java b/src/org/openstreetmap/josm/data/projection/proj/TransverseMercator.java
index b942bed..3dd9cea 100644
--- a/src/org/openstreetmap/josm/data/projection/proj/TransverseMercator.java
+++ b/src/org/openstreetmap/josm/data/projection/proj/TransverseMercator.java
@@ -4,8 +4,10 @@ package org.openstreetmap.josm.data.projection.proj;
 import static org.openstreetmap.josm.tools.I18n.tr;
 
 import org.openstreetmap.josm.data.Bounds;
+import org.openstreetmap.josm.data.coor.LatLon;
 import org.openstreetmap.josm.data.projection.ProjectionConfigurationException;
 import org.openstreetmap.josm.tools.CheckParameterUtil;
+import org.openstreetmap.josm.tools.Pair;
 import org.openstreetmap.josm.tools.Utils;
 
 /**
@@ -70,6 +72,14 @@ import org.openstreetmap.josm.tools.Utils;
  */
 public class TransverseMercator extends AbstractProj {
 
+    /** Earth emispheres **/
+    public enum Hemisphere {
+        /** North emisphere */
+        North,
+        /** South emisphere */
+        South
+    }
+
     /**
      * Contants used for the forward and inverse transform for the eliptical
      * case of the Transverse Mercator.
@@ -222,4 +232,15 @@ public class TransverseMercator extends AbstractProj {
     public Bounds getAlgorithmBounds() {
         return new Bounds(-89, -7, 89, 7, false);
     }
+
+    /**
+     * Determines the UTM zone of a given lat/lon.
+     * @param ll lat/lon to locate in the UTM grid.
+     * @return the UTM zone of {@code ll}
+     * @since 13167
+     */
+    public static Pair<Integer, Hemisphere> locateUtmZone(LatLon ll) {
+        return new Pair<>((int) Math.floor((ll.lon() + 180d) / 6d) + 1,
+                ll.lat() > 0 ? Hemisphere.North : Hemisphere.South);
+    }
 }
diff --git a/src/org/openstreetmap/josm/data/tagging/ac/AutoCompletionItem.java b/src/org/openstreetmap/josm/data/tagging/ac/AutoCompletionItem.java
index b2f2f30..a7ed7cb 100644
--- a/src/org/openstreetmap/josm/data/tagging/ac/AutoCompletionItem.java
+++ b/src/org/openstreetmap/josm/data/tagging/ac/AutoCompletionItem.java
@@ -21,7 +21,7 @@ public class AutoCompletionItem implements Comparable<AutoCompletionItem> {
     /** the priority of this item */
     private AutoCompletionPriority priority;
     /** the value of this item */
-    private String value;
+    private final String value;
 
     /**
      * Constructs a new {@code AutoCompletionItem} with the given value and priority.
@@ -78,10 +78,12 @@ public class AutoCompletionItem implements Comparable<AutoCompletionItem> {
      * 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");
-        this.value = value;
+        throw new UnsupportedOperationException("setValue() is no longer supported");
     }
 
     @Override
diff --git a/src/org/openstreetmap/josm/data/tagging/ac/AutoCompletionSet.java b/src/org/openstreetmap/josm/data/tagging/ac/AutoCompletionSet.java
index a29da97..bd99626 100644
--- a/src/org/openstreetmap/josm/data/tagging/ac/AutoCompletionSet.java
+++ b/src/org/openstreetmap/josm/data/tagging/ac/AutoCompletionSet.java
@@ -4,6 +4,7 @@ package org.openstreetmap.josm.data.tagging.ac;
 import java.util.Collection;
 import java.util.Objects;
 import java.util.Optional;
+import java.util.Set;
 import java.util.TreeSet;
 import java.util.stream.Collectors;
 
@@ -17,27 +18,51 @@ import java.util.stream.Collectors;
  */
 public class AutoCompletionSet extends TreeSet<AutoCompletionItem> {
 
+    // Keep a separate tree set of values for determining fast if a value is present
+    private final Set<String> values = new TreeSet<>();
+
     @Override
     public boolean add(AutoCompletionItem e) {
         // Is there already an item for the value?
-        Optional<AutoCompletionItem> result = stream().filter(i -> i.getValue().equals(e.getValue())).findFirst();
-        if (result.isPresent()) {
-            AutoCompletionItem item = result.get();
-            // yes: merge priorities
-            AutoCompletionPriority newPriority = item.getPriority().mergeWith(e.getPriority());
-            // if needed, remove/re-add the updated item to maintain set ordering
-            if (!item.getPriority().equals(newPriority)) {
-                remove(item);
-                item.setPriority(newPriority);
-                return add(item);
+        String value = e.getValue();
+        if (contains(value)) { // Fast
+            Optional<AutoCompletionItem> result = stream().filter(i -> i.getValue().equals(e.getValue())).findFirst(); // Slow
+            if (result.isPresent()) {
+                AutoCompletionItem item = result.get();
+                // yes: merge priorities
+                AutoCompletionPriority newPriority = item.getPriority().mergeWith(e.getPriority());
+                // if needed, remove/re-add the updated item to maintain set ordering
+                if (!item.getPriority().equals(newPriority)) {
+                    super.remove(item);
+                    item.setPriority(newPriority);
+                    return super.add(item);
+                } else {
+                    return false;
+                }
             } else {
-                return false;
+                // Should never happen if values is correctly synchronized with this set
+                throw new IllegalStateException(value);
             }
         } else {
+            values.add(value);
             return super.add(e);
         }
     }
 
+    @Override
+    public boolean remove(Object o) {
+        if (o instanceof AutoCompletionItem) {
+            values.remove(((AutoCompletionItem) o).getValue());
+        }
+        return super.remove(o);
+    }
+
+    @Override
+    public void clear() {
+        values.clear();
+        super.clear();
+    }
+
     /**
      * 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.
@@ -73,7 +98,7 @@ public class AutoCompletionSet extends TreeSet<AutoCompletionItem> {
      * @return true, if value is in the list; false, otherwise
      */
     public boolean contains(String value) {
-        return stream().anyMatch(i -> i.getValue().equals(value));
+        return values.contains(value);
     }
 
     /**
@@ -82,6 +107,6 @@ public class AutoCompletionSet extends TreeSet<AutoCompletionItem> {
      * @return {@code true} if an element was removed
      */
     public boolean remove(String key) {
-        return removeIf(i -> i.getValue().equals(key));
+        return values.remove(key) && removeIf(i -> i.getValue().equals(key));
     }
 }
diff --git a/src/org/openstreetmap/josm/data/validation/tests/OpeningHourTest.java b/src/org/openstreetmap/josm/data/validation/tests/OpeningHourTest.java
index b5b3a5c..cca5805 100644
--- a/src/org/openstreetmap/josm/data/validation/tests/OpeningHourTest.java
+++ b/src/org/openstreetmap/josm/data/validation/tests/OpeningHourTest.java
@@ -56,9 +56,13 @@ public class OpeningHourTest extends Test.TagTest {
                 // fake country/state to not get errors on holidays
                 ENGINE.eval("var nominatimJSON = {address: {state: 'Bayern', country_code: 'de'}};");
                 ENGINE.eval(
-                        "var oh = function (value, mode, locale) {" +
+                        "var oh = function (value, tag_key, mode, locale) {" +
                         " try {" +
-                        "    var r = new opening_hours(value, nominatimJSON, {mode: mode, locale: locale});" +
+                        "    var conf = {tag_key: tag_key, locale: locale};" +
+                        "    if (mode > -1) {" +
+                        "      conf.mode = mode;" +
+                        "    }" +
+                        "    var r = new opening_hours(value, nominatimJSON, conf);" +
                         "    r.getErrors = function() {return [];};" +
                         "    return r;" +
                         "  } catch (err) {" +
@@ -75,8 +79,19 @@ public class OpeningHourTest extends Test.TagTest {
         }
     }
 
-    enum CheckMode {
-        TIME_RANGE(0), POINTS_IN_TIME(1), BOTH(2);
+    /**
+     * In OSM, the syntax originally designed to describe opening hours, is now used to describe a few other things as well.
+     * Some of those other tags work with points in time instead of time ranges.
+     * To support this the mode can be specified.
+     * @since 13147
+     */
+    public enum CheckMode {
+        /** time ranges (opening_hours, lit, …) default */
+        TIME_RANGE(0),
+        /** points in time */
+        POINTS_IN_TIME(1),
+        /** both (time ranges and points in time, used by collection_times, service_times, …) */
+        BOTH(2);
         private final int code;
 
         CheckMode(int code) {
@@ -84,8 +99,21 @@ public class OpeningHourTest extends Test.TagTest {
         }
     }
 
-    protected Object parse(String value, CheckMode mode, String locale) throws ScriptException, NoSuchMethodException {
-        return ((Invocable) ENGINE).invokeFunction("oh", value, mode.code, locale);
+    /**
+     * Parses the opening hour syntax of the {@code value} given according to
+     * <a href="https://github.com/ypid/opening_hours.js">opening_hours.js</a> and returns an object on which
+     * methods can be called to extract information.
+     * @param value the opening hour value to be checked
+     * @param tagKey the OSM key (should be "opening_hours", "collection_times" or "service_times")
+     * @param mode whether to validate {@code value} as a time range, or points in time, or both. Can be null
+     * @param locale the locale code used for localizing messages
+     * @return The value returned by the underlying method. Usually a {@code jdk.nashorn.api.scripting.ScriptObjectMirror}
+     * @throws ScriptException if an error occurs during invocation of the underlying method
+     * @throws NoSuchMethodException if underlying method with given name or matching argument types cannot be found
+     * @since 13147
+     */
+    public Object parse(String value, String tagKey, CheckMode mode, String locale) throws ScriptException, NoSuchMethodException {
+        return ((Invocable) ENGINE).invokeFunction("oh", value, tagKey, mode != null ? mode.code : -1, locale);
     }
 
     @SuppressWarnings("unchecked")
@@ -176,11 +204,10 @@ public class OpeningHourTest extends Test.TagTest {
      * validation errors or an empty list. Null values result in an empty list.
      * @param key the OSM key (should be "opening_hours", "collection_times" or "service_times"). Used in error message
      * @param value the opening hour value to be checked.
-     * @param mode whether to validate {@code value} as a time range, or points in time, or both.
      * @return a list of {@link TestError} or an empty list
      */
-    public List<OpeningHoursTestError> checkOpeningHourSyntax(final String key, final String value, CheckMode mode) {
-        return checkOpeningHourSyntax(key, value, mode, false, LanguageInfo.getJOSMLocaleCode());
+    public List<OpeningHoursTestError> checkOpeningHourSyntax(final String key, final String value) {
+        return checkOpeningHourSyntax(key, value, null, false, LanguageInfo.getJOSMLocaleCode());
     }
 
     /**
@@ -189,7 +216,7 @@ public class OpeningHourTest extends Test.TagTest {
      * validation errors or an empty list. Null values result in an empty list.
      * @param key the OSM key (should be "opening_hours", "collection_times" or "service_times").
      * @param value the opening hour value to be checked.
-     * @param mode whether to validate {@code value} as a time range, or points in time, or both.
+     * @param mode whether to validate {@code value} as a time range, or points in time, or both. Can be null
      * @param ignoreOtherSeverity whether to ignore errors with {@link Severity#OTHER}.
      * @param locale the locale code used for localizing messages
      * @return a list of {@link TestError} or an empty list
@@ -201,7 +228,7 @@ public class OpeningHourTest extends Test.TagTest {
         }
         final List<OpeningHoursTestError> errors = new ArrayList<>();
         try {
-            final Object r = parse(value, mode, locale);
+            final Object r = parse(value, key, mode, locale);
             String prettifiedValue = null;
             try {
                 prettifiedValue = (String) ((Invocable) ENGINE).invokeMethod(r, "prettifyValue");
@@ -242,28 +269,16 @@ public class OpeningHourTest extends Test.TagTest {
         return key + " - " + msg;
     }
 
-    /**
-     * Checks for a correct usage of the opening hour syntax of the {@code value} given, in time range mode, according to
-     * <a href="https://github.com/ypid/opening_hours.js">opening_hours.js</a> and returns a list containing
-     * validation errors or an empty list. Null values result in an empty list.
-     * @param key the OSM key (should be "opening_hours", "collection_times" or "service_times"). Used in error message
-     * @param value the opening hour value to be checked.
-     * @return a list of {@link TestError} or an empty list
-     */
-    public List<OpeningHoursTestError> checkOpeningHourSyntax(final String key, final String value) {
-        return checkOpeningHourSyntax(key, value, "opening_hours".equals(key) ? CheckMode.TIME_RANGE : CheckMode.BOTH);
-    }
-
-    protected void check(final OsmPrimitive p, final String key, CheckMode mode) {
-        for (OpeningHoursTestError e : checkOpeningHourSyntax(key, p.get(key), mode)) {
+    protected void check(final OsmPrimitive p, final String key) {
+        for (OpeningHoursTestError e : checkOpeningHourSyntax(key, p.get(key))) {
             errors.add(e.getTestError(p, key));
         }
     }
 
     @Override
     public void check(final OsmPrimitive p) {
-        check(p, "opening_hours", CheckMode.TIME_RANGE);
-        check(p, "collection_times", CheckMode.BOTH);
-        check(p, "service_times", CheckMode.BOTH);
+        check(p, "opening_hours");
+        check(p, "collection_times");
+        check(p, "service_times");
     }
 }
diff --git a/src/org/openstreetmap/josm/data/validation/tests/OverlappingWays.java b/src/org/openstreetmap/josm/data/validation/tests/OverlappingWays.java
index e115cd8..d228dc0 100644
--- a/src/org/openstreetmap/josm/data/validation/tests/OverlappingWays.java
+++ b/src/org/openstreetmap/josm/data/validation/tests/OverlappingWays.java
@@ -50,7 +50,9 @@ public class OverlappingWays extends Test {
     protected static final int DUPLICATE_WAY_SEGMENT = 121;
 
     protected static final ListProperty IGNORED_KEYS = new ListProperty(
-            "overlapping-ways.ignored-keys", Arrays.asList("barrier", "building", "historic:building", "man_made"));
+            "overlapping-ways.ignored-keys", Arrays.asList(
+                    "barrier", "building", "historic:building", "demolished:building",
+                    "removed:building", "disused:building", "abandoned:building", "proposed:building", "man_made"));
 
     /** Constructor */
     public OverlappingWays() {
diff --git a/src/org/openstreetmap/josm/data/validation/tests/UnclosedWays.java b/src/org/openstreetmap/josm/data/validation/tests/UnclosedWays.java
index 3043bc4..e44a5b4 100644
--- a/src/org/openstreetmap/josm/data/validation/tests/UnclosedWays.java
+++ b/src/org/openstreetmap/josm/data/validation/tests/UnclosedWays.java
@@ -135,7 +135,7 @@ public class UnclosedWays extends Test {
     private static final UnclosedWaysCheck[] checks = {
         // CHECKSTYLE.OFF: SingleSpaceSeparator
         new UnclosedWaysCheck(1101, "natural",   marktr("natural type {0}"),
-                new HashSet<>(Arrays.asList("cave", "coastline", "cliff", "tree_row", "ridge", "valley", "arete", "gorge"))),
+                new HashSet<>(Arrays.asList("cave", "coastline", "cliff", "tree_row", "ridge", "valley", "arete", "gorge", "gully"))),
         new UnclosedWaysCheck(1102, "landuse",   marktr("landuse type {0}")),
         new UnclosedWaysCheck(1103, "amenities", marktr("amenities type {0}")),
         new UnclosedWaysCheck(1104, "sport",     marktr("sport type {0}"),
diff --git a/src/org/openstreetmap/josm/gui/ExtendedDialog.java b/src/org/openstreetmap/josm/gui/ExtendedDialog.java
index ab27bef..8523c20 100644
--- a/src/org/openstreetmap/josm/gui/ExtendedDialog.java
+++ b/src/org/openstreetmap/josm/gui/ExtendedDialog.java
@@ -551,7 +551,7 @@ public class ExtendedDialog extends JDialog implements IExtendedDialog {
         HelpAction() {
             putValue(SHORT_DESCRIPTION, tr("Show help information"));
             putValue(NAME, tr("Help"));
-            putValue(SMALL_ICON, ImageProvider.get("help"));
+            new ImageProvider("help").getResource().attachImageIcon(this, true);
             setEnabled(!Main.isOffline(OnlineResource.JOSM_WEBSITE));
         }
 
diff --git a/src/org/openstreetmap/josm/gui/MainMenu.java b/src/org/openstreetmap/josm/gui/MainMenu.java
index e746a27..ac37276 100644
--- a/src/org/openstreetmap/josm/gui/MainMenu.java
+++ b/src/org/openstreetmap/josm/gui/MainMenu.java
@@ -730,12 +730,6 @@ public class MainMenu extends JMenuBar {
             fullscreenToggleAction.addButtonModel(fullscreen.getModel());
         }
 
-        // -- dialogs panel toggle action
-        final JCheckBoxMenuItem dialogsToggle = new JCheckBoxMenuItem(dialogsToggleAction);
-        dialogsToggle.setAccelerator(dialogsToggleAction.getShortcut().getKeyStroke());
-        dialogsToggleAction.addButtonModel(dialogsToggle.getModel());
-        viewMenu.add(dialogsToggle);
-
         add(viewMenu, jumpToAct, true);
         viewMenu.addSeparator();
         add(viewMenu, info);
@@ -749,6 +743,12 @@ public class MainMenu extends JMenuBar {
         viewMenu.add(new PreferenceToggleAction(tr("Edit toolbar"),
                 tr("Toggles the visibility of the edit toolbar (i.e., the vertical tool)"),
                 "sidetoolbar.visible", true).getCheckbox());
+        // -- dialogs panel toggle action
+        final JCheckBoxMenuItem dialogsToggle = new JCheckBoxMenuItem(dialogsToggleAction);
+        dialogsToggle.setAccelerator(dialogsToggleAction.getShortcut().getKeyStroke());
+        dialogsToggleAction.addButtonModel(dialogsToggle.getModel());
+        viewMenu.add(dialogsToggle);
+        viewMenu.addSeparator();
         // -- expert mode toggle action
         final JCheckBoxMenuItem expertItem = new JCheckBoxMenuItem(ExpertToggleAction.getInstance());
         viewMenu.add(expertItem);
diff --git a/src/org/openstreetmap/josm/gui/MapStatus.java b/src/org/openstreetmap/josm/gui/MapStatus.java
index 03d373c..a6bce6c 100644
--- a/src/org/openstreetmap/josm/gui/MapStatus.java
+++ b/src/org/openstreetmap/josm/gui/MapStatus.java
@@ -12,8 +12,11 @@ import java.awt.Cursor;
 import java.awt.Dimension;
 import java.awt.EventQueue;
 import java.awt.Font;
+import java.awt.GraphicsEnvironment;
 import java.awt.GridBagLayout;
+import java.awt.MouseInfo;
 import java.awt.Point;
+import java.awt.PointerInfo;
 import java.awt.SystemColor;
 import java.awt.Toolkit;
 import java.awt.event.AWTEventListener;
@@ -32,6 +35,7 @@ import java.text.DecimalFormat;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.ConcurrentModificationException;
+import java.util.Iterator;
 import java.util.List;
 import java.util.Objects;
 import java.util.TreeSet;
@@ -55,8 +59,7 @@ import javax.swing.event.PopupMenuEvent;
 import javax.swing.event.PopupMenuListener;
 
 import org.openstreetmap.josm.Main;
-import org.openstreetmap.josm.spi.preferences.PreferenceChangeEvent;
-import org.openstreetmap.josm.spi.preferences.PreferenceChangedListener;
+import org.openstreetmap.josm.data.SelectionChangedListener;
 import org.openstreetmap.josm.data.SystemOfMeasurement;
 import org.openstreetmap.josm.data.SystemOfMeasurement.SoMChangeListener;
 import org.openstreetmap.josm.data.coor.LatLon;
@@ -66,12 +69,16 @@ import org.openstreetmap.josm.data.coor.conversion.ICoordinateFormat;
 import org.openstreetmap.josm.data.coor.conversion.ProjectedCoordinateFormat;
 import org.openstreetmap.josm.data.osm.DataSet;
 import org.openstreetmap.josm.data.osm.DefaultNameFormatter;
+import org.openstreetmap.josm.data.osm.Node;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.data.osm.Way;
+import org.openstreetmap.josm.data.osm.event.DatasetEventManager.FireMode;
+import org.openstreetmap.josm.data.osm.event.SelectionEventManager;
 import org.openstreetmap.josm.data.preferences.AbstractProperty;
 import org.openstreetmap.josm.data.preferences.BooleanProperty;
 import org.openstreetmap.josm.data.preferences.DoubleProperty;
 import org.openstreetmap.josm.data.preferences.NamedColorProperty;
+import org.openstreetmap.josm.gui.NavigatableComponent.ZoomChangeListener;
 import org.openstreetmap.josm.gui.help.Helpful;
 import org.openstreetmap.josm.gui.progress.swing.PleaseWaitProgressMonitor;
 import org.openstreetmap.josm.gui.progress.swing.PleaseWaitProgressMonitor.ProgressMonitorDialog;
@@ -79,11 +86,14 @@ import org.openstreetmap.josm.gui.util.GuiHelper;
 import org.openstreetmap.josm.gui.widgets.ImageLabel;
 import org.openstreetmap.josm.gui.widgets.JosmTextField;
 import org.openstreetmap.josm.spi.preferences.Config;
+import org.openstreetmap.josm.spi.preferences.PreferenceChangeEvent;
+import org.openstreetmap.josm.spi.preferences.PreferenceChangedListener;
 import org.openstreetmap.josm.tools.ColorHelper;
 import org.openstreetmap.josm.tools.Destroyable;
 import org.openstreetmap.josm.tools.GBC;
 import org.openstreetmap.josm.tools.ImageProvider;
 import org.openstreetmap.josm.tools.Logging;
+import org.openstreetmap.josm.tools.SubclassFilteredCollection;
 import org.openstreetmap.josm.tools.Utils;
 
 /**
@@ -99,7 +109,8 @@ import org.openstreetmap.josm.tools.Utils;
  *
  * @author imi
  */
-public final class MapStatus extends JPanel implements Helpful, Destroyable, PreferenceChangedListener, SoMChangeListener {
+public final class MapStatus extends JPanel implements
+    Helpful, Destroyable, PreferenceChangedListener, SoMChangeListener, SelectionChangedListener, 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();
@@ -874,27 +885,9 @@ public final class MapStatus extends JPanel implements Helpful, Destroyable, Pre
             public void mouseMoved(MouseEvent e) {
                 if (mv.getCenter() == null)
                     return;
-                // Do not update the view if ctrl is pressed.
-                if ((e.getModifiersEx() & MouseEvent.CTRL_DOWN_MASK) == 0) {
-                    ICoordinateFormat mCord = CoordinateFormatManager.getDefaultFormat();
-                    LatLon p = mv.getLatLon(e.getX(), e.getY());
-                    latText.setText(mCord.latToString(p));
-                    lonText.setText(mCord.lonToString(p));
-                    if (Objects.equals(previousCoordinateFormat, mCord)) {
-                        // do nothing
-                    } else if (ProjectedCoordinateFormat.INSTANCE.equals(mCord)) {
-                        latText.setIcon("northing");
-                        lonText.setIcon("easting");
-                        latText.setToolTipText(tr("The northing at the mouse pointer."));
-                        lonText.setToolTipText(tr("The easting at the mouse pointer."));
-                        previousCoordinateFormat = mCord;
-                    } else {
-                        latText.setIcon("lat");
-                        lonText.setIcon("lon");
-                        latText.setToolTipText(tr("The geographic latitude at the mouse pointer."));
-                        lonText.setToolTipText(tr("The geographic longitude at the mouse pointer."));
-                        previousCoordinateFormat = mCord;
-                    }
+                // Do not update the view if ctrl or right button is pressed.
+                if ((e.getModifiersEx() & (MouseEvent.CTRL_DOWN_MASK | MouseEvent.BUTTON3_DOWN_MASK)) == 0) {
+                    updateLatLonText(e.getX(), e.getY());
                 }
             }
         });
@@ -930,6 +923,7 @@ public final class MapStatus extends JPanel implements Helpful, Destroyable, Pre
         }
 
         SystemOfMeasurement.addSoMChangeListener(this);
+        NavigatableComponent.addZoomChangeListener(this);
 
         latText.addMouseListener(jumpToOnLeftClick);
         lonText.addMouseListener(jumpToOnLeftClick);
@@ -946,6 +940,7 @@ public final class MapStatus extends JPanel implements Helpful, Destroyable, Pre
         progressBar.addMouseListener(new ShowMonitorDialogMouseAdapter());
 
         Config.getPref().addPreferenceChangeListener(this);
+        SelectionEventManager.getInstance().addSelectionListener(this, FireMode.IN_EDT_CONSOLIDATED);
 
         mvComponentAdapter = new ComponentAdapter() {
             @Override
@@ -962,6 +957,28 @@ public final class MapStatus extends JPanel implements Helpful, Destroyable, Pre
         thread.start();
     }
 
+    private void updateLatLonText(int x, int y) {
+        LatLon p = mv.getLatLon(x, y);
+        ICoordinateFormat mCord = CoordinateFormatManager.getDefaultFormat();
+        latText.setText(mCord.latToString(p));
+        lonText.setText(mCord.lonToString(p));
+        if (Objects.equals(previousCoordinateFormat, mCord)) {
+            // do nothing
+        } else if (ProjectedCoordinateFormat.INSTANCE.equals(mCord)) {
+            latText.setIcon("northing");
+            lonText.setIcon("easting");
+            latText.setToolTipText(tr("The northing at the mouse pointer."));
+            lonText.setToolTipText(tr("The easting at the mouse pointer."));
+            previousCoordinateFormat = mCord;
+        } else {
+            latText.setIcon("lat");
+            lonText.setIcon("lon");
+            latText.setToolTipText(tr("The geographic latitude at the mouse pointer."));
+            lonText.setToolTipText(tr("The geographic longitude at the mouse pointer."));
+            previousCoordinateFormat = mCord;
+        }
+    }
+
     @Override
     public void systemOfMeasurementChanged(String oldSoM, String newSoM) {
         setDist(distValue);
@@ -1106,7 +1123,9 @@ public final class MapStatus extends JPanel implements Helpful, Destroyable, Pre
     @Override
     public void destroy() {
         SystemOfMeasurement.removeSoMChangeListener(this);
+        NavigatableComponent.removeZoomChangeListener(this);
         Config.getPref().removePreferenceChangeListener(this);
+        SelectionEventManager.getInstance().removeSelectionListener(this);
         mv.removeComponentListener(mvComponentAdapter);
 
         // MapFrame gets destroyed when the last layer is removed, but the status line background
@@ -1152,4 +1171,34 @@ public final class MapStatus extends JPanel implements Helpful, Destroyable, Pre
         int w = parent != null ? parent.getWidth() : 800;
         return Math.min(80, 20 + Math.max(0, w-1280) * 60 / (1920-1280));
     }
+
+    @Override
+    public void selectionChanged(Collection<? extends OsmPrimitive> newSelection) {
+        if (newSelection.size() == 2) {
+            Iterator<? extends OsmPrimitive> it = newSelection.iterator();
+            OsmPrimitive n1 = it.next();
+            OsmPrimitive n2 = it.next();
+            // show distance between two selected nodes with coordinates
+            if (n1 instanceof Node && n2 instanceof Node) {
+                LatLon c1 = ((Node) n1).getCoor();
+                LatLon c2 = ((Node) n2).getCoor();
+                if (c1 != null && c2 != null) {
+                    setDist(c1.greatCircleDistance(c2));
+                    return;
+                }
+            }
+        }
+        setDist(new SubclassFilteredCollection<OsmPrimitive, Way>(newSelection, Way.class::isInstance));
+    }
+
+    @Override
+    public void zoomChanged() {
+        if (!GraphicsEnvironment.isHeadless()) {
+            PointerInfo pointerInfo = MouseInfo.getPointerInfo();
+            if (pointerInfo != null) {
+                Point mp = pointerInfo.getLocation();
+                updateLatLonText(mp.x, mp.y);
+            }
+        }
+    }
 }
diff --git a/src/org/openstreetmap/josm/gui/MapView.java b/src/org/openstreetmap/josm/gui/MapView.java
index 3d8e9b3..8454eec 100644
--- a/src/org/openstreetmap/josm/gui/MapView.java
+++ b/src/org/openstreetmap/josm/gui/MapView.java
@@ -40,8 +40,6 @@ import javax.swing.SwingUtilities;
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.actions.mapmode.MapMode;
 import org.openstreetmap.josm.data.Bounds;
-import org.openstreetmap.josm.spi.preferences.PreferenceChangeEvent;
-import org.openstreetmap.josm.spi.preferences.PreferenceChangedListener;
 import org.openstreetmap.josm.data.ProjectionBounds;
 import org.openstreetmap.josm.data.ViewportData;
 import org.openstreetmap.josm.data.coor.EastNorth;
@@ -76,6 +74,8 @@ import org.openstreetmap.josm.gui.mappaint.MapPaintStyles;
 import org.openstreetmap.josm.gui.mappaint.MapPaintStyles.MapPaintSylesUpdateListener;
 import org.openstreetmap.josm.io.audio.AudioPlayer;
 import org.openstreetmap.josm.spi.preferences.Config;
+import org.openstreetmap.josm.spi.preferences.PreferenceChangeEvent;
+import org.openstreetmap.josm.spi.preferences.PreferenceChangedListener;
 import org.openstreetmap.josm.tools.JosmRuntimeException;
 import org.openstreetmap.josm.tools.Logging;
 import org.openstreetmap.josm.tools.Shortcut;
@@ -927,4 +927,13 @@ LayerManager.LayerChangeListener, MainLayerManager.ActiveLayerChangeListener {
     public void scheduleZoomTo(ViewportData viewportData) {
         initialViewport = viewportData;
     }
+
+    /**
+     * Returns the internal {@link MapMover}.
+     * @return the internal {@code MapMover}
+     * @since 13126
+     */
+    public final MapMover getMapMover() {
+        return mapMover;
+    }
 }
diff --git a/src/org/openstreetmap/josm/gui/bbox/TileSelectionBBoxChooser.java b/src/org/openstreetmap/josm/gui/bbox/TileSelectionBBoxChooser.java
index 161096f..bc1d86d 100644
--- a/src/org/openstreetmap/josm/gui/bbox/TileSelectionBBoxChooser.java
+++ b/src/org/openstreetmap/josm/gui/bbox/TileSelectionBBoxChooser.java
@@ -505,7 +505,7 @@ public class TileSelectionBBoxChooser extends JPanel implements BBoxChooser {
 
         class ApplyTileAddressAction extends AbstractAction {
             ApplyTileAddressAction() {
-                putValue(SMALL_ICON, ImageProvider.get("apply"));
+                new ImageProvider("apply").getResource().attachImageIcon(this, true);
                 putValue(SHORT_DESCRIPTION, tr("Apply the tile address"));
             }
 
diff --git a/src/org/openstreetmap/josm/gui/bugreport/JosmUpdatePanel.java b/src/org/openstreetmap/josm/gui/bugreport/JosmUpdatePanel.java
index 83b538d..a96eba8 100644
--- a/src/org/openstreetmap/josm/gui/bugreport/JosmUpdatePanel.java
+++ b/src/org/openstreetmap/josm/gui/bugreport/JosmUpdatePanel.java
@@ -60,9 +60,8 @@ public class JosmUpdatePanel extends JPanel {
     }
 
     private static int getTestedVersion() {
-        try {
-            CachedFile testedVersion = new CachedFile(Main.getJOSMWebsite() + "/tested");
-            testedVersion.setMaxAge(60 * 15); // 15 Minutes
+        try (CachedFile testedVersion = new CachedFile(Main.getJOSMWebsite() + "/tested")) {
+            testedVersion.setMaxAge(60L * 15); // 15 Minutes
             String testedString = new String(testedVersion.getByteContent(), StandardCharsets.ISO_8859_1);
             return Integer.parseInt(testedString.trim());
         } catch (NumberFormatException | IOException e) {
diff --git a/src/org/openstreetmap/josm/gui/conflict/pair/AbstractListMerger.java b/src/org/openstreetmap/josm/gui/conflict/pair/AbstractListMerger.java
index 006a94b..607d4c6 100644
--- a/src/org/openstreetmap/josm/gui/conflict/pair/AbstractListMerger.java
+++ b/src/org/openstreetmap/josm/gui/conflict/pair/AbstractListMerger.java
@@ -17,7 +17,6 @@ import java.util.Collection;
 
 import javax.swing.AbstractAction;
 import javax.swing.Action;
-import javax.swing.ImageIcon;
 import javax.swing.JButton;
 import javax.swing.JCheckBox;
 import javax.swing.JLabel;
@@ -41,6 +40,7 @@ import org.openstreetmap.josm.gui.util.AdjustmentSynchronizer;
 import org.openstreetmap.josm.gui.widgets.JosmComboBox;
 import org.openstreetmap.josm.gui.widgets.OsmPrimitivesTable;
 import org.openstreetmap.josm.tools.ImageProvider;
+import org.openstreetmap.josm.tools.ImageResource;
 
 /**
  * A UI component for resolving conflicts in two lists of entries of type T.
@@ -421,10 +421,11 @@ implements PropertyChangeListener, ChangeListener, IConflictResolver {
     abstract static class CopyAction extends AbstractAction implements ListSelectionListener {
 
         protected CopyAction(String iconName, String actionName, String shortDescription) {
-            ImageIcon icon = ImageProvider.get("dialogs/conflict", iconName);
-            putValue(Action.SMALL_ICON, icon);
+            ImageResource icon = new ImageProvider("dialogs/conflict", iconName).getResource();
             if (icon == null) {
                 putValue(Action.NAME, actionName);
+            } else {
+                icon.attachImageIcon(this, true);
             }
             putValue(Action.SHORT_DESCRIPTION, shortDescription);
             setEnabled(false);
@@ -626,8 +627,7 @@ implements PropertyChangeListener, ChangeListener, IConflictResolver {
     class CopyAllLeft extends AbstractAction implements ChangeListener, PropertyChangeListener {
 
         CopyAllLeft() {
-            ImageIcon icon = ImageProvider.get("dialogs/conflict", "useallleft");
-            putValue(Action.SMALL_ICON, icon);
+            new ImageProvider("dialogs/conflict", "useallleft").getResource().attachImageIcon(this, true);
             putValue(Action.SHORT_DESCRIPTION, tr("Copy all my elements to the target"));
         }
 
@@ -655,8 +655,7 @@ implements PropertyChangeListener, ChangeListener, IConflictResolver {
     class CopyAllRight extends AbstractAction implements ChangeListener, PropertyChangeListener {
 
         CopyAllRight() {
-            ImageIcon icon = ImageProvider.get("dialogs/conflict", "useallright");
-            putValue(Action.SMALL_ICON, icon);
+            new ImageProvider("dialogs/conflict", "useallright").getResource().attachImageIcon(this, true);
             putValue(Action.SHORT_DESCRIPTION, tr("Copy all their elements to the target"));
         }
 
@@ -684,10 +683,11 @@ implements PropertyChangeListener, ChangeListener, IConflictResolver {
     class MoveUpMergedAction extends AbstractAction implements ListSelectionListener {
 
         MoveUpMergedAction() {
-            ImageIcon icon = ImageProvider.get("dialogs/conflict", "moveup");
-            putValue(Action.SMALL_ICON, icon);
+            ImageResource icon = new ImageProvider("dialogs/conflict", "moveup").getResource();
             if (icon == null) {
                 putValue(Action.NAME, tr("Up"));
+            } else {
+                icon.attachImageIcon(this, true);
             }
             putValue(Action.SHORT_DESCRIPTION, tr("Move up the selected entries by one position."));
             setEnabled(false);
@@ -716,10 +716,11 @@ implements PropertyChangeListener, ChangeListener, IConflictResolver {
     class MoveDownMergedAction extends AbstractAction implements ListSelectionListener {
 
         MoveDownMergedAction() {
-            ImageIcon icon = ImageProvider.get("dialogs/conflict", "movedown");
-            putValue(Action.SMALL_ICON, icon);
+            ImageResource icon = new ImageProvider("dialogs/conflict", "movedown").getResource();
             if (icon == null) {
                 putValue(Action.NAME, tr("Down"));
+            } else {
+                icon.attachImageIcon(this, true);
             }
             putValue(Action.SHORT_DESCRIPTION, tr("Move down the selected entries by one position."));
             setEnabled(false);
@@ -748,10 +749,11 @@ implements PropertyChangeListener, ChangeListener, IConflictResolver {
     class RemoveMergedAction extends AbstractAction implements ListSelectionListener {
 
         RemoveMergedAction() {
-            ImageIcon icon = ImageProvider.get("dialogs/conflict", "remove");
-            putValue(Action.SMALL_ICON, icon);
+            ImageResource icon = new ImageProvider("dialogs/conflict", "remove").getResource();
             if (icon == null) {
                 putValue(Action.NAME, tr("Remove"));
+            } else {
+                icon.attachImageIcon(this, true);
             }
             putValue(Action.SHORT_DESCRIPTION, tr("Remove the selected entries from the list of merged elements."));
             setEnabled(false);
diff --git a/src/org/openstreetmap/josm/gui/conflict/pair/properties/PropertiesMerger.java b/src/org/openstreetmap/josm/gui/conflict/pair/properties/PropertiesMerger.java
index 49d554d..467c843 100644
--- a/src/org/openstreetmap/josm/gui/conflict/pair/properties/PropertiesMerger.java
+++ b/src/org/openstreetmap/josm/gui/conflict/pair/properties/PropertiesMerger.java
@@ -345,7 +345,7 @@ public class PropertiesMerger extends AbstractMergePanel implements ChangeListen
 
     class KeepMyCoordinatesAction extends AbstractAction implements ChangeListener {
         KeepMyCoordinatesAction() {
-            putValue(Action.SMALL_ICON, ImageProvider.get("dialogs/conflict", "tagkeepmine"));
+            new ImageProvider("dialogs/conflict", "tagkeepmine").getResource().attachImageIcon(this, true);
             putValue(Action.SHORT_DESCRIPTION, tr("Keep my coordinates"));
         }
 
@@ -362,7 +362,7 @@ public class PropertiesMerger extends AbstractMergePanel implements ChangeListen
 
     class KeepTheirCoordinatesAction extends AbstractAction implements ChangeListener {
         KeepTheirCoordinatesAction() {
-            putValue(Action.SMALL_ICON, ImageProvider.get("dialogs/conflict", "tagkeeptheir"));
+            new ImageProvider("dialogs/conflict", "tagkeeptheir").getResource().attachImageIcon(this, true);
             putValue(Action.SHORT_DESCRIPTION, tr("Keep their coordinates"));
         }
 
@@ -379,7 +379,7 @@ public class PropertiesMerger extends AbstractMergePanel implements ChangeListen
 
     class UndecideCoordinateConflictAction extends AbstractAction implements ChangeListener {
         UndecideCoordinateConflictAction() {
-            putValue(Action.SMALL_ICON, ImageProvider.get("dialogs/conflict", "tagundecide"));
+            new ImageProvider("dialogs/conflict", "tagundecide").getResource().attachImageIcon(this, true);
             putValue(Action.SHORT_DESCRIPTION, tr("Undecide conflict between different coordinates"));
         }
 
@@ -396,7 +396,7 @@ public class PropertiesMerger extends AbstractMergePanel implements ChangeListen
 
     class KeepMyDeletedStateAction extends AbstractAction implements ChangeListener {
         KeepMyDeletedStateAction() {
-            putValue(Action.SMALL_ICON, ImageProvider.get("dialogs/conflict", "tagkeepmine"));
+            new ImageProvider("dialogs/conflict", "tagkeepmine").getResource().attachImageIcon(this, true);
             putValue(Action.SHORT_DESCRIPTION, tr("Keep my deleted state"));
         }
 
@@ -413,7 +413,7 @@ public class PropertiesMerger extends AbstractMergePanel implements ChangeListen
 
     class KeepTheirDeletedStateAction extends AbstractAction implements ChangeListener {
         KeepTheirDeletedStateAction() {
-            putValue(Action.SMALL_ICON, ImageProvider.get("dialogs/conflict", "tagkeeptheir"));
+            new ImageProvider("dialogs/conflict", "tagkeeptheir").getResource().attachImageIcon(this, true);
             putValue(Action.SHORT_DESCRIPTION, tr("Keep their deleted state"));
         }
 
@@ -430,7 +430,7 @@ public class PropertiesMerger extends AbstractMergePanel implements ChangeListen
 
     class UndecideDeletedStateConflictAction extends AbstractAction implements ChangeListener {
         UndecideDeletedStateConflictAction() {
-            putValue(Action.SMALL_ICON, ImageProvider.get("dialogs/conflict", "tagundecide"));
+            new ImageProvider("dialogs/conflict", "tagundecide").getResource().attachImageIcon(this, true);
             putValue(Action.SHORT_DESCRIPTION, tr("Undecide conflict between deleted state"));
         }
 
diff --git a/src/org/openstreetmap/josm/gui/conflict/pair/tags/TagMerger.java b/src/org/openstreetmap/josm/gui/conflict/pair/tags/TagMerger.java
index e2d1721..c93ce9a 100644
--- a/src/org/openstreetmap/josm/gui/conflict/pair/tags/TagMerger.java
+++ b/src/org/openstreetmap/josm/gui/conflict/pair/tags/TagMerger.java
@@ -16,7 +16,6 @@ import java.util.Set;
 
 import javax.swing.AbstractAction;
 import javax.swing.Action;
-import javax.swing.ImageIcon;
 import javax.swing.JButton;
 import javax.swing.JComponent;
 import javax.swing.JScrollPane;
@@ -32,6 +31,7 @@ import org.openstreetmap.josm.gui.conflict.pair.MergeDecisionType;
 import org.openstreetmap.josm.gui.tagging.TagTableColumnModelBuilder;
 import org.openstreetmap.josm.tools.GBC;
 import org.openstreetmap.josm.tools.ImageProvider;
+import org.openstreetmap.josm.tools.ImageResource;
 
 /**
  * UI component for resolving conflicts in the tag sets of two {@link OsmPrimitive}s.
@@ -179,9 +179,9 @@ public class TagMerger extends AbstractMergePanel implements IConflictResolver {
      */
     class KeepMineAction extends AbstractAction implements ListSelectionListener {
         KeepMineAction() {
-            ImageIcon icon = ImageProvider.get("dialogs/conflict", "tagkeepmine");
+            ImageResource icon = new ImageProvider("dialogs/conflict", "tagkeepmine").getResource();
             if (icon != null) {
-                putValue(Action.SMALL_ICON, icon);
+                icon.attachImageIcon(this, true);
                 putValue(Action.NAME, "");
             } else {
                 putValue(Action.NAME, ">");
@@ -211,9 +211,9 @@ public class TagMerger extends AbstractMergePanel implements IConflictResolver {
      */
     class KeepTheirAction extends AbstractAction implements ListSelectionListener {
         KeepTheirAction() {
-            ImageIcon icon = ImageProvider.get("dialogs/conflict", "tagkeeptheir");
+            ImageResource icon = new ImageProvider("dialogs/conflict", "tagkeeptheir").getResource();
             if (icon != null) {
-                putValue(Action.SMALL_ICON, icon);
+                icon.attachImageIcon(this, true);
                 putValue(Action.NAME, "");
             } else {
                 putValue(Action.NAME, ">");
@@ -309,9 +309,9 @@ public class TagMerger extends AbstractMergePanel implements IConflictResolver {
     class UndecideAction extends AbstractAction implements ListSelectionListener {
 
         UndecideAction() {
-            ImageIcon icon = ImageProvider.get("dialogs/conflict", "tagundecide");
+            ImageResource icon = new ImageProvider("dialogs/conflict", "tagundecide").getResource();
             if (icon != null) {
-                putValue(Action.SMALL_ICON, icon);
+                icon.attachImageIcon(this, true);
                 putValue(Action.NAME, "");
             } else {
                 putValue(Action.NAME, tr("Undecide"));
diff --git a/src/org/openstreetmap/josm/gui/dialogs/FilterDialog.java b/src/org/openstreetmap/josm/gui/dialogs/FilterDialog.java
index 0948042..90dd899 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/FilterDialog.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/FilterDialog.java
@@ -13,6 +13,7 @@ import java.util.Arrays;
 import java.util.List;
 
 import javax.swing.AbstractAction;
+import javax.swing.DefaultCellEditor;
 import javax.swing.JCheckBox;
 import javax.swing.JTable;
 import javax.swing.ListSelectionModel;
@@ -45,6 +46,7 @@ import org.openstreetmap.josm.gui.MapFrame.MapModeChangeListener;
 import org.openstreetmap.josm.gui.SideButton;
 import org.openstreetmap.josm.gui.util.MultikeyActionsHandler;
 import org.openstreetmap.josm.gui.util.MultikeyShortcutAction;
+import org.openstreetmap.josm.gui.widgets.DisableShortcutsOnFocusGainedTextField;
 import org.openstreetmap.josm.tools.ImageProvider;
 import org.openstreetmap.josm.tools.InputMapUtils;
 import org.openstreetmap.josm.tools.Shortcut;
@@ -88,7 +90,7 @@ public class FilterDialog extends ToggleDialog implements DataSetListener, MapMo
         DatasetEventManager.getInstance().removeDatasetListener(this);
         MapFrame.removeMapModeChangeListener(this);
         filterModel.model.clearFilterFlags();
-        MainApplication.getMap().mapView.repaint();
+        MainApplication.getLayerManager().invalidateEditLayer();
     }
 
     private static final Shortcut ENABLE_FILTER_SHORTCUT
@@ -113,6 +115,7 @@ public class FilterDialog extends ToggleDialog implements DataSetListener, MapMo
     protected void build() {
         userTable = new UserTable(filterModel);
 
+        userTable.putClientProperty("terminateEditOnFocusLost", Boolean.TRUE);
         userTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
 
         userTable.getColumnModel().getColumn(0).setMaxWidth(1);
@@ -127,6 +130,7 @@ public class FilterDialog extends ToggleDialog implements DataSetListener, MapMo
 
         userTable.setDefaultRenderer(Boolean.class, new BooleanRenderer());
         userTable.setDefaultRenderer(String.class, new StringRenderer());
+        userTable.setDefaultEditor(String.class, new DefaultCellEditor(new DisableShortcutsOnFocusGainedTextField()));
 
         SideButton addButton = new SideButton(new AbstractAction() {
             {
diff --git a/src/org/openstreetmap/josm/gui/dialogs/InspectPrimitiveDataText.java b/src/org/openstreetmap/josm/gui/dialogs/InspectPrimitiveDataText.java
index bebeae0..7378022 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/InspectPrimitiveDataText.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/InspectPrimitiveDataText.java
@@ -19,7 +19,10 @@ import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.data.osm.Relation;
 import org.openstreetmap.josm.data.osm.RelationMember;
 import org.openstreetmap.josm.data.osm.Way;
+import org.openstreetmap.josm.data.projection.proj.TransverseMercator;
+import org.openstreetmap.josm.data.projection.proj.TransverseMercator.Hemisphere;
 import org.openstreetmap.josm.tools.Geometry;
+import org.openstreetmap.josm.tools.Pair;
 import org.openstreetmap.josm.tools.Utils;
 import org.openstreetmap.josm.tools.date.DateUtils;
 
@@ -211,9 +214,13 @@ public class InspectPrimitiveDataText {
             add(tr("Coordinates: "),
                     Double.toString(n.lat()), ", ",
                     Double.toString(n.lon()));
+            EastNorth en = n.getEastNorth();
             add(tr("Coordinates (projected): "),
-                    Double.toString(n.getEastNorth().east()), ", ",
-                    Double.toString(n.getEastNorth().north()));
+                    Double.toString(en.east()), ", ",
+                    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));
         }
     }
 
diff --git a/src/org/openstreetmap/josm/gui/dialogs/LayerListPopup.java b/src/org/openstreetmap/josm/gui/dialogs/LayerListPopup.java
index a8330ef..3b73f99 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/LayerListPopup.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/LayerListPopup.java
@@ -43,7 +43,8 @@ public class LayerListPopup extends JPopupMenu {
          * @param layer The layer
          */
         public InfoAction(Layer layer) {
-            super(tr("Info"), ImageProvider.get("info"));
+            super(tr("Info"));
+            new ImageProvider("info").getResource().attachImageIcon(this, true);
             putValue("help", ht("/Action/LayerInfo"));
             this.layer = layer;
         }
diff --git a/src/org/openstreetmap/josm/gui/dialogs/MenuItemSearchDialog.java b/src/org/openstreetmap/josm/gui/dialogs/MenuItemSearchDialog.java
index 0c1400d..438f424 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/MenuItemSearchDialog.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/MenuItemSearchDialog.java
@@ -26,12 +26,12 @@ import org.openstreetmap.josm.tools.Shortcut;
  */
 public final class MenuItemSearchDialog extends ExtendedDialog {
 
-    private final Selector selector;
+    private final MenuItemSelector selector;
     private static final MenuItemSearchDialog INSTANCE = new MenuItemSearchDialog(MainApplication.getMenu());
 
     private MenuItemSearchDialog(MainMenu menu) {
         super(Main.parent, tr("Search menu items"), tr("Select"), tr("Cancel"));
-        this.selector = new Selector(menu);
+        this.selector = new MenuItemSelector(menu);
         this.selector.setDblClickListener(e -> buttonAction(0, null));
         setContent(selector, false);
         setPreferredSize(new Dimension(600, 300));
@@ -62,11 +62,11 @@ public final class MenuItemSearchDialog extends ExtendedDialog {
         }
     }
 
-    private static class Selector extends SearchTextResultListPanel<JMenuItem> {
+    private static class MenuItemSelector extends SearchTextResultListPanel<JMenuItem> {
 
         private final MainMenu menu;
 
-        Selector(MainMenu menu) {
+        MenuItemSelector(MainMenu menu) {
             super();
             this.menu = menu;
             lsResult.setCellRenderer(new CellRenderer());
@@ -102,6 +102,7 @@ public final class MenuItemSearchDialog extends ExtendedDialog {
                     .map(JosmAction::getShortcut)
                     .map(Shortcut::getKeyStroke)
                     .ifPresent(item::setAccelerator);
+            item.setArmed(isSelected);
             if (isSelected) {
                 item.setBackground(list.getSelectionBackground());
                 item.setForeground(list.getSelectionForeground());
@@ -119,7 +120,7 @@ public final class MenuItemSearchDialog extends ExtendedDialog {
     public static class Action extends JosmAction {
 
         // CHECKSTYLE.OFF: LineLength
-        /** Action shortcut (ctrl / space by default */
+        /** Action shortcut (ctrl / space by default), made public in order to be used from {@code GettingStarted} page. */
         public static final Shortcut SHORTCUT = Shortcut.registerShortcut("help:search-items", "Search menu items", KeyEvent.VK_SPACE, Shortcut.CTRL);
         // CHECKSTYLE.ON: LineLength
 
diff --git a/src/org/openstreetmap/josm/gui/dialogs/SelectionListDialog.java b/src/org/openstreetmap/josm/gui/dialogs/SelectionListDialog.java
index 3d7f78e..f284fa7 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/SelectionListDialog.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/SelectionListDialog.java
@@ -18,7 +18,6 @@ import java.util.Collection;
 import java.util.Collections;
 import java.util.Comparator;
 import java.util.HashSet;
-import java.util.Iterator;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.Set;
@@ -43,7 +42,6 @@ import org.openstreetmap.josm.actions.relation.DownloadSelectedIncompleteMembers
 import org.openstreetmap.josm.actions.relation.EditRelationAction;
 import org.openstreetmap.josm.actions.relation.SelectInRelationListAction;
 import org.openstreetmap.josm.data.SelectionChangedListener;
-import org.openstreetmap.josm.data.coor.LatLon;
 import org.openstreetmap.josm.data.osm.DataSet;
 import org.openstreetmap.josm.data.osm.DefaultNameFormatter;
 import org.openstreetmap.josm.data.osm.Node;
@@ -66,7 +64,6 @@ import org.openstreetmap.josm.data.osm.event.WayNodesChangedEvent;
 import org.openstreetmap.josm.data.osm.search.SearchSetting;
 import org.openstreetmap.josm.data.osm.visitor.BoundingXYVisitor;
 import org.openstreetmap.josm.gui.MainApplication;
-import org.openstreetmap.josm.gui.MapFrame;
 import org.openstreetmap.josm.gui.OsmPrimitivRenderer;
 import org.openstreetmap.josm.gui.PopupMenuHandler;
 import org.openstreetmap.josm.gui.SideButton;
@@ -84,7 +81,6 @@ import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.ImageProvider;
 import org.openstreetmap.josm.tools.InputMapUtils;
 import org.openstreetmap.josm.tools.Shortcut;
-import org.openstreetmap.josm.tools.SubclassFilteredCollection;
 import org.openstreetmap.josm.tools.Utils;
 import org.openstreetmap.josm.tools.bugreport.BugReport;
 
@@ -617,23 +613,6 @@ public class SelectionListDialog extends ToggleDialog {
                     fireContentsChanged(this, 0, getSize());
                     if (selection != null) {
                         remember(selection);
-                        MapFrame map = MainApplication.getMap();
-                        if (selection.size() == 2) {
-                            Iterator<? extends OsmPrimitive> it = selection.iterator();
-                            OsmPrimitive n1 = it.next();
-                            OsmPrimitive n2 = it.next();
-                            // show distance between two selected nodes with coordinates
-                            if (n1 instanceof Node && n2 instanceof Node) {
-                                LatLon c1 = ((Node) n1).getCoor();
-                                LatLon c2 = ((Node) n2).getCoor();
-                                if (c1 != null && c2 != null) {
-                                    map.statusLine.setDist(c1.greatCircleDistance(c2));
-                                    return;
-                                }
-                            }
-                        }
-                        map.statusLine.setDist(
-                                new SubclassFilteredCollection<OsmPrimitive, Way>(selection, Way.class::isInstance));
                     }
                 }
             });
@@ -694,7 +673,7 @@ public class SelectionListDialog extends ToggleDialog {
         }
 
         /* ------------------------------------------------------------------------ */
-        /* interface SelectionChangeListener                                        */
+        /* interface SelectionChangedListener                                       */
         /* ------------------------------------------------------------------------ */
         @Override
         public void selectionChanged(Collection<? extends OsmPrimitive> newSelection) {
diff --git a/src/org/openstreetmap/josm/gui/dialogs/ValidatorDialog.java b/src/org/openstreetmap/josm/gui/dialogs/ValidatorDialog.java
index 20f91f7..30a4fdb 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/ValidatorDialog.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/ValidatorDialog.java
@@ -44,12 +44,10 @@ import org.openstreetmap.josm.data.validation.OsmValidator;
 import org.openstreetmap.josm.data.validation.TestError;
 import org.openstreetmap.josm.data.validation.ValidatorVisitor;
 import org.openstreetmap.josm.gui.MainApplication;
-import org.openstreetmap.josm.gui.MapFrame;
 import org.openstreetmap.josm.gui.PleaseWaitRunnable;
 import org.openstreetmap.josm.gui.PopupMenuHandler;
 import org.openstreetmap.josm.gui.SideButton;
 import org.openstreetmap.josm.gui.dialogs.validator.ValidatorTreePanel;
-import org.openstreetmap.josm.gui.layer.Layer;
 import org.openstreetmap.josm.gui.layer.MainLayerManager.ActiveLayerChangeEvent;
 import org.openstreetmap.josm.gui.layer.MainLayerManager.ActiveLayerChangeListener;
 import org.openstreetmap.josm.gui.layer.OsmDataLayer;
@@ -319,7 +317,7 @@ public class ValidatorDialog extends ToggleDialog implements SelectionChangedLis
         if (changed) {
             tree.resetErrors();
             OsmValidator.saveIgnoredErrors();
-            MainApplication.getLayerManager().getLayersOfType(ValidatorLayer.class).forEach(Layer::invalidate);
+            invalidateValidatorLayers();
         }
     }
 
@@ -476,6 +474,11 @@ public class ValidatorDialog extends ToggleDialog implements SelectionChangedLis
 
         @Override
         public void mouseClicked(MouseEvent e) {
+            TreePath selPath = tree.getPathForLocation(e.getX(), e.getY());
+            if (selPath == null) {
+                tree.clearSelection();
+            }
+
             fixButton.setEnabled(false);
             if (ignoreButton != null) {
                 ignoreButton.setEnabled(false);
@@ -500,7 +503,8 @@ public class ValidatorDialog extends ToggleDialog implements SelectionChangedLis
             }
         }
 
-        @Override public void launch(MouseEvent e) {
+        @Override
+        public void launch(MouseEvent e) {
             TreePath selPath = tree.getPathForLocation(e.getX(), e.getY());
             if (selPath == null)
                 return;
@@ -509,7 +513,6 @@ public class ValidatorDialog extends ToggleDialog implements SelectionChangedLis
                 return;
             super.launch(e);
         }
-
     }
 
     /**
@@ -528,10 +531,7 @@ public class ValidatorDialog extends ToggleDialog implements SelectionChangedLis
             boolean hasFixes = setSelection(sel, true);
             fixButton.setEnabled(hasFixes);
             popupMenuHandler.setPrimitives(sel);
-            MapFrame map = MainApplication.getMap();
-            if (map != null) {
-                map.repaint();
-            }
+            invalidateValidatorLayers();
         }
     }
 
@@ -647,7 +647,7 @@ public class ValidatorDialog extends ToggleDialog implements SelectionChangedLis
                 monitor.subTask(tr("Updating map ..."));
                 SwingUtilities.invokeAndWait(() -> {
                     MainApplication.undoRedo.afterAdd();
-                    MainApplication.getLayerManager().getLayersOfType(ValidatorLayer.class).forEach(ValidatorLayer::invalidate);
+                    invalidateValidatorLayers();
                     tree.resetErrors();
                 });
             } catch (InterruptedException | InvocationTargetException e) {
@@ -658,4 +658,8 @@ public class ValidatorDialog extends ToggleDialog implements SelectionChangedLis
             }
         }
     }
+
+    private static void invalidateValidatorLayers() {
+        MainApplication.getLayerManager().getLayersOfType(ValidatorLayer.class).forEach(ValidatorLayer::invalidate);
+    }
 }
diff --git a/src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetContentPanel.java b/src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetContentPanel.java
index 9ec237e..b0c320a 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetContentPanel.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetContentPanel.java
@@ -294,7 +294,7 @@ public class ChangesetContentPanel extends JPanel implements PropertyChangeListe
 
         DownloadObjectAction() {
             putValue(NAME, tr("Download objects"));
-            putValue(SMALL_ICON, ImageProvider.get("downloadprimitive"));
+            new ImageProvider("downloadprimitive").getResource().attachImageIcon(this, true);
             putValue(SHORT_DESCRIPTION, tr("Download the current version of the selected objects"));
             updateEnabledState();
         }
diff --git a/src/org/openstreetmap/josm/gui/dialogs/layer/DuplicateAction.java b/src/org/openstreetmap/josm/gui/dialogs/layer/DuplicateAction.java
index 91febce..f5490f7 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/layer/DuplicateAction.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/layer/DuplicateAction.java
@@ -44,7 +44,7 @@ public final class DuplicateAction extends AbstractAction implements IEnabledSta
     public DuplicateAction(LayerListModel model) {
         this.model = model;
         putValue(NAME, tr("Duplicate"));
-        putValue(SMALL_ICON, ImageProvider.get("dialogs", "duplicatelayer"));
+        new ImageProvider("dialogs", "duplicatelayer").getResource().attachImageIcon(this, true);
         putValue(SHORT_DESCRIPTION, tr("Duplicate this layer"));
         putValue("help", HelpUtil.ht("/Dialog/LayerList#DuplicateLayer"));
         updateEnabledState();
diff --git a/src/org/openstreetmap/josm/gui/dialogs/layer/ShowHideLayerAction.java b/src/org/openstreetmap/josm/gui/dialogs/layer/ShowHideLayerAction.java
index 40ac08b..635c277 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/layer/ShowHideLayerAction.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/layer/ShowHideLayerAction.java
@@ -38,7 +38,7 @@ public final class ShowHideLayerAction extends AbstractAction implements IEnable
     public ShowHideLayerAction(LayerListModel model) {
         this.model = model;
         putValue(NAME, tr("Show/hide"));
-        putValue(SMALL_ICON, ImageProvider.get("dialogs", "showhide"));
+        new ImageProvider("dialogs", "showhide").getResource().attachImageIcon(this, true);
         putValue(SHORT_DESCRIPTION, tr("Toggle visible state of the selected layer."));
         putValue("help", HelpUtil.ht("/Dialog/LayerList#ShowHideLayer"));
         multikeyShortcut = Shortcut.registerShortcut("core_multikey:showHideLayer", tr("Multikey: {0}",
diff --git a/src/org/openstreetmap/josm/gui/dialogs/properties/PropertiesDialog.java b/src/org/openstreetmap/josm/gui/dialogs/properties/PropertiesDialog.java
index bcacba4..c3de4ea 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/properties/PropertiesDialog.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/properties/PropertiesDialog.java
@@ -62,7 +62,6 @@ import org.openstreetmap.josm.actions.relation.SelectRelationAction;
 import org.openstreetmap.josm.command.ChangeCommand;
 import org.openstreetmap.josm.command.ChangePropertyCommand;
 import org.openstreetmap.josm.command.Command;
-import org.openstreetmap.josm.spi.preferences.PreferenceChangedListener;
 import org.openstreetmap.josm.data.SelectionChangedListener;
 import org.openstreetmap.josm.data.osm.DefaultNameFormatter;
 import org.openstreetmap.josm.data.osm.IRelation;
@@ -100,6 +99,7 @@ import org.openstreetmap.josm.gui.widgets.DisableShortcutsOnFocusGainedTextField
 import org.openstreetmap.josm.gui.widgets.JosmTextField;
 import org.openstreetmap.josm.gui.widgets.PopupMenuLauncher;
 import org.openstreetmap.josm.spi.preferences.Config;
+import org.openstreetmap.josm.spi.preferences.PreferenceChangedListener;
 import org.openstreetmap.josm.tools.AlphanumComparator;
 import org.openstreetmap.josm.tools.GBC;
 import org.openstreetmap.josm.tools.HttpClient;
@@ -1125,7 +1125,7 @@ implements SelectionChangedListener, ActiveLayerChangeListener, DataSetListenerA
         HelpAction() {
             putValue(NAME, tr("Go to OSM wiki for tag help"));
             putValue(SHORT_DESCRIPTION, tr("Launch browser with wiki help for selected object"));
-            putValue(SMALL_ICON, ImageProvider.get("dialogs", "search"));
+            new ImageProvider("dialogs", "search").getResource().attachImageIcon(this, true);
             putValue(ACCELERATOR_KEY, getKeyStroke());
         }
 
diff --git a/src/org/openstreetmap/josm/gui/dialogs/properties/TagEditHelper.java b/src/org/openstreetmap/josm/gui/dialogs/properties/TagEditHelper.java
index 9947851..110407f 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/properties/TagEditHelper.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/properties/TagEditHelper.java
@@ -634,13 +634,13 @@ public class TagEditHelper {
            FocusAdapter focus = new FocusAdapter() {
                @Override
                public void focusGained(FocusEvent e) {
-                   String key = keys.getEditor().getItem().toString();
-
-                   List<AutoCompletionItem> valueList = autocomplete.getTagValues(getAutocompletionKeys(key), comparator);
                    Logging.trace("Focus gained by {0}, e={1}", values, e);
-                   values.setPossibleAcItems(valueList);
-                   values.getEditor().selectAll();
-                   objKey = key;
+                   String key = keys.getEditor().getItem().toString();
+                   if (!Objects.equals(key, objKey)) {
+                       values.setPossibleAcItems(autocomplete.getTagValues(getAutocompletionKeys(key), comparator));
+                       values.getEditor().selectAll();
+                       objKey = key;
+                   }
                }
            };
            editor.addFocusListener(focus);
diff --git a/src/org/openstreetmap/josm/gui/dialogs/relation/ChildRelationBrowser.java b/src/org/openstreetmap/josm/gui/dialogs/relation/ChildRelationBrowser.java
index 347da55..25ec2d1 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/relation/ChildRelationBrowser.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/relation/ChildRelationBrowser.java
@@ -176,7 +176,7 @@ public class ChildRelationBrowser extends JPanel {
     class EditAction extends AbstractAction implements TreeSelectionListener {
         EditAction() {
             putValue(SHORT_DESCRIPTION, tr("Edit the relation the currently selected relation member refers to."));
-            putValue(SMALL_ICON, ImageProvider.get("dialogs", "edit"));
+            new ImageProvider("dialogs", "edit").getResource().attachImageIcon(this, true);
             putValue(NAME, tr("Edit"));
             refreshEnabled();
         }
@@ -221,7 +221,7 @@ public class ChildRelationBrowser extends JPanel {
     class DownloadAllChildRelationsAction extends AbstractAction {
         DownloadAllChildRelationsAction() {
             putValue(SHORT_DESCRIPTION, tr("Download all child relations (recursively)"));
-            putValue(SMALL_ICON, ImageProvider.get("download"));
+            new ImageProvider("download").getResource().attachImageIcon(this, true);
             putValue(NAME, tr("Download All Children"));
         }
 
@@ -244,8 +244,7 @@ public class ChildRelationBrowser extends JPanel {
         DownloadSelectedAction() {
             putValue(SHORT_DESCRIPTION, tr("Download selected relations"));
             // FIXME: replace with better icon
-            //
-            putValue(SMALL_ICON, ImageProvider.get("download"));
+            new ImageProvider("download").getResource().attachImageIcon(this, true);
             putValue(NAME, tr("Download Selected Children"));
             updateEnabledState();
         }
diff --git a/src/org/openstreetmap/josm/gui/dialogs/relation/actions/AddSelectedAfterSelection.java b/src/org/openstreetmap/josm/gui/dialogs/relation/actions/AddSelectedAfterSelection.java
index 69ad906..ca62de2 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/relation/actions/AddSelectedAfterSelection.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/relation/actions/AddSelectedAfterSelection.java
@@ -27,7 +27,7 @@ public class AddSelectedAfterSelection extends AddFromSelectionAction {
     public AddSelectedAfterSelection(MemberTableModel memberTableModel, SelectionTableModel selectionTableModel, IRelationEditor editor) {
         super(null, memberTableModel, null, selectionTableModel, null, null, editor);
         putValue(SHORT_DESCRIPTION, tr("Add all objects selected in the current dataset after the last selected member"));
-        putValue(SMALL_ICON, ImageProvider.get("dialogs/conflict", "copyaftercurrentright"));
+        new ImageProvider("dialogs/conflict", "copyaftercurrentright").getResource().attachImageIcon(this, true);
         updateEnabledState();
     }
 
diff --git a/src/org/openstreetmap/josm/gui/dialogs/relation/actions/AddSelectedAtEndAction.java b/src/org/openstreetmap/josm/gui/dialogs/relation/actions/AddSelectedAtEndAction.java
index f4f35cc..5e7443f 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/relation/actions/AddSelectedAtEndAction.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/relation/actions/AddSelectedAtEndAction.java
@@ -27,7 +27,7 @@ public class AddSelectedAtEndAction extends AddFromSelectionAction {
     public AddSelectedAtEndAction(MemberTableModel memberTableModel, SelectionTableModel selectionTableModel, IRelationEditor editor) {
         super(null, memberTableModel, null, selectionTableModel, null, null, editor);
         putValue(SHORT_DESCRIPTION, tr("Add all objects selected in the current dataset after the last member"));
-        putValue(SMALL_ICON, ImageProvider.get("dialogs/conflict", "copyendright"));
+        new ImageProvider("dialogs/conflict", "copyendright").getResource().attachImageIcon(this, true);
         updateEnabledState();
     }
 
diff --git a/src/org/openstreetmap/josm/gui/dialogs/relation/actions/AddSelectedAtStartAction.java b/src/org/openstreetmap/josm/gui/dialogs/relation/actions/AddSelectedAtStartAction.java
index 6c62483..7b61f32 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/relation/actions/AddSelectedAtStartAction.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/relation/actions/AddSelectedAtStartAction.java
@@ -27,7 +27,7 @@ public class AddSelectedAtStartAction extends AddFromSelectionAction {
     public AddSelectedAtStartAction(MemberTableModel memberTableModel, SelectionTableModel selectionTableModel, IRelationEditor editor) {
         super(null, memberTableModel, null, selectionTableModel, null, null, editor);
         putValue(SHORT_DESCRIPTION, tr("Add all objects selected in the current dataset before the first member"));
-        putValue(SMALL_ICON, ImageProvider.get("dialogs/conflict", "copystartright"));
+        new ImageProvider("dialogs/conflict", "copystartright").getResource().attachImageIcon(this, true);
         updateEnabledState();
     }
 
diff --git a/src/org/openstreetmap/josm/gui/dialogs/relation/actions/AddSelectedBeforeSelection.java b/src/org/openstreetmap/josm/gui/dialogs/relation/actions/AddSelectedBeforeSelection.java
index 12bf414..e32ad3c 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/relation/actions/AddSelectedBeforeSelection.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/relation/actions/AddSelectedBeforeSelection.java
@@ -27,7 +27,7 @@ public class AddSelectedBeforeSelection extends AddFromSelectionAction {
     public AddSelectedBeforeSelection(MemberTableModel memberTableModel, SelectionTableModel selectionTableModel, IRelationEditor editor) {
         super(null, memberTableModel, null, selectionTableModel, null, null, editor);
         putValue(SHORT_DESCRIPTION, tr("Add all objects selected in the current dataset before the first selected member"));
-        putValue(SMALL_ICON, ImageProvider.get("dialogs/conflict", "copybeforecurrentright"));
+        new ImageProvider("dialogs/conflict", "copybeforecurrentright").getResource().attachImageIcon(this, true);
         updateEnabledState();
     }
 
diff --git a/src/org/openstreetmap/josm/gui/dialogs/relation/actions/ApplyAction.java b/src/org/openstreetmap/josm/gui/dialogs/relation/actions/ApplyAction.java
index 052cf46..90945ed 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/relation/actions/ApplyAction.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/relation/actions/ApplyAction.java
@@ -34,7 +34,7 @@ public class ApplyAction extends SavingAction implements PropertyChangeListener
             IRelationEditor editor) {
         super(memberTable, memberTableModel, tagModel, layer, editor, null);
         putValue(SHORT_DESCRIPTION, tr("Apply the current updates"));
-        putValue(SMALL_ICON, ImageProvider.get("save"));
+        new ImageProvider("save").getResource().attachImageIcon(this, true);
         putValue(NAME, tr("Apply"));
         updateEnabledState();
         memberTableModel.addTableModelListener(this);
diff --git a/src/org/openstreetmap/josm/gui/dialogs/relation/actions/DeleteCurrentRelationAction.java b/src/org/openstreetmap/josm/gui/dialogs/relation/actions/DeleteCurrentRelationAction.java
index 7b5974d..40f761b 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/relation/actions/DeleteCurrentRelationAction.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/relation/actions/DeleteCurrentRelationAction.java
@@ -28,7 +28,7 @@ public class DeleteCurrentRelationAction extends AbstractRelationEditorAction im
     public DeleteCurrentRelationAction(OsmDataLayer layer, IRelationEditor editor) {
         super(null, null, null, layer, editor);
         putValue(SHORT_DESCRIPTION, tr("Delete the currently edited relation"));
-        putValue(SMALL_ICON, ImageProvider.get("dialogs", "delete"));
+        new ImageProvider("dialogs", "delete").getResource().attachImageIcon(this, true);
         putValue(NAME, tr("Delete"));
         updateEnabledState();
     }
diff --git a/src/org/openstreetmap/josm/gui/dialogs/relation/actions/DownloadIncompleteMembersAction.java b/src/org/openstreetmap/josm/gui/dialogs/relation/actions/DownloadIncompleteMembersAction.java
index d3bc74a..58df058 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/relation/actions/DownloadIncompleteMembersAction.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/relation/actions/DownloadIncompleteMembersAction.java
@@ -39,7 +39,7 @@ public class DownloadIncompleteMembersAction extends AbstractRelationEditorActio
             KeyEvent.VK_HOME, Shortcut.ALT);
         sc.setAccelerator(this);
         putValue(SHORT_DESCRIPTION, Main.platform.makeTooltip(tr("Download all incomplete members"), sc));
-        putValue(SMALL_ICON, ImageProvider.get("dialogs/relation", "downloadincomplete"));
+        new ImageProvider("dialogs/relation", "downloadincomplete").getResource().attachImageIcon(this, true);
         putValue(NAME, tr("Download Members"));
         updateEnabledState();
     }
diff --git a/src/org/openstreetmap/josm/gui/dialogs/relation/actions/DownloadSelectedIncompleteMembersAction.java b/src/org/openstreetmap/josm/gui/dialogs/relation/actions/DownloadSelectedIncompleteMembersAction.java
index 019985f..654e402 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/relation/actions/DownloadSelectedIncompleteMembersAction.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/relation/actions/DownloadSelectedIncompleteMembersAction.java
@@ -34,7 +34,7 @@ public class DownloadSelectedIncompleteMembersAction extends AbstractRelationEdi
             OsmDataLayer layer, IRelationEditor editor) {
         super(memberTable, memberTableModel, actionMapKey, layer, editor);
         putValue(SHORT_DESCRIPTION, tr("Download selected incomplete members"));
-        putValue(SMALL_ICON, ImageProvider.get("dialogs/relation", "downloadincompleteselected"));
+        new ImageProvider("dialogs/relation", "downloadincompleteselected").getResource().attachImageIcon(this, true);
         putValue(NAME, tr("Download Members"));
         updateEnabledState();
     }
diff --git a/src/org/openstreetmap/josm/gui/dialogs/relation/actions/DuplicateRelationAction.java b/src/org/openstreetmap/josm/gui/dialogs/relation/actions/DuplicateRelationAction.java
index aaa5086..ce48ae1 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/relation/actions/DuplicateRelationAction.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/relation/actions/DuplicateRelationAction.java
@@ -32,7 +32,7 @@ public class DuplicateRelationAction extends AbstractRelationEditorAction {
         this.tagEditorModel = tagEditorModel;
         putValue(SHORT_DESCRIPTION, tr("Create a copy of this relation and open it in another editor window"));
         // FIXME provide an icon
-        putValue(SMALL_ICON, ImageProvider.get("duplicate"));
+        new ImageProvider("duplicate").getResource().attachImageIcon(this, true);
         putValue(NAME, tr("Duplicate"));
         setEnabled(true);
     }
diff --git a/src/org/openstreetmap/josm/gui/dialogs/relation/actions/EditAction.java b/src/org/openstreetmap/josm/gui/dialogs/relation/actions/EditAction.java
index 8c5aa36..44f4a19 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/relation/actions/EditAction.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/relation/actions/EditAction.java
@@ -31,7 +31,7 @@ public class EditAction extends AbstractRelationEditorAction {
     public EditAction(MemberTable memberTable, MemberTableModel memberTableModel, OsmDataLayer layer) {
         super(memberTable, memberTableModel, null, layer, null);
         putValue(SHORT_DESCRIPTION, tr("Edit the relation the currently selected relation member refers to"));
-        putValue(SMALL_ICON, ImageProvider.get("dialogs", "edit"));
+        new ImageProvider("dialogs", "edit").getResource().attachImageIcon(this, true);
         updateEnabledState();
     }
 
diff --git a/src/org/openstreetmap/josm/gui/dialogs/relation/actions/MoveDownAction.java b/src/org/openstreetmap/josm/gui/dialogs/relation/actions/MoveDownAction.java
index 59fbfc2..ec691e6 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/relation/actions/MoveDownAction.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/relation/actions/MoveDownAction.java
@@ -26,7 +26,7 @@ public class MoveDownAction extends AbstractRelationEditorAction {
      */
     public MoveDownAction(MemberTable memberTable, MemberTableModel memberTableModel, String actionMapKey) {
         super(memberTable, memberTableModel, actionMapKey);
-        putValue(SMALL_ICON, ImageProvider.get("dialogs", "movedown"));
+        new ImageProvider("dialogs", "movedown").getResource().attachImageIcon(this, true);
         Shortcut sc = Shortcut.registerShortcut("relationeditor:movedown", tr("Relation Editor: Move Down"), KeyEvent.VK_DOWN, Shortcut.ALT);
         sc.setAccelerator(this);
         putValue(SHORT_DESCRIPTION, Main.platform.makeTooltip(tr("Move the currently selected members down"), sc));
diff --git a/src/org/openstreetmap/josm/gui/dialogs/relation/actions/MoveUpAction.java b/src/org/openstreetmap/josm/gui/dialogs/relation/actions/MoveUpAction.java
index 0a900cd..aceb7f5 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/relation/actions/MoveUpAction.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/relation/actions/MoveUpAction.java
@@ -26,7 +26,7 @@ public class MoveUpAction extends AbstractRelationEditorAction {
      */
     public MoveUpAction(MemberTable memberTable, MemberTableModel memberTableModel, String actionMapKey) {
         super(memberTable, memberTableModel, actionMapKey);
-        putValue(SMALL_ICON, ImageProvider.get("dialogs", "moveup"));
+        new ImageProvider("dialogs", "moveup").getResource().attachImageIcon(this, true);
         Shortcut sc = Shortcut.registerShortcut("relationeditor:moveup", tr("Relation Editor: Move Up"), KeyEvent.VK_UP, Shortcut.ALT);
         sc.setAccelerator(this);
         putValue(SHORT_DESCRIPTION, Main.platform.makeTooltip(tr("Move the currently selected members up"), sc));
diff --git a/src/org/openstreetmap/josm/gui/dialogs/relation/actions/RefreshAction.java b/src/org/openstreetmap/josm/gui/dialogs/relation/actions/RefreshAction.java
index 6236ba7..ffd2424 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/relation/actions/RefreshAction.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/relation/actions/RefreshAction.java
@@ -44,7 +44,7 @@ public class RefreshAction extends SavingAction implements CommandQueueListener
         Shortcut sc = Shortcut.registerShortcut("relationeditor:refresh", tr("Relation Editor: Refresh"), KeyEvent.CHAR_UNDEFINED, Shortcut.NONE);
         // CHECKSTYLE.ON: LineLength
         putValue(SHORT_DESCRIPTION, Main.platform.makeTooltip(tr("Refresh relation from data layer"), sc));
-        putValue(SMALL_ICON, ImageProvider.get("dialogs/refresh"));
+        new ImageProvider("dialogs/refresh").getResource().attachImageIcon(this, true);
         putValue(NAME, tr("Refresh"));
         if (editor instanceof JComponent) {
             ((JComponent) editor).getRootPane().getActionMap().put("refresh", this);
diff --git a/src/org/openstreetmap/josm/gui/dialogs/relation/actions/RemoveAction.java b/src/org/openstreetmap/josm/gui/dialogs/relation/actions/RemoveAction.java
index 419c8a4..fc09cf2 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/relation/actions/RemoveAction.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/relation/actions/RemoveAction.java
@@ -26,7 +26,7 @@ public class RemoveAction extends AbstractRelationEditorAction {
      */
     public RemoveAction(MemberTable memberTable, MemberTableModel memberTableModel, String actionMapKey) {
         super(memberTable, memberTableModel, actionMapKey);
-        putValue(SMALL_ICON, ImageProvider.get("dialogs", "delete"));
+        new ImageProvider("dialogs", "delete").getResource().attachImageIcon(this, true);
         putValue(NAME, tr("Remove"));
         Shortcut sc = Shortcut.registerShortcut("relationeditor:remove", tr("Relation Editor: Remove"), KeyEvent.VK_DELETE, Shortcut.ALT);
         sc.setAccelerator(this);
diff --git a/src/org/openstreetmap/josm/gui/dialogs/relation/actions/RemoveSelectedAction.java b/src/org/openstreetmap/josm/gui/dialogs/relation/actions/RemoveSelectedAction.java
index b3fd242..f92c586 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/relation/actions/RemoveSelectedAction.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/relation/actions/RemoveSelectedAction.java
@@ -26,7 +26,7 @@ public class RemoveSelectedAction extends AddFromSelectionAction {
     public RemoveSelectedAction(MemberTableModel memberTableModel, SelectionTableModel selectionTableModel, OsmDataLayer layer) {
         super(null, memberTableModel, null, selectionTableModel, null, layer, null);
         putValue(SHORT_DESCRIPTION, tr("Remove all members referring to one of the selected objects"));
-        putValue(SMALL_ICON, ImageProvider.get("dialogs/relation", "deletemembers"));
+        new ImageProvider("dialogs/relation", "deletemembers").getResource().attachImageIcon(this, true);
         updateEnabledState();
     }
 
diff --git a/src/org/openstreetmap/josm/gui/dialogs/relation/actions/ReverseAction.java b/src/org/openstreetmap/josm/gui/dialogs/relation/actions/ReverseAction.java
index 12cdd59..9fa0534 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/relation/actions/ReverseAction.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/relation/actions/ReverseAction.java
@@ -23,7 +23,7 @@ public class ReverseAction extends AbstractRelationEditorAction {
     public ReverseAction(MemberTable memberTable, MemberTableModel memberTableModel) {
         super(memberTable, memberTableModel, null);
         putValue(SHORT_DESCRIPTION, tr("Reverse the order of the relation members"));
-        putValue(SMALL_ICON, ImageProvider.get("dialogs/relation", "reverse"));
+        new ImageProvider("dialogs/relation", "reverse").getResource().attachImageIcon(this, true);
         putValue(NAME, tr("Reverse"));
         updateEnabledState();
     }
diff --git a/src/org/openstreetmap/josm/gui/dialogs/relation/actions/SelectPrimitivesForSelectedMembersAction.java b/src/org/openstreetmap/josm/gui/dialogs/relation/actions/SelectPrimitivesForSelectedMembersAction.java
index 5f88d95..6a5fe0f 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/relation/actions/SelectPrimitivesForSelectedMembersAction.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/relation/actions/SelectPrimitivesForSelectedMembersAction.java
@@ -26,7 +26,7 @@ public class SelectPrimitivesForSelectedMembersAction extends AbstractRelationEd
     public SelectPrimitivesForSelectedMembersAction(MemberTable memberTable, MemberTableModel memberTableModel, OsmDataLayer layer) {
         super(memberTable, memberTableModel, null, layer, null);
         putValue(SHORT_DESCRIPTION, tr("Select objects for selected relation members"));
-        putValue(SMALL_ICON, ImageProvider.get("dialogs/relation", "selectprimitives"));
+        new ImageProvider("dialogs/relation", "selectprimitives").getResource().attachImageIcon(this, true);
         updateEnabledState();
     }
 
diff --git a/src/org/openstreetmap/josm/gui/dialogs/relation/actions/SelectedMembersForSelectionAction.java b/src/org/openstreetmap/josm/gui/dialogs/relation/actions/SelectedMembersForSelectionAction.java
index 05836bd..642c0be 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/relation/actions/SelectedMembersForSelectionAction.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/relation/actions/SelectedMembersForSelectionAction.java
@@ -25,7 +25,7 @@ public class SelectedMembersForSelectionAction extends AddFromSelectionAction {
     public SelectedMembersForSelectionAction(MemberTableModel memberTableModel, SelectionTableModel selectionTableModel, OsmDataLayer layer) {
         super(null, memberTableModel, null, selectionTableModel, null, layer, null);
         putValue(SHORT_DESCRIPTION, tr("Select relation members which refer to objects in the current selection"));
-        putValue(SMALL_ICON, ImageProvider.get("dialogs/relation", "selectmembers"));
+        new ImageProvider("dialogs/relation", "selectmembers").getResource().attachImageIcon(this, true);
         updateEnabledState();
     }
 
diff --git a/src/org/openstreetmap/josm/gui/dialogs/relation/actions/SortAction.java b/src/org/openstreetmap/josm/gui/dialogs/relation/actions/SortAction.java
index ceb5564..49cf2bb 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/relation/actions/SortAction.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/relation/actions/SortAction.java
@@ -25,7 +25,7 @@ public class SortAction extends AbstractRelationEditorAction {
      */
     public SortAction(MemberTable memberTable, MemberTableModel memberTableModel) {
         super(memberTable, memberTableModel, null);
-        putValue(SMALL_ICON, ImageProvider.get("dialogs", "sort"));
+        new ImageProvider("dialogs", "sort").getResource().attachImageIcon(this, true);
         putValue(NAME, tr("Sort"));
         Shortcut sc = Shortcut.registerShortcut("relationeditor:sort", tr("Relation Editor: Sort"), KeyEvent.VK_END, Shortcut.ALT);
         sc.setAccelerator(this);
diff --git a/src/org/openstreetmap/josm/gui/dialogs/relation/actions/SortBelowAction.java b/src/org/openstreetmap/josm/gui/dialogs/relation/actions/SortBelowAction.java
index b90ab84..b7ea8d4 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/relation/actions/SortBelowAction.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/relation/actions/SortBelowAction.java
@@ -22,7 +22,7 @@ public class SortBelowAction extends AbstractRelationEditorAction {
      */
     public SortBelowAction(MemberTable memberTable, MemberTableModel memberTableModel) {
         super(memberTable, memberTableModel, null);
-        putValue(SMALL_ICON, ImageProvider.get("dialogs", "sort_below"));
+        new ImageProvider("dialogs", "sort_below").getResource().attachImageIcon(this, true);
         putValue(NAME, tr("Sort below"));
         putValue(SHORT_DESCRIPTION, tr("Sort the selected relation members and all members below"));
         updateEnabledState();
diff --git a/src/org/openstreetmap/josm/gui/download/BookmarkSelection.java b/src/org/openstreetmap/josm/gui/download/BookmarkSelection.java
index 4d5bc57..85783bf 100644
--- a/src/org/openstreetmap/josm/gui/download/BookmarkSelection.java
+++ b/src/org/openstreetmap/josm/gui/download/BookmarkSelection.java
@@ -179,7 +179,7 @@ public class BookmarkSelection implements DownloadSelection {
     class AddAction extends AbstractAction {
         AddAction() {
             putValue(NAME, tr("Create bookmark"));
-            putValue(SMALL_ICON, ImageProvider.get("dialogs", "bookmark-new"));
+            new ImageProvider("dialogs", "bookmark-new").getResource().attachImageIcon(this, true);
             putValue(SHORT_DESCRIPTION, tr("Add a bookmark for the currently selected download area"));
         }
 
@@ -214,7 +214,7 @@ public class BookmarkSelection implements DownloadSelection {
          * Constructs a new {@code RemoveAction}.
          */
         RemoveAction() {
-            putValue(SMALL_ICON, ImageProvider.get("dialogs", "delete"));
+            new ImageProvider("dialogs", "delete").getResource().attachImageIcon(this, true);
             putValue(SHORT_DESCRIPTION, tr("Remove the currently selected bookmarks"));
             updateEnabledState();
         }
@@ -245,7 +245,7 @@ public class BookmarkSelection implements DownloadSelection {
          * Constructs a new {@code RenameAction}.
          */
         RenameAction() {
-            putValue(SMALL_ICON, ImageProvider.get("dialogs", "edit"));
+            new ImageProvider("dialogs", "edit").getResource().attachImageIcon(this, true);
             putValue(SHORT_DESCRIPTION, tr("Rename the currently selected bookmark"));
             updateEnabledState();
         }
@@ -287,7 +287,7 @@ public class BookmarkSelection implements DownloadSelection {
          * Constructs a new {@code RefreshAction}.
          */
         RefreshAction() {
-            putValue(SMALL_ICON, ImageProvider.get("dialogs/changeset", "downloadchangeset"));
+            new ImageProvider("dialogs/changeset", "downloadchangeset").getResource().attachImageIcon(this, true);
             putValue(SHORT_DESCRIPTION, tr("Download bookmarks for my {0} last changesets", BookmarkList.MAX_CHANGESET_BOOKMARKS.get()));
             setEnabled(!UserIdentityManager.getInstance().isAnonymous());
         }
diff --git a/src/org/openstreetmap/josm/gui/download/OverpassDownloadSource.java b/src/org/openstreetmap/josm/gui/download/OverpassDownloadSource.java
index bf09c24..ffed4d4 100644
--- a/src/org/openstreetmap/josm/gui/download/OverpassDownloadSource.java
+++ b/src/org/openstreetmap/josm/gui/download/OverpassDownloadSource.java
@@ -285,8 +285,7 @@ public class OverpassDownloadSource implements DownloadSource<OverpassDownloadSo
              * Constructs a new {@code AddSnippetAction}.
              */
             AddSnippetAction() {
-                super();
-                putValue(SMALL_ICON, ImageProvider.get(ACTION_IMG_SUBDIR, "add"));
+                new ImageProvider(ACTION_IMG_SUBDIR, "add").getResource().attachImageIcon(this, true);
                 putValue(SHORT_DESCRIPTION, tr("Add new snippet"));
             }
 
@@ -305,8 +304,7 @@ public class OverpassDownloadSource implements DownloadSource<OverpassDownloadSo
              * Constructs a new {@code RemoveSnippetAction}.
              */
             RemoveSnippetAction() {
-                super();
-                putValue(SMALL_ICON, ImageProvider.get(ACTION_IMG_SUBDIR, "delete"));
+                new ImageProvider(ACTION_IMG_SUBDIR, "delete").getResource().attachImageIcon(this, true);
                 putValue(SHORT_DESCRIPTION, tr("Delete selected snippet"));
                 checkEnabled();
             }
@@ -339,7 +337,7 @@ public class OverpassDownloadSource implements DownloadSource<OverpassDownloadSo
              */
             EditSnippetAction() {
                 super();
-                putValue(SMALL_ICON, ImageProvider.get(ACTION_IMG_SUBDIR, "edit"));
+                new ImageProvider(ACTION_IMG_SUBDIR, "edit").getResource().attachImageIcon(this, true);
                 putValue(SHORT_DESCRIPTION, tr("Edit selected snippet"));
                 checkEnabled();
             }
diff --git a/src/org/openstreetmap/josm/gui/download/PlaceSelection.java b/src/org/openstreetmap/josm/gui/download/PlaceSelection.java
index 498cdc6..8271e0d 100644
--- a/src/org/openstreetmap/josm/gui/download/PlaceSelection.java
+++ b/src/org/openstreetmap/josm/gui/download/PlaceSelection.java
@@ -179,7 +179,7 @@ public class PlaceSelection implements DownloadSelection {
 
         SearchAction() {
             putValue(NAME, tr("Search ..."));
-            putValue(SMALL_ICON, ImageProvider.get("dialogs", "search"));
+            new ImageProvider("dialogs", "search").getResource().attachImageIcon(this, true);
             putValue(SHORT_DESCRIPTION, tr("Click to start searching for places"));
             updateEnabledState();
         }
diff --git a/src/org/openstreetmap/josm/gui/help/HelpBrowser.java b/src/org/openstreetmap/josm/gui/help/HelpBrowser.java
index c4ce3e4..6e130d6 100644
--- a/src/org/openstreetmap/josm/gui/help/HelpBrowser.java
+++ b/src/org/openstreetmap/josm/gui/help/HelpBrowser.java
@@ -430,7 +430,7 @@ public class HelpBrowser extends JFrame implements IHelpBrowser {
         OpenInBrowserAction(IHelpBrowser browser) {
             super(browser);
             putValue(SHORT_DESCRIPTION, tr("Open the current help page in an external browser"));
-            putValue(SMALL_ICON, ImageProvider.get("help", "internet"));
+            new ImageProvider("help", "internet").getResource().attachImageIcon(this, true);
         }
 
         @Override
@@ -448,7 +448,7 @@ public class HelpBrowser extends JFrame implements IHelpBrowser {
         EditAction(IHelpBrowser browser) {
             super(browser);
             putValue(SHORT_DESCRIPTION, tr("Edit the current help page"));
-            putValue(SMALL_ICON, ImageProvider.get("dialogs", "edit"));
+            new ImageProvider("dialogs", "edit").getResource().attachImageIcon(this, true);
         }
 
         @Override
@@ -488,7 +488,7 @@ public class HelpBrowser extends JFrame implements IHelpBrowser {
         ReloadAction(IHelpBrowser browser) {
             super(browser);
             putValue(SHORT_DESCRIPTION, tr("Reload the current help page"));
-            putValue(SMALL_ICON, ImageProvider.get("dialogs", "refresh"));
+            new ImageProvider("dialogs", "refresh").getResource().attachImageIcon(this, true);
         }
 
         @Override
@@ -507,7 +507,7 @@ public class HelpBrowser extends JFrame implements IHelpBrowser {
             super(browser);
             browser.getHistory().addChangeListener(this);
             putValue(SHORT_DESCRIPTION, tr("Go to the previous page"));
-            putValue(SMALL_ICON, ImageProvider.get("help", "previous"));
+            new ImageProvider("help", "previous").getResource().attachImageIcon(this, true);
             setEnabled(browser.getHistory().canGoBack());
         }
 
@@ -532,7 +532,7 @@ public class HelpBrowser extends JFrame implements IHelpBrowser {
             super(browser);
             browser.getHistory().addChangeListener(this);
             putValue(SHORT_DESCRIPTION, tr("Go to the next page"));
-            putValue(SMALL_ICON, ImageProvider.get("help", "next"));
+            new ImageProvider("help", "next").getResource().attachImageIcon(this, true);
             setEnabled(browser.getHistory().canGoForward());
         }
 
@@ -556,7 +556,7 @@ public class HelpBrowser extends JFrame implements IHelpBrowser {
         HomeAction(IHelpBrowser browser) {
             super(browser);
             putValue(SHORT_DESCRIPTION, tr("Go to the JOSM help home page"));
-            putValue(SMALL_ICON, ImageProvider.get("help", "home"));
+            new ImageProvider("help", "home").getResource().attachImageIcon(this, true);
         }
 
         @Override
diff --git a/src/org/openstreetmap/josm/gui/history/NodeListViewer.java b/src/org/openstreetmap/josm/gui/history/NodeListViewer.java
index fc38a89..2e8dd69 100644
--- a/src/org/openstreetmap/josm/gui/history/NodeListViewer.java
+++ b/src/org/openstreetmap/josm/gui/history/NodeListViewer.java
@@ -239,7 +239,7 @@ public class NodeListViewer extends JPanel {
         ZoomToNodeAction() {
             putValue(NAME, tr("Zoom to node"));
             putValue(SHORT_DESCRIPTION, tr("Zoom to this node in the current data layer"));
-            putValue(SMALL_ICON, ImageProvider.get("dialogs", "zoomin"));
+            new ImageProvider("dialogs", "zoomin").getResource().attachImageIcon(this, true);
         }
 
         @Override
@@ -284,7 +284,7 @@ public class NodeListViewer extends JPanel {
         ShowHistoryAction() {
             putValue(NAME, tr("Show history"));
             putValue(SHORT_DESCRIPTION, tr("Open a history browser with the history of this node"));
-            putValue(SMALL_ICON, ImageProvider.get("dialogs", "history"));
+            new ImageProvider("dialogs", "history").getResource().attachImageIcon(this, true);
         }
 
         @Override
diff --git a/src/org/openstreetmap/josm/gui/history/VersionInfoPanel.java b/src/org/openstreetmap/josm/gui/history/VersionInfoPanel.java
index f4b5451..a936989 100644
--- a/src/org/openstreetmap/josm/gui/history/VersionInfoPanel.java
+++ b/src/org/openstreetmap/josm/gui/history/VersionInfoPanel.java
@@ -306,7 +306,9 @@ public class VersionInfoPanel extends JPanel implements ChangeListener {
         private Integer id;
 
         OpenChangesetDialogAction(Class<? extends JComponent> componentToSelect) {
-            super(tr("Changeset"), new ImageProvider("dialogs/changeset", "changesetmanager").resetMaxSize(new Dimension(16, 16)).get());
+            super(tr("Changeset"));
+            new ImageProvider("dialogs/changeset", "changesetmanager").resetMaxSize(new Dimension(16, 16))
+                .getResource().attachImageIcon(this, true);
             putValue(SHORT_DESCRIPTION, tr("Opens the Changeset Manager window for the selected changesets"));
             this.componentToSelect = componentToSelect;
         }
diff --git a/src/org/openstreetmap/josm/gui/history/VersionTable.java b/src/org/openstreetmap/josm/gui/history/VersionTable.java
index 7431e78..8f24286 100644
--- a/src/org/openstreetmap/josm/gui/history/VersionTable.java
+++ b/src/org/openstreetmap/josm/gui/history/VersionTable.java
@@ -154,7 +154,7 @@ public class VersionTable extends JTable implements ChangeListener {
             super(true);
             putValue(NAME, tr("Changeset info"));
             putValue(SHORT_DESCRIPTION, tr("Launch browser with information about the changeset"));
-            putValue(SMALL_ICON, ImageProvider.get("data/changeset"));
+            new ImageProvider("data/changeset").getResource().attachImageIcon(this, true);
         }
 
         @Override
@@ -191,7 +191,7 @@ public class VersionTable extends JTable implements ChangeListener {
             super(true);
             putValue(NAME, tr("User info"));
             putValue(SHORT_DESCRIPTION, tr("Launch browser with information about the user"));
-            putValue(SMALL_ICON, ImageProvider.get("data/user"));
+            new ImageProvider("data/user").getResource().attachImageIcon(this, true);
         }
 
         @Override
diff --git a/src/org/openstreetmap/josm/gui/io/AsynchronousUploadPrimitivesTask.java b/src/org/openstreetmap/josm/gui/io/AsynchronousUploadPrimitivesTask.java
new file mode 100644
index 0000000..1830846
--- /dev/null
+++ b/src/org/openstreetmap/josm/gui/io/AsynchronousUploadPrimitivesTask.java
@@ -0,0 +1,153 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.gui.io;
+
+import static org.openstreetmap.josm.tools.I18n.tr;
+
+import java.awt.GraphicsEnvironment;
+import java.util.Optional;
+
+import javax.swing.JOptionPane;
+
+import org.openstreetmap.josm.data.APIDataSet;
+import org.openstreetmap.josm.data.osm.Changeset;
+import org.openstreetmap.josm.gui.MainApplication;
+import org.openstreetmap.josm.gui.dialogs.LayerListDialog;
+import org.openstreetmap.josm.gui.layer.OsmDataLayer;
+import org.openstreetmap.josm.gui.progress.ProgressTaskId;
+import org.openstreetmap.josm.gui.util.GuiHelper;
+import org.openstreetmap.josm.io.UploadStrategySpecification;
+
+/**
+ * Task for uploading primitives using background worker threads. The actual upload is delegated to the
+ * {@link UploadPrimitivesTask}. This class is a wrapper over that to make the background upload process safe. There
+ * can only be one instance of this class, hence background uploads are limited to one at a time. This class also
+ * changes the editLayer of {@link org.openstreetmap.josm.gui.layer.MainLayerManager} to null during upload so that
+ * any changes to the uploading layer are prohibited.
+ *
+ * @author udit
+ * @since 13133
+ */
+public final class AsynchronousUploadPrimitivesTask extends UploadPrimitivesTask {
+
+    /**
+     * Static instance
+     */
+    private static AsynchronousUploadPrimitivesTask asynchronousUploadPrimitivesTask;
+
+    /**
+     * Member fields
+     */
+    private final ProgressTaskId taskId;
+    private final OsmDataLayer uploadDataLayer;
+
+    /**
+     * Private constructor to restrict creating more Asynchronous upload tasks
+     *
+     * @param uploadStrategySpecification UploadStrategySpecification for the DataLayer
+     * @param osmDataLayer Datalayer to be uploaded
+     * @param apiDataSet ApiDataSet that contains the primitives to be uploaded
+     * @param changeset Changeset for the datalayer
+     *
+     * @throws IllegalArgumentException if layer is null
+     * @throws IllegalArgumentException if toUpload is null
+     * @throws IllegalArgumentException if strategy is null
+     * @throws IllegalArgumentException if changeset is null
+     */
+    private AsynchronousUploadPrimitivesTask(UploadStrategySpecification uploadStrategySpecification,
+                                             OsmDataLayer osmDataLayer, APIDataSet apiDataSet, Changeset changeset) {
+        super(uploadStrategySpecification,
+                osmDataLayer,
+                apiDataSet,
+                changeset);
+
+        uploadDataLayer = osmDataLayer;
+        // Create a ProgressTaskId for background upload
+        taskId = new ProgressTaskId("core", "async-upload");
+    }
+
+    /**
+     * Creates an instance of AsynchronousUploadPrimitiveTask
+     *
+     * @param uploadStrategySpecification UploadStrategySpecification for the DataLayer
+     * @param dataLayer Datalayer to be uploaded
+     * @param apiDataSet ApiDataSet that contains the primitives to be uploaded
+     * @param changeset Changeset for the datalayer
+     * @return Returns an {@literal Optional<AsynchronousUploadPrimitivesTask> } if there is no
+     * background upload in progress. Otherwise returns an {@literal Optional.empty()}
+     *
+     * @throws IllegalArgumentException if layer is null
+     * @throws IllegalArgumentException if toUpload is null
+     * @throws IllegalArgumentException if strategy is null
+     * @throws IllegalArgumentException if changeset is null
+     */
+    public static Optional<AsynchronousUploadPrimitivesTask> createAsynchronousUploadTask(
+            UploadStrategySpecification uploadStrategySpecification,
+             OsmDataLayer dataLayer, APIDataSet apiDataSet, Changeset changeset) {
+        synchronized (AsynchronousUploadPrimitivesTask.class) {
+            if (asynchronousUploadPrimitivesTask != null) {
+                if (!GraphicsEnvironment.isHeadless()) {
+                    GuiHelper.runInEDTAndWait(() ->
+                            JOptionPane.showMessageDialog(MainApplication.parent,
+                                    tr("A background upload is already in progress. " +
+                                            "Kindly wait for it to finish before uploading new changes")));
+                }
+                return Optional.empty();
+            } else {
+                // Create an asynchronous upload task
+                asynchronousUploadPrimitivesTask = new AsynchronousUploadPrimitivesTask(
+                        uploadStrategySpecification,
+                        dataLayer,
+                        apiDataSet,
+                        changeset);
+                return Optional.ofNullable(asynchronousUploadPrimitivesTask);
+            }
+        }
+    }
+
+    /**
+     * Get the current upload task
+     * @return {@literal Optional<AsynchronousUploadPrimitivesTask> }
+     */
+    public static Optional<AsynchronousUploadPrimitivesTask> getCurrentAsynchronousUploadTask() {
+        return Optional.ofNullable(asynchronousUploadPrimitivesTask);
+    }
+
+    @Override
+    public ProgressTaskId canRunInBackground() {
+        return taskId;
+    }
+
+    @Override
+    protected void realRun() {
+        // Lock the data layer before upload in EDT
+        GuiHelper.runInEDTAndWait(() -> {
+            // Remove the commands from the undo stack
+            MainApplication.undoRedo.clean(uploadDataLayer.data);
+            MainApplication.getLayerManager().prepareLayerForUpload(uploadDataLayer);
+
+            // Repainting the Layer List dialog to update the icon of the active layer
+            LayerListDialog.getInstance().repaint();
+        });
+        super.realRun();
+    }
+
+    @Override
+    protected void cancel() {
+        super.cancel();
+        asynchronousUploadPrimitivesTask = null;
+    }
+
+    @Override
+    protected void finish() {
+        try {
+            // Unlock the data layer in EDT
+            GuiHelper.runInEDTAndWait(() -> {
+                MainApplication.getLayerManager().processLayerAfterUpload(uploadDataLayer);
+                LayerListDialog.getInstance().repaint();
+            });
+            super.finish();
+        } finally {
+            asynchronousUploadPrimitivesTask = null;
+        }
+    }
+}
diff --git a/src/org/openstreetmap/josm/gui/io/ChangesetCommentModel.java b/src/org/openstreetmap/josm/gui/io/ChangesetCommentModel.java
index d1b3062..6086625 100644
--- a/src/org/openstreetmap/josm/gui/io/ChangesetCommentModel.java
+++ b/src/org/openstreetmap/josm/gui/io/ChangesetCommentModel.java
@@ -1,7 +1,10 @@
 // License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.gui.io;
 
+import java.util.Arrays;
+import java.util.List;
 import java.util.Objects;
+import java.util.stream.Collectors;
 
 import org.openstreetmap.josm.gui.util.ChangeNotifier;
 
@@ -34,4 +37,13 @@ public class ChangesetCommentModel extends ChangeNotifier {
     public String getComment() {
         return comment == null ? "" : comment;
     }
+
+    /**
+     * Extracts the list of hashtags from the comment text.
+     * @return the list of hashtags from the comment text. Can be empty, but not null.
+     * @since 13109
+     */
+    public List<String> findHashTags() {
+        return Arrays.stream(comment.split("\\s")).filter(s -> s.length() >= 2 && s.charAt(0) == '#').collect(Collectors.toList());
+    }
 }
diff --git a/src/org/openstreetmap/josm/gui/io/ChangesetManagementPanel.java b/src/org/openstreetmap/josm/gui/io/ChangesetManagementPanel.java
index f18f08c..d78c1aa 100644
--- a/src/org/openstreetmap/josm/gui/io/ChangesetManagementPanel.java
+++ b/src/org/openstreetmap/josm/gui/io/ChangesetManagementPanel.java
@@ -294,7 +294,7 @@ public class ChangesetManagementPanel extends JPanel implements ListDataListener
     class RefreshAction extends AbstractAction {
         RefreshAction() {
             putValue(SHORT_DESCRIPTION, tr("Load the list of your open changesets from the server"));
-            putValue(SMALL_ICON, ImageProvider.get("dialogs", "refresh"));
+            new ImageProvider("dialogs", "refresh").getResource().attachImageIcon(this, true);
         }
 
         @Override
@@ -309,7 +309,7 @@ public class ChangesetManagementPanel extends JPanel implements ListDataListener
      */
     class CloseChangesetAction extends AbstractAction implements ItemListener {
         CloseChangesetAction() {
-            putValue(SMALL_ICON, ImageProvider.get("closechangeset"));
+            new ImageProvider("closechangeset").getResource().attachImageIcon(this, true);
             putValue(SHORT_DESCRIPTION, tr("Close the currently selected open changeset"));
             refreshEnabledState();
         }
diff --git a/src/org/openstreetmap/josm/gui/io/CloseChangesetDialog.java b/src/org/openstreetmap/josm/gui/io/CloseChangesetDialog.java
index daa309a..2ba3a33 100644
--- a/src/org/openstreetmap/josm/gui/io/CloseChangesetDialog.java
+++ b/src/org/openstreetmap/josm/gui/io/CloseChangesetDialog.java
@@ -115,7 +115,7 @@ public class CloseChangesetDialog extends JDialog {
     class CloseAction extends AbstractAction implements ListSelectionListener {
         CloseAction() {
             putValue(NAME, tr("Close changesets"));
-            putValue(SMALL_ICON, ImageProvider.get("closechangeset"));
+            new ImageProvider("closechangeset").getResource().attachImageIcon(this, true);
             putValue(SHORT_DESCRIPTION, tr("Close the selected open changesets"));
             refreshEnabledState();
         }
@@ -141,7 +141,7 @@ public class CloseChangesetDialog extends JDialog {
 
         CancelAction() {
             putValue(NAME, tr("Cancel"));
-            putValue(SMALL_ICON, ImageProvider.get("cancel"));
+            new ImageProvider("cancel").getResource().attachImageIcon(this, true);
             putValue(SHORT_DESCRIPTION, tr("Cancel closing of changesets"));
         }
 
diff --git a/src/org/openstreetmap/josm/gui/io/LayerNameAndFilePathTableCell.java b/src/org/openstreetmap/josm/gui/io/LayerNameAndFilePathTableCell.java
index fa25a80..efda322 100644
--- a/src/org/openstreetmap/josm/gui/io/LayerNameAndFilePathTableCell.java
+++ b/src/org/openstreetmap/josm/gui/io/LayerNameAndFilePathTableCell.java
@@ -25,6 +25,7 @@ import javax.swing.table.TableCellEditor;
 import javax.swing.table.TableCellRenderer;
 
 import org.openstreetmap.josm.actions.SaveActionBase;
+import org.openstreetmap.josm.gui.layer.NoteLayer;
 import org.openstreetmap.josm.gui.util.CellEditorSupport;
 import org.openstreetmap.josm.gui.widgets.JosmTextField;
 import org.openstreetmap.josm.tools.GBC;
@@ -48,6 +49,7 @@ class LayerNameAndFilePathTableCell extends JPanel implements TableCellRenderer,
     private static final GBC DEFAULT_CELL_STYLE = GBC.eol().fill(GBC.HORIZONTAL).insets(2, 0, 2, 0);
 
     private final transient CellEditorSupport cellEditorSupport = new CellEditorSupport(this);
+    private String extension = "osm";
     private File value;
 
     /** constructor that sets the default on each element **/
@@ -89,6 +91,7 @@ class LayerNameAndFilePathTableCell extends JPanel implements TableCellRenderer,
         sb.append("<html>")
           .append(addLblLayerName(info));
         if (info.isSavable()) {
+            extension = info.getLayer() instanceof NoteLayer ? "osn" : "osm";
             add(btnFileChooser, GBC.std());
             sb.append("<br>")
               .append(addLblFilename(info));
@@ -110,6 +113,7 @@ class LayerNameAndFilePathTableCell extends JPanel implements TableCellRenderer,
           .append(addLblLayerName(info));
 
         if (info.isSavable()) {
+            extension = info.getLayer() instanceof NoteLayer ? "osn" : "osm";
             add(btnFileChooser, GBC.std());
             add(tfFilename, GBC.eol().fill(GBC.HORIZONTAL).insets(1, 0, 0, 0));
             tfFilename.selectAll();
@@ -241,7 +245,7 @@ class LayerNameAndFilePathTableCell extends JPanel implements TableCellRenderer,
 
         @Override
         public void actionPerformed(ActionEvent e) {
-            File f = SaveActionBase.createAndOpenSaveFileChooser(tr("Select filename"), "osm");
+            File f = SaveActionBase.createAndOpenSaveFileChooser(tr("Select filename"), extension);
             if (f != null) {
                 tfFilename.setText(f.toString());
                 stopCellEditing();
diff --git a/src/org/openstreetmap/josm/gui/io/SaveLayersDialog.java b/src/org/openstreetmap/josm/gui/io/SaveLayersDialog.java
index d184535..0877d9f 100644
--- a/src/org/openstreetmap/josm/gui/io/SaveLayersDialog.java
+++ b/src/org/openstreetmap/josm/gui/io/SaveLayersDialog.java
@@ -75,7 +75,7 @@ public class SaveLayersDialog extends JDialog implements TableModelListener {
         DELETE,
         /** exiting JOSM */
         EXIT,
-        /* restarting JOSM */
+        /** restarting JOSM */
         RESTART
     }
 
@@ -363,7 +363,7 @@ public class SaveLayersDialog extends JDialog implements TableModelListener {
         CancelAction() {
             putValue(NAME, tr("Cancel"));
             putValue(SHORT_DESCRIPTION, tr("Close this dialog and resume editing in JOSM"));
-            putValue(SMALL_ICON, ImageProvider.get("cancel"));
+            new ImageProvider("cancel").getResource().attachImageIcon(this, true);
             InputMapUtils.addEscapeAction(getRootPane(), this);
         }
 
@@ -397,17 +397,17 @@ public class SaveLayersDialog extends JDialog implements TableModelListener {
                 case EXIT:
                     putValue(NAME, tr("Exit now!"));
                     putValue(SHORT_DESCRIPTION, tr("Exit JOSM without saving. Unsaved changes are lost."));
-                    putValue(SMALL_ICON, ImageProvider.get("exit"));
+                    new ImageProvider("exit").getResource().attachImageIcon(this, true);
                     break;
                 case RESTART:
                     putValue(NAME, tr("Restart now!"));
                     putValue(SHORT_DESCRIPTION, tr("Restart JOSM without saving. Unsaved changes are lost."));
-                    putValue(SMALL_ICON, ImageProvider.get("restart"));
+                    new ImageProvider("restart").getResource().attachImageIcon(this, true);
                     break;
                 case DELETE:
                     putValue(NAME, tr("Delete now!"));
                     putValue(SHORT_DESCRIPTION, tr("Delete layers without saving. Unsaved changes are lost."));
-                    putValue(SMALL_ICON, ImageProvider.get("dialogs", "delete"));
+                    new ImageProvider("dialogs", "delete").getResource().attachImageIcon(this, true);
                     break;
             }
 
diff --git a/src/org/openstreetmap/josm/gui/io/TagSettingsPanel.java b/src/org/openstreetmap/josm/gui/io/TagSettingsPanel.java
index 4ad02c7..f1bbe7d 100644
--- a/src/org/openstreetmap/josm/gui/io/TagSettingsPanel.java
+++ b/src/org/openstreetmap/josm/gui/io/TagSettingsPanel.java
@@ -47,7 +47,7 @@ public class TagSettingsPanel extends JPanel implements TableModelListener {
         this.changesetCommentModel = changesetCommentModel;
         this.changesetSourceModel = changesetSourceModel;
         this.changesetReviewModel = changesetReviewModel;
-        changesetCommentModel.addChangeListener(new ChangesetCommentChangeListener("comment"));
+        changesetCommentModel.addChangeListener(new ChangesetCommentChangeListener("comment", "hashtags"));
         changesetSourceModel.addChangeListener(new ChangesetCommentChangeListener("source"));
         changesetReviewModel.addChangeListener(new ChangesetReviewChangeListener());
         build();
@@ -134,18 +134,32 @@ public class TagSettingsPanel extends JPanel implements TableModelListener {
     class ChangesetCommentChangeListener implements ChangeListener {
 
         private final String key;
+        private final String hashtagsKey;
 
         ChangesetCommentChangeListener(String key) {
+            this(key, null);
+        }
+
+        ChangesetCommentChangeListener(String key, String hashtagsKey) {
             this.key = key;
+            this.hashtagsKey = hashtagsKey;
         }
 
         @Override
         public void stateChanged(ChangeEvent e) {
             if (e.getSource() instanceof ChangesetCommentModel) {
-                String newValue = ((ChangesetCommentModel) e.getSource()).getComment();
+                ChangesetCommentModel model = ((ChangesetCommentModel) e.getSource());
+                String newValue = model.getComment();
                 String oldValue = Optional.ofNullable(getTagEditorValue(key)).orElse("");
                 if (!oldValue.equals(newValue)) {
                     setProperty(key, newValue);
+                    if (hashtagsKey != null) {
+                        String newHashTags = String.join(";", model.findHashTags());
+                        String oldHashTags = Optional.ofNullable(getTagEditorValue(hashtagsKey)).orElse("");
+                        if (!oldHashTags.equals(newHashTags)) {
+                            setProperty(hashtagsKey, newHashTags);
+                        }
+                    }
                 }
             }
         }
diff --git a/src/org/openstreetmap/josm/gui/io/UploadDialog.java b/src/org/openstreetmap/josm/gui/io/UploadDialog.java
index c26ced0..a19c9c1 100644
--- a/src/org/openstreetmap/josm/gui/io/UploadDialog.java
+++ b/src/org/openstreetmap/josm/gui/io/UploadDialog.java
@@ -42,13 +42,10 @@ import javax.swing.KeyStroke;
 
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.data.APIDataSet;
-import org.openstreetmap.josm.spi.preferences.PreferenceChangeEvent;
-import org.openstreetmap.josm.spi.preferences.PreferenceChangedListener;
 import org.openstreetmap.josm.data.Version;
 import org.openstreetmap.josm.data.osm.Changeset;
 import org.openstreetmap.josm.data.osm.DataSet;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
-import org.openstreetmap.josm.spi.preferences.Setting;
 import org.openstreetmap.josm.gui.ExtendedDialog;
 import org.openstreetmap.josm.gui.HelpAwareOptionPane;
 import org.openstreetmap.josm.gui.help.ContextSensitiveHelpAction;
@@ -60,6 +57,9 @@ import org.openstreetmap.josm.io.OsmApi;
 import org.openstreetmap.josm.io.UploadStrategy;
 import org.openstreetmap.josm.io.UploadStrategySpecification;
 import org.openstreetmap.josm.spi.preferences.Config;
+import org.openstreetmap.josm.spi.preferences.PreferenceChangeEvent;
+import org.openstreetmap.josm.spi.preferences.PreferenceChangedListener;
+import org.openstreetmap.josm.spi.preferences.Setting;
 import org.openstreetmap.josm.tools.GBC;
 import org.openstreetmap.josm.tools.ImageOverlay;
 import org.openstreetmap.josm.tools.ImageProvider;
@@ -111,6 +111,7 @@ public class UploadDialog extends AbstractUploadDialog implements PropertyChange
     public UploadDialog() {
         super(GuiHelper.getFrameForComponent(Main.parent), ModalityType.DOCUMENT_MODAL);
         build();
+        pack();
     }
 
     /**
@@ -206,9 +207,7 @@ public class UploadDialog extends AbstractUploadDialog implements PropertyChange
 
         addWindowListener(new WindowEventHandler());
 
-
-        // make sure the configuration panels listen to each other
-        // changes
+        // make sure the configuration panels listen to each other changes
         //
         pnlChangesetManagement.addPropertyChangeListener(this);
         pnlChangesetManagement.addPropertyChangeListener(
@@ -432,7 +431,7 @@ public class UploadDialog extends AbstractUploadDialog implements PropertyChange
         UploadAction(IUploadDialog dialog) {
             this.dialog = dialog;
             putValue(NAME, tr("Upload Changes"));
-            putValue(SMALL_ICON, ImageProvider.get("upload"));
+            new ImageProvider("upload").getResource().attachImageIcon(this, true);
             putValue(SHORT_DESCRIPTION, tr("Upload the changed primitives"));
         }
 
@@ -587,7 +586,7 @@ public class UploadDialog extends AbstractUploadDialog implements PropertyChange
         CancelAction(IUploadDialog dialog) {
             this.dialog = dialog;
             putValue(NAME, tr("Cancel"));
-            putValue(SMALL_ICON, ImageProvider.get("cancel"));
+            new ImageProvider("cancel").getResource().attachImageIcon(this, true);
             putValue(SHORT_DESCRIPTION, tr("Cancel the upload and resume editing"));
         }
 
@@ -603,18 +602,20 @@ public class UploadDialog extends AbstractUploadDialog implements PropertyChange
     /**
      * Listens to window closing events and processes them as cancel events.
      * Listens to window open events and initializes user input
-     *
      */
     class WindowEventHandler extends WindowAdapter {
+        private boolean activatedOnce;
+
         @Override
         public void windowClosing(WindowEvent e) {
             setCanceled(true);
         }
 
         @Override
-        public void windowActivated(WindowEvent arg0) {
-            if (tpConfigPanels.getSelectedIndex() == 0) {
+        public void windowActivated(WindowEvent e) {
+            if (!activatedOnce && tpConfigPanels.getSelectedIndex() == 0) {
                 pnlBasicUploadSettings.initEditingOfUploadComment();
+                activatedOnce = true;
             }
         }
     }
diff --git a/src/org/openstreetmap/josm/gui/io/UploadSelectionDialog.java b/src/org/openstreetmap/josm/gui/io/UploadSelectionDialog.java
index 051e187..2d0d55f 100644
--- a/src/org/openstreetmap/josm/gui/io/UploadSelectionDialog.java
+++ b/src/org/openstreetmap/josm/gui/io/UploadSelectionDialog.java
@@ -20,6 +20,7 @@ import javax.swing.AbstractAction;
 import javax.swing.AbstractListModel;
 import javax.swing.Action;
 import javax.swing.BorderFactory;
+import javax.swing.JButton;
 import javax.swing.JDialog;
 import javax.swing.JLabel;
 import javax.swing.JList;
@@ -35,7 +36,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.gui.OsmPrimitivRenderer;
-import org.openstreetmap.josm.gui.SideButton;
 import org.openstreetmap.josm.gui.help.ContextSensitiveHelpAction;
 import org.openstreetmap.josm.gui.help.HelpUtil;
 import org.openstreetmap.josm.gui.util.GuiHelper;
@@ -54,7 +54,7 @@ public class UploadSelectionDialog extends JDialog {
     private final OsmPrimitiveList lstDeletedPrimitives = new OsmPrimitiveList();
     private JSplitPane spLists;
     private boolean canceled;
-    private SideButton btnContinue;
+    private JButton btnContinue;
 
     /**
      * Constructs a new {@code UploadSelectionDialog}.
@@ -88,14 +88,14 @@ public class UploadSelectionDialog extends JDialog {
     protected JPanel buildButtonPanel() {
         JPanel pnl = new JPanel(new FlowLayout());
         ContinueAction continueAction = new ContinueAction();
-        btnContinue = new SideButton(continueAction);
+        btnContinue = new JButton(continueAction);
         pnl.add(btnContinue);
         btnContinue.setFocusable(true);
         lstDeletedPrimitives.getSelectionModel().addListSelectionListener(continueAction);
         lstSelectedPrimitives.getSelectionModel().addListSelectionListener(continueAction);
 
-        pnl.add(new SideButton(new CancelAction()));
-        pnl.add(new SideButton(new ContextSensitiveHelpAction(HelpUtil.ht("/Dialog/UploadSelection"))));
+        pnl.add(new JButton(new CancelAction()));
+        pnl.add(new JButton(new ContextSensitiveHelpAction(HelpUtil.ht("/Dialog/UploadSelection"))));
         return pnl;
     }
 
diff --git a/src/org/openstreetmap/josm/gui/io/importexport/NoteImporter.java b/src/org/openstreetmap/josm/gui/io/importexport/NoteImporter.java
index 317849f..733c019 100644
--- a/src/org/openstreetmap/josm/gui/io/importexport/NoteImporter.java
+++ b/src/org/openstreetmap/josm/gui/io/importexport/NoteImporter.java
@@ -24,7 +24,11 @@ import org.xml.sax.SAXException;
  */
 public class NoteImporter extends FileImporter {
 
-    private static final ExtensionFileFilter FILE_FILTER = ExtensionFileFilter.newFilterWithArchiveExtensions(
+    /**
+     * The Notes file filter (*.osn files).
+     * @since 13114
+     */
+    public static final ExtensionFileFilter FILE_FILTER = ExtensionFileFilter.newFilterWithArchiveExtensions(
             "osn", "osn", tr("Note Files"), true);
 
     /** Create an importer for note dump files */
diff --git a/src/org/openstreetmap/josm/gui/layer/AbstractMapViewPaintable.java b/src/org/openstreetmap/josm/gui/layer/AbstractMapViewPaintable.java
index 6e1bc7c..f4f5553 100644
--- a/src/org/openstreetmap/josm/gui/layer/AbstractMapViewPaintable.java
+++ b/src/org/openstreetmap/josm/gui/layer/AbstractMapViewPaintable.java
@@ -84,8 +84,9 @@ public abstract class AbstractMapViewPaintable implements MapViewPaintable {
      * It triggers a repaint of the components that display this layer.
      */
     public void invalidate() {
+        PaintableInvalidationEvent event = new PaintableInvalidationEvent(this);
         for (PaintableInvalidationListener l : invalidationListeners) {
-            l.paintableInvalidated(new PaintableInvalidationEvent(this));
+            l.paintableInvalidated(event);
         }
     }
 }
diff --git a/src/org/openstreetmap/josm/gui/layer/AbstractTileSourceLayer.java b/src/org/openstreetmap/josm/gui/layer/AbstractTileSourceLayer.java
index a7b3b46..2dc3eac 100644
--- a/src/org/openstreetmap/josm/gui/layer/AbstractTileSourceLayer.java
+++ b/src/org/openstreetmap/josm/gui/layer/AbstractTileSourceLayer.java
@@ -1349,7 +1349,7 @@ implements ImageObserver, TileLoaderListener, ZoomChangeListener, FilterChangeLi
     }
 
     /**
-     * Data container to hold information about a {@link TileSet} class.
+     * Data container to hold information about a {@code TileSet} class.
      */
     private static class TileSetInfo {
         boolean hasVisibleTiles;
diff --git a/src/org/openstreetmap/josm/gui/layer/AutosaveTask.java b/src/org/openstreetmap/josm/gui/layer/AutosaveTask.java
index 8b7485f..2a5814d 100644
--- a/src/org/openstreetmap/josm/gui/layer/AutosaveTask.java
+++ b/src/org/openstreetmap/josm/gui/layer/AutosaveTask.java
@@ -30,6 +30,8 @@ import java.util.regex.Pattern;
 
 import org.openstreetmap.josm.actions.OpenFileAction.OpenFileTask;
 import org.openstreetmap.josm.data.osm.DataSet;
+import org.openstreetmap.josm.data.osm.NoteData;
+import org.openstreetmap.josm.data.osm.NoteData.NoteDataUpdateListener;
 import org.openstreetmap.josm.data.osm.event.AbstractDatasetChangedEvent;
 import org.openstreetmap.josm.data.osm.event.DataSetListenerAdapter;
 import org.openstreetmap.josm.data.osm.event.DataSetListenerAdapter.Listener;
@@ -37,6 +39,8 @@ import org.openstreetmap.josm.data.preferences.BooleanProperty;
 import org.openstreetmap.josm.data.preferences.IntegerProperty;
 import org.openstreetmap.josm.gui.MainApplication;
 import org.openstreetmap.josm.gui.Notification;
+import org.openstreetmap.josm.gui.io.importexport.NoteExporter;
+import org.openstreetmap.josm.gui.io.importexport.NoteImporter;
 import org.openstreetmap.josm.gui.io.importexport.OsmExporter;
 import org.openstreetmap.josm.gui.io.importexport.OsmImporter;
 import org.openstreetmap.josm.gui.layer.LayerManager.LayerAddEvent;
@@ -49,7 +53,7 @@ import org.openstreetmap.josm.tools.Logging;
 import org.openstreetmap.josm.tools.Utils;
 
 /**
- * Saves data layers periodically so they can be recovered in case of a crash.
+ * Saves data and note layers periodically so they can be recovered in case of a crash.
  *
  * There are 2 directories
  *  - autosave dir: copies of the currently open data layers are saved here every
@@ -67,7 +71,7 @@ import org.openstreetmap.josm.tools.Utils;
  * @since  3378 (creation)
  * @since 10386 (new LayerChangeListener interface)
  */
-public class AutosaveTask extends TimerTask implements LayerChangeListener, Listener {
+public class AutosaveTask extends TimerTask implements LayerChangeListener, Listener, NoteDataUpdateListener {
 
     private static final char[] ILLEGAL_CHARACTERS = {'/', '\n', '\r', '\t', '\0', '\f', '`', '?', '*', '\\', '<', '>', '|', '\"', ':'};
     private static final String AUTOSAVE_DIR = "autosave";
@@ -98,20 +102,21 @@ public class AutosaveTask extends TimerTask implements LayerChangeListener, List
      */
     public static final BooleanProperty PROP_NOTIFICATION = new BooleanProperty("autosave.notification", false);
 
-    protected static final class AutosaveLayerInfo {
-        private final OsmDataLayer layer;
+    protected static final class AutosaveLayerInfo<T extends AbstractModifiableLayer> {
+        private final T layer;
         private String layerName;
         private String layerFileName;
         private final Deque<File> backupFiles = new LinkedList<>();
 
-        AutosaveLayerInfo(OsmDataLayer layer) {
+        AutosaveLayerInfo(T layer) {
             this.layer = layer;
         }
     }
 
     private final DataSetListenerAdapter datasetAdapter = new DataSetListenerAdapter(this);
     private final Set<DataSet> changedDatasets = new HashSet<>();
-    private final List<AutosaveLayerInfo> layersInfo = new ArrayList<>();
+    private final Set<NoteData> changedNoteData = new HashSet<>();
+    private final List<AutosaveLayerInfo<?>> layersInfo = new ArrayList<>();
     private final Object layersLock = new Object();
     private final Deque<File> deletedLayers = new LinkedList<>();
 
@@ -166,12 +171,12 @@ public class AutosaveTask extends TimerTask implements LayerChangeListener, List
         return result;
     }
 
-    private void setLayerFileName(AutosaveLayerInfo layer) {
+    private void setLayerFileName(AutosaveLayerInfo<?> layer) {
         int index = 0;
         while (true) {
             String filename = getFileName(layer.layer.getName(), index);
             boolean foundTheSame = false;
-            for (AutosaveLayerInfo info: layersInfo) {
+            for (AutosaveLayerInfo<?> info: layersInfo) {
                 if (info != layer && filename.equals(info.layerFileName)) {
                     foundTheSame = true;
                     break;
@@ -187,12 +192,15 @@ public class AutosaveTask extends TimerTask implements LayerChangeListener, List
         }
     }
 
-    protected File getNewLayerFile(AutosaveLayerInfo layer, Date now, int startIndex) {
+    protected File getNewLayerFile(AutosaveLayerInfo<?> layer, Date now, int startIndex) {
         int index = startIndex;
         while (true) {
             String filename = String.format("%1$s_%2$tY%2$tm%2$td_%2$tH%2$tM%2$tS%2$tL%3$s",
                     layer.layerFileName, now, index == 0 ? "" : ('_' + Integer.toString(index)));
-            File result = new File(autosaveDir, filename + '.' + Config.getPref().get("autosave.extension", "osm"));
+            File result = new File(autosaveDir, filename + '.' +
+                    (layer.layer instanceof NoteLayer ?
+                            Config.getPref().get("autosave.notes.extension", "osn") :
+                            Config.getPref().get("autosave.extension", "osm")));
             try {
                 if (index > PROP_INDEX_LIMIT.get())
                     throw new IOException("index limit exceeded");
@@ -219,17 +227,33 @@ public class AutosaveTask extends TimerTask implements LayerChangeListener, List
         }
     }
 
-    private void savelayer(AutosaveLayerInfo info) {
+    private void savelayer(AutosaveLayerInfo<?> info) {
         if (!info.layer.getName().equals(info.layerName)) {
             setLayerFileName(info);
             info.layerName = info.layer.getName();
         }
-        if (changedDatasets.remove(info.layer.data)) {
-            File file = getNewLayerFile(info, new Date(), 0);
-            if (file != null) {
-                info.backupFiles.add(file);
-                new OsmExporter().exportData(file, info.layer, true /* no backup with appended ~ */);
+        try {
+            if (info.layer instanceof OsmDataLayer) {
+                OsmDataLayer dataLayer = (OsmDataLayer) info.layer;
+                if (changedDatasets.remove(dataLayer.data)) {
+                    File file = getNewLayerFile(info, new Date(), 0);
+                    if (file != null) {
+                        info.backupFiles.add(file);
+                        new OsmExporter().exportData(file, info.layer, true /* no backup with appended ~ */);
+                    }
+                }
+            } else if (info.layer instanceof NoteLayer) {
+                NoteLayer noteLayer = (NoteLayer) info.layer;
+                if (changedNoteData.remove(noteLayer.getNoteData())) {
+                    File file = getNewLayerFile(info, new Date(), 0);
+                    if (file != null) {
+                        info.backupFiles.add(file);
+                        new NoteExporter().exportData(file, info.layer);
+                    }
+                }
             }
+        } catch (IOException e) {
+            Logging.error(e);
         }
         while (info.backupFiles.size() > PROP_FILES_PER_LAYER.get()) {
             File oldFile = info.backupFiles.remove();
@@ -243,10 +267,11 @@ public class AutosaveTask extends TimerTask implements LayerChangeListener, List
     public void run() {
         synchronized (layersLock) {
             try {
-                for (AutosaveLayerInfo info: layersInfo) {
+                for (AutosaveLayerInfo<?> info: layersInfo) {
                     savelayer(info);
                 }
                 changedDatasets.clear();
+                changedNoteData.clear();
                 if (PROP_NOTIFICATION.get() && !layersInfo.isEmpty()) {
                     GuiHelper.runInEDT(this::displayNotification);
                 }
@@ -272,7 +297,14 @@ public class AutosaveTask extends TimerTask implements LayerChangeListener, List
     private void registerNewlayer(OsmDataLayer layer) {
         synchronized (layersLock) {
             layer.data.addDataSetListener(datasetAdapter);
-            layersInfo.add(new AutosaveLayerInfo(layer));
+            layersInfo.add(new AutosaveLayerInfo<>(layer));
+        }
+    }
+
+    private void registerNewlayer(NoteLayer layer) {
+        synchronized (layersLock) {
+            layer.getNoteData().addNoteDataUpdateListener(this);
+            layersInfo.add(new AutosaveLayerInfo<>(layer));
         }
     }
 
@@ -280,6 +312,8 @@ public class AutosaveTask extends TimerTask implements LayerChangeListener, List
     public void layerAdded(LayerAddEvent e) {
         if (e.getAddedLayer() instanceof OsmDataLayer) {
             registerNewlayer((OsmDataLayer) e.getAddedLayer());
+        } else if (e.getAddedLayer() instanceof NoteLayer) {
+            registerNewlayer((NoteLayer) e.getAddedLayer());
         }
     }
 
@@ -289,25 +323,35 @@ public class AutosaveTask extends TimerTask implements LayerChangeListener, List
             synchronized (layersLock) {
                 OsmDataLayer osmLayer = (OsmDataLayer) e.getRemovedLayer();
                 osmLayer.data.removeDataSetListener(datasetAdapter);
-                Iterator<AutosaveLayerInfo> it = layersInfo.iterator();
-                while (it.hasNext()) {
-                    AutosaveLayerInfo info = it.next();
-                    if (info.layer == osmLayer) {
-
-                        savelayer(info);
-                        File lastFile = info.backupFiles.pollLast();
-                        if (lastFile != null) {
-                            moveToDeletedLayersFolder(lastFile);
-                        }
-                        for (File file: info.backupFiles) {
-                            if (Utils.deleteFile(file)) {
-                                Utils.deleteFile(getPidFile(file));
-                            }
-                        }
+                cleanupLayer(osmLayer);
+            }
+        } else if (e.getRemovedLayer() instanceof NoteLayer) {
+            synchronized (layersLock) {
+                NoteLayer noteLayer = (NoteLayer) e.getRemovedLayer();
+                noteLayer.getNoteData().removeNoteDataUpdateListener(this);
+                cleanupLayer(noteLayer);
+            }
+        }
+    }
+
+    private void cleanupLayer(AbstractModifiableLayer removedLayer) {
+        Iterator<AutosaveLayerInfo<?>> it = layersInfo.iterator();
+        while (it.hasNext()) {
+            AutosaveLayerInfo<?> info = it.next();
+            if (info.layer == removedLayer) {
 
-                        it.remove();
+                savelayer(info);
+                File lastFile = info.backupFiles.pollLast();
+                if (lastFile != null) {
+                    moveToDeletedLayersFolder(lastFile);
+                }
+                for (File file: info.backupFiles) {
+                    if (Utils.deleteFile(file)) {
+                        Utils.deleteFile(getPidFile(file));
                     }
                 }
+
+                it.remove();
             }
         }
     }
@@ -317,6 +361,16 @@ public class AutosaveTask extends TimerTask implements LayerChangeListener, List
         changedDatasets.add(event.getDataset());
     }
 
+    @Override
+    public void noteDataUpdated(NoteData data) {
+        changedNoteData.add(data);
+    }
+
+    @Override
+    public void selectedNoteChanged(NoteData noteData) {
+        // Do nothing
+    }
+
     protected File getPidFile(File osmFile) {
         return new File(autosaveDir, osmFile.getName().replaceFirst("[.][^.]+$", ".pid"));
     }
@@ -328,7 +382,8 @@ public class AutosaveTask extends TimerTask implements LayerChangeListener, List
      */
     public List<File> getUnsavedLayersFiles() {
         List<File> result = new ArrayList<>();
-        File[] files = autosaveDir.listFiles(OsmImporter.FILE_FILTER);
+        File[] files = autosaveDir.listFiles((FileFilter)
+                pathname -> OsmImporter.FILE_FILTER.accept(pathname) || NoteImporter.FILE_FILTER.accept(pathname));
         if (files == null)
             return result;
         for (File file: files) {
diff --git a/src/org/openstreetmap/josm/gui/layer/CustomizeColor.java b/src/org/openstreetmap/josm/gui/layer/CustomizeColor.java
index 825b1fe..efa4730 100644
--- a/src/org/openstreetmap/josm/gui/layer/CustomizeColor.java
+++ b/src/org/openstreetmap/josm/gui/layer/CustomizeColor.java
@@ -40,7 +40,8 @@ public class CustomizeColor extends AbstractAction implements LayerAction, Multi
      * @param l list of layers
      */
     public CustomizeColor(List<Layer> l) {
-        super(tr("Customize Color"), ImageProvider.get("colorchooser"));
+        super(tr("Customize Color"));
+        new ImageProvider("colorchooser").getResource().attachImageIcon(this, true);
         colors = l.stream().map(Layer::getColorProperty).collect(Collectors.toList());
         CheckParameterUtil.ensureThat(colors.stream().allMatch(Objects::nonNull), "All layers must have colors.");
         putValue("help", ht("/Action/LayerCustomizeColor"));
diff --git a/src/org/openstreetmap/josm/gui/layer/Layer.java b/src/org/openstreetmap/josm/gui/layer/Layer.java
index b036d2e..41d2af2 100644
--- a/src/org/openstreetmap/josm/gui/layer/Layer.java
+++ b/src/org/openstreetmap/josm/gui/layer/Layer.java
@@ -542,7 +542,7 @@ public abstract class Layer extends AbstractMapViewPaintable implements Destroya
          * @param layer The layer to save.
          */
         public LayerSaveAction(Layer layer) {
-            putValue(SMALL_ICON, ImageProvider.get("save"));
+            new ImageProvider("save").getResource().attachImageIcon(this, true);
             putValue(SHORT_DESCRIPTION, tr("Save the current data."));
             putValue(NAME, tr("Save"));
             setEnabled(true);
@@ -566,7 +566,7 @@ public abstract class Layer extends AbstractMapViewPaintable implements Destroya
          * @param layer The layer that should be saved.
          */
         public LayerSaveAsAction(Layer layer) {
-            putValue(SMALL_ICON, ImageProvider.get("save_as"));
+            new ImageProvider("save_as").getResource().attachImageIcon(this, true);
             putValue(SHORT_DESCRIPTION, tr("Save the current data to a new file."));
             putValue(NAME, tr("Save As..."));
             setEnabled(true);
@@ -590,7 +590,7 @@ public abstract class Layer extends AbstractMapViewPaintable implements Destroya
          * @param layer The layer
          */
         public LayerGpxExportAction(Layer layer) {
-            putValue(SMALL_ICON, ImageProvider.get("exportgpx"));
+            new ImageProvider("exportgpx").getResource().attachImageIcon(this, true);
             putValue(SHORT_DESCRIPTION, tr("Export the data to GPX file."));
             putValue(NAME, tr("Export to GPX..."));
             setEnabled(true);
diff --git a/src/org/openstreetmap/josm/gui/layer/MainLayerManager.java b/src/org/openstreetmap/josm/gui/layer/MainLayerManager.java
index c037add..8ecbe22 100644
--- a/src/org/openstreetmap/josm/gui/layer/MainLayerManager.java
+++ b/src/org/openstreetmap/josm/gui/layer/MainLayerManager.java
@@ -1,13 +1,18 @@
 // License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.gui.layer;
 
+import static org.openstreetmap.josm.tools.I18n.tr;
+
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
 import java.util.ListIterator;
 import java.util.concurrent.CopyOnWriteArrayList;
 
+import javax.swing.JOptionPane;
+
 import org.openstreetmap.josm.data.osm.DataSet;
+import org.openstreetmap.josm.gui.MainApplication;
 import org.openstreetmap.josm.gui.util.GuiHelper;
 
 /**
@@ -205,13 +210,23 @@ public class MainLayerManager extends LayerManager {
     }
 
     /**
-     * Set the active layer. If the layer is an OsmDataLayer, the edit layer is also changed.
+     * Set the active layer, unless the layer is read-only.
+     * If the layer is an OsmDataLayer, the edit layer is also changed.
      * @param layer The active layer.
      */
     public void setActiveLayer(final Layer layer) {
         // we force this on to the EDT Thread to make events fire from there.
         // The synchronization lock needs to be held by the EDT.
-        GuiHelper.runInEDTAndWaitWithException(() -> realSetActiveLayer(layer));
+        if (layer instanceof OsmDataLayer && ((OsmDataLayer) layer).isReadOnly()) {
+            GuiHelper.runInEDT(() ->
+                    JOptionPane.showMessageDialog(
+                            MainApplication.parent,
+                            tr("Trying to set a read only data layer as edit layer"),
+                            tr("Warning"),
+                            JOptionPane.WARNING_MESSAGE));
+        } else {
+            GuiHelper.runInEDTAndWaitWithException(() -> realSetActiveLayer(layer));
+        }
     }
 
     protected synchronized void realSetActiveLayer(final Layer layer) {
@@ -309,16 +324,27 @@ public class MainLayerManager extends LayerManager {
      * @return the currently active layer (may be null)
      */
     public synchronized Layer getActiveLayer() {
-        return activeLayer;
+        if (activeLayer instanceof OsmDataLayer) {
+            if (!((OsmDataLayer) activeLayer).isReadOnly()) {
+                return activeLayer;
+            } else {
+                return null;
+            }
+        } else {
+            return activeLayer;
+        }
     }
 
     /**
-     * Replies the current edit layer, if any
+     * Replies the current edit layer, if present and not readOnly
      *
      * @return the current edit layer. May be null.
      */
     public synchronized OsmDataLayer getEditLayer() {
-        return editLayer;
+        if (editLayer != null && !editLayer.isReadOnly())
+            return editLayer;
+        else
+            return null;
     }
 
     /**
@@ -370,6 +396,16 @@ public class MainLayerManager extends LayerManager {
         return ret;
     }
 
+    /**
+     * Invalidates current edit layer, if any. Does nothing if there is no edit layer.
+     * @since 13150
+     */
+    public void invalidateEditLayer() {
+        if (editLayer != null) {
+            editLayer.invalidate();
+        }
+    }
+
     @Override
     protected synchronized void realResetState() {
         // active and edit layer are unset automatically
@@ -378,4 +414,44 @@ public class MainLayerManager extends LayerManager {
         activeLayerChangeListeners.clear();
         layerAvailabilityListeners.clear();
     }
+
+    /**
+     * Prepares an OsmDataLayer for upload. The layer to be uploaded is locked and
+     * if the layer to be uploaded is the current editLayer then editLayer is reset
+     * to null for disallowing any changes to the layer. An ActiveLayerChangeEvent
+     * is fired to notify the listeners
+     *
+     * @param layer The OsmDataLayer to be uploaded
+     */
+    public void prepareLayerForUpload(OsmDataLayer layer) {
+
+        GuiHelper.assertCallFromEdt();
+        layer.setReadOnly();
+
+        // Reset only the edit layer as empty
+        if (editLayer == layer) {
+            ActiveLayerChangeEvent activeLayerChangeEvent = new ActiveLayerChangeEvent(this, editLayer, activeLayer);
+            editLayer = null;
+            fireActiveLayerChange(activeLayerChangeEvent);
+        }
+    }
+
+    /**
+     * Post upload processing of the OsmDataLayer.
+     * If the current edit layer is empty this function sets the layer uploaded as the
+     * current editLayer. An ActiveLayerChangeEvent is fired to notify the listeners
+     *
+     * @param layer The OsmDataLayer uploaded
+     */
+    public void processLayerAfterUpload(OsmDataLayer layer) {
+        GuiHelper.assertCallFromEdt();
+        layer.unsetReadOnly();
+
+        // Set the layer as edit layer if the edit layer is empty.
+        if (editLayer == null) {
+            ActiveLayerChangeEvent layerChangeEvent = new ActiveLayerChangeEvent(this, editLayer, activeLayer);
+            editLayer = layer;
+            fireActiveLayerChange(layerChangeEvent);
+        }
+    }
 }
diff --git a/src/org/openstreetmap/josm/gui/layer/NoteLayer.java b/src/org/openstreetmap/josm/gui/layer/NoteLayer.java
index 92f311e..4e2a258 100644
--- a/src/org/openstreetmap/josm/gui/layer/NoteLayer.java
+++ b/src/org/openstreetmap/josm/gui/layer/NoteLayer.java
@@ -4,24 +4,35 @@ package org.openstreetmap.josm.gui.layer;
 import static org.openstreetmap.josm.tools.I18n.tr;
 import static org.openstreetmap.josm.tools.I18n.trn;
 
+import java.awt.Color;
 import java.awt.Dimension;
 import java.awt.Graphics2D;
 import java.awt.Point;
 import java.awt.event.MouseEvent;
 import java.awt.event.MouseListener;
+import java.awt.event.MouseWheelEvent;
+import java.awt.event.MouseWheelListener;
 import java.io.File;
 import java.text.DateFormat;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.List;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 
 import javax.swing.Action;
+import javax.swing.BorderFactory;
 import javax.swing.Icon;
 import javax.swing.ImageIcon;
-import javax.swing.JToolTip;
+import javax.swing.JEditorPane;
+import javax.swing.JWindow;
 import javax.swing.SwingUtilities;
+import javax.swing.UIManager;
+import javax.swing.plaf.basic.BasicHTML;
+import javax.swing.text.View;
 
+import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.actions.SaveActionBase;
 import org.openstreetmap.josm.data.Bounds;
 import org.openstreetmap.josm.data.notes.Note;
@@ -31,15 +42,15 @@ import org.openstreetmap.josm.data.osm.NoteData;
 import org.openstreetmap.josm.data.osm.NoteData.NoteDataUpdateListener;
 import org.openstreetmap.josm.data.osm.visitor.BoundingXYVisitor;
 import org.openstreetmap.josm.gui.MainApplication;
+import org.openstreetmap.josm.gui.MainFrame;
 import org.openstreetmap.josm.gui.MapView;
-import org.openstreetmap.josm.gui.datatransfer.ClipboardUtils;
 import org.openstreetmap.josm.gui.dialogs.LayerListDialog;
 import org.openstreetmap.josm.gui.dialogs.LayerListPopup;
 import org.openstreetmap.josm.gui.io.AbstractIOTask;
 import org.openstreetmap.josm.gui.io.UploadNoteLayerTask;
 import org.openstreetmap.josm.gui.io.importexport.NoteExporter;
 import org.openstreetmap.josm.gui.progress.ProgressMonitor;
-import org.openstreetmap.josm.io.OsmApi;
+import org.openstreetmap.josm.gui.widgets.HtmlPanel;
 import org.openstreetmap.josm.io.XmlWriter;
 import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.ColorHelper;
@@ -53,8 +64,32 @@ import org.openstreetmap.josm.tools.date.DateUtils;
  */
 public class NoteLayer extends AbstractModifiableLayer implements MouseListener, NoteDataUpdateListener {
 
+    /**
+     * Pattern to detect end of sentences followed by another one, or a link, in western script.
+     * Group 1 (capturing): period, interrogation mark, exclamation mark
+     * Group non capturing: at least one horizontal or vertical whitespace
+     * Group 2 (capturing): a letter (any script), or any punctuation
+     */
+    private static final Pattern SENTENCE_MARKS_WESTERN = Pattern.compile("([\\.\\?\\!])(?:[\\h\\v]+)([\\p{L}\\p{Punct}])");
+
+    /**
+     * Pattern to detect end of sentences followed by another one, or a link, in eastern script.
+     * Group 1 (capturing): ideographic full stop
+     * Group 2 (capturing): a letter (any script), or any punctuation
+     */
+    private static final Pattern SENTENCE_MARKS_EASTERN = Pattern.compile("(\\u3002)([\\p{L}\\p{Punct}])");
+
+    private static final Pattern HTTP_LINK = Pattern.compile("(https?://[^\\s\\(\\)<>]+)");
+    private static final Pattern HTML_LINK = Pattern.compile("<a href=\"[^\"]+\">([^<]+)</a>");
+    private static final Pattern HTML_LINK_MARK = Pattern.compile("<a href=\"([^\"]+)([\\.\\?\\!])\">([^<]+)(?:[\\.\\?\\!])</a>");
+    private static final Pattern SLASH = Pattern.compile("([^/])/([^/])");
+
     private final NoteData noteData;
 
+    private Note displayedNote;
+    private HtmlPanel displayedPanel;
+    private JWindow displayedWindow;
+
     /**
      * Create a new note layer with a set of notes
      * @param notes A list of notes to show in this layer
@@ -80,6 +115,7 @@ public class NoteLayer extends AbstractModifiableLayer implements MouseListener,
     public synchronized void destroy() {
         MainApplication.getMap().mapView.removeMouseListener(this);
         noteData.removeNoteDataUpdateListener(this);
+        hideNoteWindow();
         super.destroy();
     }
 
@@ -136,60 +172,173 @@ public class NoteLayer extends AbstractModifiableLayer implements MouseListener,
             int height = icon.getIconHeight();
             g.drawImage(icon.getImage(), p.x - (width / 2), p.y - height, MainApplication.getMap().mapView);
         }
-        if (noteData.getSelectedNote() != null) {
-            StringBuilder sb = new StringBuilder("<html>");
-            sb.append(tr("Note"))
-              .append(' ').append(noteData.getSelectedNote().getId());
-            for (NoteComment comment : noteData.getSelectedNote().getComments()) {
-                String commentText = comment.getText();
-                //closing a note creates an empty comment that we don't want to show
-                if (commentText != null && !commentText.trim().isEmpty()) {
-                    sb.append("<hr/>");
-                    String userName = XmlWriter.encode(comment.getUser().getName());
-                    if (userName == null || userName.trim().isEmpty()) {
-                        userName = "<Anonymous>";
-                    }
-                    sb.append(userName);
-                    sb.append(" on ");
-                    sb.append(DateUtils.getDateFormat(DateFormat.MEDIUM).format(comment.getCommentTimestamp()));
-                    sb.append(":<br/>");
-                    String htmlText = XmlWriter.encode(comment.getText(), true);
-                    htmlText = htmlText.replace("&#xA;", "<br/>"); //encode method leaves us with entity instead of \n
-                    htmlText = htmlText.replace("/", "/\u200b"); //zero width space to wrap long URLs (see #10864)
-                    sb.append(htmlText);
-                }
+        Note selectedNote = noteData.getSelectedNote();
+        if (selectedNote != null) {
+            paintSelectedNote(g, mv, iconHeight, iconWidth, selectedNote);
+        } else {
+            hideNoteWindow();
+        }
+    }
+
+    private void hideNoteWindow() {
+        if (displayedWindow != null) {
+            displayedWindow.setVisible(false);
+            for (MouseWheelListener listener : displayedWindow.getMouseWheelListeners()) {
+                displayedWindow.removeMouseWheelListener(listener);
+            }
+            displayedWindow.dispose();
+            displayedWindow = null;
+            displayedPanel = null;
+            displayedNote = null;
+        }
+    }
+
+    private void paintSelectedNote(Graphics2D g, MapView mv, final int iconHeight, final int iconWidth, Note selectedNote) {
+        Point p = mv.getPoint(selectedNote.getLatLon());
+
+        g.setColor(ColorHelper.html2color(Config.getPref().get("color.selected")));
+        g.drawRect(p.x - (iconWidth / 2), p.y - iconHeight, iconWidth - 1, iconHeight - 1);
+
+        if (displayedNote != null && !displayedNote.equals(selectedNote)) {
+            hideNoteWindow();
+        }
+
+        int xl = p.x - (iconWidth / 2) - 5;
+        int xr = p.x + (iconWidth / 2) + 5;
+        int yb = p.y - iconHeight - 1;
+        int yt = p.y + (iconHeight / 2) + 2;
+        Point pTooltip;
+
+        String text = getNoteToolTip(selectedNote);
+
+        if (displayedWindow == null) {
+            displayedPanel = new HtmlPanel(text);
+            displayedPanel.setBackground(UIManager.getColor("ToolTip.background"));
+            displayedPanel.setForeground(UIManager.getColor("ToolTip.foreground"));
+            displayedPanel.setFont(UIManager.getFont("ToolTip.font"));
+            displayedPanel.setBorder(BorderFactory.createLineBorder(Color.black));
+            displayedPanel.enableClickableHyperlinks();
+            pTooltip = fixPanelSizeAndLocation(mv, text, xl, xr, yt, yb);
+            displayedWindow = new JWindow((MainFrame) Main.parent);
+            displayedWindow.setAutoRequestFocus(false);
+            displayedWindow.add(displayedPanel);
+            // Forward mouse wheel scroll event to MapMover
+            displayedWindow.addMouseWheelListener(e -> mv.getMapMover().mouseWheelMoved(
+                    (MouseWheelEvent) SwingUtilities.convertMouseEvent(displayedWindow, e, mv)));
+        } else {
+            displayedPanel.setText(text);
+            pTooltip = fixPanelSizeAndLocation(mv, text, xl, xr, yt, yb);
+        }
+
+        displayedWindow.pack();
+        displayedWindow.setLocation(pTooltip);
+        displayedWindow.setVisible(mv.contains(p));
+        displayedNote = selectedNote;
+    }
+
+    private Point fixPanelSizeAndLocation(MapView mv, String text, int xl, int xr, int yt, int yb) {
+        int leftMaxWidth = (int) (0.95 * xl);
+        int rightMaxWidth = (int) (0.95 * mv.getWidth() - xr);
+        int topMaxHeight = (int) (0.95 * yt);
+        int bottomMaxHeight = (int) (0.95 * mv.getHeight() - yb);
+        int maxWidth = Math.max(leftMaxWidth, rightMaxWidth);
+        int maxHeight = Math.max(topMaxHeight, bottomMaxHeight);
+        JEditorPane pane = displayedPanel.getEditorPane();
+        Dimension d = pane.getPreferredSize();
+        if ((d.width > maxWidth || d.height > maxHeight) && Config.getPref().getBoolean("note.text.break-on-sentence-mark", false)) {
+            // To make sure long notes are displayed correctly
+            displayedPanel.setText(insertLineBreaks(text));
+        }
+        // If still too large, enforce maximum size
+        d = pane.getPreferredSize();
+        if (d.width > maxWidth || d.height > maxHeight) {
+            View v = (View) pane.getClientProperty(BasicHTML.propertyKey);
+            if (v == null) {
+                BasicHTML.updateRenderer(pane, text);
+                v = (View) pane.getClientProperty(BasicHTML.propertyKey);
             }
-            sb.append("</html>");
-            JToolTip toolTip = new JToolTip();
-            toolTip.setTipText(sb.toString());
-            Point p = mv.getPoint(noteData.getSelectedNote().getLatLon());
-
-            g.setColor(ColorHelper.html2color(Config.getPref().get("color.selected")));
-            g.drawRect(p.x - (iconWidth / 2), p.y - iconHeight,
-                    iconWidth - 1, iconHeight - 1);
-
-            int tx = p.x + (iconWidth / 2) + 5;
-            int ty = p.y - iconHeight - 1;
-            g.translate(tx, ty);
-
-            //Carried over from the OSB plugin. Not entirely sure why it is needed
-            //but without it, the tooltip doesn't get sized correctly
-            for (int x = 0; x < 2; x++) {
-                Dimension d = toolTip.getUI().getPreferredSize(toolTip);
-                d.width = Math.min(d.width, mv.getWidth() / 2);
-                if (d.width > 0 && d.height > 0) {
-                    toolTip.setSize(d);
-                    try {
-                        toolTip.paint(g);
-                    } catch (IllegalArgumentException e) {
-                        // See #11123 - https://bugs.openjdk.java.net/browse/JDK-6719550
-                        // Ignore the exception, as Netbeans does: http://hg.netbeans.org/main-silver/rev/c96f4d5fbd20
-                        Logging.log(Logging.LEVEL_ERROR, e);
-                    }
+            if (v != null) {
+                v.setSize(maxWidth, 0);
+                int w = (int) Math.ceil(v.getPreferredSpan(View.X_AXIS));
+                int h = (int) Math.ceil(v.getPreferredSpan(View.Y_AXIS)) + 10;
+                pane.setPreferredSize(new Dimension(w, h));
+            }
+        }
+        d = pane.getPreferredSize();
+        // place tooltip on left or right side of icon, based on its width
+        Point screenloc = mv.getLocationOnScreen();
+        return new Point(
+                screenloc.x + (d.width > rightMaxWidth && d.width <= leftMaxWidth ? xl - d.width : xr),
+                screenloc.y + (d.height > bottomMaxHeight && d.height <= topMaxHeight ? yt - d.height - 10 : yb));
+    }
+
+    /**
+     * Inserts HTML line breaks ({@code <br>} at the end of each sentence mark
+     * (period, interrogation mark, exclamation mark, ideographic full stop).
+     * @param longText a long text that does not fit on a single line without exceeding half of the map view
+     * @return text with line breaks
+     */
+    static String insertLineBreaks(String longText) {
+        return SENTENCE_MARKS_WESTERN.matcher(SENTENCE_MARKS_EASTERN.matcher(longText).replaceAll("$1<br>$2")).replaceAll("$1<br>$2");
+    }
+
+    /**
+     * Returns the HTML-formatted tooltip text for the given note.
+     * @param note note to display
+     * @return the HTML-formatted tooltip text for the given note
+     * @since 13111
+     */
+    public static String getNoteToolTip(Note note) {
+        StringBuilder sb = new StringBuilder("<html>");
+        sb.append(tr("Note"))
+          .append(' ').append(note.getId());
+        for (NoteComment comment : note.getComments()) {
+            String commentText = comment.getText();
+            //closing a note creates an empty comment that we don't want to show
+            if (commentText != null && !commentText.trim().isEmpty()) {
+                sb.append("<hr/>");
+                String userName = XmlWriter.encode(comment.getUser().getName());
+                if (userName == null || userName.trim().isEmpty()) {
+                    userName = "<Anonymous>";
                 }
+                sb.append(userName)
+                  .append(" on ")
+                  .append(DateUtils.getDateFormat(DateFormat.MEDIUM).format(comment.getCommentTimestamp()))
+                  .append(":<br>");
+                String htmlText = XmlWriter.encode(comment.getText(), true);
+                // encode method leaves us with entity instead of \n
+                htmlText = htmlText.replace("&#xA;", "<br>");
+                // convert URLs to proper HTML links
+                htmlText = replaceLinks(htmlText);
+                sb.append(htmlText);
             }
-            g.translate(-tx, -ty);
         }
+        sb.append("</html>");
+        String result = sb.toString();
+        Logging.debug(result);
+        return result;
+    }
+
+    static String replaceLinks(String htmlText) {
+        String result = HTTP_LINK.matcher(htmlText).replaceAll("<a href=\"$1\">$1</a>");
+        result = HTML_LINK_MARK.matcher(result).replaceAll("<a href=\"$1\">$3</a>$2");
+        Matcher m1 = HTML_LINK.matcher(result);
+        if (m1.find()) {
+            int last = 0;
+            StringBuffer sb = new StringBuffer(); // Switch to StringBuilder when switching to Java 9
+            do {
+                sb.append(result, last, m1.start());
+                last = m1.end();
+                String link = m1.group(0);
+                Matcher m2 = SLASH.matcher(link).region(link.indexOf('>'), link.lastIndexOf('<'));
+                while (m2.find()) {
+                    m2.appendReplacement(sb, "$1/\u200b$2"); //zero width space to wrap long URLs (see #10864, #15550)
+                }
+                m2.appendTail(sb);
+            } while (m1.find());
+            result = sb.append(result, last, result.length()).toString();
+        }
+        return result;
     }
 
     @Override
@@ -247,11 +396,7 @@ public class NoteLayer extends AbstractModifiableLayer implements MouseListener,
 
     @Override
     public void mouseClicked(MouseEvent e) {
-        if (SwingUtilities.isRightMouseButton(e) && noteData.getSelectedNote() != null) {
-            final String url = OsmApi.getOsmApi().getBaseUrl() + "notes/" + noteData.getSelectedNote().getId();
-            ClipboardUtils.copyString(url);
-            return;
-        } else if (!SwingUtilities.isLeftMouseButton(e)) {
+        if (!SwingUtilities.isLeftMouseButton(e)) {
             return;
         }
         Point clickPoint = e.getPoint();
diff --git a/src/org/openstreetmap/josm/gui/layer/OsmDataLayer.java b/src/org/openstreetmap/josm/gui/layer/OsmDataLayer.java
index 9e13b2f..5b394d6 100644
--- a/src/org/openstreetmap/josm/gui/layer/OsmDataLayer.java
+++ b/src/org/openstreetmap/josm/gui/layer/OsmDataLayer.java
@@ -31,6 +31,7 @@ import java.util.List;
 import java.util.Map;
 import java.util.Set;
 import java.util.concurrent.CopyOnWriteArrayList;
+import java.util.concurrent.atomic.AtomicBoolean;
 import java.util.concurrent.atomic.AtomicInteger;
 import java.util.regex.Pattern;
 
@@ -129,6 +130,8 @@ public class OsmDataLayer extends AbstractModifiableLayer implements Listener, D
 
     private boolean requiresSaveToFile;
     private boolean requiresUploadToServer;
+    /** Flag used to know if the layer should not be editable */
+    private final AtomicBoolean isReadOnly = new AtomicBoolean(false);
 
     /**
      * List of validation errors in this layer.
@@ -420,6 +423,11 @@ public class OsmDataLayer extends AbstractModifiableLayer implements Listener, D
         if (isUploadDiscouraged() || data.getUploadPolicy() == UploadPolicy.BLOCKED) {
             base.addOverlay(new ImageOverlay(new ImageProvider("warning-small"), 0.5, 0.5, 1.0, 1.0));
         }
+
+        if (isReadOnly()) {
+            // If the layer is read only then change the default icon to a clock
+            base = new ImageProvider("clock").setMaxSize(ImageSizes.LAYER);
+        }
         return base.get();
     }
 
@@ -859,7 +867,8 @@ public class OsmDataLayer extends AbstractModifiableLayer implements Listener, D
          * Constructs a new {@code ConvertToGpxLayerAction}.
          */
         public ConvertToGpxLayerAction() {
-            super(tr("Convert to GPX layer"), ImageProvider.get("converttogpx"));
+            super(tr("Convert to GPX layer"));
+            new ImageProvider("converttogpx").getResource().attachImageIcon(this, true);
             putValue("help", ht("/Action/ConvertToGpxLayer"));
         }
 
@@ -987,7 +996,7 @@ public class OsmDataLayer extends AbstractModifiableLayer implements Listener, D
     public void processDatasetEvent(AbstractDatasetChangedEvent event) {
         invalidate();
         setRequiresSaveToFile(true);
-        setRequiresUploadToServer(true);
+        setRequiresUploadToServer(event.getDataset().requiresUploadToServer());
     }
 
     @Override
@@ -1142,4 +1151,30 @@ public class OsmDataLayer extends AbstractModifiableLayer implements Listener, D
         }
         super.setName(name);
     }
+
+    /**
+     * Sets the isReadOnly flag for the OsmDataLayer as true
+     */
+    public void setReadOnly() {
+        if (!isReadOnly.compareAndSet(false, true)) {
+            Logging.warn("Trying to set readOnly flag on a readOnly layer ", this.getName());
+        }
+    }
+
+    /**
+     * Sets the isReadOnly flag for the OsmDataLayer as false
+     */
+    public void unsetReadOnly() {
+        if (!isReadOnly.compareAndSet(true, false)) {
+            Logging.warn("Trying to unset readOnly flag on a non-readOnly layer ", this.getName());
+        }
+    }
+
+    /**
+     * Returns the value of the isReadOnly flag for the OsmDataLayer
+     * @return isReadOnly
+     */
+    public boolean isReadOnly() {
+        return isReadOnly.get();
+    }
 }
diff --git a/src/org/openstreetmap/josm/gui/layer/geoimage/CorrelateGpxWithImages.java b/src/org/openstreetmap/josm/gui/layer/geoimage/CorrelateGpxWithImages.java
index fba1256..7d7204d 100644
--- a/src/org/openstreetmap/josm/gui/layer/geoimage/CorrelateGpxWithImages.java
+++ b/src/org/openstreetmap/josm/gui/layer/geoimage/CorrelateGpxWithImages.java
@@ -106,7 +106,8 @@ public class CorrelateGpxWithImages extends AbstractAction {
      * @param layer The image layer
      */
     public CorrelateGpxWithImages(GeoImageLayer layer) {
-        super(tr("Correlate to GPX"), ImageProvider.get("dialogs/geoimage/gpx2img"));
+        super(tr("Correlate to GPX"));
+        new ImageProvider("dialogs/geoimage/gpx2img").getResource().attachImageIcon(this, true);
         this.yLayer = layer;
     }
 
@@ -545,6 +546,7 @@ public class CorrelateGpxWithImages extends AbstractAction {
     public void actionPerformed(ActionEvent ae) {
         // Construct the list of loaded GPX tracks
         Collection<Layer> layerLst = MainApplication.getLayerManager().getLayers();
+        gpxLst.clear();
         GpxDataWrapper defaultItem = null;
         for (Layer cur : layerLst) {
             if (cur instanceof GpxLayer) {
@@ -573,6 +575,14 @@ public class CorrelateGpxWithImages extends AbstractAction {
         cbGpx = new JosmComboBox<>(gpxLst.toArray(new GpxDataWrapper[gpxLst.size()]));
         if (defaultItem != null) {
             cbGpx.setSelectedItem(defaultItem);
+        } else {
+            // select first GPX track associated to a file
+            for (GpxDataWrapper item : gpxLst) {
+                if (item.file != null) {
+                    cbGpx.setSelectedItem(item);
+                    break;
+                }
+            }
         }
         cbGpx.addActionListener(statusBarUpdaterWithRepaint);
         panelCb.add(cbGpx);
@@ -1183,7 +1193,7 @@ public class CorrelateGpxWithImages extends AbstractAction {
                     curImg.tmp.setSpeed(speed);
                     curImg.tmp.setElevation(curElevation);
                     curImg.tmp.setGpsTime(new Date(curImg.getExifTime().getTime() - offset));
-                    curImg.flagNewGpsData();
+                    curImg.tmp.flagNewGpsData();
                     ret++;
                 }
                 i--;
@@ -1209,7 +1219,7 @@ public class CorrelateGpxWithImages extends AbstractAction {
                     curImg.tmp.setElevation(prevElevation + (curElevation - prevElevation) * timeDiff);
                 }
                 curImg.tmp.setGpsTime(new Date(curImg.getExifTime().getTime() - offset));
-                curImg.flagNewGpsData();
+                curImg.tmp.flagNewGpsData();
 
                 ret++;
             }
diff --git a/src/org/openstreetmap/josm/gui/layer/geoimage/ImageDisplay.java b/src/org/openstreetmap/josm/gui/layer/geoimage/ImageDisplay.java
index e64731f..3bc3820 100644
--- a/src/org/openstreetmap/josm/gui/layer/geoimage/ImageDisplay.java
+++ b/src/org/openstreetmap/josm/gui/layer/geoimage/ImageDisplay.java
@@ -25,8 +25,13 @@ import java.awt.image.BufferedImage;
 import java.io.File;
 
 import javax.swing.JComponent;
+import javax.swing.SwingUtilities;
 
+import org.openstreetmap.josm.data.preferences.BooleanProperty;
+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.ExifReader;
 import org.openstreetmap.josm.tools.ImageProvider;
 import org.openstreetmap.josm.tools.Logging;
@@ -36,7 +41,7 @@ import org.openstreetmap.josm.tools.Logging;
  *
  * Offers basic mouse interaction (zoom, drag) and on-screen text.
  */
-public class ImageDisplay extends JComponent {
+public class ImageDisplay extends JComponent implements PreferenceChangedListener {
 
     /** The file that is currently displayed */
     private File file;
@@ -49,18 +54,149 @@ public class ImageDisplay extends JComponent {
 
     /** The rectangle (in image coordinates) of the image that is visible. This rectangle is calculated
      * each time the zoom is modified */
-    private Rectangle visibleRect;
+    private VisRect visibleRect;
 
     /** When a selection is done, the rectangle of the selection (in image coordinates) */
-    private Rectangle selectedRect;
+    private VisRect selectedRect;
 
     /** The tracker to load the images */
     private final MediaTracker tracker = new MediaTracker(this);
 
     private String osdText;
 
-    private static final int DRAG_BUTTON = Config.getPref().getBoolean("geoimage.agpifo-style-drag-and-zoom", false) ? 1 : 3;
-    private static final int ZOOM_BUTTON = DRAG_BUTTON == 1 ? 3 : 1;
+    private static final BooleanProperty AGPIFO_STYLE =
+        new BooleanProperty("geoimage.agpifo-style-drag-and-zoom", false);
+    private static int dragButton;
+    private static int zoomButton;
+
+    /** Alternative to mouse wheel zoom; esp. handy if no mouse wheel is present **/
+    private static final BooleanProperty ZOOM_ON_CLICK =
+        new BooleanProperty("geoimage.use-mouse-clicks-to-zoom", true);
+
+    /** Zoom factor when click or wheel zooming **/
+    private static final DoubleProperty ZOOM_STEP =
+        new DoubleProperty("geoimage.zoom-step-factor", 3 / 2.0);
+
+    /** Maximum zoom allowed **/
+    private static final DoubleProperty MAX_ZOOM =
+        new DoubleProperty("geoimage.maximum-zoom-scale", 2.0);
+
+    /** Use bilinear filtering **/
+    private static final BooleanProperty BILIN_DOWNSAMP =
+        new BooleanProperty("geoimage.bilinear-downsampling-progressive", true);
+    private static final BooleanProperty BILIN_UPSAMP =
+        new BooleanProperty("geoimage.bilinear-upsampling", false);
+    private static double bilinUpper;
+    private static double bilinLower;
+
+    @Override
+    public void preferenceChanged(PreferenceChangeEvent e) {
+        if (e == null ||
+            e.getKey().equals(AGPIFO_STYLE.getKey())) {
+            dragButton = AGPIFO_STYLE.get() ? 1 : 3;
+            zoomButton = dragButton == 1 ? 3 : 1;
+        }
+        if (e == null ||
+            e.getKey().equals(MAX_ZOOM.getKey()) ||
+            e.getKey().equals(BILIN_DOWNSAMP.getKey()) ||
+            e.getKey().equals(BILIN_UPSAMP.getKey())) {
+            bilinUpper = (BILIN_UPSAMP.get() ? 2*MAX_ZOOM.get() : (BILIN_DOWNSAMP.get() ? 0.5 : 0));
+            bilinLower = (BILIN_DOWNSAMP.get() ? 0 : 1);
+        }
+    }
+
+    /**
+     * Manage the visible rectangle of an image with full bounds stored in init.
+     * @since 13127
+     */
+    public static class VisRect extends Rectangle {
+        private final Rectangle init;
+
+        /**
+         * 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
+         */
+        public VisRect(int x, int y, int width, int height) {
+            super(x, y, width, height);
+            init = new Rectangle(this);
+        }
+
+        public VisRect(int x, int y, int width, int height, VisRect peer) {
+            super(x, y, width, height);
+            init = peer.init;
+        }
+
+        /**
+         * Constructs a new {@code VisRect} from another one.
+         * @param v rectangle to copy
+         */
+        public VisRect(VisRect v) {
+            super(v);
+            init = v.init;
+        }
+
+        /**
+         * Constructs a new empty {@code VisRect}.
+         */
+        public VisRect() {
+            this(0, 0, 0, 0);
+        }
+
+        public boolean isFullView() {
+            return init.equals(this);
+        }
+
+        public boolean isFullView1D() {
+            return (init.x == x && init.width == width)
+                || (init.y == y && init.height == height);
+        }
+
+        public void reset() {
+            setBounds(init);
+        }
+
+        public void checkRectPos() {
+            if (x < 0) {
+                x = 0;
+            }
+            if (y < 0) {
+                y = 0;
+            }
+            if (x + width > init.width) {
+                x = init.width - width;
+            }
+            if (y + height > init.height) {
+                y = init.height - height;
+            }
+        }
+
+        public void checkRectSize() {
+            if (width > init.width) {
+                width = init.width;
+            }
+            if (height > init.height) {
+                height = init.height;
+            }
+        }
+
+        public void checkPointInside(Point p) {
+            if (p.x < x) {
+                p.x = x;
+            }
+            if (p.x > x + width) {
+                p.x = x + width;
+            }
+            if (p.y < y) {
+                p.y = y;
+            }
+            if (p.y > y + height) {
+                p.y = y + height;
+            }
+        }
+    }
 
     /** The thread that reads the images. */
     private class LoadImageRunnable implements Runnable {
@@ -107,7 +243,7 @@ public class ImageDisplay extends JComponent {
 
                 if (!error) {
                     ImageDisplay.this.image = img;
-                    visibleRect = new Rectangle(0, 0, img.getWidth(null), img.getHeight(null));
+                    visibleRect = new VisRect(0, 0, img.getWidth(null), img.getHeight(null));
 
                     final int w = (int) visibleRect.getWidth();
                     final int h = (int) visibleRect.getHeight();
@@ -143,17 +279,30 @@ public class ImageDisplay extends JComponent {
 
     private class ImgDisplayMouseListener implements MouseListener, MouseWheelListener, MouseMotionListener {
 
-        private boolean mouseIsDragging;
-        private long lastTimeForMousePoint;
+        private MouseEvent lastMouseEvent;
         private Point mousePointInImg;
 
-        /** Zoom in and out, trying to preserve the point of the image that was under the mouse cursor
-         * at the same place */
-        @Override
-        public void mouseWheelMoved(MouseWheelEvent e) {
+        private boolean mouseIsDragging(MouseEvent e) {
+            return (dragButton == 1 && SwingUtilities.isLeftMouseButton(e)) ||
+                   (dragButton == 2 && SwingUtilities.isMiddleMouseButton(e)) ||
+                   (dragButton == 3 && SwingUtilities.isRightMouseButton(e));
+        }
+
+        private boolean mouseIsZoomSelecting(MouseEvent e) {
+            return (zoomButton == 1 && SwingUtilities.isLeftMouseButton(e)) ||
+                   (zoomButton == 2 && SwingUtilities.isMiddleMouseButton(e)) ||
+                   (zoomButton == 3 && SwingUtilities.isRightMouseButton(e));
+        }
+
+        private boolean isAtMaxZoom(Rectangle visibleRect) {
+            return (visibleRect.width == (int) (getSize().width / MAX_ZOOM.get()) ||
+                    visibleRect.height == (int) (getSize().height / MAX_ZOOM.get()));
+        }
+
+        private void mouseWheelMovedImpl(int x, int y, int rotation, boolean refreshMousePointInImg) {
             File file;
             Image image;
-            Rectangle visibleRect;
+            VisRect visibleRect;
 
             synchronized (ImageDisplay.this) {
                 file = ImageDisplay.this.file;
@@ -161,36 +310,30 @@ public class ImageDisplay extends JComponent {
                 visibleRect = ImageDisplay.this.visibleRect;
             }
 
-            mouseIsDragging = false;
             selectedRect = null;
 
             if (image == null)
                 return;
 
-            // Calculate the mouse cursor position in image coordinates, so that we can center the zoom
-            // on that mouse position.
-            // To avoid issues when the user tries to zoom in on the image borders, this point is not calculated
-            // again if there was less than 1.5seconds since the last event.
-            if (e.getWhen() - lastTimeForMousePoint > 1500 || mousePointInImg == null) {
-                lastTimeForMousePoint = e.getWhen();
-                mousePointInImg = comp2imgCoord(visibleRect, e.getX(), e.getY(), getSize());
-            }
+            // Calculate the mouse cursor position in image coordinates to center the zoom.
+            if (refreshMousePointInImg)
+                mousePointInImg = comp2imgCoord(visibleRect, x, y, getSize());
 
-            // Applicate the zoom to the visible rectangle in image coordinates
-            if (e.getWheelRotation() > 0) {
-                visibleRect.width = visibleRect.width * 3 / 2;
-                visibleRect.height = visibleRect.height * 3 / 2;
+            // Apply the zoom to the visible rectangle in image coordinates
+            if (rotation > 0) {
+                visibleRect.width = (int) (visibleRect.width * ZOOM_STEP.get());
+                visibleRect.height = (int) (visibleRect.height * ZOOM_STEP.get());
             } else {
-                visibleRect.width = visibleRect.width * 2 / 3;
-                visibleRect.height = visibleRect.height * 2 / 3;
+                visibleRect.width = (int) (visibleRect.width / ZOOM_STEP.get());
+                visibleRect.height = (int) (visibleRect.height / ZOOM_STEP.get());
             }
 
-            // Check that the zoom doesn't exceed 2:1
-            if (visibleRect.width < getSize().width / 2) {
-                visibleRect.width = getSize().width / 2;
+            // Check that the zoom doesn't exceed MAX_ZOOM:1
+            if (visibleRect.width < getSize().width / MAX_ZOOM.get()) {
+                visibleRect.width = (int) (getSize().width / MAX_ZOOM.get());
             }
-            if (visibleRect.height < getSize().height / 2) {
-                visibleRect.height = getSize().height / 2;
+            if (visibleRect.height < getSize().height / MAX_ZOOM.get()) {
+                visibleRect.height = (int) (getSize().height / MAX_ZOOM.get());
             }
 
             // Set the same ratio for the visible rectangle and the display area
@@ -203,15 +346,15 @@ public class ImageDisplay extends JComponent {
             }
 
             // The size of the visible rectangle is limited by the image size.
-            checkVisibleRectSize(image, visibleRect);
+            visibleRect.checkRectSize();
 
             // Set the position of the visible rectangle, so that the mouse cursor doesn't move on the image.
             Rectangle drawRect = calculateDrawImageRectangle(visibleRect, getSize());
-            visibleRect.x = mousePointInImg.x + ((drawRect.x - e.getX()) * visibleRect.width) / drawRect.width;
-            visibleRect.y = mousePointInImg.y + ((drawRect.y - e.getY()) * visibleRect.height) / drawRect.height;
+            visibleRect.x = mousePointInImg.x + ((drawRect.x - x) * visibleRect.width) / drawRect.width;
+            visibleRect.y = mousePointInImg.y + ((drawRect.y - y) * visibleRect.height) / drawRect.height;
 
             // The position is also limited by the image size
-            checkVisibleRectPos(image, visibleRect);
+            visibleRect.checkRectPos();
 
             synchronized (ImageDisplay.this) {
                 if (ImageDisplay.this.file == file) {
@@ -221,13 +364,31 @@ public class ImageDisplay extends JComponent {
             ImageDisplay.this.repaint();
         }
 
+        /** Zoom in and out, trying to preserve the point of the image that was under the mouse cursor
+         * at the same place */
+        @Override
+        public void mouseWheelMoved(MouseWheelEvent e) {
+            boolean refreshMousePointInImg = false;
+
+            // To avoid issues when the user tries to zoom in on the image borders, this
+            // point is not recalculated as long as e occurs at roughly the same position.
+            if (lastMouseEvent == null || mousePointInImg == null ||
+                ((lastMouseEvent.getX()-e.getX())*(lastMouseEvent.getX()-e.getX())
+                +(lastMouseEvent.getY()-e.getY())*(lastMouseEvent.getY()-e.getY()) > 4*4)) {
+                lastMouseEvent = e;
+                refreshMousePointInImg = true;
+            }
+
+            mouseWheelMovedImpl(e.getX(), e.getY(), e.getWheelRotation(), refreshMousePointInImg);
+        }
+
         /** Center the display on the point that has been clicked */
         @Override
         public void mouseClicked(MouseEvent e) {
             // Move the center to the clicked point.
             File file;
             Image image;
-            Rectangle visibleRect;
+            VisRect visibleRect;
 
             synchronized (ImageDisplay.this) {
                 file = ImageDisplay.this.file;
@@ -238,8 +399,21 @@ public class ImageDisplay extends JComponent {
             if (image == null)
                 return;
 
-            if (e.getButton() != DRAG_BUTTON)
-                return;
+            if (ZOOM_ON_CLICK.get()) {
+                // click notions are less coherent than wheel, refresh mousePointInImg on each click
+                lastMouseEvent = null;
+
+                if (mouseIsZoomSelecting(e) && !isAtMaxZoom(visibleRect)) {
+                    // zoom in if clicked with the zoom button
+                    mouseWheelMovedImpl(e.getX(), e.getY(), -1, true);
+                    return;
+                }
+                if (mouseIsDragging(e)) {
+                    // zoom out if clicked with the drag button
+                    mouseWheelMovedImpl(e.getX(), e.getY(), 1, true);
+                    return;
+                }
+            }
 
             // Calculate the translation to set the clicked point the center of the view.
             Point click = comp2imgCoord(visibleRect, e.getX(), e.getY(), getSize());
@@ -248,7 +422,7 @@ public class ImageDisplay extends JComponent {
             visibleRect.x += click.x - center.x;
             visibleRect.y += click.y - center.y;
 
-            checkVisibleRectPos(image, visibleRect);
+            visibleRect.checkRectPos();
 
             synchronized (ImageDisplay.this) {
                 if (ImageDisplay.this.file == file) {
@@ -262,14 +436,8 @@ public class ImageDisplay extends JComponent {
          * a picture part) */
         @Override
         public void mousePressed(MouseEvent e) {
-            if (image == null) {
-                mouseIsDragging = false;
-                selectedRect = null;
-                return;
-            }
-
             Image image;
-            Rectangle visibleRect;
+            VisRect visibleRect;
 
             synchronized (ImageDisplay.this) {
                 image = ImageDisplay.this.image;
@@ -279,30 +447,20 @@ public class ImageDisplay extends JComponent {
             if (image == null)
                 return;
 
-            if (e.getButton() == DRAG_BUTTON) {
-                mousePointInImg = comp2imgCoord(visibleRect, e.getX(), e.getY(), getSize());
-                mouseIsDragging = true;
-                selectedRect = null;
-            } else if (e.getButton() == ZOOM_BUTTON) {
+            selectedRect = null;
+
+            if (mouseIsDragging(e) || mouseIsZoomSelecting(e))
                 mousePointInImg = comp2imgCoord(visibleRect, e.getX(), e.getY(), getSize());
-                checkPointInVisibleRect(mousePointInImg, visibleRect);
-                mouseIsDragging = false;
-                selectedRect = new Rectangle(mousePointInImg.x, mousePointInImg.y, 0, 0);
-                ImageDisplay.this.repaint();
-            } else {
-                mouseIsDragging = false;
-                selectedRect = null;
-            }
         }
 
         @Override
         public void mouseDragged(MouseEvent e) {
-            if (!mouseIsDragging && selectedRect == null)
+            if (!mouseIsDragging(e) && !mouseIsZoomSelecting(e))
                 return;
 
             File file;
             Image image;
-            Rectangle visibleRect;
+            VisRect visibleRect;
 
             synchronized (ImageDisplay.this) {
                 file = ImageDisplay.this.file;
@@ -310,35 +468,34 @@ public class ImageDisplay extends JComponent {
                 visibleRect = ImageDisplay.this.visibleRect;
             }
 
-            if (image == null) {
-                mouseIsDragging = false;
-                selectedRect = null;
+            if (image == null)
                 return;
-            }
 
-            if (mouseIsDragging) {
+            if (mouseIsDragging(e)) {
                 Point p = comp2imgCoord(visibleRect, e.getX(), e.getY(), getSize());
                 visibleRect.x += mousePointInImg.x - p.x;
                 visibleRect.y += mousePointInImg.y - p.y;
-                checkVisibleRectPos(image, visibleRect);
+                visibleRect.checkRectPos();
                 synchronized (ImageDisplay.this) {
                     if (ImageDisplay.this.file == file) {
                         ImageDisplay.this.visibleRect = visibleRect;
                     }
                 }
                 ImageDisplay.this.repaint();
+            }
 
-            } else if (selectedRect != null) {
+            if (mouseIsZoomSelecting(e)) {
                 Point p = comp2imgCoord(visibleRect, e.getX(), e.getY(), getSize());
-                checkPointInVisibleRect(p, visibleRect);
-                Rectangle rect = new Rectangle(
+                visibleRect.checkPointInside(p);
+                VisRect selectedRect = new VisRect(
                         p.x < mousePointInImg.x ? p.x : mousePointInImg.x,
                         p.y < mousePointInImg.y ? p.y : mousePointInImg.y,
                         p.x < mousePointInImg.x ? mousePointInImg.x - p.x : p.x - mousePointInImg.x,
-                        p.y < mousePointInImg.y ? mousePointInImg.y - p.y : p.y - mousePointInImg.y);
-                checkVisibleRectSize(image, rect);
-                checkVisibleRectPos(image, rect);
-                ImageDisplay.this.selectedRect = rect;
+                        p.y < mousePointInImg.y ? mousePointInImg.y - p.y : p.y - mousePointInImg.y,
+                        visibleRect);
+                selectedRect.checkRectSize();
+                selectedRect.checkRectPos();
+                ImageDisplay.this.selectedRect = selectedRect;
                 ImageDisplay.this.repaint();
             }
 
@@ -346,7 +503,7 @@ public class ImageDisplay extends JComponent {
 
         @Override
         public void mouseReleased(MouseEvent e) {
-            if (!mouseIsDragging && selectedRect == null)
+            if (!mouseIsZoomSelecting(e) || selectedRect == null)
                 return;
 
             File file;
@@ -358,54 +515,47 @@ public class ImageDisplay extends JComponent {
             }
 
             if (image == null) {
-                mouseIsDragging = false;
-                selectedRect = null;
                 return;
             }
 
-            if (mouseIsDragging) {
-                mouseIsDragging = false;
-
-            } else if (selectedRect != null) {
-                int oldWidth = selectedRect.width;
-                int oldHeight = selectedRect.height;
+            int oldWidth = selectedRect.width;
+            int oldHeight = selectedRect.height;
 
-                // Check that the zoom doesn't exceed 2:1
-                if (selectedRect.width < getSize().width / 2) {
-                    selectedRect.width = getSize().width / 2;
-                }
-                if (selectedRect.height < getSize().height / 2) {
-                    selectedRect.height = getSize().height / 2;
-                }
+            // 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;
+            }
 
-                checkVisibleRectSize(image, selectedRect);
-                checkVisibleRectPos(image, selectedRect);
+            selectedRect.checkRectSize();
+            selectedRect.checkRectPos();
 
-                synchronized (ImageDisplay.this) {
-                    if (file == ImageDisplay.this.file) {
-                        ImageDisplay.this.visibleRect = selectedRect;
-                    }
+            synchronized (ImageDisplay.this) {
+                if (file == ImageDisplay.this.file) {
+                    ImageDisplay.this.visibleRect.setBounds(selectedRect);
                 }
-                selectedRect = null;
-                ImageDisplay.this.repaint();
             }
+            selectedRect = null;
+            ImageDisplay.this.repaint();
         }
 
         @Override
@@ -422,21 +572,6 @@ public class ImageDisplay extends JComponent {
         public void mouseMoved(MouseEvent e) {
             // Do nothing
         }
-
-        private void checkPointInVisibleRect(Point p, Rectangle visibleRect) {
-            if (p.x < visibleRect.x) {
-                p.x = visibleRect.x;
-            }
-            if (p.x > visibleRect.x + visibleRect.width) {
-                p.x = visibleRect.x + visibleRect.width;
-            }
-            if (p.y < visibleRect.y) {
-                p.y = visibleRect.y;
-            }
-            if (p.y > visibleRect.y + visibleRect.height) {
-                p.y = visibleRect.y + visibleRect.height;
-            }
-        }
     }
 
     /**
@@ -447,13 +582,14 @@ public class ImageDisplay extends JComponent {
         addMouseListener(mouseListener);
         addMouseWheelListener(mouseListener);
         addMouseMotionListener(mouseListener);
+        Config.getPref().addPreferenceChangeListener(this);
+        preferenceChanged(null);
     }
 
     public void setImage(File file, Integer orientation) {
         synchronized (this) {
             this.file = file;
             image = null;
-            selectedRect = null;
             errorLoading = false;
         }
         repaint();
@@ -475,7 +611,7 @@ public class ImageDisplay extends JComponent {
     public void paintComponent(Graphics g) {
         Image image;
         File file;
-        Rectangle visibleRect;
+        VisRect visibleRect;
         boolean errorLoading;
 
         synchronized (this) {
@@ -510,21 +646,34 @@ public class ImageDisplay extends JComponent {
                     (int) ((size.width - noImageSize.getWidth()) / 2),
                     (int) ((size.height - noImageSize.getHeight()) / 2));
         } else {
+            Rectangle r = new Rectangle(visibleRect);
             Rectangle target = calculateDrawImageRectangle(visibleRect, size);
-            // 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
-            if (selectedRect == null && (target.width < visibleRect.width/2 || target.height < visibleRect.height/2)) {
-                BufferedImage buffImage = ImageProvider.toBufferedImage(image);
-                g.drawImage(ImageProvider.createScaledImage(buffImage, target.width, target.height, RenderingHints.VALUE_INTERPOLATION_BILINEAR),
-                        target.x, target.y, target.x + target.width, target.y + target.height,
-                        visibleRect.x, visibleRect.y, visibleRect.x + target.width, visibleRect.y + target.height,
-                        null);
+            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;
             } else {
-                g.drawImage(image,
-                        target.x, target.y, target.x + target.width, target.y + target.height,
-                        visibleRect.x, visibleRect.y, visibleRect.x + visibleRect.width, visibleRect.y + visibleRect.height,
-                        null);
+                // 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
+                // (might be impl. dependent, exhibited by openjdk 1.8.0_151)
+                if (scale*(r.x+r.width) > Short.MAX_VALUE || scale*(r.y+r.height) > Short.MAX_VALUE) {
+                    image = ImageProvider.toBufferedImage(image, r);
+                    r.x = r.y = 0;
+                }
             }
+
+            g.drawImage(image,
+                    target.x, target.y, target.x + target.width, target.y + target.height,
+                    r.x, r.y, r.x + r.width, r.y + r.height, null);
+
             if (selectedRect != null) {
                 Point topLeft = img2compCoord(visibleRect, selectedRect.x, selectedRect.y, size);
                 Point bottomRight = img2compCoord(visibleRect,
@@ -576,16 +725,22 @@ public class ImageDisplay extends JComponent {
         }
     }
 
-    static Point img2compCoord(Rectangle visibleRect, int xImg, int yImg, Dimension compSize) {
+    static Point img2compCoord(VisRect visibleRect, int xImg, int yImg, Dimension compSize) {
         Rectangle drawRect = calculateDrawImageRectangle(visibleRect, compSize);
         return new Point(drawRect.x + ((xImg - visibleRect.x) * drawRect.width) / visibleRect.width,
                 drawRect.y + ((yImg - visibleRect.y) * drawRect.height) / visibleRect.height);
     }
 
-    static Point comp2imgCoord(Rectangle visibleRect, int xComp, int yComp, Dimension compSize) {
+    static Point comp2imgCoord(VisRect visibleRect, int xComp, int yComp, Dimension compSize) {
         Rectangle drawRect = calculateDrawImageRectangle(visibleRect, compSize);
-        return new Point(visibleRect.x + ((xComp - drawRect.x) * visibleRect.width) / drawRect.width,
-                visibleRect.y + ((yComp - drawRect.y) * visibleRect.height) / drawRect.height);
+        Point p = new Point(
+                        ((xComp - drawRect.x) * visibleRect.width),
+                        ((yComp - drawRect.y) * visibleRect.height));
+        p.x += (((p.x % drawRect.width) << 1) >= drawRect.width) ? drawRect.width : 0;
+        p.y += (((p.y % drawRect.height) << 1) >= drawRect.height) ? drawRect.height : 0;
+        p.x = visibleRect.x + p.x / drawRect.width;
+        p.y = visibleRect.y + p.y / drawRect.height;
+        return p;
     }
 
     static Point getCenterImgCoord(Rectangle visibleRect) {
@@ -593,7 +748,7 @@ public class ImageDisplay extends JComponent {
                          visibleRect.y + visibleRect.height / 2);
     }
 
-    static Rectangle calculateDrawImageRectangle(Rectangle visibleRect, Dimension compSize) {
+    static VisRect calculateDrawImageRectangle(VisRect visibleRect, Dimension compSize) {
         return calculateDrawImageRectangle(visibleRect, new Rectangle(0, 0, compSize.width, compSize.height));
     }
 
@@ -604,7 +759,7 @@ public class ImageDisplay extends JComponent {
      * @param compRect the part of the component where the image should be drawn (in component coordinates)
      * @return the part of compRect with the same width/height ratio as the image
      */
-    static Rectangle calculateDrawImageRectangle(Rectangle imgRect, Rectangle compRect) {
+    static VisRect calculateDrawImageRectangle(VisRect imgRect, Rectangle compRect) {
         int x = 0;
         int y = 0;
         int w = compRect.width;
@@ -621,13 +776,31 @@ public class ImageDisplay extends JComponent {
                 y = (compRect.height - h) / 2;
             }
         }
-        return new Rectangle(x + compRect.x, y + compRect.y, w, h);
+
+        // 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;
+                }
+            }
+        }
+
+        return new VisRect(x + compRect.x, y + compRect.y, w, h, imgRect);
     }
 
     public void zoomBestFitOrOne() {
         File file;
         Image image;
-        Rectangle visibleRect;
+        VisRect visibleRect;
 
         synchronized (this) {
             file = this.file;
@@ -640,14 +813,14 @@ public class ImageDisplay extends JComponent {
 
         if (visibleRect.width != image.getWidth(null) || visibleRect.height != image.getHeight(null)) {
             // The display is not at best fit. => Zoom to best fit
-            visibleRect = new Rectangle(0, 0, image.getWidth(null), image.getHeight(null));
-
+            visibleRect.reset();
         } else {
             // The display is at best fit => zoom to 1:1
             Point center = getCenterImgCoord(visibleRect);
-            visibleRect = new Rectangle(center.x - getWidth() / 2, center.y - getHeight() / 2,
+            visibleRect.setBounds(center.x - getWidth() / 2, center.y - getHeight() / 2,
                     getWidth(), getHeight());
-            checkVisibleRectPos(image, visibleRect);
+            visibleRect.checkRectSize();
+            visibleRect.checkRectPos();
         }
 
         synchronized (this) {
@@ -657,28 +830,4 @@ public class ImageDisplay extends JComponent {
         }
         repaint();
     }
-
-    static void checkVisibleRectPos(Image image, Rectangle visibleRect) {
-        if (visibleRect.x < 0) {
-            visibleRect.x = 0;
-        }
-        if (visibleRect.y < 0) {
-            visibleRect.y = 0;
-        }
-        if (visibleRect.x + visibleRect.width > image.getWidth(null)) {
-            visibleRect.x = image.getWidth(null) - visibleRect.width;
-        }
-        if (visibleRect.y + visibleRect.height > image.getHeight(null)) {
-            visibleRect.y = image.getHeight(null) - visibleRect.height;
-        }
-    }
-
-    static void checkVisibleRectSize(Image image, Rectangle visibleRect) {
-        if (visibleRect.width > image.getWidth(null)) {
-            visibleRect.width = image.getWidth(null);
-        }
-        if (visibleRect.height > image.getHeight(null)) {
-            visibleRect.height = image.getHeight(null);
-        }
-    }
 }
diff --git a/src/org/openstreetmap/josm/gui/layer/geoimage/ImageEntry.java b/src/org/openstreetmap/josm/gui/layer/geoimage/ImageEntry.java
index 2fa6126..110c7de 100644
--- a/src/org/openstreetmap/josm/gui/layer/geoimage/ImageEntry.java
+++ b/src/org/openstreetmap/josm/gui/layer/geoimage/ImageEntry.java
@@ -363,6 +363,7 @@ public final class ImageEntry implements Comparable<ImageEntry>, Cloneable {
             elevation = tmp.elevation;
             gpsTime = tmp.gpsTime;
             exifImgDir = tmp.exifImgDir;
+            isNewGpsData = tmp.isNewGpsData;
             tmp = null;
         }
     }
diff --git a/src/org/openstreetmap/josm/gui/layer/geoimage/ImageViewerDialog.java b/src/org/openstreetmap/josm/gui/layer/geoimage/ImageViewerDialog.java
index 99f826d..cf376d6 100644
--- a/src/org/openstreetmap/josm/gui/layer/geoimage/ImageViewerDialog.java
+++ b/src/org/openstreetmap/josm/gui/layer/geoimage/ImageViewerDialog.java
@@ -16,7 +16,6 @@ import java.text.SimpleDateFormat;
 
 import javax.swing.AbstractAction;
 import javax.swing.Box;
-import javax.swing.ImageIcon;
 import javax.swing.JButton;
 import javax.swing.JComponent;
 import javax.swing.JPanel;
@@ -94,7 +93,7 @@ public final class ImageViewerDialog extends ToggleDialog implements LayerChange
 
         Dimension buttonDim = new Dimension(26, 26);
 
-        ImageAction prevAction = new ImageAction(COMMAND_PREVIOUS, ImageProvider.get("dialogs", "previous"), tr("Previous"));
+        ImageAction prevAction = new ImageAction(COMMAND_PREVIOUS, new ImageProvider("dialogs", "previous"), tr("Previous"));
         btnPrevious = new JButton(prevAction);
         btnPrevious.setPreferredSize(buttonDim);
         Shortcut scPrev = Shortcut.registerShortcut(
@@ -106,7 +105,7 @@ public final class ImageViewerDialog extends ToggleDialog implements LayerChange
         btnPrevious.setEnabled(false);
 
         final String removePhoto = tr("Remove photo from layer");
-        ImageAction delAction = new ImageAction(COMMAND_REMOVE, ImageProvider.get("dialogs", "delete"), removePhoto);
+        ImageAction delAction = new ImageAction(COMMAND_REMOVE, new ImageProvider("dialogs", "delete"), removePhoto);
         JButton btnDelete = new JButton(delAction);
         btnDelete.setPreferredSize(buttonDim);
         Shortcut scDelete = Shortcut.registerShortcut(
@@ -116,7 +115,7 @@ public final class ImageViewerDialog extends ToggleDialog implements LayerChange
         btnDelete.getActionMap().put(removePhoto, delAction);
 
         ImageAction delFromDiskAction = new ImageAction(COMMAND_REMOVE_FROM_DISK,
-                ImageProvider.get("dialogs", "geoimage/deletefromdisk"), tr("Delete image file from disk"));
+                new ImageProvider("dialogs", "geoimage/deletefromdisk"), tr("Delete image file from disk"));
         JButton btnDeleteFromDisk = new JButton(delFromDiskAction);
         btnDeleteFromDisk.setPreferredSize(buttonDim);
         Shortcut scDeleteFromDisk = Shortcut.registerShortcut(
@@ -126,7 +125,7 @@ public final class ImageViewerDialog extends ToggleDialog implements LayerChange
         btnDeleteFromDisk.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(scDeleteFromDisk.getKeyStroke(), deleteImage);
         btnDeleteFromDisk.getActionMap().put(deleteImage, delFromDiskAction);
 
-        ImageAction copyPathAction = new ImageAction(COMMAND_COPY_PATH, ImageProvider.get("copy"), tr("Copy image path"));
+        ImageAction copyPathAction = new ImageAction(COMMAND_COPY_PATH, new ImageProvider("copy"), tr("Copy image path"));
         JButton btnCopyPath = new JButton(copyPathAction);
         btnCopyPath.setPreferredSize(buttonDim);
         Shortcut scCopyPath = Shortcut.registerShortcut(
@@ -136,7 +135,7 @@ public final class ImageViewerDialog extends ToggleDialog implements LayerChange
         btnCopyPath.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(scCopyPath.getKeyStroke(), copyImage);
         btnCopyPath.getActionMap().put(copyImage, copyPathAction);
 
-        ImageAction nextAction = new ImageAction(COMMAND_NEXT, ImageProvider.get("dialogs", "next"), tr("Next"));
+        ImageAction nextAction = new ImageAction(COMMAND_NEXT, new ImageProvider("dialogs", "next"), tr("Next"));
         btnNext = new JButton(nextAction);
         btnNext.setPreferredSize(buttonDim);
         Shortcut scNext = Shortcut.registerShortcut(
@@ -159,15 +158,15 @@ public final class ImageViewerDialog extends ToggleDialog implements LayerChange
         );
 
         tbCentre = new JToggleButton(new ImageAction(COMMAND_CENTERVIEW,
-                ImageProvider.get("dialogs", "centreview"), tr("Center view")));
+                new ImageProvider("dialogs", "centreview"), tr("Center view")));
         tbCentre.setPreferredSize(buttonDim);
 
         JButton btnZoomBestFit = new JButton(new ImageAction(COMMAND_ZOOM,
-                ImageProvider.get("dialogs", "zoom-best-fit"), tr("Zoom best fit and 1:1")));
+                new ImageProvider("dialogs", "zoom-best-fit"), tr("Zoom best fit and 1:1")));
         btnZoomBestFit.setPreferredSize(buttonDim);
 
         btnCollapse = new JButton(new ImageAction(COMMAND_COLLAPSE,
-                ImageProvider.get("dialogs", "collapse"), tr("Move dialog to the side pane")));
+                new ImageProvider("dialogs", "collapse"), tr("Move dialog to the side pane")));
         btnCollapse.setPreferredSize(new Dimension(20, 20));
         btnCollapse.setAlignmentY(Component.TOP_ALIGNMENT);
 
@@ -212,10 +211,12 @@ public final class ImageViewerDialog extends ToggleDialog implements LayerChange
     class ImageAction extends AbstractAction {
         private final String action;
 
-        ImageAction(String action, ImageIcon icon, String toolTipText) {
+        ImageAction(String action, ImageProvider provider, String toolTipText) {
             this.action = action;
             putValue(SHORT_DESCRIPTION, toolTipText);
-            putValue(SMALL_ICON, icon);
+            if (provider != null) {
+                provider.getResource().attachImageIcon(this, true);
+            }
         }
 
         @Override
diff --git a/src/org/openstreetmap/josm/gui/layer/geoimage/ShowThumbnailAction.java b/src/org/openstreetmap/josm/gui/layer/geoimage/ShowThumbnailAction.java
index 7bf2e91..7a7b627 100644
--- a/src/org/openstreetmap/josm/gui/layer/geoimage/ShowThumbnailAction.java
+++ b/src/org/openstreetmap/josm/gui/layer/geoimage/ShowThumbnailAction.java
@@ -27,7 +27,8 @@ public class ShowThumbnailAction extends AbstractAction implements LayerAction {
      * @param layer image layer
      */
     public ShowThumbnailAction(GeoImageLayer layer) {
-        super(tr("Show thumbnails"), ImageProvider.get("dialogs/geoimage/togglegit"));
+        super(tr("Show thumbnails"));
+        new ImageProvider("dialogs/geoimage/togglegit").getResource().attachImageIcon(this, true);
         putValue(SHORT_DESCRIPTION, tr("Show image thumbnails instead of icons."));
         this.layer = layer;
     }
diff --git a/src/org/openstreetmap/josm/gui/layer/geoimage/ThumbsLoader.java b/src/org/openstreetmap/josm/gui/layer/geoimage/ThumbsLoader.java
index 50ce57d..bd1b144 100644
--- a/src/org/openstreetmap/josm/gui/layer/geoimage/ThumbsLoader.java
+++ b/src/org/openstreetmap/josm/gui/layer/geoimage/ThumbsLoader.java
@@ -20,6 +20,7 @@ import org.apache.commons.jcs.access.behavior.ICacheAccess;
 import org.openstreetmap.josm.data.cache.BufferedImageCacheEntry;
 import org.openstreetmap.josm.data.cache.JCSCacheManager;
 import org.openstreetmap.josm.gui.MainApplication;
+import org.openstreetmap.josm.gui.layer.geoimage.ImageDisplay.VisRect;
 import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.ExifReader;
 import org.openstreetmap.josm.tools.Logging;
@@ -140,7 +141,7 @@ public class ThumbsLoader implements Runnable {
         }
 
         Rectangle targetSize = ImageDisplay.calculateDrawImageRectangle(
-                new Rectangle(0, 0, ww, hh),
+                new VisRect(0, 0, ww, hh),
                 new Rectangle(0, 0, maxSize, maxSize));
         BufferedImage scaledBI = new BufferedImage(targetSize.width, targetSize.height, BufferedImage.TYPE_INT_RGB);
         Graphics2D g = scaledBI.createGraphics();
diff --git a/src/org/openstreetmap/josm/gui/layer/gpx/ChooseTrackVisibilityAction.java b/src/org/openstreetmap/josm/gui/layer/gpx/ChooseTrackVisibilityAction.java
index d24d794..ff7000d 100644
--- a/src/org/openstreetmap/josm/gui/layer/gpx/ChooseTrackVisibilityAction.java
+++ b/src/org/openstreetmap/josm/gui/layer/gpx/ChooseTrackVisibilityAction.java
@@ -57,7 +57,8 @@ public class ChooseTrackVisibilityAction extends AbstractAction {
      * @param layer The associated GPX layer
      */
     public ChooseTrackVisibilityAction(final GpxLayer layer) {
-        super(tr("Choose visible tracks"), ImageProvider.get("dialogs/filter"));
+        super(tr("Choose visible tracks"));
+        new ImageProvider("dialogs/filter").getResource().attachImageIcon(this, true);
         this.layer = layer;
         putValue("help", ht("/Action/ChooseTrackVisibility"));
     }
diff --git a/src/org/openstreetmap/josm/gui/layer/gpx/ConvertToDataLayerAction.java b/src/org/openstreetmap/josm/gui/layer/gpx/ConvertToDataLayerAction.java
index 597498b..95b605b 100644
--- a/src/org/openstreetmap/josm/gui/layer/gpx/ConvertToDataLayerAction.java
+++ b/src/org/openstreetmap/josm/gui/layer/gpx/ConvertToDataLayerAction.java
@@ -55,7 +55,8 @@ public abstract class ConvertToDataLayerAction<T extends Layer> extends Abstract
      * @param layer source layer
      */
     protected ConvertToDataLayerAction(final T layer) {
-        super(tr("Convert to data layer"), ImageProvider.get("converttoosm"));
+        super(tr("Convert to data layer"));
+        new ImageProvider("converttoosm").getResource().attachImageIcon(this, true);
         this.layer = layer;
         putValue("help", ht("/Action/ConvertToDataLayer"));
     }
diff --git a/src/org/openstreetmap/josm/gui/layer/gpx/CustomizeDrawingAction.java b/src/org/openstreetmap/josm/gui/layer/gpx/CustomizeDrawingAction.java
index 785f1dc..5d39b79 100644
--- a/src/org/openstreetmap/josm/gui/layer/gpx/CustomizeDrawingAction.java
+++ b/src/org/openstreetmap/josm/gui/layer/gpx/CustomizeDrawingAction.java
@@ -53,7 +53,8 @@ public class CustomizeDrawingAction extends AbstractAction implements LayerActio
     }
 
     private CustomizeDrawingAction() {
-        super(tr("Customize track drawing"), ImageProvider.get("mapmode/addsegment"));
+        super(tr("Customize track drawing"));
+        new ImageProvider("mapmode/addsegment").getResource().attachImageIcon(this, true);
         putValue("help", ht("/Action/GPXLayerCustomizeLineDrawing"));
     }
 
diff --git a/src/org/openstreetmap/josm/gui/layer/gpx/DownloadWmsAlongTrackAction.java b/src/org/openstreetmap/josm/gui/layer/gpx/DownloadWmsAlongTrackAction.java
index 0e130ca..30cc8ba 100644
--- a/src/org/openstreetmap/josm/gui/layer/gpx/DownloadWmsAlongTrackAction.java
+++ b/src/org/openstreetmap/josm/gui/layer/gpx/DownloadWmsAlongTrackAction.java
@@ -42,7 +42,8 @@ public class DownloadWmsAlongTrackAction extends AbstractAction {
      * @param data that represents GPX track, along which data should be downloaded
      */
     public DownloadWmsAlongTrackAction(final GpxData data) {
-        super(tr("Precache imagery tiles along this track"), ImageProvider.get("downloadalongtrack"));
+        super(tr("Precache imagery tiles along this track"));
+        new ImageProvider("downloadalongtrack").getResource().attachImageIcon(this, true);
         this.data = data;
     }
 
diff --git a/src/org/openstreetmap/josm/gui/layer/gpx/ImportAudioAction.java b/src/org/openstreetmap/josm/gui/layer/gpx/ImportAudioAction.java
index a276bb4..7e5cb06 100644
--- a/src/org/openstreetmap/josm/gui/layer/gpx/ImportAudioAction.java
+++ b/src/org/openstreetmap/josm/gui/layer/gpx/ImportAudioAction.java
@@ -68,7 +68,8 @@ public class ImportAudioAction extends AbstractAction {
      * @param layer The associated GPX layer
      */
     public ImportAudioAction(final GpxLayer layer) {
-        super(tr("Import Audio"), ImageProvider.get("importaudio"));
+        super(tr("Import Audio"));
+        new ImageProvider("importaudio").getResource().attachImageIcon(this, true);
         this.layer = layer;
         putValue("help", ht("/Action/ImportAudio"));
     }
diff --git a/src/org/openstreetmap/josm/gui/layer/gpx/ImportImagesAction.java b/src/org/openstreetmap/josm/gui/layer/gpx/ImportImagesAction.java
index f520073..05af2a4 100644
--- a/src/org/openstreetmap/josm/gui/layer/gpx/ImportImagesAction.java
+++ b/src/org/openstreetmap/josm/gui/layer/gpx/ImportImagesAction.java
@@ -35,7 +35,8 @@ public class ImportImagesAction extends AbstractAction {
      * @param layer The layer this action should be for
      */
     public ImportImagesAction(final GpxLayer layer) {
-        super(tr("Import images"), ImageProvider.get("dialogs/geoimage"));
+        super(tr("Import images"));
+        new ImageProvider("dialogs/geoimage").getResource().attachImageIcon(this, true);
         this.layer = layer;
         putValue("help", ht("/Action/ImportImages"));
     }
diff --git a/src/org/openstreetmap/josm/gui/layer/gpx/MarkersFromNamedPointsAction.java b/src/org/openstreetmap/josm/gui/layer/gpx/MarkersFromNamedPointsAction.java
index 15aa0f0..f92463c 100644
--- a/src/org/openstreetmap/josm/gui/layer/gpx/MarkersFromNamedPointsAction.java
+++ b/src/org/openstreetmap/josm/gui/layer/gpx/MarkersFromNamedPointsAction.java
@@ -25,7 +25,8 @@ public class MarkersFromNamedPointsAction extends AbstractAction {
      * @param layer The layer this action is for
      */
     public MarkersFromNamedPointsAction(final GpxLayer layer) {
-        super(tr("Markers From Named Points"), ImageProvider.get("addmarkers"));
+        super(tr("Markers From Named Points"));
+        new ImageProvider("addmarkers").getResource().attachImageIcon(this, true);
         this.layer = layer;
         putValue("help", ht("/Action/MarkersFromNamedPoints"));
     }
diff --git a/src/org/openstreetmap/josm/gui/layer/markerlayer/MarkerLayer.java b/src/org/openstreetmap/josm/gui/layer/markerlayer/MarkerLayer.java
index b9a08b8..fd555d8 100644
--- a/src/org/openstreetmap/josm/gui/layer/markerlayer/MarkerLayer.java
+++ b/src/org/openstreetmap/josm/gui/layer/markerlayer/MarkerLayer.java
@@ -483,7 +483,8 @@ public class MarkerLayer extends Layer implements JumpToMarkerLayer {
         private final transient MarkerLayer layer;
 
         public ShowHideMarkerText(MarkerLayer layer) {
-            super(tr("Show Text/Icons"), ImageProvider.get("dialogs", "showhide"));
+            super(tr("Show Text/Icons"));
+            new ImageProvider("dialogs", "showhide").getResource().attachImageIcon(this, true);
             putValue(SHORT_DESCRIPTION, tr("Toggle visible state of the marker text and icons."));
             putValue("help", ht("/Action/ShowHideTextIcons"));
             this.layer = layer;
@@ -514,7 +515,8 @@ public class MarkerLayer extends Layer implements JumpToMarkerLayer {
          * Constructs a new {@code SynchronizeAudio} action.
          */
         SynchronizeAudio() {
-            super(tr("Synchronize Audio"), ImageProvider.get("audio-sync"));
+            super(tr("Synchronize Audio"));
+            new ImageProvider("audio-sync").getResource().attachImageIcon(this, true);
             putValue("help", ht("/Action/SynchronizeAudio"));
         }
 
@@ -551,7 +553,8 @@ public class MarkerLayer extends Layer implements JumpToMarkerLayer {
     private class MoveAudio extends AbstractAction {
 
         MoveAudio() {
-            super(tr("Make Audio Marker at Play Head"), ImageProvider.get("addmarkers"));
+            super(tr("Make Audio Marker at Play Head"));
+            new ImageProvider("addmarkers").getResource().attachImageIcon(this, true);
             putValue("help", ht("/Action/MakeAudioMarkerAtPlayHead"));
         }
 
diff --git a/src/org/openstreetmap/josm/gui/mappaint/ElemStyles.java b/src/org/openstreetmap/josm/gui/mappaint/ElemStyles.java
index e8ed1c5..7ac3cf8 100644
--- a/src/org/openstreetmap/josm/gui/mappaint/ElemStyles.java
+++ b/src/org/openstreetmap/josm/gui/mappaint/ElemStyles.java
@@ -11,8 +11,6 @@ import java.util.Map;
 import java.util.Map.Entry;
 import java.util.Optional;
 
-import org.openstreetmap.josm.spi.preferences.PreferenceChangeEvent;
-import org.openstreetmap.josm.spi.preferences.PreferenceChangedListener;
 import org.openstreetmap.josm.data.osm.Node;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.data.osm.Relation;
@@ -34,6 +32,8 @@ import org.openstreetmap.josm.gui.mappaint.styleelement.TextElement;
 import org.openstreetmap.josm.gui.mappaint.styleelement.TextLabel;
 import org.openstreetmap.josm.gui.util.GuiHelper;
 import org.openstreetmap.josm.spi.preferences.Config;
+import org.openstreetmap.josm.spi.preferences.PreferenceChangeEvent;
+import org.openstreetmap.josm.spi.preferences.PreferenceChangedListener;
 import org.openstreetmap.josm.tools.Pair;
 import org.openstreetmap.josm.tools.Utils;
 
@@ -88,6 +88,7 @@ public class ElemStyles implements PreferenceChangedListener {
         GuiHelper.runInEDT(() -> {
             cacheIdx++;
             preferenceCache.clear();
+            backgroundColorCache = null;
         });
     }
 
@@ -469,7 +470,6 @@ public class ElemStyles implements PreferenceChangedListener {
      */
     void clear() {
         styleSources.clear();
-        invalidate();
     }
 
     /**
@@ -478,7 +478,6 @@ public class ElemStyles implements PreferenceChangedListener {
      */
     void add(StyleSource style) {
         styleSources.add(style);
-        invalidate();
     }
 
     /**
@@ -487,9 +486,7 @@ public class ElemStyles implements PreferenceChangedListener {
      * @return {@code true} if this list contained the specified element
      */
     boolean remove(StyleSource style) {
-        boolean result = styleSources.remove(style);
-        invalidate();
-        return result;
+        return styleSources.remove(style);
     }
 
     /**
@@ -499,11 +496,6 @@ public class ElemStyles implements PreferenceChangedListener {
     void setStyleSources(Collection<StyleSource> sources) {
         styleSources.clear();
         styleSources.addAll(sources);
-        invalidate();
-    }
-
-    private void invalidate() {
-        backgroundColorCache = null;
     }
 
     /**
diff --git a/src/org/openstreetmap/josm/gui/mappaint/mapcss/ExpressionFactory.java b/src/org/openstreetmap/josm/gui/mappaint/mapcss/ExpressionFactory.java
index 5a7becd..c63c3c1 100644
--- a/src/org/openstreetmap/josm/gui/mappaint/mapcss/ExpressionFactory.java
+++ b/src/org/openstreetmap/josm/gui/mappaint/mapcss/ExpressionFactory.java
@@ -507,6 +507,18 @@ public final class ExpressionFactory {
         }
 
         /**
+         * Returns the OSM id of the object's parent.
+         * <p>
+         * Parent must be matched by child selector.
+         * @param env the environment
+         * @return the OSM id of the object's parent, if available, or {@code null}
+         * @see OsmPrimitive#getUniqueId()
+         */
+        public static Long parent_osm_id(final Environment env) { // NO_UCD (unused code)
+            return env.parent == null ? null : env.parent.getUniqueId();
+        }
+
+        /**
          * Determines whether the object has a tag with the given key.
          * @param env the environment
          * @param key the OSM key
diff --git a/src/org/openstreetmap/josm/gui/oauth/OAuthAuthorizationWizard.java b/src/org/openstreetmap/josm/gui/oauth/OAuthAuthorizationWizard.java
index db5a450..2e651fb 100644
--- a/src/org/openstreetmap/josm/gui/oauth/OAuthAuthorizationWizard.java
+++ b/src/org/openstreetmap/josm/gui/oauth/OAuthAuthorizationWizard.java
@@ -34,8 +34,6 @@ import javax.swing.JPanel;
 import javax.swing.JScrollPane;
 import javax.swing.SwingUtilities;
 import javax.swing.UIManager;
-import javax.swing.event.HyperlinkEvent;
-import javax.swing.event.HyperlinkListener;
 import javax.swing.text.html.HTMLEditorKit;
 
 import org.openstreetmap.josm.Main;
@@ -51,7 +49,6 @@ import org.openstreetmap.josm.io.OsmApi;
 import org.openstreetmap.josm.tools.CheckParameterUtil;
 import org.openstreetmap.josm.tools.ImageProvider;
 import org.openstreetmap.josm.tools.InputMapUtils;
-import org.openstreetmap.josm.tools.OpenBrowser;
 import org.openstreetmap.josm.tools.UserCancelException;
 import org.openstreetmap.josm.tools.Utils;
 
@@ -136,7 +133,7 @@ public class OAuthAuthorizationWizard extends JDialog {
                         + "on your behalf (<a href=\"{0}\">more info...</a>).", "http://oauth.net/")
                         + "</body></html>"
         );
-        pnlMessage.getEditorPane().addHyperlinkListener(new ExternalBrowserLauncher());
+        pnlMessage.enableClickableHyperlinks();
         pnl.add(pnlMessage, gc);
 
         // the authorisation procedure
@@ -422,13 +419,4 @@ public class OAuthAuthorizationWizard extends JDialog {
             new CancelAction().cancel();
         }
     }
-
-    static class ExternalBrowserLauncher implements HyperlinkListener {
-        @Override
-        public void hyperlinkUpdate(HyperlinkEvent e) {
-            if (e.getEventType().equals(HyperlinkEvent.EventType.ACTIVATED)) {
-                OpenBrowser.displayUrl(e.getDescription());
-            }
-        }
-    }
 }
diff --git a/src/org/openstreetmap/josm/gui/preferences/PreferenceTabbedPane.java b/src/org/openstreetmap/josm/gui/preferences/PreferenceTabbedPane.java
index 9755e0b..1b7c2ca 100644
--- a/src/org/openstreetmap/josm/gui/preferences/PreferenceTabbedPane.java
+++ b/src/org/openstreetmap/josm/gui/preferences/PreferenceTabbedPane.java
@@ -503,12 +503,11 @@ public final class PreferenceTabbedPane extends JTabbedPane implements MouseWhee
                 Logging.warn("Ignoring preferences "+setting);
             }
         }
-        try {
-            if (sel != null) {
-                setSelectedComponent(sel);
+        if (sel != null) {
+            int index = indexOfComponent(sel);
+            if (index > -1) {
+                setSelectedIndex(index);
             }
-        } catch (IllegalArgumentException e) {
-            Logging.warn(e);
         }
     }
 
diff --git a/src/org/openstreetmap/josm/gui/preferences/SourceEditor.java b/src/org/openstreetmap/josm/gui/preferences/SourceEditor.java
index ed6b982..9d6e882 100644
--- a/src/org/openstreetmap/josm/gui/preferences/SourceEditor.java
+++ b/src/org/openstreetmap/josm/gui/preferences/SourceEditor.java
@@ -1053,7 +1053,7 @@ public abstract class SourceEditor extends JPanel {
 
         MoveUpDownAction(boolean isDown) {
             increment = isDown ? 1 : -1;
-            putValue(SMALL_ICON, isDown ? ImageProvider.get("dialogs", "down") : ImageProvider.get("dialogs", "up"));
+            new ImageProvider("dialogs", isDown ? "down" : "up").getResource().attachImageIcon(this, true);
             putValue(SHORT_DESCRIPTION, isDown ? tr("Move the selected entry one row down.") : tr("Move the selected entry one row up."));
             updateEnabledState();
         }
diff --git a/src/org/openstreetmap/josm/gui/preferences/advanced/AbstractTableListEditor.java b/src/org/openstreetmap/josm/gui/preferences/advanced/AbstractTableListEditor.java
index 867c21f..55371f8 100644
--- a/src/org/openstreetmap/josm/gui/preferences/advanced/AbstractTableListEditor.java
+++ b/src/org/openstreetmap/josm/gui/preferences/advanced/AbstractTableListEditor.java
@@ -68,7 +68,7 @@ public abstract class AbstractTableListEditor<T> extends AbstractListEditor<T> {
         NewEntryAction() {
             putValue(NAME, tr("New"));
             putValue(SHORT_DESCRIPTION, tr("add entry"));
-            putValue(SMALL_ICON, ImageProvider.get("dialogs", "add"));
+            new ImageProvider("dialogs", "add").getResource().attachImageIcon(this, true);
         }
 
         @Override
@@ -81,7 +81,7 @@ public abstract class AbstractTableListEditor<T> extends AbstractListEditor<T> {
         RemoveEntryAction() {
             putValue(NAME, tr("Remove"));
             putValue(SHORT_DESCRIPTION, tr("Remove the selected entry"));
-            putValue(SMALL_ICON, ImageProvider.get("dialogs", "delete"));
+            new ImageProvider("dialogs", "delete").getResource().attachImageIcon(this, true);
             updateEnabledState();
         }
 
diff --git a/src/org/openstreetmap/josm/gui/preferences/display/LafPreference.java b/src/org/openstreetmap/josm/gui/preferences/display/LafPreference.java
index 0fedc11..9e1f601 100644
--- a/src/org/openstreetmap/josm/gui/preferences/display/LafPreference.java
+++ b/src/org/openstreetmap/josm/gui/preferences/display/LafPreference.java
@@ -81,6 +81,7 @@ public class LafPreference implements SubPreferenceSetting {
     VerticallyScrollablePanel panel;
     private final JCheckBox showSplashScreen = new JCheckBox(tr("Show splash screen at startup"));
     private final JCheckBox showID = new JCheckBox(tr("Show object ID in selection lists"));
+    private final JCheckBox showCoor = new JCheckBox(tr("Show node coordinates in selection lists"));
     private final JCheckBox showLocalizedName = new JCheckBox(tr("Show localized name in selection lists"));
     private final JCheckBox modeless = new JCheckBox(tr("Modeless working (Potlatch style)"));
     private final JCheckBox dynamicButtons = new JCheckBox(tr("Dynamic buttons in side menus"));
@@ -131,6 +132,10 @@ public class LafPreference implements SubPreferenceSetting {
         showID.setToolTipText(tr("Show object ID in selection lists"));
         showID.setSelected(Config.getPref().getBoolean("osm-primitives.showid", false));
 
+        // Show Coordinates in selection
+        showCoor.setToolTipText(tr("Show node coordinates in selection lists"));
+        showCoor.setSelected(Config.getPref().getBoolean("osm-primitives.showcoor", false));
+
         // Show localized names
         showLocalizedName.setToolTipText(tr("Show localized name in selection lists, if available"));
         showLocalizedName.setSelected(Config.getPref().getBoolean("osm-primitives.localize-name", true));
@@ -141,6 +146,7 @@ public class LafPreference implements SubPreferenceSetting {
         ExpertToggleAction.addVisibilitySwitcher(modeless);
 
         panel.add(showID, GBC.eop().insets(20, 0, 0, 0));
+        panel.add(showCoor, GBC.eop().insets(20, 0, 0, 0));
         panel.add(showLocalizedName, GBC.eop().insets(20, 0, 0, 0));
         panel.add(modeless, GBC.eop().insets(20, 0, 0, 0));
 
@@ -204,6 +210,7 @@ public class LafPreference implements SubPreferenceSetting {
         boolean mod = false;
         Config.getPref().putBoolean("draw.splashscreen", showSplashScreen.isSelected());
         Config.getPref().putBoolean("osm-primitives.showid", showID.isSelected());
+        Config.getPref().putBoolean("osm-primitives.showcoor", showCoor.isSelected());
         Config.getPref().putBoolean("osm-primitives.localize-name", showLocalizedName.isSelected());
         MapFrame.MODELESS.put(modeless.isSelected());
         Config.getPref().putBoolean(ToggleDialog.PROP_DYNAMIC_BUTTONS.getKey(), dynamicButtons.isSelected());
diff --git a/src/org/openstreetmap/josm/gui/preferences/imagery/ImageryPreference.java b/src/org/openstreetmap/josm/gui/preferences/imagery/ImageryPreference.java
index 14f2816..b25d214 100644
--- a/src/org/openstreetmap/josm/gui/preferences/imagery/ImageryPreference.java
+++ b/src/org/openstreetmap/josm/gui/preferences/imagery/ImageryPreference.java
@@ -38,7 +38,6 @@ import javax.swing.JTabbedPane;
 import javax.swing.JTable;
 import javax.swing.JToolBar;
 import javax.swing.UIManager;
-import javax.swing.event.HyperlinkEvent.EventType;
 import javax.swing.event.ListSelectionEvent;
 import javax.swing.event.ListSelectionListener;
 import javax.swing.table.DefaultTableCellRenderer;
@@ -73,7 +72,6 @@ import org.openstreetmap.josm.tools.GBC;
 import org.openstreetmap.josm.tools.ImageProvider;
 import org.openstreetmap.josm.tools.LanguageInfo;
 import org.openstreetmap.josm.tools.Logging;
-import org.openstreetmap.josm.tools.OpenBrowser;
 
 /**
  * Imagery preferences, including imagery providers, settings and offsets.
@@ -370,11 +368,7 @@ public final class ImageryPreference extends DefaultTabPreferenceSetting {
 
             HtmlPanel help = new HtmlPanel(tr("New default entries can be added in the <a href=\"{0}\">Wiki</a>.",
                 Main.getJOSMWebsite()+"/wiki/Maps"));
-            help.getEditorPane().addHyperlinkListener(e -> {
-                if (e.getEventType() == EventType.ACTIVATED) {
-                    OpenBrowser.displayUrl(e.getURL().toString());
-                }
-            });
+            help.enableClickableHyperlinks();
             add(help, GBC.eol().insets(10, 0, 0, 10).fill(GBC.HORIZONTAL));
 
             ActivateAction activate = new ActivateAction();
@@ -508,7 +502,7 @@ public final class ImageryPreference extends DefaultTabPreferenceSetting {
                 default:
                     break;
                 }
-                putValue(SMALL_ICON, ImageProvider.get("dialogs", icon));
+                new ImageProvider("dialogs", icon).getResource().attachImageIcon(this, true);
                 this.type = type;
             }
 
@@ -556,7 +550,7 @@ public final class ImageryPreference extends DefaultTabPreferenceSetting {
             RemoveEntryAction() {
                 putValue(NAME, tr("Remove"));
                 putValue(SHORT_DESCRIPTION, tr("Remove entry"));
-                putValue(SMALL_ICON, ImageProvider.get("dialogs", "delete"));
+                new ImageProvider("dialogs", "delete").getResource().attachImageIcon(this, true);
                 updateEnabledState();
             }
 
@@ -586,7 +580,7 @@ public final class ImageryPreference extends DefaultTabPreferenceSetting {
             ActivateAction() {
                 putValue(NAME, tr("Activate"));
                 putValue(SHORT_DESCRIPTION, tr("copy selected defaults"));
-                putValue(SMALL_ICON, ImageProvider.get("preferences", "activate-down"));
+                new ImageProvider("preferences", "activate-down").getResource().attachImageIcon(this, true);
             }
 
             protected void updateEnabledState() {
@@ -652,7 +646,7 @@ public final class ImageryPreference extends DefaultTabPreferenceSetting {
              */
             ReloadAction() {
                 putValue(SHORT_DESCRIPTION, tr("Update default entries"));
-                putValue(SMALL_ICON, ImageProvider.get("dialogs", "refresh"));
+                new ImageProvider("dialogs", "refresh").getResource().attachImageIcon(this, true);
             }
 
             @Override
diff --git a/src/org/openstreetmap/josm/gui/preferences/plugin/PluginListPanel.java b/src/org/openstreetmap/josm/gui/preferences/plugin/PluginListPanel.java
index 1025a19..d0db379 100644
--- a/src/org/openstreetmap/josm/gui/preferences/plugin/PluginListPanel.java
+++ b/src/org/openstreetmap/josm/gui/preferences/plugin/PluginListPanel.java
@@ -14,12 +14,10 @@ import java.util.List;
 import javax.swing.JLabel;
 import javax.swing.SwingConstants;
 import javax.swing.SwingUtilities;
-import javax.swing.event.HyperlinkEvent.EventType;
 
 import org.openstreetmap.josm.gui.widgets.HtmlPanel;
 import org.openstreetmap.josm.gui.widgets.VerticallyScrollablePanel;
 import org.openstreetmap.josm.plugins.PluginInformation;
-import org.openstreetmap.josm.tools.OpenBrowser;
 
 /**
  * A panel displaying the list of known plugins.
@@ -156,11 +154,7 @@ public class PluginListPanel extends VerticallyScrollablePanel {
 
             HtmlPanel description = new HtmlPanel();
             description.setText(pi.getDescriptionAsHtml());
-            description.getEditorPane().addHyperlinkListener(e -> {
-                if (e.getEventType() == EventType.ACTIVATED) {
-                    OpenBrowser.displayUrl(e.getURL().toString());
-                }
-            });
+            description.enableClickableHyperlinks();
             lblPlugin.setLabelFor(description);
 
             gbc.gridx = 1;
diff --git a/src/org/openstreetmap/josm/gui/preferences/plugin/PluginUpdatePolicyPanel.java b/src/org/openstreetmap/josm/gui/preferences/plugin/PluginUpdatePolicyPanel.java
index 9436c84..ce52324 100644
--- a/src/org/openstreetmap/josm/gui/preferences/plugin/PluginUpdatePolicyPanel.java
+++ b/src/org/openstreetmap/josm/gui/preferences/plugin/PluginUpdatePolicyPanel.java
@@ -24,7 +24,6 @@ import org.openstreetmap.josm.gui.widgets.JosmTextField;
 import org.openstreetmap.josm.gui.widgets.SelectAllOnFocusGainedDecorator;
 import org.openstreetmap.josm.plugins.PluginHandler;
 import org.openstreetmap.josm.spi.preferences.Config;
-import org.openstreetmap.josm.tools.Logging;
 
 /**
  * A panel for configuring whether JOSM shall update plugins at startup.
@@ -183,24 +182,7 @@ public class PluginUpdatePolicyPanel extends JPanel {
                         Config.getPref().get("pluginmanager.time-based-update.policy", "ask"))).orElse(Policy.ASK))
                 .setSelected(true);
 
-        String pref = Config.getPref().get("pluginmanager.warntime", null);
-        int days = 0;
-        if (pref != null) {
-            // remove legacy preference
-            Config.getPref().put("pluginmanager.warntime", null);
-            try {
-                days = Integer.parseInt(pref.trim());
-            } catch (NumberFormatException e) {
-                // ignore - load from preference pluginmanager.time-based-update.interval
-                Logging.trace(e);
-            }
-            if (days <= 0) {
-                days = PluginHandler.DEFAULT_TIME_BASED_UPDATE_INTERVAL;
-            }
-        }
-        if (days == 0) {
-            days = Config.getPref().getInt("pluginmanager.time-based-update.interval", PluginHandler.DEFAULT_TIME_BASED_UPDATE_INTERVAL);
-        }
+        int days = Config.getPref().getInt("pluginmanager.time-based-update.interval", PluginHandler.DEFAULT_TIME_BASED_UPDATE_INTERVAL);
         tfUpdateInterval.setText(Integer.toString(days));
     }
 
diff --git a/src/org/openstreetmap/josm/gui/preferences/projection/UTMProjectionChoice.java b/src/org/openstreetmap/josm/gui/preferences/projection/UTMProjectionChoice.java
index 93c464f..2b21f1a 100644
--- a/src/org/openstreetmap/josm/gui/preferences/projection/UTMProjectionChoice.java
+++ b/src/org/openstreetmap/josm/gui/preferences/projection/UTMProjectionChoice.java
@@ -15,6 +15,7 @@ import javax.swing.JLabel;
 import javax.swing.JPanel;
 import javax.swing.JRadioButton;
 
+import org.openstreetmap.josm.data.projection.proj.TransverseMercator.Hemisphere;
 import org.openstreetmap.josm.tools.GBC;
 import org.openstreetmap.josm.tools.Logging;
 
@@ -25,14 +26,6 @@ import org.openstreetmap.josm.tools.Logging;
  */
 public class UTMProjectionChoice extends ListProjectionChoice {
 
-    /** Earth emispheres **/
-    public enum Hemisphere {
-        /** North emisphere */
-        North,
-        /** South emisphere */
-        South
-    }
-
     private static final Hemisphere DEFAULT_HEMISPHERE = Hemisphere.North;
 
     private Hemisphere hemisphere;
diff --git a/src/org/openstreetmap/josm/gui/preferences/server/OsmApiUrlInputPanel.java b/src/org/openstreetmap/josm/gui/preferences/server/OsmApiUrlInputPanel.java
index 74ac9f0..b5b493c 100644
--- a/src/org/openstreetmap/josm/gui/preferences/server/OsmApiUrlInputPanel.java
+++ b/src/org/openstreetmap/josm/gui/preferences/server/OsmApiUrlInputPanel.java
@@ -58,7 +58,7 @@ public class OsmApiUrlInputPanel extends JPanel {
     /** indicates whether to use the default OSM URL or not */
     private JCheckBox cbUseDefaultServerUrl;
     private final transient ListProperty SERVER_URL_HISTORY = new ListProperty("osm-server.url-history", Arrays.asList(
-            "http://api06.dev.openstreetmap.org/api", "http://master.apis.dev.openstreetmap.org/api"));
+            "https://api06.dev.openstreetmap.org/api", "https://master.apis.dev.openstreetmap.org/api"));
 
     private transient ApiUrlPropagator propagator;
 
diff --git a/src/org/openstreetmap/josm/gui/preferences/server/ProxyPreferencesPanel.java b/src/org/openstreetmap/josm/gui/preferences/server/ProxyPreferencesPanel.java
index d84c9bf..c433dbc 100644
--- a/src/org/openstreetmap/josm/gui/preferences/server/ProxyPreferencesPanel.java
+++ b/src/org/openstreetmap/josm/gui/preferences/server/ProxyPreferencesPanel.java
@@ -266,22 +266,8 @@ public class ProxyPreferencesPanel extends VerticallyScrollablePanel {
         ProxyPolicy pp = Optional.ofNullable(ProxyPolicy.fromName(Config.getPref().get(DefaultProxySelector.PROXY_POLICY, null)))
                 .orElse(ProxyPolicy.NO_PROXY);
         rbProxyPolicy.get(pp).setSelected(true);
-        String value = Config.getPref().get("proxy.host", null);
-        if (value != null) {
-            // legacy support
-            tfProxyHttpHost.setText(value);
-            Config.getPref().put("proxy.host", null);
-        } else {
-            tfProxyHttpHost.setText(Config.getPref().get(DefaultProxySelector.PROXY_HTTP_HOST, ""));
-        }
-        value = Config.getPref().get("proxy.port", null);
-        if (value != null) {
-            // legacy support
-            tfProxyHttpPort.setText(value);
-            Config.getPref().put("proxy.port", null);
-        } else {
-            tfProxyHttpPort.setText(Config.getPref().get(DefaultProxySelector.PROXY_HTTP_PORT, ""));
-        }
+        tfProxyHttpHost.setText(Config.getPref().get(DefaultProxySelector.PROXY_HTTP_HOST, ""));
+        tfProxyHttpPort.setText(Config.getPref().get(DefaultProxySelector.PROXY_HTTP_PORT, ""));
         tfProxySocksHost.setText(Config.getPref().get(DefaultProxySelector.PROXY_SOCKS_HOST, ""));
         tfProxySocksPort.setText(Config.getPref().get(DefaultProxySelector.PROXY_SOCKS_PORT, ""));
 
diff --git a/src/org/openstreetmap/josm/gui/tagging/ac/AutoCompletingComboBox.java b/src/org/openstreetmap/josm/gui/tagging/ac/AutoCompletingComboBox.java
index 5fe8fad..986e636 100644
--- a/src/org/openstreetmap/josm/gui/tagging/ac/AutoCompletingComboBox.java
+++ b/src/org/openstreetmap/josm/gui/tagging/ac/AutoCompletingComboBox.java
@@ -75,7 +75,9 @@ public class AutoCompletingComboBox extends JosmComboBox<AutoCompletionItem> {
                 if (old != null) {
                     sysSel.setContents(old, null);
                 }
-            } else {
+            } else if (e != null && e.getOppositeComponent() != null) {
+                // Select all characters when the change of focus occurs inside JOSM only.
+                // When switching from another application, it is annoying, see #13747
                 editorComponent.selectAll();
             }
         }
diff --git a/src/org/openstreetmap/josm/gui/tagging/ac/AutoCompletingTextField.java b/src/org/openstreetmap/josm/gui/tagging/ac/AutoCompletingTextField.java
index 00a2bd7..653acab 100644
--- a/src/org/openstreetmap/josm/gui/tagging/ac/AutoCompletingTextField.java
+++ b/src/org/openstreetmap/josm/gui/tagging/ac/AutoCompletingTextField.java
@@ -129,8 +129,13 @@ public class AutoCompletingTextField extends JosmTextField implements ComboBoxEd
     protected final void init() {
         addFocusListener(
                 new FocusAdapter() {
-                    @Override public void focusGained(FocusEvent e) {
-                        selectAll();
+                    @Override
+                    public void focusGained(FocusEvent e) {
+                        if (e != null && e.getOppositeComponent() != null) {
+                            // Select all characters when the change of focus occurs inside JOSM only.
+                            // When switching from another application, it is annoying, see #13747
+                            selectAll();
+                        }
                         applyFilter(getText());
                     }
                 }
@@ -138,7 +143,6 @@ public class AutoCompletingTextField extends JosmTextField implements ComboBoxEd
 
         addKeyListener(
                 new KeyAdapter() {
-
                     @Override
                     public void keyReleased(KeyEvent e) {
                         if (getText().isEmpty()) {
diff --git a/src/org/openstreetmap/josm/gui/tagging/ac/AutoCompletionListItem.java b/src/org/openstreetmap/josm/gui/tagging/ac/AutoCompletionListItem.java
index c84b0e2..d6e20f5 100644
--- a/src/org/openstreetmap/josm/gui/tagging/ac/AutoCompletionListItem.java
+++ b/src/org/openstreetmap/josm/gui/tagging/ac/AutoCompletionListItem.java
@@ -85,7 +85,7 @@ public class AutoCompletionListItem implements Comparable<AutoCompletionListItem
      * @throws IllegalArgumentException if value if null
      */
     public void setValue(String value) {
-        item.setValue(value);
+        throw new UnsupportedOperationException("setValue() is no longer supported");
     }
 
     @Override
diff --git a/src/org/openstreetmap/josm/gui/tagging/ac/AutoCompletionManager.java b/src/org/openstreetmap/josm/gui/tagging/ac/AutoCompletionManager.java
index 2d20eee..d4bc092 100644
--- a/src/org/openstreetmap/josm/gui/tagging/ac/AutoCompletionManager.java
+++ b/src/org/openstreetmap/josm/gui/tagging/ac/AutoCompletionManager.java
@@ -331,7 +331,7 @@ public class AutoCompletionManager implements DataSetListener {
     }
 
     /**
-     * Populates the an {@link AutoCompletionList} with the currently cached values for some given tags
+     * Populates the {@link AutoCompletionList} with the currently cached values for some given tags
      *
      * @param list the list to populate
      * @param keys the tag keys
diff --git a/src/org/openstreetmap/josm/gui/tagging/presets/TaggingPreset.java b/src/org/openstreetmap/josm/gui/tagging/presets/TaggingPreset.java
index 5a0b1e1..225a62b 100644
--- a/src/org/openstreetmap/josm/gui/tagging/presets/TaggingPreset.java
+++ b/src/org/openstreetmap/josm/gui/tagging/presets/TaggingPreset.java
@@ -616,7 +616,8 @@ public class TaggingPreset extends AbstractAction implements ActiveLayerChangeLi
          * Constructs a new {@code ToolbarButtonAction}.
          */
         public ToolbarButtonAction() {
-            super("", ImageProvider.get("dialogs", "pin"));
+            super("");
+            new ImageProvider("dialogs", "pin").getResource().attachImageIcon(this, true);
             putValue(SHORT_DESCRIPTION, tr("Add or remove toolbar button"));
             List<String> t = new LinkedList<>(ToolbarPreferences.getToolString());
             toolbarIndex = t.indexOf(getToolbarString());
diff --git a/src/org/openstreetmap/josm/gui/tagging/presets/TaggingPresetReader.java b/src/org/openstreetmap/josm/gui/tagging/presets/TaggingPresetReader.java
index d7fd3a2..262dd38 100644
--- a/src/org/openstreetmap/josm/gui/tagging/presets/TaggingPresetReader.java
+++ b/src/org/openstreetmap/josm/gui/tagging/presets/TaggingPresetReader.java
@@ -376,13 +376,15 @@ public final class TaggingPresetReader {
             } catch (SAXException | IllegalArgumentException e) {
                 Logging.error(e);
                 Logging.error(source);
-                JOptionPane.showMessageDialog(
-                        Main.parent,
-                        "<html>" + tr("Error parsing {0}: ", source) + "<br><br><table width=600>" +
-                                Utils.escapeReservedCharactersHTML(e.getMessage()) + "</table></html>",
-                        tr("Error"),
-                        JOptionPane.ERROR_MESSAGE
-                        );
+                if (displayErrMsg) {
+                    JOptionPane.showMessageDialog(
+                            Main.parent,
+                            "<html>" + tr("Error parsing {0}: ", source) + "<br><br><table width=600>" +
+                                    Utils.escapeReservedCharactersHTML(e.getMessage()) + "</table></html>",
+                            tr("Error"),
+                            JOptionPane.ERROR_MESSAGE
+                            );
+                }
             }
         }
         return allPresets;
diff --git a/src/org/openstreetmap/josm/gui/tagging/presets/TaggingPresetSearchDialog.java b/src/org/openstreetmap/josm/gui/tagging/presets/TaggingPresetSearchDialog.java
index 890abe4..613e121 100644
--- a/src/org/openstreetmap/josm/gui/tagging/presets/TaggingPresetSearchDialog.java
+++ b/src/org/openstreetmap/josm/gui/tagging/presets/TaggingPresetSearchDialog.java
@@ -31,7 +31,7 @@ public final class TaggingPresetSearchDialog extends ExtendedDialog {
     }
 
     private TaggingPresetSearchDialog() {
-        super(Main.parent, tr("Presets"), tr("Select"), tr("Cancel"));
+        super(Main.parent, tr("Search presets"), tr("Select"), tr("Cancel"));
         selector = new TaggingPresetSelector(true, true);
         setContent(selector, false);
         DataSet.addSelectionListener(selector);
diff --git a/src/org/openstreetmap/josm/gui/tagging/presets/TaggingPresetSearchPrimitiveDialog.java b/src/org/openstreetmap/josm/gui/tagging/presets/TaggingPresetSearchPrimitiveDialog.java
index 9b2b965..e3c0aa4 100644
--- a/src/org/openstreetmap/josm/gui/tagging/presets/TaggingPresetSearchPrimitiveDialog.java
+++ b/src/org/openstreetmap/josm/gui/tagging/presets/TaggingPresetSearchPrimitiveDialog.java
@@ -66,7 +66,7 @@ public final class TaggingPresetSearchPrimitiveDialog extends ExtendedDialog {
     }
 
     TaggingPresetSearchPrimitiveDialog() {
-        super(Main.parent, tr("Presets"), tr("Search"), tr("Cancel"));
+        super(Main.parent, tr("Search for objects by preset"), tr("Search"), tr("Cancel"));
         selector = new TaggingPresetSelector(false, false);
         setContent(selector, false);
         selector.setDblClickListener(e -> buttonAction(0, null));
diff --git a/src/org/openstreetmap/josm/gui/widgets/HtmlPanel.java b/src/org/openstreetmap/josm/gui/widgets/HtmlPanel.java
index af36710..0167125 100644
--- a/src/org/openstreetmap/josm/gui/widgets/HtmlPanel.java
+++ b/src/org/openstreetmap/josm/gui/widgets/HtmlPanel.java
@@ -4,13 +4,18 @@ package org.openstreetmap.josm.gui.widgets;
 import java.awt.BorderLayout;
 import java.awt.Font;
 import java.text.MessageFormat;
+import java.util.Arrays;
 import java.util.Optional;
 
 import javax.swing.JEditorPane;
 import javax.swing.JPanel;
 import javax.swing.UIManager;
+import javax.swing.event.HyperlinkEvent;
+import javax.swing.event.HyperlinkListener;
 import javax.swing.text.html.StyleSheet;
 
+import org.openstreetmap.josm.tools.OpenBrowser;
+
 /**
  * This panel can be used to display larger sections of formatted text in
  * HTML.
@@ -21,6 +26,13 @@ import javax.swing.text.html.StyleSheet;
  * @since 2688
  */
 public class HtmlPanel extends JPanel {
+
+    private static final HyperlinkListener defaultHyperlinkListener = e -> {
+        if (HyperlinkEvent.EventType.ACTIVATED.equals(e.getEventType())) {
+            OpenBrowser.displayUrl(e.getURL().toString());
+        }
+    };
+
     private JosmEditorPane jepMessage;
 
     protected final void build() {
@@ -87,4 +99,14 @@ public class HtmlPanel extends JPanel {
     public final void setText(String text) {
         jepMessage.setText(Optional.ofNullable(text).orElse(""));
     }
+
+    /**
+     * Opens hyperlinks on click.
+     * @since 13111
+     */
+    public final void enableClickableHyperlinks() {
+        if (!Arrays.asList(jepMessage.getHyperlinkListeners()).contains(defaultHyperlinkListener)) {
+            jepMessage.addHyperlinkListener(defaultHyperlinkListener);
+        }
+    }
 }
diff --git a/src/org/openstreetmap/josm/gui/widgets/JMultilineLabel.java b/src/org/openstreetmap/josm/gui/widgets/JMultilineLabel.java
index 260f455..ad18dba 100644
--- a/src/org/openstreetmap/josm/gui/widgets/JMultilineLabel.java
+++ b/src/org/openstreetmap/josm/gui/widgets/JMultilineLabel.java
@@ -45,12 +45,27 @@ public class JMultilineLabel extends JEditorPane {
      * @param allBold If {@code true}, makes all text to be displayed in bold
      */
     public JMultilineLabel(String text, boolean allBold) {
+        this(text, allBold, false);
+    }
+
+    /**
+     * Constructs a normal label but adds HTML tags if not already done so.
+     * Supports both newline characters (<code>\n</code>) as well as the HTML
+     * <code><br></code> to insert new lines.
+     *
+     * Use setMaxWidth to limit the width of the label.
+     * @param text The text to display
+     * @param allBold If {@code true}, makes all text to be displayed in bold
+     * @param focusable indicates whether this label is focusable
+     * @since 13157
+     */
+    public JMultilineLabel(String text, boolean allBold, boolean focusable) {
         JosmEditorPane.makeJLabelLike(this, allBold);
         String html = text.trim().replaceAll("\n", "<br>");
         if (!html.startsWith("<html>")) {
             html = "<html>" + html + "</html>";
         }
-        setFocusable(false);
+        setFocusable(focusable);
         super.setText(html);
     }
 
diff --git a/src/org/openstreetmap/josm/gui/widgets/PopupMenuButton.java b/src/org/openstreetmap/josm/gui/widgets/PopupMenuButton.java
index 11471ae..43328f2 100644
--- a/src/org/openstreetmap/josm/gui/widgets/PopupMenuButton.java
+++ b/src/org/openstreetmap/josm/gui/widgets/PopupMenuButton.java
@@ -5,8 +5,8 @@ import java.awt.Color;
 import java.awt.Dimension;
 import java.awt.Graphics;
 import java.awt.Graphics2D;
-import java.awt.event.ActionListener;
 import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
 import java.awt.geom.Path2D;
 
 import javax.swing.Action;
@@ -22,6 +22,7 @@ public class PopupMenuButton extends JButton implements ActionListener {
     private JPopupMenu menu;
 
     /**
+     * Constructs a new {@code PopupMenuButton}.
      * @see JButton#JButton()
      */
     public PopupMenuButton() {
@@ -30,6 +31,8 @@ public class PopupMenuButton extends JButton implements ActionListener {
     }
 
     /**
+     * Constructs a new {@code PopupMenuButton}.
+     * @param a the <code>Action</code> used to specify the new button
      * @see JButton#JButton(Action)
      */
     public PopupMenuButton(Action a) {
@@ -38,6 +41,8 @@ public class PopupMenuButton extends JButton implements ActionListener {
     }
 
     /**
+     * Constructs a new {@code PopupMenuButton}.
+     * @param i the Icon image to display on the button
      * @see JButton#JButton(Icon)
      */
     public PopupMenuButton(Icon i) {
@@ -46,6 +51,8 @@ public class PopupMenuButton extends JButton implements ActionListener {
     }
 
     /**
+     * Constructs a new {@code PopupMenuButton}.
+     * @param t the text of the button
      * @see JButton#JButton(String)
      */
     public PopupMenuButton(String t) {
@@ -54,6 +61,9 @@ public class PopupMenuButton extends JButton implements ActionListener {
     }
 
     /**
+     * Constructs a new {@code PopupMenuButton}.
+     * @param t the text of the button
+     * @param i the Icon image to display on the button
      * @see JButton#JButton(String, Icon)
      */
     public PopupMenuButton(String t, Icon i) {
@@ -63,6 +73,7 @@ public class PopupMenuButton extends JButton implements ActionListener {
 
     /**
      * Pass-through to {@link JButton#JButton()} allowing associated popup menu to be set
+     * @param m the associated popup menu
      */
     public PopupMenuButton(JPopupMenu m) {
         super();
@@ -71,6 +82,8 @@ public class PopupMenuButton extends JButton implements ActionListener {
 
     /**
      * Pass-through to {@link JButton#JButton(Action)} allowing associated popup menu to be set
+     * @param a the <code>Action</code> used to specify the new button
+     * @param m the associated popup menu
      */
     public PopupMenuButton(Action a, JPopupMenu m) {
         super(a);
@@ -79,6 +92,8 @@ public class PopupMenuButton extends JButton implements ActionListener {
 
     /**
      * Pass-through to {@link JButton#JButton(Icon)} allowing associated popup menu to be set
+     * @param i the Icon image to display on the button
+     * @param m the associated popup menu
      */
     public PopupMenuButton(Icon i, JPopupMenu m) {
         super(i);
@@ -87,6 +102,8 @@ public class PopupMenuButton extends JButton implements ActionListener {
 
     /**
      * Pass-through to {@link JButton#JButton(String)} allowing associated popup menu to be set
+     * @param t the text of the button
+     * @param m the associated popup menu
      */
     public PopupMenuButton(String t, JPopupMenu m) {
         super(t);
@@ -95,6 +112,9 @@ public class PopupMenuButton extends JButton implements ActionListener {
 
     /**
      * Pass-through to {@link JButton#JButton(String, Icon)} allowing associated popup menu to be set
+     * @param t the text of the button
+     * @param i the Icon image to display on the button
+     * @param m the associated popup menu
      */
     public PopupMenuButton(String t, Icon i, JPopupMenu m) {
         super(t, i);
@@ -112,6 +132,7 @@ public class PopupMenuButton extends JButton implements ActionListener {
 
     /**
      * Get the popup menu associated with this button
+     * @return the popup menu associated with this button
      */
     public JPopupMenu getPopupMenu() {
         return this.menu;
diff --git a/src/org/openstreetmap/josm/io/Capabilities.java b/src/org/openstreetmap/josm/io/Capabilities.java
index a97522f..5d88891 100644
--- a/src/org/openstreetmap/josm/io/Capabilities.java
+++ b/src/org/openstreetmap/josm/io/Capabilities.java
@@ -22,7 +22,7 @@ import org.xml.sax.helpers.DefaultHandler;
 /**
  * Represents the OSM API server capabilities.
  *
- * Example capabilites document:
+ * Example capabilities document:
  * <pre>
  * <osm version="0.6" generator="OpenStreetMap server">
  *   <api>
diff --git a/src/org/openstreetmap/josm/io/UploadStrategy.java b/src/org/openstreetmap/josm/io/UploadStrategy.java
index c516d06..f1e0d2e 100644
--- a/src/org/openstreetmap/josm/io/UploadStrategy.java
+++ b/src/org/openstreetmap/josm/io/UploadStrategy.java
@@ -5,7 +5,6 @@ import static org.openstreetmap.josm.tools.I18n.tr;
 
 import java.util.Locale;
 
-import org.openstreetmap.josm.data.PreferencesUtils;
 import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.Logging;
 
@@ -67,10 +66,9 @@ public enum UploadStrategy {
     /**
      * Replies the upload strategy currently configured in the preferences.
      *
-     * First checks for the preference key <pre>osm-server.upload-strategy</pre>. If not
-     * present, checks for the legacy preference key <pre>osm-server.atomic-upload</pre>.
+     * Checks for the preference key <pre>osm-server.upload-strategy</pre>.
      *
-     * If both are missing or if the preference value is illegal, {@link #DEFAULT_UPLOAD_STRATEGY}
+     * If missing or if the preference value is illegal, {@link #DEFAULT_UPLOAD_STRATEGY}
      * is replied.
      *
      * @return the upload strategy currently configured in the preferences.
@@ -78,23 +76,7 @@ public enum UploadStrategy {
     public static UploadStrategy getFromPreferences() {
         String v = Config.getPref().get("osm-server.upload-strategy", null);
         if (v == null) {
-            // legacy support. Until 12/2009 we had osm-server.atomic-upload only.
-            // If we still find "osm-server.atomic-upload" we use it and remove it.
-            // When the preferences are saved the next time, "osm-server.upload-strategy"
-            // will be inserted.
-            v = Config.getPref().get("osm-server.atomic-upload", null);
-            if (v != null) {
-                PreferencesUtils.removeFromList(Config.getPref(), "osm-server.atomic-upload", v);
-            } else {
-                v = "";
-            }
-            v = v.trim().toLowerCase(Locale.ENGLISH);
-            if ("true".equals(v))
-                return SINGLE_REQUEST_STRATEGY;
-            else if ("false".equals(v))
-                return INDIVIDUAL_OBJECTS_STRATEGY;
-            else
-                return DEFAULT_UPLOAD_STRATEGY;
+            return DEFAULT_UPLOAD_STRATEGY;
         }
         UploadStrategy strategy = fromPreference(v);
         if (strategy == null) {
diff --git a/src/org/openstreetmap/josm/io/imagery/WMSImagery.java b/src/org/openstreetmap/josm/io/imagery/WMSImagery.java
index 397881f..20b345d 100644
--- a/src/org/openstreetmap/josm/io/imagery/WMSImagery.java
+++ b/src/org/openstreetmap/josm/io/imagery/WMSImagery.java
@@ -39,7 +39,7 @@ import org.xml.sax.InputSource;
 import org.xml.sax.SAXException;
 
 /**
- * This class represents the capabilites of a WMS imagery server.
+ * This class represents the capabilities of a WMS imagery server.
  */
 public class WMSImagery {
 
@@ -103,7 +103,7 @@ public class WMSImagery {
 
         /**
          * The data that caused this exception.
-         * @return The server response to the capabilites request.
+         * @return The server response to the capabilities request.
          */
         public String getIncomingData() {
             return incomingData;
diff --git a/src/org/openstreetmap/josm/io/remotecontrol/handler/LoadAndZoomHandler.java b/src/org/openstreetmap/josm/io/remotecontrol/handler/LoadAndZoomHandler.java
index 0d059f0..cde5644 100644
--- a/src/org/openstreetmap/josm/io/remotecontrol/handler/LoadAndZoomHandler.java
+++ b/src/org/openstreetmap/josm/io/remotecontrol/handler/LoadAndZoomHandler.java
@@ -5,6 +5,7 @@ import static org.openstreetmap.josm.tools.I18n.tr;
 
 import java.awt.geom.Area;
 import java.awt.geom.Rectangle2D;
+import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.HashSet;
@@ -76,7 +77,8 @@ public class LoadAndZoomHandler extends RequestHandler {
 
     @Override
     public String[] getOptionalParams() {
-        return new String[] {"new_layer", "layer_name", "addtags", "select", "zoom_mode", "changeset_comment", "changeset_source", "search"};
+        return new String[] {"new_layer", "layer_name", "addtags", "select", "zoom_mode",
+                "changeset_comment", "changeset_source", "changeset_hashtags", "search"};
     }
 
     @Override
@@ -212,14 +214,14 @@ public class LoadAndZoomHandler extends RequestHandler {
         }
 
         // add changeset tags after download if necessary
-        if (args.containsKey("changeset_comment") || args.containsKey("changeset_source")) {
+        if (args.containsKey("changeset_comment") || args.containsKey("changeset_source") || args.containsKey("changeset_hashtags")) {
             MainApplication.worker.submit(() -> {
-                if (MainApplication.getLayerManager().getEditDataSet() != null) {
-                    if (args.containsKey("changeset_comment")) {
-                        MainApplication.getLayerManager().getEditDataSet().addChangeSetTag("comment", args.get("changeset_comment"));
-                    }
-                    if (args.containsKey("changeset_source")) {
-                        MainApplication.getLayerManager().getEditDataSet().addChangeSetTag("source", args.get("changeset_source"));
+                DataSet ds = MainApplication.getLayerManager().getEditDataSet();
+                if (ds != null) {
+                    for (String tag : Arrays.asList("changeset_comment", "changeset_source", "changeset_hashtags")) {
+                        if (args.containsKey(tag)) {
+                            ds.addChangeSetTag(tag.substring("changeset_".length()), args.get(tag));
+                        }
                     }
                 }
             });
diff --git a/src/org/openstreetmap/josm/tools/HttpClient.java b/src/org/openstreetmap/josm/tools/HttpClient.java
index 0211d5d..4d4f1fa 100644
--- a/src/org/openstreetmap/josm/tools/HttpClient.java
+++ b/src/org/openstreetmap/josm/tools/HttpClient.java
@@ -13,6 +13,7 @@ import java.net.CookieHandler;
 import java.net.CookieManager;
 import java.net.HttpURLConnection;
 import java.net.URL;
+import java.nio.charset.StandardCharsets;
 import java.util.Collections;
 import java.util.List;
 import java.util.Locale;
@@ -113,6 +114,9 @@ public final class HttpClient {
 
         if ("PUT".equals(requestMethod) || "POST".equals(requestMethod) || "DELETE".equals(requestMethod)) {
             Logging.info("{0} {1} ({2}) ...", requestMethod, url, Utils.getSizeString(requestBody.length, Locale.getDefault()));
+            if (Logging.isTraceEnabled() && requestBody.length > 0) {
+                Logging.trace("BODY: {0}", new String(requestBody, StandardCharsets.UTF_8));
+            }
             connection.setFixedLengthStreamingMode(requestBody.length);
             connection.setDoOutput(true);
             try (OutputStream out = new BufferedOutputStream(
diff --git a/src/org/openstreetmap/josm/tools/ImageProvider.java b/src/org/openstreetmap/josm/tools/ImageProvider.java
index eacdefb..925dd41 100644
--- a/src/org/openstreetmap/josm/tools/ImageProvider.java
+++ b/src/org/openstreetmap/josm/tools/ImageProvider.java
@@ -11,6 +11,7 @@ import java.awt.Graphics2D;
 import java.awt.GraphicsEnvironment;
 import java.awt.Image;
 import java.awt.Point;
+import java.awt.Rectangle;
 import java.awt.RenderingHints;
 import java.awt.Toolkit;
 import java.awt.Transparency;
@@ -615,14 +616,11 @@ public class ImageProvider {
      * A <code>java.awt.image.MultiResolutionImage</code> is a Java 9 {@link Image}
      * implementation, which adds support for HiDPI displays. The effect will be
      * that in HiDPI mode, when GUI elements are scaled by a factor 1.5, 2.0, etc.,
-     * the images are not just up-scaled, but a higher resolution version of the
-     * image is rendered instead.
+     * the images are not just up-scaled, but a higher resolution version of the image is rendered instead.
      * <p>
-     * Use {@link HiDPISupport#getBaseImage(java.awt.Image)} to extract the original
-     * image from a multi-resolution image.
+     * Use {@link HiDPISupport#getBaseImage(java.awt.Image)} to extract the original image from a multi-resolution image.
      * <p>
-     * See {@link HiDPISupport#processMRImage} for how to process the image without
-     * removing the multi-resolution magic.
+     * See {@link HiDPISupport#processMRImage} for how to process the image without removing the multi-resolution magic.
      * @param multiResolution true, if multi-resolution image is requested
      * @return the current object, for convenience
      */
@@ -819,7 +817,6 @@ public class ImageProvider {
         synchronized (cache) {
             // This method is called from different thread and modifying HashMap concurrently can result
             // for example in loops in map entries (ie freeze when such entry is retrieved)
-            // Yes, it did happen to me :-)
             if (name == null)
                 return null;
 
@@ -909,8 +906,7 @@ public class ImageProvider {
                         // getImageUrl() does a ton of "stat()" calls and gets expensive
                         // and redundant when you have a whole ton of objects. So,
                         // index the cache by the name of the icon we're looking for
-                        // and don't bother to create a URL unless we're actually
-                        // creating the image.
+                        // and don't bother to create a URL unless we're actually creating the image.
                         URL path = getImageUrl(fullName);
                         if (path == null) {
                             continue;
@@ -1420,15 +1416,15 @@ public class ImageProvider {
         do {
             if (w > targetWidth) {
                 w /= 2;
-                if (w < targetWidth) {
-                    w = targetWidth;
-                }
+            }
+            if (w < targetWidth) {
+                w = targetWidth;
             }
             if (h > targetHeight) {
                 h /= 2;
-                if (h < targetHeight) {
-                    h = targetHeight;
-                }
+            }
+            if (h < targetHeight) {
+                h = targetHeight;
             }
             BufferedImage tmp = new BufferedImage(w, h, type);
             Graphics2D g2 = tmp.createGraphics();
@@ -1616,8 +1612,7 @@ public class ImageProvider {
      * provide an alpha channel but defines a {@code TransparentColor} metadata node, that the resulting image
      * has a transparency set to {@code TRANSLUCENT} and uses the correct transparent color.
      *
-     * @return a <code>BufferedImage</code> containing the decoded
-     * contents of the input, or <code>null</code>.
+     * @return a <code>BufferedImage</code> containing the decoded contents of the input, or <code>null</code>.
      *
      * @throws IllegalArgumentException if <code>input</code> is <code>null</code>.
      * @throws IOException if an error occurs during reading.
@@ -1671,8 +1666,7 @@ public class ImageProvider {
      * provide an alpha channel but defines a {@code TransparentColor} metadata node, that the resulting image
      * has a transparency set to {@code TRANSLUCENT} and uses the correct transparent color.
      *
-     * @return a <code>BufferedImage</code> containing the decoded
-     * contents of the input, or <code>null</code>.
+     * @return a <code>BufferedImage</code> containing the decoded contents of the input, or <code>null</code>.
      *
      * @throws IllegalArgumentException if <code>input</code> is <code>null</code>.
      * @throws IOException if an error occurs during reading.
@@ -1715,8 +1709,7 @@ public class ImageProvider {
      * provide an alpha channel but defines a {@code TransparentColor} metadata node, that the resulting image
      * has a transparency set to {@code TRANSLUCENT} and uses the correct transparent color.
      *
-     * @return a <code>BufferedImage</code> containing the decoded
-     * contents of the input, or <code>null</code>.
+     * @return a <code>BufferedImage</code> containing the decoded contents of the input, or <code>null</code>.
      *
      * @throws IllegalArgumentException if <code>input</code> is <code>null</code>.
      * @throws IOException if an error occurs during reading.
@@ -1975,4 +1968,24 @@ public class ImageProvider {
             return buffImage;
         }
     }
+
+    /**
+     * 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
+     * @return a {@code BufferedImage} instance for the cropped area of {@code Image}.
+     * @since 13127
+     */
+    public static BufferedImage toBufferedImage(Image image, Rectangle crop_area) {
+        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);
+            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.dispose();
+        }
+        return buffImage;
+    }
 }
diff --git a/src/org/openstreetmap/josm/tools/JosmDecimalFormatSymbolsProvider.java b/src/org/openstreetmap/josm/tools/JosmDecimalFormatSymbolsProvider.java
index c7b2337..91d65ad 100644
--- a/src/org/openstreetmap/josm/tools/JosmDecimalFormatSymbolsProvider.java
+++ b/src/org/openstreetmap/josm/tools/JosmDecimalFormatSymbolsProvider.java
@@ -1,9 +1,7 @@
 // License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.tools;
 
-import java.text.DecimalFormat;
 import java.text.DecimalFormatSymbols;
-import java.text.NumberFormat;
 import java.text.spi.DecimalFormatSymbolsProvider;
 import java.util.Locale;
 
@@ -41,13 +39,7 @@ public class JosmDecimalFormatSymbolsProvider extends DecimalFormatSymbolsProvid
      * @see    Double#parseDouble(String)
      * @since 13050
      */
-    public static double parseDouble(String s) throws NumberFormatException {
-        String text = s;
-        NumberFormat format = DecimalFormat.getInstance();
-        if (format instanceof DecimalFormat) {
-            char decimalSeparator = ((DecimalFormat) format).getDecimalFormatSymbols().getDecimalSeparator();
-            text = text.replace('.', decimalSeparator).replace(',', decimalSeparator);
-        }
-        return Double.parseDouble(text);
+    public static double parseDouble(String s) {
+        return Double.parseDouble(s.replace(',', '.'));
     }
 }
diff --git a/src/org/openstreetmap/josm/tools/template_engine/Condition.java b/src/org/openstreetmap/josm/tools/template_engine/Condition.java
index 98efa34..415ffd5 100644
--- a/src/org/openstreetmap/josm/tools/template_engine/Condition.java
+++ b/src/org/openstreetmap/josm/tools/template_engine/Condition.java
@@ -14,15 +14,24 @@ public class Condition implements TemplateEntry {
 
     private final List<TemplateEntry> entries;
 
+    /**
+     * Constructs a new {@code Condition} with predefined template entries.
+     * @param entries template entries
+     */
     public Condition(Collection<TemplateEntry> entries) {
         this.entries = new ArrayList<>(entries);
     }
 
+    /**
+     * Constructs a new {@code Condition}.
+     */
     public Condition() {
         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
diff --git a/styles/standard/elemstyles.mapcss b/styles/standard/elemstyles.mapcss
index d1c68e2..13f2434 100644
--- a/styles/standard/elemstyles.mapcss
+++ b/styles/standard/elemstyles.mapcss
@@ -380,8 +380,11 @@ way[barrier=kerb] {
     width: 2;
     color: barrier#F0F050;
 }
-way[barrier=retaining_wall],
 way[barrier=kerb] {
+    repeat-image: "presets/barrier/kerb_pattern.svg";
+    repeat-image-align: top;
+}
+way[barrier=retaining_wall] {
     repeat-image: "presets/misc/cliff_pattern.svg";
     repeat-image-align: top;
 }
@@ -477,46 +480,57 @@ way[motorroad=yes]::core_motorroad {
 }
 way[highway=motorway] {
     width: 3;
+    z-index: 0.13; /* #15483 */
     color: motorway#809bc0;
 }
 way[highway=motorway_link] {
     width: 3;
+    z-index: 0.12;
     color: motorway#809bc0;
 }
 way[highway=trunk] {
     width: 3;
+    z-index: 0.11;
     color: trunk#7fc97f;
 }
 way[highway=trunk_link] {
     width: 3;
+    z-index: 0.10;
     color: trunk#7fc97f;
 }
 way[highway=primary] {
     width: 3;
+    z-index: 0.09;
     color: primary#fb805f;
 }
 way[highway=primary_link] {
     width: 3;
+    z-index: 0.08;
     color: primary#fb805f;
 }
 way[highway=secondary] {
     width: 3;
+    z-index: 0.07;
     color: secondary#fdbf6f;
 }
 way[highway=secondary_link] {
     width: 3;
+    z-index: 0.06;
     color: secondary#fdbf6f;
 }
 way[highway=tertiary] {
     width: 2;
+    z-index: 0.05;
     color: tertiary#f7f496;
 }
 way[highway=tertiary_link] {
     width: 2;
+    z-index: 0.04;
     color: tertiary#f7f496;
 }
 way[highway=unclassified] {
     width: 2;
+    z-index: 0.03;
     color: street#c0c0c0;
 }
 way[highway=escape] {
@@ -539,10 +553,12 @@ way[highway=track] {
 }
 way[highway=residential] {
     width: 2;
+    z-index: 0.02;
     color: street#c0c0c0;
 }
 way[highway=living_street] {
     width: 2;
+    z-index: 0.01;
     dashes: 9,9;
     dashes-background-color: livingdashed#00ff00;
     color: street#c0c0c0;
@@ -4174,8 +4190,8 @@ way[natural=coastline] {
     width: 2;
     color: water#0000ff;
     right-casing-color: water#0000ff;
-    right-casing-width: 5;
-    right-casing-opacity: 0.30;
+    right-casing-width: 8;
+    right-casing-opacity: 0.35;
 }
 area[natural=mud] {
     fill-color: mud#cba762;
@@ -4414,6 +4430,7 @@ node[mountain_pass?] {
 
 way[boundary=protected_area]::core_boundary,
 way[boundary=administrative]::core_boundary,
+relation[boundary=administrative] > way::core_boundary,
 way[boundary=postal_code]::core_boundary,
 way[boundary=political]::core_boundary,
 way[boundary=maritime]::core_boundary,
@@ -4424,55 +4441,30 @@ way[boundary=national_park]::core_boundary {
     color: boundary#FF6600;
     dashes: 9,9;
 }
-way[admin_level=9]::core_boundary,
-relation[admin_level=9] > way::core_boundary,
-way[admin_level=10]::core_boundary,
-relation[admin_level=10] > way::core_boundary {
-    z-index: 2;
-    modifier: false;
-    width: 1;
-    color: boundary#FF6600;
-    dashes: 9,9;
-}
-way[admin_level=7]::core_boundary,
-relation[admin_level=7] > way::core_boundary,
-way[admin_level=8]::core_boundary,
-relation[admin_level=8] > way::core_boundary {
-    z-index: 2;
-    modifier: false;
+/* admin_level >=9 use the default width of 1 defined above */
+way[boundary=administrative][admin_level=7]::core_boundary,
+relation[boundary=administrative][admin_level=7] > way::core_boundary,
+way[boundary=administrative][admin_level=8]::core_boundary,
+relation[boundary=administrative][admin_level=8] > way::core_boundary {
     width: 2;
-    color: boundary#FF6600;
-    dashes: 9,9;
 }
-way[admin_level=5]::core_boundary,
-relation[admin_level=5] > way::core_boundary,
-way[admin_level=6]::core_boundary,
-relation[admin_level=6] > way::core_boundary {
-    z-index: 2;
-    modifier: false;
+way[boundary=administrative][admin_level=5]::core_boundary,
+relation[boundary=administrative][admin_level=5] > way::core_boundary,
+way[boundary=administrative][admin_level=6]::core_boundary,
+relation[boundary=administrative][admin_level=6] > way::core_boundary {
     width: 3;
-    color: boundary#FF6600;
-    dashes: 9,9;
 }
-way[admin_level=3]::core_boundary,
-relation[admin_level=3] > way::core_boundary,
-way[admin_level=4]::core_boundary,
-relation[admin_level=4] > way::core_boundary {
-    z-index: 2;
-    modifier: false;
+way[boundary=administrative][admin_level=3]::core_boundary,
+relation[boundary=administrative][admin_level=3] > way::core_boundary,
+way[boundary=administrative][admin_level=4]::core_boundary,
+relation[boundary=administrative][admin_level=4] > way::core_boundary {
     width: 4;
-    color: boundary#FF6600;
-    dashes: 9,9;
 }
-way[admin_level=1]::core_boundary,
-relation[admin_level=1] > way::core_boundary,
-way[admin_level=2]::core_boundary,
-relation[admin_level=2] > way::core_boundary {
-    z-index: 2;
-    modifier: false;
+way[boundary=administrative][admin_level=1]::core_boundary,
+relation[boundary=administrative][admin_level=1] > way::core_boundary,
+way[boundary=administrative][admin_level=2]::core_boundary,
+relation[boundary=administrative][admin_level=2] > way::core_boundary {
     width: 5;
-    color: boundary#FF6600;
-    dashes: 9,9;
 }
 node[boundary=national],
 node[boundary=administrative],
diff --git a/test/functional/org/openstreetmap/josm/data/imagery/ImageryCompareTestIT.java b/test/functional/org/openstreetmap/josm/data/imagery/ImageryCompareTestIT.java
index ae9e520..dabe655 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();
+    public JOSMTestRules test = new JOSMTestRules().preferences().timeout(30000);
 
     /**
      * Test of imagery entries.
diff --git a/test/functional/org/openstreetmap/josm/data/osm/TaginfoTestIT.java b/test/functional/org/openstreetmap/josm/data/osm/TaginfoTestIT.java
index 7ed607c..7fb7439 100644
--- a/test/functional/org/openstreetmap/josm/data/osm/TaginfoTestIT.java
+++ b/test/functional/org/openstreetmap/josm/data/osm/TaginfoTestIT.java
@@ -37,7 +37,7 @@ public class TaginfoTestIT {
      */
     @Rule
     @SuppressFBWarnings(value = "URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD")
-    public JOSMTestRules test = new JOSMTestRules().preferences();
+    public JOSMTestRules test = new JOSMTestRules().preferences().timeout(20000);
 
     /**
      * Checks that popular tags are known (i.e included in internal presets, or deprecated, or explicitely ignored)
diff --git a/test/unit/org/openstreetmap/josm/TestUtils.java b/test/unit/org/openstreetmap/josm/TestUtils.java
index 4717f3d..050d7de 100644
--- a/test/unit/org/openstreetmap/josm/TestUtils.java
+++ b/test/unit/org/openstreetmap/josm/TestUtils.java
@@ -20,6 +20,7 @@ import java.util.Comparator;
 import java.util.Objects;
 import java.util.stream.Stream;
 
+import org.junit.Assume;
 import org.openstreetmap.josm.command.Command;
 import org.openstreetmap.josm.data.osm.DataSet;
 import org.openstreetmap.josm.data.osm.Node;
@@ -170,6 +171,22 @@ public final class TestUtils {
     }
 
     /**
+     * Returns a private static field value.
+     * @param cls object class
+     * @param fieldName private field name
+     * @return private field value
+     * @throws ReflectiveOperationException if a reflection operation error occurs
+     */
+    public static Object getPrivateStaticField(Class<?> cls, String fieldName) throws ReflectiveOperationException {
+        Field f = cls.getDeclaredField(fieldName);
+        AccessController.doPrivileged((PrivilegedAction<Void>) () -> {
+            f.setAccessible(true);
+            return null;
+        });
+        return f.get(null);
+    }
+
+    /**
      * Returns an instance of {@link AbstractProgressMonitor} which keeps track of the monitor state,
      * but does not show the progress.
      * @return a progress monitor
@@ -312,4 +329,17 @@ public final class TestUtils {
             return null;
         }
     }
+
+    /**
+     * Use to assume that EqualsVerifier is working with the current JVM.
+     */
+    public static void assumeWorkingEqualsVerifier() {
+        try {
+            // Workaround to https://github.com/jqno/equalsverifier/issues/177
+            // Inspired by https://issues.apache.org/jira/browse/SOLR-11606
+            nl.jqno.equalsverifier.internal.lib.bytebuddy.ClassFileVersion.ofThisVm();
+        } catch (IllegalArgumentException e) {
+            Assume.assumeNoException(e);
+        }
+    }
 }
diff --git a/test/unit/org/openstreetmap/josm/actions/AlignInLineActionTest.java b/test/unit/org/openstreetmap/josm/actions/AlignInLineActionTest.java
index b8035da..60f8c91 100644
--- a/test/unit/org/openstreetmap/josm/actions/AlignInLineActionTest.java
+++ b/test/unit/org/openstreetmap/josm/actions/AlignInLineActionTest.java
@@ -3,6 +3,7 @@ package org.openstreetmap.josm.actions;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
 
 import org.junit.Before;
 import org.junit.Rule;
@@ -15,7 +16,6 @@ import org.openstreetmap.josm.data.osm.DataSet;
 import org.openstreetmap.josm.data.osm.Node;
 import org.openstreetmap.josm.data.osm.Way;
 import org.openstreetmap.josm.gui.MainApplication;
-import org.openstreetmap.josm.gui.layer.OsmDataLayer;
 import org.openstreetmap.josm.testutils.JOSMTestRules;
 
 import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
@@ -55,7 +55,6 @@ public final class AlignInLineActionTest {
     @Test
     public void testNodesOpenWay() throws InvalidSelection {
         DataSet dataSet = new DataSet();
-        OsmDataLayer layer = new OsmDataLayer(dataSet, OsmDataLayer.createNewName(), null);
 
         // Create test points, lower left is (0,0).
         //
@@ -66,20 +65,13 @@ public final class AlignInLineActionTest {
         Node point2 = new Node(new EastNorth(3, 1));
         Node point3 = new Node(new EastNorth(1, 1));
 
-        try {
-            MainApplication.getLayerManager().addLayer(layer);
+        // Create an open way.
+        createWay(dataSet, point1, point2, point3);
 
-            // Create an open way.
-            createWay(dataSet, point1, point2, point3);
+        // Select nodes to align.
+        dataSet.addSelected(point1, point2, point3);
 
-            // Select nodes to align.
-            dataSet.addSelected(point1, point2, point3);
-
-            action.buildCommand().executeCommand();
-        } finally {
-            // Ensure we clean the place before leaving, even if test fails.
-            MainApplication.getLayerManager().removeLayer(layer);
-        }
+        action.buildCommand(dataSet).executeCommand();
 
         // Points 1 and 3 are the extremities and must not have moved. Only point 2 must have moved.
         assertCoordEq(point1, 0, 2);
@@ -95,7 +87,6 @@ public final class AlignInLineActionTest {
     @Test
     public void testNodesClosedWay() throws InvalidSelection {
         DataSet dataSet = new DataSet();
-        OsmDataLayer layer = new OsmDataLayer(dataSet, OsmDataLayer.createNewName(), null);
 
         // Create test points, lower left is (0,0).
         //
@@ -107,19 +98,12 @@ public final class AlignInLineActionTest {
         Node point3 = new Node(new EastNorth(2, 2));
         Node point4 = new Node(new EastNorth(0, 2));
 
-        try {
-            MainApplication.getLayerManager().addLayer(layer);
-
-            // Create a closed way.
-            createWay(dataSet, point1, point2, point3, point4, point1);
-            // Select nodes to align (point1 must be in the second position to exhibit the bug).
-            dataSet.addSelected(point4, point1, point2);
+        // Create a closed way.
+        createWay(dataSet, point1, point2, point3, point4, point1);
+        // Select nodes to align (point1 must be in the second position to exhibit the bug).
+        dataSet.addSelected(point4, point1, point2);
 
-            action.buildCommand().executeCommand();
-        } finally {
-            // Ensure we clean the place before leaving, even if test fails.
-            MainApplication.getLayerManager().removeLayer(layer);
-        }
+        action.buildCommand(dataSet).executeCommand();
 
         // Only point 1 must have moved.
         assertCoordEq(point1, 1, 1);
@@ -136,7 +120,6 @@ public final class AlignInLineActionTest {
     @Test
     public void testNodesOpenWays() throws InvalidSelection {
         DataSet dataSet = new DataSet();
-        OsmDataLayer layer = new OsmDataLayer(dataSet, OsmDataLayer.createNewName(), null);
 
         // Create test points, lower left is (0,0).
         //
@@ -148,22 +131,15 @@ public final class AlignInLineActionTest {
         Node point3 = new Node(new EastNorth(0, 1));
         Node point4 = new Node(new EastNorth(2, 0));
 
-        try {
-            MainApplication.getLayerManager().addLayer(layer);
-
-            // Create 2 ways.
-            createWay(dataSet, point1, point2);
-            createWay(dataSet, point3, point4);
+        // Create 2 ways.
+        createWay(dataSet, point1, point2);
+        createWay(dataSet, point3, point4);
 
-            // Select nodes to align.
-            dataSet.addSelected(point1, point2, point3, point4);
+        // Select nodes to align.
+        dataSet.addSelected(point1, point2, point3, point4);
 
-            // Points must align between points 1 and 4.
-            action.buildCommand().executeCommand();
-        } finally {
-            // Ensure we clean the place before leaving, even if test fails.
-            MainApplication.getLayerManager().removeLayer(layer);
-        }
+        // Points must align between points 1 and 4.
+        action.buildCommand(dataSet).executeCommand();
 
         assertCoordEq(point1, 0, 2);
         assertCoordEq(point2, 1.5, 0.5);
@@ -172,12 +148,35 @@ public final class AlignInLineActionTest {
     }
 
     /**
+     * Test case: only a two-nodes way selected.
+     * @throws InvalidSelection never
+     */
+    @Test
+    public void testSimpleWay() throws InvalidSelection {
+        DataSet dataSet = new DataSet();
+
+        // Create test points, lower left is (0,0).
+        //
+        // 1 - -
+        // - - 2
+        Node point1 = new Node(new EastNorth(0, 2));
+        Node point2 = new Node(new EastNorth(2, 1));
+
+        // Creates and select a single way.
+        dataSet.addSelected(createWay(dataSet, point1, point2));
+
+        // No command must be created (nothing to do)
+        assertNull(action.buildCommand(dataSet));
+    }
+
+    /**
      * Create a way made of the provided nodes and select nodes.
      *
      * @param dataSet Dataset in which adding nodes.
      * @param nodes List of nodes to add to dataset.
+     * @return created way
      */
-    private void createWay(DataSet dataSet, Node... nodes) {
+    private Way createWay(DataSet dataSet, Node... nodes) {
         Way way = new Way();
         dataSet.addPrimitive(way);
 
@@ -188,6 +187,7 @@ public final class AlignInLineActionTest {
 
             way.addNode(node);
         }
+        return way;
     }
 
     /**
diff --git a/test/unit/org/openstreetmap/josm/actions/CombineWayActionTest.java b/test/unit/org/openstreetmap/josm/actions/CombineWayActionTest.java
index c8ffcab..1b7428f 100644
--- a/test/unit/org/openstreetmap/josm/actions/CombineWayActionTest.java
+++ b/test/unit/org/openstreetmap/josm/actions/CombineWayActionTest.java
@@ -63,6 +63,7 @@ public class CombineWayActionTest {
      */
     @Test
     public void testEqualsContract() {
+        TestUtils.assumeWorkingEqualsVerifier();
         EqualsVerifier.forClass(NodePair.class).usingGetClass()
             .suppress(Warning.ANNOTATION) // FIXME: remove it after https://github.com/jqno/equalsverifier/issues/152 is fixed
             .withPrefabValues(Node.class, new Node(1), new Node(2))
diff --git a/test/unit/org/openstreetmap/josm/actions/ExtensionFileFilterTest.java b/test/unit/org/openstreetmap/josm/actions/ExtensionFileFilterTest.java
index 460691b..f9fb636 100644
--- a/test/unit/org/openstreetmap/josm/actions/ExtensionFileFilterTest.java
+++ b/test/unit/org/openstreetmap/josm/actions/ExtensionFileFilterTest.java
@@ -44,6 +44,7 @@ public class ExtensionFileFilterTest {
      */
     @Test
     public void testEqualsContract() {
+        TestUtils.assumeWorkingEqualsVerifier();
         EqualsVerifier.forClass(ExtensionFileFilter.class).usingGetClass()
             .suppress(Warning.ANNOTATION) // FIXME: remove it after https://github.com/jqno/equalsverifier/issues/152 is fixed
             .verify();
diff --git a/test/unit/org/openstreetmap/josm/command/AddCommandTest.java b/test/unit/org/openstreetmap/josm/command/AddCommandTest.java
index 34fd7bb..9a4ef00 100644
--- a/test/unit/org/openstreetmap/josm/command/AddCommandTest.java
+++ b/test/unit/org/openstreetmap/josm/command/AddCommandTest.java
@@ -8,6 +8,7 @@ import java.util.ArrayList;
 
 import org.junit.Rule;
 import org.junit.Test;
+import org.openstreetmap.josm.TestUtils;
 import org.openstreetmap.josm.data.coor.LatLon;
 import org.openstreetmap.josm.data.osm.DataSet;
 import org.openstreetmap.josm.data.osm.Node;
@@ -130,6 +131,7 @@ public class AddCommandTest {
      */
     @Test
     public void testEqualsContract() {
+        TestUtils.assumeWorkingEqualsVerifier();
         EqualsVerifier.forClass(AddCommand.class).usingGetClass()
             .withPrefabValues(OsmPrimitive.class,
                 new Node(1), new Node(2))
diff --git a/test/unit/org/openstreetmap/josm/command/AddPrimitivesCommandTest.java b/test/unit/org/openstreetmap/josm/command/AddPrimitivesCommandTest.java
index f1f1162..9fcaccb 100644
--- a/test/unit/org/openstreetmap/josm/command/AddPrimitivesCommandTest.java
+++ b/test/unit/org/openstreetmap/josm/command/AddPrimitivesCommandTest.java
@@ -13,6 +13,7 @@ import java.util.List;
 
 import org.junit.Rule;
 import org.junit.Test;
+import org.openstreetmap.josm.TestUtils;
 import org.openstreetmap.josm.data.coor.LatLon;
 import org.openstreetmap.josm.data.osm.DataSet;
 import org.openstreetmap.josm.data.osm.Node;
@@ -284,6 +285,7 @@ public class AddPrimitivesCommandTest {
      */
     @Test
     public void testEqualsContract() {
+        TestUtils.assumeWorkingEqualsVerifier();
         EqualsVerifier.forClass(AddPrimitivesCommand.class).usingGetClass()
             .withPrefabValues(DataSet.class,
                 new DataSet(), new DataSet())
diff --git a/test/unit/org/openstreetmap/josm/command/ChangeCommandTest.java b/test/unit/org/openstreetmap/josm/command/ChangeCommandTest.java
index ac7f548..55e919a 100644
--- a/test/unit/org/openstreetmap/josm/command/ChangeCommandTest.java
+++ b/test/unit/org/openstreetmap/josm/command/ChangeCommandTest.java
@@ -13,6 +13,7 @@ import java.util.List;
 import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
+import org.openstreetmap.josm.TestUtils;
 import org.openstreetmap.josm.command.CommandTest.CommandTestData;
 import org.openstreetmap.josm.data.coor.LatLon;
 import org.openstreetmap.josm.data.osm.DataIntegrityProblemException;
@@ -153,6 +154,7 @@ public class ChangeCommandTest {
      */
     @Test
     public void testEqualsContract() {
+        TestUtils.assumeWorkingEqualsVerifier();
         EqualsVerifier.forClass(ChangeCommand.class).usingGetClass()
             .withPrefabValues(DataSet.class,
                 new DataSet(), new DataSet())
diff --git a/test/unit/org/openstreetmap/josm/command/ChangeNodesCommandTest.java b/test/unit/org/openstreetmap/josm/command/ChangeNodesCommandTest.java
index 3d3c212..6c46e34 100644
--- a/test/unit/org/openstreetmap/josm/command/ChangeNodesCommandTest.java
+++ b/test/unit/org/openstreetmap/josm/command/ChangeNodesCommandTest.java
@@ -14,6 +14,7 @@ import java.util.List;
 import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
+import org.openstreetmap.josm.TestUtils;
 import org.openstreetmap.josm.command.CommandTest.CommandTestData;
 import org.openstreetmap.josm.data.coor.LatLon;
 import org.openstreetmap.josm.data.osm.DataSet;
@@ -124,6 +125,7 @@ public class ChangeNodesCommandTest {
      */
     @Test
     public void testEqualsContract() {
+        TestUtils.assumeWorkingEqualsVerifier();
         EqualsVerifier.forClass(ChangeNodesCommand.class).usingGetClass()
             .withPrefabValues(Way.class,
                 new Way(1), new Way(2))
diff --git a/test/unit/org/openstreetmap/josm/command/ChangePropertyCommandTest.java b/test/unit/org/openstreetmap/josm/command/ChangePropertyCommandTest.java
index 79f5351..dd71202 100644
--- a/test/unit/org/openstreetmap/josm/command/ChangePropertyCommandTest.java
+++ b/test/unit/org/openstreetmap/josm/command/ChangePropertyCommandTest.java
@@ -16,6 +16,7 @@ import java.util.List;
 import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
+import org.openstreetmap.josm.TestUtils;
 import org.openstreetmap.josm.command.CommandTest.CommandTestData;
 import org.openstreetmap.josm.data.osm.DataSet;
 import org.openstreetmap.josm.data.osm.Node;
@@ -277,6 +278,7 @@ public class ChangePropertyCommandTest {
      */
     @Test
     public void testEqualsContract() {
+        TestUtils.assumeWorkingEqualsVerifier();
         EqualsVerifier.forClass(ChangePropertyCommand.class).usingGetClass()
             .withPrefabValues(DataSet.class,
                 new DataSet(), new DataSet())
diff --git a/test/unit/org/openstreetmap/josm/command/ChangePropertyKeyCommandTest.java b/test/unit/org/openstreetmap/josm/command/ChangePropertyKeyCommandTest.java
index 399aa6a..88576a8 100644
--- a/test/unit/org/openstreetmap/josm/command/ChangePropertyKeyCommandTest.java
+++ b/test/unit/org/openstreetmap/josm/command/ChangePropertyKeyCommandTest.java
@@ -13,6 +13,7 @@ import java.util.Collection;
 import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
+import org.openstreetmap.josm.TestUtils;
 import org.openstreetmap.josm.command.CommandTest.CommandTestData;
 import org.openstreetmap.josm.data.osm.DataSet;
 import org.openstreetmap.josm.data.osm.Node;
@@ -148,6 +149,7 @@ public class ChangePropertyKeyCommandTest {
      */
     @Test
     public void testEqualsContract() {
+        TestUtils.assumeWorkingEqualsVerifier();
         EqualsVerifier.forClass(ChangePropertyKeyCommand.class).usingGetClass()
             .withPrefabValues(DataSet.class,
                 new DataSet(), new DataSet())
diff --git a/test/unit/org/openstreetmap/josm/command/ChangeRelationMemberRoleCommandTest.java b/test/unit/org/openstreetmap/josm/command/ChangeRelationMemberRoleCommandTest.java
index d600ac3..8b91e6e 100644
--- a/test/unit/org/openstreetmap/josm/command/ChangeRelationMemberRoleCommandTest.java
+++ b/test/unit/org/openstreetmap/josm/command/ChangeRelationMemberRoleCommandTest.java
@@ -12,6 +12,7 @@ import java.util.ArrayList;
 import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
+import org.openstreetmap.josm.TestUtils;
 import org.openstreetmap.josm.command.CommandTest.CommandTestDataWithRelation;
 import org.openstreetmap.josm.data.osm.DataSet;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
@@ -145,6 +146,7 @@ public class ChangeRelationMemberRoleCommandTest {
      */
     @Test
     public void testEqualsContract() {
+        TestUtils.assumeWorkingEqualsVerifier();
         EqualsVerifier.forClass(ChangeRelationMemberRoleCommand.class).usingGetClass()
             .withPrefabValues(Relation.class,
                 new Relation(1), new Relation(2))
diff --git a/test/unit/org/openstreetmap/josm/command/CommandTest.java b/test/unit/org/openstreetmap/josm/command/CommandTest.java
index b71ef80..03b071a 100644
--- a/test/unit/org/openstreetmap/josm/command/CommandTest.java
+++ b/test/unit/org/openstreetmap/josm/command/CommandTest.java
@@ -5,6 +5,7 @@ import java.util.Arrays;
 
 import org.junit.Rule;
 import org.junit.Test;
+import org.openstreetmap.josm.TestUtils;
 import org.openstreetmap.josm.data.coor.LatLon;
 import org.openstreetmap.josm.data.osm.DataSet;
 import org.openstreetmap.josm.data.osm.Node;
@@ -37,6 +38,7 @@ public class CommandTest {
      */
     @Test
     public void testEqualsContract() {
+        TestUtils.assumeWorkingEqualsVerifier();
         EqualsVerifier.forClass(Command.class).usingGetClass()
             .withPrefabValues(DataSet.class,
                 new DataSet(), new DataSet())
diff --git a/test/unit/org/openstreetmap/josm/command/DeleteCommandTest.java b/test/unit/org/openstreetmap/josm/command/DeleteCommandTest.java
index d867949..f4d0738 100644
--- a/test/unit/org/openstreetmap/josm/command/DeleteCommandTest.java
+++ b/test/unit/org/openstreetmap/josm/command/DeleteCommandTest.java
@@ -15,6 +15,7 @@ import java.util.NoSuchElementException;
 import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
+import org.openstreetmap.josm.TestUtils;
 import org.openstreetmap.josm.command.CommandTest.CommandTestDataWithRelation;
 import org.openstreetmap.josm.data.osm.DataSet;
 import org.openstreetmap.josm.data.osm.Node;
@@ -377,6 +378,7 @@ public class DeleteCommandTest {
      */
     @Test
     public void testEqualsContract() {
+        TestUtils.assumeWorkingEqualsVerifier();
         EqualsVerifier.forClass(DeleteCommand.class).usingGetClass()
             .withPrefabValues(DataSet.class,
                 new DataSet(), new DataSet())
diff --git a/test/unit/org/openstreetmap/josm/command/MoveCommandTest.java b/test/unit/org/openstreetmap/josm/command/MoveCommandTest.java
index cdf9f23..6176fc9 100644
--- a/test/unit/org/openstreetmap/josm/command/MoveCommandTest.java
+++ b/test/unit/org/openstreetmap/josm/command/MoveCommandTest.java
@@ -15,6 +15,7 @@ import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
 import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.TestUtils;
 import org.openstreetmap.josm.command.CommandTest.CommandTestDataWithRelation;
 import org.openstreetmap.josm.data.coor.EastNorth;
 import org.openstreetmap.josm.data.coor.LatLon;
@@ -259,6 +260,7 @@ public class MoveCommandTest {
      */
     @Test
     public void testEqualsContract() {
+        TestUtils.assumeWorkingEqualsVerifier();
         EqualsVerifier.forClass(MoveCommand.class).usingGetClass()
             .withPrefabValues(LatLon.class,
                 LatLon.ZERO, new LatLon(45, 45))
diff --git a/test/unit/org/openstreetmap/josm/command/PurgeCommandTest.java b/test/unit/org/openstreetmap/josm/command/PurgeCommandTest.java
index 87246e9..d913b29 100644
--- a/test/unit/org/openstreetmap/josm/command/PurgeCommandTest.java
+++ b/test/unit/org/openstreetmap/josm/command/PurgeCommandTest.java
@@ -15,6 +15,7 @@ import java.util.List;
 import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
+import org.openstreetmap.josm.TestUtils;
 import org.openstreetmap.josm.command.CommandTest.CommandTestDataWithRelation;
 import org.openstreetmap.josm.data.conflict.Conflict;
 import org.openstreetmap.josm.data.osm.DataSet;
@@ -144,6 +145,7 @@ public class PurgeCommandTest {
      */
     @Test
     public void testEqualsContract() {
+        TestUtils.assumeWorkingEqualsVerifier();
         EqualsVerifier.forClass(PurgeCommand.class).usingGetClass()
             .withPrefabValues(DataSet.class,
                 new DataSet(), new DataSet())
diff --git a/test/unit/org/openstreetmap/josm/command/RemoveNodesCommandTest.java b/test/unit/org/openstreetmap/josm/command/RemoveNodesCommandTest.java
index 2ddcabf..35c5d65 100644
--- a/test/unit/org/openstreetmap/josm/command/RemoveNodesCommandTest.java
+++ b/test/unit/org/openstreetmap/josm/command/RemoveNodesCommandTest.java
@@ -11,6 +11,7 @@ import java.util.Collections;
 import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
+import org.openstreetmap.josm.TestUtils;
 import org.openstreetmap.josm.command.CommandTest.CommandTestDataWithRelation;
 import org.openstreetmap.josm.data.osm.DataSet;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
@@ -122,6 +123,7 @@ public class RemoveNodesCommandTest {
      */
     @Test
     public void testEqualsContract() {
+        TestUtils.assumeWorkingEqualsVerifier();
         EqualsVerifier.forClass(RemoveNodesCommand.class).usingGetClass()
             .withPrefabValues(Way.class,
                 new Way(1), new Way(2))
diff --git a/test/unit/org/openstreetmap/josm/command/RotateCommandTest.java b/test/unit/org/openstreetmap/josm/command/RotateCommandTest.java
index 3364448..0145cc6 100644
--- a/test/unit/org/openstreetmap/josm/command/RotateCommandTest.java
+++ b/test/unit/org/openstreetmap/josm/command/RotateCommandTest.java
@@ -10,6 +10,7 @@ import java.util.Arrays;
 import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
+import org.openstreetmap.josm.TestUtils;
 import org.openstreetmap.josm.command.CommandTest.CommandTestData;
 import org.openstreetmap.josm.data.coor.EastNorth;
 import org.openstreetmap.josm.data.coor.LatLon;
@@ -135,6 +136,7 @@ public class RotateCommandTest {
      */
     @Test
     public void testEqualsContract() {
+        TestUtils.assumeWorkingEqualsVerifier();
         EqualsVerifier.forClass(RotateCommand.class).usingGetClass()
                 .withPrefabValues(LatLon.class, LatLon.ZERO, new LatLon(45, 45))
                 .withPrefabValues(DataSet.class, new DataSet(), new DataSet())
diff --git a/test/unit/org/openstreetmap/josm/command/ScaleCommandTest.java b/test/unit/org/openstreetmap/josm/command/ScaleCommandTest.java
index 1292c92..608ad71 100644
--- a/test/unit/org/openstreetmap/josm/command/ScaleCommandTest.java
+++ b/test/unit/org/openstreetmap/josm/command/ScaleCommandTest.java
@@ -10,6 +10,7 @@ import java.util.Arrays;
 import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
+import org.openstreetmap.josm.TestUtils;
 import org.openstreetmap.josm.command.CommandTest.CommandTestData;
 import org.openstreetmap.josm.data.coor.EastNorth;
 import org.openstreetmap.josm.data.coor.LatLon;
@@ -135,6 +136,7 @@ public class ScaleCommandTest {
      */
     @Test
     public void testEqualsContract() {
+        TestUtils.assumeWorkingEqualsVerifier();
         EqualsVerifier.forClass(ScaleCommand.class).usingGetClass()
             .withPrefabValues(LatLon.class,
                 LatLon.ZERO, new LatLon(45, 45))
diff --git a/test/unit/org/openstreetmap/josm/command/SelectCommandTest.java b/test/unit/org/openstreetmap/josm/command/SelectCommandTest.java
index 4e667ee..9c84985 100644
--- a/test/unit/org/openstreetmap/josm/command/SelectCommandTest.java
+++ b/test/unit/org/openstreetmap/josm/command/SelectCommandTest.java
@@ -12,6 +12,7 @@ import java.util.List;
 import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
+import org.openstreetmap.josm.TestUtils;
 import org.openstreetmap.josm.command.CommandTest.CommandTestDataWithRelation;
 import org.openstreetmap.josm.data.osm.DataSet;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
@@ -148,6 +149,7 @@ public class SelectCommandTest {
      */
     @Test
     public void testEqualsContract() {
+        TestUtils.assumeWorkingEqualsVerifier();
         EqualsVerifier.forClass(SelectCommand.class).usingGetClass()
             .withPrefabValues(DataSet.class,
                 new DataSet(), new DataSet())
diff --git a/test/unit/org/openstreetmap/josm/command/SequenceCommandTest.java b/test/unit/org/openstreetmap/josm/command/SequenceCommandTest.java
index 98735b4..d0c903b 100644
--- a/test/unit/org/openstreetmap/josm/command/SequenceCommandTest.java
+++ b/test/unit/org/openstreetmap/josm/command/SequenceCommandTest.java
@@ -16,6 +16,7 @@ import java.util.Collections;
 import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
+import org.openstreetmap.josm.TestUtils;
 import org.openstreetmap.josm.command.CommandTest.CommandTestDataWithRelation;
 import org.openstreetmap.josm.data.osm.DataSet;
 import org.openstreetmap.josm.data.osm.Node;
@@ -213,6 +214,7 @@ public class SequenceCommandTest {
     @Test
     public void testEqualsContract() {
         DataSet ds = new DataSet();
+        TestUtils.assumeWorkingEqualsVerifier();
         EqualsVerifier.forClass(SequenceCommand.class).usingGetClass()
             .withPrefabValues(Command.class,
                 new AddCommand(ds, new Node(1)), new AddCommand(ds, new Node(2)))
diff --git a/test/unit/org/openstreetmap/josm/command/TransformNodesCommandTest.java b/test/unit/org/openstreetmap/josm/command/TransformNodesCommandTest.java
index 3a60e18..4c716ce 100644
--- a/test/unit/org/openstreetmap/josm/command/TransformNodesCommandTest.java
+++ b/test/unit/org/openstreetmap/josm/command/TransformNodesCommandTest.java
@@ -3,6 +3,7 @@ package org.openstreetmap.josm.command;
 
 import org.junit.Rule;
 import org.junit.Test;
+import org.openstreetmap.josm.TestUtils;
 import org.openstreetmap.josm.data.coor.LatLon;
 import org.openstreetmap.josm.data.osm.DataSet;
 import org.openstreetmap.josm.data.osm.User;
@@ -30,6 +31,7 @@ public class TransformNodesCommandTest {
      */
     @Test
     public void testEqualsContract() {
+        TestUtils.assumeWorkingEqualsVerifier();
         EqualsVerifier.forClass(TransformNodesCommand.class).usingGetClass()
             .withPrefabValues(LatLon.class,
                 LatLon.ZERO, new LatLon(45, 45))
diff --git a/test/unit/org/openstreetmap/josm/command/conflict/ConflictAddCommandTest.java b/test/unit/org/openstreetmap/josm/command/conflict/ConflictAddCommandTest.java
index ba22ba4..dae3a18 100644
--- a/test/unit/org/openstreetmap/josm/command/conflict/ConflictAddCommandTest.java
+++ b/test/unit/org/openstreetmap/josm/command/conflict/ConflictAddCommandTest.java
@@ -8,6 +8,7 @@ import static org.junit.Assert.assertTrue;
 import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
+import org.openstreetmap.josm.TestUtils;
 import org.openstreetmap.josm.command.CommandTest.CommandTestData;
 import org.openstreetmap.josm.data.conflict.Conflict;
 import org.openstreetmap.josm.data.osm.DataSet;
@@ -72,6 +73,7 @@ public class ConflictAddCommandTest {
      */
     @Test
     public void testEqualsContract() {
+        TestUtils.assumeWorkingEqualsVerifier();
         EqualsVerifier.forClass(ConflictAddCommand.class).usingGetClass()
             .withPrefabValues(DataSet.class,
                     new DataSet(), new DataSet())
diff --git a/test/unit/org/openstreetmap/josm/command/conflict/ConflictResolveCommandTest.java b/test/unit/org/openstreetmap/josm/command/conflict/ConflictResolveCommandTest.java
index e1c43a1..f301521 100644
--- a/test/unit/org/openstreetmap/josm/command/conflict/ConflictResolveCommandTest.java
+++ b/test/unit/org/openstreetmap/josm/command/conflict/ConflictResolveCommandTest.java
@@ -3,6 +3,7 @@ package org.openstreetmap.josm.command.conflict;
 
 import org.junit.Rule;
 import org.junit.Test;
+import org.openstreetmap.josm.TestUtils;
 import org.openstreetmap.josm.data.conflict.Conflict;
 import org.openstreetmap.josm.data.osm.DataSet;
 import org.openstreetmap.josm.data.osm.Node;
@@ -31,6 +32,7 @@ public class ConflictResolveCommandTest {
      */
     @Test
     public void testEqualsContract() {
+        TestUtils.assumeWorkingEqualsVerifier();
         EqualsVerifier.forClass(ConflictResolveCommand.class).usingGetClass()
             .withPrefabValues(Conflict.class,
                     new Conflict<>(new Node(1, 1), new Node(2, 1)),
diff --git a/test/unit/org/openstreetmap/josm/command/conflict/CoordinateConflictResolveCommandTest.java b/test/unit/org/openstreetmap/josm/command/conflict/CoordinateConflictResolveCommandTest.java
index 35b45f6..859eefc 100644
--- a/test/unit/org/openstreetmap/josm/command/conflict/CoordinateConflictResolveCommandTest.java
+++ b/test/unit/org/openstreetmap/josm/command/conflict/CoordinateConflictResolveCommandTest.java
@@ -8,6 +8,7 @@ import static org.junit.Assert.assertTrue;
 import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
+import org.openstreetmap.josm.TestUtils;
 import org.openstreetmap.josm.command.CommandTest.CommandTestData;
 import org.openstreetmap.josm.data.conflict.Conflict;
 import org.openstreetmap.josm.data.coor.LatLon;
@@ -89,6 +90,7 @@ public class CoordinateConflictResolveCommandTest {
      */
     @Test
     public void testEqualsContract() {
+        TestUtils.assumeWorkingEqualsVerifier();
         EqualsVerifier.forClass(CoordinateConflictResolveCommand.class).usingGetClass()
             .withPrefabValues(Conflict.class,
                     new Conflict<>(new Node(), new Node()), new Conflict<>(new Way(), new Way()))
diff --git a/test/unit/org/openstreetmap/josm/command/conflict/DeletedStateConflictResolveCommandTest.java b/test/unit/org/openstreetmap/josm/command/conflict/DeletedStateConflictResolveCommandTest.java
index 139d041..454b6dd 100644
--- a/test/unit/org/openstreetmap/josm/command/conflict/DeletedStateConflictResolveCommandTest.java
+++ b/test/unit/org/openstreetmap/josm/command/conflict/DeletedStateConflictResolveCommandTest.java
@@ -3,6 +3,7 @@ package org.openstreetmap.josm.command.conflict;
 
 import org.junit.Rule;
 import org.junit.Test;
+import org.openstreetmap.josm.TestUtils;
 import org.openstreetmap.josm.data.conflict.Conflict;
 import org.openstreetmap.josm.data.osm.DataSet;
 import org.openstreetmap.josm.data.osm.Node;
@@ -32,6 +33,7 @@ public class DeletedStateConflictResolveCommandTest {
      */
     @Test
     public void testEqualsContract() {
+        TestUtils.assumeWorkingEqualsVerifier();
         EqualsVerifier.forClass(DeletedStateConflictResolveCommand.class).usingGetClass()
             .withPrefabValues(Conflict.class,
                     new Conflict<>(new Node(), new Node()), new Conflict<>(new Way(), new Way()))
diff --git a/test/unit/org/openstreetmap/josm/command/conflict/ModifiedConflictResolveCommandTest.java b/test/unit/org/openstreetmap/josm/command/conflict/ModifiedConflictResolveCommandTest.java
index d8a18b1..3b127ac 100644
--- a/test/unit/org/openstreetmap/josm/command/conflict/ModifiedConflictResolveCommandTest.java
+++ b/test/unit/org/openstreetmap/josm/command/conflict/ModifiedConflictResolveCommandTest.java
@@ -3,6 +3,7 @@ package org.openstreetmap.josm.command.conflict;
 
 import org.junit.Rule;
 import org.junit.Test;
+import org.openstreetmap.josm.TestUtils;
 import org.openstreetmap.josm.data.conflict.Conflict;
 import org.openstreetmap.josm.data.osm.DataSet;
 import org.openstreetmap.josm.data.osm.Node;
@@ -32,6 +33,7 @@ public class ModifiedConflictResolveCommandTest {
      */
     @Test
     public void testEqualsContract() {
+        TestUtils.assumeWorkingEqualsVerifier();
         EqualsVerifier.forClass(ModifiedConflictResolveCommand.class).usingGetClass()
             .withPrefabValues(Conflict.class,
                     new Conflict<>(new Node(), new Node()), new Conflict<>(new Way(), new Way()))
diff --git a/test/unit/org/openstreetmap/josm/command/conflict/RelationMemberConflictResolverCommandTest.java b/test/unit/org/openstreetmap/josm/command/conflict/RelationMemberConflictResolverCommandTest.java
index 019d074..8084b13 100644
--- a/test/unit/org/openstreetmap/josm/command/conflict/RelationMemberConflictResolverCommandTest.java
+++ b/test/unit/org/openstreetmap/josm/command/conflict/RelationMemberConflictResolverCommandTest.java
@@ -3,6 +3,7 @@ package org.openstreetmap.josm.command.conflict;
 
 import org.junit.Rule;
 import org.junit.Test;
+import org.openstreetmap.josm.TestUtils;
 import org.openstreetmap.josm.data.conflict.Conflict;
 import org.openstreetmap.josm.data.osm.DataSet;
 import org.openstreetmap.josm.data.osm.Node;
@@ -32,6 +33,7 @@ public class RelationMemberConflictResolverCommandTest {
      */
     @Test
     public void testEqualsContract() {
+        TestUtils.assumeWorkingEqualsVerifier();
         EqualsVerifier.forClass(RelationMemberConflictResolverCommand.class).usingGetClass()
             .withPrefabValues(Relation.class,
                     new Relation(1), new Relation(2))
diff --git a/test/unit/org/openstreetmap/josm/command/conflict/TagConflictResolveCommandTest.java b/test/unit/org/openstreetmap/josm/command/conflict/TagConflictResolveCommandTest.java
index 0b1857e..f250830 100644
--- a/test/unit/org/openstreetmap/josm/command/conflict/TagConflictResolveCommandTest.java
+++ b/test/unit/org/openstreetmap/josm/command/conflict/TagConflictResolveCommandTest.java
@@ -3,6 +3,7 @@ package org.openstreetmap.josm.command.conflict;
 
 import org.junit.Rule;
 import org.junit.Test;
+import org.openstreetmap.josm.TestUtils;
 import org.openstreetmap.josm.data.conflict.Conflict;
 import org.openstreetmap.josm.data.osm.DataSet;
 import org.openstreetmap.josm.data.osm.Node;
@@ -32,6 +33,7 @@ public class TagConflictResolveCommandTest {
      */
     @Test
     public void testEqualsContract() {
+        TestUtils.assumeWorkingEqualsVerifier();
         EqualsVerifier.forClass(TagConflictResolveCommand.class).usingGetClass()
             .withPrefabValues(Conflict.class,
                     new Conflict<>(new Node(), new Node()), new Conflict<>(new Way(), new Way()))
diff --git a/test/unit/org/openstreetmap/josm/command/conflict/VersionConflictResolveCommandTest.java b/test/unit/org/openstreetmap/josm/command/conflict/VersionConflictResolveCommandTest.java
index da59030..64b6676 100644
--- a/test/unit/org/openstreetmap/josm/command/conflict/VersionConflictResolveCommandTest.java
+++ b/test/unit/org/openstreetmap/josm/command/conflict/VersionConflictResolveCommandTest.java
@@ -3,6 +3,7 @@ package org.openstreetmap.josm.command.conflict;
 
 import org.junit.Rule;
 import org.junit.Test;
+import org.openstreetmap.josm.TestUtils;
 import org.openstreetmap.josm.data.conflict.Conflict;
 import org.openstreetmap.josm.data.osm.DataSet;
 import org.openstreetmap.josm.data.osm.Node;
@@ -32,6 +33,7 @@ public class VersionConflictResolveCommandTest {
      */
     @Test
     public void testEqualsContract() {
+        TestUtils.assumeWorkingEqualsVerifier();
         EqualsVerifier.forClass(VersionConflictResolveCommand.class).usingGetClass()
             .withPrefabValues(Conflict.class,
                     new Conflict<>(new Node(), new Node()), new Conflict<>(new Way(), new Way()))
diff --git a/test/unit/org/openstreetmap/josm/command/conflict/WayNodesConflictResolverCommandTest.java b/test/unit/org/openstreetmap/josm/command/conflict/WayNodesConflictResolverCommandTest.java
index ee5783e..5769a15 100644
--- a/test/unit/org/openstreetmap/josm/command/conflict/WayNodesConflictResolverCommandTest.java
+++ b/test/unit/org/openstreetmap/josm/command/conflict/WayNodesConflictResolverCommandTest.java
@@ -3,6 +3,7 @@ package org.openstreetmap.josm.command.conflict;
 
 import org.junit.Rule;
 import org.junit.Test;
+import org.openstreetmap.josm.TestUtils;
 import org.openstreetmap.josm.data.conflict.Conflict;
 import org.openstreetmap.josm.data.osm.DataSet;
 import org.openstreetmap.josm.data.osm.Node;
@@ -32,6 +33,7 @@ public class WayNodesConflictResolverCommandTest {
      */
     @Test
     public void testEqualsContract() {
+        TestUtils.assumeWorkingEqualsVerifier();
         EqualsVerifier.forClass(WayNodesConflictResolverCommand.class).usingGetClass()
             .withPrefabValues(Conflict.class,
                     new Conflict<>(new Node(), new Node()), new Conflict<>(new Way(), new Way()))
diff --git a/test/unit/org/openstreetmap/josm/data/coor/CachedLatLonTest.java b/test/unit/org/openstreetmap/josm/data/coor/CachedLatLonTest.java
index ce01396..dc699c2 100644
--- a/test/unit/org/openstreetmap/josm/data/coor/CachedLatLonTest.java
+++ b/test/unit/org/openstreetmap/josm/data/coor/CachedLatLonTest.java
@@ -5,6 +5,7 @@ import java.text.DecimalFormat;
 
 import org.junit.Rule;
 import org.junit.Test;
+import org.openstreetmap.josm.TestUtils;
 import org.openstreetmap.josm.testutils.JOSMTestRules;
 
 import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
@@ -28,6 +29,7 @@ public class CachedLatLonTest {
      */
     @Test
     public void testEqualsContract() {
+        TestUtils.assumeWorkingEqualsVerifier();
         EqualsVerifier.forClass(CachedLatLon.class).usingGetClass()
             .suppress(Warning.NONFINAL_FIELDS)
             .withPrefabValues(DecimalFormat.class, new DecimalFormat("00.0"), new DecimalFormat("00.000"))
diff --git a/test/unit/org/openstreetmap/josm/data/coor/LatLonTest.java b/test/unit/org/openstreetmap/josm/data/coor/LatLonTest.java
index bfad7b1..d58b6a2 100644
--- a/test/unit/org/openstreetmap/josm/data/coor/LatLonTest.java
+++ b/test/unit/org/openstreetmap/josm/data/coor/LatLonTest.java
@@ -9,6 +9,7 @@ import java.text.DecimalFormat;
 
 import org.junit.Rule;
 import org.junit.Test;
+import org.openstreetmap.josm.TestUtils;
 import org.openstreetmap.josm.data.Bounds;
 import org.openstreetmap.josm.testutils.JOSMTestRules;
 
@@ -145,6 +146,7 @@ public class LatLonTest {
      */
     @Test
     public void testEqualsContract() {
+        TestUtils.assumeWorkingEqualsVerifier();
         EqualsVerifier.forClass(LatLon.class).usingGetClass()
             .withPrefabValues(DecimalFormat.class, new DecimalFormat("00.0"), new DecimalFormat("00.000"))
             .verify();
diff --git a/test/unit/org/openstreetmap/josm/data/coor/PolarCoorTest.java b/test/unit/org/openstreetmap/josm/data/coor/PolarCoorTest.java
new file mode 100644
index 0000000..969e013
--- /dev/null
+++ b/test/unit/org/openstreetmap/josm/data/coor/PolarCoorTest.java
@@ -0,0 +1,67 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.data.coor;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
+import java.text.DecimalFormat;
+
+import org.junit.Rule;
+import org.junit.Test;
+import org.openstreetmap.josm.TestUtils;
+import org.openstreetmap.josm.testutils.JOSMTestRules;
+
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
+import nl.jqno.equalsverifier.EqualsVerifier;
+
+/**
+ * Test the {@link PolarCoor} class.
+ */
+public class PolarCoorTest {
+
+    /**
+     * Setup test.
+     */
+    @Rule
+    @SuppressFBWarnings(value = "URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD")
+    public JOSMTestRules test = new JOSMTestRules().projection();
+
+    /**
+     * Test {@link PolarCoor#PolarCoor}
+     */
+    @Test
+    public void testPolarCoor() {
+        EastNorth en = new EastNorth(1000, 500);
+        PolarCoor pc = new PolarCoor(en);
+        assertEquals(1118.033988749, pc.radius, 1e-7);
+        assertEquals(0.463647609, pc.angle, 1e-7);
+        assertEquals(new EastNorth(0, 0), pc.pole);
+        assertTrue(en.equalsEpsilon(pc.toEastNorth(), 1e-7));
+
+        pc = new PolarCoor(1118.033988749, 0.463647609);
+        assertEquals(1118.033988749, pc.radius, 1e-7);
+        assertEquals(0.463647609, pc.angle, 1e-7);
+        assertEquals(new EastNorth(0, 0), pc.pole);
+        assertTrue(en.equalsEpsilon(pc.toEastNorth(), 1e-7));
+    }
+
+    /**
+     * Unit test of methods {@link PolarCoor#equals} and {@link PolarCoor#hashCode}.
+     */
+    @Test
+    public void testEqualsContract() {
+        TestUtils.assumeWorkingEqualsVerifier();
+        EqualsVerifier.forClass(PolarCoor.class).usingGetClass()
+            .withPrefabValues(DecimalFormat.class, new DecimalFormat("00.0"), new DecimalFormat("00.000"))
+            .verify();
+    }
+
+    /**
+     * Unit test of method {@link PolarCoor#toString}.
+     */
+    @Test
+    public void testToString() {
+        assertEquals("PolarCoor [radius=1118.033988749, angle=0.463647609, pole=EastNorth[e=0.0, n=0.0]]",
+                new PolarCoor(1118.033988749, 0.463647609).toString());
+    }
+}
diff --git a/test/unit/org/openstreetmap/josm/data/correction/TagCorrectionTest.java b/test/unit/org/openstreetmap/josm/data/correction/TagCorrectionTest.java
index 6960185..8357524 100644
--- a/test/unit/org/openstreetmap/josm/data/correction/TagCorrectionTest.java
+++ b/test/unit/org/openstreetmap/josm/data/correction/TagCorrectionTest.java
@@ -3,6 +3,7 @@ package org.openstreetmap.josm.data.correction;
 
 import org.junit.Rule;
 import org.junit.Test;
+import org.openstreetmap.josm.TestUtils;
 import org.openstreetmap.josm.testutils.JOSMTestRules;
 
 import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
@@ -25,6 +26,7 @@ public class TagCorrectionTest {
      */
     @Test
     public void testEqualsContract() {
+        TestUtils.assumeWorkingEqualsVerifier();
         EqualsVerifier.forClass(TagCorrection.class).usingGetClass().verify();
     }
 }
diff --git a/test/unit/org/openstreetmap/josm/data/gpx/GpxDataTest.java b/test/unit/org/openstreetmap/josm/data/gpx/GpxDataTest.java
index 855ce8c..2a25877 100644
--- a/test/unit/org/openstreetmap/josm/data/gpx/GpxDataTest.java
+++ b/test/unit/org/openstreetmap/josm/data/gpx/GpxDataTest.java
@@ -19,6 +19,7 @@ import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
 import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.TestUtils;
 import org.openstreetmap.josm.data.Bounds;
 import org.openstreetmap.josm.data.DataSource;
 import org.openstreetmap.josm.data.coor.EastNorth;
@@ -444,6 +445,7 @@ public class GpxDataTest {
      */
     @Test
     public void testEqualsContract() {
+        TestUtils.assumeWorkingEqualsVerifier();
         EqualsVerifier.forClass(GpxData.class).usingGetClass()
             .withIgnoredFields("attr", "creator", "fromServer", "storageFile", "listeners", "tracks", "routes", "waypoints", "proxy")
             .withPrefabValues(WayPoint.class, new WayPoint(LatLon.NORTH_POLE), new WayPoint(LatLon.SOUTH_POLE))
diff --git a/test/unit/org/openstreetmap/josm/data/gpx/GpxRouteTest.java b/test/unit/org/openstreetmap/josm/data/gpx/GpxRouteTest.java
index d3a69da..7e9fa8c 100644
--- a/test/unit/org/openstreetmap/josm/data/gpx/GpxRouteTest.java
+++ b/test/unit/org/openstreetmap/josm/data/gpx/GpxRouteTest.java
@@ -3,6 +3,7 @@ package org.openstreetmap.josm.data.gpx;
 
 import org.junit.Rule;
 import org.junit.Test;
+import org.openstreetmap.josm.TestUtils;
 import org.openstreetmap.josm.data.coor.LatLon;
 import org.openstreetmap.josm.testutils.JOSMTestRules;
 
@@ -27,6 +28,7 @@ public class GpxRouteTest {
      */
     @Test
     public void testEqualsContract() {
+        TestUtils.assumeWorkingEqualsVerifier();
         EqualsVerifier.forClass(GpxRoute.class).usingGetClass()
             .suppress(Warning.NONFINAL_FIELDS)
             .withPrefabValues(WayPoint.class, new WayPoint(LatLon.NORTH_POLE), new WayPoint(LatLon.SOUTH_POLE))
diff --git a/test/unit/org/openstreetmap/josm/data/gpx/ImmutableGpxTrackSegmentTest.java b/test/unit/org/openstreetmap/josm/data/gpx/ImmutableGpxTrackSegmentTest.java
index 5727064..2c3abf1 100644
--- a/test/unit/org/openstreetmap/josm/data/gpx/ImmutableGpxTrackSegmentTest.java
+++ b/test/unit/org/openstreetmap/josm/data/gpx/ImmutableGpxTrackSegmentTest.java
@@ -3,6 +3,7 @@ package org.openstreetmap.josm.data.gpx;
 
 import org.junit.Rule;
 import org.junit.Test;
+import org.openstreetmap.josm.TestUtils;
 import org.openstreetmap.josm.data.coor.LatLon;
 import org.openstreetmap.josm.testutils.JOSMTestRules;
 
@@ -26,6 +27,7 @@ public class ImmutableGpxTrackSegmentTest {
      */
     @Test
     public void testEqualsContract() {
+        TestUtils.assumeWorkingEqualsVerifier();
         EqualsVerifier.forClass(ImmutableGpxTrackSegment.class).usingGetClass()
             .withIgnoredFields("bounds", "length")
             .withPrefabValues(WayPoint.class, new WayPoint(LatLon.NORTH_POLE), new WayPoint(LatLon.SOUTH_POLE))
diff --git a/test/unit/org/openstreetmap/josm/data/gpx/ImmutableGpxTrackTest.java b/test/unit/org/openstreetmap/josm/data/gpx/ImmutableGpxTrackTest.java
index 5cd7dcc..bb4e58f 100644
--- a/test/unit/org/openstreetmap/josm/data/gpx/ImmutableGpxTrackTest.java
+++ b/test/unit/org/openstreetmap/josm/data/gpx/ImmutableGpxTrackTest.java
@@ -3,6 +3,7 @@ package org.openstreetmap.josm.data.gpx;
 
 import org.junit.Rule;
 import org.junit.Test;
+import org.openstreetmap.josm.TestUtils;
 import org.openstreetmap.josm.testutils.JOSMTestRules;
 
 import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
@@ -26,6 +27,7 @@ public class ImmutableGpxTrackTest {
      */
     @Test
     public void testEqualsContract() {
+        TestUtils.assumeWorkingEqualsVerifier();
         EqualsVerifier.forClass(ImmutableGpxTrack.class).usingGetClass()
             .suppress(Warning.NONFINAL_FIELDS)
             .withIgnoredFields("bounds", "length")
diff --git a/test/unit/org/openstreetmap/josm/data/gpx/WayPointTest.java b/test/unit/org/openstreetmap/josm/data/gpx/WayPointTest.java
index 01f3fef..3152a14 100644
--- a/test/unit/org/openstreetmap/josm/data/gpx/WayPointTest.java
+++ b/test/unit/org/openstreetmap/josm/data/gpx/WayPointTest.java
@@ -5,6 +5,7 @@ import java.awt.color.ColorSpace;
 
 import org.junit.Rule;
 import org.junit.Test;
+import org.openstreetmap.josm.TestUtils;
 import org.openstreetmap.josm.testutils.JOSMTestRules;
 
 import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
@@ -28,6 +29,7 @@ public class WayPointTest {
      */
     @Test
     public void testEqualsContract() {
+        TestUtils.assumeWorkingEqualsVerifier();
         EqualsVerifier.forClass(WayPoint.class).usingGetClass()
             .suppress(Warning.NONFINAL_FIELDS)
             .withIgnoredFields("customColoring", "dir", "drawLine", "east", "north", "eastNorthCacheKey")
diff --git a/test/unit/org/openstreetmap/josm/data/gpx/WithAttributesTest.java b/test/unit/org/openstreetmap/josm/data/gpx/WithAttributesTest.java
index 09b29c4..468a2e6 100644
--- a/test/unit/org/openstreetmap/josm/data/gpx/WithAttributesTest.java
+++ b/test/unit/org/openstreetmap/josm/data/gpx/WithAttributesTest.java
@@ -3,6 +3,7 @@ package org.openstreetmap.josm.data.gpx;
 
 import org.junit.Rule;
 import org.junit.Test;
+import org.openstreetmap.josm.TestUtils;
 import org.openstreetmap.josm.testutils.JOSMTestRules;
 
 import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
@@ -26,6 +27,7 @@ public class WithAttributesTest {
      */
     @Test
     public void testEqualsContract() {
+        TestUtils.assumeWorkingEqualsVerifier();
         EqualsVerifier.forClass(WithAttributes.class).usingGetClass()
             .suppress(Warning.NONFINAL_FIELDS)
             .verify();
diff --git a/test/unit/org/openstreetmap/josm/data/notes/NoteTest.java b/test/unit/org/openstreetmap/josm/data/notes/NoteTest.java
index e41736b..7c3ccab 100644
--- a/test/unit/org/openstreetmap/josm/data/notes/NoteTest.java
+++ b/test/unit/org/openstreetmap/josm/data/notes/NoteTest.java
@@ -8,6 +8,7 @@ import java.util.Date;
 
 import org.junit.Rule;
 import org.junit.Test;
+import org.openstreetmap.josm.TestUtils;
 import org.openstreetmap.josm.data.coor.LatLon;
 import org.openstreetmap.josm.testutils.JOSMTestRules;
 
@@ -57,6 +58,7 @@ public class NoteTest {
      */
     @Test
     public void testEqualsContract() {
+        TestUtils.assumeWorkingEqualsVerifier();
         EqualsVerifier.forClass(Note.class).usingGetClass()
             .withIgnoredFields("latLon", "createdAt", "closedAt", "state", "comments")
             .suppress(Warning.NONFINAL_FIELDS)
diff --git a/test/unit/org/openstreetmap/josm/data/oauth/OAuthParametersTest.java b/test/unit/org/openstreetmap/josm/data/oauth/OAuthParametersTest.java
index 868207c..4e70313 100644
--- a/test/unit/org/openstreetmap/josm/data/oauth/OAuthParametersTest.java
+++ b/test/unit/org/openstreetmap/josm/data/oauth/OAuthParametersTest.java
@@ -8,6 +8,7 @@ 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;
 import org.openstreetmap.josm.tools.Logging;
@@ -60,6 +61,7 @@ public class OAuthParametersTest {
      */
     @Test
     public void testEqualsContract() {
+        TestUtils.assumeWorkingEqualsVerifier();
         EqualsVerifier.forClass(OAuthParameters.class).usingGetClass().verify();
     }
 }
diff --git a/test/unit/org/openstreetmap/josm/data/oauth/OAuthTokenTest.java b/test/unit/org/openstreetmap/josm/data/oauth/OAuthTokenTest.java
index e982591..2b75488 100644
--- a/test/unit/org/openstreetmap/josm/data/oauth/OAuthTokenTest.java
+++ b/test/unit/org/openstreetmap/josm/data/oauth/OAuthTokenTest.java
@@ -5,6 +5,7 @@ import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
 
 import org.junit.Test;
+import org.openstreetmap.josm.TestUtils;
 
 import nl.jqno.equalsverifier.EqualsVerifier;
 import oauth.signpost.OAuthConsumer;
@@ -33,6 +34,7 @@ public class OAuthTokenTest {
      */
     @Test
     public void testEqualsContract() {
+        TestUtils.assumeWorkingEqualsVerifier();
         EqualsVerifier.forClass(OAuthToken.class).usingGetClass().verify();
     }
 }
diff --git a/test/unit/org/openstreetmap/josm/data/osm/BBoxTest.java b/test/unit/org/openstreetmap/josm/data/osm/BBoxTest.java
index 9984321..57abe2b 100644
--- a/test/unit/org/openstreetmap/josm/data/osm/BBoxTest.java
+++ b/test/unit/org/openstreetmap/josm/data/osm/BBoxTest.java
@@ -7,6 +7,7 @@ import static org.junit.Assert.assertTrue;
 
 import org.junit.Rule;
 import org.junit.Test;
+import org.openstreetmap.josm.TestUtils;
 import org.openstreetmap.josm.data.coor.LatLon;
 import org.openstreetmap.josm.testutils.JOSMTestRules;
 
@@ -31,6 +32,7 @@ public class BBoxTest {
      */
     @Test
     public void testEqualsContract() {
+        TestUtils.assumeWorkingEqualsVerifier();
         EqualsVerifier.forClass(BBox.class).usingGetClass()
             .suppress(Warning.NONFINAL_FIELDS)
             .verify();
diff --git a/test/unit/org/openstreetmap/josm/data/osm/FilterTest.java b/test/unit/org/openstreetmap/josm/data/osm/FilterTest.java
index 730b8af..d4d4d6d 100644
--- a/test/unit/org/openstreetmap/josm/data/osm/FilterTest.java
+++ b/test/unit/org/openstreetmap/josm/data/osm/FilterTest.java
@@ -15,6 +15,7 @@ import java.util.List;
 
 import org.junit.Rule;
 import org.junit.Test;
+import org.openstreetmap.josm.TestUtils;
 import org.openstreetmap.josm.data.coor.LatLon;
 import org.openstreetmap.josm.data.osm.Filter.FilterPreferenceEntry;
 import org.openstreetmap.josm.data.osm.search.SearchMode;
@@ -241,6 +242,7 @@ public class FilterTest {
      */
     @Test
     public void testEqualsContract() {
+        TestUtils.assumeWorkingEqualsVerifier();
         EqualsVerifier.forClass(FilterPreferenceEntry.class).usingGetClass()
             .suppress(Warning.NONFINAL_FIELDS)
             .verify();
diff --git a/test/unit/org/openstreetmap/josm/data/osm/StorageTest.java b/test/unit/org/openstreetmap/josm/data/osm/StorageTest.java
index c5deef1..c053738 100644
--- a/test/unit/org/openstreetmap/josm/data/osm/StorageTest.java
+++ b/test/unit/org/openstreetmap/josm/data/osm/StorageTest.java
@@ -3,6 +3,7 @@ package org.openstreetmap.josm.data.osm;
 
 import org.junit.Rule;
 import org.junit.Test;
+import org.openstreetmap.josm.TestUtils;
 import org.openstreetmap.josm.testutils.JOSMTestRules;
 
 import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
@@ -26,6 +27,7 @@ public class StorageTest {
      */
     @Test
     public void testEqualsContract() {
+        TestUtils.assumeWorkingEqualsVerifier();
         EqualsVerifier.forClass(Storage.class).usingGetClass()
             .suppress(Warning.NONFINAL_FIELDS)
             .withIgnoredFields("arrayCopyNecessary", "hash", "mask", "modCount", "safeIterator", "size")
diff --git a/test/unit/org/openstreetmap/josm/data/tagging/ac/AutoCompletionPriorityTest.java b/test/unit/org/openstreetmap/josm/data/tagging/ac/AutoCompletionPriorityTest.java
index 4ebc815..0919fdb 100644
--- a/test/unit/org/openstreetmap/josm/data/tagging/ac/AutoCompletionPriorityTest.java
+++ b/test/unit/org/openstreetmap/josm/data/tagging/ac/AutoCompletionPriorityTest.java
@@ -13,6 +13,7 @@ import java.util.TreeSet;
 
 import org.junit.Rule;
 import org.junit.Test;
+import org.openstreetmap.josm.TestUtils;
 import org.openstreetmap.josm.testutils.JOSMTestRules;
 
 import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
@@ -95,6 +96,7 @@ public class AutoCompletionPriorityTest {
      */
     @Test
     public void testEqualsContract() {
+        TestUtils.assumeWorkingEqualsVerifier();
         EqualsVerifier.forClass(AutoCompletionPriority.class).usingGetClass()
             .verify();
     }
diff --git a/test/unit/org/openstreetmap/josm/data/validation/tests/OpeningHourTestTest.java b/test/unit/org/openstreetmap/josm/data/validation/tests/OpeningHourTestTest.java
index 0923099..d353385 100644
--- a/test/unit/org/openstreetmap/josm/data/validation/tests/OpeningHourTestTest.java
+++ b/test/unit/org/openstreetmap/josm/data/validation/tests/OpeningHourTestTest.java
@@ -76,9 +76,9 @@ public class OpeningHourTestTest {
      */
     @Test
     public void testI18n() {
-        assertTrue(openingHourTest.checkOpeningHourSyntax("opening_hours", ".", OpeningHourTest.CheckMode.POINTS_IN_TIME, false, "de")
+        assertTrue(openingHourTest.checkOpeningHourSyntax("opening_hours", ".", null, false, "de")
                 .get(0).toString().contains("Unerwartetes Zeichen"));
-        assertFalse(openingHourTest.checkOpeningHourSyntax("opening_hours", ".", OpeningHourTest.CheckMode.POINTS_IN_TIME, false, "en")
+        assertFalse(openingHourTest.checkOpeningHourSyntax("opening_hours", ".", null, false, "en")
                 .get(0).toString().contains("Unerwartetes Zeichen"));
     }
 
@@ -120,7 +120,9 @@ public class OpeningHourTestTest {
     public void testCheckOpeningHourSyntax4() {
         assertThat(openingHourTest.checkOpeningHourSyntax(null, null), isEmpty());
         assertThat(openingHourTest.checkOpeningHourSyntax(null, ""), isEmpty());
-        assertEquals("null - The value contains nothing meaningful which can be parsed.",
+        assertEquals("opening_hours - The value contains nothing meaningful which can be parsed.",
+                openingHourTest.checkOpeningHourSyntax("opening_hours", " ").get(0).getMessage());
+        assertEquals("null - The optional_conf_parm[\"tag_key\"] parameter is of unknown type. Given object, expected string.",
                 openingHourTest.checkOpeningHourSyntax(null, " ").get(0).getMessage());
     }
 
@@ -179,20 +181,16 @@ public class OpeningHourTestTest {
     public void testCheckServiceTimeSyntax1() {
         final String key = "service_times";
         // frequently used tags according to https://taginfo.openstreetmap.org/keys/service_times#values
-        assertThat(openingHourTest.checkOpeningHourSyntax(key, "Su 10:00", OpeningHourTest.CheckMode.BOTH), isEmpty());
-        assertThat(openingHourTest.checkOpeningHourSyntax(key, "automatic", OpeningHourTest.CheckMode.BOTH), not(isEmpty()));
-        assertThat(openingHourTest.checkOpeningHourSyntax(key, "Mo-Sa 09:00-18:00", OpeningHourTest.CheckMode.BOTH), isEmpty());
-        assertThat(openingHourTest.checkOpeningHourSyntax(key, "Su 09:30; We 19:30", OpeningHourTest.CheckMode.BOTH), isEmpty());
-        assertThat(openingHourTest.checkOpeningHourSyntax(key, "Mo-Fr 00:00-00:30,04:00-00:30; Sa,Su,PH 00:00-24:00",
-                OpeningHourTest.CheckMode.BOTH), isEmpty());
-        assertThat(openingHourTest.checkOpeningHourSyntax(key, "Mo-Fr 0:00-0:30,4:00-00:30; Sa,Su,PH 0:00-24:00",
-                OpeningHourTest.CheckMode.BOTH), hasSize(1));
+        assertThat(openingHourTest.checkOpeningHourSyntax(key, "Su 10:00"), isEmpty());
+        assertThat(openingHourTest.checkOpeningHourSyntax(key, "automatic"), not(isEmpty()));
+        assertThat(openingHourTest.checkOpeningHourSyntax(key, "Mo-Sa 09:00-18:00"), isEmpty());
+        assertThat(openingHourTest.checkOpeningHourSyntax(key, "Su 09:30; We 19:30"), isEmpty());
+        assertThat(openingHourTest.checkOpeningHourSyntax(key, "Mo-Fr 00:00-00:30,04:00-00:30; Sa,Su,PH 00:00-24:00"), isEmpty());
+        assertThat(openingHourTest.checkOpeningHourSyntax(key, "Mo-Fr 0:00-0:30,4:00-00:30; Sa,Su,PH 0:00-24:00"), hasSize(1));
         assertEquals("Mo-Fr 00:00-00:30,04:00-00:30; Sa,Su,PH 00:00-24:00",
-                openingHourTest.checkOpeningHourSyntax(key, "Mo-Fr 0:00-0:30,4:00-00:30; Sa,Su,PH 0:00-24:00",
-                OpeningHourTest.CheckMode.BOTH).get(0).getPrettifiedValue());
+                openingHourTest.checkOpeningHourSyntax(key, "Mo-Fr 0:00-0:30,4:00-00:30; Sa,Su,PH 0:00-24:00").get(0).getPrettifiedValue());
         assertEquals("Mo-Fr 00:00-00:30,04:00-00:30; Sa,Su,PH 00:00-24:00",
-                openingHourTest.checkOpeningHourSyntax(key, "Mo-Fr 0:00-0:30,4:00-00:30; Sa,Su,PH 0:00-24:00",
-                OpeningHourTest.CheckMode.BOTH).get(0).getPrettifiedValue());
+                openingHourTest.checkOpeningHourSyntax(key, "Mo-Fr 0:00-0:30,4:00-00:30; Sa,Su,PH 0:00-24:00").get(0).getPrettifiedValue());
     }
 
     /**
@@ -202,19 +200,15 @@ public class OpeningHourTestTest {
     public void testCheckCollectionTimeSyntax1() {
         final String key = "collection_times";
         // frequently used tags according to https://taginfo.openstreetmap.org/keys/collection_times#values
-        assertThat(openingHourTest.checkOpeningHourSyntax(key, "Mo-Sa 09:00", OpeningHourTest.CheckMode.BOTH), isEmpty());
-        assertThat(openingHourTest.checkOpeningHourSyntax(key, "fixme", OpeningHourTest.CheckMode.BOTH), not(isEmpty()));
-        assertThat(openingHourTest.checkOpeningHourSyntax(key, "daily", OpeningHourTest.CheckMode.BOTH), not(isEmpty()));
-        assertThat(openingHourTest.checkOpeningHourSyntax(key, "Mo-Fr 13:30,17:45,19:00; Sa 15:00; Su 11:00",
-                OpeningHourTest.CheckMode.BOTH), isEmpty());
-        assertThat(openingHourTest.checkOpeningHourSyntax(key, "Mo-Fr 13:30, 17:45, 19:00; Sa 15:00; Su 11:00",
-                OpeningHourTest.CheckMode.BOTH), hasSize(1));
+        assertThat(openingHourTest.checkOpeningHourSyntax(key, "Mo-Sa 09:00"), isEmpty());
+        assertThat(openingHourTest.checkOpeningHourSyntax(key, "fixme"), not(isEmpty()));
+        assertThat(openingHourTest.checkOpeningHourSyntax(key, "daily"), not(isEmpty()));
+        assertThat(openingHourTest.checkOpeningHourSyntax(key, "Mo-Fr 13:30,17:45,19:00; Sa 15:00; Su 11:00"), isEmpty());
+        assertThat(openingHourTest.checkOpeningHourSyntax(key, "Mo-Fr 13:30, 17:45, 19:00; Sa 15:00; Su 11:00"), hasSize(1));
         assertEquals(Severity.OTHER,
-                openingHourTest.checkOpeningHourSyntax(key, "Mo-Fr 13:30, 17:45, 19:00; Sa 15:00; Su 11:00",
-                OpeningHourTest.CheckMode.BOTH).get(0).getSeverity());
+                openingHourTest.checkOpeningHourSyntax(key, "Mo-Fr 13:30, 17:45, 19:00; Sa 15:00; Su 11:00").get(0).getSeverity());
         assertEquals("Mo-Fr 13:30,17:45,19:00; Sa 15:00; Su 11:00",
-                openingHourTest.checkOpeningHourSyntax(key, "Mo-Fr 13:30, 17:45, 19:00; Sa 15:00; Su 11:00",
-                OpeningHourTest.CheckMode.BOTH).get(0).getPrettifiedValue());
+                openingHourTest.checkOpeningHourSyntax(key, "Mo-Fr 13:30, 17:45, 19:00; Sa 15:00; Su 11:00").get(0).getPrettifiedValue());
     }
 
     /**
diff --git a/test/unit/org/openstreetmap/josm/gui/MapStatusTest.java b/test/unit/org/openstreetmap/josm/gui/MapStatusTest.java
index c0929e9..d42b5e8 100644
--- a/test/unit/org/openstreetmap/josm/gui/MapStatusTest.java
+++ b/test/unit/org/openstreetmap/josm/gui/MapStatusTest.java
@@ -3,6 +3,7 @@ package org.openstreetmap.josm.gui;
 
 import org.junit.Rule;
 import org.junit.Test;
+import org.openstreetmap.josm.TestUtils;
 import org.openstreetmap.josm.testutils.JOSMTestRules;
 
 import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
@@ -25,6 +26,7 @@ public class MapStatusTest {
      */
     @Test
     public void testEqualsContract() {
+        TestUtils.assumeWorkingEqualsVerifier();
         EqualsVerifier.forClass(MapStatus.StatusTextHistory.class).withIgnoredFields("text").verify();
     }
 }
diff --git a/test/unit/org/openstreetmap/josm/gui/dialogs/InspectPrimitiveDialogTest.java b/test/unit/org/openstreetmap/josm/gui/dialogs/InspectPrimitiveDialogTest.java
index ced1aad..cbff351 100644
--- a/test/unit/org/openstreetmap/josm/gui/dialogs/InspectPrimitiveDialogTest.java
+++ b/test/unit/org/openstreetmap/josm/gui/dialogs/InspectPrimitiveDialogTest.java
@@ -59,6 +59,7 @@ public class InspectPrimitiveDialogTest {
                 "  In changeset: 0\n" +
                 "  Coordinates: 0.0, 0.0\n" +
                 "  Coordinates (projected): 0.0, -7.081154551613622E-10\n" +
+                "  UTM Zone: 31S\n" +
                 "\n", InspectPrimitiveDialog.buildDataText(ds, new ArrayList<>(ds.allPrimitives())));
     }
 
@@ -94,7 +95,7 @@ public class InspectPrimitiveDialogTest {
 
         // CHECKSTYLE.OFF: LineLength
         String baseText =
-                "Styles Cache for \"node ‎(0.0, 0.0)\":\n" +
+                "Styles Cache for \"node\":\n" +
                 "\n" +
                 "> applying mapcss style \"JOSM default (MapCSS)\"\n" +
                 "\n" +
diff --git a/test/unit/org/openstreetmap/josm/gui/dialogs/MinimapDialogTest.java b/test/unit/org/openstreetmap/josm/gui/dialogs/MinimapDialogTest.java
index 36eee87..2fbb0a1 100644
--- a/test/unit/org/openstreetmap/josm/gui/dialogs/MinimapDialogTest.java
+++ b/test/unit/org/openstreetmap/josm/gui/dialogs/MinimapDialogTest.java
@@ -1,15 +1,35 @@
 // License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.gui.dialogs;
 
+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.image.BufferedImage;
+
+import javax.swing.JMenuItem;
+import javax.swing.JPopupMenu;
+
+import java.util.concurrent.Callable;
 
 import org.junit.Rule;
 import org.junit.Test;
+import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.TestUtils;
+import org.openstreetmap.josm.gui.bbox.SlippyMapBBoxChooser;
+import org.openstreetmap.josm.gui.bbox.SourceButton;
 import org.openstreetmap.josm.testutils.JOSMTestRules;
 
 import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 
+import org.awaitility.Awaitility;
+
 /**
  * Unit tests of {@link MinimapDialog} class.
  */
@@ -20,7 +40,7 @@ public class MinimapDialogTest {
      */
     @Rule
     @SuppressFBWarnings(value = "URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD")
-    public JOSMTestRules test = new JOSMTestRules().platform();
+    public JOSMTestRules josmTestRules = new JOSMTestRules().main().platform().projection().fakeImagery();
 
     /**
      * Unit test of {@link MinimapDialog} class.
@@ -33,4 +53,175 @@ public class MinimapDialogTest {
         dlg.hideDialog();
         assertFalse(dlg.isVisible());
     }
+
+    private static void assertSingleSelectedSourceLabel(JPopupMenu menu, String label) {
+        boolean found = false;
+        for (Component c: menu.getComponents()) {
+            if (JPopupMenu.Separator.class.isInstance(c)) {
+                break;
+            } else {
+                boolean equalText = ((JMenuItem) c).getText() == label;
+                boolean isSelected = ((JMenuItem) c).isSelected();
+                assertEquals(equalText, isSelected);
+                if (equalText) {
+                    assertFalse("Second selected source found", found);
+                    found = true;
+                }
+            }
+        }
+        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...
+        }
+        fail("Failed to find menu item with label " + label);
+        return null;
+    }
+
+    protected MinimapDialog minimap;
+    protected SlippyMapBBoxChooser slippyMap;
+    protected SourceButton sourceButton;
+
+    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");
+
+        // get dlg in a paintable state
+        this.minimap.addNotify();
+        this.minimap.doLayout();
+    }
+
+    protected void paintSlippyMap() {
+        if (paintedSlippyMap == null ||
+            paintedSlippyMap.getWidth() != this.slippyMap.getSize().width ||
+            paintedSlippyMap.getHeight() != this.slippyMap.getSize().height) {
+            paintedSlippyMap = new BufferedImage(
+                this.slippyMap.getSize().width,
+                this.slippyMap.getSize().height,
+                BufferedImage.TYPE_INT_RGB
+            );
+        } // else reuse existing one - allocation is expensive
+
+        // clear background to a recognizably "wrong" color & dispose our Graphics2D so we don't risk carrying over
+        // any state
+        Graphics2D g = paintedSlippyMap.createGraphics();
+        g.setBackground(Color.BLUE);
+        g.clearRect(0, 0, paintedSlippyMap.getWidth(), paintedSlippyMap.getHeight());
+        g.dispose();
+
+        g = paintedSlippyMap.createGraphics();
+        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
+     */
+    @Test
+    public void testSourceSwitching() throws Exception {
+        // relevant prefs starting out empty, should choose the first source and have shown download area enabled
+        // (not that there's a data layer for it to use)
+
+        this.setUpMiniMap();
+
+        // an initial paint operation is required to trigger the tile fetches
+        this.paintSlippyMap();
+
+        Awaitility.await().atMost(1000, MILLISECONDS).until(this.slippyMapTasksFinished());
+
+        this.paintSlippyMap();
+
+        assertEquals(0xffffffff, paintedSlippyMap.getRGB(0, 0));
+
+        assertSingleSelectedSourceLabel(this.sourceButton.getPopupMenu(), "White Tiles");
+
+        getSourceMenuItemByLabel(this.sourceButton.getPopupMenu(), "Magenta Tiles").doClick();
+        assertSingleSelectedSourceLabel(this.sourceButton.getPopupMenu(), "Magenta Tiles");
+        // call paint to trigger new tile fetch
+        this.paintSlippyMap();
+
+        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");
+        // call paint to trigger new tile fetch
+        this.paintSlippyMap();
+
+        Awaitility.await().atMost(1000, MILLISECONDS).until(this.slippyMapTasksFinished());
+
+        this.paintSlippyMap();
+
+        assertEquals(0xff00ff00, paintedSlippyMap.getRGB(0, 0));
+
+        assertEquals("Green Tiles", Main.pref.get("slippy_map_chooser.mapstyle", "Fail"));
+    }
+
+    /**
+     * Tests minimap obeys a saved "mapstyle" preference on startup.
+     * @throws Exception if any error occurs
+     */
+    @Test
+    public void testSourcePrefObeyed() throws Exception {
+        Main.pref.put("slippy_map_chooser.mapstyle", "Green Tiles");
+
+        this.setUpMiniMap();
+
+        assertSingleSelectedSourceLabel(this.sourceButton.getPopupMenu(), "Green Tiles");
+
+        // an initial paint operation is required to trigger the tile fetches
+        this.paintSlippyMap();
+
+        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");
+
+        assertEquals("Magenta Tiles", Main.pref.get("slippy_map_chooser.mapstyle", "Fail"));
+    }
+
+    /**
+     * Tests minimap handles an unrecognized "mapstyle" preference on startup
+     * @throws Exception if any error occurs
+     */
+    @Test
+    public void testSourcePrefInvalid() throws Exception {
+        Main.pref.put("slippy_map_chooser.mapstyle", "Hooloovoo Tiles");
+
+        this.setUpMiniMap();
+
+        assertSingleSelectedSourceLabel(this.sourceButton.getPopupMenu(), "White Tiles");
+
+        // an initial paint operation is required to trigger the tile fetches
+        this.paintSlippyMap();
+
+        Awaitility.await().atMost(1000, MILLISECONDS).until(this.slippyMapTasksFinished());
+
+        this.paintSlippyMap();
+
+        assertEquals(0xffffffff, paintedSlippyMap.getRGB(0, 0));
+    }
 }
diff --git a/test/unit/org/openstreetmap/josm/gui/io/AsynchronousUploadPrimitivesTaskTest.java b/test/unit/org/openstreetmap/josm/gui/io/AsynchronousUploadPrimitivesTaskTest.java
new file mode 100644
index 0000000..b229ce7
--- /dev/null
+++ b/test/unit/org/openstreetmap/josm/gui/io/AsynchronousUploadPrimitivesTaskTest.java
@@ -0,0 +1,74 @@
+// 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 org.junit.After;
+import org.junit.Test;
+import org.junit.Assert;
+import org.openstreetmap.josm.data.APIDataSet;
+import org.openstreetmap.josm.data.coor.LatLon;
+import org.openstreetmap.josm.data.osm.Changeset;
+import org.openstreetmap.josm.data.osm.DataSet;
+import org.openstreetmap.josm.data.osm.Node;
+import org.openstreetmap.josm.data.osm.Way;
+import org.openstreetmap.josm.gui.layer.OsmDataLayer;
+import org.openstreetmap.josm.io.UploadStrategySpecification;
+import org.openstreetmap.josm.testutils.JOSMTestRules;
+
+import java.util.Optional;
+
+public class AsynchronousUploadPrimitivesTaskTest {
+
+    private UploadStrategySpecification strategy;
+    private OsmDataLayer layer;
+    private APIDataSet toUpload;
+    private Changeset changeset;
+    private AsynchronousUploadPrimitivesTask uploadPrimitivesTask;
+
+    /**
+     * Setup tests
+     */
+    @Rule
+    @SuppressFBWarnings(value = "URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD")
+    public JOSMTestRules test = new JOSMTestRules();
+
+    @Before
+    public void bootStrap() {
+        DataSet dataSet = new DataSet();
+        Node node1 = new Node();
+        Node node2 = new Node();
+        node1.setCoor(new LatLon(0, 0));
+        node2.setCoor(new LatLon(30, 30));
+        Way way = new Way();
+        way.addNode(node1);
+        way.addNode(node2);
+        dataSet.addPrimitive(node1);
+        dataSet.addPrimitive(node2);
+        dataSet.addPrimitive(way);
+
+        toUpload = new APIDataSet(dataSet);
+        layer = new OsmDataLayer(dataSet, "uploadTest", null);
+        strategy = new UploadStrategySpecification();
+        changeset = new Changeset();
+        uploadPrimitivesTask = AsynchronousUploadPrimitivesTask.createAsynchronousUploadTask(strategy, layer, toUpload, changeset).get();
+    }
+
+    @After
+    public void tearDown() {
+        toUpload = null;
+        layer = null;
+        strategy = null;
+        changeset = null;
+        uploadPrimitivesTask = null;
+    }
+
+    @Test
+    public void testSingleUploadInstance() {
+        Optional<AsynchronousUploadPrimitivesTask> task = AsynchronousUploadPrimitivesTask.
+                createAsynchronousUploadTask(strategy, layer, toUpload, changeset);
+        Assert.assertNotNull(uploadPrimitivesTask);
+        Assert.assertFalse(task.isPresent());
+    }
+}
diff --git a/test/unit/org/openstreetmap/josm/gui/io/ChangesetCommentModelTest.java b/test/unit/org/openstreetmap/josm/gui/io/ChangesetCommentModelTest.java
new file mode 100644
index 0000000..002d787
--- /dev/null
+++ b/test/unit/org/openstreetmap/josm/gui/io/ChangesetCommentModelTest.java
@@ -0,0 +1,47 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.gui.io;
+
+import static org.junit.Assert.assertEquals;
+
+import java.util.Arrays;
+import java.util.Collections;
+
+import org.junit.Rule;
+import org.junit.Test;
+import org.openstreetmap.josm.testutils.JOSMTestRules;
+
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
+
+/**
+ * Unit tests of {@link ChangesetCommentModel} class.
+ */
+public class ChangesetCommentModelTest {
+
+    /**
+     * Setup tests
+     */
+    @Rule
+    @SuppressFBWarnings(value = "URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD")
+    public JOSMTestRules test = new JOSMTestRules();
+
+    /**
+     * Test of {@link ChangesetCommentModel#findHashTags}.
+     */
+    @Test
+    public void testFindHashTags() {
+        ChangesetCommentModel model = new ChangesetCommentModel();
+        assertEquals(Collections.emptyList(), model.findHashTags());
+        model.setComment(" ");
+        assertEquals(Collections.emptyList(), model.findHashTags());
+        model.setComment(" #");
+        assertEquals(Collections.emptyList(), model.findHashTags());
+        model.setComment(" # ");
+        assertEquals(Collections.emptyList(), model.findHashTags());
+        model.setComment(" https://example.com/#map ");
+        assertEquals(Collections.emptyList(), model.findHashTags());
+        model.setComment(" #foo ");
+        assertEquals(Arrays.asList("#foo"), model.findHashTags());
+        model.setComment(" #foo #bar baz");
+        assertEquals(Arrays.asList("#foo", "#bar"), model.findHashTags());
+    }
+}
diff --git a/test/unit/org/openstreetmap/josm/gui/layer/AutosaveTaskTest.java b/test/unit/org/openstreetmap/josm/gui/layer/AutosaveTaskTest.java
index 6fd33b2..0fd0ff8 100644
--- a/test/unit/org/openstreetmap/josm/gui/layer/AutosaveTaskTest.java
+++ b/test/unit/org/openstreetmap/josm/gui/layer/AutosaveTaskTest.java
@@ -90,7 +90,7 @@ public class AutosaveTaskTest {
     @Test
     public void testGetNewLayerFile() throws IOException {
         Files.createDirectories(task.getAutosaveDir());
-        AutosaveLayerInfo info = new AutosaveLayerInfo(new OsmDataLayer(new DataSet(), "layer", null));
+        AutosaveLayerInfo<?> info = new AutosaveLayerInfo<>(new OsmDataLayer(new DataSet(), "layer", null));
         Date fixed = Date.from(ZonedDateTime.of(2016, 1, 1, 1, 2, 3, 456_000_000, ZoneId.systemDefault()).toInstant());
 
         AutosaveTask.PROP_INDEX_LIMIT.put(5);
diff --git a/test/unit/org/openstreetmap/josm/gui/layer/NoteLayerTest.java b/test/unit/org/openstreetmap/josm/gui/layer/NoteLayerTest.java
index f2a018f..6bc40e2 100644
--- a/test/unit/org/openstreetmap/josm/gui/layer/NoteLayerTest.java
+++ b/test/unit/org/openstreetmap/josm/gui/layer/NoteLayerTest.java
@@ -3,9 +3,11 @@ package org.openstreetmap.josm.gui.layer;
 
 import static org.junit.Assert.assertEquals;
 
-import org.junit.BeforeClass;
+import org.junit.Rule;
 import org.junit.Test;
-import org.openstreetmap.josm.JOSMFixture;
+import org.openstreetmap.josm.testutils.JOSMTestRules;
+
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 
 /**
  * Unit tests of {@link NoteLayer} class.
@@ -15,10 +17,9 @@ public class NoteLayerTest {
     /**
      * Setup tests
      */
-    @BeforeClass
-    public static void setUpBeforeClass() {
-        JOSMFixture.createUnitTestFixture().init();
-    }
+    @Rule
+    @SuppressFBWarnings(value = "URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD")
+    public JOSMTestRules test = new JOSMTestRules();
 
     /**
      * Non-regression test for ticket <a href="https://josm.openstreetmap.de/ticket/13208">#13208</a>.
@@ -27,4 +28,53 @@ public class NoteLayerTest {
     public void testTicket13208() {
         assertEquals("0 notes", new NoteLayer().getToolTipText());
     }
+
+    /**
+     * Unit test of {@link NoteLayer#insertLineBreaks}.
+     */
+    @Test
+    public void testInsertLineBreaks() {
+        // empty string
+        assertEquals("", NoteLayer.insertLineBreaks(""));
+        // CHECKSTYLE.OFF: LineLength
+        // https://www.openstreetmap.org/note/278197: long text with periods
+        assertEquals("<html>Note 278197<hr/>Klumbumbus on Nov 29, 2014:<br>Hier soll eine zusätzliche Rechtsabbiegerspur entstehen.<br>Müsste dann bei Fertigstellung nochmal geprüft und die lanes angepoasst werden.<br><a href=\"http://www.sachsen-fernsehen.de/Aktuell/Chemnitz/Artikel/1370077/Bauarbeiten-auf-Chemnitzer-Hartmannstrasse-beginnen/\">http://www.sachsen-fernsehen.de/Aktuell/Chemnitz/Artikel/1370077/Bauarbeiten-auf-Chemnitzer-Hartmannstrasse-beginnen/</a><hr/>Saxonyking on May  [...]
+                NoteLayer.insertLineBreaks(
+                     "<html>Note 278197<hr/>Klumbumbus on Nov 29, 2014:<br>Hier soll eine zusätzliche Rechtsabbiegerspur entstehen. Müsste dann bei Fertigstellung nochmal geprüft und die lanes angepoasst werden. <a href=\"http://www.sachsen-fernsehen.de/Aktuell/Chemnitz/Artikel/1370077/Bauarbeiten-auf-Chemnitzer-Hartmannstrasse-beginnen/\">http://www.sachsen-fernsehen.de/Aktuell/Chemnitz/Artikel/1370077/Bauarbeiten-auf-Chemnitzer-Hartmannstrasse-beginnen/</a><hr/>Saxonyking on May 4, 201 [...]
+        // https://www.openstreetmap.org/note/1196942: long text without periods (question marks instead)
+        assertEquals("<html>Note 1196942<hr/>Mateusz Konieczny on Nov 6, 2017:<br><a href=\"https://www.openstreetmap.org/way/51661050#map=17/50.9326393/14.0821931layers=N\">https://www.openstreetmap.org/way/51661050#map=17/50.9326393/14.0821931layers=N</a> Why this is not tagged as highway=steps?<br>What is the meaning of steps=yes here?<br>See <a href=\"http://overpass-turbo.eu/s/sLv\">http://overpass-turbo.eu/s/sLv</a> for more cases (I considered armchair mapping it to highway=steps  [...]
+                NoteLayer.insertLineBreaks(
+                     "<html>Note 1196942<hr/>Mateusz Konieczny on Nov 6, 2017:<br><a href=\"https://www.openstreetmap.org/way/51661050#map=17/50.9326393/14.0821931layers=N\">https://www.openstreetmap.org/way/51661050#map=17/50.9326393/14.0821931layers=N</a> Why this is not tagged as highway=steps? What is the meaning of steps=yes here? See <a href=\"http://overpass-turbo.eu/s/sLv\">http://overpass-turbo.eu/s/sLv</a> for more cases (I considered armchair mapping it to highway=steps but I  [...]
+        // https://www.openstreetmap.org/note/1029364: several spaces between sentence mark and next sentence
+        assertEquals("<html>Note 1029364<hr/>SaGm on Jun 13, 2017:<br>HOW CAN I CONNECT THIS ROUD TO THE MAIN ROUDS?<br><br>if i make a GPX trail its SKIP this way.<br><hr/>dsh4 on Jun 14, 2017:<br>To connect roads, they need to have a node in common.<br>This is already the case here: the footway has nodes in common with Idan and with Katsenelson.<br>Thus, in that respect, the map is correct.<br>If your router doesn't use the new footway, it would be better to ask about that elsewhere, s [...]
+                NoteLayer.insertLineBreaks(
+                     "<html>Note 1029364<hr/>SaGm on Jun 13, 2017:<br>HOW CAN I CONNECT THIS ROUD TO THE MAIN ROUDS?<br><br>if i make a GPX trail its SKIP this way.<br><hr/>dsh4 on Jun 14, 2017:<br>To connect roads, they need to have a node in common.  This is already the case here: the footway has nodes in common with Idan and with Katsenelson.  Thus, in that respect, the map is correct.  If your router doesn't use the new footway, it would be better to ask about that elsewhere, see <a  [...]
+        // https://www.openstreetmap.org/note/230617: ideographic full stops
+        assertEquals("<html>Note 230617<hr/>deckkun on Aug 27, 2014:<br>筑紫が丘への抜け道?<hr/>Rakkka on Jul 20, 2017:<br>地図を修正するためのメモではないように見えますが、解決してもよろしいでしょうか?<hr/><anonymous> on Jul 21, 2017:<br>そうです。<br>一部未舗装があり、急な坂があります。<br>細い部分もあるので自動車は無理です。<br><hr/>Rakkka on Jul 21, 2017:<br>この地点から北西へ伸びている道路のことですよね。<br>自動車道になっているので、自動車が通れないなら直さないといけませんが、通れない部分がわからないので、メモは残しておきます。<br><hr/><anonymous> on Jul 21, 2017:<br>そうです。<br>マーク地点からですと白百合学園までは行けますが、そこから筑紫が丘六丁目7に出る付近は資材置き場があり、狭く、もしかしたら一部私有地 [...]
+                NoteLayer.insertLineBreaks(
+                     "<html>Note 230617<hr/>deckkun on Aug 27, 2014:<br>筑紫が丘への抜け道?<hr/>Rakkka on Jul 20, 2017:<br>地図を修正するためのメモではないように見えますが、解決してもよろしいでしょうか?<hr/><anonymous> on Jul 21, 2017:<br>そうです。一部未舗装があり、急な坂があります。細い部分もあるので自動車は無理です。<hr/>Rakkka on Jul 21, 2017:<br>この地点から北西へ伸びている道路のことですよね。自動車道になっているので、自動車が通れないなら直さないといけませんが、通れない部分がわからないので、メモは残しておきます。<hr/><anonymous> on Jul 21, 2017:<br>そうです。マーク地点からですと白百合学園までは行けますが、そこから筑紫が丘六丁目7に出る付近は資材置き場があり、狭く、もしかしたら一部私有地内の通行になるのかも。軽自動車なら行ける幅だと思 [...]
+        // CHECKSTYLE.ON: LineLength
+    }
+
+    /**
+     * Unit test of {@link NoteLayer#replaceLinks}.
+     */
+    @Test
+    public void testReplaceLinks() {
+        // empty string
+        assertEquals("", NoteLayer.replaceLinks(""));
+        // no link
+        assertEquals("no http link", NoteLayer.replaceLinks("no http link"));
+        // just one link
+        assertEquals("<a href=\"https://www.example.com/test\">https://www.example.com/\u200btest</a>",
+                NoteLayer.replaceLinks("https://www.example.com/test"));
+        // link with dot
+        assertEquals("<a href=\"https://www.example.com\">https://www.example.com</a>.",
+                NoteLayer.replaceLinks("https://www.example.com."));
+        // CHECKSTYLE.OFF: LineLength
+        // text with several links (with and without slash)
+        assertEquals("foo <a href=\"https://foo.example.com/test\">https://foo.example.com/\u200btest</a> bar <a href=\"https://bar.example.com\">https://bar.example.com</a> baz",
+                NoteLayer.replaceLinks("foo https://foo.example.com/test bar https://bar.example.com baz"));
+        // CHECKSTYLE.ON: LineLength
+    }
 }
diff --git a/test/unit/org/openstreetmap/josm/gui/layer/geoimage/ImageDisplayTest.java b/test/unit/org/openstreetmap/josm/gui/layer/geoimage/ImageDisplayTest.java
index 45c8da4..bafc364 100644
--- a/test/unit/org/openstreetmap/josm/gui/layer/geoimage/ImageDisplayTest.java
+++ b/test/unit/org/openstreetmap/josm/gui/layer/geoimage/ImageDisplayTest.java
@@ -8,6 +8,7 @@ import java.awt.Rectangle;
 
 import org.junit.Rule;
 import org.junit.Test;
+import org.openstreetmap.josm.gui.layer.geoimage.ImageDisplay.VisRect;
 import org.openstreetmap.josm.testutils.JOSMTestRules;
 
 import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
@@ -29,16 +30,16 @@ public class ImageDisplayTest {
     @Test
     public void testCalculateDrawImageRectangle() {
         assertEquals(new Rectangle(),
-                ImageDisplay.calculateDrawImageRectangle(new Rectangle(), new Dimension()));
+                ImageDisplay.calculateDrawImageRectangle(new VisRect(), new Dimension()));
         assertEquals(new Rectangle(0, 0, 10, 5),
-                ImageDisplay.calculateDrawImageRectangle(new Rectangle(0, 0, 10, 5), new Dimension(10, 5)));
+                ImageDisplay.calculateDrawImageRectangle(new VisRect(0, 0, 10, 5), new Dimension(10, 5)));
         assertEquals(new Rectangle(0, 0, 10, 5),
-                ImageDisplay.calculateDrawImageRectangle(new Rectangle(0, 0, 20, 10), new Dimension(10, 5)));
+                ImageDisplay.calculateDrawImageRectangle(new VisRect(0, 0, 20, 10), new Dimension(10, 5)));
         assertEquals(new Rectangle(0, 0, 20, 10),
-                ImageDisplay.calculateDrawImageRectangle(new Rectangle(0, 0, 10, 5), new Dimension(20, 10)));
+                ImageDisplay.calculateDrawImageRectangle(new VisRect(0, 0, 10, 5), new Dimension(20, 10)));
         assertEquals(new Rectangle(5, 0, 24, 12),
-                ImageDisplay.calculateDrawImageRectangle(new Rectangle(0, 0, 10, 5), new Dimension(35, 12)));
+                ImageDisplay.calculateDrawImageRectangle(new VisRect(0, 0, 10, 5), new Dimension(35, 12)));
         assertEquals(new Rectangle(0, 1, 8, 4),
-                ImageDisplay.calculateDrawImageRectangle(new Rectangle(0, 0, 10, 5), new Dimension(8, 6)));
+                ImageDisplay.calculateDrawImageRectangle(new VisRect(0, 0, 10, 5), new Dimension(8, 6)));
     }
 }
diff --git a/test/unit/org/openstreetmap/josm/gui/layer/gpx/DownloadWmsAlongTrackActionTest.java b/test/unit/org/openstreetmap/josm/gui/layer/gpx/DownloadWmsAlongTrackActionTest.java
index 369780f..1b9c238 100644
--- a/test/unit/org/openstreetmap/josm/gui/layer/gpx/DownloadWmsAlongTrackActionTest.java
+++ b/test/unit/org/openstreetmap/josm/gui/layer/gpx/DownloadWmsAlongTrackActionTest.java
@@ -28,7 +28,7 @@ public class DownloadWmsAlongTrackActionTest {
      */
     @Rule
     @SuppressFBWarnings(value = "URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD")
-    public JOSMTestRules test = new JOSMTestRules().platform().main().projection();
+    public JOSMTestRules test = new JOSMTestRules().platform().main().projection().timeout(20000);
 
     /**
      * Test action without layer.
diff --git a/test/unit/org/openstreetmap/josm/gui/preferences/advanced/PrefEntryTest.java b/test/unit/org/openstreetmap/josm/gui/preferences/advanced/PrefEntryTest.java
index 1c90092..35ffd47 100644
--- a/test/unit/org/openstreetmap/josm/gui/preferences/advanced/PrefEntryTest.java
+++ b/test/unit/org/openstreetmap/josm/gui/preferences/advanced/PrefEntryTest.java
@@ -8,6 +8,7 @@ import static org.junit.Assert.assertTrue;
 import org.junit.BeforeClass;
 import org.junit.Test;
 import org.openstreetmap.josm.JOSMFixture;
+import org.openstreetmap.josm.TestUtils;
 import org.openstreetmap.josm.spi.preferences.StringSetting;
 
 import nl.jqno.equalsverifier.EqualsVerifier;
@@ -54,6 +55,7 @@ public class PrefEntryTest {
      */
     @Test
     public void testEqualsContract() {
+        TestUtils.assumeWorkingEqualsVerifier();
         EqualsVerifier.forClass(PrefEntry.class).usingGetClass()
             .withIgnoredFields("value", "defaultValue", "isDefault", "changed")
             .verify();
diff --git a/test/unit/org/openstreetmap/josm/gui/tagging/ac/AutoCompletionManagerTest.java b/test/unit/org/openstreetmap/josm/gui/tagging/ac/AutoCompletionManagerTest.java
index 2c3f2cf..f8ed7dd 100644
--- a/test/unit/org/openstreetmap/josm/gui/tagging/ac/AutoCompletionManagerTest.java
+++ b/test/unit/org/openstreetmap/josm/gui/tagging/ac/AutoCompletionManagerTest.java
@@ -3,6 +3,7 @@ package org.openstreetmap.josm.gui.tagging.ac;
 
 import org.junit.Rule;
 import org.junit.Test;
+import org.openstreetmap.josm.TestUtils;
 import org.openstreetmap.josm.gui.tagging.ac.AutoCompletionManager.UserInputTag;
 import org.openstreetmap.josm.testutils.JOSMTestRules;
 
@@ -26,6 +27,7 @@ public class AutoCompletionManagerTest {
      */
     @Test
     public void testEqualsContract() {
+        TestUtils.assumeWorkingEqualsVerifier();
         EqualsVerifier.forClass(UserInputTag.class).usingGetClass()
             .verify();
     }
diff --git a/test/unit/org/openstreetmap/josm/gui/util/WindowGeometryTest.java b/test/unit/org/openstreetmap/josm/gui/util/WindowGeometryTest.java
index c05f542..0ae22bd 100644
--- a/test/unit/org/openstreetmap/josm/gui/util/WindowGeometryTest.java
+++ b/test/unit/org/openstreetmap/josm/gui/util/WindowGeometryTest.java
@@ -15,6 +15,7 @@ import javax.swing.JPanel;
 
 import org.junit.Rule;
 import org.junit.Test;
+import org.openstreetmap.josm.TestUtils;
 import org.openstreetmap.josm.gui.util.WindowGeometry.WindowGeometryException;
 import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.testutils.JOSMTestRules;
@@ -146,6 +147,7 @@ public class WindowGeometryTest {
      */
     @Test
     public void testEqualsContract() {
+        TestUtils.assumeWorkingEqualsVerifier();
         EqualsVerifier.forClass(WindowGeometry.class).usingGetClass()
             .suppress(Warning.NONFINAL_FIELDS)
             .verify();
diff --git a/test/unit/org/openstreetmap/josm/plugins/PluginHandlerTest.java b/test/unit/org/openstreetmap/josm/plugins/PluginHandlerTest.java
index 2ca0a8b..4ea5d89 100644
--- a/test/unit/org/openstreetmap/josm/plugins/PluginHandlerTest.java
+++ b/test/unit/org/openstreetmap/josm/plugins/PluginHandlerTest.java
@@ -13,6 +13,7 @@ import java.util.List;
 import org.junit.Rule;
 import org.junit.Test;
 import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.TestUtils;
 import org.openstreetmap.josm.gui.preferences.plugin.PluginPreferenceTest;
 import org.openstreetmap.josm.plugins.PluginHandler.DeprecatedPlugin;
 import org.openstreetmap.josm.plugins.PluginHandler.PluginInformationAction;
@@ -39,6 +40,7 @@ public class PluginHandlerTest {
      */
     @Test
     public void testEqualsContract() {
+        TestUtils.assumeWorkingEqualsVerifier();
         EqualsVerifier.forClass(DeprecatedPlugin.class).usingGetClass().verify();
     }
 
diff --git a/test/unit/org/openstreetmap/josm/spi/preferences/ListListSettingTest.java b/test/unit/org/openstreetmap/josm/spi/preferences/ListListSettingTest.java
index c0886ca..3e87616 100644
--- a/test/unit/org/openstreetmap/josm/spi/preferences/ListListSettingTest.java
+++ b/test/unit/org/openstreetmap/josm/spi/preferences/ListListSettingTest.java
@@ -3,6 +3,7 @@ package org.openstreetmap.josm.spi.preferences;
 
 import org.junit.Rule;
 import org.junit.Test;
+import org.openstreetmap.josm.TestUtils;
 import org.openstreetmap.josm.testutils.JOSMTestRules;
 
 import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
@@ -24,6 +25,7 @@ public class ListListSettingTest {
      */
     @Test
     public void testEqualsContract() {
+        TestUtils.assumeWorkingEqualsVerifier();
         EqualsVerifier.forClass(ListListSetting.class).usingGetClass()
             .withIgnoredFields("isNew", "time")
             .verify();
diff --git a/test/unit/org/openstreetmap/josm/spi/preferences/ListSettingTest.java b/test/unit/org/openstreetmap/josm/spi/preferences/ListSettingTest.java
index cb934ce..ac971f6 100644
--- a/test/unit/org/openstreetmap/josm/spi/preferences/ListSettingTest.java
+++ b/test/unit/org/openstreetmap/josm/spi/preferences/ListSettingTest.java
@@ -3,6 +3,7 @@ package org.openstreetmap.josm.spi.preferences;
 
 import org.junit.Rule;
 import org.junit.Test;
+import org.openstreetmap.josm.TestUtils;
 import org.openstreetmap.josm.testutils.JOSMTestRules;
 
 import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
@@ -24,6 +25,7 @@ public class ListSettingTest {
      */
     @Test
     public void testEqualsContract() {
+        TestUtils.assumeWorkingEqualsVerifier();
         EqualsVerifier.forClass(ListSetting.class).usingGetClass()
             .withIgnoredFields("isNew", "time")
             .verify();
diff --git a/test/unit/org/openstreetmap/josm/spi/preferences/MapListSettingTest.java b/test/unit/org/openstreetmap/josm/spi/preferences/MapListSettingTest.java
index 953f74b..f44c00b 100644
--- a/test/unit/org/openstreetmap/josm/spi/preferences/MapListSettingTest.java
+++ b/test/unit/org/openstreetmap/josm/spi/preferences/MapListSettingTest.java
@@ -3,6 +3,7 @@ package org.openstreetmap.josm.spi.preferences;
 
 import org.junit.Rule;
 import org.junit.Test;
+import org.openstreetmap.josm.TestUtils;
 import org.openstreetmap.josm.testutils.JOSMTestRules;
 
 import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
@@ -24,6 +25,7 @@ public class MapListSettingTest {
      */
     @Test
     public void testEqualsContract() {
+        TestUtils.assumeWorkingEqualsVerifier();
         EqualsVerifier.forClass(MapListSetting.class).usingGetClass()
             .withIgnoredFields("isNew", "time")
             .verify();
diff --git a/test/unit/org/openstreetmap/josm/spi/preferences/StringSettingTest.java b/test/unit/org/openstreetmap/josm/spi/preferences/StringSettingTest.java
index 03932e7..aba555e 100644
--- a/test/unit/org/openstreetmap/josm/spi/preferences/StringSettingTest.java
+++ b/test/unit/org/openstreetmap/josm/spi/preferences/StringSettingTest.java
@@ -3,6 +3,7 @@ package org.openstreetmap.josm.spi.preferences;
 
 import org.junit.Rule;
 import org.junit.Test;
+import org.openstreetmap.josm.TestUtils;
 import org.openstreetmap.josm.testutils.JOSMTestRules;
 
 import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
@@ -24,6 +25,7 @@ public class StringSettingTest {
      */
     @Test
     public void testEqualsContract() {
+        TestUtils.assumeWorkingEqualsVerifier();
         EqualsVerifier.forClass(StringSetting.class).usingGetClass()
             .withIgnoredFields("isNew", "time")
             .verify();
diff --git a/test/unit/org/openstreetmap/josm/testutils/JOSMTestRules.java b/test/unit/org/openstreetmap/josm/testutils/JOSMTestRules.java
index 238ed20..cec9682 100644
--- a/test/unit/org/openstreetmap/josm/testutils/JOSMTestRules.java
+++ b/test/unit/org/openstreetmap/josm/testutils/JOSMTestRules.java
@@ -1,6 +1,7 @@
 // License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.testutils;
 
+import java.awt.Color;
 import java.io.File;
 import java.io.IOException;
 import java.security.GeneralSecurityException;
@@ -56,6 +57,7 @@ public class JOSMTestRules implements TestRule {
     private boolean usePreferences = false;
     private APIType useAPI = APIType.NONE;
     private String i18n = null;
+    private TileSourceRule tileSourceRule;
     private boolean platform;
     private boolean useProjection;
     private boolean useProjectionNadGrids;
@@ -242,6 +244,37 @@ public class JOSMTestRules implements TestRule {
     }
 
     /**
+     * Replace imagery sources with a default set of mock tile sources
+     *
+     * @return this instance, for easy chaining
+     */
+    public JOSMTestRules fakeImagery() {
+        return this.fakeImagery(
+            new TileSourceRule(
+                true,
+                true,
+                true,
+                new TileSourceRule.ColorSource(Color.WHITE, "White Tiles", 256),
+                new TileSourceRule.ColorSource(Color.BLACK, "Black Tiles", 256),
+                new TileSourceRule.ColorSource(Color.MAGENTA, "Magenta Tiles", 256),
+                new TileSourceRule.ColorSource(Color.GREEN, "Green Tiles", 256)
+            )
+        );
+    }
+
+    /**
+     * Replace imagery sources with those from specific mock tile server setup
+     * @param tileSourceRule Tile source rule
+     *
+     * @return this instance, for easy chaining
+     */
+    public JOSMTestRules fakeImagery(TileSourceRule tileSourceRule) {
+        this.preferences();
+        this.tileSourceRule = tileSourceRule;
+        return this;
+    }
+
+    /**
      * Use the {@link Main#main}, {@code Main.contentPanePrivate}, {@code Main.mainPanel},
      *         {@link Main#menu}, {@link Main#toolbar} global variables in this test.
      * @return this instance, for easy chaining
@@ -256,14 +289,28 @@ public class JOSMTestRules implements TestRule {
     @Override
     public Statement apply(Statement base, Description description) {
         Statement statement = base;
+        // counter-intuitively, Statements which need to have their setup routines performed *after* another one need to
+        // be added into the chain *before* that one, so that it ends up on the "inside".
         if (timeout > 0) {
             // TODO: new DisableOnDebug(timeout)
             statement = new FailOnTimeoutStatement(statement, timeout);
         }
+
+        // this half of TileSourceRule's initialization must happen after josm is set up
+        if (this.tileSourceRule != null) {
+            statement = this.tileSourceRule.applyRegisterLayers(statement, description);
+        }
+
         statement = new CreateJosmEnvironment(statement);
         if (josmHome != null) {
             statement = josmHome.apply(statement, description);
         }
+
+        // run mock tile server as the outermost Statement (started first) so it can hopefully be initializing in
+        // parallel with other setup
+        if (this.tileSourceRule != null) {
+            statement = this.tileSourceRule.applyRunServer(statement, description);
+        }
         return statement;
     }
 
@@ -409,6 +456,13 @@ public class JOSMTestRules implements TestRule {
     }
 
     /**
+     * @return TileSourceRule which is automatically started by this rule
+     */
+    public TileSourceRule getTileSourceRule() {
+        return this.tileSourceRule;
+    }
+
+    /**
      * Clean up after running a test
      */
     @SuppressFBWarnings("DM_GC")
diff --git a/test/unit/org/openstreetmap/josm/testutils/TileSourceRule.java b/test/unit/org/openstreetmap/josm/testutils/TileSourceRule.java
new file mode 100644
index 0000000..d43c412
--- /dev/null
+++ b/test/unit/org/openstreetmap/josm/testutils/TileSourceRule.java
@@ -0,0 +1,313 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.testutils;
+
+import static com.github.tomakehurst.wiremock.core.WireMockConfiguration.options;
+import static org.openstreetmap.josm.TestUtils.getPrivateStaticField;
+
+import java.awt.Color;
+import java.awt.Graphics2D;
+import java.awt.image.BufferedImage;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Objects;
+
+import javax.imageio.ImageIO;
+
+import org.junit.runner.Description;
+import org.junit.runners.model.Statement;
+import org.openstreetmap.josm.data.imagery.ImageryInfo;
+import org.openstreetmap.josm.data.imagery.ImageryLayerInfo;
+import org.openstreetmap.josm.gui.bbox.SlippyMapBBoxChooser;
+import org.openstreetmap.josm.tools.Logging;
+
+import com.github.tomakehurst.wiremock.client.MappingBuilder;
+import com.github.tomakehurst.wiremock.client.ResponseDefinitionBuilder;
+import com.github.tomakehurst.wiremock.client.WireMock;
+import com.github.tomakehurst.wiremock.junit.WireMockRule;
+
+/**
+ * A JUnit rule, based on {@link WireMockRule} to provide a test with a simple mock tile server serving multiple tile
+ * sources.
+ */
+public class TileSourceRule extends WireMockRule {
+    private static class ByteArrayWrapper {
+        public final byte[] byteArray;
+
+        ByteArrayWrapper(byte[] ba) {
+            this.byteArray = ba;
+        }
+    }
+
+    /**
+     * allocation is expensive and many tests may be wanting to set up the same tile sources one after the other, hence
+     * this cache
+     */
+    public static HashMap<ConstSource, ByteArrayWrapper> constPayloadCache = new HashMap<>();
+
+    /**
+     * Class defining a tile source for TileSourceRule to mock. Due to the way WireMock is designed, it is far more
+     * straightforward to serve a single image in all tile positions
+     */
+    public abstract static class ConstSource {
+        /**
+         * method for actually generating the payload body bytes, uncached
+         * @return the payload body bytes
+         */
+        public abstract byte[] generatePayloadBytes();
+
+        /**
+         * @return a {@link MappingBuilder} representing the request matching properties of this tile source, suitable
+         * for passing to {@link WireMockRule#stubFor}.
+         */
+        public abstract MappingBuilder getMappingBuilder();
+
+        /**
+         * @return text label/name for this source if displayed in JOSM menus
+         */
+        public abstract String getLabel();
+
+        /**
+         * @param port the port this WireMock server is running on
+         * @return {@link ImageryInfo} describing this tile source, as might be submitted to {@link ImageryLayerInfo#add}
+         */
+        public abstract ImageryInfo getImageryInfo(int port);
+
+        /**
+         * @return byte array of the payload body for this source, possibly retrieved from a global cache
+         */
+        public byte[] getPayloadBytes() {
+            ByteArrayWrapper payloadWrapper = constPayloadCache.get(this);
+            if (payloadWrapper == null) {
+                payloadWrapper = new ByteArrayWrapper(this.generatePayloadBytes());
+                constPayloadCache.put(this, payloadWrapper);
+            }
+            return payloadWrapper.byteArray;
+        }
+
+        /**
+         * @return a {@link ResponseDefinitionBuilder} embodying the payload of this tile source suitable for
+         * application to a {@link MappingBuilder}.
+         */
+        public ResponseDefinitionBuilder getResponseDefinitionBuilder() {
+            return WireMock.aResponse().withStatus(200).withHeader("Content-Type", "image/png").withBody(
+                this.getPayloadBytes()
+            );
+        }
+    }
+
+    /**
+     * A plain color tile source
+     */
+    public static class ColorSource extends ConstSource {
+        protected final Color color;
+        protected final String label;
+        protected final int tileSize;
+
+        /**
+         * @param color Color for these tiles
+         * @param label text label/name for this source if displayed in JOSM menus
+         * @param tileSize Pixel dimension of tiles (usually 256)
+         */
+        public ColorSource(Color color, String label, int tileSize) {
+            this.color = color;
+            this.label = label;
+            this.tileSize = tileSize;
+        }
+
+        @Override
+        public int hashCode() {
+            return Objects.hash(this.color, this.label, this.tileSize, this.getClass());
+        }
+
+        @Override
+        public byte[] generatePayloadBytes() {
+            BufferedImage image = new BufferedImage(this.tileSize, this.tileSize, BufferedImage.TYPE_INT_RGB);
+            Graphics2D g = image.createGraphics();
+            g.setBackground(this.color);
+            g.clearRect(0, 0, image.getWidth(), image.getHeight());
+
+            ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
+            try {
+                ImageIO.write(image, "png", outputStream);
+            } catch (IOException e) {
+                Logging.trace(e);
+            }
+            return outputStream.toByteArray();
+        }
+
+        @Override
+        public MappingBuilder getMappingBuilder() {
+            return WireMock.get(WireMock.urlMatching(String.format("/%h/(\\d+)/(\\d+)/(\\d+)\\.png", this.hashCode())));
+        }
+
+        @Override
+        public ImageryInfo getImageryInfo(int port) {
+            return new ImageryInfo(
+                this.label,
+                String.format("tms[20]:http://localhost:%d/%h/{z}/{x}/{y}.png", port, this.hashCode()),
+                "tms",
+                (String) null,
+                (String) null
+            );
+        }
+
+        @Override
+        public String getLabel() {
+            return this.label;
+        }
+    }
+
+    protected final List<ConstSource> sourcesList;
+    protected final boolean clearLayerList;
+    protected final boolean clearSlippyMapSources;
+    protected final boolean registerInLayerList;
+
+    /**
+     * Construct a TileSourceRule for use with a JUnit test.
+     *
+     * This variant will not make any attempt to register the sources' existence with any JOSM subsystems, so is safe
+     * for direct application to a JUnit test.
+     *
+     * @param sources tile sources to serve from this mock server
+     */
+    public TileSourceRule(ConstSource... sources) {
+        this(false, false, false, sources);
+    }
+
+    /**
+     * Construct a TileSourceRule for use with a JUnit test.
+     *
+     * The three boolean parameters control whether to perform various steps registering the tile sources with parts
+     * of JOSM's internals as part of the setup process. It is advised to only enable any of these if it can be ensured
+     * that this rule will have its setup routine executed *after* the relevant parts of JOSM have been set up, e.g.
+     * when handled by {@link org.openstreetmap.josm.testutils.JOSMTestRules#fakeImagery}.
+     *
+     * @param clearLayerList whether to clear ImageryLayerInfo's layer list of any pre-existing entries
+     * @param clearSlippyMapSources whether to clear SlippyMapBBoxChooser's stubborn fallback Mapnik TileSource
+     * @param registerInLayerList whether to add sources to ImageryLayerInfo's layer list
+     * @param sources tile sources to serve from this mock server
+     */
+    public TileSourceRule(
+        boolean clearLayerList,
+        boolean clearSlippyMapSources,
+        boolean registerInLayerList,
+        ConstSource... sources
+    ) {
+        super(options().dynamicPort());
+        this.clearLayerList = clearLayerList;
+        this.clearSlippyMapSources = clearSlippyMapSources;
+        this.registerInLayerList = registerInLayerList;
+
+        // set up a stub target for the early request hack
+        this.stubFor(WireMock.get(
+            WireMock.urlMatching("/_poke")
+        ).willReturn(
+            WireMock.aResponse().withStatus(200).withBody("ow.")
+        ));
+
+        this.sourcesList = Collections.unmodifiableList(Arrays.asList(sources));
+        for (ConstSource source : this.sourcesList) {
+            this.stubFor(source.getMappingBuilder().willReturn(source.getResponseDefinitionBuilder()));
+        }
+    }
+
+    /**
+     * A junit-rule {@code apply} method exposed separately to allow a chaining rule to put this much earlier in
+     * the test's initialization routine. The idea being to allow WireMock's web server to be starting up while other
+     * necessary initialization is taking place.
+     * See {@link org.junit.rules.TestRule#apply} for arguments.
+     * @param base The {@link Statement} to be modified
+     * @param description A {@link Description} of the test implemented in {@code base}
+     * @return a new statement, which may be the same as {@code base},
+     *         a wrapper around {@code base}, or a completely new Statement.
+     */
+    public Statement applyRunServer(Statement base, Description description) {
+        return super.apply(new Statement() {
+            @Override
+            public void evaluate() throws Throwable {
+                try {
+                    // a hack to circumvent a WireMock bug concerning delayed server startup. sending an early request
+                    // to the mock server seems to prompt it to start earlier (though this request itself is not
+                    // expected to succeed). see https://github.com/tomakehurst/wiremock/issues/97
+                    (new java.net.URL(String.format("http://localhost:%d/_poke", TileSourceRule.this.port()))).getContent();
+                } catch (IOException e) {
+                    Logging.trace(e);
+                }
+                base.evaluate();
+            }
+        }, description);
+    }
+
+    /**
+     * A junit-rule {@code apply} method exposed separately, containing initialization steps which can only be performed
+     * once more of josm's environment has been set up.
+     * See {@link org.junit.rules.TestRule#apply} for arguments.
+     * @param base The {@link Statement} to be modified
+     * @param description A {@link Description} of the test implemented in {@code base}
+     * @return a new statement, which may be the same as {@code base},
+     *         a wrapper around {@code base}, or a completely new Statement.
+     */
+    public Statement applyRegisterLayers(Statement base, Description description) {
+        if (this.registerInLayerList || this.clearLayerList) {
+            return new Statement() {
+                @Override
+                @SuppressWarnings("unchecked")
+                public void evaluate() throws Throwable {
+                    List<SlippyMapBBoxChooser.TileSourceProvider> slippyMapProviders = null;
+                    SlippyMapBBoxChooser.TileSourceProvider slippyMapDefaultProvider = null;
+                    List<ImageryInfo> originalImageryInfoList = null;
+                    if (TileSourceRule.this.clearSlippyMapSources) {
+                        try {
+                            slippyMapProviders = (List<SlippyMapBBoxChooser.TileSourceProvider>) getPrivateStaticField(
+                                SlippyMapBBoxChooser.class,
+                                "providers"
+                            );
+                            // pop this off the beginning of the list, keep for later
+                            slippyMapDefaultProvider = slippyMapProviders.remove(0);
+                        } catch (ReflectiveOperationException e) {
+                            Logging.warn("Failed to remove default SlippyMapBBoxChooser TileSourceProvider");
+                        }
+                    }
+
+                    if (TileSourceRule.this.clearLayerList) {
+                        originalImageryInfoList = ImageryLayerInfo.instance.getLayers();
+                        ImageryLayerInfo.instance.clear();
+                    }
+                    if (TileSourceRule.this.registerInLayerList) {
+                        for (ConstSource source : TileSourceRule.this.sourcesList) {
+                            ImageryLayerInfo.addLayer(source.getImageryInfo(TileSourceRule.this.port()));
+                        }
+                    }
+
+                    try {
+                        base.evaluate();
+                    } finally {
+                        // clean up to original state
+                        if (slippyMapDefaultProvider != null && slippyMapProviders != null) {
+                            slippyMapProviders.add(0, slippyMapDefaultProvider);
+                        }
+                        if (originalImageryInfoList != null) {
+                            ImageryLayerInfo.instance.clear();
+                            ImageryLayerInfo.addLayers(originalImageryInfoList);
+                        }
+                    }
+                }
+            };
+        } else {
+            return base;
+        }
+    }
+
+    /**
+     * A standard implementation of apply which simply calls both sub- {@code apply} methods, {@link #applyRunServer}
+     * and {@link #applyRegisterLayers}. Called when used as a standard junit rule.
+     */
+    @Override
+    public Statement apply(Statement base, Description description) {
+        return applyRunServer(applyRegisterLayers(base, description), description);
+    }
+}
diff --git a/test/unit/org/openstreetmap/josm/tools/JosmDecimalFormatSymbolsProviderTest.java b/test/unit/org/openstreetmap/josm/tools/JosmDecimalFormatSymbolsProviderTest.java
new file mode 100644
index 0000000..93df86d
--- /dev/null
+++ b/test/unit/org/openstreetmap/josm/tools/JosmDecimalFormatSymbolsProviderTest.java
@@ -0,0 +1,43 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.tools;
+
+import static org.junit.Assert.assertEquals;
+
+import java.util.Locale;
+
+import org.junit.Rule;
+import org.junit.Test;
+import org.openstreetmap.josm.testutils.JOSMTestRules;
+
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
+
+/**
+ * Unit tests of {@link JosmDecimalFormatSymbolsProvider}.
+ */
+public class JosmDecimalFormatSymbolsProviderTest {
+
+    /**
+     * Setup rule.
+     */
+    @Rule
+    @SuppressFBWarnings(value = "URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD")
+    public JOSMTestRules test = new JOSMTestRules();
+
+    /**
+     * Test {@link JosmDecimalFormatSymbolsProvider#parseDouble}.
+     */
+    @Test
+    public void testParseDouble() {
+        final Locale defLocale = Locale.getDefault();
+        try {
+            Locale.setDefault(Locale.ENGLISH);
+            assertEquals(0.3, JosmDecimalFormatSymbolsProvider.parseDouble("0.3"), 1e-7);
+            assertEquals(0.3, JosmDecimalFormatSymbolsProvider.parseDouble("0,3"), 1e-7);
+            Locale.setDefault(Locale.FRENCH);
+            assertEquals(0.3, JosmDecimalFormatSymbolsProvider.parseDouble("0.3"), 1e-7);
+            assertEquals(0.3, JosmDecimalFormatSymbolsProvider.parseDouble("0,3"), 1e-7);
+        } finally {
+            Locale.setDefault(defLocale);
+        }
+    }
+}
diff --git a/test/unit/org/openstreetmap/josm/tools/MultiMapTest.java b/test/unit/org/openstreetmap/josm/tools/MultiMapTest.java
index f0654f3..eedbe33 100644
--- a/test/unit/org/openstreetmap/josm/tools/MultiMapTest.java
+++ b/test/unit/org/openstreetmap/josm/tools/MultiMapTest.java
@@ -7,8 +7,10 @@ import static org.junit.Assert.assertTrue;
 import java.util.Arrays;
 import java.util.HashSet;
 
-import nl.jqno.equalsverifier.EqualsVerifier;
 import org.junit.Test;
+import org.openstreetmap.josm.TestUtils;
+
+import nl.jqno.equalsverifier.EqualsVerifier;
 
 /**
  * Unit tests of {@link MultiMap} class.
@@ -20,6 +22,7 @@ public class MultiMapTest {
      */
     @Test
     public void testEqualsContract() {
+        TestUtils.assumeWorkingEqualsVerifier();
         EqualsVerifier.forClass(MultiMap.class).usingGetClass().verify();
     }
 
diff --git a/test/unit/org/openstreetmap/josm/tools/PairTest.java b/test/unit/org/openstreetmap/josm/tools/PairTest.java
index 23a7bbc..7505bc0 100644
--- a/test/unit/org/openstreetmap/josm/tools/PairTest.java
+++ b/test/unit/org/openstreetmap/josm/tools/PairTest.java
@@ -2,6 +2,7 @@
 package org.openstreetmap.josm.tools;
 
 import org.junit.Test;
+import org.openstreetmap.josm.TestUtils;
 
 import nl.jqno.equalsverifier.EqualsVerifier;
 import nl.jqno.equalsverifier.Warning;
@@ -16,6 +17,7 @@ public class PairTest {
      */
     @Test
     public void testEqualsContract() {
+        TestUtils.assumeWorkingEqualsVerifier();
         EqualsVerifier.forClass(Pair.class).suppress(Warning.NONFINAL_FIELDS).verify();
     }
 }

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