[josm] 01/05: Imported Upstream version 0.0.svn9329+dfsg

Sebastiaan Couwenberg sebastic at moszumanska.debian.org
Thu Jan 7 20:44:09 UTC 2016


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

sebastic pushed a commit to branch master
in repository josm.

commit 30f3218e14b0269dd21af52dd1e7099e133d9d28
Author: Bas Couwenberg <sebastic at xs4all.nl>
Date:   Thu Jan 7 00:20:34 2016 +0100

    Imported Upstream version 0.0.svn9329+dfsg
---
 .settings/org.eclipse.jdt.core.prefs               |   8 +-
 REVISION                                           |   6 +-
 build.xml                                          |  11 +-
 data/defaultpresets.xml                            | 193 +++++++----
 data/validator/ignoretags.cfg                      |  16 +
 data_nodist/trans/ast.lang                         | Bin 8721 -> 8723 bytes
 data_nodist/trans/be.lang                          | Bin 15743 -> 15872 bytes
 data_nodist/trans/bg.lang                          | Bin 2395 -> 2397 bytes
 data_nodist/trans/ca-valencia.lang                 | Bin 7805 -> 7807 bytes
 data_nodist/trans/ca.lang                          | Bin 10236 -> 10326 bytes
 data_nodist/trans/cs.lang                          | Bin 9942 -> 10033 bytes
 data_nodist/trans/da.lang                          | Bin 9234 -> 9330 bytes
 data_nodist/trans/de.lang                          | Bin 10197 -> 10330 bytes
 data_nodist/trans/el.lang                          | Bin 1397 -> 1399 bytes
 data_nodist/trans/en.lang                          | Bin 8467 -> 8561 bytes
 data_nodist/trans/en_AU.lang                       | Bin 1482 -> 1484 bytes
 data_nodist/trans/en_GB.lang                       | Bin 1908 -> 1910 bytes
 data_nodist/trans/es.lang                          | Bin 11127 -> 11229 bytes
 data_nodist/trans/et.lang                          | Bin 1430 -> 1432 bytes
 data_nodist/trans/fi.lang                          | Bin 3068 -> 3070 bytes
 data_nodist/trans/fr.lang                          | Bin 10473 -> 10582 bytes
 data_nodist/trans/gl.lang                          | Bin 2945 -> 2947 bytes
 data_nodist/trans/hu.lang                          | Bin 9763 -> 9765 bytes
 data_nodist/trans/id.lang                          | Bin 6717 -> 6719 bytes
 data_nodist/trans/it.lang                          | Bin 9869 -> 9871 bytes
 data_nodist/trans/ja.lang                          | Bin 11385 -> 11387 bytes
 data_nodist/trans/km.lang                          | Bin 16172 -> 16174 bytes
 data_nodist/trans/lt.lang                          | Bin 1946 -> 1948 bytes
 data_nodist/trans/nb.lang                          | Bin 1673 -> 1675 bytes
 data_nodist/trans/nl.lang                          | Bin 10625 -> 10945 bytes
 data_nodist/trans/pl.lang                          | Bin 2927 -> 2929 bytes
 data_nodist/trans/pt.lang                          | Bin 12574 -> 12576 bytes
 data_nodist/trans/pt_BR.lang                       | Bin 8109 -> 8111 bytes
 data_nodist/trans/ru.lang                          | Bin 16144 -> 16277 bytes
 data_nodist/trans/sk.lang                          | Bin 9314 -> 9405 bytes
 data_nodist/trans/sv.lang                          | Bin 1334 -> 1336 bytes
 data_nodist/trans/uk.lang                          | Bin 16238 -> 16696 bytes
 data_nodist/trans/vi.lang                          | Bin 10524 -> 10526 bytes
 data_nodist/trans/zh_CN.lang                       | Bin 5848 -> 5850 bytes
 data_nodist/trans/zh_TW.lang                       | Bin 4641 -> 4643 bytes
 i18n/build.xml                                     |  12 +-
 i18n/convmaps.pl                                   |   2 +-
 i18n/convpreset.pl                                 |   2 +-
 i18n/convstyle.pl                                  |   2 +-
 i18n/convsurveyor.pl                               |   2 +-
 i18n/i18n.pl                                       |   2 +-
 i18n/po/af.po                                      | 187 +++++++++--
 i18n/po/am.po                                      | 187 +++++++++--
 i18n/po/ar.po                                      | 187 +++++++++--
 i18n/po/ast.po                                     | 196 +++++++++--
 i18n/po/az.po                                      | 187 +++++++++--
 i18n/po/be.po                                      | 192 +++++++++--
 i18n/po/bg.po                                      | 190 +++++++++--
 i18n/po/bn.po                                      | 187 +++++++++--
 i18n/po/br.po                                      | 187 +++++++++--
 i18n/po/bs.po                                      | 187 +++++++++--
 i18n/po/ca.po                                      | 239 ++++++++++---
 i18n/po/ca at valencia.po                             | 189 +++++++++--
 i18n/po/cs.po                                      | 194 +++++++++--
 i18n/po/cy.po                                      | 187 +++++++++--
 i18n/po/da.po                                      | 192 +++++++++--
 i18n/po/de.po                                      | 371 ++++++++++++++-------
 i18n/po/de_DE.po                                   | 187 +++++++++--
 i18n/po/el.po                                      | 189 +++++++++--
 i18n/po/en_AU.po                                   | 187 +++++++++--
 i18n/po/en_CA.po                                   | 187 +++++++++--
 i18n/po/en_GB.po                                   | 189 +++++++++--
 i18n/po/eo.po                                      | 187 +++++++++--
 i18n/po/es.po                                      | 234 ++++++++++---
 i18n/po/et.po                                      | 209 +++++++++---
 i18n/po/eu.po                                      | 187 +++++++++--
 i18n/po/fa.po                                      | 187 +++++++++--
 i18n/po/fi.po                                      | 187 +++++++++--
 i18n/po/fil.po                                     | 187 +++++++++--
 i18n/po/fo.po                                      | 187 +++++++++--
 i18n/po/fr.po                                      | 206 ++++++++++--
 i18n/po/ga.po                                      | 187 +++++++++--
 i18n/po/gl.po                                      | 197 +++++++++--
 i18n/po/he.po                                      | 187 +++++++++--
 i18n/po/hi.po                                      | 187 +++++++++--
 i18n/po/hr.po                                      | 191 +++++++++--
 i18n/po/ht.po                                      | 187 +++++++++--
 i18n/po/hu.po                                      | 192 +++++++++--
 i18n/po/hy.po                                      | 187 +++++++++--
 i18n/po/ia.po                                      | 187 +++++++++--
 i18n/po/id.po                                      | 192 +++++++++--
 i18n/po/is.po                                      | 189 +++++++++--
 i18n/po/it.po                                      | 192 +++++++++--
 i18n/po/ja.po                                      | 192 +++++++++--
 i18n/po/ka.po                                      | 187 +++++++++--
 i18n/po/km.po                                      | 187 +++++++++--
 i18n/po/ko.po                                      | 187 +++++++++--
 i18n/po/ky.po                                      | 187 +++++++++--
 i18n/po/lo.po                                      | 187 +++++++++--
 i18n/po/lt.po                                      | 190 +++++++++--
 i18n/po/lv.po                                      | 187 +++++++++--
 i18n/po/mk.po                                      | 187 +++++++++--
 i18n/po/mr.po                                      | 187 +++++++++--
 i18n/po/ms.po                                      | 187 +++++++++--
 i18n/po/nb.po                                      | 187 +++++++++--
 i18n/po/nds.po                                     | 187 +++++++++--
 i18n/po/nl.po                                      | 322 +++++++++++++-----
 i18n/po/nn.po                                      | 187 +++++++++--
 i18n/po/oc.po                                      | 187 +++++++++--
 i18n/po/pa.po                                      | 187 +++++++++--
 i18n/po/pl.po                                      | 192 +++++++++--
 i18n/po/pt.po                                      | 196 +++++++++--
 i18n/po/pt_BR.po                                   | 195 +++++++++--
 i18n/po/rm.po                                      | 187 +++++++++--
 i18n/po/ro.po                                      | 187 +++++++++--
 i18n/po/ru.po                                      | 197 +++++++++--
 i18n/po/sk.po                                      | 193 +++++++++--
 i18n/po/sl.po                                      | 187 +++++++++--
 i18n/po/sq.po                                      | 187 +++++++++--
 i18n/po/sr.po                                      | 187 +++++++++--
 i18n/po/sv.po                                      | 189 +++++++++--
 i18n/po/ta.po                                      | 187 +++++++++--
 i18n/po/te.po                                      | 187 +++++++++--
 i18n/po/th.po                                      | 187 +++++++++--
 i18n/po/tr.po                                      | 187 +++++++++--
 i18n/po/ug.po                                      | 187 +++++++++--
 i18n/po/uk.po                                      | 342 +++++++++++++------
 i18n/po/ur.po                                      | 187 +++++++++--
 i18n/po/vi.po                                      | 189 +++++++++--
 i18n/po/zh_CN.po                                   | 208 ++++++++++--
 i18n/po/zh_TW.po                                   | 189 +++++++++--
 images/presets/baby_hatch.png                      | Bin 848 -> 0 bytes
 linux/latest/DEBIAN/control                        |   2 +-
 linux/tested/DEBIAN/control                        |   2 +-
 scripts/BuildProjectionDefinitions.java            |   7 +-
 scripts/taginfoextract.groovy                      |  42 +--
 src/org/openstreetmap/josm/Main.java               |   8 +-
 .../josm/actions/DistributeAction.java             |   9 +-
 .../josm/actions/DownloadNotesInViewAction.java    |   4 +-
 src/org/openstreetmap/josm/actions/HelpAction.java |  24 +-
 .../josm/actions/JoinAreasAction.java              |  23 +-
 .../openstreetmap/josm/actions/OpenFileAction.java |  33 +-
 .../josm/actions/OrthogonalizeAction.java          |  12 +-
 .../josm/actions/OverpassDownloadAction.java       |  21 +-
 .../josm/actions/PasteTagsAction.java              |  23 +-
 .../openstreetmap/josm/actions/PurgeAction.java    |  14 +-
 .../josm/actions/RenameLayerAction.java            |   2 +
 .../openstreetmap/josm/actions/RestartAction.java  |   4 +-
 .../openstreetmap/josm/actions/SaveActionBase.java |   4 +-
 .../josm/actions/SessionLoadAction.java            |  11 +-
 .../josm/actions/SimplifyWayAction.java            |   6 +-
 .../openstreetmap/josm/actions/SplitWayAction.java |  15 +-
 .../openstreetmap/josm/actions/UnGlueAction.java   | 246 +++++++++++---
 .../josm/actions/UpdateSelectionAction.java        |   2 +-
 .../downloadtasks/DownloadReferrersTask.java       |   2 +-
 .../josm/actions/downloadtasks/DownloadTask.java   |   2 +-
 .../actions/downloadtasks/DownloadTaskList.java    |   6 +-
 .../josm/actions/mapmode/DeleteAction.java         |   3 +
 .../josm/actions/mapmode/DrawAction.java           |   5 +-
 .../josm/actions/mapmode/ExtrudeAction.java        |   9 +-
 .../josm/actions/mapmode/MapMode.java              |  16 +-
 .../josm/actions/mapmode/SelectAction.java         |   7 +-
 .../openstreetmap/josm/command/MoveCommand.java    |  11 +-
 .../openstreetmap/josm/command/PurgeCommand.java   |   4 +
 .../openstreetmap/josm/command/RotateCommand.java  |   3 +
 .../openstreetmap/josm/command/ScaleCommand.java   |   2 +
 .../josm/command/TransformNodesCommand.java        |   1 +
 src/org/openstreetmap/josm/data/AutosaveTask.java  |  31 +-
 src/org/openstreetmap/josm/data/Bounds.java        |   8 +
 .../josm/data/CustomConfigurator.java              |  17 +-
 src/org/openstreetmap/josm/data/Preferences.java   |  46 ++-
 .../openstreetmap/josm/data/ProjectionBounds.java  |  53 ++-
 .../josm/data/cache/JCSCacheManager.java           |   4 +
 .../josm/data/cache/JCSCachedTileLoaderJob.java    |  62 +---
 .../openstreetmap/josm/data/conflict/Conflict.java |   6 +-
 .../openstreetmap/josm/data/coor/EastNorth.java    |   4 +-
 src/org/openstreetmap/josm/data/coor/LatLon.java   |  17 +-
 .../josm/data/gpx/IWithAttributes.java             |   1 +
 .../josm/data/imagery/TMSCachedTileLoaderJob.java  |   4 +-
 .../josm/data/oauth/SignpostAdapters.java          |   5 +-
 .../josm/data/osm/AbstractPrimitive.java           |  92 +++--
 src/org/openstreetmap/josm/data/osm/BBox.java      |  15 +-
 src/org/openstreetmap/josm/data/osm/Hash.java      |   2 +
 .../josm/data/osm/MultipolygonBuilder.java         |   6 +-
 src/org/openstreetmap/josm/data/osm/Node.java      |   6 +
 .../openstreetmap/josm/data/osm/OsmPrimitive.java  |  70 ++--
 .../openstreetmap/josm/data/osm/QuadBuckets.java   |   4 +-
 src/org/openstreetmap/josm/data/osm/Relation.java  |   1 +
 src/org/openstreetmap/josm/data/osm/Storage.java   |  10 +-
 src/org/openstreetmap/josm/data/osm/User.java      |   6 +-
 src/org/openstreetmap/josm/data/osm/Way.java       |   2 +
 .../openstreetmap/josm/data/osm/WaySegment.java    |   4 +
 .../josm/data/osm/event/DataSetListener.java       |   1 +
 .../josm/data/osm/visitor/paint/LineClip.java      |  17 +-
 .../data/osm/visitor/paint/MapRendererFactory.java |   3 +
 .../data/osm/visitor/paint/StyledMapRenderer.java  |  66 ++--
 .../osm/visitor/paint/WireframeMapRenderer.java    |   1 +
 .../josm/data/projection/Ellipsoid.java            |  10 +-
 .../josm/data/projection/Projections.java          |   6 +
 .../josm/data/projection/datum/Datum.java          |   9 +-
 .../josm/data/projection/datum/NTV2GridShift.java  |   3 +-
 .../projection/proj/LambertConformalConic.java     |   4 +
 .../josm/data/validation/OsmValidator.java         |   1 +
 .../data/validation/routines/DomainValidator.java  |   5 +-
 .../data/validation/routines/RegexValidator.java   |   1 -
 .../data/validation/tests/MapCSSTagChecker.java    |  25 +-
 .../data/validation/tests/MultipolygonTest.java    |   8 +-
 .../josm/data/validation/tests/PowerLines.java     |   6 +-
 .../data/validation/tests/TurnrestrictionTest.java |   5 +
 src/org/openstreetmap/josm/gui/FileDrop.java       |   2 +-
 .../openstreetmap/josm/gui/IconToggleButton.java   |   3 +
 src/org/openstreetmap/josm/gui/ImageryMenu.java    |   1 +
 .../openstreetmap/josm/gui/MainApplication.java    |   8 +-
 src/org/openstreetmap/josm/gui/MainMenu.java       |  20 +-
 src/org/openstreetmap/josm/gui/MapFrame.java       |  15 +-
 src/org/openstreetmap/josm/gui/MapStatus.java      |  32 +-
 src/org/openstreetmap/josm/gui/MapView.java        |   2 +
 .../josm/gui/NavigatableComponent.java             |  51 +--
 src/org/openstreetmap/josm/gui/SideButton.java     |   2 +-
 src/org/openstreetmap/josm/gui/SplashScreen.java   |   1 +
 .../josm/gui/bbox/SlippyMapControler.java          |   2 +
 .../pair/nodes/NodeListTableCellRenderer.java      |   3 +-
 .../pair/properties/PropertiesMergeModel.java      |   2 +
 .../gui/conflict/tags/MultiValueCellRenderer.java  |   1 +
 .../josm/gui/dialogs/CommandStackDialog.java       |   3 +
 .../josm/gui/dialogs/InspectPrimitiveDialog.java   |   8 +-
 .../josm/gui/dialogs/LayerListDialog.java          |  13 +-
 .../josm/gui/dialogs/MapPaintDialog.java           |  17 +-
 .../josm/gui/dialogs/RelationListDialog.java       |  13 +-
 .../gui/dialogs/properties/PresetListPanel.java    |   6 +-
 .../dialogs/properties/SearchBasedRowFilter.java   |   2 +-
 .../josm/gui/dialogs/properties/TagEditHelper.java |  36 +-
 .../relation/DownloadRelationMemberTask.java       |   2 +-
 .../dialogs/relation/GenericRelationEditor.java    |   3 +-
 .../gui/dialogs/relation/MemberTableModel.java     |  10 +-
 .../dialogs/relation/RelationDialogManager.java    |   3 +-
 .../gui/dialogs/relation/sort/RelationNodeMap.java |  14 +-
 .../dialogs/relation/sort/RelationSortUtils.java   |   5 +-
 .../relation/sort/WayConnectionTypeCalculator.java |  15 +-
 .../gui/dialogs/validator/ValidatorTreePanel.java  |   1 +
 .../josm/gui/download/DownloadDialog.java          |   5 +
 .../josm/gui/download/DownloadSelection.java       |   1 +
 .../josm/gui/download/PlaceSelection.java          |   7 +-
 .../josm/gui/help/HelpContentReader.java           |   3 +
 src/org/openstreetmap/josm/gui/help/HelpUtil.java  |   2 +-
 .../josm/gui/history/TwoColumnDiff.java            |   4 +
 .../josm/gui/io/AbstractUploadTask.java            |   7 +-
 .../josm/gui/io/DownloadFileTask.java              |  26 +-
 .../josm/gui/io/DownloadPrimitivesTask.java        |   2 +-
 .../josm/gui/io/LayerNameAndFilePathTableCell.java |  22 +-
 .../josm/gui/io/TagSettingsPanel.java              |  14 +-
 .../josm/gui/io/UpdatePrimitivesTask.java          |  11 +-
 src/org/openstreetmap/josm/gui/layer/Layer.java    |   1 +
 .../josm/gui/layer/MapViewPaintable.java           |   3 +-
 .../gui/layer/geoimage/CorrelateGpxWithImages.java |  11 +-
 .../josm/gui/layer/geoimage/GeoImageLayer.java     | 169 +---------
 .../josm/gui/layer/geoimage/ImageEntry.java        | 303 ++++++++++++++++-
 .../josm/gui/layer/geoimage/ImageViewerDialog.java |  21 +-
 .../josm/gui/layer/geoimage/ThumbsLoader.java      |  45 ++-
 .../gui/layer/gpx/ChooseTrackVisibilityAction.java |  11 +-
 .../josm/gui/layer/gpx/DateFilterPanel.java        |   5 +-
 .../josm/gui/layer/gpx/GpxDrawHelper.java          |  12 +-
 .../josm/gui/layer/gpx/ImportAudioAction.java      |   6 +-
 .../josm/gui/layer/gpx/ImportImagesAction.java     |   3 +
 .../josm/gui/layer/markerlayer/MarkerLayer.java    |   6 +-
 .../gui/layer/markerlayer/MarkerProducers.java     |   3 +
 .../josm/gui/layer/markerlayer/PlayHeadMarker.java |   7 +-
 .../{StyleCache.java => DividedScale.java}         | 188 ++++-------
 .../josm/gui/mappaint/ElemStyles.java              | 169 +++++-----
 .../josm/gui/mappaint/Environment.java             |   7 +
 .../josm/gui/mappaint/MapPaintStyles.java          |  13 +-
 .../josm/gui/mappaint/MultiCascade.java            |   6 +-
 src/org/openstreetmap/josm/gui/mappaint/Range.java |   3 +
 .../josm/gui/mappaint/StyleCache.java              | 246 ++------------
 .../josm/gui/mappaint/StyleElementList.java        |  71 ++++
 .../gui/mappaint/mapcss/ExpressionFactory.java     |   8 +
 .../josm/gui/mappaint/mapcss/MapCSSParser.jj       |  31 +-
 .../gui/mappaint/mapcss/MapCSSStyleSource.java     |   4 +-
 .../josm/gui/mappaint/mapcss/Selector.java         |   3 +-
 .../AreaElement.java}                              |  27 +-
 .../BoxTextElement.java}                           |  30 +-
 .../LabelCompositionStrategy.java                  |   2 +-
 .../LineElement.java}                              |  34 +-
 .../LineTextElement.java}                          |  19 +-
 .../gui/mappaint/{ => styleelement}/MapImage.java  |   8 +-
 .../NodeElement.java}                              |  32 +-
 .../RepeatImageElement.java}                       |  17 +-
 .../StyleElement.java}                             |  19 +-
 .../TextLabel.java}                                |  29 +-
 .../josm/gui/mappaint/xml/LinemodPrototype.java    |   6 +-
 .../josm/gui/mappaint/xml/XmlStyleSource.java      |   5 +
 .../josm/gui/oauth/OAuthAuthorizationWizard.java   |   2 +-
 .../gui/oauth/OsmOAuthAuthorizationClient.java     |  28 +-
 .../josm/gui/oauth/RetrieveAccessTokenTask.java    |  10 +-
 .../gui/oauth/SemiAutomaticAuthorizationUI.java    |   8 +-
 .../josm/gui/oauth/TestAccessTokenTask.java        |  16 +-
 .../josm/gui/preferences/PreferenceSetting.java    |   1 +
 .../josm/gui/preferences/PreferenceTabbedPane.java |   6 +-
 .../josm/gui/preferences/SourceEditor.java         |  34 +-
 .../josm/gui/preferences/SubPreferenceSetting.java |   1 +
 .../josm/gui/preferences/ToolbarPreferences.java   |  13 +
 .../preferences/advanced/ExportProfileAction.java  |   5 +-
 .../josm/gui/preferences/advanced/ListEditor.java  |   2 +
 .../gui/preferences/advanced/ListListEditor.java   |   2 +
 .../gui/preferences/advanced/StringEditor.java     |   2 +
 .../gui/preferences/imagery/ImageryPreference.java |   1 +
 .../gui/preferences/map/MapPaintPreference.java    |   8 +
 .../projection/ListProjectionChoice.java           |   6 +
 .../preferences/projection/ProjectionChoice.java   |   4 +
 .../gui/preferences/server/ApiUrlTestTask.java     |  11 +-
 .../server/OverpassServerPreference.java           | 103 ++++++
 .../gui/progress/PleaseWaitProgressMonitor.java    |   4 +
 .../josm/gui/tagging/TagEditorModel.java           |  10 +
 .../josm/gui/tagging/TagEditorPanel.java           |  14 +-
 .../openstreetmap/josm/gui/tagging/TagTable.java   |   9 +-
 .../gui/tagging/ac/AutoCompletionItemPriority.java |   1 +
 .../josm/gui/tagging/ac/AutoCompletionManager.java |   3 +-
 .../josm/gui/tagging/presets/TaggingPreset.java    |  34 +-
 .../gui/tagging/presets/TaggingPresetMenu.java     |   1 +
 .../gui/tagging/presets/TaggingPresetSelector.java |  14 +-
 .../josm/gui/tagging/presets/TaggingPresets.java   |  40 +++
 .../tagging/presets/items/ComboMultiSelect.java    |   1 +
 .../josm/gui/tagging/presets/items/Roles.java      |   3 +
 .../josm/gui/util/AdjustmentSynchronizer.java      |   3 +-
 src/org/openstreetmap/josm/gui/util/GuiHelper.java |   3 +
 .../josm/gui/util/KeyPressReleaseListener.java     |   5 +-
 .../josm/gui/util/StayOpenCheckBoxMenuItem.java    |  47 +--
 .../josm/gui/util/StayOpenMenuItem.java            |  85 -----
 .../josm/gui/util/StayOpenRadioButtonMenuItem.java |  99 ------
 .../openstreetmap/josm/gui/util/TableHelper.java   |   3 +
 .../widgets/AbstractTextComponentValidator.java    |   9 +
 .../josm/gui/widgets/MultiSplitLayout.java         |  42 ++-
 .../josm/gui/widgets/NativeFileChooser.java        |   4 +-
 .../josm/gui/widgets/TextContextualPopupMenu.java  |   1 +
 src/org/openstreetmap/josm/io/CachedFile.java      |  19 +-
 src/org/openstreetmap/josm/io/FileImporter.java    |  14 +-
 src/org/openstreetmap/josm/io/GpxExporter.java     |  12 +
 src/org/openstreetmap/josm/io/GpxReader.java       |   4 +-
 src/org/openstreetmap/josm/io/GpxWriter.java       |   5 +
 .../josm/io/MultiFetchOverpassObjectReader.java    |  40 +++
 .../josm/io/MultiFetchServerObjectReader.java      |  99 ++++--
 src/org/openstreetmap/josm/io/OsmApi.java          |  13 +-
 src/org/openstreetmap/josm/io/OsmConnection.java   |   2 +-
 src/org/openstreetmap/josm/io/OsmExporter.java     |   2 +-
 src/org/openstreetmap/josm/io/OsmReader.java       |  21 +-
 .../josm/io/OsmServerBackreferenceReader.java      |   1 +
 .../josm/io/OsmServerHistoryReader.java            |   1 +
 src/org/openstreetmap/josm/io/OsmServerReader.java |  29 +-
 src/org/openstreetmap/josm/io/OsmServerWriter.java |   1 +
 src/org/openstreetmap/josm/io/OsmWriter.java       |  24 +-
 .../josm/io/OverpassDownloadReader.java            |  17 +
 .../josm/io/StreamProgressUpdater.java             |   5 +-
 .../josm/io/UTFInputStreamReader.java              |   2 +
 src/org/openstreetmap/josm/io/XmlWriter.java       |  11 +
 .../josm/io/auth/DefaultAuthenticator.java         |   5 +-
 .../josm/io/remotecontrol/AddTagsDialog.java       |   6 +
 .../josm/io/remotecontrol/RequestProcessor.java    |   4 +
 .../io/remotecontrol/handler/AddWayHandler.java    |   3 +-
 .../josm/io/session/SessionReader.java             |   1 +
 .../josm/io/session/SessionWriter.java             |   3 +
 src/org/openstreetmap/josm/plugins/Plugin.java     |  17 +-
 .../josm/plugins/PluginDownloadTask.java           |  20 +-
 .../plugins/ReadRemotePluginInformationTask.java   |  11 +-
 .../josm/tools/CheckParameterUtil.java             |   1 +
 src/org/openstreetmap/josm/tools/CopyList.java     |   9 +-
 src/org/openstreetmap/josm/tools/Diff.java         | 182 +++++-----
 src/org/openstreetmap/josm/tools/GBC.java          |   8 +-
 src/org/openstreetmap/josm/tools/Geometry.java     |   6 +-
 src/org/openstreetmap/josm/tools/HttpClient.java   | 103 ++++--
 .../openstreetmap/josm/tools/ImageProvider.java    |  39 ++-
 .../openstreetmap/josm/tools/ImageResource.java    |  17 +-
 .../openstreetmap/josm/tools/OsmUrlToBounds.java   |  16 +-
 src/org/openstreetmap/josm/tools/Pair.java         |   2 +
 .../openstreetmap/josm/tools/PlatformHookOsx.java  |   5 +-
 .../josm/tools/PlatformHookWindows.java            |   2 +-
 src/org/openstreetmap/josm/tools/Predicates.java   |   4 +
 src/org/openstreetmap/josm/tools/Shortcut.java     |  16 +-
 src/org/openstreetmap/josm/tools/Utils.java        |  93 ++++--
 styles/standard/elemstyles.mapcss                  |  83 +++--
 test/data/regress/12255/G0016941.JPG               | Bin 0 -> 2073190 bytes
 .../josm/data/osm/TaginfoIntegrationTest.java      |  85 +++++
 .../openstreetmap/josm/tools/HttpClientTest.java   | 140 ++++++++
 test/unit/org/CustomMatchers.java                  |   1 +
 test/unit/org/openstreetmap/josm/TestUtils.java    |   1 +
 .../DeletedStateConflictResolveCommandTest.java    |  42 +++
 .../ModifiedConflictResolveCommandTest.java        |  42 +++
 .../RelationMemberConflictResolverCommandTest.java |  44 +++
 .../conflict/TagConflictResolveCommandTest.java    |  42 +++
 .../VersionConflictResolveCommandTest.java         |  42 +++
 .../WayNodesConflictResolverCommandTest.java       |  42 +++
 .../josm/data/validation/tests/TagCheckerTest.java |  24 +-
 .../RelationMemberConflictResolverModelTest.java   |   3 +
 .../josm/gui/layer/geoimage/ImageEntryTest.java    |  31 ++
 .../mappaint/LabelCompositionStrategyTest.groovy   |  42 +--
 .../MapCSSWithExtendedTextDirectivesTest.groovy    |  11 +-
 .../mappaint/mapcss/KeyValueConditionTest.groovy   |  16 +
 .../gui/preferences/ToolbarPreferencesTest.java    |   6 +-
 .../josm/gui/util/RotationAngleTest.java           |   9 +
 .../org/openstreetmap/josm/io/NmeaReaderTest.java  |  21 ++
 .../org/openstreetmap/josm/io/OsmWriterTest.java   |  38 +++
 .../josm/io/session/SessionWriterTest.java         |   3 +-
 .../openstreetmap/josm/tools/ColorScaleTest.java   |  36 ++
 .../josm/tools/ImageProviderTest.java              |   5 +-
 .../org/openstreetmap/josm/tools/UtilsTest.java    |  23 ++
 tools/checkstyle/josm_checks.xml                   |   2 +-
 tools/checkstyle/josm_filters.xml                  |  34 +-
 401 files changed, 17090 insertions(+), 4555 deletions(-)

diff --git a/.settings/org.eclipse.jdt.core.prefs b/.settings/org.eclipse.jdt.core.prefs
index aaf27e6..155bf4e 100644
--- a/.settings/org.eclipse.jdt.core.prefs
+++ b/.settings/org.eclipse.jdt.core.prefs
@@ -53,10 +53,10 @@ org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsOverriding=disabled
 org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsVisibility=public
 org.eclipse.jdt.core.compiler.problem.missingJavadocTagDescription=return_tag
 org.eclipse.jdt.core.compiler.problem.missingJavadocTags=warning
-org.eclipse.jdt.core.compiler.problem.missingJavadocTagsMethodTypeParameters=disabled
-org.eclipse.jdt.core.compiler.problem.missingJavadocTagsOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsMethodTypeParameters=enabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsOverriding=enabled
 org.eclipse.jdt.core.compiler.problem.missingJavadocTagsVisibility=private
-org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=warning
 org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled
 org.eclipse.jdt.core.compiler.problem.missingSerialVersion=ignore
 org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=ignore
@@ -76,7 +76,7 @@ org.eclipse.jdt.core.compiler.problem.potentiallyUnclosedCloseable=ignore
 org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning
 org.eclipse.jdt.core.compiler.problem.redundantNullAnnotation=warning
 org.eclipse.jdt.core.compiler.problem.redundantNullCheck=warning
-org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=ignore
+org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=warning
 org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=ignore
 org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore
 org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore
diff --git a/REVISION b/REVISION
index a1a45b4..9cfef6c 100644
--- a/REVISION
+++ b/REVISION
@@ -3,7 +3,7 @@
 <entry
    kind="dir"
    path="trunk"
-   revision="9229">
+   revision="9329">
 <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="9229">
+   revision="9329">
 <author>Don-vip</author>
-<date>2015-12-31T12:54:58.747487Z</date>
+<date>2016-01-06T16:30:31.947597Z</date>
 </commit>
 </entry>
 </info>
diff --git a/build.xml b/build.xml
index 8e998ae..d7cd503 100644
--- a/build.xml
+++ b/build.xml
@@ -275,6 +275,7 @@ Build-Date: ${build.tstamp}
                 sourcepath="${src.dir}"
                 encoding="UTF-8"    
                 packagenames="org.openstreetmap.josm.*,org.openstreetmap.gui.jmapviewer.*"
+                excludepackagenames="org.openstreetmap.josm.gui.mappaint.mapcss.parsergen.*"
                 windowtitle="JOSM"
                 use="true"
                 private="true"
@@ -600,17 +601,17 @@ Build-Date: ${build.tstamp}
         <taskdef name="groovy" classname="org.codehaus.groovy.ant.Groovy" classpath="${groovy.jar};tools/commons-cli-1.3.1.jar"/>
         <property name="taginfoextract" value="scripts/taginfoextract.groovy"/>
         <property name="imgurlprefix" value="http://josm.openstreetmap.de/download/taginfo/taginfo-img"/>
-    	<_taginfo type="mappaint" output="taginfo_style.json"/>
-    	<_taginfo type="presets" output="taginfo_presets.json"/>
-    	<_taginfo type="external_presets" output="taginfo_external_presets.json"/>
+        <_taginfo type="mappaint" output="taginfo_style.json"/>
+        <_taginfo type="presets" output="taginfo_presets.json"/>
+        <_taginfo type="external_presets" output="taginfo_external_presets.json"/>
     </target>
 
     <target name="checkstyle">
         <taskdef resource="com/puppycrawl/tools/checkstyle/ant/checkstyle-ant-task.properties" 
-        	classpath="tools/checkstyle/checkstyle-6.14-all.jar"/>
+             classpath="tools/checkstyle/checkstyle-6.14.1-all.jar"/>
         <checkstyle config="tools/checkstyle/josm_checks.xml">
             <fileset dir="${basedir}/src/org/openstreetmap/josm" includes="**/*.java" 
-            	excludes="gui/mappaint/mapcss/parsergen/*.java"/>
+                excludes="gui/mappaint/mapcss/parsergen/*.java"/>
             <fileset dir="${basedir}/test" includes="**/*.java"/>
             <formatter type="xml" toFile="checkstyle-josm.xml"/>
         </checkstyle>
diff --git a/data/defaultpresets.xml b/data/defaultpresets.xml
index 67cf775..ccb48b7 100644
--- a/data/defaultpresets.xml
+++ b/data/defaultpresets.xml
@@ -898,6 +898,7 @@
             <text key="maxspeed" text="Max. speed (km/h)" />
             <text key="maxspeed:forward" text="Max. speed in way direction" />
             <text key="maxspeed:backward" text="Max. speed opposed to way direction" />
+            <text key="maxspeed:hgv" text="Max. speed Heavy Goods Vehicles (km/h)" match="key" />
             <text key="minspeed" text="Min. speed (km/h)" match="key" />
             <text key="maxweight" text="Max. weight (tonnes)" match="key" />
             <text key="maxaxleload" text="Max. axleload (tonnes)" match="key" />
@@ -946,7 +947,7 @@
         </item> <!-- Ford -->
     </group> <!-- Streets -->
     <group name="Ways" icon="styles/standard/transport/way/way_unclassified.svg">
-        <item name="Track" icon="presets/track1.png" type="way,closedway" preset_name_label="true">
+        <item name="Track" icon="styles/standard/transport/way/track.svg" type="way,closedway" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:highway=track"
                   da.href="http://wiki.openstreetmap.org/wiki/Da:Tag:highway=track"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:highway=track"
@@ -976,7 +977,7 @@
                 <combo key="motorcar" text="Motorcar" values="yes,official,designated,destination,delivery,permissive,private,agricultural,forestry,no" />
             </optional>
         </item> <!-- Track -->
-        <item name="Path" icon="presets/path.png" type="way,closedway" preset_name_label="true">
+        <item name="Path" icon="styles/standard/transport/way/path.svg" type="way,closedway" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:highway=path"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:highway=path"
                   es.href="http://wiki.openstreetmap.org/wiki/ES:Tag:highway=path"
@@ -1014,7 +1015,7 @@
             </optional>
         </item> <!-- Path -->
         <separator/>
-        <item name="Dedicated Bridleway" icon="presets/equestrian.png" type="way" preset_name_label="true">
+        <item name="Dedicated Bridleway" icon="styles/standard/transport/way/dedicated_bridleway.svg" type="way" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:highway=bridleway"
                   da.href="http://wiki.openstreetmap.org/wiki/Da:Tag:highway=bridleway"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:highway=bridleway"
@@ -1030,7 +1031,7 @@
                 <reference ref="highway_yesno_incline_oneway_lit_width" />
             </optional>
         </item> <!-- Dedicated Bridleway -->
-        <item name="Cycle Lane/Track" type="way" preset_name_label="true">
+        <item name="Cycle Lane/Track" icon="styles/standard/transport/way/cycle_lane_track.svg" type="way" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Bicycle"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Bicycle"
                   fr.href="http://wiki.openstreetmap.org/wiki/FR:Bicycle"
@@ -1054,7 +1055,7 @@
                 <check key="oneway" text="Oneway" />
             </optional>
         </item> <!-- Cycle Lane/Track -->
-        <item name="Dedicated Cycleway" icon="presets/cycleway.png" type="way" preset_name_label="true">
+        <item name="Dedicated Cycleway" icon="styles/standard/transport/way/dedicated_cycleway.svg" type="way" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:highway=cycleway"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:highway=cycleway"
                   fr.href="http://wiki.openstreetmap.org/wiki/FR:Tag:highway=cycleway"
@@ -1072,7 +1073,7 @@
                 <combo key="foot" text="Pedestrians" values="yes,no" />
             </optional>
         </item> <!-- Dedicated Cycleway -->
-        <item name="Segregated Foot- and Cycleway" icon="presets/foot_and_cycleway_segregated.png" type="way" preset_name_label="true">
+        <item name="Segregated Foot- and Cycleway" icon="styles/standard/transport/way/segregated_foot_cycleway.svg" type="way" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:highway=cycleway"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:highway=cycleway"
                   it.href="http://wiki.openstreetmap.org/wiki/IT:Tag:highway=cycleway" />
@@ -1086,7 +1087,7 @@
                 <reference ref="highway_yesno_incline_oneway_lit_width" />
             </optional>
         </item> <!-- Segregated Foot- and Cycleway -->
-        <item name="Combined Foot- and Cycleway" icon="presets/foot_and_cycleway_combined.png" type="way" preset_name_label="true">
+        <item name="Combined Foot- and Cycleway" icon="styles/standard/transport/way/combined_foot_cycleway.svg" type="way" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:highway=cycleway"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:highway=cycleway"
                   it.href="http://wiki.openstreetmap.org/wiki/IT:Tag:highway=cycleway" />
@@ -1101,7 +1102,7 @@
                 <check key="passing_places" text="Passing Places" />
             </optional>
         </item> <!-- Combined Foot- and Cycleway -->
-        <item name="Dedicated Footway" icon="presets/footway.png" type="way" preset_name_label="true">
+        <item name="Dedicated Footway" icon="styles/standard/transport/way/dedicated_footway.svg" type="way" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:highway=footway"
                   cs.href="http://wiki.openstreetmap.org/wiki/Cs:Tag:highway=footway"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:highway=footway"
@@ -1125,7 +1126,7 @@
                 <text key="width" text="Width (meters)" />
             </optional>
         </item> <!-- Dedicated Footway -->
-        <item name="Steps" icon="presets/steps.png" type="way" preset_name_label="true">
+        <item name="Steps" icon="styles/standard/transport/way/steps.svg" type="way" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:highway=steps"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:highway=steps"
                   fi.href="http://wiki.openstreetmap.org/wiki/Fi:Tag:highway=steps"
@@ -2003,7 +2004,6 @@
                 <text key="name" text="Name" />
                 <combo key="layer" text="Layer" values="5,4,3,2,1,0,-1,-2,-3,-4,-5" default="-1" length="3" />
                 <text key="width" text="Width (meters)" />
-                <combo key="incline" text="Incline" values="10%,-10%,10°,-10°,up,down" />
             </optional>
         </item> <!-- Culvert -->
         <separator/>
@@ -2312,9 +2312,9 @@
         </item> <!-- Dock -->
     </group> <!-- Shipping -->
   </group> <!-- Water -->
-  <group name="Transport" icon="presets/railway.svg">
-    <group name="Railway" icon="presets/railway.svg">
-        <item name="Rail" icon="presets/railway.svg" type="way" preset_name_label="true">
+  <group name="Transport" icon="styles/standard/transport/railway/rail.svg">
+    <group name="Railway" icon="styles/standard/transport/railway/rail.svg">
+        <item name="Rail" icon="styles/standard/transport/railway/rail.svg" type="way" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:railway=rail"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:railway=rail"
                   fr.href="http://wiki.openstreetmap.org/wiki/FR:Tag:railway=rail"
@@ -2330,7 +2330,7 @@
                 <reference ref="railway_service_gauge_electrified" />
             </optional>
         </item> <!-- Rail -->
-        <item name="Narrow Gauge Rail" icon="presets/railway.svg" type="way" preset_name_label="true">
+        <item name="Narrow Gauge Rail" icon="styles/standard/transport/railway/narrow_gauge_rail.svg" type="way" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:railway=light_rail"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:railway=light_rail"
                   ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:railway=light_rail" />
@@ -2340,7 +2340,7 @@
                 <reference ref="railway_service_gauge_electrified" />
             </optional>
         </item> <!-- Narrow Gauge Rail -->
-        <item name="Monorail" icon="presets/railway.svg" type="way" preset_name_label="true">
+        <item name="Monorail" icon="styles/standard/transport/railway/monorail.svg" type="way" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:railway=monorail"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:railway=monorail"
                   ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:railway=monorail"
@@ -2351,7 +2351,7 @@
                 <reference ref="railway_electrified" />
             </optional>
         </item> <!-- Monorail -->
-        <item name="Preserved" icon="presets/rail_preserved.png" type="way" preset_name_label="true">
+        <item name="Preserved" icon="styles/standard/transport/railway/preserved.svg" type="way" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:railway=preserved"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:railway=preserved"
                   fr.href="http://wiki.openstreetmap.org/wiki/FR:Tag:railway=preserved"
@@ -2362,14 +2362,14 @@
                 <reference ref="railway_service_gauge_electrified" />
             </optional>
         </item> <!-- Preserved -->
-        <item name="Light Rail" icon="presets/rail_light.png" type="way" preset_name_label="true">
+        <item name="Light Rail" icon="styles/standard/transport/railway/light_rail.svg" type="way" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:railway=light_rail" />
             <key key="railway" value="light_rail" />
             <optional>
                 <reference ref="railway_service_gauge_electrified" />
             </optional>
         </item> <!-- Light Rail -->
-        <item name="Subway" icon="presets/rail_light.png" type="way" preset_name_label="true">
+        <item name="Subway" icon="styles/standard/transport/railway/subway.svg" type="way" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:railway=subway"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:railway=subway"
                   fr.href="http://wiki.openstreetmap.org/wiki/FR:Tag:railway=subway"
@@ -2381,7 +2381,7 @@
                 <reference ref="railway_service_gauge_electrified" />
             </optional>
         </item> <!-- Subway -->
-        <item name="Tram" icon="presets/tram.png" type="way" preset_name_label="true">
+        <item name="Tram" icon="styles/standard/transport/railway/tram.svg" type="way" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:railway=tram"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:railway=tram"
                   fr.href="http://wiki.openstreetmap.org/wiki/FR:Tag:railway=tram"
@@ -2394,7 +2394,7 @@
                 <reference ref="railway_service_gauge_electrified" />
             </optional>
         </item> <!-- Tram -->
-        <item name="Bus Guideway" icon="presets/busway.png" type="way" preset_name_label="true">
+        <item name="Bus Guideway" icon="styles/standard/transport/railway/bus_guideway.svg" type="way" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:highway=bus_guideway"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:highway=bus_guideway"
                   fr.href="http://wiki.openstreetmap.org/wiki/FR:Tag:highway=bus_guideway"
@@ -2412,7 +2412,7 @@
             </optional>
         </item> <!-- Bus Guideway -->
         <separator/>
-        <item name="Disused Rail" icon="presets/railway.svg" type="way" preset_name_label="true">
+        <item name="Disused Rail" icon="styles/standard/transport/railway/disused_rail.svg" type="way" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:railway=disused"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:railway=disused"
                   ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:railway=disused" />
@@ -2421,7 +2421,7 @@
                 <reference ref="railway_service" />
             </optional>
         </item> <!-- Disused Rail -->
-        <item name="Abandoned Rail" icon="presets/railway.svg" type="way" preset_name_label="true">
+        <item name="Abandoned Rail" icon="styles/standard/transport/railway/abandoned_rail.svg" type="way" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:railway=abandoned"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:railway=abandoned"
                   ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:railway=abandoned"
@@ -2433,7 +2433,7 @@
             </optional>
         </item> <!-- Abandoned Rail -->
         <separator/>
-        <item name="Level Crossing" icon="presets/level_crossing.png" type="node" preset_name_label="true">
+        <item name="Level Crossing" icon="styles/standard/transport/railway/level_crossing.svg" type="node" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:railway=level_crossing"
                   bg.href="http://wiki.openstreetmap.org/wiki/Bg:Tag:railway=level_crossing"
                   cs.href="http://wiki.openstreetmap.org/wiki/Cs:Tag:railway=level_crossing"
@@ -2455,7 +2455,7 @@
                 <combo key="crossing:barrier" text="Barrier" values="yes,no,half,full,double_half" values_context="crossing:barrier" />
             </optional>
         </item> <!-- Level Crossing -->
-        <item name="Crossing" icon="styles/standard/vehicle/crossing.png" type="node" preset_name_label="true">
+        <item name="Crossing" icon="styles/standard/transport/railway/crossing.svg" type="node" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Key:crossing"
                   bg.href="http://wiki.openstreetmap.org/wiki/Bg:Key:crossing"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Key:crossing"
@@ -2474,7 +2474,7 @@
                 <combo key="crossing:barrier" text="Barrier" values="yes,no,half,full,double_half" values_context="crossing:barrier" />
             </optional>
         </item> <!-- Crossing -->
-        <item name="Turntable" icon="presets/turntable.png" type="node,closedway" preset_name_label="true">
+        <item name="Turntable" icon="styles/standard/transport/railway/turntable.svg" type="node,closedway" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:railway=turntable"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:railway=turntable"
                   ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:railway=turntable"
@@ -2482,13 +2482,13 @@
                   ru.href="http://wiki.openstreetmap.org/wiki/RU:Tag:railway=turntable" />
             <key key="railway" value="turntable" />
         </item> <!-- Turntable -->
-        <item name="Buffer Stop" icon="styles/standard/transport/buffer_stop.png" type="node" preset_name_label="true">
+        <item name="Buffer Stop" icon="styles/standard/transport/railway/buffer_stop.svg" type="node" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:railway=buffer_stop"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:railway=buffer_stop"
                   pt_BR.href="http://wiki.openstreetmap.org/wiki/Pt-br:Tag:railway=buffer_stop" />
             <key key="railway" value="buffer_stop" />
         </item> <!-- Buffer Stop -->
-        <item name="Railway Switch" icon="presets/railway_switch.svg" type="node" preset_name_label="true">
+        <item name="Railway Switch" icon="styles/standard/transport/railway/switch.svg" type="node" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:railway=switch"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:railway=switch"
                   pt_BR.href="http://wiki.openstreetmap.org/wiki/Pt-br:Tag:railway=switch" />
@@ -2496,14 +2496,14 @@
             <text key="ref" text="Reference" />
             <text key="operator" text="Operator" />
         </item> <!-- Railway Switch -->
-        <item name="Railway Signal" icon="styles/standard/vehicle/railway_signal.svg" type="node" preset_name_label="true">
+        <item name="Railway Signal" icon="styles/standard/transport/railway/signal.svg" type="node" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:railway=signal"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:railway=signal" />
             <key key="railway" value="signal" />
             <text key="ref" text="Reference" />
             <text key="operator" text="Operator" />
         </item> <!-- Railway Signal -->
-        <item name="Railway milestone" icon="styles/standard/vehicle/milestone.svg" type="node" preset_name_label="true">
+        <item name="Railway milestone" icon="styles/standard/transport/railway/milestone.svg" type="node" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:railway=milestone" />
             <key key="railway" value="milestone" />
             <text key="distance" text="Distance (kilometers)" />
@@ -4560,8 +4560,8 @@
             <reference ref="link_contact_address" />
         </item> <!-- Driving School -->
     </group> <!-- Education -->
-    <group name="Health" icon="styles/standard/health/pharmacy.png">
-        <item name="Hospital" icon="styles/standard/health/hospital.png" type="node,closedway" preset_name_label="true">
+    <group name="Health" icon="styles/standard/health/pharmacy.svg">
+        <item name="Hospital" icon="styles/standard/health/hospital.svg" type="node,closedway" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:amenity=hospital"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:amenity=hospital"
                   es.href="http://wiki.openstreetmap.org/wiki/ES:Tag:amenity=hospital"
@@ -4576,7 +4576,7 @@
             <reference ref="name_operator" />
             <reference ref="link_contact_address_payment" />
         </item> <!-- Hospital -->
-        <item name="Clinic" icon="styles/standard/health/hospital.png" type="node,closedway" preset_name_label="true">
+        <item name="Clinic" icon="styles/standard/health/clinic.svg" type="node,closedway" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:amenity=clinic"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:amenity=clinic"
                   es.href="http://wiki.openstreetmap.org/wiki/ES:Tag:amenity=clinic"
@@ -4587,7 +4587,7 @@
             <reference ref="name_operator" />
             <reference ref="link_contact_address_payment" />
         </item> <!-- Clinic -->
-        <item name="Doctor's Office" icon="styles/standard/health/doctor.png" type="node,closedway" preset_name_label="true">
+        <item name="Doctor's Office" icon="styles/standard/health/doctors.svg" type="node,closedway" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:amenity=doctors"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:amenity=doctors"
                   es.href="http://wiki.openstreetmap.org/wiki/ES:Tag:amenity=doctors"
@@ -4601,7 +4601,7 @@
             <reference ref="name_oh_wheelchair" />
             <reference ref="link_contact_address_payment" />
         </item> <!-- Doctor's Office -->
-        <item name="Dentist" icon="styles/standard/health/dentist.png" type="node,closedway" preset_name_label="true">
+        <item name="Dentist" icon="styles/standard/health/dentist.svg" type="node,closedway" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:amenity=dentist"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:amenity=dentist"
                   fr.href="http://wiki.openstreetmap.org/wiki/FR:Tag:amenity=dentist"
@@ -4613,34 +4613,7 @@
             <reference ref="name_oh_wheelchair" />
             <reference ref="link_contact_address_payment" />
         </item> <!-- Dentist -->
-        <item name="Nursing Home" type="node,closedway" preset_name_label="true">
-            <link href="http://wiki.openstreetmap.org/wiki/Tag:amenity=nursing_home"
-                  de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:amenity=nursing_home"
-                  ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:amenity=nursing_home"
-                  pt_BR.href="http://wiki.openstreetmap.org/wiki/Pt-br:Tag:amenity=nursing_home"
-                  ru.href="http://wiki.openstreetmap.org/wiki/RU:Tag:amenity=nursing_home" />
-            <space />
-            <key key="amenity" value="nursing_home" />
-            <reference ref="name_operator" />
-            <reference ref="link_contact_address" />
-        </item> <!-- Nursing Home -->
-        <item name="Retirement Home" type="node,closedway" preset_name_label="true">
-            <link href="http://wiki.openstreetmap.org/wiki/Key:social_facility"
-                  de.href="http://wiki.openstreetmap.org/wiki/DE:Key:social_facility"
-                  es.href="http://wiki.openstreetmap.org/wiki/ES:Key:social_facility"
-                  fr.href="http://wiki.openstreetmap.org/wiki/FR:Key:social_facility"
-                  ja.href="http://wiki.openstreetmap.org/wiki/JA:Key:social_facility"
-                  pl.href="http://wiki.openstreetmap.org/wiki/Pl:Key:social_facility"
-                  ru.href="http://wiki.openstreetmap.org/wiki/RU:Key:social_facility" />
-            <space />
-            <key key="amenity" value="social_facility" />
-            <key key="social_facility" value="group_home" />
-            <key key="social_facility:for" value="senior" />
-            <reference ref="name_operator" />
-            <text key="capacity" text="Capacity" />
-            <reference ref="link_contact_address" />
-        </item> <!-- Retirement Home -->
-        <item name="Pharmacy" icon="styles/standard/health/pharmacy.png" type="node,closedway" preset_name_label="true">
+        <item name="Pharmacy" icon="styles/standard/health/pharmacy.svg" type="node,closedway" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:amenity=pharmacy"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:amenity=pharmacy"
                   fr.href="http://wiki.openstreetmap.org/wiki/FR:Tag:amenity=pharmacy"
@@ -4657,7 +4630,7 @@
             <reference ref="link_contact_address_payment" />
         </item> <!-- Pharmacy -->
         <separator/>
-        <item name="Baby Hatch/Safe Haven" icon="presets/baby_hatch.png" type="node,closedway" preset_name_label="true">
+        <item name="Baby Hatch/Safe Haven" icon="styles/standard/health/baby_hatch.svg" type="node,closedway" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:amenity=baby_hatch"
                   cs.href="http://wiki.openstreetmap.org/wiki/Cs:Tag:amenity=baby_hatch"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:amenity=baby_hatch"
@@ -4675,7 +4648,7 @@
             <reference ref="link_contact_address" />
         </item> <!-- Baby Hatch/Safe Haven -->
         <separator/>
-        <item name="Emergency Access Point" icon="styles/standard/service/emergency_access_point.png" type="node,closedway" preset_name_label="true">
+        <item name="Emergency Access Point" icon="styles/standard/service/emergency_access_point.svg" type="node,closedway" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:highway=emergency_access_point"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:highway=emergency_access_point"
                   fr.href="http://wiki.openstreetmap.org/wiki/FR:Tag:highway=emergency_access_point"
@@ -4691,7 +4664,7 @@
             <space />
         </item> <!-- Emergency Access Point -->
         <separator/>
-        <item name="Veterinary" icon="styles/standard/health/veterinary.png" type="node,closedway" preset_name_label="true">
+        <item name="Veterinary" icon="styles/standard/health/veterinary.svg" type="node,closedway" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:amenity=veterinary"
                   cs.href="http://wiki.openstreetmap.org/wiki/Cs:Tag:amenity=veterinary"
                   da.href="http://wiki.openstreetmap.org/wiki/Da:Tag:amenity=veterinary"
@@ -4708,6 +4681,95 @@
             <reference ref="link_contact_address_payment" />
         </item> <!-- Veterinary -->
     </group> <!-- Health -->
+    <group name="Social Facility" icon="styles/standard/social_facility/outreach.svg">
+        <item name="Nursing Home" icon="styles/standard/social_facility/nursing_home.svg" type="node,closedway" preset_name_label="true">
+            <link href="http://wiki.openstreetmap.org/wiki/Tag:amenity=nursing_home"
+                  de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:amenity=nursing_home"
+                  ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:amenity=nursing_home"
+                  pt_BR.href="http://wiki.openstreetmap.org/wiki/Pt-br:Tag:amenity=nursing_home"
+                  ru.href="http://wiki.openstreetmap.org/wiki/RU:Tag:amenity=nursing_home" />
+            <space />
+            <key key="amenity" value="nursing_home" />
+            <reference ref="name_operator" />
+            <text key="capacity" text="Capacity" />
+            <reference ref="link_contact_address" />
+        </item> <!-- Nursing Home -->
+        <item name="Group Home" icon="styles/standard/social_facility/group_home.svg" type="node,closedway" preset_name_label="true">
+            <link href="http://wiki.openstreetmap.org/wiki/Key:social_facility"
+                  de.href="http://wiki.openstreetmap.org/wiki/DE:Key:social_facility"
+                  es.href="http://wiki.openstreetmap.org/wiki/ES:Key:social_facility"
+                  fr.href="http://wiki.openstreetmap.org/wiki/FR:Key:social_facility"
+                  ja.href="http://wiki.openstreetmap.org/wiki/JA:Key:social_facility"
+                  pl.href="http://wiki.openstreetmap.org/wiki/Pl:Key:social_facility"
+                  ru.href="http://wiki.openstreetmap.org/wiki/RU:Key:social_facility" />
+            <space />
+            <key key="amenity" value="social_facility" />
+            <key key="social_facility" value="group_home" />
+            <reference ref="name_operator" />
+            <combo key="social_facility:for" text="For" value="senior" default="senior" />
+            <text key="capacity" text="Capacity" />
+            <reference ref="link_contact_address" />
+        </item> <!-- Group Home -->
+        <item name="Assisted Living" icon="styles/standard/social_facility/assisted_living.svg" type="node,closedway" preset_name_label="true">
+            <link href="http://wiki.openstreetmap.org/wiki/Key:social_facility"
+                  de.href="http://wiki.openstreetmap.org/wiki/DE:Key:social_facility"
+                  es.href="http://wiki.openstreetmap.org/wiki/ES:Key:social_facility"
+                  fr.href="http://wiki.openstreetmap.org/wiki/FR:Key:social_facility"
+                  ja.href="http://wiki.openstreetmap.org/wiki/JA:Key:social_facility"
+                  pl.href="http://wiki.openstreetmap.org/wiki/Pl:Key:social_facility"
+                  ru.href="http://wiki.openstreetmap.org/wiki/RU:Key:social_facility" />
+            <space />
+            <key key="amenity" value="social_facility" />
+            <key key="social_facility" value="assisted_living" />
+            <reference ref="name_operator" />
+            <combo key="social_facility:for" text="For" value="senior" default="senior" />
+            <text key="capacity" text="Capacity" />
+            <reference ref="link_contact_address" />
+        </item> <!-- Assisted Living -->
+        <item name="Outreach" icon="styles/standard/social_facility/outreach.svg" type="node,closedway" preset_name_label="true">
+            <link href="http://wiki.openstreetmap.org/wiki/Key:social_facility"
+                  de.href="http://wiki.openstreetmap.org/wiki/DE:Key:social_facility"
+                  es.href="http://wiki.openstreetmap.org/wiki/ES:Key:social_facility"
+                  fr.href="http://wiki.openstreetmap.org/wiki/FR:Key:social_facility"
+                  ja.href="http://wiki.openstreetmap.org/wiki/JA:Key:social_facility"
+                  pl.href="http://wiki.openstreetmap.org/wiki/Pl:Key:social_facility"
+                  ru.href="http://wiki.openstreetmap.org/wiki/RU:Key:social_facility" />
+            <space />
+            <key key="amenity" value="social_facility" />
+            <key key="social_facility" value="outreach" />
+            <reference ref="name_operator_oh_wheelchair" />
+            <reference ref="link_contact_address" />
+        </item> <!-- Outreach -->
+        <item name="Shelter" name_context="social_facility" icon="styles/standard/social_facility/shelter.svg" type="node,closedway" preset_name_label="true">
+            <link href="http://wiki.openstreetmap.org/wiki/Key:social_facility"
+                  de.href="http://wiki.openstreetmap.org/wiki/DE:Key:social_facility"
+                  es.href="http://wiki.openstreetmap.org/wiki/ES:Key:social_facility"
+                  fr.href="http://wiki.openstreetmap.org/wiki/FR:Key:social_facility"
+                  ja.href="http://wiki.openstreetmap.org/wiki/JA:Key:social_facility"
+                  pl.href="http://wiki.openstreetmap.org/wiki/Pl:Key:social_facility"
+                  ru.href="http://wiki.openstreetmap.org/wiki/RU:Key:social_facility" />
+            <space />
+            <key key="amenity" value="social_facility" />
+            <key key="social_facility" value="shelter" />
+            <reference ref="name_operator" />
+            <text key="capacity" text="Capacity" />
+            <reference ref="link_contact_address" />
+        </item> <!-- Shelter -->
+        <item name="Food Bank" icon="styles/standard/social_facility/food_bank.svg" type="node,closedway" preset_name_label="true">
+            <link href="http://wiki.openstreetmap.org/wiki/Key:social_facility"
+                  de.href="http://wiki.openstreetmap.org/wiki/DE:Key:social_facility"
+                  es.href="http://wiki.openstreetmap.org/wiki/ES:Key:social_facility"
+                  fr.href="http://wiki.openstreetmap.org/wiki/FR:Key:social_facility"
+                  ja.href="http://wiki.openstreetmap.org/wiki/JA:Key:social_facility"
+                  pl.href="http://wiki.openstreetmap.org/wiki/Pl:Key:social_facility"
+                  ru.href="http://wiki.openstreetmap.org/wiki/RU:Key:social_facility" />
+            <space />
+            <key key="amenity" value="social_facility" />
+            <key key="social_facility" value="food_bank" />
+            <reference ref="name_operator_oh_wheelchair" />
+            <reference ref="link_contact_address" />
+        </item> <!-- Food Bank -->
+    </group> <!-- Social Facility -->
     <group name="Facilities" icon="presets/telephone.png">
         <item name="Toilets/Restrooms" icon="presets/toilet.png" type="node,closedway" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:amenity=toilets"
@@ -4733,6 +4795,7 @@
                 <reference ref="fee" />
                 <text key="operator" text="Operator" />
                 <combo key="toilets:position" text="Usage Position" values="seated,seated;urinal,squat,urinal" />
+                <combo key="diaper" text="Diaper" values="yes,no,room,1,2,3,4,5" text_context="toilets" />
                 <reference ref="wheelchair" />
             </optional>
         </item> <!-- Toilets/Restrooms -->
diff --git a/data/validator/ignoretags.cfg b/data/validator/ignoretags.cfg
index 37fa2b7..736bf6e 100644
--- a/data/validator/ignoretags.cfg
+++ b/data/validator/ignoretags.cfg
@@ -135,6 +135,7 @@ K:building=public
 K:building=houseboat
 K:building=static_caravan
 K:leisure=recreation_ground
+K:old_railway_operator=PRR
 ;
 ; Highway Key/Value Pairs
 ;
@@ -255,3 +256,18 @@ K:tourism=yes
 K:type=collection
 K:type=tmc
 K:type=TMC
+;
+; Tags not yet decided (to remove from this section when added or deprecated) 
+; see https://josm.openstreetmap.de/ticket/12240
+; see https://josm.openstreetmap.de/ticket/11915
+; see https://josm.openstreetmap.de/ticket/10991
+; see https://josm.openstreetmap.de/ticket/10759
+;
+K:golf=bunker
+K:golf=fairway
+K:maintenance=gritting
+K:man_made=mast
+K:man_made=silo
+K:power=portal
+K:route=foot
+K:seasonal=yes
diff --git a/data_nodist/trans/ast.lang b/data_nodist/trans/ast.lang
index bc60f05..13b62f1 100644
Binary files a/data_nodist/trans/ast.lang and b/data_nodist/trans/ast.lang differ
diff --git a/data_nodist/trans/be.lang b/data_nodist/trans/be.lang
index 51205a2..7658449 100644
Binary files a/data_nodist/trans/be.lang and b/data_nodist/trans/be.lang differ
diff --git a/data_nodist/trans/bg.lang b/data_nodist/trans/bg.lang
index 029c701..d3ccd48 100644
Binary files a/data_nodist/trans/bg.lang and b/data_nodist/trans/bg.lang differ
diff --git a/data_nodist/trans/ca-valencia.lang b/data_nodist/trans/ca-valencia.lang
index 3e3dcbb..a91c4cd 100644
Binary files a/data_nodist/trans/ca-valencia.lang and b/data_nodist/trans/ca-valencia.lang differ
diff --git a/data_nodist/trans/ca.lang b/data_nodist/trans/ca.lang
index 5b0cabe..c9fc067 100644
Binary files a/data_nodist/trans/ca.lang and b/data_nodist/trans/ca.lang differ
diff --git a/data_nodist/trans/cs.lang b/data_nodist/trans/cs.lang
index f954893..dcd07d4 100644
Binary files a/data_nodist/trans/cs.lang and b/data_nodist/trans/cs.lang differ
diff --git a/data_nodist/trans/da.lang b/data_nodist/trans/da.lang
index 589fddb..16b1bb2 100644
Binary files a/data_nodist/trans/da.lang and b/data_nodist/trans/da.lang differ
diff --git a/data_nodist/trans/de.lang b/data_nodist/trans/de.lang
index d26c2b5..6b8ed79 100644
Binary files a/data_nodist/trans/de.lang and b/data_nodist/trans/de.lang differ
diff --git a/data_nodist/trans/el.lang b/data_nodist/trans/el.lang
index 288a4be..301e919 100644
Binary files a/data_nodist/trans/el.lang and b/data_nodist/trans/el.lang differ
diff --git a/data_nodist/trans/en.lang b/data_nodist/trans/en.lang
index c92fa79..5cdc5aa 100644
Binary files a/data_nodist/trans/en.lang and b/data_nodist/trans/en.lang differ
diff --git a/data_nodist/trans/en_AU.lang b/data_nodist/trans/en_AU.lang
index 3b5fbde..8cd7414 100644
Binary files a/data_nodist/trans/en_AU.lang and b/data_nodist/trans/en_AU.lang differ
diff --git a/data_nodist/trans/en_GB.lang b/data_nodist/trans/en_GB.lang
index f6b1e79..2148b03 100644
Binary files a/data_nodist/trans/en_GB.lang and b/data_nodist/trans/en_GB.lang differ
diff --git a/data_nodist/trans/es.lang b/data_nodist/trans/es.lang
index 6b4c357..28f9d54 100644
Binary files a/data_nodist/trans/es.lang and b/data_nodist/trans/es.lang differ
diff --git a/data_nodist/trans/et.lang b/data_nodist/trans/et.lang
index 057907b..2c764c7 100644
Binary files a/data_nodist/trans/et.lang and b/data_nodist/trans/et.lang differ
diff --git a/data_nodist/trans/fi.lang b/data_nodist/trans/fi.lang
index 056e034..0f3ffc5 100644
Binary files a/data_nodist/trans/fi.lang and b/data_nodist/trans/fi.lang differ
diff --git a/data_nodist/trans/fr.lang b/data_nodist/trans/fr.lang
index 3b5db0b..e6101e7 100644
Binary files a/data_nodist/trans/fr.lang and b/data_nodist/trans/fr.lang differ
diff --git a/data_nodist/trans/gl.lang b/data_nodist/trans/gl.lang
index 6b06bde..8596502 100644
Binary files a/data_nodist/trans/gl.lang and b/data_nodist/trans/gl.lang differ
diff --git a/data_nodist/trans/hu.lang b/data_nodist/trans/hu.lang
index 391fda8..a69d56e 100644
Binary files a/data_nodist/trans/hu.lang and b/data_nodist/trans/hu.lang differ
diff --git a/data_nodist/trans/id.lang b/data_nodist/trans/id.lang
index d29ac62..60cae58 100644
Binary files a/data_nodist/trans/id.lang and b/data_nodist/trans/id.lang differ
diff --git a/data_nodist/trans/it.lang b/data_nodist/trans/it.lang
index 80d530e..7bb99a3 100644
Binary files a/data_nodist/trans/it.lang and b/data_nodist/trans/it.lang differ
diff --git a/data_nodist/trans/ja.lang b/data_nodist/trans/ja.lang
index 1a94b85..8f9004a 100644
Binary files a/data_nodist/trans/ja.lang and b/data_nodist/trans/ja.lang differ
diff --git a/data_nodist/trans/km.lang b/data_nodist/trans/km.lang
index 6a890ff..1026cb6 100644
Binary files a/data_nodist/trans/km.lang and b/data_nodist/trans/km.lang differ
diff --git a/data_nodist/trans/lt.lang b/data_nodist/trans/lt.lang
index eda1b8c..5c6aa58 100644
Binary files a/data_nodist/trans/lt.lang and b/data_nodist/trans/lt.lang differ
diff --git a/data_nodist/trans/nb.lang b/data_nodist/trans/nb.lang
index d99a41c..68e0ba6 100644
Binary files a/data_nodist/trans/nb.lang and b/data_nodist/trans/nb.lang differ
diff --git a/data_nodist/trans/nl.lang b/data_nodist/trans/nl.lang
index ca5fa18..4323580 100644
Binary files a/data_nodist/trans/nl.lang and b/data_nodist/trans/nl.lang differ
diff --git a/data_nodist/trans/pl.lang b/data_nodist/trans/pl.lang
index 63d6ef6..40ca5ae 100644
Binary files a/data_nodist/trans/pl.lang and b/data_nodist/trans/pl.lang differ
diff --git a/data_nodist/trans/pt.lang b/data_nodist/trans/pt.lang
index b10cf28..8b82fea 100644
Binary files a/data_nodist/trans/pt.lang and b/data_nodist/trans/pt.lang differ
diff --git a/data_nodist/trans/pt_BR.lang b/data_nodist/trans/pt_BR.lang
index cff4f59..17de33c 100644
Binary files a/data_nodist/trans/pt_BR.lang and b/data_nodist/trans/pt_BR.lang differ
diff --git a/data_nodist/trans/ru.lang b/data_nodist/trans/ru.lang
index 37af63a..c390ef7 100644
Binary files a/data_nodist/trans/ru.lang and b/data_nodist/trans/ru.lang differ
diff --git a/data_nodist/trans/sk.lang b/data_nodist/trans/sk.lang
index f4233ff..64a29a2 100644
Binary files a/data_nodist/trans/sk.lang and b/data_nodist/trans/sk.lang differ
diff --git a/data_nodist/trans/sv.lang b/data_nodist/trans/sv.lang
index 3956c4a..5ac58ec 100644
Binary files a/data_nodist/trans/sv.lang and b/data_nodist/trans/sv.lang differ
diff --git a/data_nodist/trans/uk.lang b/data_nodist/trans/uk.lang
index c2e3b8f..432a112 100644
Binary files a/data_nodist/trans/uk.lang and b/data_nodist/trans/uk.lang differ
diff --git a/data_nodist/trans/vi.lang b/data_nodist/trans/vi.lang
index 4a0a395..87eb3a8 100644
Binary files a/data_nodist/trans/vi.lang and b/data_nodist/trans/vi.lang differ
diff --git a/data_nodist/trans/zh_CN.lang b/data_nodist/trans/zh_CN.lang
index b7158dd..1d51653 100644
Binary files a/data_nodist/trans/zh_CN.lang and b/data_nodist/trans/zh_CN.lang differ
diff --git a/data_nodist/trans/zh_TW.lang b/data_nodist/trans/zh_TW.lang
index 3aa7d65..c9d41ad 100644
Binary files a/data_nodist/trans/zh_TW.lang and b/data_nodist/trans/zh_TW.lang differ
diff --git a/i18n/build.xml b/i18n/build.xml
index 9b134e5..7ae4bda 100644
--- a/i18n/build.xml
+++ b/i18n/build.xml
@@ -41,7 +41,7 @@
         <copy file="specialmessages.java" todir="${i18n.build.dir}"/>
     </target>
     <target name="po/josm.pot" description="Extracts message keys from the source code" depends="trans_.java,init">
-        <gettext-extract keysFile="josm.pot" poDirectory="po" keywords="-k -ktrc:1c,2 -kmarktrc:1c,2 -ktr -kmarktr -ktrn:1,2 -ktrnc:1c,2,3">
+        <gettext-extract keysFile="josm.raw.pot" poDirectory="po" keywords="-k -ktrc:1c,2 -kmarktrc:1c,2 -ktr -kmarktr -ktrn:1,2 -ktrnc:1c,2,3">
             <fileset dir="${josm.build.dir}/src" includes="**/*.java"/>
             <fileset dir="${i18n.build.dir}" includes="specialmessages.java"/>
             <fileset dir="${i18n.build.dir}" includes="trans_*.java"/>
@@ -50,6 +50,10 @@
             <fileset dir="${josm.build.dir}/styles/standard" includes="*.mapcss"/>
             <fileset dir="${plugin.dir}" includes="**/*.java"/>
         </gettext-extract>
+        <exec executable="msggrep" failonerror="true">
+            <arg line="--msgid --regexp='---DUMMY-MARKER---' --invert-match --output-file=po/josm.pot po/josm.raw.pot"/>
+        </exec>
+        <delete file="po/josm.raw.pot"/>
     </target>
     <target name="po/core.pot" description="Extracts message keys from the JOSM core source code" depends="trans_.java,init">
         <gettext-extract keysFile="core.pot" poDirectory="po" keywords="-k -ktrc:1c,2 -kmarktrc:1c,2 -ktr -kmarktr -ktrn:1,2 -ktrnc:1c,2,3">
@@ -93,8 +97,10 @@
         <delete file="${po.build.dir}/plugins.raw.pot"/>
     </target>
     <target name="build" depends="pot,allpot">
-        <antcall target="coretrans"/>
-        <antcall target="datatrans"/>
+        <antcall target="buildcore"/>
+        <antcall target="buildplugins"/>
+    </target>
+    <target name="buildplugins" depends="init">
         <foreach param="path" target="plugintrans">
             <path>
                 <dirset dir="${plugin.dir}" includes="*" excludes="00_*" />
diff --git a/i18n/convmaps.pl b/i18n/convmaps.pl
index 6eeb6df..f0dbe1c 100644
--- a/i18n/convmaps.pl
+++ b/i18n/convmaps.pl
@@ -33,7 +33,7 @@ for my $line (@lines)
 {
   $line =~ s/\r//g;
   chomp($line);
-  print "tr(\"\"); ";
+  print "tr(\"---DUMMY-MARKER---\"); ";
   if($line =~ /<name(?: +lang=['"]en['"])?>(.*)<\/name>/)
   {
     my $val = $1;
diff --git a/i18n/convpreset.pl b/i18n/convpreset.pl
index 3008336..ff59ba7 100644
--- a/i18n/convpreset.pl
+++ b/i18n/convpreset.pl
@@ -35,7 +35,7 @@ while(my $line = <>)
 {
   ++$linenr;
   chomp($line);
-  print "tr(\"\"); ";
+  print "tr(\"---DUMMY-MARKER---\"); ";
   if($line =~ /<item\s+name=(".*?")/)
   {
     my $val = fix($1);
diff --git a/i18n/convstyle.pl b/i18n/convstyle.pl
index 24d2459..cafc3ca 100644
--- a/i18n/convstyle.pl
+++ b/i18n/convstyle.pl
@@ -17,7 +17,7 @@ print "class trans_style { void tr(String s){} void f() {";
 while(my $line = <>)
 {
   chomp($line);
-  print "tr(\"\"); ";
+  print "tr(\"---DUMMY-MARKER---\"); ";
   if($line =~ /<rules\s+name=(".*?")/)
   {
     print "/* mappaint style named $1 */ tr($1);\n";
diff --git a/i18n/convsurveyor.pl b/i18n/convsurveyor.pl
index f0e373c..5915478 100644
--- a/i18n/convsurveyor.pl
+++ b/i18n/convsurveyor.pl
@@ -18,7 +18,7 @@ print "class trans_surveyor { void tr(String s){} void f() {";
 while(my $line = <>)
 {
   chomp($line);
-  print "tr(\"\"); ";
+  print "tr(\"---DUMMY-MARKER---\"); ";
   if($line =~ /^#(.*)$/)
   {
     print "/* $1 */\n";
diff --git a/i18n/i18n.pl b/i18n/i18n.pl
index 20c22eb..a27fa59 100755
--- a/i18n/i18n.pl
+++ b/i18n/i18n.pl
@@ -398,7 +398,7 @@ sub createlang($@)
     }
     else
     {
-      printf "Created file %-${maxlen}s: Added %5d strings out of %5d (%5.1f%%).\n",$file,$cnt,$maxcount,,$cnt*100.0/$maxcount;
+      printf "Created file %-${maxlen}s: Added %5d strings out of %5d (%5.1f%%).\n",$file,$cnt,$maxcount,,$cnt*100.0/$maxcount-5e-2;
     }
   }
 }
diff --git a/i18n/po/af.po b/i18n/po/af.po
index 53510b7..96dbe5e 100644
--- a/i18n/po/af.po
+++ b/i18n/po/af.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: josm\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-12-31 03:40+0100\n"
+"POT-Creation-Date: 2016-01-06 03:38+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: 2015-12-31 04:31+0000\n"
-"X-Generator: Launchpad (build 17865)\n"
+"X-Launchpad-Export-Date: 2016-01-06 04:31+0000\n"
+"X-Generator: Launchpad (build 17876)\n"
 "Language: af\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -1056,9 +1056,6 @@ msgstr ""
 msgid "Overpass query: "
 msgstr ""
 
-msgid "Overpass server: "
-msgstr ""
-
 msgid "Paste"
 msgstr ""
 
@@ -1348,6 +1345,9 @@ msgstr ""
 msgid "Split a way at the selected node."
 msgstr ""
 
+msgid "Cannot split since another split operation is already in progress"
+msgstr ""
+
 msgid ""
 "The current selection cannot be used for splitting - no node is selected."
 msgstr ""
@@ -1459,6 +1459,27 @@ msgid ""
 "own copy and all nodes will be selected."
 msgstr ""
 
+msgid "Existing node"
+msgstr ""
+
+msgid "Both nodes"
+msgstr ""
+
+msgid "New node"
+msgstr ""
+
+msgid "Tags / Memberships"
+msgstr ""
+
+msgid "Unglue"
+msgstr ""
+
+msgid "Where should the tags of the node be put?"
+msgstr ""
+
+msgid "Where should the memberships of this node be put?"
+msgstr ""
+
 msgid "Unglued Node"
 msgstr ""
 
@@ -3049,6 +3070,15 @@ msgstr ""
 msgid "Restoring files"
 msgstr ""
 
+msgid "Unable to delete backup file {0}"
+msgstr ""
+
+msgid "Unable to delete PID file {0}"
+msgstr ""
+
+msgid "Unable to delete archived backup file {0}"
+msgstr ""
+
 msgid "Illegal latitude value ''{0}''"
 msgstr ""
 
@@ -4207,6 +4237,9 @@ msgstr ""
 msgid "No \"to\" way found"
 msgstr ""
 
+msgid "\"from\" way equals \"to\" way"
+msgstr ""
+
 msgid "No \"via\" node or way found"
 msgstr ""
 
@@ -7004,9 +7037,6 @@ msgstr ""
 msgid "Tags: {0} / Memberships: {1}"
 msgstr ""
 
-msgid "Tags / Memberships"
-msgstr ""
-
 msgid "Delete the selected key in all objects"
 msgstr ""
 
@@ -11611,6 +11641,15 @@ msgstr ""
 msgid "Please enter the OSM API URL."
 msgstr ""
 
+msgid "Use Overpass server for object downloads"
+msgstr ""
+
+msgid "Overpass server: "
+msgstr ""
+
+msgid "Overpass server"
+msgstr ""
+
 msgid "Proxy settings"
 msgstr ""
 
@@ -13749,6 +13788,9 @@ msgstr ""
 msgid "reserved"
 msgstr ""
 
+msgid "Unable to delete old preferences file {0}"
+msgstr ""
+
 msgid "Outdated Java version"
 msgstr ""
 
@@ -13840,6 +13882,9 @@ msgid ""
 "contain any JOSM object or suitable text. </p></html>"
 msgstr ""
 
+msgid "Unable to delete file {0}"
+msgstr ""
+
 msgid "ms"
 msgstr ""
 
@@ -16954,6 +16999,9 @@ msgstr ""
 msgid "Tourist buses"
 msgstr ""
 
+msgid "Max. speed Heavy Goods Vehicles (km/h)"
+msgstr ""
+
 msgid "Min. speed (km/h)"
 msgstr ""
 
@@ -19251,12 +19299,6 @@ msgstr ""
 msgid "Dentist"
 msgstr ""
 
-msgid "Nursing Home"
-msgstr ""
-
-msgid "Retirement Home"
-msgstr ""
-
 msgid "Pharmacy"
 msgstr ""
 
@@ -19284,6 +19326,31 @@ msgstr ""
 msgid "Veterinary"
 msgstr ""
 
+msgid "Social Facility"
+msgstr ""
+
+msgid "Nursing Home"
+msgstr ""
+
+msgid "Group Home"
+msgstr ""
+
+msgid "For"
+msgstr ""
+
+msgid "Assisted Living"
+msgstr ""
+
+msgid "Outreach"
+msgstr ""
+
+msgctxt "social_facility"
+msgid "Shelter"
+msgstr ""
+
+msgid "Food Bank"
+msgstr ""
+
 msgid "Toilets/Restrooms"
 msgstr ""
 
@@ -19326,6 +19393,13 @@ msgstr ""
 msgid "urinal"
 msgstr ""
 
+msgctxt "toilets"
+msgid "Diaper"
+msgstr ""
+
+msgid "room"
+msgstr ""
+
 msgid "Post Box"
 msgstr ""
 
@@ -23363,24 +23437,24 @@ msgstr ""
 msgid "Download GPX track from openstreetmap.org"
 msgstr ""
 
+msgid "Download Track"
+msgstr ""
+
+msgid "Filename"
+msgstr ""
+
 msgid ""
 "Error occurred while parsing gpx file {0}. Only a part of the file will be "
 "available."
 msgstr ""
 
-msgid "Invalid URL {0}"
-msgstr ""
-
 msgid "Error fetching URL {0}"
 msgstr ""
 
 msgid "Error parsing data from URL {0}"
 msgstr ""
 
-msgid "Download Track"
-msgstr ""
-
-msgid "Filename"
+msgid "Invalid URL {0}"
 msgstr ""
 
 msgid "Private (only shared as anonymous, unordered points)"
@@ -23430,9 +23504,6 @@ msgstr ""
 msgid "Uploading trace ..."
 msgstr ""
 
-msgid "Connecting..."
-msgstr ""
-
 msgid "Upload canceled"
 msgstr ""
 
@@ -27871,6 +27942,69 @@ msgstr ""
 msgid "Please load some photos."
 msgstr ""
 
+msgid "Edit photo GPS data"
+msgstr ""
+
+msgid "Edit GPS data of selected photo."
+msgstr ""
+
+msgid "Edit Photo GPS Data"
+msgstr ""
+
+msgid "Please select an image first."
+msgstr ""
+
+msgid "No image selected"
+msgstr ""
+
+msgid "(Empty values delete the according fields.)"
+msgstr ""
+
+msgid "coordinates"
+msgstr ""
+
+msgid "Latitude and longitude"
+msgstr ""
+
+msgid "Edit Image Coordinates"
+msgstr ""
+
+msgid "Edit coordinates in separate editor"
+msgstr ""
+
+msgid "altitude"
+msgstr ""
+
+msgid "Altitude:"
+msgstr ""
+
+msgid "speed"
+msgstr ""
+
+msgid "positive number or empty"
+msgstr ""
+
+msgid "Speed:"
+msgstr ""
+
+msgid "direction"
+msgstr ""
+
+msgid "range -360.0 .. 360.0, or empty"
+msgstr ""
+
+msgid "Direction:"
+msgstr ""
+
+msgid "°"
+msgstr ""
+
+msgid "Undo changes made in this dialog"
+msgstr ""
+
+msgid "Reload GPS data from image file"
+msgstr ""
+
 msgid "New layer for untagged images"
 msgstr ""
 
@@ -30887,9 +31021,6 @@ msgstr ""
 msgid "Fetches all coordinates from Wikipedia in the current view"
 msgstr ""
 
-msgid "coordinates"
-msgstr ""
-
 msgid "Category"
 msgstr ""
 
diff --git a/i18n/po/am.po b/i18n/po/am.po
index 771095b..e52b2f8 100644
--- a/i18n/po/am.po
+++ b/i18n/po/am.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: josm\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-12-31 03:40+0100\n"
+"POT-Creation-Date: 2016-01-06 03:38+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: 2015-12-31 04:32+0000\n"
-"X-Generator: Launchpad (build 17865)\n"
+"X-Launchpad-Export-Date: 2016-01-06 04:31+0000\n"
+"X-Generator: Launchpad (build 17876)\n"
 "Language: am\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -1056,9 +1056,6 @@ msgstr ""
 msgid "Overpass query: "
 msgstr ""
 
-msgid "Overpass server: "
-msgstr ""
-
 msgid "Paste"
 msgstr ""
 
@@ -1348,6 +1345,9 @@ msgstr ""
 msgid "Split a way at the selected node."
 msgstr ""
 
+msgid "Cannot split since another split operation is already in progress"
+msgstr ""
+
 msgid ""
 "The current selection cannot be used for splitting - no node is selected."
 msgstr ""
@@ -1459,6 +1459,27 @@ msgid ""
 "own copy and all nodes will be selected."
 msgstr ""
 
+msgid "Existing node"
+msgstr ""
+
+msgid "Both nodes"
+msgstr ""
+
+msgid "New node"
+msgstr ""
+
+msgid "Tags / Memberships"
+msgstr ""
+
+msgid "Unglue"
+msgstr ""
+
+msgid "Where should the tags of the node be put?"
+msgstr ""
+
+msgid "Where should the memberships of this node be put?"
+msgstr ""
+
 msgid "Unglued Node"
 msgstr ""
 
@@ -3049,6 +3070,15 @@ msgstr ""
 msgid "Restoring files"
 msgstr ""
 
+msgid "Unable to delete backup file {0}"
+msgstr ""
+
+msgid "Unable to delete PID file {0}"
+msgstr ""
+
+msgid "Unable to delete archived backup file {0}"
+msgstr ""
+
 msgid "Illegal latitude value ''{0}''"
 msgstr ""
 
@@ -4207,6 +4237,9 @@ msgstr ""
 msgid "No \"to\" way found"
 msgstr ""
 
+msgid "\"from\" way equals \"to\" way"
+msgstr ""
+
 msgid "No \"via\" node or way found"
 msgstr ""
 
@@ -7004,9 +7037,6 @@ msgstr ""
 msgid "Tags: {0} / Memberships: {1}"
 msgstr ""
 
-msgid "Tags / Memberships"
-msgstr ""
-
 msgid "Delete the selected key in all objects"
 msgstr ""
 
@@ -11611,6 +11641,15 @@ msgstr ""
 msgid "Please enter the OSM API URL."
 msgstr ""
 
+msgid "Use Overpass server for object downloads"
+msgstr ""
+
+msgid "Overpass server: "
+msgstr ""
+
+msgid "Overpass server"
+msgstr ""
+
 msgid "Proxy settings"
 msgstr ""
 
@@ -13749,6 +13788,9 @@ msgstr ""
 msgid "reserved"
 msgstr ""
 
+msgid "Unable to delete old preferences file {0}"
+msgstr ""
+
 msgid "Outdated Java version"
 msgstr ""
 
@@ -13840,6 +13882,9 @@ msgid ""
 "contain any JOSM object or suitable text. </p></html>"
 msgstr ""
 
+msgid "Unable to delete file {0}"
+msgstr ""
+
 msgid "ms"
 msgstr ""
 
@@ -16954,6 +16999,9 @@ msgstr ""
 msgid "Tourist buses"
 msgstr ""
 
+msgid "Max. speed Heavy Goods Vehicles (km/h)"
+msgstr ""
+
 msgid "Min. speed (km/h)"
 msgstr ""
 
@@ -19251,12 +19299,6 @@ msgstr ""
 msgid "Dentist"
 msgstr ""
 
-msgid "Nursing Home"
-msgstr ""
-
-msgid "Retirement Home"
-msgstr ""
-
 msgid "Pharmacy"
 msgstr ""
 
@@ -19284,6 +19326,31 @@ msgstr ""
 msgid "Veterinary"
 msgstr ""
 
+msgid "Social Facility"
+msgstr ""
+
+msgid "Nursing Home"
+msgstr ""
+
+msgid "Group Home"
+msgstr ""
+
+msgid "For"
+msgstr ""
+
+msgid "Assisted Living"
+msgstr ""
+
+msgid "Outreach"
+msgstr ""
+
+msgctxt "social_facility"
+msgid "Shelter"
+msgstr ""
+
+msgid "Food Bank"
+msgstr ""
+
 msgid "Toilets/Restrooms"
 msgstr ""
 
@@ -19326,6 +19393,13 @@ msgstr ""
 msgid "urinal"
 msgstr ""
 
+msgctxt "toilets"
+msgid "Diaper"
+msgstr ""
+
+msgid "room"
+msgstr ""
+
 msgid "Post Box"
 msgstr ""
 
@@ -23363,24 +23437,24 @@ msgstr ""
 msgid "Download GPX track from openstreetmap.org"
 msgstr ""
 
+msgid "Download Track"
+msgstr ""
+
+msgid "Filename"
+msgstr ""
+
 msgid ""
 "Error occurred while parsing gpx file {0}. Only a part of the file will be "
 "available."
 msgstr ""
 
-msgid "Invalid URL {0}"
-msgstr ""
-
 msgid "Error fetching URL {0}"
 msgstr ""
 
 msgid "Error parsing data from URL {0}"
 msgstr ""
 
-msgid "Download Track"
-msgstr ""
-
-msgid "Filename"
+msgid "Invalid URL {0}"
 msgstr ""
 
 msgid "Private (only shared as anonymous, unordered points)"
@@ -23430,9 +23504,6 @@ msgstr ""
 msgid "Uploading trace ..."
 msgstr ""
 
-msgid "Connecting..."
-msgstr ""
-
 msgid "Upload canceled"
 msgstr ""
 
@@ -27871,6 +27942,69 @@ msgstr ""
 msgid "Please load some photos."
 msgstr ""
 
+msgid "Edit photo GPS data"
+msgstr ""
+
+msgid "Edit GPS data of selected photo."
+msgstr ""
+
+msgid "Edit Photo GPS Data"
+msgstr ""
+
+msgid "Please select an image first."
+msgstr ""
+
+msgid "No image selected"
+msgstr ""
+
+msgid "(Empty values delete the according fields.)"
+msgstr ""
+
+msgid "coordinates"
+msgstr ""
+
+msgid "Latitude and longitude"
+msgstr ""
+
+msgid "Edit Image Coordinates"
+msgstr ""
+
+msgid "Edit coordinates in separate editor"
+msgstr ""
+
+msgid "altitude"
+msgstr ""
+
+msgid "Altitude:"
+msgstr ""
+
+msgid "speed"
+msgstr ""
+
+msgid "positive number or empty"
+msgstr ""
+
+msgid "Speed:"
+msgstr ""
+
+msgid "direction"
+msgstr ""
+
+msgid "range -360.0 .. 360.0, or empty"
+msgstr ""
+
+msgid "Direction:"
+msgstr ""
+
+msgid "°"
+msgstr ""
+
+msgid "Undo changes made in this dialog"
+msgstr ""
+
+msgid "Reload GPS data from image file"
+msgstr ""
+
 msgid "New layer for untagged images"
 msgstr ""
 
@@ -30887,9 +31021,6 @@ msgstr ""
 msgid "Fetches all coordinates from Wikipedia in the current view"
 msgstr ""
 
-msgid "coordinates"
-msgstr ""
-
 msgid "Category"
 msgstr ""
 
diff --git a/i18n/po/ar.po b/i18n/po/ar.po
index 744e765..a0a5296 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: 2015-12-31 03:40+0100\n"
+"POT-Creation-Date: 2016-01-06 03:38+0100\n"
 "PO-Revision-Date: 2015-10-08 23:09+0000\n"
 "Last-Translator: mourad101ee <mourad101ee 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: 2015-12-31 04:33+0000\n"
-"X-Generator: Launchpad (build 17865)\n"
+"X-Launchpad-Export-Date: 2016-01-06 04:32+0000\n"
+"X-Generator: Launchpad (build 17876)\n"
 "Language: ar\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -1070,9 +1070,6 @@ msgstr ""
 msgid "Overpass query: "
 msgstr ""
 
-msgid "Overpass server: "
-msgstr ""
-
 msgid "Paste"
 msgstr "ألصِق"
 
@@ -1362,6 +1359,9 @@ msgstr ""
 msgid "Split a way at the selected node."
 msgstr ""
 
+msgid "Cannot split since another split operation is already in progress"
+msgstr ""
+
 msgid ""
 "The current selection cannot be used for splitting - no node is selected."
 msgstr ""
@@ -1477,6 +1477,27 @@ msgid ""
 "own copy and all nodes will be selected."
 msgstr ""
 
+msgid "Existing node"
+msgstr ""
+
+msgid "Both nodes"
+msgstr ""
+
+msgid "New node"
+msgstr ""
+
+msgid "Tags / Memberships"
+msgstr ""
+
+msgid "Unglue"
+msgstr ""
+
+msgid "Where should the tags of the node be put?"
+msgstr ""
+
+msgid "Where should the memberships of this node be put?"
+msgstr ""
+
 msgid "Unglued Node"
 msgstr ""
 
@@ -3068,6 +3089,15 @@ msgstr ""
 msgid "Restoring files"
 msgstr ""
 
+msgid "Unable to delete backup file {0}"
+msgstr ""
+
+msgid "Unable to delete PID file {0}"
+msgstr ""
+
+msgid "Unable to delete archived backup file {0}"
+msgstr ""
+
 msgid "Illegal latitude value ''{0}''"
 msgstr ""
 
@@ -4238,6 +4268,9 @@ msgstr ""
 msgid "No \"to\" way found"
 msgstr ""
 
+msgid "\"from\" way equals \"to\" way"
+msgstr ""
+
 msgid "No \"via\" node or way found"
 msgstr ""
 
@@ -7043,9 +7076,6 @@ msgstr ""
 msgid "Tags: {0} / Memberships: {1}"
 msgstr ""
 
-msgid "Tags / Memberships"
-msgstr ""
-
 msgid "Delete the selected key in all objects"
 msgstr "أمحي المفتاح المنتقى من كلّ الأغراض"
 
@@ -11657,6 +11687,15 @@ msgstr ""
 msgid "Please enter the OSM API URL."
 msgstr ""
 
+msgid "Use Overpass server for object downloads"
+msgstr ""
+
+msgid "Overpass server: "
+msgstr ""
+
+msgid "Overpass server"
+msgstr ""
+
 msgid "Proxy settings"
 msgstr ""
 
@@ -13801,6 +13840,9 @@ msgstr ""
 msgid "reserved"
 msgstr ""
 
+msgid "Unable to delete old preferences file {0}"
+msgstr ""
+
 msgid "Outdated Java version"
 msgstr ""
 
@@ -13892,6 +13934,9 @@ msgid ""
 "contain any JOSM object or suitable text. </p></html>"
 msgstr ""
 
+msgid "Unable to delete file {0}"
+msgstr ""
+
 msgid "ms"
 msgstr ""
 
@@ -17006,6 +17051,9 @@ msgstr ""
 msgid "Tourist buses"
 msgstr ""
 
+msgid "Max. speed Heavy Goods Vehicles (km/h)"
+msgstr ""
+
 msgid "Min. speed (km/h)"
 msgstr ""
 
@@ -19303,12 +19351,6 @@ msgstr ""
 msgid "Dentist"
 msgstr "طبيب أسنان"
 
-msgid "Nursing Home"
-msgstr ""
-
-msgid "Retirement Home"
-msgstr ""
-
 msgid "Pharmacy"
 msgstr "صيدلية"
 
@@ -19336,6 +19378,31 @@ msgstr "إستعمل رمز دولي مثل 12-345-67890"
 msgid "Veterinary"
 msgstr "بيطري"
 
+msgid "Social Facility"
+msgstr ""
+
+msgid "Nursing Home"
+msgstr ""
+
+msgid "Group Home"
+msgstr ""
+
+msgid "For"
+msgstr ""
+
+msgid "Assisted Living"
+msgstr ""
+
+msgid "Outreach"
+msgstr ""
+
+msgctxt "social_facility"
+msgid "Shelter"
+msgstr ""
+
+msgid "Food Bank"
+msgstr ""
+
 msgid "Toilets/Restrooms"
 msgstr ""
 
@@ -19378,6 +19445,13 @@ msgstr ""
 msgid "urinal"
 msgstr ""
 
+msgctxt "toilets"
+msgid "Diaper"
+msgstr ""
+
+msgid "room"
+msgstr ""
+
 msgid "Post Box"
 msgstr "صندوق بريد"
 
@@ -23415,24 +23489,24 @@ msgstr ""
 msgid "Download GPX track from openstreetmap.org"
 msgstr ""
 
+msgid "Download Track"
+msgstr ""
+
+msgid "Filename"
+msgstr ""
+
 msgid ""
 "Error occurred while parsing gpx file {0}. Only a part of the file will be "
 "available."
 msgstr ""
 
-msgid "Invalid URL {0}"
-msgstr ""
-
 msgid "Error fetching URL {0}"
 msgstr ""
 
 msgid "Error parsing data from URL {0}"
 msgstr ""
 
-msgid "Download Track"
-msgstr ""
-
-msgid "Filename"
+msgid "Invalid URL {0}"
 msgstr ""
 
 msgid "Private (only shared as anonymous, unordered points)"
@@ -23482,9 +23556,6 @@ msgstr ""
 msgid "Uploading trace ..."
 msgstr ""
 
-msgid "Connecting..."
-msgstr ""
-
 msgid "Upload canceled"
 msgstr ""
 
@@ -27923,6 +27994,69 @@ msgstr ""
 msgid "Please load some photos."
 msgstr ""
 
+msgid "Edit photo GPS data"
+msgstr ""
+
+msgid "Edit GPS data of selected photo."
+msgstr ""
+
+msgid "Edit Photo GPS Data"
+msgstr ""
+
+msgid "Please select an image first."
+msgstr ""
+
+msgid "No image selected"
+msgstr ""
+
+msgid "(Empty values delete the according fields.)"
+msgstr ""
+
+msgid "coordinates"
+msgstr ""
+
+msgid "Latitude and longitude"
+msgstr ""
+
+msgid "Edit Image Coordinates"
+msgstr ""
+
+msgid "Edit coordinates in separate editor"
+msgstr ""
+
+msgid "altitude"
+msgstr ""
+
+msgid "Altitude:"
+msgstr ""
+
+msgid "speed"
+msgstr ""
+
+msgid "positive number or empty"
+msgstr ""
+
+msgid "Speed:"
+msgstr ""
+
+msgid "direction"
+msgstr ""
+
+msgid "range -360.0 .. 360.0, or empty"
+msgstr ""
+
+msgid "Direction:"
+msgstr ""
+
+msgid "°"
+msgstr ""
+
+msgid "Undo changes made in this dialog"
+msgstr ""
+
+msgid "Reload GPS data from image file"
+msgstr ""
+
 msgid "New layer for untagged images"
 msgstr ""
 
@@ -30939,9 +31073,6 @@ msgstr ""
 msgid "Fetches all coordinates from Wikipedia in the current view"
 msgstr ""
 
-msgid "coordinates"
-msgstr ""
-
 msgid "Category"
 msgstr ""
 
diff --git a/i18n/po/ast.po b/i18n/po/ast.po
index ae6fefa..5e3fad3 100644
--- a/i18n/po/ast.po
+++ b/i18n/po/ast.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: josm\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-12-31 03:40+0100\n"
+"POT-Creation-Date: 2016-01-06 03:38+0100\n"
 "PO-Revision-Date: 2015-08-19 16:42+0000\n"
 "Last-Translator: Simon Legner <Unknown>\n"
 "Language-Team: Asturian <ast at li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Launchpad-Export-Date: 2015-12-31 04:34+0000\n"
-"X-Generator: Launchpad (build 17865)\n"
+"X-Launchpad-Export-Date: 2016-01-06 04:33+0000\n"
+"X-Generator: Launchpad (build 17876)\n"
 "Language: ast\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -1145,9 +1145,6 @@ msgstr ""
 msgid "Overpass query: "
 msgstr "Consulta de nivel superior: "
 
-msgid "Overpass server: "
-msgstr ""
-
 msgid "Paste"
 msgstr "Apegar"
 
@@ -1455,6 +1452,9 @@ msgstr "Partir vía"
 msgid "Split a way at the selected node."
 msgstr "Partir una vía nel nudu seleicionáu"
 
+msgid "Cannot split since another split operation is already in progress"
+msgstr ""
+
 msgid ""
 "The current selection cannot be used for splitting - no node is selected."
 msgstr ""
@@ -1581,6 +1581,27 @@ msgstr ""
 "nudos despegaos y van escoyese los nudos nuevos. De lo contrario, toles\n"
 "víes recibirán la so propia copia y seleicionaránse tolos nudos."
 
+msgid "Existing node"
+msgstr ""
+
+msgid "Both nodes"
+msgstr ""
+
+msgid "New node"
+msgstr ""
+
+msgid "Tags / Memberships"
+msgstr "Etiquetes / Miembros"
+
+msgid "Unglue"
+msgstr ""
+
+msgid "Where should the tags of the node be put?"
+msgstr ""
+
+msgid "Where should the memberships of this node be put?"
+msgstr ""
+
 msgid "Unglued Node"
 msgstr "Nudu despegáu"
 
@@ -3314,6 +3335,15 @@ msgstr "El so trabayu guardóse automáticamente."
 msgid "Restoring files"
 msgstr "Restaurando ficheros"
 
+msgid "Unable to delete backup file {0}"
+msgstr ""
+
+msgid "Unable to delete PID file {0}"
+msgstr ""
+
+msgid "Unable to delete archived backup file {0}"
+msgstr ""
+
 msgid "Illegal latitude value ''{0}''"
 msgstr "Valor de llatitú illegal \"{0}\""
 
@@ -4584,6 +4614,9 @@ msgstr "Non s''atopó una vía \"de\""
 msgid "No \"to\" way found"
 msgstr "Non s''atopó una vía \"a\""
 
+msgid "\"from\" way equals \"to\" way"
+msgstr ""
+
 msgid "No \"via\" node or way found"
 msgstr "Nun s’alcontró un nudu o vía \"vía\""
 
@@ -7619,9 +7652,6 @@ msgstr "Oxetos: {2} / Etiquetes: {0} / Pertenencies: {1}"
 msgid "Tags: {0} / Memberships: {1}"
 msgstr "Etiquetes: {0} / Miembros: {1}"
 
-msgid "Tags / Memberships"
-msgstr "Etiquetes / Miembros"
-
 msgid "Delete the selected key in all objects"
 msgstr "Desaniciar la clave seleicionada en tolos oxetos"
 
@@ -12818,6 +12848,15 @@ msgstr "El valor actual nun ye una URL válida"
 msgid "Please enter the OSM API URL."
 msgstr "Por favor introduza la URL del API OSM."
 
+msgid "Use Overpass server for object downloads"
+msgstr ""
+
+msgid "Overpass server: "
+msgstr ""
+
+msgid "Overpass server"
+msgstr ""
+
 msgid "Proxy settings"
 msgstr "Configuraciones de proxy"
 
@@ -15314,6 +15353,9 @@ msgstr "La URL nun contien un {0} válidu"
 msgid "reserved"
 msgstr "reserváu"
 
+msgid "Unable to delete old preferences file {0}"
+msgstr ""
+
 msgid "Outdated Java version"
 msgstr "Versión desactualizada de Java"
 
@@ -15424,6 +15466,9 @@ msgstr ""
 "<html><p> Sentir, ye imposible pegar etiquetes dende la memoria. Nun contien "
 "nengún oxetu de JOSM o un testu fayadizu. </p></html>"
 
+msgid "Unable to delete file {0}"
+msgstr ""
+
 msgid "ms"
 msgstr "ms"
 
@@ -18684,6 +18729,9 @@ msgstr "Vehículos de serviciu públicu (SP)"
 msgid "Tourist buses"
 msgstr "Ómnibus de turistes"
 
+msgid "Max. speed Heavy Goods Vehicles (km/h)"
+msgstr ""
+
 msgid "Min. speed (km/h)"
 msgstr "Velocidá mínima (km/h)"
 
@@ -21007,14 +21055,6 @@ msgstr "Consultoriu médicu"
 msgid "Dentist"
 msgstr "Dentista"
 
-msgid "Nursing Home"
-msgstr ""
-"Residencia de persones dependientes (vieyos, discapacitaos físicos o "
-"psíquicos, etc)"
-
-msgid "Retirement Home"
-msgstr "Centru de la tercer edá"
-
 msgid "Pharmacy"
 msgstr "Farmacia/Parafarmacia"
 
@@ -21042,6 +21082,33 @@ msgstr "(Utilizar códigu internacional, como +12-345-67890)"
 msgid "Veterinary"
 msgstr "Veterinariu"
 
+msgid "Social Facility"
+msgstr ""
+
+msgid "Nursing Home"
+msgstr ""
+"Residencia de persones dependientes (vieyos, discapacitaos físicos o "
+"psíquicos, etc)"
+
+msgid "Group Home"
+msgstr ""
+
+msgid "For"
+msgstr ""
+
+msgid "Assisted Living"
+msgstr ""
+
+msgid "Outreach"
+msgstr ""
+
+msgctxt "social_facility"
+msgid "Shelter"
+msgstr ""
+
+msgid "Food Bank"
+msgstr ""
+
 msgid "Toilets/Restrooms"
 msgstr "Baños"
 
@@ -21084,6 +21151,13 @@ msgstr "cuclielles"
 msgid "urinal"
 msgstr "urinariu"
 
+msgctxt "toilets"
+msgid "Diaper"
+msgstr ""
+
+msgid "room"
+msgstr ""
+
 msgid "Post Box"
 msgstr "Buzón de correos"
 
@@ -25162,6 +25236,12 @@ msgstr "Descargar traza..."
 msgid "Download GPX track from openstreetmap.org"
 msgstr "Descargar GPX pista de openstreetmap.org"
 
+msgid "Download Track"
+msgstr "Descargando traza"
+
+msgid "Filename"
+msgstr "Nome d''arquivu"
+
 msgid ""
 "Error occurred while parsing gpx file {0}. Only a part of the file will be "
 "available."
@@ -25169,20 +25249,14 @@ msgstr ""
 "Erru al analizar l´arquivu gpx {0}. Namá una parte del arquivu va tar "
 "disponible."
 
-msgid "Invalid URL {0}"
-msgstr "URL inválida {0}"
-
 msgid "Error fetching URL {0}"
 msgstr "Erru al buscar dirección URL {0}"
 
 msgid "Error parsing data from URL {0}"
 msgstr "Erru al analizar los datos de la URL {0}"
 
-msgid "Download Track"
-msgstr "Descargando traza"
-
-msgid "Filename"
-msgstr "Nome d''arquivu"
+msgid "Invalid URL {0}"
+msgstr "URL inválida {0}"
 
 msgid "Private (only shared as anonymous, unordered points)"
 msgstr "Priváu (namá compartir como anónimu, desordenar puntos)"
@@ -25236,9 +25310,6 @@ msgstr "Nun hai nenguna capa gpx escoyida. Non puede xubise trazar."
 msgid "Uploading trace ..."
 msgstr "Xubiendo traza..."
 
-msgid "Connecting..."
-msgstr "Conectando..."
-
 msgid "Upload canceled"
 msgstr "Xubida atayada"
 
@@ -30073,6 +30144,69 @@ msgstr ""
 msgid "Please load some photos."
 msgstr "Por favor cargue delles semeyes."
 
+msgid "Edit photo GPS data"
+msgstr ""
+
+msgid "Edit GPS data of selected photo."
+msgstr ""
+
+msgid "Edit Photo GPS Data"
+msgstr ""
+
+msgid "Please select an image first."
+msgstr ""
+
+msgid "No image selected"
+msgstr ""
+
+msgid "(Empty values delete the according fields.)"
+msgstr ""
+
+msgid "coordinates"
+msgstr "coordenaes"
+
+msgid "Latitude and longitude"
+msgstr ""
+
+msgid "Edit Image Coordinates"
+msgstr ""
+
+msgid "Edit coordinates in separate editor"
+msgstr ""
+
+msgid "altitude"
+msgstr ""
+
+msgid "Altitude:"
+msgstr ""
+
+msgid "speed"
+msgstr ""
+
+msgid "positive number or empty"
+msgstr ""
+
+msgid "Speed:"
+msgstr ""
+
+msgid "direction"
+msgstr ""
+
+msgid "range -360.0 .. 360.0, or empty"
+msgstr ""
+
+msgid "Direction:"
+msgstr ""
+
+msgid "°"
+msgstr ""
+
+msgid "Undo changes made in this dialog"
+msgstr ""
+
+msgid "Reload GPS data from image file"
+msgstr ""
+
 msgid "New layer for untagged images"
 msgstr "Nueva capa d''imaxes ensin etiquetar"
 
@@ -33354,9 +33488,6 @@ msgstr "{0}.Wikipedia.org: {1}"
 msgid "Fetches all coordinates from Wikipedia in the current view"
 msgstr "Llogra toles coordenaes de Wikipedia pa la vista actual"
 
-msgid "coordinates"
-msgstr "coordenaes"
-
 msgid "Category"
 msgstr "Estaya"
 
@@ -33402,3 +33533,6 @@ msgstr "Dir a conducir"
 
 msgid "Drive a race car on this layer"
 msgstr "Conduz un coche de carreres nesta capa"
+
+#~ msgid "Retirement Home"
+#~ msgstr "Centru de la tercer edá"
diff --git a/i18n/po/az.po b/i18n/po/az.po
index cc180ee..7814e58 100644
--- a/i18n/po/az.po
+++ b/i18n/po/az.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: josm\n"
 "Report-Msgid-Bugs-To: FULL NAME <EMAIL at ADDRESS>\n"
-"POT-Creation-Date: 2015-12-31 03:40+0100\n"
+"POT-Creation-Date: 2016-01-06 03:38+0100\n"
 "PO-Revision-Date: 2013-01-12 17:56+0000\n"
 "Last-Translator: iAZISS <iss-sash at mail.ru>\n"
 "Language-Team: Azerbaijani <az at li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Launchpad-Export-Date: 2015-12-31 04:35+0000\n"
-"X-Generator: Launchpad (build 17865)\n"
+"X-Launchpad-Export-Date: 2016-01-06 04:33+0000\n"
+"X-Generator: Launchpad (build 17876)\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
 msgstr ""
@@ -1055,9 +1055,6 @@ msgstr ""
 msgid "Overpass query: "
 msgstr ""
 
-msgid "Overpass server: "
-msgstr ""
-
 msgid "Paste"
 msgstr ""
 
@@ -1347,6 +1344,9 @@ msgstr ""
 msgid "Split a way at the selected node."
 msgstr ""
 
+msgid "Cannot split since another split operation is already in progress"
+msgstr ""
+
 msgid ""
 "The current selection cannot be used for splitting - no node is selected."
 msgstr ""
@@ -1458,6 +1458,27 @@ msgid ""
 "own copy and all nodes will be selected."
 msgstr ""
 
+msgid "Existing node"
+msgstr ""
+
+msgid "Both nodes"
+msgstr ""
+
+msgid "New node"
+msgstr ""
+
+msgid "Tags / Memberships"
+msgstr ""
+
+msgid "Unglue"
+msgstr ""
+
+msgid "Where should the tags of the node be put?"
+msgstr ""
+
+msgid "Where should the memberships of this node be put?"
+msgstr ""
+
 msgid "Unglued Node"
 msgstr ""
 
@@ -3048,6 +3069,15 @@ msgstr ""
 msgid "Restoring files"
 msgstr ""
 
+msgid "Unable to delete backup file {0}"
+msgstr ""
+
+msgid "Unable to delete PID file {0}"
+msgstr ""
+
+msgid "Unable to delete archived backup file {0}"
+msgstr ""
+
 msgid "Illegal latitude value ''{0}''"
 msgstr ""
 
@@ -4206,6 +4236,9 @@ msgstr ""
 msgid "No \"to\" way found"
 msgstr ""
 
+msgid "\"from\" way equals \"to\" way"
+msgstr ""
+
 msgid "No \"via\" node or way found"
 msgstr ""
 
@@ -7003,9 +7036,6 @@ msgstr ""
 msgid "Tags: {0} / Memberships: {1}"
 msgstr ""
 
-msgid "Tags / Memberships"
-msgstr ""
-
 msgid "Delete the selected key in all objects"
 msgstr ""
 
@@ -11610,6 +11640,15 @@ msgstr ""
 msgid "Please enter the OSM API URL."
 msgstr ""
 
+msgid "Use Overpass server for object downloads"
+msgstr ""
+
+msgid "Overpass server: "
+msgstr ""
+
+msgid "Overpass server"
+msgstr ""
+
 msgid "Proxy settings"
 msgstr ""
 
@@ -13748,6 +13787,9 @@ msgstr ""
 msgid "reserved"
 msgstr ""
 
+msgid "Unable to delete old preferences file {0}"
+msgstr ""
+
 msgid "Outdated Java version"
 msgstr ""
 
@@ -13839,6 +13881,9 @@ msgid ""
 "contain any JOSM object or suitable text. </p></html>"
 msgstr ""
 
+msgid "Unable to delete file {0}"
+msgstr ""
+
 msgid "ms"
 msgstr ""
 
@@ -16953,6 +16998,9 @@ msgstr ""
 msgid "Tourist buses"
 msgstr ""
 
+msgid "Max. speed Heavy Goods Vehicles (km/h)"
+msgstr ""
+
 msgid "Min. speed (km/h)"
 msgstr ""
 
@@ -19250,12 +19298,6 @@ msgstr ""
 msgid "Dentist"
 msgstr ""
 
-msgid "Nursing Home"
-msgstr ""
-
-msgid "Retirement Home"
-msgstr ""
-
 msgid "Pharmacy"
 msgstr ""
 
@@ -19283,6 +19325,31 @@ msgstr ""
 msgid "Veterinary"
 msgstr ""
 
+msgid "Social Facility"
+msgstr ""
+
+msgid "Nursing Home"
+msgstr ""
+
+msgid "Group Home"
+msgstr ""
+
+msgid "For"
+msgstr ""
+
+msgid "Assisted Living"
+msgstr ""
+
+msgid "Outreach"
+msgstr ""
+
+msgctxt "social_facility"
+msgid "Shelter"
+msgstr ""
+
+msgid "Food Bank"
+msgstr ""
+
 msgid "Toilets/Restrooms"
 msgstr ""
 
@@ -19325,6 +19392,13 @@ msgstr ""
 msgid "urinal"
 msgstr ""
 
+msgctxt "toilets"
+msgid "Diaper"
+msgstr ""
+
+msgid "room"
+msgstr ""
+
 msgid "Post Box"
 msgstr ""
 
@@ -23362,24 +23436,24 @@ msgstr ""
 msgid "Download GPX track from openstreetmap.org"
 msgstr ""
 
+msgid "Download Track"
+msgstr ""
+
+msgid "Filename"
+msgstr ""
+
 msgid ""
 "Error occurred while parsing gpx file {0}. Only a part of the file will be "
 "available."
 msgstr ""
 
-msgid "Invalid URL {0}"
-msgstr ""
-
 msgid "Error fetching URL {0}"
 msgstr ""
 
 msgid "Error parsing data from URL {0}"
 msgstr ""
 
-msgid "Download Track"
-msgstr ""
-
-msgid "Filename"
+msgid "Invalid URL {0}"
 msgstr ""
 
 msgid "Private (only shared as anonymous, unordered points)"
@@ -23429,9 +23503,6 @@ msgstr ""
 msgid "Uploading trace ..."
 msgstr ""
 
-msgid "Connecting..."
-msgstr ""
-
 msgid "Upload canceled"
 msgstr ""
 
@@ -27870,6 +27941,69 @@ msgstr ""
 msgid "Please load some photos."
 msgstr ""
 
+msgid "Edit photo GPS data"
+msgstr ""
+
+msgid "Edit GPS data of selected photo."
+msgstr ""
+
+msgid "Edit Photo GPS Data"
+msgstr ""
+
+msgid "Please select an image first."
+msgstr ""
+
+msgid "No image selected"
+msgstr ""
+
+msgid "(Empty values delete the according fields.)"
+msgstr ""
+
+msgid "coordinates"
+msgstr ""
+
+msgid "Latitude and longitude"
+msgstr ""
+
+msgid "Edit Image Coordinates"
+msgstr ""
+
+msgid "Edit coordinates in separate editor"
+msgstr ""
+
+msgid "altitude"
+msgstr ""
+
+msgid "Altitude:"
+msgstr ""
+
+msgid "speed"
+msgstr ""
+
+msgid "positive number or empty"
+msgstr ""
+
+msgid "Speed:"
+msgstr ""
+
+msgid "direction"
+msgstr ""
+
+msgid "range -360.0 .. 360.0, or empty"
+msgstr ""
+
+msgid "Direction:"
+msgstr ""
+
+msgid "°"
+msgstr ""
+
+msgid "Undo changes made in this dialog"
+msgstr ""
+
+msgid "Reload GPS data from image file"
+msgstr ""
+
 msgid "New layer for untagged images"
 msgstr ""
 
@@ -30886,9 +31020,6 @@ msgstr ""
 msgid "Fetches all coordinates from Wikipedia in the current view"
 msgstr ""
 
-msgid "coordinates"
-msgstr ""
-
 msgid "Category"
 msgstr ""
 
diff --git a/i18n/po/be.po b/i18n/po/be.po
index ad739ef..c06e94f 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: 2015-12-31 03:40+0100\n"
+"POT-Creation-Date: 2016-01-06 03:38+0100\n"
 "PO-Revision-Date: 2015-12-30 20:47+0000\n"
 "Last-Translator: Viktar Palstsiuk <Unknown>\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: 2015-12-31 04:36+0000\n"
-"X-Generator: Launchpad (build 17865)\n"
+"X-Launchpad-Export-Date: 2016-01-06 04:34+0000\n"
+"X-Generator: Launchpad (build 17876)\n"
 "Language: be\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -1155,9 +1155,6 @@ msgstr "Памылка разбору"
 msgid "Overpass query: "
 msgstr "Запыт да Overpass: "
 
-msgid "Overpass server: "
-msgstr "Сервер Overpass: "
-
 msgid "Paste"
 msgstr "Уклеіць"
 
@@ -1468,6 +1465,9 @@ msgstr "Падзяліць лінію"
 msgid "Split a way at the selected node."
 msgstr "Падзяліць лінію ў вылучанай кропцы."
 
+msgid "Cannot split since another split operation is already in progress"
+msgstr ""
+
 msgid ""
 "The current selection cannot be used for splitting - no node is selected."
 msgstr "Цяперашнее вылучэнне немагчыма падзяліць - ня вылучана кропка."
@@ -1601,6 +1601,27 @@ msgstr ""
 "копіі\n"
 "і усе кропкі будуць выбраны"
 
+msgid "Existing node"
+msgstr ""
+
+msgid "Both nodes"
+msgstr ""
+
+msgid "New node"
+msgstr ""
+
+msgid "Tags / Memberships"
+msgstr "Тэгі / Удзел"
+
+msgid "Unglue"
+msgstr ""
+
+msgid "Where should the tags of the node be put?"
+msgstr ""
+
+msgid "Where should the memberships of this node be put?"
+msgstr ""
+
 msgid "Unglued Node"
 msgstr "Расклееная нода"
 
@@ -3369,6 +3390,15 @@ msgstr "Вынікі вашай працы былі захаваны аўтам
 msgid "Restoring files"
 msgstr "Аднаўленне файлаў"
 
+msgid "Unable to delete backup file {0}"
+msgstr ""
+
+msgid "Unable to delete PID file {0}"
+msgstr ""
+
+msgid "Unable to delete archived backup file {0}"
+msgstr ""
+
 msgid "Illegal latitude value ''{0}''"
 msgstr "Няправільнае значэнне шыраты ''{0}''"
 
@@ -4610,6 +4640,9 @@ msgstr "Не паказаны шлях \"адкуль\""
 msgid "No \"to\" way found"
 msgstr "Не паказаны шлях \"куды\""
 
+msgid "\"from\" way equals \"to\" way"
+msgstr ""
+
 msgid "No \"via\" node or way found"
 msgstr "Няма кропкі або лініі \"праз\""
 
@@ -7662,9 +7695,6 @@ msgstr "Аб’екты: {2} / Тэгі: {0} / Удзел: {1}"
 msgid "Tags: {0} / Memberships: {1}"
 msgstr "Тэгі: {0} / Удзел: {1}"
 
-msgid "Tags / Memberships"
-msgstr "Тэгі / Удзел"
-
 msgid "Delete the selected key in all objects"
 msgstr "Выдаліць вылучаны ключ з усіх аб’ектаў"
 
@@ -12861,6 +12891,15 @@ msgstr "Бягучае значэнне гэта няслушны URL"
 msgid "Please enter the OSM API URL."
 msgstr "Калі ласка, увядзіце URL OSM API."
 
+msgid "Use Overpass server for object downloads"
+msgstr ""
+
+msgid "Overpass server: "
+msgstr "Сервер Overpass: "
+
+msgid "Overpass server"
+msgstr ""
+
 msgid "Proxy settings"
 msgstr "Налады проксі-сервера"
 
@@ -15388,6 +15427,9 @@ msgstr "URL не ўтрымоўвае дакладнага значэння {0}"
 msgid "reserved"
 msgstr "зарэзервавана"
 
+msgid "Unable to delete old preferences file {0}"
+msgstr ""
+
 msgid "Outdated Java version"
 msgstr "Састарэлая версія Java"
 
@@ -15498,6 +15540,9 @@ msgstr ""
 "<html><p>На жаль, немагчыма ўставіць тэгі з буфера абмену. Ён не ўтрымлівае "
 "аб`ектаў JOSM або адпаведнага тэксту.</p></html>"
 
+msgid "Unable to delete file {0}"
+msgstr ""
+
 msgid "ms"
 msgstr "мс"
 
@@ -18772,6 +18817,9 @@ msgstr "Грамадскі транспарт"
 msgid "Tourist buses"
 msgstr "Турыстычныя аўтобусы"
 
+msgid "Max. speed Heavy Goods Vehicles (km/h)"
+msgstr ""
+
 msgid "Min. speed (km/h)"
 msgstr "Мін. хуткасць (у км/г)"
 
@@ -21091,12 +21139,6 @@ msgstr "Кабінет лекара"
 msgid "Dentist"
 msgstr "Стаматалогія"
 
-msgid "Nursing Home"
-msgstr "Дом састарэлых (састарэлы тэг)"
-
-msgid "Retirement Home"
-msgstr "Дом састарэлых"
-
 msgid "Pharmacy"
 msgstr "Аптэка"
 
@@ -21124,6 +21166,31 @@ msgstr "(Выкарыстоўвайце міжнародны код, напры
 msgid "Veterinary"
 msgstr "Ветэрынарыя"
 
+msgid "Social Facility"
+msgstr ""
+
+msgid "Nursing Home"
+msgstr "Дом састарэлых (састарэлы тэг)"
+
+msgid "Group Home"
+msgstr ""
+
+msgid "For"
+msgstr ""
+
+msgid "Assisted Living"
+msgstr ""
+
+msgid "Outreach"
+msgstr ""
+
+msgctxt "social_facility"
+msgid "Shelter"
+msgstr ""
+
+msgid "Food Bank"
+msgstr ""
+
 msgid "Toilets/Restrooms"
 msgstr "Грамадскі туалет"
 
@@ -21166,6 +21233,13 @@ msgstr "падлогавы ўнітаз"
 msgid "urinal"
 msgstr "пісуар"
 
+msgctxt "toilets"
+msgid "Diaper"
+msgstr ""
+
+msgid "room"
+msgstr ""
+
 msgid "Post Box"
 msgstr "Паштовая скрыня"
 
@@ -25256,6 +25330,12 @@ msgstr "Загрузка трэка ..."
 msgid "Download GPX track from openstreetmap.org"
 msgstr "Загрузка GPX трэка з openstreetmap.org"
 
+msgid "Download Track"
+msgstr "Запампаваць трэк"
+
+msgid "Filename"
+msgstr "Імя файла"
+
 msgid ""
 "Error occurred while parsing gpx file {0}. Only a part of the file will be "
 "available."
@@ -25263,20 +25343,14 @@ msgstr ""
 "Паўстала памылка пры сінтаксічным разборы gpx-файла {0}. Будзе даступная "
 "толькі частка файла."
 
-msgid "Invalid URL {0}"
-msgstr "Няслушная спасылка {0}"
-
 msgid "Error fetching URL {0}"
 msgstr "Памылка апрацоўкі спасылкі {0}"
 
 msgid "Error parsing data from URL {0}"
 msgstr "Памылка аналізу дадзеных спасылкі {0}"
 
-msgid "Download Track"
-msgstr "Запампаваць трэк"
-
-msgid "Filename"
-msgstr "Імя файла"
+msgid "Invalid URL {0}"
+msgstr "Няслушная спасылка {0}"
 
 msgid "Private (only shared as anonymous, unordered points)"
 msgstr "Прыватныя (бачныя іншым, як ананімныя, неўпарадкаваныя кропкі)"
@@ -25330,9 +25404,6 @@ msgstr "Пласт GPX не абраны. Не атрымоўваецца пер
 msgid "Uploading trace ..."
 msgstr "Перадача трэка на сервер ..."
 
-msgid "Connecting..."
-msgstr "Падлучэнне..."
-
 msgid "Upload canceled"
 msgstr "Перадача адменена"
 
@@ -30145,6 +30216,69 @@ msgstr ""
 msgid "Please load some photos."
 msgstr "Загрузіце некалькі здымкаў."
 
+msgid "Edit photo GPS data"
+msgstr ""
+
+msgid "Edit GPS data of selected photo."
+msgstr ""
+
+msgid "Edit Photo GPS Data"
+msgstr ""
+
+msgid "Please select an image first."
+msgstr ""
+
+msgid "No image selected"
+msgstr ""
+
+msgid "(Empty values delete the according fields.)"
+msgstr ""
+
+msgid "coordinates"
+msgstr "каардынаты"
+
+msgid "Latitude and longitude"
+msgstr ""
+
+msgid "Edit Image Coordinates"
+msgstr ""
+
+msgid "Edit coordinates in separate editor"
+msgstr ""
+
+msgid "altitude"
+msgstr ""
+
+msgid "Altitude:"
+msgstr ""
+
+msgid "speed"
+msgstr ""
+
+msgid "positive number or empty"
+msgstr ""
+
+msgid "Speed:"
+msgstr ""
+
+msgid "direction"
+msgstr ""
+
+msgid "range -360.0 .. 360.0, or empty"
+msgstr ""
+
+msgid "Direction:"
+msgstr ""
+
+msgid "°"
+msgstr ""
+
+msgid "Undo changes made in this dialog"
+msgstr ""
+
+msgid "Reload GPS data from image file"
+msgstr ""
+
 msgid "New layer for untagged images"
 msgstr "Новы пласт для не адзначанага малюнка"
 
@@ -33430,9 +33564,6 @@ msgid "Fetches all coordinates from Wikipedia in the current view"
 msgstr ""
 "Атрыманне з Вікіпедыі ўсіх каардынат для бачнай у акне вобласці карты"
 
-msgid "coordinates"
-msgstr "каардынаты"
-
 msgid "Category"
 msgstr "Катэгорыя"
 
@@ -33476,3 +33607,6 @@ msgstr "Прыступіць да кіравання"
 
 msgid "Drive a race car on this layer"
 msgstr "Весці гоначны аўтамабіль на гэтым пласце"
+
+#~ msgid "Retirement Home"
+#~ msgstr "Дом састарэлых"
diff --git a/i18n/po/bg.po b/i18n/po/bg.po
index 65e49d0..43ccab7 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: 2015-12-31 03:40+0100\n"
+"POT-Creation-Date: 2016-01-06 03:38+0100\n"
 "PO-Revision-Date: 2015-12-03 07:25+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: 2015-12-31 04:38+0000\n"
-"X-Generator: Launchpad (build 17865)\n"
+"X-Launchpad-Export-Date: 2016-01-06 04:36+0000\n"
+"X-Generator: Launchpad (build 17876)\n"
 "Language: bg\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -1111,9 +1111,6 @@ msgstr "Грешка при обработка"
 msgid "Overpass query: "
 msgstr "Грешка при обработка: "
 
-msgid "Overpass server: "
-msgstr ""
-
 msgid "Paste"
 msgstr "Поставяне"
 
@@ -1415,6 +1412,9 @@ msgstr "Разделяне на линия"
 msgid "Split a way at the selected node."
 msgstr "Разделяне на линията в избраната точка."
 
+msgid "Cannot split since another split operation is already in progress"
+msgstr ""
+
 msgid ""
 "The current selection cannot be used for splitting - no node is selected."
 msgstr ""
@@ -1543,6 +1543,27 @@ msgstr ""
 "ще бъдат селектирани. В противен случай, всички линии ще получат \n"
 "дублирани възли и всички възли ще бъдат избрани."
 
+msgid "Existing node"
+msgstr ""
+
+msgid "Both nodes"
+msgstr ""
+
+msgid "New node"
+msgstr ""
+
+msgid "Tags / Memberships"
+msgstr "Тагове/Членства"
+
+msgid "Unglue"
+msgstr ""
+
+msgid "Where should the tags of the node be put?"
+msgstr ""
+
+msgid "Where should the memberships of this node be put?"
+msgstr ""
+
 msgid "Unglued Node"
 msgstr "Незапелен възел"
 
@@ -3184,6 +3205,15 @@ msgstr ""
 msgid "Restoring files"
 msgstr "Възстановяване на файлове"
 
+msgid "Unable to delete backup file {0}"
+msgstr ""
+
+msgid "Unable to delete PID file {0}"
+msgstr ""
+
+msgid "Unable to delete archived backup file {0}"
+msgstr ""
+
 msgid "Illegal latitude value ''{0}''"
 msgstr "Невалидна стойност на географска ширина ''{0}''"
 
@@ -4361,6 +4391,9 @@ msgstr "Няма път с роля \"from\""
 msgid "No \"to\" way found"
 msgstr ""
 
+msgid "\"from\" way equals \"to\" way"
+msgstr ""
+
 msgid "No \"via\" node or way found"
 msgstr ""
 
@@ -7164,9 +7197,6 @@ msgstr ""
 msgid "Tags: {0} / Memberships: {1}"
 msgstr "Тагове: {0} / Членства: {1}"
 
-msgid "Tags / Memberships"
-msgstr "Тагове/Членства"
-
 msgid "Delete the selected key in all objects"
 msgstr "Изтриване на избрания ключ за всички обекти"
 
@@ -11866,6 +11896,15 @@ msgstr ""
 msgid "Please enter the OSM API URL."
 msgstr ""
 
+msgid "Use Overpass server for object downloads"
+msgstr ""
+
+msgid "Overpass server: "
+msgstr ""
+
+msgid "Overpass server"
+msgstr ""
+
 msgid "Proxy settings"
 msgstr ""
 
@@ -14027,6 +14066,9 @@ msgstr "URL не съдържа валиден {0}"
 msgid "reserved"
 msgstr ""
 
+msgid "Unable to delete old preferences file {0}"
+msgstr ""
+
 msgid "Outdated Java version"
 msgstr ""
 
@@ -14118,6 +14160,9 @@ msgid ""
 "contain any JOSM object or suitable text. </p></html>"
 msgstr ""
 
+msgid "Unable to delete file {0}"
+msgstr ""
+
 msgid "ms"
 msgstr "мс"
 
@@ -17253,6 +17298,9 @@ msgstr "Обществен транспорт"
 msgid "Tourist buses"
 msgstr ""
 
+msgid "Max. speed Heavy Goods Vehicles (km/h)"
+msgstr ""
+
 msgid "Min. speed (km/h)"
 msgstr "Мин. скорост (км/ч)"
 
@@ -19550,12 +19598,6 @@ msgstr "Лекарски кабинет"
 msgid "Dentist"
 msgstr "Стоматолог"
 
-msgid "Nursing Home"
-msgstr ""
-
-msgid "Retirement Home"
-msgstr "Дом за стари хора"
-
 msgid "Pharmacy"
 msgstr "Аптека"
 
@@ -19583,6 +19625,31 @@ msgstr "(Използвайте международен код, като нап
 msgid "Veterinary"
 msgstr "Ветеринар"
 
+msgid "Social Facility"
+msgstr ""
+
+msgid "Nursing Home"
+msgstr ""
+
+msgid "Group Home"
+msgstr ""
+
+msgid "For"
+msgstr ""
+
+msgid "Assisted Living"
+msgstr ""
+
+msgid "Outreach"
+msgstr ""
+
+msgctxt "social_facility"
+msgid "Shelter"
+msgstr ""
+
+msgid "Food Bank"
+msgstr ""
+
 msgid "Toilets/Restrooms"
 msgstr "Тоалетни"
 
@@ -19625,6 +19692,13 @@ msgstr ""
 msgid "urinal"
 msgstr ""
 
+msgctxt "toilets"
+msgid "Diaper"
+msgstr ""
+
+msgid "room"
+msgstr ""
+
 msgid "Post Box"
 msgstr "Пощенска кутия"
 
@@ -23666,26 +23740,26 @@ msgstr ""
 msgid "Download GPX track from openstreetmap.org"
 msgstr ""
 
+msgid "Download Track"
+msgstr ""
+
+msgid "Filename"
+msgstr "Име на файл"
+
 msgid ""
 "Error occurred while parsing gpx file {0}. Only a part of the file will be "
 "available."
 msgstr ""
 
-msgid "Invalid URL {0}"
-msgstr ""
-
 msgid "Error fetching URL {0}"
 msgstr ""
 
 msgid "Error parsing data from URL {0}"
 msgstr ""
 
-msgid "Download Track"
+msgid "Invalid URL {0}"
 msgstr ""
 
-msgid "Filename"
-msgstr "Име на файл"
-
 msgid "Private (only shared as anonymous, unordered points)"
 msgstr ""
 
@@ -23733,9 +23807,6 @@ msgstr "Няма избран GPX слой. Не може да се качи с
 msgid "Uploading trace ..."
 msgstr ""
 
-msgid "Connecting..."
-msgstr "Свързване..."
-
 msgid "Upload canceled"
 msgstr "Качването прекъснато"
 
@@ -28222,6 +28293,69 @@ msgstr ""
 msgid "Please load some photos."
 msgstr ""
 
+msgid "Edit photo GPS data"
+msgstr ""
+
+msgid "Edit GPS data of selected photo."
+msgstr ""
+
+msgid "Edit Photo GPS Data"
+msgstr ""
+
+msgid "Please select an image first."
+msgstr ""
+
+msgid "No image selected"
+msgstr ""
+
+msgid "(Empty values delete the according fields.)"
+msgstr ""
+
+msgid "coordinates"
+msgstr "координати"
+
+msgid "Latitude and longitude"
+msgstr ""
+
+msgid "Edit Image Coordinates"
+msgstr ""
+
+msgid "Edit coordinates in separate editor"
+msgstr ""
+
+msgid "altitude"
+msgstr ""
+
+msgid "Altitude:"
+msgstr ""
+
+msgid "speed"
+msgstr ""
+
+msgid "positive number or empty"
+msgstr ""
+
+msgid "Speed:"
+msgstr ""
+
+msgid "direction"
+msgstr ""
+
+msgid "range -360.0 .. 360.0, or empty"
+msgstr ""
+
+msgid "Direction:"
+msgstr ""
+
+msgid "°"
+msgstr ""
+
+msgid "Undo changes made in this dialog"
+msgstr ""
+
+msgid "Reload GPS data from image file"
+msgstr ""
+
 msgid "New layer for untagged images"
 msgstr ""
 
@@ -31243,9 +31377,6 @@ msgstr "{0}.Wikipedia.org: {1}"
 msgid "Fetches all coordinates from Wikipedia in the current view"
 msgstr ""
 
-msgid "coordinates"
-msgstr "координати"
-
 msgid "Category"
 msgstr "Категория"
 
@@ -31289,3 +31420,6 @@ msgstr ""
 
 msgid "Drive a race car on this layer"
 msgstr ""
+
+#~ msgid "Retirement Home"
+#~ msgstr "Дом за стари хора"
diff --git a/i18n/po/bn.po b/i18n/po/bn.po
index 8bbc81a..e0f4404 100644
--- a/i18n/po/bn.po
+++ b/i18n/po/bn.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: josm\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-12-31 03:40+0100\n"
+"POT-Creation-Date: 2016-01-06 03:38+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: 2015-12-31 04:36+0000\n"
-"X-Generator: Launchpad (build 17865)\n"
+"X-Launchpad-Export-Date: 2016-01-06 04:35+0000\n"
+"X-Generator: Launchpad (build 17876)\n"
 "Language: bn\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -1059,9 +1059,6 @@ msgstr ""
 msgid "Overpass query: "
 msgstr ""
 
-msgid "Overpass server: "
-msgstr ""
-
 msgid "Paste"
 msgstr ""
 
@@ -1351,6 +1348,9 @@ msgstr ""
 msgid "Split a way at the selected node."
 msgstr ""
 
+msgid "Cannot split since another split operation is already in progress"
+msgstr ""
+
 msgid ""
 "The current selection cannot be used for splitting - no node is selected."
 msgstr ""
@@ -1462,6 +1462,27 @@ msgid ""
 "own copy and all nodes will be selected."
 msgstr ""
 
+msgid "Existing node"
+msgstr ""
+
+msgid "Both nodes"
+msgstr ""
+
+msgid "New node"
+msgstr ""
+
+msgid "Tags / Memberships"
+msgstr ""
+
+msgid "Unglue"
+msgstr ""
+
+msgid "Where should the tags of the node be put?"
+msgstr ""
+
+msgid "Where should the memberships of this node be put?"
+msgstr ""
+
 msgid "Unglued Node"
 msgstr ""
 
@@ -3052,6 +3073,15 @@ msgstr ""
 msgid "Restoring files"
 msgstr ""
 
+msgid "Unable to delete backup file {0}"
+msgstr ""
+
+msgid "Unable to delete PID file {0}"
+msgstr ""
+
+msgid "Unable to delete archived backup file {0}"
+msgstr ""
+
 msgid "Illegal latitude value ''{0}''"
 msgstr ""
 
@@ -4210,6 +4240,9 @@ msgstr ""
 msgid "No \"to\" way found"
 msgstr ""
 
+msgid "\"from\" way equals \"to\" way"
+msgstr ""
+
 msgid "No \"via\" node or way found"
 msgstr ""
 
@@ -7007,9 +7040,6 @@ msgstr ""
 msgid "Tags: {0} / Memberships: {1}"
 msgstr ""
 
-msgid "Tags / Memberships"
-msgstr ""
-
 msgid "Delete the selected key in all objects"
 msgstr ""
 
@@ -11614,6 +11644,15 @@ msgstr ""
 msgid "Please enter the OSM API URL."
 msgstr ""
 
+msgid "Use Overpass server for object downloads"
+msgstr ""
+
+msgid "Overpass server: "
+msgstr ""
+
+msgid "Overpass server"
+msgstr ""
+
 msgid "Proxy settings"
 msgstr ""
 
@@ -13752,6 +13791,9 @@ msgstr ""
 msgid "reserved"
 msgstr ""
 
+msgid "Unable to delete old preferences file {0}"
+msgstr ""
+
 msgid "Outdated Java version"
 msgstr ""
 
@@ -13843,6 +13885,9 @@ msgid ""
 "contain any JOSM object or suitable text. </p></html>"
 msgstr ""
 
+msgid "Unable to delete file {0}"
+msgstr ""
+
 msgid "ms"
 msgstr ""
 
@@ -16957,6 +17002,9 @@ msgstr ""
 msgid "Tourist buses"
 msgstr ""
 
+msgid "Max. speed Heavy Goods Vehicles (km/h)"
+msgstr ""
+
 msgid "Min. speed (km/h)"
 msgstr ""
 
@@ -19254,12 +19302,6 @@ msgstr ""
 msgid "Dentist"
 msgstr ""
 
-msgid "Nursing Home"
-msgstr ""
-
-msgid "Retirement Home"
-msgstr ""
-
 msgid "Pharmacy"
 msgstr ""
 
@@ -19287,6 +19329,31 @@ msgstr ""
 msgid "Veterinary"
 msgstr ""
 
+msgid "Social Facility"
+msgstr ""
+
+msgid "Nursing Home"
+msgstr ""
+
+msgid "Group Home"
+msgstr ""
+
+msgid "For"
+msgstr ""
+
+msgid "Assisted Living"
+msgstr ""
+
+msgid "Outreach"
+msgstr ""
+
+msgctxt "social_facility"
+msgid "Shelter"
+msgstr ""
+
+msgid "Food Bank"
+msgstr ""
+
 msgid "Toilets/Restrooms"
 msgstr ""
 
@@ -19329,6 +19396,13 @@ msgstr ""
 msgid "urinal"
 msgstr ""
 
+msgctxt "toilets"
+msgid "Diaper"
+msgstr ""
+
+msgid "room"
+msgstr ""
+
 msgid "Post Box"
 msgstr ""
 
@@ -23366,24 +23440,24 @@ msgstr ""
 msgid "Download GPX track from openstreetmap.org"
 msgstr ""
 
+msgid "Download Track"
+msgstr ""
+
+msgid "Filename"
+msgstr ""
+
 msgid ""
 "Error occurred while parsing gpx file {0}. Only a part of the file will be "
 "available."
 msgstr ""
 
-msgid "Invalid URL {0}"
-msgstr ""
-
 msgid "Error fetching URL {0}"
 msgstr ""
 
 msgid "Error parsing data from URL {0}"
 msgstr ""
 
-msgid "Download Track"
-msgstr ""
-
-msgid "Filename"
+msgid "Invalid URL {0}"
 msgstr ""
 
 msgid "Private (only shared as anonymous, unordered points)"
@@ -23433,9 +23507,6 @@ msgstr ""
 msgid "Uploading trace ..."
 msgstr ""
 
-msgid "Connecting..."
-msgstr ""
-
 msgid "Upload canceled"
 msgstr ""
 
@@ -27874,6 +27945,69 @@ msgstr ""
 msgid "Please load some photos."
 msgstr ""
 
+msgid "Edit photo GPS data"
+msgstr ""
+
+msgid "Edit GPS data of selected photo."
+msgstr ""
+
+msgid "Edit Photo GPS Data"
+msgstr ""
+
+msgid "Please select an image first."
+msgstr ""
+
+msgid "No image selected"
+msgstr ""
+
+msgid "(Empty values delete the according fields.)"
+msgstr ""
+
+msgid "coordinates"
+msgstr ""
+
+msgid "Latitude and longitude"
+msgstr ""
+
+msgid "Edit Image Coordinates"
+msgstr ""
+
+msgid "Edit coordinates in separate editor"
+msgstr ""
+
+msgid "altitude"
+msgstr ""
+
+msgid "Altitude:"
+msgstr ""
+
+msgid "speed"
+msgstr ""
+
+msgid "positive number or empty"
+msgstr ""
+
+msgid "Speed:"
+msgstr ""
+
+msgid "direction"
+msgstr ""
+
+msgid "range -360.0 .. 360.0, or empty"
+msgstr ""
+
+msgid "Direction:"
+msgstr ""
+
+msgid "°"
+msgstr ""
+
+msgid "Undo changes made in this dialog"
+msgstr ""
+
+msgid "Reload GPS data from image file"
+msgstr ""
+
 msgid "New layer for untagged images"
 msgstr ""
 
@@ -30890,9 +31024,6 @@ msgstr ""
 msgid "Fetches all coordinates from Wikipedia in the current view"
 msgstr ""
 
-msgid "coordinates"
-msgstr ""
-
 msgid "Category"
 msgstr ""
 
diff --git a/i18n/po/br.po b/i18n/po/br.po
index dee8c17..211e060 100644
--- a/i18n/po/br.po
+++ b/i18n/po/br.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: josm\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-12-31 03:40+0100\n"
+"POT-Creation-Date: 2016-01-06 03:38+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: 2015-12-31 04:37+0000\n"
-"X-Generator: Launchpad (build 17865)\n"
+"X-Launchpad-Export-Date: 2016-01-06 04:36+0000\n"
+"X-Generator: Launchpad (build 17876)\n"
 "Language: br\n"
 
 msgid "License"
@@ -1056,9 +1056,6 @@ msgstr ""
 msgid "Overpass query: "
 msgstr ""
 
-msgid "Overpass server: "
-msgstr ""
-
 msgid "Paste"
 msgstr ""
 
@@ -1348,6 +1345,9 @@ msgstr ""
 msgid "Split a way at the selected node."
 msgstr ""
 
+msgid "Cannot split since another split operation is already in progress"
+msgstr ""
+
 msgid ""
 "The current selection cannot be used for splitting - no node is selected."
 msgstr ""
@@ -1459,6 +1459,27 @@ msgid ""
 "own copy and all nodes will be selected."
 msgstr ""
 
+msgid "Existing node"
+msgstr ""
+
+msgid "Both nodes"
+msgstr ""
+
+msgid "New node"
+msgstr ""
+
+msgid "Tags / Memberships"
+msgstr ""
+
+msgid "Unglue"
+msgstr ""
+
+msgid "Where should the tags of the node be put?"
+msgstr ""
+
+msgid "Where should the memberships of this node be put?"
+msgstr ""
+
 msgid "Unglued Node"
 msgstr ""
 
@@ -3049,6 +3070,15 @@ msgstr ""
 msgid "Restoring files"
 msgstr ""
 
+msgid "Unable to delete backup file {0}"
+msgstr ""
+
+msgid "Unable to delete PID file {0}"
+msgstr ""
+
+msgid "Unable to delete archived backup file {0}"
+msgstr ""
+
 msgid "Illegal latitude value ''{0}''"
 msgstr ""
 
@@ -4207,6 +4237,9 @@ msgstr ""
 msgid "No \"to\" way found"
 msgstr ""
 
+msgid "\"from\" way equals \"to\" way"
+msgstr ""
+
 msgid "No \"via\" node or way found"
 msgstr ""
 
@@ -7004,9 +7037,6 @@ msgstr ""
 msgid "Tags: {0} / Memberships: {1}"
 msgstr ""
 
-msgid "Tags / Memberships"
-msgstr ""
-
 msgid "Delete the selected key in all objects"
 msgstr ""
 
@@ -11611,6 +11641,15 @@ msgstr ""
 msgid "Please enter the OSM API URL."
 msgstr ""
 
+msgid "Use Overpass server for object downloads"
+msgstr ""
+
+msgid "Overpass server: "
+msgstr ""
+
+msgid "Overpass server"
+msgstr ""
+
 msgid "Proxy settings"
 msgstr ""
 
@@ -13749,6 +13788,9 @@ msgstr ""
 msgid "reserved"
 msgstr ""
 
+msgid "Unable to delete old preferences file {0}"
+msgstr ""
+
 msgid "Outdated Java version"
 msgstr ""
 
@@ -13840,6 +13882,9 @@ msgid ""
 "contain any JOSM object or suitable text. </p></html>"
 msgstr ""
 
+msgid "Unable to delete file {0}"
+msgstr ""
+
 msgid "ms"
 msgstr ""
 
@@ -16954,6 +16999,9 @@ msgstr ""
 msgid "Tourist buses"
 msgstr ""
 
+msgid "Max. speed Heavy Goods Vehicles (km/h)"
+msgstr ""
+
 msgid "Min. speed (km/h)"
 msgstr ""
 
@@ -19251,12 +19299,6 @@ msgstr ""
 msgid "Dentist"
 msgstr ""
 
-msgid "Nursing Home"
-msgstr ""
-
-msgid "Retirement Home"
-msgstr ""
-
 msgid "Pharmacy"
 msgstr ""
 
@@ -19284,6 +19326,31 @@ msgstr ""
 msgid "Veterinary"
 msgstr ""
 
+msgid "Social Facility"
+msgstr ""
+
+msgid "Nursing Home"
+msgstr ""
+
+msgid "Group Home"
+msgstr ""
+
+msgid "For"
+msgstr ""
+
+msgid "Assisted Living"
+msgstr ""
+
+msgid "Outreach"
+msgstr ""
+
+msgctxt "social_facility"
+msgid "Shelter"
+msgstr ""
+
+msgid "Food Bank"
+msgstr ""
+
 msgid "Toilets/Restrooms"
 msgstr ""
 
@@ -19326,6 +19393,13 @@ msgstr ""
 msgid "urinal"
 msgstr ""
 
+msgctxt "toilets"
+msgid "Diaper"
+msgstr ""
+
+msgid "room"
+msgstr ""
+
 msgid "Post Box"
 msgstr ""
 
@@ -23363,24 +23437,24 @@ msgstr ""
 msgid "Download GPX track from openstreetmap.org"
 msgstr ""
 
+msgid "Download Track"
+msgstr ""
+
+msgid "Filename"
+msgstr ""
+
 msgid ""
 "Error occurred while parsing gpx file {0}. Only a part of the file will be "
 "available."
 msgstr ""
 
-msgid "Invalid URL {0}"
-msgstr ""
-
 msgid "Error fetching URL {0}"
 msgstr ""
 
 msgid "Error parsing data from URL {0}"
 msgstr ""
 
-msgid "Download Track"
-msgstr ""
-
-msgid "Filename"
+msgid "Invalid URL {0}"
 msgstr ""
 
 msgid "Private (only shared as anonymous, unordered points)"
@@ -23430,9 +23504,6 @@ msgstr ""
 msgid "Uploading trace ..."
 msgstr ""
 
-msgid "Connecting..."
-msgstr ""
-
 msgid "Upload canceled"
 msgstr ""
 
@@ -27871,6 +27942,69 @@ msgstr ""
 msgid "Please load some photos."
 msgstr ""
 
+msgid "Edit photo GPS data"
+msgstr ""
+
+msgid "Edit GPS data of selected photo."
+msgstr ""
+
+msgid "Edit Photo GPS Data"
+msgstr ""
+
+msgid "Please select an image first."
+msgstr ""
+
+msgid "No image selected"
+msgstr ""
+
+msgid "(Empty values delete the according fields.)"
+msgstr ""
+
+msgid "coordinates"
+msgstr ""
+
+msgid "Latitude and longitude"
+msgstr ""
+
+msgid "Edit Image Coordinates"
+msgstr ""
+
+msgid "Edit coordinates in separate editor"
+msgstr ""
+
+msgid "altitude"
+msgstr ""
+
+msgid "Altitude:"
+msgstr ""
+
+msgid "speed"
+msgstr ""
+
+msgid "positive number or empty"
+msgstr ""
+
+msgid "Speed:"
+msgstr ""
+
+msgid "direction"
+msgstr ""
+
+msgid "range -360.0 .. 360.0, or empty"
+msgstr ""
+
+msgid "Direction:"
+msgstr ""
+
+msgid "°"
+msgstr ""
+
+msgid "Undo changes made in this dialog"
+msgstr ""
+
+msgid "Reload GPS data from image file"
+msgstr ""
+
 msgid "New layer for untagged images"
 msgstr ""
 
@@ -30887,9 +31021,6 @@ msgstr ""
 msgid "Fetches all coordinates from Wikipedia in the current view"
 msgstr ""
 
-msgid "coordinates"
-msgstr ""
-
 msgid "Category"
 msgstr ""
 
diff --git a/i18n/po/bs.po b/i18n/po/bs.po
index cec33c6..1bc02e2 100644
--- a/i18n/po/bs.po
+++ b/i18n/po/bs.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: josm\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-12-31 03:40+0100\n"
+"POT-Creation-Date: 2016-01-06 03:38+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: 2015-12-31 04:37+0000\n"
-"X-Generator: Launchpad (build 17865)\n"
+"X-Launchpad-Export-Date: 2016-01-06 04:35+0000\n"
+"X-Generator: Launchpad (build 17876)\n"
 "Language: bs\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -1059,9 +1059,6 @@ msgstr ""
 msgid "Overpass query: "
 msgstr ""
 
-msgid "Overpass server: "
-msgstr ""
-
 msgid "Paste"
 msgstr ""
 
@@ -1351,6 +1348,9 @@ msgstr ""
 msgid "Split a way at the selected node."
 msgstr ""
 
+msgid "Cannot split since another split operation is already in progress"
+msgstr ""
+
 msgid ""
 "The current selection cannot be used for splitting - no node is selected."
 msgstr ""
@@ -1462,6 +1462,27 @@ msgid ""
 "own copy and all nodes will be selected."
 msgstr ""
 
+msgid "Existing node"
+msgstr ""
+
+msgid "Both nodes"
+msgstr ""
+
+msgid "New node"
+msgstr ""
+
+msgid "Tags / Memberships"
+msgstr ""
+
+msgid "Unglue"
+msgstr ""
+
+msgid "Where should the tags of the node be put?"
+msgstr ""
+
+msgid "Where should the memberships of this node be put?"
+msgstr ""
+
 msgid "Unglued Node"
 msgstr ""
 
@@ -3052,6 +3073,15 @@ msgstr ""
 msgid "Restoring files"
 msgstr ""
 
+msgid "Unable to delete backup file {0}"
+msgstr ""
+
+msgid "Unable to delete PID file {0}"
+msgstr ""
+
+msgid "Unable to delete archived backup file {0}"
+msgstr ""
+
 msgid "Illegal latitude value ''{0}''"
 msgstr ""
 
@@ -4210,6 +4240,9 @@ msgstr ""
 msgid "No \"to\" way found"
 msgstr ""
 
+msgid "\"from\" way equals \"to\" way"
+msgstr ""
+
 msgid "No \"via\" node or way found"
 msgstr ""
 
@@ -7007,9 +7040,6 @@ msgstr ""
 msgid "Tags: {0} / Memberships: {1}"
 msgstr ""
 
-msgid "Tags / Memberships"
-msgstr ""
-
 msgid "Delete the selected key in all objects"
 msgstr ""
 
@@ -11614,6 +11644,15 @@ msgstr ""
 msgid "Please enter the OSM API URL."
 msgstr ""
 
+msgid "Use Overpass server for object downloads"
+msgstr ""
+
+msgid "Overpass server: "
+msgstr ""
+
+msgid "Overpass server"
+msgstr ""
+
 msgid "Proxy settings"
 msgstr ""
 
@@ -13752,6 +13791,9 @@ msgstr ""
 msgid "reserved"
 msgstr ""
 
+msgid "Unable to delete old preferences file {0}"
+msgstr ""
+
 msgid "Outdated Java version"
 msgstr ""
 
@@ -13843,6 +13885,9 @@ msgid ""
 "contain any JOSM object or suitable text. </p></html>"
 msgstr ""
 
+msgid "Unable to delete file {0}"
+msgstr ""
+
 msgid "ms"
 msgstr ""
 
@@ -16957,6 +17002,9 @@ msgstr ""
 msgid "Tourist buses"
 msgstr ""
 
+msgid "Max. speed Heavy Goods Vehicles (km/h)"
+msgstr ""
+
 msgid "Min. speed (km/h)"
 msgstr ""
 
@@ -19254,12 +19302,6 @@ msgstr ""
 msgid "Dentist"
 msgstr ""
 
-msgid "Nursing Home"
-msgstr ""
-
-msgid "Retirement Home"
-msgstr ""
-
 msgid "Pharmacy"
 msgstr ""
 
@@ -19287,6 +19329,31 @@ msgstr ""
 msgid "Veterinary"
 msgstr ""
 
+msgid "Social Facility"
+msgstr ""
+
+msgid "Nursing Home"
+msgstr ""
+
+msgid "Group Home"
+msgstr ""
+
+msgid "For"
+msgstr ""
+
+msgid "Assisted Living"
+msgstr ""
+
+msgid "Outreach"
+msgstr ""
+
+msgctxt "social_facility"
+msgid "Shelter"
+msgstr ""
+
+msgid "Food Bank"
+msgstr ""
+
 msgid "Toilets/Restrooms"
 msgstr ""
 
@@ -19329,6 +19396,13 @@ msgstr ""
 msgid "urinal"
 msgstr ""
 
+msgctxt "toilets"
+msgid "Diaper"
+msgstr ""
+
+msgid "room"
+msgstr ""
+
 msgid "Post Box"
 msgstr ""
 
@@ -23366,24 +23440,24 @@ msgstr ""
 msgid "Download GPX track from openstreetmap.org"
 msgstr ""
 
+msgid "Download Track"
+msgstr ""
+
+msgid "Filename"
+msgstr ""
+
 msgid ""
 "Error occurred while parsing gpx file {0}. Only a part of the file will be "
 "available."
 msgstr ""
 
-msgid "Invalid URL {0}"
-msgstr ""
-
 msgid "Error fetching URL {0}"
 msgstr ""
 
 msgid "Error parsing data from URL {0}"
 msgstr ""
 
-msgid "Download Track"
-msgstr ""
-
-msgid "Filename"
+msgid "Invalid URL {0}"
 msgstr ""
 
 msgid "Private (only shared as anonymous, unordered points)"
@@ -23433,9 +23507,6 @@ msgstr ""
 msgid "Uploading trace ..."
 msgstr ""
 
-msgid "Connecting..."
-msgstr ""
-
 msgid "Upload canceled"
 msgstr ""
 
@@ -27874,6 +27945,69 @@ msgstr ""
 msgid "Please load some photos."
 msgstr ""
 
+msgid "Edit photo GPS data"
+msgstr ""
+
+msgid "Edit GPS data of selected photo."
+msgstr ""
+
+msgid "Edit Photo GPS Data"
+msgstr ""
+
+msgid "Please select an image first."
+msgstr ""
+
+msgid "No image selected"
+msgstr ""
+
+msgid "(Empty values delete the according fields.)"
+msgstr ""
+
+msgid "coordinates"
+msgstr ""
+
+msgid "Latitude and longitude"
+msgstr ""
+
+msgid "Edit Image Coordinates"
+msgstr ""
+
+msgid "Edit coordinates in separate editor"
+msgstr ""
+
+msgid "altitude"
+msgstr ""
+
+msgid "Altitude:"
+msgstr ""
+
+msgid "speed"
+msgstr ""
+
+msgid "positive number or empty"
+msgstr ""
+
+msgid "Speed:"
+msgstr ""
+
+msgid "direction"
+msgstr ""
+
+msgid "range -360.0 .. 360.0, or empty"
+msgstr ""
+
+msgid "Direction:"
+msgstr ""
+
+msgid "°"
+msgstr ""
+
+msgid "Undo changes made in this dialog"
+msgstr ""
+
+msgid "Reload GPS data from image file"
+msgstr ""
+
 msgid "New layer for untagged images"
 msgstr ""
 
@@ -30890,9 +31024,6 @@ msgstr ""
 msgid "Fetches all coordinates from Wikipedia in the current view"
 msgstr ""
 
-msgid "coordinates"
-msgstr ""
-
 msgid "Category"
 msgstr ""
 
diff --git a/i18n/po/ca.po b/i18n/po/ca.po
index 576946c..eef4720 100644
--- a/i18n/po/ca.po
+++ b/i18n/po/ca.po
@@ -7,16 +7,16 @@ msgid ""
 msgstr ""
 "Project-Id-Version: josm\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-12-31 03:40+0100\n"
-"PO-Revision-Date: 2015-12-22 13:45+0000\n"
+"POT-Creation-Date: 2016-01-06 03:38+0100\n"
+"PO-Revision-Date: 2016-01-04 09:01+0000\n"
 "Last-Translator: pitort <pitort at eclipso.eu>\n"
 "Language-Team: el_libre - - www.catmidia.cat\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Launchpad-Export-Date: 2015-12-31 04:38+0000\n"
-"X-Generator: Launchpad (build 17865)\n"
+"X-Launchpad-Export-Date: 2016-01-06 04:37+0000\n"
+"X-Generator: Launchpad (build 17876)\n"
 "Language: ca\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -1151,9 +1151,6 @@ msgstr "Error d''anàlisi"
 msgid "Overpass query: "
 msgstr "Consulta d''Overpass: "
 
-msgid "Overpass server: "
-msgstr "Servidor Overpass: "
-
 msgid "Paste"
 msgstr "Enganxa"
 
@@ -1463,6 +1460,10 @@ msgstr "Divideix la via"
 msgid "Split a way at the selected node."
 msgstr "Divideix una via en dos segments pel node seleccionat"
 
+msgid "Cannot split since another split operation is already in progress"
+msgstr ""
+"La divisió no és possible perquè ho ha un altre procés de divisió en curs"
+
 msgid ""
 "The current selection cannot be used for splitting - no node is selected."
 msgstr ""
@@ -1594,6 +1595,27 @@ msgstr ""
 "obtindran la seva\n"
 "còpia i tots els nodes seran seleccionats."
 
+msgid "Existing node"
+msgstr ""
+
+msgid "Both nodes"
+msgstr ""
+
+msgid "New node"
+msgstr ""
+
+msgid "Tags / Memberships"
+msgstr "Etiquetes / Pertinença"
+
+msgid "Unglue"
+msgstr ""
+
+msgid "Where should the tags of the node be put?"
+msgstr ""
+
+msgid "Where should the memberships of this node be put?"
+msgstr ""
+
 msgid "Unglued Node"
 msgstr "Node separat"
 
@@ -3341,6 +3363,15 @@ msgstr "S''ha fet una còpia de seguretat automàtica de la vostra feina."
 msgid "Restoring files"
 msgstr "S''estan restaurant els fitxers"
 
+msgid "Unable to delete backup file {0}"
+msgstr ""
+
+msgid "Unable to delete PID file {0}"
+msgstr ""
+
+msgid "Unable to delete archived backup file {0}"
+msgstr ""
+
 msgid "Illegal latitude value ''{0}''"
 msgstr "El valor de latitud ''{0}'' és erroni"
 
@@ -4629,6 +4660,9 @@ msgstr "No s''ha trobat cap via \"from\""
 msgid "No \"to\" way found"
 msgstr "No s''ha trobat cap via \"to\""
 
+msgid "\"from\" way equals \"to\" way"
+msgstr "la via \"from\" és la mateixa que la via \"to\""
+
 msgid "No \"via\" node or way found"
 msgstr "No s''ha trobat cap node \"via\""
 
@@ -7693,9 +7727,6 @@ msgstr "Objectes: {2} / Etiquetes: {0} / Membres: {1}"
 msgid "Tags: {0} / Memberships: {1}"
 msgstr "Etiquetes: {0} / Pertinença: {1}"
 
-msgid "Tags / Memberships"
-msgstr "Etiquetes / Pertinença"
-
 msgid "Delete the selected key in all objects"
 msgstr "Suprimir la clau seleccionada a tots els objectes"
 
@@ -12917,6 +12948,15 @@ msgstr "El valor actual no és una URL vàlida."
 msgid "Please enter the OSM API URL."
 msgstr "Indiqueu l''URL de l''API"
 
+msgid "Use Overpass server for object downloads"
+msgstr "Utiliza el servidor overpass per descarregar objectes"
+
+msgid "Overpass server: "
+msgstr "Servidor Overpass: "
+
+msgid "Overpass server"
+msgstr "Servidor d''Overpass"
+
 msgid "Proxy settings"
 msgstr "Configuració del servidor intermediari"
 
@@ -14889,7 +14929,7 @@ msgid "Downloading plugin list from ''{0}''"
 msgstr "S''està baixant la llista de connectors de ''{0}''"
 
 msgid "Unsuccessful HTTP request"
-msgstr ""
+msgstr "La petició HTTP ho ha anat bé"
 
 msgid "Plugin list download error"
 msgstr "Error a la baixada de la llista de connectors"
@@ -15439,6 +15479,9 @@ msgstr "l''URL no conté un {0} vàlid"
 msgid "reserved"
 msgstr "reservat"
 
+msgid "Unable to delete old preferences file {0}"
+msgstr ""
+
 msgid "Outdated Java version"
 msgstr "Versió obsoleta de Java"
 
@@ -15549,6 +15592,9 @@ msgstr ""
 "<html><p> Ho sentim, No és possible d''enganxar etiquetes de la memòria "
 "intermèdia perquè no conté cap objecte JOSM ni cap text apropiat. </p></html>"
 
+msgid "Unable to delete file {0}"
+msgstr ""
+
 msgid "ms"
 msgstr "ms"
 
@@ -18464,7 +18510,7 @@ msgid "Is the water body intermittent (disappears seasonally)?"
 msgstr "El cos d''aigua és intermintent? (desapareix estacionalment?)"
 
 msgid "In the tidal range"
-msgstr "al rang d''innundat"
+msgstr "És dins la zona de marea alta"
 
 msgid "culvert"
 msgstr "canonada"
@@ -18591,7 +18637,7 @@ msgid "Primary"
 msgstr "Principal"
 
 msgid "Overhead trolley wires"
-msgstr ""
+msgstr "Catenària"
 
 msgid "Primary Link"
 msgstr "Enllaç de via Principal"
@@ -18837,6 +18883,9 @@ msgstr "Vehicles de servei públic (SP)"
 msgid "Tourist buses"
 msgstr "Autobús turístic"
 
+msgid "Max. speed Heavy Goods Vehicles (km/h)"
+msgstr ""
+
 msgid "Min. speed (km/h)"
 msgstr "Velocitat Min (km/h)"
 
@@ -19581,7 +19630,7 @@ msgstr ""
 "línia dibuixada-)."
 
 msgid "Riverbank"
-msgstr "Riba del riu"
+msgstr "Banc fluvial"
 
 msgid "Wetland"
 msgstr "Aiguamolls"
@@ -20632,7 +20681,7 @@ msgid "sandwich"
 msgstr "sandwich"
 
 msgid "coffee_shop"
-msgstr ""
+msgstr "botiga de cafè"
 
 msgid "sushi"
 msgstr "sushi"
@@ -21164,12 +21213,6 @@ msgstr "Consultori mèdic"
 msgid "Dentist"
 msgstr "Dentista"
 
-msgid "Nursing Home"
-msgstr "Casal de Gent Gran"
-
-msgid "Retirement Home"
-msgstr "Residència Gent Gran"
-
 msgid "Pharmacy"
 msgstr "Farmàcia"
 
@@ -21197,6 +21240,31 @@ msgstr "(Utilitza el codi internacional, com +12-345-67890)"
 msgid "Veterinary"
 msgstr "Veterinari"
 
+msgid "Social Facility"
+msgstr ""
+
+msgid "Nursing Home"
+msgstr "Casal de Gent Gran"
+
+msgid "Group Home"
+msgstr ""
+
+msgid "For"
+msgstr ""
+
+msgid "Assisted Living"
+msgstr ""
+
+msgid "Outreach"
+msgstr ""
+
+msgctxt "social_facility"
+msgid "Shelter"
+msgstr ""
+
+msgid "Food Bank"
+msgstr ""
+
 msgid "Toilets/Restrooms"
 msgstr "Lavabos"
 
@@ -21239,6 +21307,13 @@ msgstr "a la gatzoneta"
 msgid "urinal"
 msgstr "orinal"
 
+msgctxt "toilets"
+msgid "Diaper"
+msgstr ""
+
+msgid "room"
+msgstr ""
+
 msgid "Post Box"
 msgstr "Bústia"
 
@@ -21930,11 +22005,11 @@ msgstr "hospital"
 
 msgctxt "building"
 msgid "kindergarten"
-msgstr ""
+msgstr "educació infantil"
 
 msgctxt "building"
 msgid "manufacture"
-msgstr ""
+msgstr "manufactura"
 
 msgctxt "building"
 msgid "warehouse"
@@ -22046,7 +22121,7 @@ msgstr "emergència"
 
 msgctxt "entrance"
 msgid "staircase"
-msgstr ""
+msgstr "escales"
 
 msgid "Entrance number"
 msgstr "Nombre d''entrada"
@@ -24811,10 +24886,10 @@ msgid "Reference GNBC (CA)"
 msgstr "Referència GNBC (CA)"
 
 msgid "waterways (no riverbank)"
-msgstr "cursos d''aigua (sense riba)"
+msgstr "cursos d''aigua (sense bancs fluvials)"
 
 msgid "branch waterways (no riverbank)"
-msgstr "afluents (sense riba)"
+msgstr "afluents (sense bancs fluvials)"
 
 msgid "spring of waterway"
 msgstr "font d''aigua"
@@ -25332,6 +25407,12 @@ msgstr "Baixa el recorregut ..."
 msgid "Download GPX track from openstreetmap.org"
 msgstr "Baixa el recorregut en GPX des de openstreetmap.org"
 
+msgid "Download Track"
+msgstr "Baixa el recorregut"
+
+msgid "Filename"
+msgstr "Nom del fitxer"
+
 msgid ""
 "Error occurred while parsing gpx file {0}. Only a part of the file will be "
 "available."
@@ -25339,20 +25420,14 @@ msgstr ""
 "Error en processar el fitxer gpx {0}. Només una part del fitxer estarà "
 "disponible."
 
-msgid "Invalid URL {0}"
-msgstr "Adreça URL invàlida {0}"
-
 msgid "Error fetching URL {0}"
 msgstr "Error en obtindre l''adreça URL {0}"
 
 msgid "Error parsing data from URL {0}"
 msgstr "Error en analitzar les dades de l''adreça URL {0}"
 
-msgid "Download Track"
-msgstr "Baixa el recorregut"
-
-msgid "Filename"
-msgstr "Nom del fitxer"
+msgid "Invalid URL {0}"
+msgstr "Adreça URL invàlida {0}"
 
 msgid "Private (only shared as anonymous, unordered points)"
 msgstr "Privat (només es comparteix de forma anònima, punts desordenats)"
@@ -25406,9 +25481,6 @@ msgstr "Cap capa GPX seleccionada. No es pot pujar un traçat."
 msgid "Uploading trace ..."
 msgstr "Pujant traçat ..."
 
-msgid "Connecting..."
-msgstr "S''està connectant..."
-
 msgid "Upload canceled"
 msgstr "Pujada cancel·lada"
 
@@ -27358,10 +27430,10 @@ msgid "Generate matches"
 msgstr "Genera conincidències"
 
 msgid "Layer:"
-msgstr ""
+msgstr "Capa:"
 
 msgid "{0}: 0 / {1}: 0 / {2}: 0"
-msgstr ""
+msgstr "{0}: 0 / {1}: 0 / {2}: 0"
 
 msgid "Subject"
 msgstr "Subjecte"
@@ -27394,10 +27466,10 @@ msgid "Empty selection"
 msgstr "Selecció buida"
 
 msgid "Freeze reference selection"
-msgstr ""
+msgstr "Boqueja la selecció de referència"
 
 msgid "{0}: {1} / {2}: {3} / {4}: {5}"
-msgstr ""
+msgstr "{0}: {1} / {2}: {3} / {4}: {5}"
 
 msgid "Invalid reference or subject"
 msgstr "Referència o objecte no vàlid."
@@ -30298,6 +30370,69 @@ msgstr ""
 msgid "Please load some photos."
 msgstr "Si us plau carregeu alguna foto"
 
+msgid "Edit photo GPS data"
+msgstr ""
+
+msgid "Edit GPS data of selected photo."
+msgstr ""
+
+msgid "Edit Photo GPS Data"
+msgstr ""
+
+msgid "Please select an image first."
+msgstr ""
+
+msgid "No image selected"
+msgstr ""
+
+msgid "(Empty values delete the according fields.)"
+msgstr ""
+
+msgid "coordinates"
+msgstr "coordenades"
+
+msgid "Latitude and longitude"
+msgstr ""
+
+msgid "Edit Image Coordinates"
+msgstr ""
+
+msgid "Edit coordinates in separate editor"
+msgstr ""
+
+msgid "altitude"
+msgstr ""
+
+msgid "Altitude:"
+msgstr ""
+
+msgid "speed"
+msgstr ""
+
+msgid "positive number or empty"
+msgstr ""
+
+msgid "Speed:"
+msgstr ""
+
+msgid "direction"
+msgstr ""
+
+msgid "range -360.0 .. 360.0, or empty"
+msgstr ""
+
+msgid "Direction:"
+msgstr ""
+
+msgid "°"
+msgstr ""
+
+msgid "Undo changes made in this dialog"
+msgstr ""
+
+msgid "Reload GPS data from image file"
+msgstr ""
+
 msgid "New layer for untagged images"
 msgstr "Nova capa per imatges no etiquetades"
 
@@ -33538,27 +33673,27 @@ msgid "Search after waypoint. Click and move the map view to the waypoint."
 msgstr "Cercar fita. Feu clic i moveu el mapa sobre la fita."
 
 msgid "Fetch Wikidata IDs"
-msgstr ""
+msgstr "Obté IDs de les dades wiki"
 
 msgid "Fetch Wikidata IDs using the ''wikipedia'' tag"
-msgstr ""
+msgstr "Obté IDs de les dades wiki utilitzant l''etiqueta \"wikipedia\""
 
 msgid "Fetching Wikidata IDs"
-msgstr ""
+msgstr "Obtening IDs de les dades wiki"
 
 msgid "Add Wikidata"
-msgstr ""
+msgstr "Afegeix dades wiki"
 
 msgid "No Wikidata ID found for: {0}"
-msgstr ""
+msgstr "No s''ha trobat cap ID de dades wiki per: {0}"
 
 msgid "Fetching {0} Wikidata ID for language ''{1}''"
 msgid_plural "Fetching {0} Wikidata IDs for language ''{1}''"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Obtenint {0} ID de dades wiki per la llengua ''{1}''"
+msgstr[1] "Obtenint {0} IDs de dades wiki per la llengua ''{1}''"
 
 msgid "Add Wikidata for language ''{0}''"
-msgstr ""
+msgstr "Afegides dades wiki per a la llengua ''{0}''"
 
 msgid "Add names from Wikipedia"
 msgstr "Afegeix noms de la viquipèdia"
@@ -33607,9 +33742,6 @@ msgstr "{0}.Wikipedia.org: {1}"
 msgid "Fetches all coordinates from Wikipedia in the current view"
 msgstr "Mostra les coordenades de la Viquipèdia a la vista actual"
 
-msgid "coordinates"
-msgstr "coordenades"
-
 msgid "Category"
 msgstr "Categoria"
 
@@ -33659,3 +33791,6 @@ msgstr "Anar en cotxe"
 
 msgid "Drive a race car on this layer"
 msgstr "Conduir un cotxe de carreres sobre aquesta capa"
+
+#~ msgid "Retirement Home"
+#~ msgstr "Residència Gent Gran"
diff --git a/i18n/po/ca at valencia.po b/i18n/po/ca at valencia.po
index 67f8f30..aff4cb3 100644
--- a/i18n/po/ca at valencia.po
+++ b/i18n/po/ca at valencia.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: josm\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-12-31 03:40+0100\n"
+"POT-Creation-Date: 2016-01-06 03:38+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: 2015-12-31 05:08+0000\n"
-"X-Generator: Launchpad (build 17865)\n"
+"X-Launchpad-Export-Date: 2016-01-06 05:10+0000\n"
+"X-Generator: Launchpad (build 17876)\n"
 "Language: ca at valencia\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -1136,9 +1136,6 @@ msgstr ""
 msgid "Overpass query: "
 msgstr "Consulta d''Overpass: "
 
-msgid "Overpass server: "
-msgstr ""
-
 msgid "Paste"
 msgstr "Apega"
 
@@ -1448,6 +1445,9 @@ msgstr "Divideix la via"
 msgid "Split a way at the selected node."
 msgstr "Divideix una via en dos segments pel node seleccionat"
 
+msgid "Cannot split since another split operation is already in progress"
+msgstr ""
+
 msgid ""
 "The current selection cannot be used for splitting - no node is selected."
 msgstr ""
@@ -1579,6 +1579,27 @@ msgstr ""
 "obtindran la seua\n"
 "còpia i tots els nodes seran seleccionats."
 
+msgid "Existing node"
+msgstr ""
+
+msgid "Both nodes"
+msgstr ""
+
+msgid "New node"
+msgstr ""
+
+msgid "Tags / Memberships"
+msgstr ""
+
+msgid "Unglue"
+msgstr ""
+
+msgid "Where should the tags of the node be put?"
+msgstr ""
+
+msgid "Where should the memberships of this node be put?"
+msgstr ""
+
 msgid "Unglued Node"
 msgstr "Node separat"
 
@@ -3301,6 +3322,15 @@ msgstr ""
 msgid "Restoring files"
 msgstr "S''estan restaurant els fitxers"
 
+msgid "Unable to delete backup file {0}"
+msgstr ""
+
+msgid "Unable to delete PID file {0}"
+msgstr ""
+
+msgid "Unable to delete archived backup file {0}"
+msgstr ""
+
 msgid "Illegal latitude value ''{0}''"
 msgstr "El valor de latitud ''{0}'' és erroni"
 
@@ -4549,6 +4579,9 @@ msgstr "No s''ha trobat cap via \"from\""
 msgid "No \"to\" way found"
 msgstr "No s''ha trobat cap via \"to\""
 
+msgid "\"from\" way equals \"to\" way"
+msgstr ""
+
 msgid "No \"via\" node or way found"
 msgstr "No s''ha trobat cap node \"via\""
 
@@ -7522,9 +7555,6 @@ msgstr ""
 msgid "Tags: {0} / Memberships: {1}"
 msgstr ""
 
-msgid "Tags / Memberships"
-msgstr ""
-
 msgid "Delete the selected key in all objects"
 msgstr "Suprimir la clau seleccionada a tots els objectes"
 
@@ -12717,6 +12747,15 @@ msgstr "El valor actual no és una URL vàlida."
 msgid "Please enter the OSM API URL."
 msgstr "Per favor, indiqueu la URL de l''API"
 
+msgid "Use Overpass server for object downloads"
+msgstr ""
+
+msgid "Overpass server: "
+msgstr ""
+
+msgid "Overpass server"
+msgstr ""
+
 msgid "Proxy settings"
 msgstr "Configuració del servidor intermediari"
 
@@ -15221,6 +15260,9 @@ msgstr ""
 msgid "reserved"
 msgstr "reservat"
 
+msgid "Unable to delete old preferences file {0}"
+msgstr ""
+
 msgid "Outdated Java version"
 msgstr ""
 
@@ -15316,6 +15358,9 @@ msgstr ""
 "<html><p> Ho sentim, No és possible d''apegar etiquetes de la memòria "
 "intermèdia perquè no conté cap objecte JOSM ni cap text apropiat. </p></html>"
 
+msgid "Unable to delete file {0}"
+msgstr ""
+
 msgid "ms"
 msgstr ""
 
@@ -18549,6 +18594,9 @@ msgstr "Vehicles de servei públic (SP)"
 msgid "Tourist buses"
 msgstr "Autobús turístic"
 
+msgid "Max. speed Heavy Goods Vehicles (km/h)"
+msgstr ""
+
 msgid "Min. speed (km/h)"
 msgstr "Velocitat Min (km/h)"
 
@@ -20863,12 +20911,6 @@ msgstr ""
 msgid "Dentist"
 msgstr "Dentista"
 
-msgid "Nursing Home"
-msgstr "Casal de Gent Gran"
-
-msgid "Retirement Home"
-msgstr "Residència Gent Gran"
-
 msgid "Pharmacy"
 msgstr "Farmàcia"
 
@@ -20896,6 +20938,31 @@ msgstr "(Utilitza el codi internacional, com +12-345-67890)"
 msgid "Veterinary"
 msgstr "Veterinari"
 
+msgid "Social Facility"
+msgstr ""
+
+msgid "Nursing Home"
+msgstr "Casal de Gent Gran"
+
+msgid "Group Home"
+msgstr ""
+
+msgid "For"
+msgstr ""
+
+msgid "Assisted Living"
+msgstr ""
+
+msgid "Outreach"
+msgstr ""
+
+msgctxt "social_facility"
+msgid "Shelter"
+msgstr ""
+
+msgid "Food Bank"
+msgstr ""
+
 msgid "Toilets/Restrooms"
 msgstr ""
 
@@ -20938,6 +21005,13 @@ msgstr "a la gatzoneta"
 msgid "urinal"
 msgstr "orinal"
 
+msgctxt "toilets"
+msgid "Diaper"
+msgstr ""
+
+msgid "room"
+msgstr ""
+
 msgid "Post Box"
 msgstr "Bústia"
 
@@ -24979,6 +25053,12 @@ msgstr "Descarrega Recorregut ..."
 msgid "Download GPX track from openstreetmap.org"
 msgstr "Descarrega recorregut en GPX des d’openstreetmap.org"
 
+msgid "Download Track"
+msgstr "Descarrega Recorregut"
+
+msgid "Filename"
+msgstr "Nom del fitxer"
+
 msgid ""
 "Error occurred while parsing gpx file {0}. Only a part of the file will be "
 "available."
@@ -24986,20 +25066,14 @@ msgstr ""
 "Error en processar el fitxer gpx {0}. Només una part del fitxer estarà "
 "disponible."
 
-msgid "Invalid URL {0}"
-msgstr "Adreça URL invàlida {0}"
-
 msgid "Error fetching URL {0}"
 msgstr "Error en obtindre l''adreça URL {0}"
 
 msgid "Error parsing data from URL {0}"
 msgstr "Error en analitzar les dades de l''adreça URL {0}"
 
-msgid "Download Track"
-msgstr "Descarrega Recorregut"
-
-msgid "Filename"
-msgstr "Nom del fitxer"
+msgid "Invalid URL {0}"
+msgstr "Adreça URL invàlida {0}"
 
 msgid "Private (only shared as anonymous, unordered points)"
 msgstr "Privat (només es comparteix de forma anònima, punts desordenats)"
@@ -25053,9 +25127,6 @@ msgstr "Cap capa GPX seleccionada. No es pot pujar un traçat."
 msgid "Uploading trace ..."
 msgstr "Pujant traçat ..."
 
-msgid "Connecting..."
-msgstr "S''està connectant..."
-
 msgid "Upload canceled"
 msgstr "La Pujada s''ha cancel·lat"
 
@@ -29906,6 +29977,69 @@ msgstr ""
 msgid "Please load some photos."
 msgstr ""
 
+msgid "Edit photo GPS data"
+msgstr ""
+
+msgid "Edit GPS data of selected photo."
+msgstr ""
+
+msgid "Edit Photo GPS Data"
+msgstr ""
+
+msgid "Please select an image first."
+msgstr ""
+
+msgid "No image selected"
+msgstr ""
+
+msgid "(Empty values delete the according fields.)"
+msgstr ""
+
+msgid "coordinates"
+msgstr "coordenades"
+
+msgid "Latitude and longitude"
+msgstr ""
+
+msgid "Edit Image Coordinates"
+msgstr ""
+
+msgid "Edit coordinates in separate editor"
+msgstr ""
+
+msgid "altitude"
+msgstr ""
+
+msgid "Altitude:"
+msgstr ""
+
+msgid "speed"
+msgstr ""
+
+msgid "positive number or empty"
+msgstr ""
+
+msgid "Speed:"
+msgstr ""
+
+msgid "direction"
+msgstr ""
+
+msgid "range -360.0 .. 360.0, or empty"
+msgstr ""
+
+msgid "Direction:"
+msgstr ""
+
+msgid "°"
+msgstr ""
+
+msgid "Undo changes made in this dialog"
+msgstr ""
+
+msgid "Reload GPS data from image file"
+msgstr ""
+
 msgid "New layer for untagged images"
 msgstr ""
 
@@ -33194,9 +33328,6 @@ msgstr "{0}.Wikipedia.org: {1}"
 msgid "Fetches all coordinates from Wikipedia in the current view"
 msgstr "Mostra les coordenades de la Viquipèdia a la vista actual"
 
-msgid "coordinates"
-msgstr "coordenades"
-
 msgid "Category"
 msgstr "Categoria"
 
diff --git a/i18n/po/cs.po b/i18n/po/cs.po
index 220956c..df8e112 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: 2015-12-31 03:40+0100\n"
-"PO-Revision-Date: 2015-12-29 10:33+0000\n"
+"POT-Creation-Date: 2016-01-06 03:38+0100\n"
+"PO-Revision-Date: 2016-01-05 09:59+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: 2015-12-31 04:39+0000\n"
-"X-Generator: Launchpad (build 17865)\n"
+"X-Launchpad-Export-Date: 2016-01-06 04:37+0000\n"
+"X-Generator: Launchpad (build 17876)\n"
 "Language: cs\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -1146,9 +1146,6 @@ msgstr "Chyba zpracování"
 msgid "Overpass query: "
 msgstr "Dotaz Overpass: "
 
-msgid "Overpass server: "
-msgstr "Server Overpass: "
-
 msgid "Paste"
 msgstr "Vložit"
 
@@ -1456,6 +1453,9 @@ msgstr "Rozdělit cestu"
 msgid "Split a way at the selected node."
 msgstr "Rozdělit cestu zvoleným uzlem"
 
+msgid "Cannot split since another split operation is already in progress"
+msgstr "Nelze rozdělit, protože již probíhá jiná operace rozdělování"
+
 msgid ""
 "The current selection cannot be used for splitting - no node is selected."
 msgstr ""
@@ -1585,6 +1585,27 @@ msgstr ""
 "uzlů a tyto nové uzly budou vybrány. Jinak všechny cesty dostanou\n"
 "své vlastní kopie a všechny uzly budou vybrány."
 
+msgid "Existing node"
+msgstr "Existující uzel"
+
+msgid "Both nodes"
+msgstr "Oba uzly"
+
+msgid "New node"
+msgstr "Nový uzel"
+
+msgid "Tags / Memberships"
+msgstr "Značky / Členství"
+
+msgid "Unglue"
+msgstr "Odlepit"
+
+msgid "Where should the tags of the node be put?"
+msgstr "Kam se mají dát značky uzlu?"
+
+msgid "Where should the memberships of this node be put?"
+msgstr "Kam se má dát členství tohoto uzlu?"
+
 msgid "Unglued Node"
 msgstr "Rozpojený uzel"
 
@@ -3343,6 +3364,15 @@ msgstr "Vaše práce byla automaticky uložena."
 msgid "Restoring files"
 msgstr "Obnovování souborů"
 
+msgid "Unable to delete backup file {0}"
+msgstr "Nemohu smazat záložní soubor {0}"
+
+msgid "Unable to delete PID file {0}"
+msgstr "Nemohu smazat soubor PID {0}"
+
+msgid "Unable to delete archived backup file {0}"
+msgstr "Nemohu smazat archivovaný záložní soubor {0}"
+
 msgid "Illegal latitude value ''{0}''"
 msgstr "Neplatná zeměpisná šířka ''{0}''"
 
@@ -4583,6 +4613,9 @@ msgstr "Nenalezena žádná cesta \"from\""
 msgid "No \"to\" way found"
 msgstr "Nenalezena žádná cesta \"to\""
 
+msgid "\"from\" way equals \"to\" way"
+msgstr "cesta \"from\" je stejná jako cesta \"to\""
+
 msgid "No \"via\" node or way found"
 msgstr "Nenalezena žádná cesta nebo uzel \"via\""
 
@@ -7605,9 +7638,6 @@ msgstr "Objektů: {2} / Značek: {0} / Členství: {1}"
 msgid "Tags: {0} / Memberships: {1}"
 msgstr "značek: {0} / Členství: {1}"
 
-msgid "Tags / Memberships"
-msgstr "Značky / Členství"
-
 msgid "Delete the selected key in all objects"
 msgstr "Smaže zvolený klíč ve všech objektech"
 
@@ -12749,6 +12779,15 @@ msgstr "Současná hodnota není platné URL"
 msgid "Please enter the OSM API URL."
 msgstr "Prosím, zadejte OSM API URL."
 
+msgid "Use Overpass server for object downloads"
+msgstr "Pro stahování objektů použít server Overpass"
+
+msgid "Overpass server: "
+msgstr "Server Overpass: "
+
+msgid "Overpass server"
+msgstr "Server Overpass"
+
 msgid "Proxy settings"
 msgstr "Nastavení proxy"
 
@@ -15235,6 +15274,9 @@ msgstr "URL neobsahuje platné {0}"
 msgid "reserved"
 msgstr "rezervované"
 
+msgid "Unable to delete old preferences file {0}"
+msgstr "Nemohu smazat starý soubor předvoleb {0}"
+
 msgid "Outdated Java version"
 msgstr "Zastaralá verze Java"
 
@@ -15347,6 +15389,9 @@ msgstr ""
 "<html><p> Promiňte, ale nelze vložit značky ze schránky, protože neobsahuje "
 "objekty JOSM, ani žádný použitelný text.</p></html>"
 
+msgid "Unable to delete file {0}"
+msgstr "Nemohu smazat soubor {0}"
+
 msgid "ms"
 msgstr "ms"
 
@@ -18611,6 +18656,9 @@ msgstr "Vozidla MHD"
 msgid "Tourist buses"
 msgstr "Zájezdové autobusy"
 
+msgid "Max. speed Heavy Goods Vehicles (km/h)"
+msgstr "Max. rychlost nákladních vozidel (km/h)"
+
 msgid "Min. speed (km/h)"
 msgstr "Min. rychlost (km/h)"
 
@@ -20929,12 +20977,6 @@ msgstr "Lékařská ambulance"
 msgid "Dentist"
 msgstr "Zubař"
 
-msgid "Nursing Home"
-msgstr "Pečovatelský ústav"
-
-msgid "Retirement Home"
-msgstr "Domov důchodců"
-
 msgid "Pharmacy"
 msgstr "Lékárna"
 
@@ -20962,6 +21004,31 @@ msgstr "(Použijte mezinárodní zápis, např. +420123456789)"
 msgid "Veterinary"
 msgstr "Veterinář"
 
+msgid "Social Facility"
+msgstr "Sociální zařízení"
+
+msgid "Nursing Home"
+msgstr "Pečovatelský ústav"
+
+msgid "Group Home"
+msgstr "Společný domov pro osoby se sociálními a zdravotními službami."
+
+msgid "For"
+msgstr "Pro"
+
+msgid "Assisted Living"
+msgstr "Společný domov pro samostatnější osoby, které vyžadují méně péče."
+
+msgid "Outreach"
+msgstr "Nepobytové zařízení poskytující služby sociálního zabezpečení."
+
+msgctxt "social_facility"
+msgid "Shelter"
+msgstr "Zařízení poskytující dočasné přístřeší."
+
+msgid "Food Bank"
+msgstr "Nepobytové zařízení, které poskytuje jídlo."
+
 msgid "Toilets/Restrooms"
 msgstr "WC/Toalety"
 
@@ -21004,6 +21071,13 @@ msgstr "v podřepu"
 msgid "urinal"
 msgstr "pisoár"
 
+msgctxt "toilets"
+msgid "Diaper"
+msgstr "Plenka"
+
+msgid "room"
+msgstr "místnost"
+
 msgid "Post Box"
 msgstr "Poštovní schránka"
 
@@ -25088,6 +25162,12 @@ msgstr "Stáhnout stopu ..."
 msgid "Download GPX track from openstreetmap.org"
 msgstr "Stáhnout GPX trasy z openstreetmap.org"
 
+msgid "Download Track"
+msgstr "Stáhnout stopu"
+
+msgid "Filename"
+msgstr "Jméno souboru"
+
 msgid ""
 "Error occurred while parsing gpx file {0}. Only a part of the file will be "
 "available."
@@ -25095,20 +25175,14 @@ msgstr ""
 "Při parsování gpx souboru ''{0}'' došlo k chybě. Bude dostupná pouze část "
 "dat."
 
-msgid "Invalid URL {0}"
-msgstr "Neplatné URL {0}"
-
 msgid "Error fetching URL {0}"
 msgstr "Chyba při načítání URL {0}"
 
 msgid "Error parsing data from URL {0}"
 msgstr "Chyba při načítání dat z URL {0}"
 
-msgid "Download Track"
-msgstr "Stáhnout stopu"
-
-msgid "Filename"
-msgstr "Jméno souboru"
+msgid "Invalid URL {0}"
+msgstr "Neplatné URL {0}"
 
 msgid "Private (only shared as anonymous, unordered points)"
 msgstr "Soukromá (sdílená pouze jako anonymní neuspořádané uzly)"
@@ -25160,9 +25234,6 @@ msgstr "Není vybrána GPX vrstva. Nelze nahrát trasu na server."
 msgid "Uploading trace ..."
 msgstr "Nahrávám trasu ..."
 
-msgid "Connecting..."
-msgstr "Připojuji se..."
-
 msgid "Upload canceled"
 msgstr "Nahrávání bylo zrušeno"
 
@@ -29982,6 +30053,69 @@ msgstr ""
 msgid "Please load some photos."
 msgstr "Načtěte prosím nějaké fotografie."
 
+msgid "Edit photo GPS data"
+msgstr "Upravit údaje GPS fotografie"
+
+msgid "Edit GPS data of selected photo."
+msgstr "Opravit GPS údaje vybrané fotografie"
+
+msgid "Edit Photo GPS Data"
+msgstr "Upravit údaje GPS fotografie"
+
+msgid "Please select an image first."
+msgstr "Nejdříve vyberte obrázek."
+
+msgid "No image selected"
+msgstr "Nebyl vybrán žádný obrázek"
+
+msgid "(Empty values delete the according fields.)"
+msgstr "(Prázdné hodnoty vymažou odpovídající pole.)"
+
+msgid "coordinates"
+msgstr "souřadnice"
+
+msgid "Latitude and longitude"
+msgstr "Zeměpisná šířka a délka"
+
+msgid "Edit Image Coordinates"
+msgstr "Upravit souřadnice obrázku"
+
+msgid "Edit coordinates in separate editor"
+msgstr "Upravit souřadnice v samostatném editoru"
+
+msgid "altitude"
+msgstr "nadmořská výška"
+
+msgid "Altitude:"
+msgstr "Nadmořská výška :"
+
+msgid "speed"
+msgstr "rychlost"
+
+msgid "positive number or empty"
+msgstr "kladné číslo nebo prázdné"
+
+msgid "Speed:"
+msgstr "Rychlost:"
+
+msgid "direction"
+msgstr "směr"
+
+msgid "range -360.0 .. 360.0, or empty"
+msgstr "rozsah -360.0 .. 360.0, nebo prázdné"
+
+msgid "Direction:"
+msgstr "Směr:"
+
+msgid "°"
+msgstr "°"
+
+msgid "Undo changes made in this dialog"
+msgstr "Vrátit zpět změny provedené v tomto okně"
+
+msgid "Reload GPS data from image file"
+msgstr "Znovu nahrát data GPS z obrázku"
+
 msgid "New layer for untagged images"
 msgstr "Nová vrstva pro neoznačené obrázky"
 
@@ -33237,9 +33371,6 @@ msgstr "{0}.wikipedia.org: {1}"
 msgid "Fetches all coordinates from Wikipedia in the current view"
 msgstr "Načte všechny souřadnice z Wikipedie pro aktuálně zobrazenou oblast"
 
-msgid "coordinates"
-msgstr "souřadnice"
-
 msgid "Category"
 msgstr "Kategorie"
 
@@ -33284,3 +33415,6 @@ msgstr "Vyjet"
 
 msgid "Drive a race car on this layer"
 msgstr "Řídit závodní speciál na této vrstvě"
+
+#~ msgid "Retirement Home"
+#~ msgstr "Domov důchodců"
diff --git a/i18n/po/cy.po b/i18n/po/cy.po
index 681935d..39b4ef1 100644
--- a/i18n/po/cy.po
+++ b/i18n/po/cy.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: josm\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-12-31 03:40+0100\n"
+"POT-Creation-Date: 2016-01-06 03:38+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: 2015-12-31 05:04+0000\n"
-"X-Generator: Launchpad (build 17865)\n"
+"X-Launchpad-Export-Date: 2016-01-06 05:06+0000\n"
+"X-Generator: Launchpad (build 17876)\n"
 "Language: cy\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -1057,9 +1057,6 @@ msgstr ""
 msgid "Overpass query: "
 msgstr ""
 
-msgid "Overpass server: "
-msgstr ""
-
 msgid "Paste"
 msgstr ""
 
@@ -1349,6 +1346,9 @@ msgstr ""
 msgid "Split a way at the selected node."
 msgstr ""
 
+msgid "Cannot split since another split operation is already in progress"
+msgstr ""
+
 msgid ""
 "The current selection cannot be used for splitting - no node is selected."
 msgstr ""
@@ -1460,6 +1460,27 @@ msgid ""
 "own copy and all nodes will be selected."
 msgstr ""
 
+msgid "Existing node"
+msgstr ""
+
+msgid "Both nodes"
+msgstr ""
+
+msgid "New node"
+msgstr ""
+
+msgid "Tags / Memberships"
+msgstr ""
+
+msgid "Unglue"
+msgstr ""
+
+msgid "Where should the tags of the node be put?"
+msgstr ""
+
+msgid "Where should the memberships of this node be put?"
+msgstr ""
+
 msgid "Unglued Node"
 msgstr ""
 
@@ -3050,6 +3071,15 @@ msgstr ""
 msgid "Restoring files"
 msgstr ""
 
+msgid "Unable to delete backup file {0}"
+msgstr ""
+
+msgid "Unable to delete PID file {0}"
+msgstr ""
+
+msgid "Unable to delete archived backup file {0}"
+msgstr ""
+
 msgid "Illegal latitude value ''{0}''"
 msgstr ""
 
@@ -4208,6 +4238,9 @@ msgstr ""
 msgid "No \"to\" way found"
 msgstr ""
 
+msgid "\"from\" way equals \"to\" way"
+msgstr ""
+
 msgid "No \"via\" node or way found"
 msgstr ""
 
@@ -7005,9 +7038,6 @@ msgstr ""
 msgid "Tags: {0} / Memberships: {1}"
 msgstr ""
 
-msgid "Tags / Memberships"
-msgstr ""
-
 msgid "Delete the selected key in all objects"
 msgstr ""
 
@@ -11612,6 +11642,15 @@ msgstr ""
 msgid "Please enter the OSM API URL."
 msgstr ""
 
+msgid "Use Overpass server for object downloads"
+msgstr ""
+
+msgid "Overpass server: "
+msgstr ""
+
+msgid "Overpass server"
+msgstr ""
+
 msgid "Proxy settings"
 msgstr ""
 
@@ -13750,6 +13789,9 @@ msgstr ""
 msgid "reserved"
 msgstr ""
 
+msgid "Unable to delete old preferences file {0}"
+msgstr ""
+
 msgid "Outdated Java version"
 msgstr ""
 
@@ -13841,6 +13883,9 @@ msgid ""
 "contain any JOSM object or suitable text. </p></html>"
 msgstr ""
 
+msgid "Unable to delete file {0}"
+msgstr ""
+
 msgid "ms"
 msgstr ""
 
@@ -16955,6 +17000,9 @@ msgstr ""
 msgid "Tourist buses"
 msgstr ""
 
+msgid "Max. speed Heavy Goods Vehicles (km/h)"
+msgstr ""
+
 msgid "Min. speed (km/h)"
 msgstr ""
 
@@ -19252,12 +19300,6 @@ msgstr ""
 msgid "Dentist"
 msgstr ""
 
-msgid "Nursing Home"
-msgstr ""
-
-msgid "Retirement Home"
-msgstr ""
-
 msgid "Pharmacy"
 msgstr ""
 
@@ -19285,6 +19327,31 @@ msgstr ""
 msgid "Veterinary"
 msgstr ""
 
+msgid "Social Facility"
+msgstr ""
+
+msgid "Nursing Home"
+msgstr ""
+
+msgid "Group Home"
+msgstr ""
+
+msgid "For"
+msgstr ""
+
+msgid "Assisted Living"
+msgstr ""
+
+msgid "Outreach"
+msgstr ""
+
+msgctxt "social_facility"
+msgid "Shelter"
+msgstr ""
+
+msgid "Food Bank"
+msgstr ""
+
 msgid "Toilets/Restrooms"
 msgstr ""
 
@@ -19327,6 +19394,13 @@ msgstr ""
 msgid "urinal"
 msgstr ""
 
+msgctxt "toilets"
+msgid "Diaper"
+msgstr ""
+
+msgid "room"
+msgstr ""
+
 msgid "Post Box"
 msgstr ""
 
@@ -23364,24 +23438,24 @@ msgstr ""
 msgid "Download GPX track from openstreetmap.org"
 msgstr ""
 
+msgid "Download Track"
+msgstr ""
+
+msgid "Filename"
+msgstr ""
+
 msgid ""
 "Error occurred while parsing gpx file {0}. Only a part of the file will be "
 "available."
 msgstr ""
 
-msgid "Invalid URL {0}"
-msgstr ""
-
 msgid "Error fetching URL {0}"
 msgstr ""
 
 msgid "Error parsing data from URL {0}"
 msgstr ""
 
-msgid "Download Track"
-msgstr ""
-
-msgid "Filename"
+msgid "Invalid URL {0}"
 msgstr ""
 
 msgid "Private (only shared as anonymous, unordered points)"
@@ -23431,9 +23505,6 @@ msgstr ""
 msgid "Uploading trace ..."
 msgstr ""
 
-msgid "Connecting..."
-msgstr ""
-
 msgid "Upload canceled"
 msgstr ""
 
@@ -27872,6 +27943,69 @@ msgstr ""
 msgid "Please load some photos."
 msgstr ""
 
+msgid "Edit photo GPS data"
+msgstr ""
+
+msgid "Edit GPS data of selected photo."
+msgstr ""
+
+msgid "Edit Photo GPS Data"
+msgstr ""
+
+msgid "Please select an image first."
+msgstr ""
+
+msgid "No image selected"
+msgstr ""
+
+msgid "(Empty values delete the according fields.)"
+msgstr ""
+
+msgid "coordinates"
+msgstr ""
+
+msgid "Latitude and longitude"
+msgstr ""
+
+msgid "Edit Image Coordinates"
+msgstr ""
+
+msgid "Edit coordinates in separate editor"
+msgstr ""
+
+msgid "altitude"
+msgstr ""
+
+msgid "Altitude:"
+msgstr ""
+
+msgid "speed"
+msgstr ""
+
+msgid "positive number or empty"
+msgstr ""
+
+msgid "Speed:"
+msgstr ""
+
+msgid "direction"
+msgstr ""
+
+msgid "range -360.0 .. 360.0, or empty"
+msgstr ""
+
+msgid "Direction:"
+msgstr ""
+
+msgid "°"
+msgstr ""
+
+msgid "Undo changes made in this dialog"
+msgstr ""
+
+msgid "Reload GPS data from image file"
+msgstr ""
+
 msgid "New layer for untagged images"
 msgstr ""
 
@@ -30888,9 +31022,6 @@ msgstr ""
 msgid "Fetches all coordinates from Wikipedia in the current view"
 msgstr ""
 
-msgid "coordinates"
-msgstr ""
-
 msgid "Category"
 msgstr ""
 
diff --git a/i18n/po/da.po b/i18n/po/da.po
index db24915..5eb3f7b 100644
--- a/i18n/po/da.po
+++ b/i18n/po/da.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: josm\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-12-31 03:40+0100\n"
+"POT-Creation-Date: 2016-01-06 03:38+0100\n"
 "PO-Revision-Date: 2015-12-28 10:07+0000\n"
 "Last-Translator: Jørn <joern.map at gmail.com>\n"
 "Language-Team: Dansk <kde-i18n-doc at kde.org>\n"
@@ -16,8 +16,8 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Launchpad-Export-Date: 2015-12-31 04:39+0000\n"
-"X-Generator: Launchpad (build 17865)\n"
+"X-Launchpad-Export-Date: 2016-01-06 04:38+0000\n"
+"X-Generator: Launchpad (build 17876)\n"
 "Language: da_DK\n"
 "X-Poedit-SourceCharset: utf-8\n"
 
@@ -1138,9 +1138,6 @@ msgstr "Fortolkningsfejl"
 msgid "Overpass query: "
 msgstr "Overpass forespørgsel: "
 
-msgid "Overpass server: "
-msgstr "Overpass server: "
-
 msgid "Paste"
 msgstr "Indsæt"
 
@@ -1446,6 +1443,9 @@ msgstr "Opdel vej"
 msgid "Split a way at the selected node."
 msgstr "Opdel en vej ved det markerede punkt"
 
+msgid "Cannot split since another split operation is already in progress"
+msgstr ""
+
 msgid ""
 "The current selection cannot be used for splitting - no node is selected."
 msgstr ""
@@ -1573,6 +1573,27 @@ msgstr ""
 "og de nye punkter vil blive markeret. Ellers vil alle veje få deres\n"
 "egen kopi og alle punkter vil blive markeret."
 
+msgid "Existing node"
+msgstr ""
+
+msgid "Both nodes"
+msgstr ""
+
+msgid "New node"
+msgstr ""
+
+msgid "Tags / Memberships"
+msgstr "Tags / Medlemskaber"
+
+msgid "Unglue"
+msgstr ""
+
+msgid "Where should the tags of the node be put?"
+msgstr ""
+
+msgid "Where should the memberships of this node be put?"
+msgstr ""
+
 msgid "Unglued Node"
 msgstr "Skilte punkt i to"
 
@@ -3289,6 +3310,15 @@ msgstr "Dit arbejde er blevet gemt automatisk."
 msgid "Restoring files"
 msgstr "Gendanner filer"
 
+msgid "Unable to delete backup file {0}"
+msgstr ""
+
+msgid "Unable to delete PID file {0}"
+msgstr ""
+
+msgid "Unable to delete archived backup file {0}"
+msgstr ""
+
 msgid "Illegal latitude value ''{0}''"
 msgstr "Ulovlig breddegradsværdi \"{0}\""
 
@@ -4534,6 +4564,9 @@ msgstr "Ingen \"fra\" vej fundet"
 msgid "No \"to\" way found"
 msgstr "Ingen \"til\" vej fundet"
 
+msgid "\"from\" way equals \"to\" way"
+msgstr ""
+
 msgid "No \"via\" node or way found"
 msgstr "Intet \"via\" punkt eller vej fundet"
 
@@ -7536,9 +7569,6 @@ msgstr "Objekter: {2} / Tags: {0} / Medlemskaber: {1}"
 msgid "Tags: {0} / Memberships: {1}"
 msgstr "Tags: {0} / Medlemskaber: {1}"
 
-msgid "Tags / Memberships"
-msgstr "Tags / Medlemskaber"
-
 msgid "Delete the selected key in all objects"
 msgstr "Fjern den valgte nøgle i alle objekter"
 
@@ -12623,6 +12653,15 @@ msgstr "Den nuværende værdi er ikke en gyldig URL"
 msgid "Please enter the OSM API URL."
 msgstr "Indtast OSM API URL’en"
 
+msgid "Use Overpass server for object downloads"
+msgstr ""
+
+msgid "Overpass server: "
+msgstr "Overpass server: "
+
+msgid "Overpass server"
+msgstr ""
+
 msgid "Proxy settings"
 msgstr "Proxy-indstillinger"
 
@@ -15067,6 +15106,9 @@ msgstr "URL indeholder ikke gyldig {0}"
 msgid "reserved"
 msgstr "reserveret"
 
+msgid "Unable to delete old preferences file {0}"
+msgstr ""
+
 msgid "Outdated Java version"
 msgstr "Forældet Java version"
 
@@ -15176,6 +15218,9 @@ msgstr ""
 "<html><p> Beklager, det er ikke muligt at indsætte tags fra udklipsholderen. "
 "Den indeholder ikke noget JOSM objekt, eller passende tekst. </p></html>"
 
+msgid "Unable to delete file {0}"
+msgstr ""
+
 msgid "ms"
 msgstr "ms"
 
@@ -18451,6 +18496,9 @@ msgstr "Offentlig transport"
 msgid "Tourist buses"
 msgstr "Turistbusser"
 
+msgid "Max. speed Heavy Goods Vehicles (km/h)"
+msgstr ""
+
 msgid "Min. speed (km/h)"
 msgstr "Min. hastighed (km/t)"
 
@@ -20771,12 +20819,6 @@ msgstr "Læge"
 msgid "Dentist"
 msgstr "Tandlæge"
 
-msgid "Nursing Home"
-msgstr "Plejecenter"
-
-msgid "Retirement Home"
-msgstr "Plejehjem/plejebolig"
-
 msgid "Pharmacy"
 msgstr "Apotek"
 
@@ -20804,6 +20846,31 @@ msgstr "(Brug landekode, ligesom +12-345-67890)"
 msgid "Veterinary"
 msgstr "Dyrlæge"
 
+msgid "Social Facility"
+msgstr ""
+
+msgid "Nursing Home"
+msgstr "Plejecenter"
+
+msgid "Group Home"
+msgstr ""
+
+msgid "For"
+msgstr ""
+
+msgid "Assisted Living"
+msgstr ""
+
+msgid "Outreach"
+msgstr ""
+
+msgctxt "social_facility"
+msgid "Shelter"
+msgstr ""
+
+msgid "Food Bank"
+msgstr ""
+
 msgid "Toilets/Restrooms"
 msgstr "Toiletter"
 
@@ -20846,6 +20913,13 @@ msgstr "på hug"
 msgid "urinal"
 msgstr "stående"
 
+msgctxt "toilets"
+msgid "Diaper"
+msgstr ""
+
+msgid "room"
+msgstr ""
+
 msgid "Post Box"
 msgstr "Postkasse"
 
@@ -24929,6 +25003,12 @@ msgstr "Download spor ..."
 msgid "Download GPX track from openstreetmap.org"
 msgstr "Download GPX spor fra openstreetmap.org"
 
+msgid "Download Track"
+msgstr "Download spor"
+
+msgid "Filename"
+msgstr "Filnavn"
+
 msgid ""
 "Error occurred while parsing gpx file {0}. Only a part of the file will be "
 "available."
@@ -24936,20 +25016,14 @@ msgstr ""
 "Der opstod en fejl ved fortolkning af gpx filen {0}. Kun en del af filen vil "
 "være tilgængelig."
 
-msgid "Invalid URL {0}"
-msgstr "Ugyldig URL{0}"
-
 msgid "Error fetching URL {0}"
 msgstr "Fejl ved hentning af URL {0}"
 
 msgid "Error parsing data from URL {0}"
 msgstr "Fejl ved fortolkning af data fra URL {0}"
 
-msgid "Download Track"
-msgstr "Download spor"
-
-msgid "Filename"
-msgstr "Filnavn"
+msgid "Invalid URL {0}"
+msgstr "Ugyldig URL{0}"
 
 msgid "Private (only shared as anonymous, unordered points)"
 msgstr "Privat (kun delt som anonyme, uordnede punkter)"
@@ -25000,9 +25074,6 @@ msgstr "Intet GPX-lag er valgt. Kan ikke uploade et spor."
 msgid "Uploading trace ..."
 msgstr "Uploader spor ..."
 
-msgid "Connecting..."
-msgstr "Forbinder..."
-
 msgid "Upload canceled"
 msgstr "Upload afbrudt"
 
@@ -29783,6 +29854,69 @@ msgstr ""
 msgid "Please load some photos."
 msgstr "Indlæs nogle billeder."
 
+msgid "Edit photo GPS data"
+msgstr ""
+
+msgid "Edit GPS data of selected photo."
+msgstr ""
+
+msgid "Edit Photo GPS Data"
+msgstr ""
+
+msgid "Please select an image first."
+msgstr ""
+
+msgid "No image selected"
+msgstr ""
+
+msgid "(Empty values delete the according fields.)"
+msgstr ""
+
+msgid "coordinates"
+msgstr "koordinater"
+
+msgid "Latitude and longitude"
+msgstr ""
+
+msgid "Edit Image Coordinates"
+msgstr ""
+
+msgid "Edit coordinates in separate editor"
+msgstr ""
+
+msgid "altitude"
+msgstr ""
+
+msgid "Altitude:"
+msgstr ""
+
+msgid "speed"
+msgstr ""
+
+msgid "positive number or empty"
+msgstr ""
+
+msgid "Speed:"
+msgstr ""
+
+msgid "direction"
+msgstr ""
+
+msgid "range -360.0 .. 360.0, or empty"
+msgstr ""
+
+msgid "Direction:"
+msgstr ""
+
+msgid "°"
+msgstr ""
+
+msgid "Undo changes made in this dialog"
+msgstr ""
+
+msgid "Reload GPS data from image file"
+msgstr ""
+
 msgid "New layer for untagged images"
 msgstr "Nyt lag for utaggede billeder"
 
@@ -33021,9 +33155,6 @@ msgstr "{0}.Wikipedia.org: {1}"
 msgid "Fetches all coordinates from Wikipedia in the current view"
 msgstr "Henter alle koordinater fra Wikipedia i det viste udsnit af kortet"
 
-msgid "coordinates"
-msgstr "koordinater"
-
 msgid "Category"
 msgstr "Kategori"
 
@@ -33069,3 +33200,6 @@ msgstr "Kør afsted"
 
 msgid "Drive a race car on this layer"
 msgstr "Kør en racerbil på dette lag"
+
+#~ msgid "Retirement Home"
+#~ msgstr "Plejehjem/plejebolig"
diff --git a/i18n/po/de.po b/i18n/po/de.po
index ca5e27e..4ba22b5 100644
--- a/i18n/po/de.po
+++ b/i18n/po/de.po
@@ -7,16 +7,16 @@ msgid ""
 msgstr ""
 "Project-Id-Version: de\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-12-31 03:40+0100\n"
-"PO-Revision-Date: 2015-12-29 19:00+0000\n"
-"Last-Translator: Ettore Atalan <atalanttore at googlemail.com>\n"
+"POT-Creation-Date: 2016-01-06 03:38+0100\n"
+"PO-Revision-Date: 2016-01-05 17:01+0000\n"
+"Last-Translator: Carsten Gerlach <carsten-gerlach at gmx.de>\n"
 "Language-Team: JOSM\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Launchpad-Export-Date: 2015-12-31 04:43+0000\n"
-"X-Generator: Launchpad (build 17865)\n"
+"X-Launchpad-Export-Date: 2016-01-06 04:42+0000\n"
+"X-Generator: Launchpad (build 17876)\n"
 "Language: de\n"
 "X-Poedit-SearchPath-0: .\n"
 "X-Poedit-Basepath: /home/simon/src/josm.all/i18n\n"
@@ -342,10 +342,10 @@ msgid "problem"
 msgstr "Problem"
 
 msgid "previous"
-msgstr "vorheriger"
+msgstr "vorherige"
 
 msgid "next"
-msgstr "nächster"
+msgstr "nächste"
 
 msgid "Nothing selected to zoom to."
 msgstr "Nichts ausgewählt, das vergrößert werden kann."
@@ -579,7 +579,7 @@ msgstr "Chronik"
 
 msgid "Display history information about OSM ways, nodes, or relations."
 msgstr ""
-"Chronikinformationen über OSM-Linien, Punkte oder Relationen anzeigen."
+"Chronikinformationen über OSM-Punkte, -Linien oder Relationen anzeigen."
 
 msgid "Show history"
 msgstr "Chronik anzeigen"
@@ -591,7 +591,7 @@ msgid ""
 "Display history information about OSM ways, nodes, or relations in web "
 "browser."
 msgstr ""
-"Chronikinformationen übver OSM-Linien, Punkte oder Relationen im Webbrowser "
+"Chronikinformationen über OSM-Punkte, -Linien oder -Relationen im Webbrowser "
 "anzeigen."
 
 msgid "New offset"
@@ -641,13 +641,14 @@ msgstr ""
 "anzeigen."
 
 msgid "Advanced info (web)"
-msgstr "Erweiterte Informationen(Web)"
+msgstr "Erweiterte Informationen (Web)"
 
 msgid ""
 "Display object information about OSM nodes, ways, or relations in web "
 "browser."
 msgstr ""
-"Objektinformationen über OSM-Punkte, -Linien oder -Relationen anzeigen."
+"Erweiterte Objektinformationen über OSM-Punkte, -Linien oder -Relationen im "
+"Webbrowser anzeigen."
 
 msgid "Join overlapping Areas"
 msgstr "Überlappende Flächen verbinden"
@@ -1084,7 +1085,7 @@ msgid ""
 "patterns shown:<br>{1}"
 msgstr ""
 "Adresse »{0}« kann nicht geöffnet werden.<br>Die folgenden "
-"Herunterladefunktionen nehmen die angezeigten Adressmuster an:br>{1}"
+"Herunterladefunktionen nehmen die angezeigten Adressmuster an:<br>{1}"
 
 msgid ""
 "<h3>When one or more ways are selected, the shape is adjusted such, that all "
@@ -1151,7 +1152,7 @@ msgid "Please select ways with angles of approximately 90 or 180 degrees."
 msgstr "Bitte Linien mit Winkel von ungefähr 90 oder 180 Grad auswählen."
 
 msgid "Download from Overpass API ..."
-msgstr "Mittels Overpass-API laden …"
+msgstr "Mittels Overpass-API herunterladen …"
 
 msgid "Download map data from Overpass API server."
 msgstr "Kartendaten mittels Overpass-API laden"
@@ -1174,9 +1175,6 @@ msgstr "Auswertungsfehler"
 msgid "Overpass query: "
 msgstr "Overpass-Abfrage: "
 
-msgid "Overpass server: "
-msgstr "Overpass-Server: "
-
 msgid "Paste"
 msgstr "Einfügen"
 
@@ -1484,6 +1482,11 @@ msgstr "Linie aufspalten"
 msgid "Split a way at the selected node."
 msgstr "Linie am gewählten Punkt aufspalten."
 
+msgid "Cannot split since another split operation is already in progress"
+msgstr ""
+"Kann nicht aufgeteilt werden, da ein anderer Aufteilvorgang bereits "
+"ausgeführt wird"
+
 msgid ""
 "The current selection cannot be used for splitting - no node is selected."
 msgstr ""
@@ -1619,6 +1622,28 @@ msgstr ""
 "Ansonsten erhält jede Linie eine eigene Kopie\n"
 "und alle Punkte werden ausgewählt."
 
+msgid "Existing node"
+msgstr "Vorhandener Knotenpunkt"
+
+msgid "Both nodes"
+msgstr "Beide Knotenpunkte"
+
+msgid "New node"
+msgstr "Neuer Knotenpunkt"
+
+msgid "Tags / Memberships"
+msgstr "Merkmale / Mitgliedschaften"
+
+msgid "Unglue"
+msgstr "Loslösen"
+
+msgid "Where should the tags of the node be put?"
+msgstr "Wohin sollen die Merkmale von dem Knotenpunkt gelegt werden?"
+
+msgid "Where should the memberships of this node be put?"
+msgstr ""
+"Wohin sollen die Mitgliedschaften von diesem Knotenpunkt gelegt werden?"
+
 msgid "Unglued Node"
 msgstr "Punkt getrennt"
 
@@ -1738,8 +1763,7 @@ msgid "Upload data"
 msgstr "Daten hochladen"
 
 msgid "Upload all changes in the active data layer to the OSM server"
-msgstr ""
-"Alle Änderungen in der aktuellen Datenebene zum OSM-Server hochladen."
+msgstr "Alle Änderungen in der aktiven Datenebene zum OSM-Server hochladen."
 
 msgid ""
 "<html>The data to be uploaded participates in unresolved conflicts of layer "
@@ -1826,7 +1850,9 @@ msgid "Wireframe View"
 msgstr "Drahtdarstellung"
 
 msgid "Enable/disable rendering the map as wireframe only"
-msgstr "Aktivieren oder deaktivieren der Kartenanzeige in Drahtdarstellung"
+msgstr ""
+"Ausschließliches Rendern der Karte als Drahtgittermodell "
+"aktivieren/deaktivieren"
 
 msgid "Toggle Wireframe view"
 msgstr "Drahtdarstellung umschalten"
@@ -3375,6 +3401,15 @@ msgstr "Ihre Arbeit wurde automatisch gespeichert."
 msgid "Restoring files"
 msgstr "Dateien wiederherstellen"
 
+msgid "Unable to delete backup file {0}"
+msgstr "Sicherungsdatei {0} kann nicht gelöscht werden"
+
+msgid "Unable to delete PID file {0}"
+msgstr "PID-Datei {0} kann nicht gelöscht werden"
+
+msgid "Unable to delete archived backup file {0}"
+msgstr "Archivierte Sicherungsdatei {0} kann nicht gelöscht werden"
+
 msgid "Illegal latitude value ''{0}''"
 msgstr "Ungültiger Breitenwert ''{0}''"
 
@@ -4661,6 +4696,9 @@ msgstr "Keine Startlinie gefunden"
 msgid "No \"to\" way found"
 msgstr "Keine Ziellinie gefunden"
 
+msgid "\"from\" way equals \"to\" way"
+msgstr "Startlinie gleicht Ziellinie"
+
 msgid "No \"via\" node or way found"
 msgstr "Keine Zwischenlinie oder -punkt gefunden"
 
@@ -4671,7 +4709,7 @@ msgid "Superfluous turnrestriction as \"to\" way is oneway"
 msgstr "Überflüssige Abbiegeeinschränkung, da \"to\" eine Einbahn ist"
 
 msgid "The \"to\" way does not start or end at a \"via\" node."
-msgstr "Die \"to\"-Linie beginnt oder endet nicht an einem \"via\"-Punkt."
+msgstr "Die Startlinie beginnt oder endet nicht an einem Zwischenpunkt."
 
 msgid "The \"from\" and the first \"via\" way are not connected."
 msgstr "Der Start- und der erste Zwischenweg sind nicht verbunden."
@@ -4833,16 +4871,16 @@ msgid "Reversed land: land not on left side"
 msgstr "Verdrehtes Land: Land nicht auf der linken Seite"
 
 msgid "Show this dialog again the next time"
-msgstr "Zeige diesen Dialog auch das nächste Mal"
+msgstr "Diesen Dialog auch das nächste Mal anzeigen"
 
 msgid "Do not show again (this operation)"
-msgstr "Nicht noch einmal zeigen (aktuelle Aufgabe)"
+msgstr "Nicht noch einmal anzeigen (aktuelle Aufgabe)"
 
 msgid "Do not show again (this session)"
-msgstr "Nicht noch einmal zeigen (Sitzung)"
+msgstr "Nicht noch einmal anzeigen (Sitzung)"
 
 msgid "Do not show again (remembers choice)"
-msgstr "Nicht noch einmal zeigen (speichert Auswahl)"
+msgstr "Nicht noch einmal anzeigen (merkt sich die Auswahl)"
 
 msgid "incomplete"
 msgstr "unvollständig"
@@ -4924,13 +4962,13 @@ msgid "Authorisation Failed"
 msgstr "Autorisierung fehlgeschlagen"
 
 msgid "Client Time Out"
-msgstr "Client hat Time Out"
+msgstr "Client hat die Zeit überschritten"
 
 msgid "Bandwidth Limit Exceeded"
 msgstr "Bandbreitengrenze überschritten"
 
 msgid "Communication with OSM server failed"
-msgstr "Kommunikation mit dem OSM Server fehlgeschlagen"
+msgstr "Kommunikation mit dem OSM-Server fehlgeschlagen"
 
 msgid "Authentication failed"
 msgstr "Legitimierung fehlgeschlagen"
@@ -6226,7 +6264,7 @@ msgstr "Daten herunterladen"
 msgid ""
 "Download information about the selected changesets from the OSM server"
 msgstr ""
-"Informationen zu den derzeit ausgewählten Änderungssätzen vom OSM-Server "
+"Informationen zu den ausgewählten Änderungssätzen vom OSM-Server "
 "herunterladen"
 
 msgid "Closes the selected open changesets"
@@ -7188,7 +7226,8 @@ msgid "My changesets"
 msgstr "Eigene Änderungssätze"
 
 msgid "Download my changesets from the OSM server (max. 100 changesets)"
-msgstr "Eigene Änderungssätze vom OSM-Server laden (max. 100 Änderungssätze)"
+msgstr ""
+"Eigene Änderungssätze vom OSM-Server herunterladen (max. 100 Änderungssätze)"
 
 msgid ""
 "<html>JOSM is currently running with an anonymous user. It cannot "
@@ -7196,8 +7235,8 @@ msgid ""
 "user name<br>in the JOSM preferences.</html>"
 msgstr ""
 "<html>Sie haben keine Benutzerkennung eingestellt, daher kann JOSM "
-"Ihre<br>Änderungssätze nicht vom Server laden. Geben Sie Ihren<br>OSM-"
-"Benutzernamen in den Einstellungen an.</html>"
+"Ihre<br>Änderungssätze nicht vom Server herunterladen, bis Sie Ihren<br>OSM-"
+"Benutzernamen in den JOSM-Einstellungen eingeben.</html>"
 
 msgctxt "changeset.upload-comment"
 msgid "empty"
@@ -7261,7 +7300,7 @@ msgid "Update content"
 msgstr "Inhalt aktualisieren"
 
 msgid "Update the changeset content from the OSM server"
-msgstr "Den Inhalt des Änderungssatzes vom OSM-Server aktualisieren"
+msgstr "Änderungssatzinhalt vom OSM-Server aktualisieren"
 
 msgid "Download and show the history of the selected objects"
 msgstr "Herunterladen und Anzeigen der Chronik des ausgewählten Objekts"
@@ -7329,7 +7368,7 @@ msgstr ""
 "entfernen"
 
 msgid "Update the changeset from the OSM server"
-msgstr "Den Änderungssatz vom OSM-Server aktualisieren"
+msgstr "Änderungssatz vom OSM-Server aktualisieren"
 
 msgid ""
 "Select the primitives in the content of this changeset in the current data "
@@ -7642,7 +7681,7 @@ msgid "Determine user id for current user..."
 msgstr "Benzuterkennung des aktuellen Benutzers herausfinden …"
 
 msgid "Query and download changesets ..."
-msgstr "Änderungssätze suchen und herunterladen …"
+msgstr "Änderungssätze abfragen und herunterladen …"
 
 msgid "URL: "
 msgstr "Adresse: "
@@ -7717,9 +7756,6 @@ msgstr "Objekte: {2} / Schlagwörter: {0} / Mitgliedschaften: {1}"
 msgid "Tags: {0} / Memberships: {1}"
 msgstr "Merkmale: {0} / Mitgliedschaften: {1}"
 
-msgid "Tags / Memberships"
-msgstr "Merkmale / Mitgliedschaften"
-
 msgid "Delete the selected key in all objects"
 msgstr "Den gewählten Schlüssel von allen Objekten entfernen"
 
@@ -7866,7 +7902,7 @@ msgstr "zum Hinzufügen des ersten Vorschlags ohne Schließung des Dialogs"
 
 msgid "Please enter the number of recently added tags to display"
 msgstr ""
-"Bitte die Anzahl zuletzt ergänzter Mermale für die Anzeige einstellen"
+"Bitte geben Sie die Anzahl der anzuzeigenden, zuletzt ergänzten Merkmale ein"
 
 msgid "Please enter integer number between 0 and {0}"
 msgstr "Bitte eine ganze Zahl zwischen 0 und {0} eingeben"
@@ -8513,7 +8549,7 @@ msgid "Querying name server"
 msgstr "Suche nach Namen"
 
 msgid "Querying name server ..."
-msgstr "Nach Namensservern wird gesucht …"
+msgstr "Namensserver wird abgefragt …"
 
 msgid "Error occured with query ''{0}'': ''{1}''"
 msgstr "Fehler trat mit der Suche ''{0}'' auf: ''{1}''"
@@ -9250,7 +9286,7 @@ msgstr ""
 "nicht verloren."
 
 msgid "Preparing layer ''{0}'' for upload ..."
-msgstr "Ebene \"{0}\" für Hochladen vorbereiten …"
+msgstr "Ebene \"{0}\" wird zum Hochladen vorbereitet …"
 
 msgid ""
 "<html>An upload and/or save operation of one layer with modifications<br>was "
@@ -9728,7 +9764,7 @@ msgid "Failed to create tile source"
 msgstr "Fehler beim Erstellen der Kachelquelle"
 
 msgid "Show Errors"
-msgstr "Zeige Fehler"
+msgstr "Fehler anzeigen"
 
 msgid "Load Tile"
 msgstr "Kachel laden"
@@ -10379,7 +10415,7 @@ msgstr ""
 "angesehen.<br>Informationen zum Hochladen von Spuren finden Sie hier:</html>"
 
 msgid "Customize track drawing"
-msgstr "Spur-Anzeige anpassen"
+msgstr "Spuranzeige anpassen"
 
 msgid "From"
 msgstr "Von"
@@ -10539,7 +10575,7 @@ msgstr ""
 "Offset abgeleitet werden könnte."
 
 msgid "Show Text/Icons"
-msgstr "Zeige Text/Symbole"
+msgstr "Text/Symbole anzeigen"
 
 msgid "Toggle visible state of the marker text and icons."
 msgstr "Sichtbarkeit von Textmarken und Symbolen umschalten."
@@ -11507,7 +11543,7 @@ msgstr ""
 "Spuranfang (wird immer genutzt, wenn keine anderen Marken verfügbar)."
 
 msgid "Show or hide the audio menu entry on the main menu bar."
-msgstr "Den Audio-Eintrag im Hauptmenü anzeigen oder verbergen."
+msgstr "Audiomenüeintrag auf der Hauptmenüleiste anzeigen oder ausblenden."
 
 msgid ""
 "Display a moving icon representing the point on the synchronized track where "
@@ -11673,15 +11709,15 @@ msgstr "Inaktive Datenebenen in einer anderen Farbe zeichnen."
 msgid ""
 "Apply antialiasing to the map view resulting in a smoother appearance."
 msgstr ""
-"Anti-Aliasing in der Kartenanzeige nutzen, um ein gefälligeres Aussehen zu "
+"Kantenglättung in der Kartenanzeige verwenden, um ein glatteres Aussehen zu "
 "erreichen."
 
 msgid ""
 "Apply antialiasing to the map view in wireframe mode resulting in a smoother "
 "appearance."
 msgstr ""
-"Anti-Aliasing in der Kartenanzeige in Drahtdarstellung nutzen, um ein "
-"gefälligeres Aussehen zu erreichen."
+"Kantenglättung in der Kartenanzeige im Drahtgittermodus verwenden, um ein "
+"glatteres Aussehen zu erreichen."
 
 msgid "Hightlight target nodes and ways while drawing or selecting"
 msgstr ""
@@ -11916,7 +11952,7 @@ msgid "Incorrect audio waypoint label pattern: {0}"
 msgstr "Ungültiges Muster für Audio-Wegpunkt-Bezeichnung: {0}"
 
 msgid "Show splash screen at startup"
-msgstr "Startbild anzeigen"
+msgstr "Begrüßungsbildschirm beim Start anzeigen"
 
 msgid "Show object ID in selection lists"
 msgstr "Objektkennung in Auswahllisten anzeigen"
@@ -12956,11 +12992,11 @@ msgstr ""
 
 msgid "Click test access to the OSM server with the current access token"
 msgstr ""
-"Klicken, um den Zugriff auf den OSM-Server mit der aktuellen Zugriffskennung "
-"zu testen"
+"Klicken Sie, um den Zugriff auf den OSM-Server mit der aktuellen "
+"Zugriffskennung zu testen"
 
 msgid "<html>Use the default OSM server URL (<strong>{0}</strong>)</html>"
-msgstr "<html>Standard OSM-Server-URL verwenden(<strong>{0}</strong>)</html>"
+msgstr "<html>Standard-OSM-Server-URL verwenden(<strong>{0}</strong>)</html>"
 
 msgid "Test the API URL"
 msgstr "API-URL testen"
@@ -12981,6 +13017,15 @@ msgstr "Der aktuelle Wert ist keine gültige URL."
 msgid "Please enter the OSM API URL."
 msgstr "Bitte die OSM API URL eingeben."
 
+msgid "Use Overpass server for object downloads"
+msgstr "Overpass-Server zum Herunterladen von Objekten verwenden"
+
+msgid "Overpass server: "
+msgstr "Overpass-Server: "
+
+msgid "Overpass server"
+msgstr "Overpass-Server"
+
 msgid "Proxy settings"
 msgstr "Proxy-Einstellungen"
 
@@ -13034,7 +13079,7 @@ msgid "Connection Settings"
 msgstr "Verbindungseinstellungen"
 
 msgid "Connection Settings for the OSM server."
-msgstr "Verbindungseinstellungen zum OSM-Server."
+msgstr "Verbindungseinstellungen für den OSM-Server."
 
 msgid "Action"
 msgstr "Aktion"
@@ -13311,7 +13356,7 @@ msgid "Search preset"
 msgstr "Vorlage suchen"
 
 msgid "Show preset search dialog"
-msgstr "Vorlagensuchdialog zeigen"
+msgstr "Vorlagensuchdialog anzeigen"
 
 msgid "Search presets"
 msgstr "Vorlagen suchen"
@@ -13555,7 +13600,7 @@ msgid "Downloading points {0} to {1}..."
 msgstr "Punkte {0} bis {1} werden heruntergeladen…"
 
 msgid "Contacting OSM Server..."
-msgstr "Zum OSM-Server wird verbunden …"
+msgstr "Kontaktaufnahme mit OSM-Server…"
 
 msgid "Downloading notes"
 msgstr "OSM-Notizen herunterladen"
@@ -13930,10 +13975,10 @@ msgid "Preparing upload request..."
 msgstr "Hochladeanfrage vorbereiten …"
 
 msgid "Waiting 10 seconds ... "
-msgstr "Warte 10 Sekunden … "
+msgstr "10 Sekunden wird gewartet … "
 
 msgid "Starting retry {0} of {1} in {2} seconds ..."
-msgstr "Starte Versuch {0} von {1} in {2} Sekunden …"
+msgstr "Versuch {0} von {1} wird in {2} Sekunden gestartet …"
 
 msgid "OK - trying again."
 msgstr "OK - erneuter Versuch."
@@ -13967,7 +14012,7 @@ msgid "The server replied an error with code {0}."
 msgstr "Der Server hat einen Fehler mit Kode [{0} gemeldet"
 
 msgid "OSM Server Files bzip2 compressed"
-msgstr "OSM-Server-Dateien (bzip2-komprimiert)"
+msgstr "OSM-Serverdateien (bzip2-komprimiert)"
 
 msgid "Prolog of OsmChange document already written. Please write only once."
 msgstr ""
@@ -14016,7 +14061,7 @@ msgstr ""
 "Position ({1},{2}) übersprungen."
 
 msgid "Parsing changeset content ..."
-msgstr "Inhalt des Änderungssatzes analysieren …"
+msgstr "Änderungssatzinhalt wird eingelesen …"
 
 msgid "Illegal boolean value for attribute ''{0}''. Got ''{1}''."
 msgstr ""
@@ -14059,13 +14104,13 @@ msgstr ""
 "aufgetreten.<br>Der Fehler lautet:<br>{0}</html>"
 
 msgid "OSM Server Files gzip compressed"
-msgstr "OSM-Server-Dateien (gzip-komprimiert)"
+msgstr "OSM-Serverdateien (gzip-komprimiert)"
 
 msgid "Parsing OSM history data ..."
 msgstr "OSM-Chronikdaten werden eingelesen …"
 
 msgid "OSM Server Files"
-msgstr "OSM-Server-Dateien"
+msgstr "OSM-Serverdateien"
 
 msgid "Invalid dataset"
 msgstr "Ungültiger Datensatz"
@@ -14180,7 +14225,7 @@ msgid "Parsing OSM data..."
 msgstr "OSM-Daten einlesen …"
 
 msgid "Preparing data set..."
-msgstr "Datensatz wird vorbereitet …"
+msgstr "Datensatz wird vorbereitet…"
 
 msgid "Line {0} column {1}: "
 msgstr "Zeile {0} Spalte {1}: "
@@ -14198,7 +14243,7 @@ msgid "Downloading changesets ..."
 msgstr "Änderungssätze werden heruntergeladen …"
 
 msgid "Reading changeset {0} ..."
-msgstr "Änderungssatz {0} einlesen …"
+msgstr "Änderungssatz {0} wird eingelesen …"
 
 msgid "Downloading changeset {0} ..."
 msgstr "Änderungssatz {0} wird heruntergeladen …"
@@ -14218,7 +14263,7 @@ msgid "Downloading history..."
 msgstr "Chronik wird heruntergeladen …"
 
 msgid "Contacting Server..."
-msgstr "Serververbindung …"
+msgstr "Kontaktaufnahme mit Server ..."
 
 msgid "Downloading OSM notes..."
 msgstr "OSM-Hinweise werden heruntergeladen …"
@@ -14226,7 +14271,7 @@ msgstr "OSM-Hinweise werden heruntergeladen …"
 msgid ""
 "Could not connect to the OSM server. Please check your internet connection."
 msgstr ""
-"Verbindung zum OSM-Server fehlgeschlagen. Bitte prüfen Sie Ihre "
+"Verbindung zum OSM-Server fehlgeschlagen. Bitte überprüfen Sie Ihre "
 "Internetverbindung."
 
 msgid "Reading error text failed."
@@ -14243,10 +14288,10 @@ msgstr ""
 "Ungültiger Wert \"{2}\" für das Attribut ''{0}'' des XML-Elements ''{1}''."
 
 msgid "Reading user info ..."
-msgstr "Benutzerinformationen lesen …"
+msgstr "Benutzerinformationen werden gelesen …"
 
 msgid "Starting to upload with one request per primitive ..."
-msgstr "Hochladen mit einer Anfrage pro Objekt beginnen …"
+msgstr "Hochladen wird mit einer Anfrage pro Objekt begonnen …"
 
 msgid "{0}% ({1}/{2}), {3} left. Uploading node ''{4}'' (id: {5})"
 msgstr ""
@@ -14283,7 +14328,7 @@ msgid "Unexpected id 0 for osm primitive found"
 msgstr "Unerwartete Kennung 0 für OSM-Primitive gefunden"
 
 msgid "OSM Server Files zip compressed"
-msgstr "OSM-Server-Dateien (zip-komprimiert)"
+msgstr "OSM-Serverdateien (zip-komprimiert)"
 
 msgid "Downloading data..."
 msgstr "Daten werden heruntergeladen…"
@@ -15008,7 +15053,7 @@ msgstr ""
 "wird ausgelassen. Die Fehlermeldung war: {1}"
 
 msgid "Processing plugin list from site ''{0}''"
-msgstr "Verarbeite Plugin-Liste der Quelle ''{0}''"
+msgstr "Plugin-Liste von Seite ''{0}'' wird verarbeitet"
 
 msgid "This is after the end of the recording"
 msgstr "Ende der Aufzeichnung überschritten"
@@ -15098,9 +15143,9 @@ msgid ""
 "<html>Failed to initialize communication with the OSM server {0}.<br>Check "
 "the server URL in your preferences and your internet connection."
 msgstr ""
-"<html>Initialisierung der Kommunikation mit dem OSM-Server {0} "
-"gescheitert.<br>Bitte überprüfen Sie die Server-URL in den Einstellungen und "
-"Ihre Internetverbindung."
+"<html>Initialisierung der Kommunikation mit dem OSM-Server {0} ist "
+"fehlgeschlagen.<br>Bitte überprüfen Sie die Server-URL in den Einstellungen "
+"und Ihre Internetverbindung."
 
 msgid ""
 "<html>Failed to authenticate at the OSM server ''{0}''.<br>You are using "
@@ -15321,8 +15366,8 @@ msgid ""
 "<html>Communication with the OSM server ''{0}'' timed out. Please retry "
 "later.</html>"
 msgstr ""
-"<html>Verbindung mit OSM Server ''{0}'' hat ein Time Out. Bitte später "
-"nochmal versuchen.</html>"
+"<html>Verbindung mit dem OSM-Server ''{0}'' hat die Zeit überschritten. "
+"Bitte versuchen Sie es später.</html>"
 
 msgid "no error message available"
 msgstr "Keine Fehlermeldung verfügbar"
@@ -15333,9 +15378,9 @@ msgid ""
 "message:<br><strong>Error code:<strong> {1}<br><strong>Error message "
 "(untranslated)</strong>: {2}</html>"
 msgstr ""
-"<html>Verbindung mit OSM Server ''{0}''fehlgeschlagen. Der Server "
-"antwortet<br> mit folgendem Fehler Code und der folgenden Fehler "
-"Meldung:<br><strong>Fehler Code:<strong> {1}<br><strong>Fehler Meldung "
+"<html>Verbindung mit dem OSM-Server ''{0}'' ist fehlgeschlagen. Der Server "
+"antwortet<br> mit folgendem Fehlercode und der folgenden "
+"Fehlermeldung:<br><strong>Fehlercode:<strong> {1}<br><strong>Fehlermeldung "
 "(nicht übersetzt)</strong>: {2}</html>"
 
 msgid ""
@@ -15413,7 +15458,7 @@ msgstr ""
 "Bitte versuchen Sie es später noch einmal."
 
 msgid "The OSM server ''{0}'' reported a bad request.<br>"
-msgstr "Der OSM-Server »{0}« meldet eine fehlerhafte Anfrage.<br>"
+msgstr "Der OSM-Server »{0}« meldete eine fehlerhafte Anfrage.<br>"
 
 msgid ""
 "The area you tried to download is too big or your request was too "
@@ -15528,6 +15573,9 @@ msgstr "URL enthält keinen gültigen {0}"
 msgid "reserved"
 msgstr "reserviert"
 
+msgid "Unable to delete old preferences file {0}"
+msgstr "Alte Einstellungsdatei {0} kann nicht gelöscht werden"
+
 msgid "Outdated Java version"
 msgstr "Veraltete Java-Version"
 
@@ -15641,6 +15689,9 @@ msgstr ""
 "werden, da diese keine JOSM-Objekte und keinen passenden Text enthält. "
 "</p></html>"
 
+msgid "Unable to delete file {0}"
+msgstr "Datei {0} kann nicht gelöscht werden"
+
 msgid "ms"
 msgstr "ms"
 
@@ -17206,8 +17257,8 @@ msgid ""
 "Implements a command line and enables to create your commands. See link for "
 "standard commands (arc, circle etc.)"
 msgstr ""
-"Implementiert eine Kommandozeile und erlaubt es Kommandos zu erstellen. "
-"Siehe Link für Standardkommandos (Bogen, Kreis, …)"
+"Implementiert eine Befehlszeile und ermöglicht das Erstellen Ihrer Befehle. "
+"Siehe Link für Standardbefehle (Bogen, Kreis, usw.)"
 
 msgid "(Warning: Experimental!) Tool for conflating (merging) data."
 msgstr "(Warnung: Experimentell!) Werkzeug zum Zusammenführen von Daten."
@@ -17411,9 +17462,10 @@ msgid ""
 "segments, area surrounded by a (simple) closed way and create measurement "
 "paths (which also can be imported from a gps layer)."
 msgstr ""
-"Bietet eine Maßanzeige und Ebene um Länge und Winkel von Segmenten, Flächen "
-"von (einfach) geschlossenen Linien zu messen. Außerdem können Messpfade (die "
-"auch von einer GPS-Ebene importiert werden können) angelegt werden."
+"Bietet eine Maßanzeige und eine Ebene, um die Länge und den Winkel von "
+"Segmenten, Flächen von (einfach) geschlossenen Linien zu messen. Außerdem "
+"können Messpfade (die auch von einer GPS-Ebene importiert werden können) "
+"angelegt werden."
 
 msgid "Merge overlapping part of ways."
 msgstr "Überlappendene Teile von Linien zusammenführen."
@@ -17556,8 +17608,8 @@ msgid ""
 "Renders routes (bus, hiking trails, bicycle routes, ..). Route types must be "
 "defined in routes.xml file in plugin directory"
 msgstr ""
-"Stellt Routen (Bus, Wanderwege, Fahrradwege, …) dar. Routentypen werden in "
-"der Datei routes.xml im Pluginverzeichnis definiert."
+"Stellt Routen (Bus, Wanderwege, Fahrradwege, …) dar. Routentypen müssen in "
+"der Datei routes.xml im Pluginverzeichnis definiert sein."
 
 msgid "Provides routing capabilities."
 msgstr "Bietet Routenführungsmöglichkeiten."
@@ -18936,6 +18988,9 @@ msgstr "Öffentlicher Verkehr (psv)"
 msgid "Tourist buses"
 msgstr "Tourismusbusse"
 
+msgid "Max. speed Heavy Goods Vehicles (km/h)"
+msgstr "Höchstgeschwindigkeit Schwerlastwagen (km/h)"
+
 msgid "Min. speed (km/h)"
 msgstr "Min. Geschwindigkeit (km/h)"
 
@@ -21260,12 +21315,6 @@ msgstr "Arztpraxis"
 msgid "Dentist"
 msgstr "Zahnarzt"
 
-msgid "Nursing Home"
-msgstr "Pflegeheim"
-
-msgid "Retirement Home"
-msgstr "Altersheim"
-
 msgid "Pharmacy"
 msgstr "Apotheke"
 
@@ -21293,6 +21342,31 @@ msgstr "(Internationale Nummer verwenden, z.B. +49-123-45678)"
 msgid "Veterinary"
 msgstr "Tierarzt"
 
+msgid "Social Facility"
+msgstr "Sozialeinrichtung"
+
+msgid "Nursing Home"
+msgstr "Pflegeheim"
+
+msgid "Group Home"
+msgstr "Wohngruppe"
+
+msgid "For"
+msgstr "Für"
+
+msgid "Assisted Living"
+msgstr "Betreutes Wohnen"
+
+msgid "Outreach"
+msgstr ""
+
+msgctxt "social_facility"
+msgid "Shelter"
+msgstr "Unterkunft"
+
+msgid "Food Bank"
+msgstr "Tafel"
+
 msgid "Toilets/Restrooms"
 msgstr "Toiletten"
 
@@ -21335,6 +21409,13 @@ msgstr "hocken"
 msgid "urinal"
 msgstr "Pissoir"
 
+msgctxt "toilets"
+msgid "Diaper"
+msgstr "Wickelraum"
+
+msgid "room"
+msgstr "Raum"
+
 msgid "Post Box"
 msgstr "Briefkasten"
 
@@ -25364,7 +25445,7 @@ msgstr ""
 "Fehler: {0}"
 
 msgid "Processing..."
-msgstr "Verarbeitung …"
+msgstr "Verarbeitung…"
 
 msgid "Aborted"
 msgstr "Abgebrochen"
@@ -25435,6 +25516,12 @@ msgstr "Spur herunterladen …"
 msgid "Download GPX track from openstreetmap.org"
 msgstr "GPX-Spur von openstreetmap.org herunterladen"
 
+msgid "Download Track"
+msgstr "Spur herunterladen"
+
+msgid "Filename"
+msgstr "Dateiname"
+
 msgid ""
 "Error occurred while parsing gpx file {0}. Only a part of the file will be "
 "available."
@@ -25442,20 +25529,14 @@ msgstr ""
 "Es trat ein Fehler beim Einlesen der GPX-Datei ''{0}'' auf. Datei wird nur "
 "teilweise verwendet."
 
-msgid "Invalid URL {0}"
-msgstr "Ungültige Adresse {0}"
-
 msgid "Error fetching URL {0}"
 msgstr "Fehler beim Empfangen der Adresse {0}"
 
 msgid "Error parsing data from URL {0}"
 msgstr "Fehler beim Auswerten der Daten der Adresse {0}"
 
-msgid "Download Track"
-msgstr "Spur herunterladen"
-
-msgid "Filename"
-msgstr "Dateiname"
+msgid "Invalid URL {0}"
+msgstr "Ungültige Adresse {0}"
 
 msgid "Private (only shared as anonymous, unordered points)"
 msgstr "Privat (nur als anonyme, ungeordnete Punkte verfügbar)"
@@ -25507,9 +25588,6 @@ msgstr "Keine GPX-Ebene gewählt. Kann GPS-Spur nicht hochladen."
 msgid "Uploading trace ..."
 msgstr "Spur wird hochgeladen …"
 
-msgid "Connecting..."
-msgstr "Verbinden …"
-
 msgid "Upload canceled"
 msgstr "Hochladen abgebrochen"
 
@@ -27029,7 +27107,7 @@ msgstr ""
 "Speicherverbrauch)"
 
 msgid "Display crosspieces:"
-msgstr "Anzeige der Querstücke:"
+msgstr "Querstücke anzeigen:"
 
 msgid "Allows an automatic caching"
 msgstr "Automatisches Zwischenspeichern ermöglichen"
@@ -27085,7 +27163,7 @@ msgid "Create boundary"
 msgstr "Grenze erstellen"
 
 msgid "Contacting cadastre WMS ..."
-msgstr "Kataster-WMS wird kontaktiert …"
+msgstr "Kontaktaufnahme mit Kataster-WMS …"
 
 msgid "Image already loaded"
 msgstr "Bild wurde schon geladen."
@@ -27215,7 +27293,7 @@ msgid "Get a new cookie (session timeout)"
 msgstr "Einen neuen Cookie holen (Sitzung abgelaufen)"
 
 msgid "Save image as..."
-msgstr "BIld speichern unter …"
+msgstr "BIld speichern als…"
 
 msgid "PNG files (*.png)"
 msgstr "PNG-Bilder (*.png)"
@@ -28109,7 +28187,7 @@ msgid "Graph View Dialog"
 msgstr "Graphenanzeigedialog"
 
 msgid "Open the dialog for graph view configuration."
-msgstr "Den Konfigurationsdialog für Graphenanzeige öffnen."
+msgstr "Konfigurationsdialog für Graphenanzeige öffnen."
 
 msgid "default"
 msgstr "Standard"
@@ -30005,7 +30083,7 @@ msgid "Processing module site cache icon files..."
 msgstr "Modulseiten-Zwischenspeichersymboldateien werden verarbeitet…"
 
 msgid "Processing module files..."
-msgstr "Moduldateien werden verarbeitet …"
+msgstr "Moduldateien werden verarbeitet…"
 
 msgid "Download module list..."
 msgstr "Modulliste herunterladen …"
@@ -30065,7 +30143,7 @@ msgid "Firefox executable"
 msgstr "Firefox-Programm"
 
 msgid "OSM Server Files pbf compressed"
-msgstr "OSM-Server-Dateien pbf-komprimiert"
+msgstr "OSM-Serverdateien (pbf-komprimiert)"
 
 msgid "Download PBF"
 msgstr "PBF herunterladen"
@@ -30378,6 +30456,69 @@ msgstr ""
 msgid "Please load some photos."
 msgstr "Bitte einige Fotos laden."
 
+msgid "Edit photo GPS data"
+msgstr "GPS-Daten des Fotos bearbeiten"
+
+msgid "Edit GPS data of selected photo."
+msgstr "GPS-Daten des ausgewählten Fotos bearbeiten."
+
+msgid "Edit Photo GPS Data"
+msgstr "GPS-Daten des Fotos bearbeiten"
+
+msgid "Please select an image first."
+msgstr "Bitte wählen Sie zuerst ein Bild aus."
+
+msgid "No image selected"
+msgstr "Kein Bild ausgewählt"
+
+msgid "(Empty values delete the according fields.)"
+msgstr "(Leere Werte löschen die entsprechenden Felder.)"
+
+msgid "coordinates"
+msgstr "Koordinaten"
+
+msgid "Latitude and longitude"
+msgstr "Breiten- und Längengrad"
+
+msgid "Edit Image Coordinates"
+msgstr "Bildkoordinaten bearbeiten"
+
+msgid "Edit coordinates in separate editor"
+msgstr "Koordinaten in separatem Editor bearbeiten"
+
+msgid "altitude"
+msgstr "Höhe"
+
+msgid "Altitude:"
+msgstr "Höhe:"
+
+msgid "speed"
+msgstr "Geschwindigkeit"
+
+msgid "positive number or empty"
+msgstr "positive Zahl oder leer"
+
+msgid "Speed:"
+msgstr "Geschwindigkeit:"
+
+msgid "direction"
+msgstr "Richtung"
+
+msgid "range -360.0 .. 360.0, or empty"
+msgstr "Bereich -360.0 .. 360.0, oder leer"
+
+msgid "Direction:"
+msgstr "Richtung:"
+
+msgid "°"
+msgstr "°"
+
+msgid "Undo changes made in this dialog"
+msgstr "In diesem Dialog gemachte Änderungen rückgängig machen"
+
+msgid "Reload GPS data from image file"
+msgstr "GPS-Daten aus Bilddatei neu laden"
+
 msgid "New layer for untagged images"
 msgstr "Neue Ebene für unreferenzierte Bilder"
 
@@ -30419,7 +30560,7 @@ msgid "Calibration reset"
 msgstr "Kalibrierung zurücksetzen"
 
 msgid "Save Picture Calibration..."
-msgstr "Bildeinstellungen speichern …"
+msgstr "Bildeinstellungen speichern…"
 
 msgid "Saves calibration data to a file"
 msgstr "Bildeinstellungen in einer Datei speichern"
@@ -30819,7 +30960,7 @@ msgid " [ID] {0}"
 msgstr " [ID] {0}"
 
 msgid "Route patterns ..."
-msgstr "Routen-Muster …"
+msgstr "Routenmuster …"
 
 msgid "Edit Route patterns for public transport"
 msgstr "Routen-Muster für den öffentlichen Verkehr ändern"
@@ -30879,7 +31020,7 @@ msgid "Public Transport: Change stop type"
 msgstr "Öffentlicher Verkehr: Haltestellenart ändern"
 
 msgid "Create Stops from GPX ..."
-msgstr "Erzeuge Haltepunkte aus GPX …"
+msgstr "Haltepunkte aus GPX erstellen …"
 
 msgid "Create Stops from a GPX file"
 msgstr "Erzeuge Haltepunkte aus einer GPX-Datei"
@@ -32383,7 +32524,7 @@ msgid "Errors/Warnings"
 msgstr "Fehler/Warnungen"
 
 msgid "Show errors and warnings related to this turn restriction"
-msgstr "Zeige Fehler und Warnungen für diese Abbiegebeschränkung"
+msgstr "Fehler und Warnungen für diese Abbiegebeschränkung anzeigen"
 
 msgid "Create a new turn restriction in layer ''{0}''"
 msgstr "Erstelle eine neue Abbiegebeschränkung in der Ebene ''{0}''"
@@ -32679,7 +32820,7 @@ msgstr ""
 "Fortgeschrittenen-Editor möglich."
 
 msgid "Display and edit list of via-objects in the Basic Editor"
-msgstr "Zeige und editiere die Liste der Zwischenobjekte im Standardeditor"
+msgstr "Liste der Zwischenobjekte im Standardeditor anzeigen und bearbeiten"
 
 msgid "Road signs - Set A"
 msgstr "Verkehrszeichen - Satz A"
@@ -33699,9 +33840,6 @@ msgid "Fetches all coordinates from Wikipedia in the current view"
 msgstr ""
 "Alle Koordinaten von Wikipedia-Artikeln der aktuellen Ansicht herunterladen"
 
-msgid "coordinates"
-msgstr "Koordinaten"
-
 msgid "Category"
 msgstr "Kategorie"
 
@@ -33747,3 +33885,6 @@ msgstr "Losfahren"
 
 msgid "Drive a race car on this layer"
 msgstr "Ein Rennauto auf dieser Ebene fahren"
+
+#~ msgid "Retirement Home"
+#~ msgstr "Altersheim"
diff --git a/i18n/po/de_DE.po b/i18n/po/de_DE.po
index 4e55db9..14297b9 100644
--- a/i18n/po/de_DE.po
+++ b/i18n/po/de_DE.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: josm\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-12-31 03:40+0100\n"
+"POT-Creation-Date: 2016-01-06 03:38+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: 2015-12-31 05:07+0000\n"
-"X-Generator: Launchpad (build 17865)\n"
+"X-Launchpad-Export-Date: 2016-01-06 05:09+0000\n"
+"X-Generator: Launchpad (build 17876)\n"
 "Language: \n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -1065,9 +1065,6 @@ msgstr ""
 msgid "Overpass query: "
 msgstr ""
 
-msgid "Overpass server: "
-msgstr ""
-
 msgid "Paste"
 msgstr ""
 
@@ -1357,6 +1354,9 @@ msgstr ""
 msgid "Split a way at the selected node."
 msgstr ""
 
+msgid "Cannot split since another split operation is already in progress"
+msgstr ""
+
 msgid ""
 "The current selection cannot be used for splitting - no node is selected."
 msgstr ""
@@ -1468,6 +1468,27 @@ msgid ""
 "own copy and all nodes will be selected."
 msgstr ""
 
+msgid "Existing node"
+msgstr ""
+
+msgid "Both nodes"
+msgstr ""
+
+msgid "New node"
+msgstr ""
+
+msgid "Tags / Memberships"
+msgstr ""
+
+msgid "Unglue"
+msgstr ""
+
+msgid "Where should the tags of the node be put?"
+msgstr ""
+
+msgid "Where should the memberships of this node be put?"
+msgstr ""
+
 msgid "Unglued Node"
 msgstr ""
 
@@ -3058,6 +3079,15 @@ msgstr ""
 msgid "Restoring files"
 msgstr ""
 
+msgid "Unable to delete backup file {0}"
+msgstr ""
+
+msgid "Unable to delete PID file {0}"
+msgstr ""
+
+msgid "Unable to delete archived backup file {0}"
+msgstr ""
+
 msgid "Illegal latitude value ''{0}''"
 msgstr ""
 
@@ -4216,6 +4246,9 @@ msgstr ""
 msgid "No \"to\" way found"
 msgstr ""
 
+msgid "\"from\" way equals \"to\" way"
+msgstr ""
+
 msgid "No \"via\" node or way found"
 msgstr ""
 
@@ -7013,9 +7046,6 @@ msgstr ""
 msgid "Tags: {0} / Memberships: {1}"
 msgstr ""
 
-msgid "Tags / Memberships"
-msgstr ""
-
 msgid "Delete the selected key in all objects"
 msgstr ""
 
@@ -11620,6 +11650,15 @@ msgstr ""
 msgid "Please enter the OSM API URL."
 msgstr ""
 
+msgid "Use Overpass server for object downloads"
+msgstr ""
+
+msgid "Overpass server: "
+msgstr ""
+
+msgid "Overpass server"
+msgstr ""
+
 msgid "Proxy settings"
 msgstr ""
 
@@ -13758,6 +13797,9 @@ msgstr ""
 msgid "reserved"
 msgstr ""
 
+msgid "Unable to delete old preferences file {0}"
+msgstr ""
+
 msgid "Outdated Java version"
 msgstr ""
 
@@ -13849,6 +13891,9 @@ msgid ""
 "contain any JOSM object or suitable text. </p></html>"
 msgstr ""
 
+msgid "Unable to delete file {0}"
+msgstr ""
+
 msgid "ms"
 msgstr ""
 
@@ -16966,6 +17011,9 @@ msgstr ""
 msgid "Tourist buses"
 msgstr ""
 
+msgid "Max. speed Heavy Goods Vehicles (km/h)"
+msgstr ""
+
 msgid "Min. speed (km/h)"
 msgstr ""
 
@@ -19263,12 +19311,6 @@ msgstr ""
 msgid "Dentist"
 msgstr ""
 
-msgid "Nursing Home"
-msgstr ""
-
-msgid "Retirement Home"
-msgstr ""
-
 msgid "Pharmacy"
 msgstr ""
 
@@ -19296,6 +19338,31 @@ msgstr ""
 msgid "Veterinary"
 msgstr ""
 
+msgid "Social Facility"
+msgstr ""
+
+msgid "Nursing Home"
+msgstr ""
+
+msgid "Group Home"
+msgstr ""
+
+msgid "For"
+msgstr ""
+
+msgid "Assisted Living"
+msgstr ""
+
+msgid "Outreach"
+msgstr ""
+
+msgctxt "social_facility"
+msgid "Shelter"
+msgstr ""
+
+msgid "Food Bank"
+msgstr ""
+
 msgid "Toilets/Restrooms"
 msgstr ""
 
@@ -19338,6 +19405,13 @@ msgstr ""
 msgid "urinal"
 msgstr ""
 
+msgctxt "toilets"
+msgid "Diaper"
+msgstr ""
+
+msgid "room"
+msgstr ""
+
 msgid "Post Box"
 msgstr ""
 
@@ -23375,24 +23449,24 @@ msgstr ""
 msgid "Download GPX track from openstreetmap.org"
 msgstr ""
 
+msgid "Download Track"
+msgstr ""
+
+msgid "Filename"
+msgstr ""
+
 msgid ""
 "Error occurred while parsing gpx file {0}. Only a part of the file will be "
 "available."
 msgstr ""
 
-msgid "Invalid URL {0}"
-msgstr ""
-
 msgid "Error fetching URL {0}"
 msgstr ""
 
 msgid "Error parsing data from URL {0}"
 msgstr ""
 
-msgid "Download Track"
-msgstr ""
-
-msgid "Filename"
+msgid "Invalid URL {0}"
 msgstr ""
 
 msgid "Private (only shared as anonymous, unordered points)"
@@ -23442,9 +23516,6 @@ msgstr ""
 msgid "Uploading trace ..."
 msgstr ""
 
-msgid "Connecting..."
-msgstr ""
-
 msgid "Upload canceled"
 msgstr ""
 
@@ -27887,6 +27958,69 @@ msgstr ""
 msgid "Please load some photos."
 msgstr ""
 
+msgid "Edit photo GPS data"
+msgstr ""
+
+msgid "Edit GPS data of selected photo."
+msgstr ""
+
+msgid "Edit Photo GPS Data"
+msgstr ""
+
+msgid "Please select an image first."
+msgstr ""
+
+msgid "No image selected"
+msgstr ""
+
+msgid "(Empty values delete the according fields.)"
+msgstr ""
+
+msgid "coordinates"
+msgstr ""
+
+msgid "Latitude and longitude"
+msgstr ""
+
+msgid "Edit Image Coordinates"
+msgstr ""
+
+msgid "Edit coordinates in separate editor"
+msgstr ""
+
+msgid "altitude"
+msgstr ""
+
+msgid "Altitude:"
+msgstr ""
+
+msgid "speed"
+msgstr ""
+
+msgid "positive number or empty"
+msgstr ""
+
+msgid "Speed:"
+msgstr ""
+
+msgid "direction"
+msgstr ""
+
+msgid "range -360.0 .. 360.0, or empty"
+msgstr ""
+
+msgid "Direction:"
+msgstr ""
+
+msgid "°"
+msgstr ""
+
+msgid "Undo changes made in this dialog"
+msgstr ""
+
+msgid "Reload GPS data from image file"
+msgstr ""
+
 msgid "New layer for untagged images"
 msgstr ""
 
@@ -30903,9 +31037,6 @@ msgstr ""
 msgid "Fetches all coordinates from Wikipedia in the current view"
 msgstr ""
 
-msgid "coordinates"
-msgstr ""
-
 msgid "Category"
 msgstr ""
 
diff --git a/i18n/po/el.po b/i18n/po/el.po
index 816f36b..40fd273 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: 2015-12-31 03:40+0100\n"
+"POT-Creation-Date: 2016-01-06 03:38+0100\n"
 "PO-Revision-Date: 2015-10-14 13:30+0000\n"
 "Last-Translator: aitolos <Unknown>\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: 2015-12-31 04:44+0000\n"
-"X-Generator: Launchpad (build 17865)\n"
+"X-Launchpad-Export-Date: 2016-01-06 04:43+0000\n"
+"X-Generator: Launchpad (build 17876)\n"
 "Language: el\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -1137,9 +1137,6 @@ msgstr ""
 msgid "Overpass query: "
 msgstr ""
 
-msgid "Overpass server: "
-msgstr ""
-
 msgid "Paste"
 msgstr "Επικόλληση"
 
@@ -1449,6 +1446,9 @@ msgstr "Διαίρεση Διαδρομής"
 msgid "Split a way at the selected node."
 msgstr "Διαίρεση διαδρομής στον επιλεγμένο κόμβο."
 
+msgid "Cannot split since another split operation is already in progress"
+msgstr ""
+
 msgid ""
 "The current selection cannot be used for splitting - no node is selected."
 msgstr ""
@@ -1575,6 +1575,27 @@ msgid ""
 "own copy and all nodes will be selected."
 msgstr ""
 
+msgid "Existing node"
+msgstr ""
+
+msgid "Both nodes"
+msgstr ""
+
+msgid "New node"
+msgstr ""
+
+msgid "Tags / Memberships"
+msgstr ""
+
+msgid "Unglue"
+msgstr ""
+
+msgid "Where should the tags of the node be put?"
+msgstr ""
+
+msgid "Where should the memberships of this node be put?"
+msgstr ""
+
 msgid "Unglued Node"
 msgstr "Αποσυνδεδεμένος Κόμβος"
 
@@ -3235,6 +3256,15 @@ msgstr ""
 msgid "Restoring files"
 msgstr "Επαναφορά αρχείων"
 
+msgid "Unable to delete backup file {0}"
+msgstr ""
+
+msgid "Unable to delete PID file {0}"
+msgstr ""
+
+msgid "Unable to delete archived backup file {0}"
+msgstr ""
+
 msgid "Illegal latitude value ''{0}''"
 msgstr "Μη αποδεκτή τιμή Γ/Πλάτους \"{0}\""
 
@@ -4409,6 +4439,9 @@ msgstr "Δεν βρέθηκε διαδρομή \"από\""
 msgid "No \"to\" way found"
 msgstr "Δεν βρέθηκε διαδρομή \"προς\""
 
+msgid "\"from\" way equals \"to\" way"
+msgstr ""
+
 msgid "No \"via\" node or way found"
 msgstr "Δεν βρέθηκε κόμβος ή διαδρομή \"μέσω\""
 
@@ -7263,9 +7296,6 @@ msgstr ""
 msgid "Tags: {0} / Memberships: {1}"
 msgstr ""
 
-msgid "Tags / Memberships"
-msgstr ""
-
 msgid "Delete the selected key in all objects"
 msgstr "Διαγραφή του επιλεγμένου κλειδιού από όλα τα αντικείμενα"
 
@@ -11968,6 +11998,15 @@ msgstr ""
 msgid "Please enter the OSM API URL."
 msgstr ""
 
+msgid "Use Overpass server for object downloads"
+msgstr ""
+
+msgid "Overpass server: "
+msgstr ""
+
+msgid "Overpass server"
+msgstr ""
+
 msgid "Proxy settings"
 msgstr "Ρυθμίσεις διαμεσολαβητή"
 
@@ -14145,6 +14184,9 @@ msgstr ""
 msgid "reserved"
 msgstr ""
 
+msgid "Unable to delete old preferences file {0}"
+msgstr ""
+
 msgid "Outdated Java version"
 msgstr ""
 
@@ -14236,6 +14278,9 @@ msgid ""
 "contain any JOSM object or suitable text. </p></html>"
 msgstr ""
 
+msgid "Unable to delete file {0}"
+msgstr ""
+
 msgid "ms"
 msgstr ""
 
@@ -17356,6 +17401,9 @@ msgstr "Μέσα Μαζικής Μεταφοράς (μμμ)"
 msgid "Tourist buses"
 msgstr ""
 
+msgid "Max. speed Heavy Goods Vehicles (km/h)"
+msgstr ""
+
 msgid "Min. speed (km/h)"
 msgstr "Ελαχ. ταχύτητα (χαω)"
 
@@ -19653,12 +19701,6 @@ msgstr ""
 msgid "Dentist"
 msgstr "Οδοντίατρος"
 
-msgid "Nursing Home"
-msgstr ""
-
-msgid "Retirement Home"
-msgstr ""
-
 msgid "Pharmacy"
 msgstr "Φαρμακείο"
 
@@ -19686,6 +19728,31 @@ msgstr "(Χρησιμοποιήστε διεθνή κωδικό, όπως +12-34
 msgid "Veterinary"
 msgstr "Κτηνιατρίο"
 
+msgid "Social Facility"
+msgstr ""
+
+msgid "Nursing Home"
+msgstr ""
+
+msgid "Group Home"
+msgstr ""
+
+msgid "For"
+msgstr ""
+
+msgid "Assisted Living"
+msgstr ""
+
+msgid "Outreach"
+msgstr ""
+
+msgctxt "social_facility"
+msgid "Shelter"
+msgstr ""
+
+msgid "Food Bank"
+msgstr ""
+
 msgid "Toilets/Restrooms"
 msgstr ""
 
@@ -19728,6 +19795,13 @@ msgstr ""
 msgid "urinal"
 msgstr ""
 
+msgctxt "toilets"
+msgid "Diaper"
+msgstr ""
+
+msgid "room"
+msgstr ""
+
 msgid "Post Box"
 msgstr "Γραμματοκιβώτιο"
 
@@ -23765,25 +23839,25 @@ msgstr "Λήψη Ίχνους ..."
 msgid "Download GPX track from openstreetmap.org"
 msgstr "Λήψη ίχνους GPX από το openstreetmap.org"
 
+msgid "Download Track"
+msgstr "Λήψη Ίχνους"
+
+msgid "Filename"
+msgstr "Όνομα αρχείου"
+
 msgid ""
 "Error occurred while parsing gpx file {0}. Only a part of the file will be "
 "available."
 msgstr ""
 
-msgid "Invalid URL {0}"
-msgstr ""
-
 msgid "Error fetching URL {0}"
 msgstr ""
 
 msgid "Error parsing data from URL {0}"
 msgstr ""
 
-msgid "Download Track"
-msgstr "Λήψη Ίχνους"
-
-msgid "Filename"
-msgstr "Όνομα αρχείου"
+msgid "Invalid URL {0}"
+msgstr ""
 
 msgid "Private (only shared as anonymous, unordered points)"
 msgstr ""
@@ -23832,9 +23906,6 @@ msgstr ""
 msgid "Uploading trace ..."
 msgstr ""
 
-msgid "Connecting..."
-msgstr "Σύνδεση..."
-
 msgid "Upload canceled"
 msgstr ""
 
@@ -28304,6 +28375,69 @@ msgstr ""
 msgid "Please load some photos."
 msgstr ""
 
+msgid "Edit photo GPS data"
+msgstr ""
+
+msgid "Edit GPS data of selected photo."
+msgstr ""
+
+msgid "Edit Photo GPS Data"
+msgstr ""
+
+msgid "Please select an image first."
+msgstr ""
+
+msgid "No image selected"
+msgstr ""
+
+msgid "(Empty values delete the according fields.)"
+msgstr ""
+
+msgid "coordinates"
+msgstr "συντεταγμένες"
+
+msgid "Latitude and longitude"
+msgstr ""
+
+msgid "Edit Image Coordinates"
+msgstr ""
+
+msgid "Edit coordinates in separate editor"
+msgstr ""
+
+msgid "altitude"
+msgstr ""
+
+msgid "Altitude:"
+msgstr ""
+
+msgid "speed"
+msgstr ""
+
+msgid "positive number or empty"
+msgstr ""
+
+msgid "Speed:"
+msgstr ""
+
+msgid "direction"
+msgstr ""
+
+msgid "range -360.0 .. 360.0, or empty"
+msgstr ""
+
+msgid "Direction:"
+msgstr ""
+
+msgid "°"
+msgstr ""
+
+msgid "Undo changes made in this dialog"
+msgstr ""
+
+msgid "Reload GPS data from image file"
+msgstr ""
+
 msgid "New layer for untagged images"
 msgstr ""
 
@@ -31373,9 +31507,6 @@ msgstr "{0}.Wikipedia.org: {1}"
 msgid "Fetches all coordinates from Wikipedia in the current view"
 msgstr ""
 
-msgid "coordinates"
-msgstr "συντεταγμένες"
-
 msgid "Category"
 msgstr "Κατηγορία"
 
diff --git a/i18n/po/en_AU.po b/i18n/po/en_AU.po
index 151ef0a..4396ff2 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: 2015-12-31 03:40+0100\n"
+"POT-Creation-Date: 2016-01-06 03:38+0100\n"
 "PO-Revision-Date: 2015-06-08 12:52+0000\n"
 "Last-Translator: Mark Pulley <mrpulley at lizzy.com.au>\n"
 "Language-Team: English (Australia) <en_AU at li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Launchpad-Export-Date: 2015-12-31 05:06+0000\n"
-"X-Generator: Launchpad (build 17865)\n"
+"X-Launchpad-Export-Date: 2016-01-06 05:07+0000\n"
+"X-Generator: Launchpad (build 17876)\n"
 "Language: \n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -1130,9 +1130,6 @@ msgstr ""
 msgid "Overpass query: "
 msgstr ""
 
-msgid "Overpass server: "
-msgstr ""
-
 msgid "Paste"
 msgstr "Paste"
 
@@ -1438,6 +1435,9 @@ msgstr "Split Way"
 msgid "Split a way at the selected node."
 msgstr "Split a way at the selected node."
 
+msgid "Cannot split since another split operation is already in progress"
+msgstr ""
+
 msgid ""
 "The current selection cannot be used for splitting - no node is selected."
 msgstr ""
@@ -1567,6 +1567,27 @@ msgstr ""
 "their\n"
 "own copy and all nodes will be selected."
 
+msgid "Existing node"
+msgstr ""
+
+msgid "Both nodes"
+msgstr ""
+
+msgid "New node"
+msgstr ""
+
+msgid "Tags / Memberships"
+msgstr "Tags / Memberships"
+
+msgid "Unglue"
+msgstr ""
+
+msgid "Where should the tags of the node be put?"
+msgstr ""
+
+msgid "Where should the memberships of this node be put?"
+msgstr ""
+
 msgid "Unglued Node"
 msgstr "Unglued Node"
 
@@ -3268,6 +3289,15 @@ msgstr "Your work has been saved automatically."
 msgid "Restoring files"
 msgstr "Restoring files"
 
+msgid "Unable to delete backup file {0}"
+msgstr ""
+
+msgid "Unable to delete PID file {0}"
+msgstr ""
+
+msgid "Unable to delete archived backup file {0}"
+msgstr ""
+
 msgid "Illegal latitude value ''{0}''"
 msgstr "Illegal latitude value ''{0}''"
 
@@ -4495,6 +4525,9 @@ msgstr "No \"from\" way found"
 msgid "No \"to\" way found"
 msgstr "No \"to\" way found"
 
+msgid "\"from\" way equals \"to\" way"
+msgstr ""
+
 msgid "No \"via\" node or way found"
 msgstr "No \"via\" node or way found"
 
@@ -7458,9 +7491,6 @@ msgstr "Objects: {2} / Tags: {0} / Memberships: {1}"
 msgid "Tags: {0} / Memberships: {1}"
 msgstr "Tags: {0} / Memberships: {1}"
 
-msgid "Tags / Memberships"
-msgstr "Tags / Memberships"
-
 msgid "Delete the selected key in all objects"
 msgstr "Delete the selected key in all objects"
 
@@ -12445,6 +12475,15 @@ msgstr "The current value is not a valid URL"
 msgid "Please enter the OSM API URL."
 msgstr "Please enter the OSM API URL."
 
+msgid "Use Overpass server for object downloads"
+msgstr ""
+
+msgid "Overpass server: "
+msgstr ""
+
+msgid "Overpass server"
+msgstr ""
+
 msgid "Proxy settings"
 msgstr "Proxy settings"
 
@@ -14713,6 +14752,9 @@ msgstr ""
 msgid "reserved"
 msgstr ""
 
+msgid "Unable to delete old preferences file {0}"
+msgstr ""
+
 msgid "Outdated Java version"
 msgstr ""
 
@@ -14804,6 +14846,9 @@ msgid ""
 "contain any JOSM object or suitable text. </p></html>"
 msgstr ""
 
+msgid "Unable to delete file {0}"
+msgstr ""
+
 msgid "ms"
 msgstr ""
 
@@ -17960,6 +18005,9 @@ msgstr "Public Service Vehicles (psv)"
 msgid "Tourist buses"
 msgstr ""
 
+msgid "Max. speed Heavy Goods Vehicles (km/h)"
+msgstr ""
+
 msgid "Min. speed (km/h)"
 msgstr "Min. speed (km/h)"
 
@@ -20257,12 +20305,6 @@ msgstr ""
 msgid "Dentist"
 msgstr "Dentist"
 
-msgid "Nursing Home"
-msgstr ""
-
-msgid "Retirement Home"
-msgstr ""
-
 msgid "Pharmacy"
 msgstr "Pharmacy"
 
@@ -20290,6 +20332,31 @@ msgstr "(Use international code, like +12-345-67890)"
 msgid "Veterinary"
 msgstr "Veterinary"
 
+msgid "Social Facility"
+msgstr ""
+
+msgid "Nursing Home"
+msgstr ""
+
+msgid "Group Home"
+msgstr ""
+
+msgid "For"
+msgstr ""
+
+msgid "Assisted Living"
+msgstr ""
+
+msgid "Outreach"
+msgstr ""
+
+msgctxt "social_facility"
+msgid "Shelter"
+msgstr ""
+
+msgid "Food Bank"
+msgstr ""
+
 msgid "Toilets/Restrooms"
 msgstr ""
 
@@ -20332,6 +20399,13 @@ msgstr ""
 msgid "urinal"
 msgstr ""
 
+msgctxt "toilets"
+msgid "Diaper"
+msgstr ""
+
+msgid "room"
+msgstr ""
+
 msgid "Post Box"
 msgstr "Post Box"
 
@@ -24371,26 +24445,26 @@ msgstr ""
 msgid "Download GPX track from openstreetmap.org"
 msgstr ""
 
+msgid "Download Track"
+msgstr ""
+
+msgid "Filename"
+msgstr "Filename"
+
 msgid ""
 "Error occurred while parsing gpx file {0}. Only a part of the file will be "
 "available."
 msgstr ""
 
-msgid "Invalid URL {0}"
-msgstr ""
-
 msgid "Error fetching URL {0}"
 msgstr ""
 
 msgid "Error parsing data from URL {0}"
 msgstr ""
 
-msgid "Download Track"
+msgid "Invalid URL {0}"
 msgstr ""
 
-msgid "Filename"
-msgstr "Filename"
-
 msgid "Private (only shared as anonymous, unordered points)"
 msgstr "Private (only shared as anonymous, unordered points)"
 
@@ -24440,9 +24514,6 @@ msgstr "No GPX layer selected. Cannot upload a trace."
 msgid "Uploading trace ..."
 msgstr ""
 
-msgid "Connecting..."
-msgstr "Connecting..."
-
 msgid "Upload canceled"
 msgstr ""
 
@@ -28948,6 +29019,69 @@ msgstr ""
 msgid "Please load some photos."
 msgstr ""
 
+msgid "Edit photo GPS data"
+msgstr ""
+
+msgid "Edit GPS data of selected photo."
+msgstr ""
+
+msgid "Edit Photo GPS Data"
+msgstr ""
+
+msgid "Please select an image first."
+msgstr ""
+
+msgid "No image selected"
+msgstr ""
+
+msgid "(Empty values delete the according fields.)"
+msgstr ""
+
+msgid "coordinates"
+msgstr ""
+
+msgid "Latitude and longitude"
+msgstr ""
+
+msgid "Edit Image Coordinates"
+msgstr ""
+
+msgid "Edit coordinates in separate editor"
+msgstr ""
+
+msgid "altitude"
+msgstr ""
+
+msgid "Altitude:"
+msgstr ""
+
+msgid "speed"
+msgstr ""
+
+msgid "positive number or empty"
+msgstr ""
+
+msgid "Speed:"
+msgstr ""
+
+msgid "direction"
+msgstr ""
+
+msgid "range -360.0 .. 360.0, or empty"
+msgstr ""
+
+msgid "Direction:"
+msgstr ""
+
+msgid "°"
+msgstr ""
+
+msgid "Undo changes made in this dialog"
+msgstr ""
+
+msgid "Reload GPS data from image file"
+msgstr ""
+
 msgid "New layer for untagged images"
 msgstr ""
 
@@ -31981,9 +32115,6 @@ msgstr ""
 msgid "Fetches all coordinates from Wikipedia in the current view"
 msgstr ""
 
-msgid "coordinates"
-msgstr ""
-
 msgid "Category"
 msgstr ""
 
diff --git a/i18n/po/en_CA.po b/i18n/po/en_CA.po
index 31110ad..7a9835a 100644
--- a/i18n/po/en_CA.po
+++ b/i18n/po/en_CA.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: josm\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-12-31 03:40+0100\n"
+"POT-Creation-Date: 2016-01-06 03:38+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: 2015-12-31 05:08+0000\n"
-"X-Generator: Launchpad (build 17865)\n"
+"X-Launchpad-Export-Date: 2016-01-06 05:09+0000\n"
+"X-Generator: Launchpad (build 17876)\n"
 "Language: \n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -1062,9 +1062,6 @@ msgstr ""
 msgid "Overpass query: "
 msgstr ""
 
-msgid "Overpass server: "
-msgstr ""
-
 msgid "Paste"
 msgstr ""
 
@@ -1354,6 +1351,9 @@ msgstr ""
 msgid "Split a way at the selected node."
 msgstr ""
 
+msgid "Cannot split since another split operation is already in progress"
+msgstr ""
+
 msgid ""
 "The current selection cannot be used for splitting - no node is selected."
 msgstr ""
@@ -1465,6 +1465,27 @@ msgid ""
 "own copy and all nodes will be selected."
 msgstr ""
 
+msgid "Existing node"
+msgstr ""
+
+msgid "Both nodes"
+msgstr ""
+
+msgid "New node"
+msgstr ""
+
+msgid "Tags / Memberships"
+msgstr ""
+
+msgid "Unglue"
+msgstr ""
+
+msgid "Where should the tags of the node be put?"
+msgstr ""
+
+msgid "Where should the memberships of this node be put?"
+msgstr ""
+
 msgid "Unglued Node"
 msgstr ""
 
@@ -3055,6 +3076,15 @@ msgstr ""
 msgid "Restoring files"
 msgstr ""
 
+msgid "Unable to delete backup file {0}"
+msgstr ""
+
+msgid "Unable to delete PID file {0}"
+msgstr ""
+
+msgid "Unable to delete archived backup file {0}"
+msgstr ""
+
 msgid "Illegal latitude value ''{0}''"
 msgstr ""
 
@@ -4213,6 +4243,9 @@ msgstr ""
 msgid "No \"to\" way found"
 msgstr ""
 
+msgid "\"from\" way equals \"to\" way"
+msgstr ""
+
 msgid "No \"via\" node or way found"
 msgstr ""
 
@@ -7010,9 +7043,6 @@ msgstr ""
 msgid "Tags: {0} / Memberships: {1}"
 msgstr ""
 
-msgid "Tags / Memberships"
-msgstr ""
-
 msgid "Delete the selected key in all objects"
 msgstr ""
 
@@ -11617,6 +11647,15 @@ msgstr ""
 msgid "Please enter the OSM API URL."
 msgstr ""
 
+msgid "Use Overpass server for object downloads"
+msgstr ""
+
+msgid "Overpass server: "
+msgstr ""
+
+msgid "Overpass server"
+msgstr ""
+
 msgid "Proxy settings"
 msgstr ""
 
@@ -13755,6 +13794,9 @@ msgstr ""
 msgid "reserved"
 msgstr ""
 
+msgid "Unable to delete old preferences file {0}"
+msgstr ""
+
 msgid "Outdated Java version"
 msgstr ""
 
@@ -13846,6 +13888,9 @@ msgid ""
 "contain any JOSM object or suitable text. </p></html>"
 msgstr ""
 
+msgid "Unable to delete file {0}"
+msgstr ""
+
 msgid "ms"
 msgstr ""
 
@@ -16960,6 +17005,9 @@ msgstr ""
 msgid "Tourist buses"
 msgstr ""
 
+msgid "Max. speed Heavy Goods Vehicles (km/h)"
+msgstr ""
+
 msgid "Min. speed (km/h)"
 msgstr ""
 
@@ -19257,12 +19305,6 @@ msgstr ""
 msgid "Dentist"
 msgstr ""
 
-msgid "Nursing Home"
-msgstr ""
-
-msgid "Retirement Home"
-msgstr ""
-
 msgid "Pharmacy"
 msgstr ""
 
@@ -19290,6 +19332,31 @@ msgstr ""
 msgid "Veterinary"
 msgstr ""
 
+msgid "Social Facility"
+msgstr ""
+
+msgid "Nursing Home"
+msgstr ""
+
+msgid "Group Home"
+msgstr ""
+
+msgid "For"
+msgstr ""
+
+msgid "Assisted Living"
+msgstr ""
+
+msgid "Outreach"
+msgstr ""
+
+msgctxt "social_facility"
+msgid "Shelter"
+msgstr ""
+
+msgid "Food Bank"
+msgstr ""
+
 msgid "Toilets/Restrooms"
 msgstr ""
 
@@ -19332,6 +19399,13 @@ msgstr ""
 msgid "urinal"
 msgstr ""
 
+msgctxt "toilets"
+msgid "Diaper"
+msgstr ""
+
+msgid "room"
+msgstr ""
+
 msgid "Post Box"
 msgstr ""
 
@@ -23369,24 +23443,24 @@ msgstr ""
 msgid "Download GPX track from openstreetmap.org"
 msgstr ""
 
+msgid "Download Track"
+msgstr ""
+
+msgid "Filename"
+msgstr ""
+
 msgid ""
 "Error occurred while parsing gpx file {0}. Only a part of the file will be "
 "available."
 msgstr ""
 
-msgid "Invalid URL {0}"
-msgstr ""
-
 msgid "Error fetching URL {0}"
 msgstr ""
 
 msgid "Error parsing data from URL {0}"
 msgstr ""
 
-msgid "Download Track"
-msgstr ""
-
-msgid "Filename"
+msgid "Invalid URL {0}"
 msgstr ""
 
 msgid "Private (only shared as anonymous, unordered points)"
@@ -23436,9 +23510,6 @@ msgstr ""
 msgid "Uploading trace ..."
 msgstr ""
 
-msgid "Connecting..."
-msgstr ""
-
 msgid "Upload canceled"
 msgstr ""
 
@@ -27877,6 +27948,69 @@ msgstr ""
 msgid "Please load some photos."
 msgstr ""
 
+msgid "Edit photo GPS data"
+msgstr ""
+
+msgid "Edit GPS data of selected photo."
+msgstr ""
+
+msgid "Edit Photo GPS Data"
+msgstr ""
+
+msgid "Please select an image first."
+msgstr ""
+
+msgid "No image selected"
+msgstr ""
+
+msgid "(Empty values delete the according fields.)"
+msgstr ""
+
+msgid "coordinates"
+msgstr ""
+
+msgid "Latitude and longitude"
+msgstr ""
+
+msgid "Edit Image Coordinates"
+msgstr ""
+
+msgid "Edit coordinates in separate editor"
+msgstr ""
+
+msgid "altitude"
+msgstr ""
+
+msgid "Altitude:"
+msgstr ""
+
+msgid "speed"
+msgstr ""
+
+msgid "positive number or empty"
+msgstr ""
+
+msgid "Speed:"
+msgstr ""
+
+msgid "direction"
+msgstr ""
+
+msgid "range -360.0 .. 360.0, or empty"
+msgstr ""
+
+msgid "Direction:"
+msgstr ""
+
+msgid "°"
+msgstr ""
+
+msgid "Undo changes made in this dialog"
+msgstr ""
+
+msgid "Reload GPS data from image file"
+msgstr ""
+
 msgid "New layer for untagged images"
 msgstr ""
 
@@ -30893,9 +31027,6 @@ msgstr ""
 msgid "Fetches all coordinates from Wikipedia in the current view"
 msgstr ""
 
-msgid "coordinates"
-msgstr ""
-
 msgid "Category"
 msgstr ""
 
diff --git a/i18n/po/en_GB.po b/i18n/po/en_GB.po
index 3dfa612..f8e9352 100644
--- a/i18n/po/en_GB.po
+++ b/i18n/po/en_GB.po
@@ -10,7 +10,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: JOSM\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-12-31 03:40+0100\n"
+"POT-Creation-Date: 2016-01-06 03:38+0100\n"
 "PO-Revision-Date: 2015-11-30 15:31+0000\n"
 "Last-Translator: Andi Chandler <Unknown>\n"
 "Language-Team: German <josm-dev at openstreetmap.org>\n"
@@ -18,8 +18,8 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Launchpad-Export-Date: 2015-12-31 05:05+0000\n"
-"X-Generator: Launchpad (build 17865)\n"
+"X-Launchpad-Export-Date: 2016-01-06 05:07+0000\n"
+"X-Generator: Launchpad (build 17876)\n"
 "Language: de\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -1133,9 +1133,6 @@ msgstr "Parse error"
 msgid "Overpass query: "
 msgstr "Overpass query: "
 
-msgid "Overpass server: "
-msgstr "Overpass server: "
-
 msgid "Paste"
 msgstr "Paste"
 
@@ -1441,6 +1438,9 @@ msgstr "Split Way"
 msgid "Split a way at the selected node."
 msgstr "Split a way at the selected node."
 
+msgid "Cannot split since another split operation is already in progress"
+msgstr ""
+
 msgid ""
 "The current selection cannot be used for splitting - no node is selected."
 msgstr ""
@@ -1570,6 +1570,27 @@ msgstr ""
 "their\n"
 "own copy and all nodes will be selected."
 
+msgid "Existing node"
+msgstr ""
+
+msgid "Both nodes"
+msgstr ""
+
+msgid "New node"
+msgstr ""
+
+msgid "Tags / Memberships"
+msgstr "Tags / Memberships"
+
+msgid "Unglue"
+msgstr ""
+
+msgid "Where should the tags of the node be put?"
+msgstr ""
+
+msgid "Where should the memberships of this node be put?"
+msgstr ""
+
 msgid "Unglued Node"
 msgstr "Unglued Node"
 
@@ -3273,6 +3294,15 @@ msgstr "Your work has been saved automatically."
 msgid "Restoring files"
 msgstr "Restoring files"
 
+msgid "Unable to delete backup file {0}"
+msgstr ""
+
+msgid "Unable to delete PID file {0}"
+msgstr ""
+
+msgid "Unable to delete archived backup file {0}"
+msgstr ""
+
 msgid "Illegal latitude value ''{0}''"
 msgstr "Illegal latitude value ''{0}''"
 
@@ -4504,6 +4534,9 @@ msgstr "No \"from\" way found"
 msgid "No \"to\" way found"
 msgstr "No \"to\" way found"
 
+msgid "\"from\" way equals \"to\" way"
+msgstr ""
+
 msgid "No \"via\" node or way found"
 msgstr "No \"via\" node or way found"
 
@@ -7485,9 +7518,6 @@ msgstr "Objects: {2} / Tags: {0} / Memberships: {1}"
 msgid "Tags: {0} / Memberships: {1}"
 msgstr "Tags: {0} / Memberships: {1}"
 
-msgid "Tags / Memberships"
-msgstr "Tags / Memberships"
-
 msgid "Delete the selected key in all objects"
 msgstr "Delete the selected key in all objects"
 
@@ -12539,6 +12569,15 @@ msgstr "The current value is not a valid URL"
 msgid "Please enter the OSM API URL."
 msgstr "Please enter the OSM API URL."
 
+msgid "Use Overpass server for object downloads"
+msgstr ""
+
+msgid "Overpass server: "
+msgstr "Overpass server: "
+
+msgid "Overpass server"
+msgstr ""
+
 msgid "Proxy settings"
 msgstr "Proxy settings"
 
@@ -14974,6 +15013,9 @@ msgstr "URL does not contain valid {0}"
 msgid "reserved"
 msgstr "reserved"
 
+msgid "Unable to delete old preferences file {0}"
+msgstr ""
+
 msgid "Outdated Java version"
 msgstr "Outdated Java version"
 
@@ -15082,6 +15124,9 @@ msgstr ""
 "<html><p> Sorry, it is impossible to paste tags from buffer. It does not "
 "contain any JOSM object or suitable text. </p></html>"
 
+msgid "Unable to delete file {0}"
+msgstr ""
+
 msgid "ms"
 msgstr "ms"
 
@@ -18336,6 +18381,9 @@ msgstr "Public Service Vehicles (psv)"
 msgid "Tourist buses"
 msgstr "Tourist buses"
 
+msgid "Max. speed Heavy Goods Vehicles (km/h)"
+msgstr ""
+
 msgid "Min. speed (km/h)"
 msgstr "Min. speed (km/h)"
 
@@ -20655,12 +20703,6 @@ msgstr "Doctor''s Surgery"
 msgid "Dentist"
 msgstr "Dentist"
 
-msgid "Nursing Home"
-msgstr "Nursing home"
-
-msgid "Retirement Home"
-msgstr "Retirement home"
-
 msgid "Pharmacy"
 msgstr "Pharmacy"
 
@@ -20688,6 +20730,31 @@ msgstr "(Use international code, like +12-345-67890)"
 msgid "Veterinary"
 msgstr "Veterinary"
 
+msgid "Social Facility"
+msgstr ""
+
+msgid "Nursing Home"
+msgstr "Nursing home"
+
+msgid "Group Home"
+msgstr ""
+
+msgid "For"
+msgstr ""
+
+msgid "Assisted Living"
+msgstr ""
+
+msgid "Outreach"
+msgstr ""
+
+msgctxt "social_facility"
+msgid "Shelter"
+msgstr ""
+
+msgid "Food Bank"
+msgstr ""
+
 msgid "Toilets/Restrooms"
 msgstr "Toilets/Restrooms"
 
@@ -20730,6 +20797,13 @@ msgstr "squat"
 msgid "urinal"
 msgstr "urinal"
 
+msgctxt "toilets"
+msgid "Diaper"
+msgstr ""
+
+msgid "room"
+msgstr ""
+
 msgid "Post Box"
 msgstr "Post Box"
 
@@ -24812,6 +24886,12 @@ msgstr "Download track ..."
 msgid "Download GPX track from openstreetmap.org"
 msgstr "Download GPX track from openstreetmap.org"
 
+msgid "Download Track"
+msgstr "Download track"
+
+msgid "Filename"
+msgstr "Filename"
+
 msgid ""
 "Error occurred while parsing gpx file {0}. Only a part of the file will be "
 "available."
@@ -24819,20 +24899,14 @@ msgstr ""
 "Error occurred while parsing gpx file {0}. Only a part of the file will be "
 "available."
 
-msgid "Invalid URL {0}"
-msgstr "Invalid URL {0}"
-
 msgid "Error fetching URL {0}"
 msgstr "Error fetching URL {0}"
 
 msgid "Error parsing data from URL {0}"
 msgstr "Error parsing data from URL {0}"
 
-msgid "Download Track"
-msgstr "Download track"
-
-msgid "Filename"
-msgstr "Filename"
+msgid "Invalid URL {0}"
+msgstr "Invalid URL {0}"
 
 msgid "Private (only shared as anonymous, unordered points)"
 msgstr "Private (only shared as anonymous, unordered points)"
@@ -24883,9 +24957,6 @@ msgstr "No GPX layer selected. Cannot upload a trace."
 msgid "Uploading trace ..."
 msgstr "Uploading trace ..."
 
-msgid "Connecting..."
-msgstr "Connecting..."
-
 msgid "Upload canceled"
 msgstr "Upload cancelled"
 
@@ -29598,6 +29669,69 @@ msgstr ""
 msgid "Please load some photos."
 msgstr ""
 
+msgid "Edit photo GPS data"
+msgstr ""
+
+msgid "Edit GPS data of selected photo."
+msgstr ""
+
+msgid "Edit Photo GPS Data"
+msgstr ""
+
+msgid "Please select an image first."
+msgstr ""
+
+msgid "No image selected"
+msgstr ""
+
+msgid "(Empty values delete the according fields.)"
+msgstr ""
+
+msgid "coordinates"
+msgstr "coordinates"
+
+msgid "Latitude and longitude"
+msgstr ""
+
+msgid "Edit Image Coordinates"
+msgstr ""
+
+msgid "Edit coordinates in separate editor"
+msgstr ""
+
+msgid "altitude"
+msgstr ""
+
+msgid "Altitude:"
+msgstr ""
+
+msgid "speed"
+msgstr ""
+
+msgid "positive number or empty"
+msgstr ""
+
+msgid "Speed:"
+msgstr ""
+
+msgid "direction"
+msgstr ""
+
+msgid "range -360.0 .. 360.0, or empty"
+msgstr ""
+
+msgid "Direction:"
+msgstr ""
+
+msgid "°"
+msgstr ""
+
+msgid "Undo changes made in this dialog"
+msgstr ""
+
+msgid "Reload GPS data from image file"
+msgstr ""
+
 msgid "New layer for untagged images"
 msgstr ""
 
@@ -32756,9 +32890,6 @@ msgstr "{0}.Wikipedia.org: {1}"
 msgid "Fetches all coordinates from Wikipedia in the current view"
 msgstr "Fetches all coordinates from Wikipedia in the current view"
 
-msgid "coordinates"
-msgstr "coordinates"
-
 msgid "Category"
 msgstr "Category"
 
diff --git a/i18n/po/eo.po b/i18n/po/eo.po
index 6dcb717..3a7a5d8 100644
--- a/i18n/po/eo.po
+++ b/i18n/po/eo.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: josm\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-12-31 03:40+0100\n"
+"POT-Creation-Date: 2016-01-06 03:38+0100\n"
 "PO-Revision-Date: 2012-10-03 21:33+0000\n"
 "Last-Translator: Michael Moroni <michael.moroni at openmailbox.org>\n"
 "Language-Team: Esperanto <eo at li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Launchpad-Export-Date: 2015-12-31 04:40+0000\n"
-"X-Generator: Launchpad (build 17865)\n"
+"X-Launchpad-Export-Date: 2016-01-06 04:39+0000\n"
+"X-Generator: Launchpad (build 17876)\n"
 "Language: eo\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -1058,9 +1058,6 @@ msgstr ""
 msgid "Overpass query: "
 msgstr ""
 
-msgid "Overpass server: "
-msgstr ""
-
 msgid "Paste"
 msgstr "Algluu"
 
@@ -1350,6 +1347,9 @@ msgstr ""
 msgid "Split a way at the selected node."
 msgstr ""
 
+msgid "Cannot split since another split operation is already in progress"
+msgstr ""
+
 msgid ""
 "The current selection cannot be used for splitting - no node is selected."
 msgstr ""
@@ -1461,6 +1461,27 @@ msgid ""
 "own copy and all nodes will be selected."
 msgstr ""
 
+msgid "Existing node"
+msgstr ""
+
+msgid "Both nodes"
+msgstr ""
+
+msgid "New node"
+msgstr ""
+
+msgid "Tags / Memberships"
+msgstr ""
+
+msgid "Unglue"
+msgstr ""
+
+msgid "Where should the tags of the node be put?"
+msgstr ""
+
+msgid "Where should the memberships of this node be put?"
+msgstr ""
+
 msgid "Unglued Node"
 msgstr ""
 
@@ -3051,6 +3072,15 @@ msgstr ""
 msgid "Restoring files"
 msgstr ""
 
+msgid "Unable to delete backup file {0}"
+msgstr ""
+
+msgid "Unable to delete PID file {0}"
+msgstr ""
+
+msgid "Unable to delete archived backup file {0}"
+msgstr ""
+
 msgid "Illegal latitude value ''{0}''"
 msgstr ""
 
@@ -4209,6 +4239,9 @@ msgstr ""
 msgid "No \"to\" way found"
 msgstr ""
 
+msgid "\"from\" way equals \"to\" way"
+msgstr ""
+
 msgid "No \"via\" node or way found"
 msgstr ""
 
@@ -7006,9 +7039,6 @@ msgstr ""
 msgid "Tags: {0} / Memberships: {1}"
 msgstr ""
 
-msgid "Tags / Memberships"
-msgstr ""
-
 msgid "Delete the selected key in all objects"
 msgstr ""
 
@@ -11613,6 +11643,15 @@ msgstr ""
 msgid "Please enter the OSM API URL."
 msgstr ""
 
+msgid "Use Overpass server for object downloads"
+msgstr ""
+
+msgid "Overpass server: "
+msgstr ""
+
+msgid "Overpass server"
+msgstr ""
+
 msgid "Proxy settings"
 msgstr ""
 
@@ -13755,6 +13794,9 @@ msgstr ""
 msgid "reserved"
 msgstr ""
 
+msgid "Unable to delete old preferences file {0}"
+msgstr ""
+
 msgid "Outdated Java version"
 msgstr ""
 
@@ -13846,6 +13888,9 @@ msgid ""
 "contain any JOSM object or suitable text. </p></html>"
 msgstr ""
 
+msgid "Unable to delete file {0}"
+msgstr ""
+
 msgid "ms"
 msgstr ""
 
@@ -16960,6 +17005,9 @@ msgstr ""
 msgid "Tourist buses"
 msgstr ""
 
+msgid "Max. speed Heavy Goods Vehicles (km/h)"
+msgstr ""
+
 msgid "Min. speed (km/h)"
 msgstr ""
 
@@ -19257,12 +19305,6 @@ msgstr ""
 msgid "Dentist"
 msgstr ""
 
-msgid "Nursing Home"
-msgstr ""
-
-msgid "Retirement Home"
-msgstr ""
-
 msgid "Pharmacy"
 msgstr ""
 
@@ -19290,6 +19332,31 @@ msgstr ""
 msgid "Veterinary"
 msgstr ""
 
+msgid "Social Facility"
+msgstr ""
+
+msgid "Nursing Home"
+msgstr ""
+
+msgid "Group Home"
+msgstr ""
+
+msgid "For"
+msgstr ""
+
+msgid "Assisted Living"
+msgstr ""
+
+msgid "Outreach"
+msgstr ""
+
+msgctxt "social_facility"
+msgid "Shelter"
+msgstr ""
+
+msgid "Food Bank"
+msgstr ""
+
 msgid "Toilets/Restrooms"
 msgstr ""
 
@@ -19332,6 +19399,13 @@ msgstr ""
 msgid "urinal"
 msgstr ""
 
+msgctxt "toilets"
+msgid "Diaper"
+msgstr ""
+
+msgid "room"
+msgstr ""
+
 msgid "Post Box"
 msgstr ""
 
@@ -23369,24 +23443,24 @@ msgstr ""
 msgid "Download GPX track from openstreetmap.org"
 msgstr ""
 
+msgid "Download Track"
+msgstr ""
+
+msgid "Filename"
+msgstr ""
+
 msgid ""
 "Error occurred while parsing gpx file {0}. Only a part of the file will be "
 "available."
 msgstr ""
 
-msgid "Invalid URL {0}"
-msgstr ""
-
 msgid "Error fetching URL {0}"
 msgstr ""
 
 msgid "Error parsing data from URL {0}"
 msgstr ""
 
-msgid "Download Track"
-msgstr ""
-
-msgid "Filename"
+msgid "Invalid URL {0}"
 msgstr ""
 
 msgid "Private (only shared as anonymous, unordered points)"
@@ -23436,9 +23510,6 @@ msgstr ""
 msgid "Uploading trace ..."
 msgstr ""
 
-msgid "Connecting..."
-msgstr ""
-
 msgid "Upload canceled"
 msgstr ""
 
@@ -27877,6 +27948,69 @@ msgstr ""
 msgid "Please load some photos."
 msgstr ""
 
+msgid "Edit photo GPS data"
+msgstr ""
+
+msgid "Edit GPS data of selected photo."
+msgstr ""
+
+msgid "Edit Photo GPS Data"
+msgstr ""
+
+msgid "Please select an image first."
+msgstr ""
+
+msgid "No image selected"
+msgstr ""
+
+msgid "(Empty values delete the according fields.)"
+msgstr ""
+
+msgid "coordinates"
+msgstr ""
+
+msgid "Latitude and longitude"
+msgstr ""
+
+msgid "Edit Image Coordinates"
+msgstr ""
+
+msgid "Edit coordinates in separate editor"
+msgstr ""
+
+msgid "altitude"
+msgstr ""
+
+msgid "Altitude:"
+msgstr ""
+
+msgid "speed"
+msgstr ""
+
+msgid "positive number or empty"
+msgstr ""
+
+msgid "Speed:"
+msgstr ""
+
+msgid "direction"
+msgstr ""
+
+msgid "range -360.0 .. 360.0, or empty"
+msgstr ""
+
+msgid "Direction:"
+msgstr ""
+
+msgid "°"
+msgstr ""
+
+msgid "Undo changes made in this dialog"
+msgstr ""
+
+msgid "Reload GPS data from image file"
+msgstr ""
+
 msgid "New layer for untagged images"
 msgstr ""
 
@@ -30893,9 +31027,6 @@ msgstr ""
 msgid "Fetches all coordinates from Wikipedia in the current view"
 msgstr ""
 
-msgid "coordinates"
-msgstr ""
-
 msgid "Category"
 msgstr ""
 
diff --git a/i18n/po/es.po b/i18n/po/es.po
index 16c418e..19f8b08 100644
--- a/i18n/po/es.po
+++ b/i18n/po/es.po
@@ -7,16 +7,16 @@ msgid ""
 msgstr ""
 "Project-Id-Version: josm\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-12-31 03:40+0100\n"
-"PO-Revision-Date: 2015-12-29 16:09+0000\n"
-"Last-Translator: costales <Unknown>\n"
+"POT-Creation-Date: 2016-01-06 03:38+0100\n"
+"PO-Revision-Date: 2016-01-02 11:27+0000\n"
+"Last-Translator: Emilio Gomez Fernandez <Unknown>\n"
 "Language-Team: Spanish <es at li.org>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Launchpad-Export-Date: 2015-12-31 05:00+0000\n"
-"X-Generator: Launchpad (build 17865)\n"
+"X-Launchpad-Export-Date: 2016-01-06 05:01+0000\n"
+"X-Generator: Launchpad (build 17876)\n"
 "Language: es\n"
 "X-Language: es_ES\n"
 "X-Source-Language: C\n"
@@ -766,7 +766,7 @@ msgid "No Shortcut"
 msgstr "Sin acceso directo"
 
 msgid "Jump To Position"
-msgstr "Salta a la posición"
+msgstr "Saltar a posición"
 
 msgid "Opens a dialog that allows to jump to a specific location"
 msgstr ""
@@ -795,7 +795,7 @@ msgid "Jump there"
 msgstr "Ir allí"
 
 msgid "Jump to Position"
-msgstr "Salta a la posición"
+msgstr "Saltar a posición"
 
 msgid "Could not parse Latitude, Longitude or Zoom. Please check."
 msgstr ""
@@ -1159,9 +1159,6 @@ msgstr "Error de análisis"
 msgid "Overpass query: "
 msgstr "Consulat de paso elevado: "
 
-msgid "Overpass server: "
-msgstr "Servidor de Overpass: "
-
 msgid "Paste"
 msgstr "Pegar"
 
@@ -1473,6 +1470,9 @@ msgstr "Separar vía"
 msgid "Split a way at the selected node."
 msgstr "Separar vía por el nodo seleccionado"
 
+msgid "Cannot split since another split operation is already in progress"
+msgstr "No se puede partir ya que otra operación de división está en marcha"
+
 msgid ""
 "The current selection cannot be used for splitting - no node is selected."
 msgstr ""
@@ -1600,6 +1600,27 @@ msgstr ""
 "todas las vías obtendrán su propia copia y todos los nodos serán "
 "seleccionados."
 
+msgid "Existing node"
+msgstr ""
+
+msgid "Both nodes"
+msgstr ""
+
+msgid "New node"
+msgstr ""
+
+msgid "Tags / Memberships"
+msgstr "Etiquetas / Miembros"
+
+msgid "Unglue"
+msgstr ""
+
+msgid "Where should the tags of the node be put?"
+msgstr ""
+
+msgid "Where should the memberships of this node be put?"
+msgstr ""
+
 msgid "Unglued Node"
 msgstr "Nodo despegado"
 
@@ -3345,6 +3366,15 @@ msgstr "Su trabajo se ha guardado automáticamente."
 msgid "Restoring files"
 msgstr "Restaurando archivos"
 
+msgid "Unable to delete backup file {0}"
+msgstr ""
+
+msgid "Unable to delete PID file {0}"
+msgstr ""
+
+msgid "Unable to delete archived backup file {0}"
+msgstr ""
+
 msgid "Illegal latitude value ''{0}''"
 msgstr "Valor de latitud ilegal \"{0}\""
 
@@ -4629,6 +4659,9 @@ msgstr "No se encontró una vía \"de\""
 msgid "No \"to\" way found"
 msgstr "No se encontró una vía \"a\""
 
+msgid "\"from\" way equals \"to\" way"
+msgstr "La vía \"from\" es la misma que la \"to\""
+
 msgid "No \"via\" node or way found"
 msgstr "No se encontro un nodo o vía \"via\""
 
@@ -7715,9 +7748,6 @@ msgstr "Objectos: {2} / Etiquetas: {0} / Miembros: {1}"
 msgid "Tags: {0} / Memberships: {1}"
 msgstr "Etiquetas: {0} / Miembros: {1}"
 
-msgid "Tags / Memberships"
-msgstr "Etiquetas / Miembros"
-
 msgid "Delete the selected key in all objects"
 msgstr "Borrar la clave seleccionada en todos los objetos"
 
@@ -12053,10 +12083,10 @@ msgid "2. Enter name for this layer"
 msgstr "2. Introduce el nombre para esta capa"
 
 msgid "{0} cache, total cache size: {1} bytes"
-msgstr "{0} cache, tamaño total de cache: {1} bytes"
+msgstr "Caché {0}, tamaño total de la memoria caché: {1} bytes"
 
 msgid "Cache name"
-msgstr "Nombre del caché"
+msgstr "Nombre de la caché"
 
 msgid "Object Count"
 msgstr "Cuenta de objetos"
@@ -12083,7 +12113,7 @@ msgid "Tile cache directory: "
 msgstr "Directorio del caché de teselas: "
 
 msgid "Maximum size of disk cache (per imagery) in MB: "
-msgstr "Tamaño máximo de caché de disco (por las imágenes) en MB: "
+msgstr "Tamaño máximo de la caché de disco (por las imágenes) en MB: "
 
 msgid "Tiles zoom offset:"
 msgstr "Compensación de zoom de tiles"
@@ -12111,7 +12141,7 @@ msgid "Offset bookmarks"
 msgstr "Marcadores de desplazamientos"
 
 msgid "Cache contents"
-msgstr "Conenido en caché"
+msgstr "Caché de contenidos"
 
 msgid "Imagery Background: Default"
 msgstr "Fondo de las capas de imágenes: por omisión"
@@ -12964,6 +12994,15 @@ msgstr "El valor actual no es una URL válida"
 msgid "Please enter the OSM API URL."
 msgstr "Por favor introduzca la URL del API OSM."
 
+msgid "Use Overpass server for object downloads"
+msgstr "Utilizar el servidor Overpass para las descargas de objetos"
+
+msgid "Overpass server: "
+msgstr "Servidor de Overpass: "
+
+msgid "Overpass server"
+msgstr "Servidor Overpass"
+
 msgid "Proxy settings"
 msgstr "Configuraciones de proxy"
 
@@ -14945,7 +14984,7 @@ msgid "Downloading plugin list from ''{0}''"
 msgstr "Descargando lista de complementos desde ''{0}''"
 
 msgid "Unsuccessful HTTP request"
-msgstr ""
+msgstr "Petición HTTP sin éxito"
 
 msgid "Plugin list download error"
 msgstr "Error al descargar la lista del complemento"
@@ -15494,6 +15533,9 @@ msgstr "La URL no contiene un {0} válido"
 msgid "reserved"
 msgstr "reservado"
 
+msgid "Unable to delete old preferences file {0}"
+msgstr ""
+
 msgid "Outdated Java version"
 msgstr "Versión desactualizada de Java"
 
@@ -15604,6 +15646,9 @@ msgstr ""
 "<html><p> Lo sentimos, es imposible pegar etiquetas desde la memoria. No "
 "contiene ningún objeto de JOSM o un texto adecuado. </p></html>"
 
+msgid "Unable to delete file {0}"
+msgstr ""
+
 msgid "ms"
 msgstr "ms"
 
@@ -18921,6 +18966,9 @@ msgstr "Vehículos de servicio público (SP)"
 msgid "Tourist buses"
 msgstr "Ómnibus de turistas"
 
+msgid "Max. speed Heavy Goods Vehicles (km/h)"
+msgstr ""
+
 msgid "Min. speed (km/h)"
 msgstr "Velocidad mínima (km/h)"
 
@@ -21249,14 +21297,6 @@ msgstr "Consultorio médico"
 msgid "Dentist"
 msgstr "Dentista"
 
-msgid "Nursing Home"
-msgstr ""
-"Residencia de personas dependientes (ancianos, discapacitados físicos o "
-"psíquicos, etc)"
-
-msgid "Retirement Home"
-msgstr "Centro de la tercera edad"
-
 msgid "Pharmacy"
 msgstr "Farmacia"
 
@@ -21284,6 +21324,33 @@ msgstr "(Utilizar código internacional, como +12-345-67890)"
 msgid "Veterinary"
 msgstr "Veterinario"
 
+msgid "Social Facility"
+msgstr ""
+
+msgid "Nursing Home"
+msgstr ""
+"Residencia de personas dependientes (ancianos, discapacitados físicos o "
+"psíquicos, etc)"
+
+msgid "Group Home"
+msgstr ""
+
+msgid "For"
+msgstr ""
+
+msgid "Assisted Living"
+msgstr ""
+
+msgid "Outreach"
+msgstr ""
+
+msgctxt "social_facility"
+msgid "Shelter"
+msgstr ""
+
+msgid "Food Bank"
+msgstr ""
+
 msgid "Toilets/Restrooms"
 msgstr "Baños"
 
@@ -21326,6 +21393,13 @@ msgstr "cuclillas"
 msgid "urinal"
 msgstr "urinario"
 
+msgctxt "toilets"
+msgid "Diaper"
+msgstr ""
+
+msgid "room"
+msgstr ""
+
 msgid "Post Box"
 msgstr "Buzón de correos"
 
@@ -25432,6 +25506,12 @@ msgstr "Descargar traza..."
 msgid "Download GPX track from openstreetmap.org"
 msgstr "Descargar GPX pista de openstreetmap.org"
 
+msgid "Download Track"
+msgstr "Descargando traza"
+
+msgid "Filename"
+msgstr "Nombre de archivo"
+
 msgid ""
 "Error occurred while parsing gpx file {0}. Only a part of the file will be "
 "available."
@@ -25439,20 +25519,14 @@ msgstr ""
 "Error al analizar el archivo gpx {0}. Sólo una parte del archivo estará "
 "disponible."
 
-msgid "Invalid URL {0}"
-msgstr "URL invalida {0}"
-
 msgid "Error fetching URL {0}"
 msgstr "Error al buscar dirección URL {0}"
 
 msgid "Error parsing data from URL {0}"
 msgstr "Error al analizar los datos de la URL {0}"
 
-msgid "Download Track"
-msgstr "Descargando traza"
-
-msgid "Filename"
-msgstr "Nombre de archivo"
+msgid "Invalid URL {0}"
+msgstr "URL invalida {0}"
 
 msgid "Private (only shared as anonymous, unordered points)"
 msgstr "Privado (únicamente compartir como anónimo, desordenar puntos)"
@@ -25507,9 +25581,6 @@ msgstr "No hay ninguna capa gpx seleccionada. No se puede subir la traza."
 msgid "Uploading trace ..."
 msgstr "Subiendo traza..."
 
-msgid "Connecting..."
-msgstr "Conectando..."
-
 msgid "Upload canceled"
 msgstr "Subida cancelada"
 
@@ -26511,7 +26582,7 @@ msgid "updated building info"
 msgstr "información del edificio actualizada"
 
 msgid "Tag Element"
-msgstr "Etiquetar Elemento"
+msgstr "Etiquetar elemento"
 
 msgid "Select an item to tag."
 msgstr "Seleccione un elemento para etiquetar."
@@ -26523,7 +26594,7 @@ msgid "Tools: {0}"
 msgstr "Herramientas: {0}"
 
 msgid "Area Selection"
-msgstr "Selecciónd de Área"
+msgstr "Selección de área"
 
 msgid "Select an area (e.g. building) from an underlying image."
 msgstr ""
@@ -26904,7 +26975,7 @@ msgid "Enable automatic caching."
 msgstr "Activar caché automático"
 
 msgid "Max. cache size (in MB)"
-msgstr "Tamaño máximo de caché (en MB)"
+msgstr "Tamaño máximo de la memoria caché (en MB)"
 
 msgid "French cadastre WMS"
 msgstr "WMS del catastro francés"
@@ -29693,8 +29764,8 @@ msgid ""
 "loaded by this plugin."
 msgstr ""
 "Complemento para utilizar varios portales de datos abiertos.<br/><br/> Por "
-"favor, lea los términos y condiciones de uso de cada portal<br/>antes de "
-"subir a OSM cualquier dato cargado con este complemento."
+"favor, lea los términos y condiciones de uso de cada portal antes de subir a "
+"OpenStreetMap cualquier dato cargado con este complemento."
 
 msgid "General settings"
 msgstr "Configuración general"
@@ -30397,6 +30468,69 @@ msgstr ""
 msgid "Please load some photos."
 msgstr "Por favor cargue algunas fotos."
 
+msgid "Edit photo GPS data"
+msgstr ""
+
+msgid "Edit GPS data of selected photo."
+msgstr ""
+
+msgid "Edit Photo GPS Data"
+msgstr ""
+
+msgid "Please select an image first."
+msgstr ""
+
+msgid "No image selected"
+msgstr ""
+
+msgid "(Empty values delete the according fields.)"
+msgstr ""
+
+msgid "coordinates"
+msgstr "coordenadas"
+
+msgid "Latitude and longitude"
+msgstr ""
+
+msgid "Edit Image Coordinates"
+msgstr ""
+
+msgid "Edit coordinates in separate editor"
+msgstr ""
+
+msgid "altitude"
+msgstr ""
+
+msgid "Altitude:"
+msgstr ""
+
+msgid "speed"
+msgstr ""
+
+msgid "positive number or empty"
+msgstr ""
+
+msgid "Speed:"
+msgstr ""
+
+msgid "direction"
+msgstr ""
+
+msgid "range -360.0 .. 360.0, or empty"
+msgstr ""
+
+msgid "Direction:"
+msgstr ""
+
+msgid "°"
+msgstr ""
+
+msgid "Undo changes made in this dialog"
+msgstr ""
+
+msgid "Reload GPS data from image file"
+msgstr ""
+
 msgid "New layer for untagged images"
 msgstr "Nueva capa de imágenes sin etiquetar"
 
@@ -30730,7 +30864,7 @@ msgid "Public Transport: Disable GTFS"
 msgstr "Transporte público: desactivar GTFS"
 
 msgid "Create Stops from GTFS ..."
-msgstr "Crear paradas desde GTFS..."
+msgstr "Crear paradas desde archivo GTFS..."
 
 msgid "Create Stops from a GTFS file"
 msgstr "Crear paradas desde un archivo GTFS"
@@ -30758,7 +30892,7 @@ msgid "The GTFS file was empty."
 msgstr "El archivo GTFS estaba vacío."
 
 msgid "Create Stops from GTFS"
-msgstr "Crear paradas desde GTFS"
+msgstr "Crear paradas desde archivo GTFS"
 
 msgid "GTFS-Stops"
 msgstr "Paradas-GTFS"
@@ -30902,7 +31036,7 @@ msgid "Public Transport: Change stop type"
 msgstr "Transporte público: cambiar tipo de parada"
 
 msgid "Create Stops from GPX ..."
-msgstr "Crear paradas desde GPX..."
+msgstr "Crear paradas desde archivo GPX..."
 
 msgid "Create Stops from a GPX file"
 msgstr "Crear paradas desde un archivo GPX"
@@ -30914,7 +31048,7 @@ 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 GPX"
+msgstr "Crear paradas desde archivo GPX"
 
 msgid "Tracks in this GPX file:"
 msgstr "Trazas en este archivo GPX:"
@@ -33151,9 +33285,8 @@ msgstr ""
 "etiqueta <br/> <b>{#id}</b> es remplazado con el ID del elemento "
 "<br/> <b>{#type}</b> es reemplazado con el \"nodo\", \"vía\" o "
 "\"relación\" <br/> <b>{#lat} , {#lon}</b> es reemplazado "
-"con la latitud/longitud del centro del mapa <br/> Tú puedes cargar "
-"manualmente el archivo de configuración <b>customurl.txt</b> en la carpeta "
-"de JOSM."
+"con la latitud/longitud del centro del mapa <br/> Puede cargar manualmente "
+"el archivo de configuración <b>customurl.txt</b> en la carpeta de JOSM."
 
 msgid "Custom URL configuration"
 msgstr "Configuración de la URL personalizada"
@@ -33716,9 +33849,6 @@ msgstr "{0}.Wikipedia.org: {1}"
 msgid "Fetches all coordinates from Wikipedia in the current view"
 msgstr "Obtiene todas las coordenadas de Wikipedia para la vista actual"
 
-msgid "coordinates"
-msgstr "coordenadas"
-
 msgid "Category"
 msgstr "Categoría"
 
diff --git a/i18n/po/et.po b/i18n/po/et.po
index 5df7775..9a67a9a 100644
--- a/i18n/po/et.po
+++ b/i18n/po/et.po
@@ -7,16 +7,16 @@ msgid ""
 msgstr ""
 "Project-Id-Version: josm\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-12-31 03:40+0100\n"
-"PO-Revision-Date: 2015-08-12 16:11+0000\n"
+"POT-Creation-Date: 2016-01-06 03:38+0100\n"
+"PO-Revision-Date: 2016-01-02 11:25+0000\n"
 "Last-Translator: AivoK <aivo.kuhlberg at hot.ee>\n"
 "Language-Team: Estonian <et at li.org>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Launchpad-Export-Date: 2015-12-31 04:41+0000\n"
-"X-Generator: Launchpad (build 17865)\n"
+"X-Launchpad-Export-Date: 2016-01-06 04:39+0000\n"
+"X-Generator: Launchpad (build 17876)\n"
 "Language: et\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -1093,9 +1093,6 @@ msgstr ""
 msgid "Overpass query: "
 msgstr "Overpass päring: "
 
-msgid "Overpass server: "
-msgstr ""
-
 msgid "Paste"
 msgstr "Kleebi"
 
@@ -1397,6 +1394,9 @@ msgstr "Lahuta joon"
 msgid "Split a way at the selected node."
 msgstr "Lahuta joon valitud sõlme kohalt."
 
+msgid "Cannot split since another split operation is already in progress"
+msgstr ""
+
 msgid ""
 "The current selection cannot be used for splitting - no node is selected."
 msgstr ""
@@ -1521,6 +1521,27 @@ msgstr ""
 " ja uued sõlmed valitakse.\n"
 "Muul juhul saavad kõik teed omad koopiad ja kõik sõlmed valitakse."
 
+msgid "Existing node"
+msgstr ""
+
+msgid "Both nodes"
+msgstr ""
+
+msgid "New node"
+msgstr ""
+
+msgid "Tags / Memberships"
+msgstr "Silte / Liikmeid"
+
+msgid "Unglue"
+msgstr ""
+
+msgid "Where should the tags of the node be put?"
+msgstr ""
+
+msgid "Where should the memberships of this node be put?"
+msgstr ""
+
 msgid "Unglued Node"
 msgstr "Lahtisulatatud sõlm"
 
@@ -3146,6 +3167,15 @@ msgstr ""
 msgid "Restoring files"
 msgstr ""
 
+msgid "Unable to delete backup file {0}"
+msgstr ""
+
+msgid "Unable to delete PID file {0}"
+msgstr ""
+
+msgid "Unable to delete archived backup file {0}"
+msgstr ""
+
 msgid "Illegal latitude value ''{0}''"
 msgstr ""
 
@@ -3724,10 +3754,10 @@ msgid "Way contains more than {0} nodes. It should be split or simplified"
 msgstr ""
 
 msgid "Barriers and entrances"
-msgstr ""
+msgstr "Barjäärid ja sissepääsud"
 
 msgid "Checks for errors in barriers and entrances."
-msgstr ""
+msgstr "Kontrollib vigasid barjääridel ja sissepääsudel"
 
 msgid "Barrier entrance not set on a barrier"
 msgstr ""
@@ -4304,6 +4334,9 @@ msgstr ""
 msgid "No \"to\" way found"
 msgstr ""
 
+msgid "\"from\" way equals \"to\" way"
+msgstr ""
+
 msgid "No \"via\" node or way found"
 msgstr ""
 
@@ -7118,9 +7151,6 @@ msgstr ""
 msgid "Tags: {0} / Memberships: {1}"
 msgstr "Silte: {0} / Liikmeid: {1}"
 
-msgid "Tags / Memberships"
-msgstr "Silte / Liikmeid"
-
 msgid "Delete the selected key in all objects"
 msgstr "Kustuta valitud võti kõkides objektides"
 
@@ -11816,6 +11846,15 @@ msgstr "Praegune väärtus ei ole õige URL"
 msgid "Please enter the OSM API URL."
 msgstr "Palun sisesta OSM API URL."
 
+msgid "Use Overpass server for object downloads"
+msgstr ""
+
+msgid "Overpass server: "
+msgstr ""
+
+msgid "Overpass server"
+msgstr ""
+
 msgid "Proxy settings"
 msgstr ""
 
@@ -13988,6 +14027,9 @@ msgstr ""
 msgid "reserved"
 msgstr "reserveeritud"
 
+msgid "Unable to delete old preferences file {0}"
+msgstr ""
+
 msgid "Outdated Java version"
 msgstr "Aegunud Java versioon"
 
@@ -14093,6 +14135,9 @@ msgid ""
 "contain any JOSM object or suitable text. </p></html>"
 msgstr ""
 
+msgid "Unable to delete file {0}"
+msgstr ""
+
 msgid "ms"
 msgstr "ms"
 
@@ -17218,6 +17263,9 @@ msgstr "Ühistranspordi sõidukid"
 msgid "Tourist buses"
 msgstr "Turismibussid"
 
+msgid "Max. speed Heavy Goods Vehicles (km/h)"
+msgstr ""
+
 msgid "Min. speed (km/h)"
 msgstr "Vähim kiirus (km/h)"
 
@@ -17592,7 +17640,7 @@ msgid "Pedestrian Crossing"
 msgstr "Ülekäigurada"
 
 msgid "In case of traffic signals:"
-msgstr ""
+msgstr "Valgusfoori korral:"
 
 msgid "Traffic Calming"
 msgstr "Liikluse rahustamine"
@@ -18409,7 +18457,7 @@ msgid "Covered (with roof)"
 msgstr ""
 
 msgid "Parking Entrance"
-msgstr ""
+msgstr "Parkla sissepääs"
 
 msgid "Fuel"
 msgstr ""
@@ -19515,12 +19563,6 @@ msgstr ""
 msgid "Dentist"
 msgstr "Hambaarst"
 
-msgid "Nursing Home"
-msgstr "Hooldekodu"
-
-msgid "Retirement Home"
-msgstr ""
-
 msgid "Pharmacy"
 msgstr "Apteek"
 
@@ -19548,6 +19590,31 @@ msgstr "(Kasuta riigikoodi, näiteks +12-345-67890)"
 msgid "Veterinary"
 msgstr "Loomaarst"
 
+msgid "Social Facility"
+msgstr ""
+
+msgid "Nursing Home"
+msgstr "Hooldekodu"
+
+msgid "Group Home"
+msgstr ""
+
+msgid "For"
+msgstr ""
+
+msgid "Assisted Living"
+msgstr ""
+
+msgid "Outreach"
+msgstr ""
+
+msgctxt "social_facility"
+msgid "Shelter"
+msgstr ""
+
+msgid "Food Bank"
+msgstr ""
+
 msgid "Toilets/Restrooms"
 msgstr ""
 
@@ -19590,6 +19657,13 @@ msgstr ""
 msgid "urinal"
 msgstr ""
 
+msgctxt "toilets"
+msgid "Diaper"
+msgstr ""
+
+msgid "room"
+msgstr ""
+
 msgid "Post Box"
 msgstr "Postkast"
 
@@ -20373,7 +20447,7 @@ msgid "Skipped height (meters)"
 msgstr ""
 
 msgid "Entrance"
-msgstr ""
+msgstr "Sissepääs"
 
 msgctxt "entrance"
 msgid "yes"
@@ -20400,10 +20474,10 @@ msgid "staircase"
 msgstr ""
 
 msgid "Entrance number"
-msgstr ""
+msgstr "Sissepääsu number"
 
 msgid "Flat numbers"
-msgstr ""
+msgstr "Korterite numbrid"
 
 msgid "Tower"
 msgstr "Torn"
@@ -21666,7 +21740,7 @@ msgid "Laundry"
 msgstr "Pesumaja"
 
 msgid "Tailor"
-msgstr "Õmblustöökoda"
+msgstr "Rätsep"
 
 msgid "Fabric"
 msgstr "Kangad"
@@ -22264,10 +22338,10 @@ msgid "A low area between hills."
 msgstr ""
 
 msgid "Cave Entrance"
-msgstr "Koobas"
+msgstr "Koopa sissepääs"
 
 msgid "The entrance to a cave."
-msgstr ""
+msgstr "Sissepääs koopasse."
 
 msgid "Island"
 msgstr "Saar"
@@ -23627,26 +23701,26 @@ msgstr ""
 msgid "Download GPX track from openstreetmap.org"
 msgstr ""
 
+msgid "Download Track"
+msgstr ""
+
+msgid "Filename"
+msgstr "Failinimi"
+
 msgid ""
 "Error occurred while parsing gpx file {0}. Only a part of the file will be "
 "available."
 msgstr ""
 
-msgid "Invalid URL {0}"
-msgstr ""
-
 msgid "Error fetching URL {0}"
 msgstr ""
 
 msgid "Error parsing data from URL {0}"
 msgstr ""
 
-msgid "Download Track"
+msgid "Invalid URL {0}"
 msgstr ""
 
-msgid "Filename"
-msgstr "Failinimi"
-
 msgid "Private (only shared as anonymous, unordered points)"
 msgstr ""
 
@@ -23694,9 +23768,6 @@ msgstr ""
 msgid "Uploading trace ..."
 msgstr "Jälje üleslaadimine..."
 
-msgid "Connecting..."
-msgstr ""
-
 msgid "Upload canceled"
 msgstr ""
 
@@ -28159,6 +28230,69 @@ msgstr ""
 msgid "Please load some photos."
 msgstr ""
 
+msgid "Edit photo GPS data"
+msgstr ""
+
+msgid "Edit GPS data of selected photo."
+msgstr ""
+
+msgid "Edit Photo GPS Data"
+msgstr ""
+
+msgid "Please select an image first."
+msgstr ""
+
+msgid "No image selected"
+msgstr ""
+
+msgid "(Empty values delete the according fields.)"
+msgstr ""
+
+msgid "coordinates"
+msgstr ""
+
+msgid "Latitude and longitude"
+msgstr ""
+
+msgid "Edit Image Coordinates"
+msgstr ""
+
+msgid "Edit coordinates in separate editor"
+msgstr ""
+
+msgid "altitude"
+msgstr ""
+
+msgid "Altitude:"
+msgstr ""
+
+msgid "speed"
+msgstr ""
+
+msgid "positive number or empty"
+msgstr ""
+
+msgid "Speed:"
+msgstr ""
+
+msgid "direction"
+msgstr ""
+
+msgid "range -360.0 .. 360.0, or empty"
+msgstr ""
+
+msgid "Direction:"
+msgstr ""
+
+msgid "°"
+msgstr ""
+
+msgid "Undo changes made in this dialog"
+msgstr ""
+
+msgid "Reload GPS data from image file"
+msgstr ""
+
 msgid "New layer for untagged images"
 msgstr ""
 
@@ -31182,9 +31316,6 @@ msgstr "{0}.Wikipedia.org: {1}"
 msgid "Fetches all coordinates from Wikipedia in the current view"
 msgstr "Tõmbab Vikipeediast alla kõik jooksva vaate koordinaadid"
 
-msgid "coordinates"
-msgstr ""
-
 msgid "Category"
 msgstr "Kategooria"
 
diff --git a/i18n/po/eu.po b/i18n/po/eu.po
index f339d63..86af211 100644
--- a/i18n/po/eu.po
+++ b/i18n/po/eu.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: josm\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-12-31 03:40+0100\n"
+"POT-Creation-Date: 2016-01-06 03:38+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: 2015-12-31 04:35+0000\n"
-"X-Generator: Launchpad (build 17865)\n"
+"X-Launchpad-Export-Date: 2016-01-06 04:34+0000\n"
+"X-Generator: Launchpad (build 17876)\n"
 "Language: eu\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -1091,9 +1091,6 @@ msgstr ""
 msgid "Overpass query: "
 msgstr ""
 
-msgid "Overpass server: "
-msgstr ""
-
 msgid "Paste"
 msgstr "Itsatsi"
 
@@ -1398,6 +1395,9 @@ msgstr "Bereizi bidea"
 msgid "Split a way at the selected node."
 msgstr "Bereizi bidea aukeratutako nodoan."
 
+msgid "Cannot split since another split operation is already in progress"
+msgstr ""
+
 msgid ""
 "The current selection cannot be used for splitting - no node is selected."
 msgstr "Hautaketa hau ezin da banatzeko erabili - nodorik ez dago hautatuta."
@@ -1524,6 +1524,27 @@ msgstr ""
 "dira. Bestela, bide guztiek bere kopia jasoko dute eta nodoak, adabegiak "
 "aukeratuak izango dira."
 
+msgid "Existing node"
+msgstr ""
+
+msgid "Both nodes"
+msgstr ""
+
+msgid "New node"
+msgstr ""
+
+msgid "Tags / Memberships"
+msgstr ""
+
+msgid "Unglue"
+msgstr ""
+
+msgid "Where should the tags of the node be put?"
+msgstr ""
+
+msgid "Where should the memberships of this node be put?"
+msgstr ""
+
 msgid "Unglued Node"
 msgstr "Itsatsi gabeko nodoa"
 
@@ -3167,6 +3188,15 @@ msgstr ""
 msgid "Restoring files"
 msgstr "Fitxategiak leheneratzen"
 
+msgid "Unable to delete backup file {0}"
+msgstr ""
+
+msgid "Unable to delete PID file {0}"
+msgstr ""
+
+msgid "Unable to delete archived backup file {0}"
+msgstr ""
+
 msgid "Illegal latitude value ''{0}''"
 msgstr "Latitudearen ''{0}'' balio ilegalak"
 
@@ -4351,6 +4381,9 @@ msgstr ""
 msgid "No \"to\" way found"
 msgstr ""
 
+msgid "\"from\" way equals \"to\" way"
+msgstr ""
+
 msgid "No \"via\" node or way found"
 msgstr ""
 
@@ -7195,9 +7228,6 @@ msgstr ""
 msgid "Tags: {0} / Memberships: {1}"
 msgstr ""
 
-msgid "Tags / Memberships"
-msgstr ""
-
 msgid "Delete the selected key in all objects"
 msgstr ""
 
@@ -11804,6 +11834,15 @@ msgstr ""
 msgid "Please enter the OSM API URL."
 msgstr ""
 
+msgid "Use Overpass server for object downloads"
+msgstr ""
+
+msgid "Overpass server: "
+msgstr ""
+
+msgid "Overpass server"
+msgstr ""
+
 msgid "Proxy settings"
 msgstr ""
 
@@ -13943,6 +13982,9 @@ msgstr ""
 msgid "reserved"
 msgstr ""
 
+msgid "Unable to delete old preferences file {0}"
+msgstr ""
+
 msgid "Outdated Java version"
 msgstr ""
 
@@ -14034,6 +14076,9 @@ msgid ""
 "contain any JOSM object or suitable text. </p></html>"
 msgstr ""
 
+msgid "Unable to delete file {0}"
+msgstr ""
+
 msgid "ms"
 msgstr ""
 
@@ -17193,6 +17238,9 @@ msgstr "Zerbitzu-publikoko ibigailuak (ZPI)"
 msgid "Tourist buses"
 msgstr ""
 
+msgid "Max. speed Heavy Goods Vehicles (km/h)"
+msgstr ""
+
 msgid "Min. speed (km/h)"
 msgstr "Gutxieneko abiadura (km/o)"
 
@@ -19490,12 +19538,6 @@ msgstr ""
 msgid "Dentist"
 msgstr "Dentista"
 
-msgid "Nursing Home"
-msgstr ""
-
-msgid "Retirement Home"
-msgstr ""
-
 msgid "Pharmacy"
 msgstr "Botika"
 
@@ -19523,6 +19565,31 @@ msgstr "(Erabili nazioarteko kodea, hala nola +12-345-67890)"
 msgid "Veterinary"
 msgstr "Albaitaria"
 
+msgid "Social Facility"
+msgstr ""
+
+msgid "Nursing Home"
+msgstr ""
+
+msgid "Group Home"
+msgstr ""
+
+msgid "For"
+msgstr ""
+
+msgid "Assisted Living"
+msgstr ""
+
+msgid "Outreach"
+msgstr ""
+
+msgctxt "social_facility"
+msgid "Shelter"
+msgstr ""
+
+msgid "Food Bank"
+msgstr ""
+
 msgid "Toilets/Restrooms"
 msgstr ""
 
@@ -19565,6 +19632,13 @@ msgstr ""
 msgid "urinal"
 msgstr ""
 
+msgctxt "toilets"
+msgid "Diaper"
+msgstr ""
+
+msgid "room"
+msgstr ""
+
 msgid "Post Box"
 msgstr "Gutunontzia"
 
@@ -23602,24 +23676,24 @@ msgstr ""
 msgid "Download GPX track from openstreetmap.org"
 msgstr ""
 
+msgid "Download Track"
+msgstr ""
+
+msgid "Filename"
+msgstr ""
+
 msgid ""
 "Error occurred while parsing gpx file {0}. Only a part of the file will be "
 "available."
 msgstr ""
 
-msgid "Invalid URL {0}"
-msgstr ""
-
 msgid "Error fetching URL {0}"
 msgstr ""
 
 msgid "Error parsing data from URL {0}"
 msgstr ""
 
-msgid "Download Track"
-msgstr ""
-
-msgid "Filename"
+msgid "Invalid URL {0}"
 msgstr ""
 
 msgid "Private (only shared as anonymous, unordered points)"
@@ -23669,9 +23743,6 @@ msgstr ""
 msgid "Uploading trace ..."
 msgstr ""
 
-msgid "Connecting..."
-msgstr ""
-
 msgid "Upload canceled"
 msgstr ""
 
@@ -28115,6 +28186,69 @@ msgstr ""
 msgid "Please load some photos."
 msgstr ""
 
+msgid "Edit photo GPS data"
+msgstr ""
+
+msgid "Edit GPS data of selected photo."
+msgstr ""
+
+msgid "Edit Photo GPS Data"
+msgstr ""
+
+msgid "Please select an image first."
+msgstr ""
+
+msgid "No image selected"
+msgstr ""
+
+msgid "(Empty values delete the according fields.)"
+msgstr ""
+
+msgid "coordinates"
+msgstr ""
+
+msgid "Latitude and longitude"
+msgstr ""
+
+msgid "Edit Image Coordinates"
+msgstr ""
+
+msgid "Edit coordinates in separate editor"
+msgstr ""
+
+msgid "altitude"
+msgstr ""
+
+msgid "Altitude:"
+msgstr ""
+
+msgid "speed"
+msgstr ""
+
+msgid "positive number or empty"
+msgstr ""
+
+msgid "Speed:"
+msgstr ""
+
+msgid "direction"
+msgstr ""
+
+msgid "range -360.0 .. 360.0, or empty"
+msgstr ""
+
+msgid "Direction:"
+msgstr ""
+
+msgid "°"
+msgstr ""
+
+msgid "Undo changes made in this dialog"
+msgstr ""
+
+msgid "Reload GPS data from image file"
+msgstr ""
+
 msgid "New layer for untagged images"
 msgstr ""
 
@@ -31139,9 +31273,6 @@ msgstr ""
 msgid "Fetches all coordinates from Wikipedia in the current view"
 msgstr ""
 
-msgid "coordinates"
-msgstr ""
-
 msgid "Category"
 msgstr ""
 
diff --git a/i18n/po/fa.po b/i18n/po/fa.po
index 80bcb45..89869f9 100644
--- a/i18n/po/fa.po
+++ b/i18n/po/fa.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: josm\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-12-31 03:40+0100\n"
+"POT-Creation-Date: 2016-01-06 03:38+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: 2015-12-31 04:55+0000\n"
-"X-Generator: Launchpad (build 17865)\n"
+"X-Launchpad-Export-Date: 2016-01-06 04:56+0000\n"
+"X-Generator: Launchpad (build 17876)\n"
 "Language: fa\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -1117,9 +1117,6 @@ msgstr ""
 msgid "Overpass query: "
 msgstr ""
 
-msgid "Overpass server: "
-msgstr ""
-
 msgid "Paste"
 msgstr "چسباندن"
 
@@ -1417,6 +1414,9 @@ msgstr "تقسیم راه"
 msgid "Split a way at the selected node."
 msgstr ""
 
+msgid "Cannot split since another split operation is already in progress"
+msgstr ""
+
 msgid ""
 "The current selection cannot be used for splitting - no node is selected."
 msgstr ""
@@ -1528,6 +1528,27 @@ msgid ""
 "own copy and all nodes will be selected."
 msgstr ""
 
+msgid "Existing node"
+msgstr ""
+
+msgid "Both nodes"
+msgstr ""
+
+msgid "New node"
+msgstr ""
+
+msgid "Tags / Memberships"
+msgstr ""
+
+msgid "Unglue"
+msgstr ""
+
+msgid "Where should the tags of the node be put?"
+msgstr ""
+
+msgid "Where should the memberships of this node be put?"
+msgstr ""
+
 msgid "Unglued Node"
 msgstr ""
 
@@ -3118,6 +3139,15 @@ msgstr ""
 msgid "Restoring files"
 msgstr ""
 
+msgid "Unable to delete backup file {0}"
+msgstr ""
+
+msgid "Unable to delete PID file {0}"
+msgstr ""
+
+msgid "Unable to delete archived backup file {0}"
+msgstr ""
+
 msgid "Illegal latitude value ''{0}''"
 msgstr ""
 
@@ -4274,6 +4304,9 @@ msgstr ""
 msgid "No \"to\" way found"
 msgstr ""
 
+msgid "\"from\" way equals \"to\" way"
+msgstr ""
+
 msgid "No \"via\" node or way found"
 msgstr ""
 
@@ -7072,9 +7105,6 @@ msgstr ""
 msgid "Tags: {0} / Memberships: {1}"
 msgstr ""
 
-msgid "Tags / Memberships"
-msgstr ""
-
 msgid "Delete the selected key in all objects"
 msgstr ""
 
@@ -11684,6 +11714,15 @@ msgstr ""
 msgid "Please enter the OSM API URL."
 msgstr ""
 
+msgid "Use Overpass server for object downloads"
+msgstr ""
+
+msgid "Overpass server: "
+msgstr ""
+
+msgid "Overpass server"
+msgstr ""
+
 msgid "Proxy settings"
 msgstr ""
 
@@ -13822,6 +13861,9 @@ msgstr ""
 msgid "reserved"
 msgstr ""
 
+msgid "Unable to delete old preferences file {0}"
+msgstr ""
+
 msgid "Outdated Java version"
 msgstr ""
 
@@ -13913,6 +13955,9 @@ msgid ""
 "contain any JOSM object or suitable text. </p></html>"
 msgstr ""
 
+msgid "Unable to delete file {0}"
+msgstr ""
+
 msgid "ms"
 msgstr ""
 
@@ -17027,6 +17072,9 @@ msgstr ""
 msgid "Tourist buses"
 msgstr ""
 
+msgid "Max. speed Heavy Goods Vehicles (km/h)"
+msgstr ""
+
 msgid "Min. speed (km/h)"
 msgstr ""
 
@@ -19324,12 +19372,6 @@ msgstr ""
 msgid "Dentist"
 msgstr ""
 
-msgid "Nursing Home"
-msgstr ""
-
-msgid "Retirement Home"
-msgstr ""
-
 msgid "Pharmacy"
 msgstr ""
 
@@ -19357,6 +19399,31 @@ msgstr ""
 msgid "Veterinary"
 msgstr ""
 
+msgid "Social Facility"
+msgstr ""
+
+msgid "Nursing Home"
+msgstr ""
+
+msgid "Group Home"
+msgstr ""
+
+msgid "For"
+msgstr ""
+
+msgid "Assisted Living"
+msgstr ""
+
+msgid "Outreach"
+msgstr ""
+
+msgctxt "social_facility"
+msgid "Shelter"
+msgstr ""
+
+msgid "Food Bank"
+msgstr ""
+
 msgid "Toilets/Restrooms"
 msgstr ""
 
@@ -19399,6 +19466,13 @@ msgstr ""
 msgid "urinal"
 msgstr ""
 
+msgctxt "toilets"
+msgid "Diaper"
+msgstr ""
+
+msgid "room"
+msgstr ""
+
 msgid "Post Box"
 msgstr ""
 
@@ -23436,24 +23510,24 @@ msgstr ""
 msgid "Download GPX track from openstreetmap.org"
 msgstr ""
 
+msgid "Download Track"
+msgstr ""
+
+msgid "Filename"
+msgstr ""
+
 msgid ""
 "Error occurred while parsing gpx file {0}. Only a part of the file will be "
 "available."
 msgstr ""
 
-msgid "Invalid URL {0}"
-msgstr ""
-
 msgid "Error fetching URL {0}"
 msgstr ""
 
 msgid "Error parsing data from URL {0}"
 msgstr ""
 
-msgid "Download Track"
-msgstr ""
-
-msgid "Filename"
+msgid "Invalid URL {0}"
 msgstr ""
 
 msgid "Private (only shared as anonymous, unordered points)"
@@ -23503,9 +23577,6 @@ msgstr ""
 msgid "Uploading trace ..."
 msgstr ""
 
-msgid "Connecting..."
-msgstr ""
-
 msgid "Upload canceled"
 msgstr ""
 
@@ -27944,6 +28015,69 @@ msgstr ""
 msgid "Please load some photos."
 msgstr ""
 
+msgid "Edit photo GPS data"
+msgstr ""
+
+msgid "Edit GPS data of selected photo."
+msgstr ""
+
+msgid "Edit Photo GPS Data"
+msgstr ""
+
+msgid "Please select an image first."
+msgstr ""
+
+msgid "No image selected"
+msgstr ""
+
+msgid "(Empty values delete the according fields.)"
+msgstr ""
+
+msgid "coordinates"
+msgstr ""
+
+msgid "Latitude and longitude"
+msgstr ""
+
+msgid "Edit Image Coordinates"
+msgstr ""
+
+msgid "Edit coordinates in separate editor"
+msgstr ""
+
+msgid "altitude"
+msgstr ""
+
+msgid "Altitude:"
+msgstr ""
+
+msgid "speed"
+msgstr ""
+
+msgid "positive number or empty"
+msgstr ""
+
+msgid "Speed:"
+msgstr ""
+
+msgid "direction"
+msgstr ""
+
+msgid "range -360.0 .. 360.0, or empty"
+msgstr ""
+
+msgid "Direction:"
+msgstr ""
+
+msgid "°"
+msgstr ""
+
+msgid "Undo changes made in this dialog"
+msgstr ""
+
+msgid "Reload GPS data from image file"
+msgstr ""
+
 msgid "New layer for untagged images"
 msgstr ""
 
@@ -30960,9 +31094,6 @@ msgstr ""
 msgid "Fetches all coordinates from Wikipedia in the current view"
 msgstr ""
 
-msgid "coordinates"
-msgstr ""
-
 msgid "Category"
 msgstr ""
 
diff --git a/i18n/po/fi.po b/i18n/po/fi.po
index 5463c39..d766cac 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: 2015-12-31 03:40+0100\n"
+"POT-Creation-Date: 2016-01-06 03:38+0100\n"
 "PO-Revision-Date: 2015-10-16 12:02+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: 2015-12-31 04:42+0000\n"
-"X-Generator: Launchpad (build 17865)\n"
+"X-Launchpad-Export-Date: 2016-01-06 04:40+0000\n"
+"X-Generator: Launchpad (build 17876)\n"
 "Language: fi\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -1137,9 +1137,6 @@ msgstr ""
 msgid "Overpass query: "
 msgstr "Overpass-hakulauseke: "
 
-msgid "Overpass server: "
-msgstr ""
-
 msgid "Paste"
 msgstr "Liitä"
 
@@ -1445,6 +1442,9 @@ msgstr "Katkaise polku"
 msgid "Split a way at the selected node."
 msgstr "Katkaisee polun valitun pisteen kohdalta."
 
+msgid "Cannot split since another split operation is already in progress"
+msgstr ""
+
 msgid ""
 "The current selection cannot be used for splitting - no node is selected."
 msgstr ""
@@ -1577,6 +1577,27 @@ msgstr ""
 "pisteistä ja uudet pisteet tulevat valituiksi. Muussa tapauksessa\n"
 "kaikki polut saavat oman kopionsa ja kaikki pisteet tulevat valituiksi."
 
+msgid "Existing node"
+msgstr ""
+
+msgid "Both nodes"
+msgstr ""
+
+msgid "New node"
+msgstr ""
+
+msgid "Tags / Memberships"
+msgstr "Tagit / Relaatiojäsenyydet"
+
+msgid "Unglue"
+msgstr ""
+
+msgid "Where should the tags of the node be put?"
+msgstr ""
+
+msgid "Where should the memberships of this node be put?"
+msgstr ""
+
 msgid "Unglued Node"
 msgstr "Irroitettu piste"
 
@@ -3279,6 +3300,15 @@ msgstr "Muokkauksesi on automaattitallennettu paikallisesti."
 msgid "Restoring files"
 msgstr "Palautetaan tiedostot"
 
+msgid "Unable to delete backup file {0}"
+msgstr ""
+
+msgid "Unable to delete PID file {0}"
+msgstr ""
+
+msgid "Unable to delete archived backup file {0}"
+msgstr ""
+
 msgid "Illegal latitude value ''{0}''"
 msgstr "Virheellinen leveyspiiri ''{0}''"
 
@@ -4500,6 +4530,9 @@ msgstr "Ei yhtään polkua roolissa ''from''"
 msgid "No \"to\" way found"
 msgstr "Ei yhtään polkua roolissa ''to''"
 
+msgid "\"from\" way equals \"to\" way"
+msgstr ""
+
 msgid "No \"via\" node or way found"
 msgstr "Ei yhtään polkua tai pistettä roolissa ''via''"
 
@@ -7430,9 +7463,6 @@ msgstr ""
 msgid "Tags: {0} / Memberships: {1}"
 msgstr "Tagit: {0} / Relaatiojäsenyydet: {1}"
 
-msgid "Tags / Memberships"
-msgstr "Tagit / Relaatiojäsenyydet"
-
 msgid "Delete the selected key in all objects"
 msgstr "Poista valittu avain kaikista objekteista"
 
@@ -12352,6 +12382,15 @@ msgstr ""
 msgid "Please enter the OSM API URL."
 msgstr ""
 
+msgid "Use Overpass server for object downloads"
+msgstr ""
+
+msgid "Overpass server: "
+msgstr ""
+
+msgid "Overpass server"
+msgstr ""
+
 msgid "Proxy settings"
 msgstr "Välityspalvelimen asetukset"
 
@@ -14625,6 +14664,9 @@ msgstr ""
 msgid "reserved"
 msgstr "varattu"
 
+msgid "Unable to delete old preferences file {0}"
+msgstr ""
+
 msgid "Outdated Java version"
 msgstr ""
 
@@ -14728,6 +14770,9 @@ msgstr ""
 "<html><p>Valitettavasti tageja ei voitu liittää leikepöydältä, koska se ei "
 "sisältänyt JOSM-objektia tai sopivaa tekstiä.</p></html>"
 
+msgid "Unable to delete file {0}"
+msgstr ""
+
 msgid "ms"
 msgstr ""
 
@@ -17887,6 +17932,9 @@ msgstr "Julkinen liikenne (psv)"
 msgid "Tourist buses"
 msgstr "Muut kuin julkisen liikenteen linja-autot"
 
+msgid "Max. speed Heavy Goods Vehicles (km/h)"
+msgstr ""
+
 msgid "Min. speed (km/h)"
 msgstr "Miniminopeus (km/h)"
 
@@ -20184,12 +20232,6 @@ msgstr ""
 msgid "Dentist"
 msgstr "Hammaslääkäri"
 
-msgid "Nursing Home"
-msgstr ""
-
-msgid "Retirement Home"
-msgstr ""
-
 msgid "Pharmacy"
 msgstr "Apteekki"
 
@@ -20217,6 +20259,31 @@ msgstr ""
 msgid "Veterinary"
 msgstr "Eläinlääkäri"
 
+msgid "Social Facility"
+msgstr ""
+
+msgid "Nursing Home"
+msgstr ""
+
+msgid "Group Home"
+msgstr ""
+
+msgid "For"
+msgstr ""
+
+msgid "Assisted Living"
+msgstr ""
+
+msgid "Outreach"
+msgstr ""
+
+msgctxt "social_facility"
+msgid "Shelter"
+msgstr ""
+
+msgid "Food Bank"
+msgstr ""
+
 msgid "Toilets/Restrooms"
 msgstr "WC"
 
@@ -20259,6 +20326,13 @@ msgstr ""
 msgid "urinal"
 msgstr ""
 
+msgctxt "toilets"
+msgid "Diaper"
+msgstr ""
+
+msgid "room"
+msgstr ""
+
 msgid "Post Box"
 msgstr "Postilaatikko"
 
@@ -24311,6 +24385,12 @@ msgstr ""
 msgid "Download GPX track from openstreetmap.org"
 msgstr ""
 
+msgid "Download Track"
+msgstr ""
+
+msgid "Filename"
+msgstr "Tiedostonimi"
+
 msgid ""
 "Error occurred while parsing gpx file {0}. Only a part of the file will be "
 "available."
@@ -24318,21 +24398,15 @@ msgstr ""
 "Virhe tulkittaessa gpx -tiedostoa {0}. Vain osa tiedoston sisällöstä tulee "
 "käyttöön."
 
-msgid "Invalid URL {0}"
-msgstr ""
-
 msgid "Error fetching URL {0}"
 msgstr ""
 
 msgid "Error parsing data from URL {0}"
 msgstr ""
 
-msgid "Download Track"
+msgid "Invalid URL {0}"
 msgstr ""
 
-msgid "Filename"
-msgstr "Tiedostonimi"
-
 msgid "Private (only shared as anonymous, unordered points)"
 msgstr ""
 "Yksityinen (palvelimelta jaetaan vain pisteet ilman nimeä ja aikaleimoja)"
@@ -24388,9 +24462,6 @@ msgstr "GPX-tasoa ei valittuna. Ei voida lähettää jälkeä."
 msgid "Uploading trace ..."
 msgstr "Lähetetään GPS-jälkeä ..."
 
-msgid "Connecting..."
-msgstr "Yhdistetään..."
-
 msgid "Upload canceled"
 msgstr ""
 
@@ -28891,6 +28962,69 @@ msgstr ""
 msgid "Please load some photos."
 msgstr ""
 
+msgid "Edit photo GPS data"
+msgstr ""
+
+msgid "Edit GPS data of selected photo."
+msgstr ""
+
+msgid "Edit Photo GPS Data"
+msgstr ""
+
+msgid "Please select an image first."
+msgstr ""
+
+msgid "No image selected"
+msgstr ""
+
+msgid "(Empty values delete the according fields.)"
+msgstr ""
+
+msgid "coordinates"
+msgstr ""
+
+msgid "Latitude and longitude"
+msgstr ""
+
+msgid "Edit Image Coordinates"
+msgstr ""
+
+msgid "Edit coordinates in separate editor"
+msgstr ""
+
+msgid "altitude"
+msgstr ""
+
+msgid "Altitude:"
+msgstr ""
+
+msgid "speed"
+msgstr ""
+
+msgid "positive number or empty"
+msgstr ""
+
+msgid "Speed:"
+msgstr ""
+
+msgid "direction"
+msgstr ""
+
+msgid "range -360.0 .. 360.0, or empty"
+msgstr ""
+
+msgid "Direction:"
+msgstr ""
+
+msgid "°"
+msgstr ""
+
+msgid "Undo changes made in this dialog"
+msgstr ""
+
+msgid "Reload GPS data from image file"
+msgstr ""
+
 msgid "New layer for untagged images"
 msgstr ""
 
@@ -31981,9 +32115,6 @@ msgstr ""
 msgid "Fetches all coordinates from Wikipedia in the current view"
 msgstr ""
 
-msgid "coordinates"
-msgstr ""
-
 msgid "Category"
 msgstr ""
 
diff --git a/i18n/po/fil.po b/i18n/po/fil.po
index d385192..bafccff 100644
--- a/i18n/po/fil.po
+++ b/i18n/po/fil.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: josm\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-12-31 03:40+0100\n"
+"POT-Creation-Date: 2016-01-06 03:38+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: 2015-12-31 05:08+0000\n"
-"X-Generator: Launchpad (build 17865)\n"
+"X-Launchpad-Export-Date: 2016-01-06 05:10+0000\n"
+"X-Generator: Launchpad (build 17876)\n"
 "Language: fil\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -1056,9 +1056,6 @@ msgstr ""
 msgid "Overpass query: "
 msgstr ""
 
-msgid "Overpass server: "
-msgstr ""
-
 msgid "Paste"
 msgstr ""
 
@@ -1348,6 +1345,9 @@ msgstr ""
 msgid "Split a way at the selected node."
 msgstr ""
 
+msgid "Cannot split since another split operation is already in progress"
+msgstr ""
+
 msgid ""
 "The current selection cannot be used for splitting - no node is selected."
 msgstr ""
@@ -1459,6 +1459,27 @@ msgid ""
 "own copy and all nodes will be selected."
 msgstr ""
 
+msgid "Existing node"
+msgstr ""
+
+msgid "Both nodes"
+msgstr ""
+
+msgid "New node"
+msgstr ""
+
+msgid "Tags / Memberships"
+msgstr ""
+
+msgid "Unglue"
+msgstr ""
+
+msgid "Where should the tags of the node be put?"
+msgstr ""
+
+msgid "Where should the memberships of this node be put?"
+msgstr ""
+
 msgid "Unglued Node"
 msgstr ""
 
@@ -3049,6 +3070,15 @@ msgstr ""
 msgid "Restoring files"
 msgstr ""
 
+msgid "Unable to delete backup file {0}"
+msgstr ""
+
+msgid "Unable to delete PID file {0}"
+msgstr ""
+
+msgid "Unable to delete archived backup file {0}"
+msgstr ""
+
 msgid "Illegal latitude value ''{0}''"
 msgstr ""
 
@@ -4207,6 +4237,9 @@ msgstr ""
 msgid "No \"to\" way found"
 msgstr ""
 
+msgid "\"from\" way equals \"to\" way"
+msgstr ""
+
 msgid "No \"via\" node or way found"
 msgstr ""
 
@@ -7004,9 +7037,6 @@ msgstr ""
 msgid "Tags: {0} / Memberships: {1}"
 msgstr ""
 
-msgid "Tags / Memberships"
-msgstr ""
-
 msgid "Delete the selected key in all objects"
 msgstr ""
 
@@ -11611,6 +11641,15 @@ msgstr ""
 msgid "Please enter the OSM API URL."
 msgstr ""
 
+msgid "Use Overpass server for object downloads"
+msgstr ""
+
+msgid "Overpass server: "
+msgstr ""
+
+msgid "Overpass server"
+msgstr ""
+
 msgid "Proxy settings"
 msgstr ""
 
@@ -13749,6 +13788,9 @@ msgstr ""
 msgid "reserved"
 msgstr ""
 
+msgid "Unable to delete old preferences file {0}"
+msgstr ""
+
 msgid "Outdated Java version"
 msgstr ""
 
@@ -13840,6 +13882,9 @@ msgid ""
 "contain any JOSM object or suitable text. </p></html>"
 msgstr ""
 
+msgid "Unable to delete file {0}"
+msgstr ""
+
 msgid "ms"
 msgstr ""
 
@@ -16954,6 +16999,9 @@ msgstr ""
 msgid "Tourist buses"
 msgstr ""
 
+msgid "Max. speed Heavy Goods Vehicles (km/h)"
+msgstr ""
+
 msgid "Min. speed (km/h)"
 msgstr ""
 
@@ -19251,12 +19299,6 @@ msgstr ""
 msgid "Dentist"
 msgstr ""
 
-msgid "Nursing Home"
-msgstr ""
-
-msgid "Retirement Home"
-msgstr ""
-
 msgid "Pharmacy"
 msgstr ""
 
@@ -19284,6 +19326,31 @@ msgstr ""
 msgid "Veterinary"
 msgstr ""
 
+msgid "Social Facility"
+msgstr ""
+
+msgid "Nursing Home"
+msgstr ""
+
+msgid "Group Home"
+msgstr ""
+
+msgid "For"
+msgstr ""
+
+msgid "Assisted Living"
+msgstr ""
+
+msgid "Outreach"
+msgstr ""
+
+msgctxt "social_facility"
+msgid "Shelter"
+msgstr ""
+
+msgid "Food Bank"
+msgstr ""
+
 msgid "Toilets/Restrooms"
 msgstr ""
 
@@ -19326,6 +19393,13 @@ msgstr ""
 msgid "urinal"
 msgstr ""
 
+msgctxt "toilets"
+msgid "Diaper"
+msgstr ""
+
+msgid "room"
+msgstr ""
+
 msgid "Post Box"
 msgstr ""
 
@@ -23363,24 +23437,24 @@ msgstr ""
 msgid "Download GPX track from openstreetmap.org"
 msgstr ""
 
+msgid "Download Track"
+msgstr ""
+
+msgid "Filename"
+msgstr ""
+
 msgid ""
 "Error occurred while parsing gpx file {0}. Only a part of the file will be "
 "available."
 msgstr ""
 
-msgid "Invalid URL {0}"
-msgstr ""
-
 msgid "Error fetching URL {0}"
 msgstr ""
 
 msgid "Error parsing data from URL {0}"
 msgstr ""
 
-msgid "Download Track"
-msgstr ""
-
-msgid "Filename"
+msgid "Invalid URL {0}"
 msgstr ""
 
 msgid "Private (only shared as anonymous, unordered points)"
@@ -23430,9 +23504,6 @@ msgstr ""
 msgid "Uploading trace ..."
 msgstr ""
 
-msgid "Connecting..."
-msgstr ""
-
 msgid "Upload canceled"
 msgstr ""
 
@@ -27871,6 +27942,69 @@ msgstr ""
 msgid "Please load some photos."
 msgstr ""
 
+msgid "Edit photo GPS data"
+msgstr ""
+
+msgid "Edit GPS data of selected photo."
+msgstr ""
+
+msgid "Edit Photo GPS Data"
+msgstr ""
+
+msgid "Please select an image first."
+msgstr ""
+
+msgid "No image selected"
+msgstr ""
+
+msgid "(Empty values delete the according fields.)"
+msgstr ""
+
+msgid "coordinates"
+msgstr ""
+
+msgid "Latitude and longitude"
+msgstr ""
+
+msgid "Edit Image Coordinates"
+msgstr ""
+
+msgid "Edit coordinates in separate editor"
+msgstr ""
+
+msgid "altitude"
+msgstr ""
+
+msgid "Altitude:"
+msgstr ""
+
+msgid "speed"
+msgstr ""
+
+msgid "positive number or empty"
+msgstr ""
+
+msgid "Speed:"
+msgstr ""
+
+msgid "direction"
+msgstr ""
+
+msgid "range -360.0 .. 360.0, or empty"
+msgstr ""
+
+msgid "Direction:"
+msgstr ""
+
+msgid "°"
+msgstr ""
+
+msgid "Undo changes made in this dialog"
+msgstr ""
+
+msgid "Reload GPS data from image file"
+msgstr ""
+
 msgid "New layer for untagged images"
 msgstr ""
 
@@ -30887,9 +31021,6 @@ msgstr ""
 msgid "Fetches all coordinates from Wikipedia in the current view"
 msgstr ""
 
-msgid "coordinates"
-msgstr ""
-
 msgid "Category"
 msgstr ""
 
diff --git a/i18n/po/fo.po b/i18n/po/fo.po
index 06a1045..b1009dd 100644
--- a/i18n/po/fo.po
+++ b/i18n/po/fo.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: josm\n"
 "Report-Msgid-Bugs-To: FULL NAME <EMAIL at ADDRESS>\n"
-"POT-Creation-Date: 2015-12-31 03:40+0100\n"
+"POT-Creation-Date: 2016-01-06 03:38+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: 2015-12-31 04:41+0000\n"
-"X-Generator: Launchpad (build 17865)\n"
+"X-Launchpad-Export-Date: 2016-01-06 04:40+0000\n"
+"X-Generator: Launchpad (build 17876)\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
 msgstr "{0}: valmøguleiki ''{1}'' er tvítýddur"
@@ -1055,9 +1055,6 @@ msgstr ""
 msgid "Overpass query: "
 msgstr ""
 
-msgid "Overpass server: "
-msgstr ""
-
 msgid "Paste"
 msgstr ""
 
@@ -1347,6 +1344,9 @@ msgstr ""
 msgid "Split a way at the selected node."
 msgstr ""
 
+msgid "Cannot split since another split operation is already in progress"
+msgstr ""
+
 msgid ""
 "The current selection cannot be used for splitting - no node is selected."
 msgstr ""
@@ -1458,6 +1458,27 @@ msgid ""
 "own copy and all nodes will be selected."
 msgstr ""
 
+msgid "Existing node"
+msgstr ""
+
+msgid "Both nodes"
+msgstr ""
+
+msgid "New node"
+msgstr ""
+
+msgid "Tags / Memberships"
+msgstr ""
+
+msgid "Unglue"
+msgstr ""
+
+msgid "Where should the tags of the node be put?"
+msgstr ""
+
+msgid "Where should the memberships of this node be put?"
+msgstr ""
+
 msgid "Unglued Node"
 msgstr ""
 
@@ -3048,6 +3069,15 @@ msgstr ""
 msgid "Restoring files"
 msgstr ""
 
+msgid "Unable to delete backup file {0}"
+msgstr ""
+
+msgid "Unable to delete PID file {0}"
+msgstr ""
+
+msgid "Unable to delete archived backup file {0}"
+msgstr ""
+
 msgid "Illegal latitude value ''{0}''"
 msgstr ""
 
@@ -4206,6 +4236,9 @@ msgstr ""
 msgid "No \"to\" way found"
 msgstr ""
 
+msgid "\"from\" way equals \"to\" way"
+msgstr ""
+
 msgid "No \"via\" node or way found"
 msgstr ""
 
@@ -7003,9 +7036,6 @@ msgstr ""
 msgid "Tags: {0} / Memberships: {1}"
 msgstr ""
 
-msgid "Tags / Memberships"
-msgstr ""
-
 msgid "Delete the selected key in all objects"
 msgstr ""
 
@@ -11610,6 +11640,15 @@ msgstr ""
 msgid "Please enter the OSM API URL."
 msgstr ""
 
+msgid "Use Overpass server for object downloads"
+msgstr ""
+
+msgid "Overpass server: "
+msgstr ""
+
+msgid "Overpass server"
+msgstr ""
+
 msgid "Proxy settings"
 msgstr ""
 
@@ -13748,6 +13787,9 @@ msgstr ""
 msgid "reserved"
 msgstr ""
 
+msgid "Unable to delete old preferences file {0}"
+msgstr ""
+
 msgid "Outdated Java version"
 msgstr ""
 
@@ -13839,6 +13881,9 @@ msgid ""
 "contain any JOSM object or suitable text. </p></html>"
 msgstr ""
 
+msgid "Unable to delete file {0}"
+msgstr ""
+
 msgid "ms"
 msgstr ""
 
@@ -16953,6 +16998,9 @@ msgstr ""
 msgid "Tourist buses"
 msgstr ""
 
+msgid "Max. speed Heavy Goods Vehicles (km/h)"
+msgstr ""
+
 msgid "Min. speed (km/h)"
 msgstr ""
 
@@ -19250,12 +19298,6 @@ msgstr ""
 msgid "Dentist"
 msgstr ""
 
-msgid "Nursing Home"
-msgstr ""
-
-msgid "Retirement Home"
-msgstr ""
-
 msgid "Pharmacy"
 msgstr ""
 
@@ -19283,6 +19325,31 @@ msgstr ""
 msgid "Veterinary"
 msgstr ""
 
+msgid "Social Facility"
+msgstr ""
+
+msgid "Nursing Home"
+msgstr ""
+
+msgid "Group Home"
+msgstr ""
+
+msgid "For"
+msgstr ""
+
+msgid "Assisted Living"
+msgstr ""
+
+msgid "Outreach"
+msgstr ""
+
+msgctxt "social_facility"
+msgid "Shelter"
+msgstr ""
+
+msgid "Food Bank"
+msgstr ""
+
 msgid "Toilets/Restrooms"
 msgstr ""
 
@@ -19325,6 +19392,13 @@ msgstr ""
 msgid "urinal"
 msgstr ""
 
+msgctxt "toilets"
+msgid "Diaper"
+msgstr ""
+
+msgid "room"
+msgstr ""
+
 msgid "Post Box"
 msgstr ""
 
@@ -23362,24 +23436,24 @@ msgstr ""
 msgid "Download GPX track from openstreetmap.org"
 msgstr ""
 
+msgid "Download Track"
+msgstr ""
+
+msgid "Filename"
+msgstr ""
+
 msgid ""
 "Error occurred while parsing gpx file {0}. Only a part of the file will be "
 "available."
 msgstr ""
 
-msgid "Invalid URL {0}"
-msgstr ""
-
 msgid "Error fetching URL {0}"
 msgstr ""
 
 msgid "Error parsing data from URL {0}"
 msgstr ""
 
-msgid "Download Track"
-msgstr ""
-
-msgid "Filename"
+msgid "Invalid URL {0}"
 msgstr ""
 
 msgid "Private (only shared as anonymous, unordered points)"
@@ -23429,9 +23503,6 @@ msgstr ""
 msgid "Uploading trace ..."
 msgstr ""
 
-msgid "Connecting..."
-msgstr ""
-
 msgid "Upload canceled"
 msgstr ""
 
@@ -27870,6 +27941,69 @@ msgstr ""
 msgid "Please load some photos."
 msgstr ""
 
+msgid "Edit photo GPS data"
+msgstr ""
+
+msgid "Edit GPS data of selected photo."
+msgstr ""
+
+msgid "Edit Photo GPS Data"
+msgstr ""
+
+msgid "Please select an image first."
+msgstr ""
+
+msgid "No image selected"
+msgstr ""
+
+msgid "(Empty values delete the according fields.)"
+msgstr ""
+
+msgid "coordinates"
+msgstr ""
+
+msgid "Latitude and longitude"
+msgstr ""
+
+msgid "Edit Image Coordinates"
+msgstr ""
+
+msgid "Edit coordinates in separate editor"
+msgstr ""
+
+msgid "altitude"
+msgstr ""
+
+msgid "Altitude:"
+msgstr ""
+
+msgid "speed"
+msgstr ""
+
+msgid "positive number or empty"
+msgstr ""
+
+msgid "Speed:"
+msgstr ""
+
+msgid "direction"
+msgstr ""
+
+msgid "range -360.0 .. 360.0, or empty"
+msgstr ""
+
+msgid "Direction:"
+msgstr ""
+
+msgid "°"
+msgstr ""
+
+msgid "Undo changes made in this dialog"
+msgstr ""
+
+msgid "Reload GPS data from image file"
+msgstr ""
+
 msgid "New layer for untagged images"
 msgstr ""
 
@@ -30886,9 +31020,6 @@ msgstr ""
 msgid "Fetches all coordinates from Wikipedia in the current view"
 msgstr ""
 
-msgid "coordinates"
-msgstr ""
-
 msgid "Category"
 msgstr ""
 
diff --git a/i18n/po/fr.po b/i18n/po/fr.po
index c903003..d359e8a 100644
--- a/i18n/po/fr.po
+++ b/i18n/po/fr.po
@@ -5,16 +5,16 @@ msgid ""
 msgstr ""
 "Project-Id-Version: fr\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-12-31 03:40+0100\n"
-"PO-Revision-Date: 2015-12-29 22:54+0000\n"
-"Last-Translator: Don-vip <Unknown>\n"
+"POT-Creation-Date: 2016-01-06 03:38+0100\n"
+"PO-Revision-Date: 2016-01-05 23:48+0000\n"
+"Last-Translator: Simon Legner <Unknown>\n"
 "Language-Team: Fr <>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n > 1;\n"
-"X-Launchpad-Export-Date: 2015-12-31 04:42+0000\n"
-"X-Generator: Launchpad (build 17865)\n"
+"X-Launchpad-Export-Date: 2016-01-06 04:41+0000\n"
+"X-Generator: Launchpad (build 17876)\n"
 "Language: fr\n"
 "X-Poedit-Bookmarks: 1767,-1,-1,2669,-1,-1,-1,-1,-1,-1\n"
 
@@ -1156,9 +1156,6 @@ msgstr "Erreur d''analyse"
 msgid "Overpass query: "
 msgstr "Requête Overpass  : "
 
-msgid "Overpass server: "
-msgstr "Serveur Overpass : "
-
 msgid "Paste"
 msgstr "Coller"
 
@@ -1462,6 +1459,9 @@ msgstr "Couper le chemin"
 msgid "Split a way at the selected node."
 msgstr "Couper le chemin au nœud sélectionné"
 
+msgid "Cannot split since another split operation is already in progress"
+msgstr ""
+
 msgid ""
 "The current selection cannot be used for splitting - no node is selected."
 msgstr ""
@@ -1592,6 +1592,27 @@ msgstr ""
 "les chemins recevront leur propre copie et tous les nœuds seront "
 "sélectionnés."
 
+msgid "Existing node"
+msgstr "Nœud existant"
+
+msgid "Both nodes"
+msgstr "Les deux nœuds"
+
+msgid "New node"
+msgstr "Nouveau nœud"
+
+msgid "Tags / Memberships"
+msgstr "Attributs / Appartenance"
+
+msgid "Unglue"
+msgstr ""
+
+msgid "Where should the tags of the node be put?"
+msgstr "Où devraient aller les attributs du nœud ?"
+
+msgid "Where should the memberships of this node be put?"
+msgstr ""
+
 msgid "Unglued Node"
 msgstr "Nœud séparé"
 
@@ -3336,6 +3357,15 @@ msgstr "Votre travail sera automatiquement sauvegardé"
 msgid "Restoring files"
 msgstr "Restauration des données"
 
+msgid "Unable to delete backup file {0}"
+msgstr "Impossible de supprimer le fichier de sauvegarde {0}"
+
+msgid "Unable to delete PID file {0}"
+msgstr ""
+
+msgid "Unable to delete archived backup file {0}"
+msgstr "Impossible de supprimer le fichier de sauvegarde archivé {0}"
+
 msgid "Illegal latitude value ''{0}''"
 msgstr "Valeur de latitude ''{0}'' erronée"
 
@@ -4602,6 +4632,9 @@ msgstr "Aucun chemin \"from\" n’a été trouvé"
 msgid "No \"to\" way found"
 msgstr "Aucun chemin \"to\" n’a été trouvé"
 
+msgid "\"from\" way equals \"to\" way"
+msgstr ""
+
 msgid "No \"via\" node or way found"
 msgstr "Aucun chemin \"via\" n’a été trouvé"
 
@@ -7643,9 +7676,6 @@ msgstr "Objets: {2} / Attributs: {0} / Membres: {1}"
 msgid "Tags: {0} / Memberships: {1}"
 msgstr "Attributs : {0} / Appartenance : {1}"
 
-msgid "Tags / Memberships"
-msgstr "Attributs / Appartenance"
-
 msgid "Delete the selected key in all objects"
 msgstr "Supprimer l’attribut"
 
@@ -9696,6 +9726,8 @@ msgid ""
 "Aerial imagery \"{0}\" might be misaligned. Please check its offset using "
 "GPS tracks!"
 msgstr ""
+"L’imagerie aérienne \"{0}\" pourrait être mal alignée; veuillez vérifier son "
+"calage à l’aide de traces GPS!"
 
 msgid "http://wiki.openstreetmap.org/wiki/Using_Imagery"
 msgstr "http://wiki.openstreetmap.org/wiki/FR:Using_Imagery"
@@ -12838,6 +12870,15 @@ msgstr "L’adresse actuelle n’est pas une adresse web valide"
 msgid "Please enter the OSM API URL."
 msgstr "Veuillez entrer l’adresse web OSM."
 
+msgid "Use Overpass server for object downloads"
+msgstr ""
+
+msgid "Overpass server: "
+msgstr "Serveur Overpass : "
+
+msgid "Overpass server"
+msgstr ""
+
 msgid "Proxy settings"
 msgstr "Configuration du proxy"
 
@@ -15389,6 +15430,9 @@ msgstr "LʼURL ne contient pas {0} valide"
 msgid "reserved"
 msgstr "réservé"
 
+msgid "Unable to delete old preferences file {0}"
+msgstr "Impossible de supprimer l’ancien fichier de préférences {0}"
+
 msgid "Outdated Java version"
 msgstr "Version de Java obsolète"
 
@@ -15503,6 +15547,9 @@ msgstr ""
 "tampon. Il ne contient aucun objet JOSM ni aucun texte convenable. "
 "</p></html>"
 
+msgid "Unable to delete file {0}"
+msgstr "Impossible de supprimer le fichier {0}"
+
 msgid "ms"
 msgstr "ms"
 
@@ -18803,6 +18850,9 @@ msgstr "Véhicules de transport public"
 msgid "Tourist buses"
 msgstr "Bus touristique"
 
+msgid "Max. speed Heavy Goods Vehicles (km/h)"
+msgstr "Vitesse maximale autorisée pour les poids-lourds"
+
 msgid "Min. speed (km/h)"
 msgstr "Vitesse minimale (km/h)"
 
@@ -21133,12 +21183,6 @@ msgstr "Cabinet médical"
 msgid "Dentist"
 msgstr "Cabinet dentaire"
 
-msgid "Nursing Home"
-msgstr "Maison de soins"
-
-msgid "Retirement Home"
-msgstr "Maison de retraite"
-
 msgid "Pharmacy"
 msgstr "Pharmacie"
 
@@ -21166,6 +21210,31 @@ msgstr "(Utiliser un code international, par exemple +12-345-67890)"
 msgid "Veterinary"
 msgstr "Cabinet vétérinaire"
 
+msgid "Social Facility"
+msgstr ""
+
+msgid "Nursing Home"
+msgstr "Maison de soins"
+
+msgid "Group Home"
+msgstr ""
+
+msgid "For"
+msgstr "Public"
+
+msgid "Assisted Living"
+msgstr ""
+
+msgid "Outreach"
+msgstr ""
+
+msgctxt "social_facility"
+msgid "Shelter"
+msgstr ""
+
+msgid "Food Bank"
+msgstr "Banque alimentaire"
+
 msgid "Toilets/Restrooms"
 msgstr "Toilettes"
 
@@ -21208,6 +21277,13 @@ msgstr "accroupis"
 msgid "urinal"
 msgstr "urinoir"
 
+msgctxt "toilets"
+msgid "Diaper"
+msgstr "Table à langer"
+
+msgid "room"
+msgstr ""
+
 msgid "Post Box"
 msgstr "Boîte aux lettres"
 
@@ -21855,7 +21931,7 @@ msgstr "Batiment commerciale"
 
 msgctxt "building"
 msgid "service"
-msgstr ""
+msgstr "technique"
 
 msgctxt "building"
 msgid "train_station"
@@ -25315,6 +25391,12 @@ msgstr "Téléchargement de la trace…"
 msgid "Download GPX track from openstreetmap.org"
 msgstr "Télécharger la trace GPX depuis openstreetmap.org"
 
+msgid "Download Track"
+msgstr "Télécharger la trace"
+
+msgid "Filename"
+msgstr "Nom du fichier"
+
 msgid ""
 "Error occurred while parsing gpx file {0}. Only a part of the file will be "
 "available."
@@ -25322,9 +25404,6 @@ msgstr ""
 "Une erreur s’’est produite pendant la lecture du fichier GPX {0}. Seule une "
 "partie du fichier sera disponible."
 
-msgid "Invalid URL {0}"
-msgstr "L’adresse web {0} n’est pas valide"
-
 msgid "Error fetching URL {0}"
 msgstr "Une erreur est survenue lors de la récupération de l’adresse web {0}"
 
@@ -25333,11 +25412,8 @@ msgstr ""
 "Une erreur est survenue lors de l’analyse des données depuis l’adresse web "
 "{0}"
 
-msgid "Download Track"
-msgstr "Télécharger la trace"
-
-msgid "Filename"
-msgstr "Nom du fichier"
+msgid "Invalid URL {0}"
+msgstr "L’adresse web {0} n’est pas valide"
 
 msgid "Private (only shared as anonymous, unordered points)"
 msgstr "Privé (partagé uniquement en tant qu’anonyme, points non ordonnés)"
@@ -25394,9 +25470,6 @@ msgstr ""
 msgid "Uploading trace ..."
 msgstr "Envoi de la trace…"
 
-msgid "Connecting..."
-msgstr "Connexion…"
-
 msgid "Upload canceled"
 msgstr "Envoi annulé"
 
@@ -27351,7 +27424,7 @@ msgid "Layer:"
 msgstr "Calque :"
 
 msgid "{0}: 0 / {1}: 0 / {2}: 0"
-msgstr ""
+msgstr "{0} : 0 / {1} : 0 / {2} : 0"
 
 msgid "Subject"
 msgstr "Objet"
@@ -27388,7 +27461,7 @@ msgid "Freeze reference selection"
 msgstr "Geler la sélection de référence"
 
 msgid "{0}: {1} / {2}: {3} / {4}: {5}"
-msgstr ""
+msgstr "{0} : {1} / {2} : {3} / {4} : {5}"
 
 msgid "Invalid reference or subject"
 msgstr "Référence ou sujet invalide"
@@ -28877,7 +28950,7 @@ msgid "images"
 msgstr "images"
 
 msgid "Traffic sign font at ''{0}'' has wrong format."
-msgstr ""
+msgstr "La police de caractère du panneau ''{0}'' est mal formattée."
 
 msgid "Could not read font-file from ''{{0}}''."
 msgstr "Impossible de lire le fichier de polices depuis ''{{0}}''"
@@ -30274,6 +30347,69 @@ msgstr ""
 msgid "Please load some photos."
 msgstr "Veuillez importer quelques photos."
 
+msgid "Edit photo GPS data"
+msgstr "Éditer les données GPS de la photo"
+
+msgid "Edit GPS data of selected photo."
+msgstr "Éditer les données GPS de la photo sélectionnée"
+
+msgid "Edit Photo GPS Data"
+msgstr "Éditer les données GPS de la photo"
+
+msgid "Please select an image first."
+msgstr "Veuillez sélectionner une image d'abord."
+
+msgid "No image selected"
+msgstr "Pas d'image sélectionnée"
+
+msgid "(Empty values delete the according fields.)"
+msgstr "(Les valeurs vides suppriment les champs correspondants.)"
+
+msgid "coordinates"
+msgstr "coordonnées"
+
+msgid "Latitude and longitude"
+msgstr "Latitude et longitude"
+
+msgid "Edit Image Coordinates"
+msgstr "Éditer les coordonnées de l'image"
+
+msgid "Edit coordinates in separate editor"
+msgstr "Éditer les coordonnées dans un éditeur séparé"
+
+msgid "altitude"
+msgstr "altitude"
+
+msgid "Altitude:"
+msgstr "Altitude :"
+
+msgid "speed"
+msgstr "vitesse"
+
+msgid "positive number or empty"
+msgstr "nombre positif ou sans valeur"
+
+msgid "Speed:"
+msgstr "Vitesse :"
+
+msgid "direction"
+msgstr "direction"
+
+msgid "range -360.0 .. 360.0, or empty"
+msgstr "entre -360.0 et 360.0, sinon vide"
+
+msgid "Direction:"
+msgstr "Direction :"
+
+msgid "°"
+msgstr "°"
+
+msgid "Undo changes made in this dialog"
+msgstr "Annuler les changements effectués dans cette boîte de dialogue"
+
+msgid "Reload GPS data from image file"
+msgstr ""
+
 msgid "New layer for untagged images"
 msgstr "Nouveau calque pour les images non balisées"
 
@@ -33638,9 +33774,6 @@ msgstr "{0}.Wikipedia.org: {1}"
 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"
 
-msgid "coordinates"
-msgstr "coordonnées"
-
 msgid "Category"
 msgstr "Catégorie"
 
@@ -33687,3 +33820,6 @@ msgstr "En voiture !"
 
 msgid "Drive a race car on this layer"
 msgstr "Conduire une voiture de course sur ce calque"
+
+#~ msgid "Retirement Home"
+#~ msgstr "Maison de retraite"
diff --git a/i18n/po/ga.po b/i18n/po/ga.po
index d059b82..961fc43 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: 2015-12-31 03:40+0100\n"
+"POT-Creation-Date: 2016-01-06 03:38+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: 2015-12-31 04:43+0000\n"
-"X-Generator: Launchpad (build 17865)\n"
+"X-Launchpad-Export-Date: 2016-01-06 04:42+0000\n"
+"X-Generator: Launchpad (build 17876)\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
 msgstr ""
@@ -1055,9 +1055,6 @@ msgstr ""
 msgid "Overpass query: "
 msgstr ""
 
-msgid "Overpass server: "
-msgstr ""
-
 msgid "Paste"
 msgstr ""
 
@@ -1347,6 +1344,9 @@ msgstr ""
 msgid "Split a way at the selected node."
 msgstr ""
 
+msgid "Cannot split since another split operation is already in progress"
+msgstr ""
+
 msgid ""
 "The current selection cannot be used for splitting - no node is selected."
 msgstr ""
@@ -1458,6 +1458,27 @@ msgid ""
 "own copy and all nodes will be selected."
 msgstr ""
 
+msgid "Existing node"
+msgstr ""
+
+msgid "Both nodes"
+msgstr ""
+
+msgid "New node"
+msgstr ""
+
+msgid "Tags / Memberships"
+msgstr ""
+
+msgid "Unglue"
+msgstr ""
+
+msgid "Where should the tags of the node be put?"
+msgstr ""
+
+msgid "Where should the memberships of this node be put?"
+msgstr ""
+
 msgid "Unglued Node"
 msgstr ""
 
@@ -3048,6 +3069,15 @@ msgstr ""
 msgid "Restoring files"
 msgstr ""
 
+msgid "Unable to delete backup file {0}"
+msgstr ""
+
+msgid "Unable to delete PID file {0}"
+msgstr ""
+
+msgid "Unable to delete archived backup file {0}"
+msgstr ""
+
 msgid "Illegal latitude value ''{0}''"
 msgstr ""
 
@@ -4206,6 +4236,9 @@ msgstr ""
 msgid "No \"to\" way found"
 msgstr ""
 
+msgid "\"from\" way equals \"to\" way"
+msgstr ""
+
 msgid "No \"via\" node or way found"
 msgstr ""
 
@@ -7003,9 +7036,6 @@ msgstr ""
 msgid "Tags: {0} / Memberships: {1}"
 msgstr ""
 
-msgid "Tags / Memberships"
-msgstr ""
-
 msgid "Delete the selected key in all objects"
 msgstr ""
 
@@ -11610,6 +11640,15 @@ msgstr ""
 msgid "Please enter the OSM API URL."
 msgstr ""
 
+msgid "Use Overpass server for object downloads"
+msgstr ""
+
+msgid "Overpass server: "
+msgstr ""
+
+msgid "Overpass server"
+msgstr ""
+
 msgid "Proxy settings"
 msgstr ""
 
@@ -13748,6 +13787,9 @@ msgstr ""
 msgid "reserved"
 msgstr ""
 
+msgid "Unable to delete old preferences file {0}"
+msgstr ""
+
 msgid "Outdated Java version"
 msgstr ""
 
@@ -13839,6 +13881,9 @@ msgid ""
 "contain any JOSM object or suitable text. </p></html>"
 msgstr ""
 
+msgid "Unable to delete file {0}"
+msgstr ""
+
 msgid "ms"
 msgstr ""
 
@@ -16953,6 +16998,9 @@ msgstr ""
 msgid "Tourist buses"
 msgstr ""
 
+msgid "Max. speed Heavy Goods Vehicles (km/h)"
+msgstr ""
+
 msgid "Min. speed (km/h)"
 msgstr ""
 
@@ -19250,12 +19298,6 @@ msgstr ""
 msgid "Dentist"
 msgstr ""
 
-msgid "Nursing Home"
-msgstr ""
-
-msgid "Retirement Home"
-msgstr ""
-
 msgid "Pharmacy"
 msgstr ""
 
@@ -19283,6 +19325,31 @@ msgstr ""
 msgid "Veterinary"
 msgstr ""
 
+msgid "Social Facility"
+msgstr ""
+
+msgid "Nursing Home"
+msgstr ""
+
+msgid "Group Home"
+msgstr ""
+
+msgid "For"
+msgstr ""
+
+msgid "Assisted Living"
+msgstr ""
+
+msgid "Outreach"
+msgstr ""
+
+msgctxt "social_facility"
+msgid "Shelter"
+msgstr ""
+
+msgid "Food Bank"
+msgstr ""
+
 msgid "Toilets/Restrooms"
 msgstr ""
 
@@ -19325,6 +19392,13 @@ msgstr ""
 msgid "urinal"
 msgstr ""
 
+msgctxt "toilets"
+msgid "Diaper"
+msgstr ""
+
+msgid "room"
+msgstr ""
+
 msgid "Post Box"
 msgstr ""
 
@@ -23362,24 +23436,24 @@ msgstr ""
 msgid "Download GPX track from openstreetmap.org"
 msgstr ""
 
+msgid "Download Track"
+msgstr ""
+
+msgid "Filename"
+msgstr ""
+
 msgid ""
 "Error occurred while parsing gpx file {0}. Only a part of the file will be "
 "available."
 msgstr ""
 
-msgid "Invalid URL {0}"
-msgstr ""
-
 msgid "Error fetching URL {0}"
 msgstr ""
 
 msgid "Error parsing data from URL {0}"
 msgstr ""
 
-msgid "Download Track"
-msgstr ""
-
-msgid "Filename"
+msgid "Invalid URL {0}"
 msgstr ""
 
 msgid "Private (only shared as anonymous, unordered points)"
@@ -23429,9 +23503,6 @@ msgstr ""
 msgid "Uploading trace ..."
 msgstr ""
 
-msgid "Connecting..."
-msgstr ""
-
 msgid "Upload canceled"
 msgstr ""
 
@@ -27870,6 +27941,69 @@ msgstr ""
 msgid "Please load some photos."
 msgstr ""
 
+msgid "Edit photo GPS data"
+msgstr ""
+
+msgid "Edit GPS data of selected photo."
+msgstr ""
+
+msgid "Edit Photo GPS Data"
+msgstr ""
+
+msgid "Please select an image first."
+msgstr ""
+
+msgid "No image selected"
+msgstr ""
+
+msgid "(Empty values delete the according fields.)"
+msgstr ""
+
+msgid "coordinates"
+msgstr ""
+
+msgid "Latitude and longitude"
+msgstr ""
+
+msgid "Edit Image Coordinates"
+msgstr ""
+
+msgid "Edit coordinates in separate editor"
+msgstr ""
+
+msgid "altitude"
+msgstr ""
+
+msgid "Altitude:"
+msgstr ""
+
+msgid "speed"
+msgstr ""
+
+msgid "positive number or empty"
+msgstr ""
+
+msgid "Speed:"
+msgstr ""
+
+msgid "direction"
+msgstr ""
+
+msgid "range -360.0 .. 360.0, or empty"
+msgstr ""
+
+msgid "Direction:"
+msgstr ""
+
+msgid "°"
+msgstr ""
+
+msgid "Undo changes made in this dialog"
+msgstr ""
+
+msgid "Reload GPS data from image file"
+msgstr ""
+
 msgid "New layer for untagged images"
 msgstr ""
 
@@ -30886,9 +31020,6 @@ msgstr ""
 msgid "Fetches all coordinates from Wikipedia in the current view"
 msgstr ""
 
-msgid "coordinates"
-msgstr ""
-
 msgid "Category"
 msgstr ""
 
diff --git a/i18n/po/gl.po b/i18n/po/gl.po
index 8964a39..fb167fe 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: 2015-12-31 03:40+0100\n"
-"PO-Revision-Date: 2015-02-02 23:45+0000\n"
-"Last-Translator: Adrián Chaves Fernández <adriyetichaves at gmail.com>\n"
+"POT-Creation-Date: 2016-01-06 03:38+0100\n"
+"PO-Revision-Date: 2016-01-01 15:11+0000\n"
+"Last-Translator: Marcos Lans <Unknown>\n"
 "Language-Team: Galician <proxecto at trasno.net>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Launchpad-Export-Date: 2015-12-31 04:44+0000\n"
-"X-Generator: Launchpad (build 17865)\n"
+"X-Launchpad-Export-Date: 2016-01-06 04:43+0000\n"
+"X-Generator: Launchpad (build 17876)\n"
 "Language: gl\n"
 "X-Poedit-Language: Galician\n"
 
@@ -1157,9 +1157,6 @@ msgstr ""
 msgid "Overpass query: "
 msgstr ""
 
-msgid "Overpass server: "
-msgstr ""
-
 msgid "Paste"
 msgstr "Pegar"
 
@@ -1470,6 +1467,9 @@ msgstr "Separar a vía"
 msgid "Split a way at the selected node."
 msgstr "Separar unha vía no nodo seleccionado."
 
+msgid "Cannot split since another split operation is already in progress"
+msgstr ""
+
 msgid ""
 "The current selection cannot be used for splitting - no node is selected."
 msgstr ""
@@ -1599,6 +1599,27 @@ msgstr ""
 "despegados e os novos nodos serán seleccionados. Se non, todas as vías\n"
 "obterán as súas propias copias e todos os nodos serán seleccionados."
 
+msgid "Existing node"
+msgstr ""
+
+msgid "Both nodes"
+msgstr ""
+
+msgid "New node"
+msgstr ""
+
+msgid "Tags / Memberships"
+msgstr ""
+
+msgid "Unglue"
+msgstr ""
+
+msgid "Where should the tags of the node be put?"
+msgstr ""
+
+msgid "Where should the memberships of this node be put?"
+msgstr ""
+
 msgid "Unglued Node"
 msgstr "Despegar Nodo"
 
@@ -3234,6 +3255,15 @@ msgstr ""
 msgid "Restoring files"
 msgstr "Restaurando ficheiros"
 
+msgid "Unable to delete backup file {0}"
+msgstr ""
+
+msgid "Unable to delete PID file {0}"
+msgstr ""
+
+msgid "Unable to delete archived backup file {0}"
+msgstr ""
+
 msgid "Illegal latitude value ''{0}''"
 msgstr "Valor incorrecto de latitude «{0}»"
 
@@ -4423,6 +4453,9 @@ msgstr ""
 msgid "No \"to\" way found"
 msgstr ""
 
+msgid "\"from\" way equals \"to\" way"
+msgstr ""
+
 msgid "No \"via\" node or way found"
 msgstr ""
 
@@ -7330,9 +7363,6 @@ msgstr ""
 msgid "Tags: {0} / Memberships: {1}"
 msgstr ""
 
-msgid "Tags / Memberships"
-msgstr ""
-
 msgid "Delete the selected key in all objects"
 msgstr "Eliminar a clave seleccionada en todos os obxectos"
 
@@ -12060,6 +12090,15 @@ msgstr ""
 msgid "Please enter the OSM API URL."
 msgstr ""
 
+msgid "Use Overpass server for object downloads"
+msgstr ""
+
+msgid "Overpass server: "
+msgstr ""
+
+msgid "Overpass server"
+msgstr ""
+
 msgid "Proxy settings"
 msgstr "Configuración do proxy"
 
@@ -14279,6 +14318,9 @@ msgstr ""
 msgid "reserved"
 msgstr ""
 
+msgid "Unable to delete old preferences file {0}"
+msgstr ""
+
 msgid "Outdated Java version"
 msgstr ""
 
@@ -14370,6 +14412,9 @@ msgid ""
 "contain any JOSM object or suitable text. </p></html>"
 msgstr ""
 
+msgid "Unable to delete file {0}"
+msgstr ""
+
 msgid "ms"
 msgstr ""
 
@@ -17518,6 +17563,9 @@ msgstr "Vehículos de servicio público (SP)"
 msgid "Tourist buses"
 msgstr ""
 
+msgid "Max. speed Heavy Goods Vehicles (km/h)"
+msgstr ""
+
 msgid "Min. speed (km/h)"
 msgstr "Velocidade mínima (km/h)"
 
@@ -19506,7 +19554,7 @@ msgid "Playground"
 msgstr "Zona de xogos"
 
 msgid "Picnic Site"
-msgstr "Zona de picnic"
+msgstr "Zona de pícnic"
 
 msgid "Fireplace"
 msgstr "Cheminea"
@@ -19757,7 +19805,7 @@ msgid "Embassy"
 msgstr "Embaixada"
 
 msgid "Courthouse"
-msgstr "Xuzgado"
+msgstr "Xulgado"
 
 msgid "Prison"
 msgstr "Prisión"
@@ -19816,12 +19864,6 @@ msgstr ""
 msgid "Dentist"
 msgstr "Dentista"
 
-msgid "Nursing Home"
-msgstr ""
-
-msgid "Retirement Home"
-msgstr ""
-
 msgid "Pharmacy"
 msgstr "Farmacia"
 
@@ -19849,6 +19891,31 @@ msgstr "(Utilizar código internacional, como +12-345-67890)"
 msgid "Veterinary"
 msgstr "Veterinario"
 
+msgid "Social Facility"
+msgstr ""
+
+msgid "Nursing Home"
+msgstr ""
+
+msgid "Group Home"
+msgstr ""
+
+msgid "For"
+msgstr ""
+
+msgid "Assisted Living"
+msgstr ""
+
+msgid "Outreach"
+msgstr ""
+
+msgctxt "social_facility"
+msgid "Shelter"
+msgstr ""
+
+msgid "Food Bank"
+msgstr ""
+
 msgid "Toilets/Restrooms"
 msgstr ""
 
@@ -19891,6 +19958,13 @@ msgstr ""
 msgid "urinal"
 msgstr ""
 
+msgctxt "toilets"
+msgid "Diaper"
+msgstr ""
+
+msgid "room"
+msgstr ""
+
 msgid "Post Box"
 msgstr "Buzón de Correos"
 
@@ -23928,25 +24002,25 @@ msgstr ""
 msgid "Download GPX track from openstreetmap.org"
 msgstr "Descargar un camiño GPX desde openstreetmap.org"
 
+msgid "Download Track"
+msgstr "Descargar camiño"
+
+msgid "Filename"
+msgstr "Nome do ficheiro"
+
 msgid ""
 "Error occurred while parsing gpx file {0}. Only a part of the file will be "
 "available."
 msgstr ""
 
-msgid "Invalid URL {0}"
-msgstr "URL {0} non válido"
-
 msgid "Error fetching URL {0}"
 msgstr ""
 
 msgid "Error parsing data from URL {0}"
 msgstr ""
 
-msgid "Download Track"
-msgstr "Descargar camiño"
-
-msgid "Filename"
-msgstr "Nome do ficheiro"
+msgid "Invalid URL {0}"
+msgstr "URL {0} non válido"
 
 msgid "Private (only shared as anonymous, unordered points)"
 msgstr ""
@@ -23995,9 +24069,6 @@ msgstr ""
 msgid "Uploading trace ..."
 msgstr ""
 
-msgid "Connecting..."
-msgstr "Conectando…"
-
 msgid "Upload canceled"
 msgstr ""
 
@@ -28463,6 +28534,69 @@ msgstr ""
 msgid "Please load some photos."
 msgstr ""
 
+msgid "Edit photo GPS data"
+msgstr ""
+
+msgid "Edit GPS data of selected photo."
+msgstr ""
+
+msgid "Edit Photo GPS Data"
+msgstr ""
+
+msgid "Please select an image first."
+msgstr ""
+
+msgid "No image selected"
+msgstr ""
+
+msgid "(Empty values delete the according fields.)"
+msgstr ""
+
+msgid "coordinates"
+msgstr ""
+
+msgid "Latitude and longitude"
+msgstr ""
+
+msgid "Edit Image Coordinates"
+msgstr ""
+
+msgid "Edit coordinates in separate editor"
+msgstr ""
+
+msgid "altitude"
+msgstr ""
+
+msgid "Altitude:"
+msgstr ""
+
+msgid "speed"
+msgstr ""
+
+msgid "positive number or empty"
+msgstr ""
+
+msgid "Speed:"
+msgstr ""
+
+msgid "direction"
+msgstr ""
+
+msgid "range -360.0 .. 360.0, or empty"
+msgstr ""
+
+msgid "Direction:"
+msgstr ""
+
+msgid "°"
+msgstr ""
+
+msgid "Undo changes made in this dialog"
+msgstr ""
+
+msgid "Reload GPS data from image file"
+msgstr ""
+
 msgid "New layer for untagged images"
 msgstr ""
 
@@ -31496,9 +31630,6 @@ msgstr ""
 msgid "Fetches all coordinates from Wikipedia in the current view"
 msgstr ""
 
-msgid "coordinates"
-msgstr ""
-
 msgid "Category"
 msgstr ""
 
diff --git a/i18n/po/he.po b/i18n/po/he.po
index ee5ff34..de612de 100644
--- a/i18n/po/he.po
+++ b/i18n/po/he.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: josm\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-12-31 03:40+0100\n"
+"POT-Creation-Date: 2016-01-06 03:38+0100\n"
 "PO-Revision-Date: 2013-03-30 13:38+0000\n"
 "Last-Translator: Dirk Stöcker <launchpad at dstoecker.de>\n"
 "Language-Team: Hebrew <he at li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Launchpad-Export-Date: 2015-12-31 04:45+0000\n"
-"X-Generator: Launchpad (build 17865)\n"
+"X-Launchpad-Export-Date: 2016-01-06 04:44+0000\n"
+"X-Generator: Launchpad (build 17876)\n"
 "Language: he\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -1059,9 +1059,6 @@ msgstr ""
 msgid "Overpass query: "
 msgstr ""
 
-msgid "Overpass server: "
-msgstr ""
-
 msgid "Paste"
 msgstr "הדבק"
 
@@ -1352,6 +1349,9 @@ msgstr "פצל דרך"
 msgid "Split a way at the selected node."
 msgstr "פצל דרך בנקודה הבחורה."
 
+msgid "Cannot split since another split operation is already in progress"
+msgstr ""
+
 msgid ""
 "The current selection cannot be used for splitting - no node is selected."
 msgstr ""
@@ -1463,6 +1463,27 @@ msgid ""
 "own copy and all nodes will be selected."
 msgstr ""
 
+msgid "Existing node"
+msgstr ""
+
+msgid "Both nodes"
+msgstr ""
+
+msgid "New node"
+msgstr ""
+
+msgid "Tags / Memberships"
+msgstr ""
+
+msgid "Unglue"
+msgstr ""
+
+msgid "Where should the tags of the node be put?"
+msgstr ""
+
+msgid "Where should the memberships of this node be put?"
+msgstr ""
+
 msgid "Unglued Node"
 msgstr "הפרד נקודה"
 
@@ -3062,6 +3083,15 @@ msgstr ""
 msgid "Restoring files"
 msgstr ""
 
+msgid "Unable to delete backup file {0}"
+msgstr ""
+
+msgid "Unable to delete PID file {0}"
+msgstr ""
+
+msgid "Unable to delete archived backup file {0}"
+msgstr ""
+
 msgid "Illegal latitude value ''{0}''"
 msgstr ""
 
@@ -4224,6 +4254,9 @@ msgstr ""
 msgid "No \"to\" way found"
 msgstr ""
 
+msgid "\"from\" way equals \"to\" way"
+msgstr ""
+
 msgid "No \"via\" node or way found"
 msgstr ""
 
@@ -7030,9 +7063,6 @@ msgstr ""
 msgid "Tags: {0} / Memberships: {1}"
 msgstr ""
 
-msgid "Tags / Memberships"
-msgstr ""
-
 msgid "Delete the selected key in all objects"
 msgstr "מחק את המפתח הנבחר בכל הפריטים"
 
@@ -11648,6 +11678,15 @@ msgstr ""
 msgid "Please enter the OSM API URL."
 msgstr ""
 
+msgid "Use Overpass server for object downloads"
+msgstr ""
+
+msgid "Overpass server: "
+msgstr ""
+
+msgid "Overpass server"
+msgstr ""
+
 msgid "Proxy settings"
 msgstr ""
 
@@ -13788,6 +13827,9 @@ msgstr ""
 msgid "reserved"
 msgstr ""
 
+msgid "Unable to delete old preferences file {0}"
+msgstr ""
+
 msgid "Outdated Java version"
 msgstr ""
 
@@ -13879,6 +13921,9 @@ msgid ""
 "contain any JOSM object or suitable text. </p></html>"
 msgstr ""
 
+msgid "Unable to delete file {0}"
+msgstr ""
+
 msgid "ms"
 msgstr ""
 
@@ -16995,6 +17040,9 @@ msgstr "רכב ציבורי"
 msgid "Tourist buses"
 msgstr ""
 
+msgid "Max. speed Heavy Goods Vehicles (km/h)"
+msgstr ""
+
 msgid "Min. speed (km/h)"
 msgstr "מהירות מינימלית (קמ\"ש)"
 
@@ -19292,12 +19340,6 @@ msgstr ""
 msgid "Dentist"
 msgstr "רופא שיניים"
 
-msgid "Nursing Home"
-msgstr ""
-
-msgid "Retirement Home"
-msgstr ""
-
 msgid "Pharmacy"
 msgstr "בית מרקחת"
 
@@ -19325,6 +19367,31 @@ msgstr "(השתמש בקדומת בינלאומית, למשל +12-345-67890)"
 msgid "Veterinary"
 msgstr "וטרינרי"
 
+msgid "Social Facility"
+msgstr ""
+
+msgid "Nursing Home"
+msgstr ""
+
+msgid "Group Home"
+msgstr ""
+
+msgid "For"
+msgstr ""
+
+msgid "Assisted Living"
+msgstr ""
+
+msgid "Outreach"
+msgstr ""
+
+msgctxt "social_facility"
+msgid "Shelter"
+msgstr ""
+
+msgid "Food Bank"
+msgstr ""
+
 msgid "Toilets/Restrooms"
 msgstr ""
 
@@ -19367,6 +19434,13 @@ msgstr ""
 msgid "urinal"
 msgstr ""
 
+msgctxt "toilets"
+msgid "Diaper"
+msgstr ""
+
+msgid "room"
+msgstr ""
+
 msgid "Post Box"
 msgstr "תיבת דואר"
 
@@ -23404,24 +23478,24 @@ msgstr ""
 msgid "Download GPX track from openstreetmap.org"
 msgstr ""
 
+msgid "Download Track"
+msgstr ""
+
+msgid "Filename"
+msgstr ""
+
 msgid ""
 "Error occurred while parsing gpx file {0}. Only a part of the file will be "
 "available."
 msgstr ""
 
-msgid "Invalid URL {0}"
-msgstr ""
-
 msgid "Error fetching URL {0}"
 msgstr ""
 
 msgid "Error parsing data from URL {0}"
 msgstr ""
 
-msgid "Download Track"
-msgstr ""
-
-msgid "Filename"
+msgid "Invalid URL {0}"
 msgstr ""
 
 msgid "Private (only shared as anonymous, unordered points)"
@@ -23471,9 +23545,6 @@ msgstr ""
 msgid "Uploading trace ..."
 msgstr ""
 
-msgid "Connecting..."
-msgstr "מתחבר..."
-
 msgid "Upload canceled"
 msgstr ""
 
@@ -27916,6 +27987,69 @@ msgstr ""
 msgid "Please load some photos."
 msgstr ""
 
+msgid "Edit photo GPS data"
+msgstr ""
+
+msgid "Edit GPS data of selected photo."
+msgstr ""
+
+msgid "Edit Photo GPS Data"
+msgstr ""
+
+msgid "Please select an image first."
+msgstr ""
+
+msgid "No image selected"
+msgstr ""
+
+msgid "(Empty values delete the according fields.)"
+msgstr ""
+
+msgid "coordinates"
+msgstr ""
+
+msgid "Latitude and longitude"
+msgstr ""
+
+msgid "Edit Image Coordinates"
+msgstr ""
+
+msgid "Edit coordinates in separate editor"
+msgstr ""
+
+msgid "altitude"
+msgstr ""
+
+msgid "Altitude:"
+msgstr ""
+
+msgid "speed"
+msgstr ""
+
+msgid "positive number or empty"
+msgstr ""
+
+msgid "Speed:"
+msgstr ""
+
+msgid "direction"
+msgstr ""
+
+msgid "range -360.0 .. 360.0, or empty"
+msgstr ""
+
+msgid "Direction:"
+msgstr ""
+
+msgid "°"
+msgstr ""
+
+msgid "Undo changes made in this dialog"
+msgstr ""
+
+msgid "Reload GPS data from image file"
+msgstr ""
+
 msgid "New layer for untagged images"
 msgstr ""
 
@@ -30932,9 +31066,6 @@ msgstr ""
 msgid "Fetches all coordinates from Wikipedia in the current view"
 msgstr ""
 
-msgid "coordinates"
-msgstr ""
-
 msgid "Category"
 msgstr ""
 
diff --git a/i18n/po/hi.po b/i18n/po/hi.po
index d01748e..b9b2828 100644
--- a/i18n/po/hi.po
+++ b/i18n/po/hi.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: josm\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-12-31 03:40+0100\n"
+"POT-Creation-Date: 2016-01-06 03:38+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: 2015-12-31 04:46+0000\n"
-"X-Generator: Launchpad (build 17865)\n"
+"X-Launchpad-Export-Date: 2016-01-06 04:45+0000\n"
+"X-Generator: Launchpad (build 17876)\n"
 "Language: hi\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -1056,9 +1056,6 @@ msgstr ""
 msgid "Overpass query: "
 msgstr ""
 
-msgid "Overpass server: "
-msgstr ""
-
 msgid "Paste"
 msgstr ""
 
@@ -1348,6 +1345,9 @@ msgstr ""
 msgid "Split a way at the selected node."
 msgstr ""
 
+msgid "Cannot split since another split operation is already in progress"
+msgstr ""
+
 msgid ""
 "The current selection cannot be used for splitting - no node is selected."
 msgstr ""
@@ -1459,6 +1459,27 @@ msgid ""
 "own copy and all nodes will be selected."
 msgstr ""
 
+msgid "Existing node"
+msgstr ""
+
+msgid "Both nodes"
+msgstr ""
+
+msgid "New node"
+msgstr ""
+
+msgid "Tags / Memberships"
+msgstr ""
+
+msgid "Unglue"
+msgstr ""
+
+msgid "Where should the tags of the node be put?"
+msgstr ""
+
+msgid "Where should the memberships of this node be put?"
+msgstr ""
+
 msgid "Unglued Node"
 msgstr ""
 
@@ -3049,6 +3070,15 @@ msgstr ""
 msgid "Restoring files"
 msgstr ""
 
+msgid "Unable to delete backup file {0}"
+msgstr ""
+
+msgid "Unable to delete PID file {0}"
+msgstr ""
+
+msgid "Unable to delete archived backup file {0}"
+msgstr ""
+
 msgid "Illegal latitude value ''{0}''"
 msgstr ""
 
@@ -4207,6 +4237,9 @@ msgstr ""
 msgid "No \"to\" way found"
 msgstr ""
 
+msgid "\"from\" way equals \"to\" way"
+msgstr ""
+
 msgid "No \"via\" node or way found"
 msgstr ""
 
@@ -7004,9 +7037,6 @@ msgstr ""
 msgid "Tags: {0} / Memberships: {1}"
 msgstr ""
 
-msgid "Tags / Memberships"
-msgstr ""
-
 msgid "Delete the selected key in all objects"
 msgstr ""
 
@@ -11611,6 +11641,15 @@ msgstr ""
 msgid "Please enter the OSM API URL."
 msgstr ""
 
+msgid "Use Overpass server for object downloads"
+msgstr ""
+
+msgid "Overpass server: "
+msgstr ""
+
+msgid "Overpass server"
+msgstr ""
+
 msgid "Proxy settings"
 msgstr ""
 
@@ -13749,6 +13788,9 @@ msgstr ""
 msgid "reserved"
 msgstr ""
 
+msgid "Unable to delete old preferences file {0}"
+msgstr ""
+
 msgid "Outdated Java version"
 msgstr ""
 
@@ -13840,6 +13882,9 @@ msgid ""
 "contain any JOSM object or suitable text. </p></html>"
 msgstr ""
 
+msgid "Unable to delete file {0}"
+msgstr ""
+
 msgid "ms"
 msgstr ""
 
@@ -16954,6 +16999,9 @@ msgstr ""
 msgid "Tourist buses"
 msgstr ""
 
+msgid "Max. speed Heavy Goods Vehicles (km/h)"
+msgstr ""
+
 msgid "Min. speed (km/h)"
 msgstr ""
 
@@ -19251,12 +19299,6 @@ msgstr ""
 msgid "Dentist"
 msgstr ""
 
-msgid "Nursing Home"
-msgstr ""
-
-msgid "Retirement Home"
-msgstr ""
-
 msgid "Pharmacy"
 msgstr ""
 
@@ -19284,6 +19326,31 @@ msgstr ""
 msgid "Veterinary"
 msgstr ""
 
+msgid "Social Facility"
+msgstr ""
+
+msgid "Nursing Home"
+msgstr ""
+
+msgid "Group Home"
+msgstr ""
+
+msgid "For"
+msgstr ""
+
+msgid "Assisted Living"
+msgstr ""
+
+msgid "Outreach"
+msgstr ""
+
+msgctxt "social_facility"
+msgid "Shelter"
+msgstr ""
+
+msgid "Food Bank"
+msgstr ""
+
 msgid "Toilets/Restrooms"
 msgstr ""
 
@@ -19326,6 +19393,13 @@ msgstr ""
 msgid "urinal"
 msgstr ""
 
+msgctxt "toilets"
+msgid "Diaper"
+msgstr ""
+
+msgid "room"
+msgstr ""
+
 msgid "Post Box"
 msgstr ""
 
@@ -23363,24 +23437,24 @@ msgstr ""
 msgid "Download GPX track from openstreetmap.org"
 msgstr ""
 
+msgid "Download Track"
+msgstr ""
+
+msgid "Filename"
+msgstr ""
+
 msgid ""
 "Error occurred while parsing gpx file {0}. Only a part of the file will be "
 "available."
 msgstr ""
 
-msgid "Invalid URL {0}"
-msgstr ""
-
 msgid "Error fetching URL {0}"
 msgstr ""
 
 msgid "Error parsing data from URL {0}"
 msgstr ""
 
-msgid "Download Track"
-msgstr ""
-
-msgid "Filename"
+msgid "Invalid URL {0}"
 msgstr ""
 
 msgid "Private (only shared as anonymous, unordered points)"
@@ -23430,9 +23504,6 @@ msgstr ""
 msgid "Uploading trace ..."
 msgstr ""
 
-msgid "Connecting..."
-msgstr ""
-
 msgid "Upload canceled"
 msgstr ""
 
@@ -27871,6 +27942,69 @@ msgstr ""
 msgid "Please load some photos."
 msgstr ""
 
+msgid "Edit photo GPS data"
+msgstr ""
+
+msgid "Edit GPS data of selected photo."
+msgstr ""
+
+msgid "Edit Photo GPS Data"
+msgstr ""
+
+msgid "Please select an image first."
+msgstr ""
+
+msgid "No image selected"
+msgstr ""
+
+msgid "(Empty values delete the according fields.)"
+msgstr ""
+
+msgid "coordinates"
+msgstr ""
+
+msgid "Latitude and longitude"
+msgstr ""
+
+msgid "Edit Image Coordinates"
+msgstr ""
+
+msgid "Edit coordinates in separate editor"
+msgstr ""
+
+msgid "altitude"
+msgstr ""
+
+msgid "Altitude:"
+msgstr ""
+
+msgid "speed"
+msgstr ""
+
+msgid "positive number or empty"
+msgstr ""
+
+msgid "Speed:"
+msgstr ""
+
+msgid "direction"
+msgstr ""
+
+msgid "range -360.0 .. 360.0, or empty"
+msgstr ""
+
+msgid "Direction:"
+msgstr ""
+
+msgid "°"
+msgstr ""
+
+msgid "Undo changes made in this dialog"
+msgstr ""
+
+msgid "Reload GPS data from image file"
+msgstr ""
+
 msgid "New layer for untagged images"
 msgstr ""
 
@@ -30887,9 +31021,6 @@ msgstr ""
 msgid "Fetches all coordinates from Wikipedia in the current view"
 msgstr ""
 
-msgid "coordinates"
-msgstr ""
-
 msgid "Category"
 msgstr ""
 
diff --git a/i18n/po/hr.po b/i18n/po/hr.po
index 15d7949..d75bece 100644
--- a/i18n/po/hr.po
+++ b/i18n/po/hr.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: josm\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-12-31 03:40+0100\n"
-"PO-Revision-Date: 2015-02-25 14:38+0000\n"
+"POT-Creation-Date: 2016-01-06 03:38+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"
 "MIME-Version: 1.0\n"
@@ -16,8 +16,8 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
 "n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
-"X-Launchpad-Export-Date: 2015-12-31 04:58+0000\n"
-"X-Generator: Launchpad (build 17865)\n"
+"X-Launchpad-Export-Date: 2016-01-06 05:00+0000\n"
+"X-Generator: Launchpad (build 17876)\n"
 "Language: hr\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -1099,9 +1099,6 @@ msgstr ""
 msgid "Overpass query: "
 msgstr ""
 
-msgid "Overpass server: "
-msgstr ""
-
 msgid "Paste"
 msgstr "Zalijepi"
 
@@ -1410,6 +1407,9 @@ msgstr "Razdvoji put"
 msgid "Split a way at the selected node."
 msgstr "Razdvoji put na označenoj točci."
 
+msgid "Cannot split since another split operation is already in progress"
+msgstr ""
+
 msgid ""
 "The current selection cannot be used for splitting - no node is selected."
 msgstr ""
@@ -1538,6 +1538,27 @@ msgstr ""
 "selected. Inače svi putevi će dobiti svoju\n"
 "vlastittu kopiju i sve će točke biti izabrane."
 
+msgid "Existing node"
+msgstr ""
+
+msgid "Both nodes"
+msgstr ""
+
+msgid "New node"
+msgstr ""
+
+msgid "Tags / Memberships"
+msgstr ""
+
+msgid "Unglue"
+msgstr ""
+
+msgid "Where should the tags of the node be put?"
+msgstr ""
+
+msgid "Where should the memberships of this node be put?"
+msgstr ""
+
 msgid "Unglued Node"
 msgstr "Odlijepljena točka"
 
@@ -3159,6 +3180,15 @@ msgstr ""
 msgid "Restoring files"
 msgstr ""
 
+msgid "Unable to delete backup file {0}"
+msgstr ""
+
+msgid "Unable to delete PID file {0}"
+msgstr ""
+
+msgid "Unable to delete archived backup file {0}"
+msgstr ""
+
 msgid "Illegal latitude value ''{0}''"
 msgstr "Nedozvoljena vrijednost zemljopisne širine ''{0}''"
 
@@ -4320,6 +4350,9 @@ msgstr ""
 msgid "No \"to\" way found"
 msgstr ""
 
+msgid "\"from\" way equals \"to\" way"
+msgstr ""
+
 msgid "No \"via\" node or way found"
 msgstr ""
 
@@ -7123,9 +7156,6 @@ msgstr ""
 msgid "Tags: {0} / Memberships: {1}"
 msgstr ""
 
-msgid "Tags / Memberships"
-msgstr ""
-
 msgid "Delete the selected key in all objects"
 msgstr ""
 
@@ -11761,6 +11791,15 @@ msgstr ""
 msgid "Please enter the OSM API URL."
 msgstr ""
 
+msgid "Use Overpass server for object downloads"
+msgstr ""
+
+msgid "Overpass server: "
+msgstr ""
+
+msgid "Overpass server"
+msgstr ""
+
 msgid "Proxy settings"
 msgstr ""
 
@@ -13899,6 +13938,9 @@ msgstr ""
 msgid "reserved"
 msgstr ""
 
+msgid "Unable to delete old preferences file {0}"
+msgstr ""
+
 msgid "Outdated Java version"
 msgstr ""
 
@@ -13990,6 +14032,9 @@ msgid ""
 "contain any JOSM object or suitable text. </p></html>"
 msgstr ""
 
+msgid "Unable to delete file {0}"
+msgstr ""
+
 msgid "ms"
 msgstr ""
 
@@ -17104,6 +17149,9 @@ msgstr ""
 msgid "Tourist buses"
 msgstr ""
 
+msgid "Max. speed Heavy Goods Vehicles (km/h)"
+msgstr ""
+
 msgid "Min. speed (km/h)"
 msgstr "Min. brzina (km/h)"
 
@@ -19401,12 +19449,6 @@ msgstr ""
 msgid "Dentist"
 msgstr ""
 
-msgid "Nursing Home"
-msgstr ""
-
-msgid "Retirement Home"
-msgstr ""
-
 msgid "Pharmacy"
 msgstr ""
 
@@ -19434,6 +19476,31 @@ msgstr ""
 msgid "Veterinary"
 msgstr ""
 
+msgid "Social Facility"
+msgstr ""
+
+msgid "Nursing Home"
+msgstr ""
+
+msgid "Group Home"
+msgstr ""
+
+msgid "For"
+msgstr ""
+
+msgid "Assisted Living"
+msgstr ""
+
+msgid "Outreach"
+msgstr ""
+
+msgctxt "social_facility"
+msgid "Shelter"
+msgstr ""
+
+msgid "Food Bank"
+msgstr ""
+
 msgid "Toilets/Restrooms"
 msgstr ""
 
@@ -19476,6 +19543,13 @@ msgstr ""
 msgid "urinal"
 msgstr ""
 
+msgctxt "toilets"
+msgid "Diaper"
+msgstr ""
+
+msgid "room"
+msgstr ""
+
 msgid "Post Box"
 msgstr ""
 
@@ -23513,24 +23587,24 @@ msgstr ""
 msgid "Download GPX track from openstreetmap.org"
 msgstr ""
 
+msgid "Download Track"
+msgstr ""
+
+msgid "Filename"
+msgstr ""
+
 msgid ""
 "Error occurred while parsing gpx file {0}. Only a part of the file will be "
 "available."
 msgstr ""
 
-msgid "Invalid URL {0}"
-msgstr ""
-
 msgid "Error fetching URL {0}"
 msgstr ""
 
 msgid "Error parsing data from URL {0}"
 msgstr ""
 
-msgid "Download Track"
-msgstr ""
-
-msgid "Filename"
+msgid "Invalid URL {0}"
 msgstr ""
 
 msgid "Private (only shared as anonymous, unordered points)"
@@ -23580,9 +23654,6 @@ msgstr ""
 msgid "Uploading trace ..."
 msgstr ""
 
-msgid "Connecting..."
-msgstr ""
-
 msgid "Upload canceled"
 msgstr ""
 
@@ -28025,6 +28096,69 @@ msgstr ""
 msgid "Please load some photos."
 msgstr ""
 
+msgid "Edit photo GPS data"
+msgstr ""
+
+msgid "Edit GPS data of selected photo."
+msgstr ""
+
+msgid "Edit Photo GPS Data"
+msgstr ""
+
+msgid "Please select an image first."
+msgstr ""
+
+msgid "No image selected"
+msgstr ""
+
+msgid "(Empty values delete the according fields.)"
+msgstr ""
+
+msgid "coordinates"
+msgstr ""
+
+msgid "Latitude and longitude"
+msgstr ""
+
+msgid "Edit Image Coordinates"
+msgstr ""
+
+msgid "Edit coordinates in separate editor"
+msgstr ""
+
+msgid "altitude"
+msgstr ""
+
+msgid "Altitude:"
+msgstr ""
+
+msgid "speed"
+msgstr ""
+
+msgid "positive number or empty"
+msgstr ""
+
+msgid "Speed:"
+msgstr ""
+
+msgid "direction"
+msgstr ""
+
+msgid "range -360.0 .. 360.0, or empty"
+msgstr ""
+
+msgid "Direction:"
+msgstr ""
+
+msgid "°"
+msgstr ""
+
+msgid "Undo changes made in this dialog"
+msgstr ""
+
+msgid "Reload GPS data from image file"
+msgstr ""
+
 msgid "New layer for untagged images"
 msgstr ""
 
@@ -28293,7 +28427,7 @@ msgid "Scale"
 msgstr ""
 
 msgid "Resolution"
-msgstr "Rezolucija"
+msgstr "Razlučivost"
 
 msgid "Map information"
 msgstr ""
@@ -31043,9 +31177,6 @@ msgstr ""
 msgid "Fetches all coordinates from Wikipedia in the current view"
 msgstr ""
 
-msgid "coordinates"
-msgstr ""
-
 msgid "Category"
 msgstr ""
 
diff --git a/i18n/po/ht.po b/i18n/po/ht.po
index 9a82b0f..fd84ffe 100644
--- a/i18n/po/ht.po
+++ b/i18n/po/ht.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: josm\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-12-31 03:40+0100\n"
+"POT-Creation-Date: 2016-01-06 03:38+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: 2015-12-31 04:45+0000\n"
-"X-Generator: Launchpad (build 17865)\n"
+"X-Launchpad-Export-Date: 2016-01-06 04:44+0000\n"
+"X-Generator: Launchpad (build 17876)\n"
 "Language: \n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -1056,9 +1056,6 @@ msgstr ""
 msgid "Overpass query: "
 msgstr ""
 
-msgid "Overpass server: "
-msgstr ""
-
 msgid "Paste"
 msgstr ""
 
@@ -1348,6 +1345,9 @@ msgstr ""
 msgid "Split a way at the selected node."
 msgstr ""
 
+msgid "Cannot split since another split operation is already in progress"
+msgstr ""
+
 msgid ""
 "The current selection cannot be used for splitting - no node is selected."
 msgstr ""
@@ -1459,6 +1459,27 @@ msgid ""
 "own copy and all nodes will be selected."
 msgstr ""
 
+msgid "Existing node"
+msgstr ""
+
+msgid "Both nodes"
+msgstr ""
+
+msgid "New node"
+msgstr ""
+
+msgid "Tags / Memberships"
+msgstr ""
+
+msgid "Unglue"
+msgstr ""
+
+msgid "Where should the tags of the node be put?"
+msgstr ""
+
+msgid "Where should the memberships of this node be put?"
+msgstr ""
+
 msgid "Unglued Node"
 msgstr ""
 
@@ -3049,6 +3070,15 @@ msgstr ""
 msgid "Restoring files"
 msgstr ""
 
+msgid "Unable to delete backup file {0}"
+msgstr ""
+
+msgid "Unable to delete PID file {0}"
+msgstr ""
+
+msgid "Unable to delete archived backup file {0}"
+msgstr ""
+
 msgid "Illegal latitude value ''{0}''"
 msgstr ""
 
@@ -4207,6 +4237,9 @@ msgstr ""
 msgid "No \"to\" way found"
 msgstr ""
 
+msgid "\"from\" way equals \"to\" way"
+msgstr ""
+
 msgid "No \"via\" node or way found"
 msgstr ""
 
@@ -7004,9 +7037,6 @@ msgstr ""
 msgid "Tags: {0} / Memberships: {1}"
 msgstr ""
 
-msgid "Tags / Memberships"
-msgstr ""
-
 msgid "Delete the selected key in all objects"
 msgstr ""
 
@@ -11611,6 +11641,15 @@ msgstr ""
 msgid "Please enter the OSM API URL."
 msgstr ""
 
+msgid "Use Overpass server for object downloads"
+msgstr ""
+
+msgid "Overpass server: "
+msgstr ""
+
+msgid "Overpass server"
+msgstr ""
+
 msgid "Proxy settings"
 msgstr ""
 
@@ -13749,6 +13788,9 @@ msgstr ""
 msgid "reserved"
 msgstr ""
 
+msgid "Unable to delete old preferences file {0}"
+msgstr ""
+
 msgid "Outdated Java version"
 msgstr ""
 
@@ -13840,6 +13882,9 @@ msgid ""
 "contain any JOSM object or suitable text. </p></html>"
 msgstr ""
 
+msgid "Unable to delete file {0}"
+msgstr ""
+
 msgid "ms"
 msgstr ""
 
@@ -16954,6 +16999,9 @@ msgstr ""
 msgid "Tourist buses"
 msgstr ""
 
+msgid "Max. speed Heavy Goods Vehicles (km/h)"
+msgstr ""
+
 msgid "Min. speed (km/h)"
 msgstr ""
 
@@ -19251,12 +19299,6 @@ msgstr ""
 msgid "Dentist"
 msgstr ""
 
-msgid "Nursing Home"
-msgstr ""
-
-msgid "Retirement Home"
-msgstr ""
-
 msgid "Pharmacy"
 msgstr ""
 
@@ -19284,6 +19326,31 @@ msgstr ""
 msgid "Veterinary"
 msgstr ""
 
+msgid "Social Facility"
+msgstr ""
+
+msgid "Nursing Home"
+msgstr ""
+
+msgid "Group Home"
+msgstr ""
+
+msgid "For"
+msgstr ""
+
+msgid "Assisted Living"
+msgstr ""
+
+msgid "Outreach"
+msgstr ""
+
+msgctxt "social_facility"
+msgid "Shelter"
+msgstr ""
+
+msgid "Food Bank"
+msgstr ""
+
 msgid "Toilets/Restrooms"
 msgstr ""
 
@@ -19326,6 +19393,13 @@ msgstr ""
 msgid "urinal"
 msgstr ""
 
+msgctxt "toilets"
+msgid "Diaper"
+msgstr ""
+
+msgid "room"
+msgstr ""
+
 msgid "Post Box"
 msgstr ""
 
@@ -23363,24 +23437,24 @@ msgstr ""
 msgid "Download GPX track from openstreetmap.org"
 msgstr ""
 
+msgid "Download Track"
+msgstr ""
+
+msgid "Filename"
+msgstr ""
+
 msgid ""
 "Error occurred while parsing gpx file {0}. Only a part of the file will be "
 "available."
 msgstr ""
 
-msgid "Invalid URL {0}"
-msgstr ""
-
 msgid "Error fetching URL {0}"
 msgstr ""
 
 msgid "Error parsing data from URL {0}"
 msgstr ""
 
-msgid "Download Track"
-msgstr ""
-
-msgid "Filename"
+msgid "Invalid URL {0}"
 msgstr ""
 
 msgid "Private (only shared as anonymous, unordered points)"
@@ -23430,9 +23504,6 @@ msgstr ""
 msgid "Uploading trace ..."
 msgstr ""
 
-msgid "Connecting..."
-msgstr ""
-
 msgid "Upload canceled"
 msgstr ""
 
@@ -27871,6 +27942,69 @@ msgstr ""
 msgid "Please load some photos."
 msgstr ""
 
+msgid "Edit photo GPS data"
+msgstr ""
+
+msgid "Edit GPS data of selected photo."
+msgstr ""
+
+msgid "Edit Photo GPS Data"
+msgstr ""
+
+msgid "Please select an image first."
+msgstr ""
+
+msgid "No image selected"
+msgstr ""
+
+msgid "(Empty values delete the according fields.)"
+msgstr ""
+
+msgid "coordinates"
+msgstr ""
+
+msgid "Latitude and longitude"
+msgstr ""
+
+msgid "Edit Image Coordinates"
+msgstr ""
+
+msgid "Edit coordinates in separate editor"
+msgstr ""
+
+msgid "altitude"
+msgstr ""
+
+msgid "Altitude:"
+msgstr ""
+
+msgid "speed"
+msgstr ""
+
+msgid "positive number or empty"
+msgstr ""
+
+msgid "Speed:"
+msgstr ""
+
+msgid "direction"
+msgstr ""
+
+msgid "range -360.0 .. 360.0, or empty"
+msgstr ""
+
+msgid "Direction:"
+msgstr ""
+
+msgid "°"
+msgstr ""
+
+msgid "Undo changes made in this dialog"
+msgstr ""
+
+msgid "Reload GPS data from image file"
+msgstr ""
+
 msgid "New layer for untagged images"
 msgstr ""
 
@@ -30887,9 +31021,6 @@ msgstr ""
 msgid "Fetches all coordinates from Wikipedia in the current view"
 msgstr ""
 
-msgid "coordinates"
-msgstr ""
-
 msgid "Category"
 msgstr ""
 
diff --git a/i18n/po/hu.po b/i18n/po/hu.po
index 5541721..ae85002 100644
--- a/i18n/po/hu.po
+++ b/i18n/po/hu.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: josm\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-12-31 03:40+0100\n"
+"POT-Creation-Date: 2016-01-06 03:38+0100\n"
 "PO-Revision-Date: 2015-11-18 10:01+0000\n"
 "Last-Translator: Báthory Péter <bathory86p at gmail.com>\n"
 "Language-Team: Hungarian <kde-l10n-hu at kde.org>\n"
@@ -16,8 +16,8 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Launchpad-Export-Date: 2015-12-31 04:46+0000\n"
-"X-Generator: Launchpad (build 17865)\n"
+"X-Launchpad-Export-Date: 2016-01-06 04:45+0000\n"
+"X-Generator: Launchpad (build 17876)\n"
 "Language: hu\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -1154,9 +1154,6 @@ msgstr "Adatfeldolgozási hiba"
 msgid "Overpass query: "
 msgstr "Overpass lekérdezés: "
 
-msgid "Overpass server: "
-msgstr "Overpass szerver: "
-
 msgid "Paste"
 msgstr "Beillesztés"
 
@@ -1466,6 +1463,9 @@ msgstr "Vonal kettévágása"
 msgid "Split a way at the selected node."
 msgstr "Vonal kettévágása a kijelölt pontnál."
 
+msgid "Cannot split since another split operation is already in progress"
+msgstr ""
+
 msgid ""
 "The current selection cannot be used for splitting - no node is selected."
 msgstr ""
@@ -1597,6 +1597,27 @@ msgstr ""
 "új másolatokat kap a szóban forgó pontokról, és az összes új pont "
 "kijelölődik."
 
+msgid "Existing node"
+msgstr ""
+
+msgid "Both nodes"
+msgstr ""
+
+msgid "New node"
+msgstr ""
+
+msgid "Tags / Memberships"
+msgstr "Címkék / Tagságok"
+
+msgid "Unglue"
+msgstr ""
+
+msgid "Where should the tags of the node be put?"
+msgstr ""
+
+msgid "Where should the memberships of this node be put?"
+msgstr ""
+
 msgid "Unglued Node"
 msgstr "Szétválasztott pont"
 
@@ -3314,6 +3335,15 @@ msgstr "A munkád automatikusan el lett mentve."
 msgid "Restoring files"
 msgstr "Fájlok visszaállítása"
 
+msgid "Unable to delete backup file {0}"
+msgstr ""
+
+msgid "Unable to delete PID file {0}"
+msgstr ""
+
+msgid "Unable to delete archived backup file {0}"
+msgstr ""
+
 msgid "Illegal latitude value ''{0}''"
 msgstr "Rossz széleségi érték: ''{0}''"
 
@@ -4554,6 +4584,9 @@ msgstr "Nem található \"from\" vonal"
 msgid "No \"to\" way found"
 msgstr "Nem található \"to\" vonal"
 
+msgid "\"from\" way equals \"to\" way"
+msgstr ""
+
 msgid "No \"via\" node or way found"
 msgstr "Nem található \"via\" pont"
 
@@ -7564,9 +7597,6 @@ msgstr "Objektumok: {2} / Címkék: {0} / Tagságok {1}"
 msgid "Tags: {0} / Memberships: {1}"
 msgstr "Címke: {0} / Tagság: {1}"
 
-msgid "Tags / Memberships"
-msgstr "Címkék / Tagságok"
-
 msgid "Delete the selected key in all objects"
 msgstr "A kiválasztott kulcs törlése az összes objektumból"
 
@@ -12711,6 +12741,15 @@ msgstr "A jelenlegi cím nem egy érvényes URL cím."
 msgid "Please enter the OSM API URL."
 msgstr "Kérlek add meg az OSM API URL-t"
 
+msgid "Use Overpass server for object downloads"
+msgstr ""
+
+msgid "Overpass server: "
+msgstr "Overpass szerver: "
+
+msgid "Overpass server"
+msgstr ""
+
 msgid "Proxy settings"
 msgstr "Proxybeállítások"
 
@@ -15199,6 +15238,9 @@ msgstr "URL nem tartalmaz helyes {0}-t"
 msgid "reserved"
 msgstr "fenntartott"
 
+msgid "Unable to delete old preferences file {0}"
+msgstr ""
+
 msgid "Outdated Java version"
 msgstr "Elavult JAVA verzió"
 
@@ -15316,6 +15358,9 @@ msgstr ""
 "<html><p> Sajnálom, de nem lehetséges címkéket beilleszteni a vágólapról, "
 "mert az nem tartalmaz JOSM objektumot vagy  alkalmas szöveget. </p></html>"
 
+msgid "Unable to delete file {0}"
+msgstr ""
+
 msgid "ms"
 msgstr "ms"
 
@@ -18576,6 +18621,9 @@ msgstr "Közszolgáltatási járművek (tömegközl.)"
 msgid "Tourist buses"
 msgstr "Túrista buszok"
 
+msgid "Max. speed Heavy Goods Vehicles (km/h)"
+msgstr ""
+
 msgid "Min. speed (km/h)"
 msgstr "Min. sebesség (km/h)"
 
@@ -20900,12 +20948,6 @@ msgstr "Orvosi rendelő"
 msgid "Dentist"
 msgstr "Fogorvos"
 
-msgid "Nursing Home"
-msgstr "Idősek otthona"
-
-msgid "Retirement Home"
-msgstr "Nyugdíjas otthon"
-
 msgid "Pharmacy"
 msgstr "Gyógyszertár"
 
@@ -20933,6 +20975,31 @@ msgstr "(Használj nemzetközi kódot, mint +12-345-67890)"
 msgid "Veterinary"
 msgstr "Állatorvos"
 
+msgid "Social Facility"
+msgstr ""
+
+msgid "Nursing Home"
+msgstr "Idősek otthona"
+
+msgid "Group Home"
+msgstr ""
+
+msgid "For"
+msgstr ""
+
+msgid "Assisted Living"
+msgstr ""
+
+msgid "Outreach"
+msgstr ""
+
+msgctxt "social_facility"
+msgid "Shelter"
+msgstr ""
+
+msgid "Food Bank"
+msgstr ""
+
 msgid "Toilets/Restrooms"
 msgstr "Mosdók/WC"
 
@@ -20975,6 +21042,13 @@ msgstr "guggoló"
 msgid "urinal"
 msgstr "vizelő"
 
+msgctxt "toilets"
+msgid "Diaper"
+msgstr ""
+
+msgid "room"
+msgstr ""
+
 msgid "Post Box"
 msgstr "Postaláda"
 
@@ -25060,6 +25134,12 @@ msgstr "Nyomvonal letöltése..."
 msgid "Download GPX track from openstreetmap.org"
 msgstr "GPX nyomvonal letöltése az openstreetmap.org-ról"
 
+msgid "Download Track"
+msgstr "Nyomvonal letöltése"
+
+msgid "Filename"
+msgstr "Fájlnév"
+
 msgid ""
 "Error occurred while parsing gpx file {0}. Only a part of the file will be "
 "available."
@@ -25067,20 +25147,14 @@ msgstr ""
 "Hiba történt a(z) {0} GPX fájl feldolgozása során. Csak egy része lesz "
 "elérhető a fájl tartalmának."
 
-msgid "Invalid URL {0}"
-msgstr "Hibás URL {0}"
-
 msgid "Error fetching URL {0}"
 msgstr "Hiba a következő URL lekérésekor: {0}"
 
 msgid "Error parsing data from URL {0}"
 msgstr "Hiba az URL adatok feldolgozása során {0}"
 
-msgid "Download Track"
-msgstr "Nyomvonal letöltése"
-
-msgid "Filename"
-msgstr "Fájlnév"
+msgid "Invalid URL {0}"
+msgstr "Hibás URL {0}"
 
 msgid "Private (only shared as anonymous, unordered points)"
 msgstr "Személyes (csak névtelenül megosztva, rendezetlen pontok)"
@@ -25133,9 +25207,6 @@ msgstr "Nincs GPX réteg kiválasztva. A nyomvonalat nem lehet feltölteni."
 msgid "Uploading trace ..."
 msgstr "Nyomvonal feltöltés..."
 
-msgid "Connecting..."
-msgstr "Kapcsolódás..."
-
 msgid "Upload canceled"
 msgstr "Feltöltés megszakítva"
 
@@ -29633,6 +29704,69 @@ msgstr ""
 msgid "Please load some photos."
 msgstr ""
 
+msgid "Edit photo GPS data"
+msgstr ""
+
+msgid "Edit GPS data of selected photo."
+msgstr ""
+
+msgid "Edit Photo GPS Data"
+msgstr ""
+
+msgid "Please select an image first."
+msgstr ""
+
+msgid "No image selected"
+msgstr ""
+
+msgid "(Empty values delete the according fields.)"
+msgstr ""
+
+msgid "coordinates"
+msgstr "koordináták"
+
+msgid "Latitude and longitude"
+msgstr ""
+
+msgid "Edit Image Coordinates"
+msgstr ""
+
+msgid "Edit coordinates in separate editor"
+msgstr ""
+
+msgid "altitude"
+msgstr ""
+
+msgid "Altitude:"
+msgstr ""
+
+msgid "speed"
+msgstr ""
+
+msgid "positive number or empty"
+msgstr ""
+
+msgid "Speed:"
+msgstr ""
+
+msgid "direction"
+msgstr ""
+
+msgid "range -360.0 .. 360.0, or empty"
+msgstr ""
+
+msgid "Direction:"
+msgstr ""
+
+msgid "°"
+msgstr ""
+
+msgid "Undo changes made in this dialog"
+msgstr ""
+
+msgid "Reload GPS data from image file"
+msgstr ""
+
 msgid "New layer for untagged images"
 msgstr ""
 
@@ -32818,9 +32952,6 @@ msgstr "{0}.Wikipedia.org: {1}"
 msgid "Fetches all coordinates from Wikipedia in the current view"
 msgstr "Minden koordinátát elhoz a Wikipédiából, az aktuális nézet szerint"
 
-msgid "coordinates"
-msgstr "koordináták"
-
 msgid "Category"
 msgstr "Kategória"
 
@@ -32866,3 +32997,6 @@ msgstr "Vezetés"
 
 msgid "Drive a race car on this layer"
 msgstr "Autóverseny ezen a rétegen"
+
+#~ msgid "Retirement Home"
+#~ msgstr "Nyugdíjas otthon"
diff --git a/i18n/po/hy.po b/i18n/po/hy.po
index a08cdac..6184cb4 100644
--- a/i18n/po/hy.po
+++ b/i18n/po/hy.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: josm\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-12-31 03:40+0100\n"
+"POT-Creation-Date: 2016-01-06 03:38+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: 2015-12-31 04:33+0000\n"
-"X-Generator: Launchpad (build 17865)\n"
+"X-Launchpad-Export-Date: 2016-01-06 04:32+0000\n"
+"X-Generator: Launchpad (build 17876)\n"
 "Language: hy\n"
 
 msgid "Cancel"
@@ -1056,9 +1056,6 @@ msgstr ""
 msgid "Overpass query: "
 msgstr ""
 
-msgid "Overpass server: "
-msgstr ""
-
 msgid "Paste"
 msgstr ""
 
@@ -1348,6 +1345,9 @@ msgstr ""
 msgid "Split a way at the selected node."
 msgstr ""
 
+msgid "Cannot split since another split operation is already in progress"
+msgstr ""
+
 msgid ""
 "The current selection cannot be used for splitting - no node is selected."
 msgstr ""
@@ -1459,6 +1459,27 @@ msgid ""
 "own copy and all nodes will be selected."
 msgstr ""
 
+msgid "Existing node"
+msgstr ""
+
+msgid "Both nodes"
+msgstr ""
+
+msgid "New node"
+msgstr ""
+
+msgid "Tags / Memberships"
+msgstr ""
+
+msgid "Unglue"
+msgstr ""
+
+msgid "Where should the tags of the node be put?"
+msgstr ""
+
+msgid "Where should the memberships of this node be put?"
+msgstr ""
+
 msgid "Unglued Node"
 msgstr ""
 
@@ -3049,6 +3070,15 @@ msgstr ""
 msgid "Restoring files"
 msgstr ""
 
+msgid "Unable to delete backup file {0}"
+msgstr ""
+
+msgid "Unable to delete PID file {0}"
+msgstr ""
+
+msgid "Unable to delete archived backup file {0}"
+msgstr ""
+
 msgid "Illegal latitude value ''{0}''"
 msgstr ""
 
@@ -4207,6 +4237,9 @@ msgstr ""
 msgid "No \"to\" way found"
 msgstr ""
 
+msgid "\"from\" way equals \"to\" way"
+msgstr ""
+
 msgid "No \"via\" node or way found"
 msgstr ""
 
@@ -7004,9 +7037,6 @@ msgstr ""
 msgid "Tags: {0} / Memberships: {1}"
 msgstr ""
 
-msgid "Tags / Memberships"
-msgstr ""
-
 msgid "Delete the selected key in all objects"
 msgstr ""
 
@@ -11611,6 +11641,15 @@ msgstr ""
 msgid "Please enter the OSM API URL."
 msgstr ""
 
+msgid "Use Overpass server for object downloads"
+msgstr ""
+
+msgid "Overpass server: "
+msgstr ""
+
+msgid "Overpass server"
+msgstr ""
+
 msgid "Proxy settings"
 msgstr ""
 
@@ -13749,6 +13788,9 @@ msgstr ""
 msgid "reserved"
 msgstr ""
 
+msgid "Unable to delete old preferences file {0}"
+msgstr ""
+
 msgid "Outdated Java version"
 msgstr ""
 
@@ -13840,6 +13882,9 @@ msgid ""
 "contain any JOSM object or suitable text. </p></html>"
 msgstr ""
 
+msgid "Unable to delete file {0}"
+msgstr ""
+
 msgid "ms"
 msgstr ""
 
@@ -16954,6 +16999,9 @@ msgstr ""
 msgid "Tourist buses"
 msgstr ""
 
+msgid "Max. speed Heavy Goods Vehicles (km/h)"
+msgstr ""
+
 msgid "Min. speed (km/h)"
 msgstr ""
 
@@ -19251,12 +19299,6 @@ msgstr ""
 msgid "Dentist"
 msgstr ""
 
-msgid "Nursing Home"
-msgstr ""
-
-msgid "Retirement Home"
-msgstr ""
-
 msgid "Pharmacy"
 msgstr ""
 
@@ -19284,6 +19326,31 @@ msgstr ""
 msgid "Veterinary"
 msgstr ""
 
+msgid "Social Facility"
+msgstr ""
+
+msgid "Nursing Home"
+msgstr ""
+
+msgid "Group Home"
+msgstr ""
+
+msgid "For"
+msgstr ""
+
+msgid "Assisted Living"
+msgstr ""
+
+msgid "Outreach"
+msgstr ""
+
+msgctxt "social_facility"
+msgid "Shelter"
+msgstr ""
+
+msgid "Food Bank"
+msgstr ""
+
 msgid "Toilets/Restrooms"
 msgstr ""
 
@@ -19326,6 +19393,13 @@ msgstr ""
 msgid "urinal"
 msgstr ""
 
+msgctxt "toilets"
+msgid "Diaper"
+msgstr ""
+
+msgid "room"
+msgstr ""
+
 msgid "Post Box"
 msgstr ""
 
@@ -23363,24 +23437,24 @@ msgstr ""
 msgid "Download GPX track from openstreetmap.org"
 msgstr ""
 
+msgid "Download Track"
+msgstr ""
+
+msgid "Filename"
+msgstr ""
+
 msgid ""
 "Error occurred while parsing gpx file {0}. Only a part of the file will be "
 "available."
 msgstr ""
 
-msgid "Invalid URL {0}"
-msgstr ""
-
 msgid "Error fetching URL {0}"
 msgstr ""
 
 msgid "Error parsing data from URL {0}"
 msgstr ""
 
-msgid "Download Track"
-msgstr ""
-
-msgid "Filename"
+msgid "Invalid URL {0}"
 msgstr ""
 
 msgid "Private (only shared as anonymous, unordered points)"
@@ -23430,9 +23504,6 @@ msgstr ""
 msgid "Uploading trace ..."
 msgstr ""
 
-msgid "Connecting..."
-msgstr ""
-
 msgid "Upload canceled"
 msgstr ""
 
@@ -27871,6 +27942,69 @@ msgstr ""
 msgid "Please load some photos."
 msgstr ""
 
+msgid "Edit photo GPS data"
+msgstr ""
+
+msgid "Edit GPS data of selected photo."
+msgstr ""
+
+msgid "Edit Photo GPS Data"
+msgstr ""
+
+msgid "Please select an image first."
+msgstr ""
+
+msgid "No image selected"
+msgstr ""
+
+msgid "(Empty values delete the according fields.)"
+msgstr ""
+
+msgid "coordinates"
+msgstr ""
+
+msgid "Latitude and longitude"
+msgstr ""
+
+msgid "Edit Image Coordinates"
+msgstr ""
+
+msgid "Edit coordinates in separate editor"
+msgstr ""
+
+msgid "altitude"
+msgstr ""
+
+msgid "Altitude:"
+msgstr ""
+
+msgid "speed"
+msgstr ""
+
+msgid "positive number or empty"
+msgstr ""
+
+msgid "Speed:"
+msgstr ""
+
+msgid "direction"
+msgstr ""
+
+msgid "range -360.0 .. 360.0, or empty"
+msgstr ""
+
+msgid "Direction:"
+msgstr ""
+
+msgid "°"
+msgstr ""
+
+msgid "Undo changes made in this dialog"
+msgstr ""
+
+msgid "Reload GPS data from image file"
+msgstr ""
+
 msgid "New layer for untagged images"
 msgstr ""
 
@@ -30887,9 +31021,6 @@ msgstr ""
 msgid "Fetches all coordinates from Wikipedia in the current view"
 msgstr ""
 
-msgid "coordinates"
-msgstr ""
-
 msgid "Category"
 msgstr ""
 
diff --git a/i18n/po/ia.po b/i18n/po/ia.po
index ccc409b..5d4ed4a 100644
--- a/i18n/po/ia.po
+++ b/i18n/po/ia.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: josm\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-12-31 03:40+0100\n"
+"POT-Creation-Date: 2016-01-06 03:38+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: 2015-12-31 04:47+0000\n"
-"X-Generator: Launchpad (build 17865)\n"
+"X-Launchpad-Export-Date: 2016-01-06 04:46+0000\n"
+"X-Generator: Launchpad (build 17876)\n"
 "Language: ia\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -1056,9 +1056,6 @@ msgstr ""
 msgid "Overpass query: "
 msgstr ""
 
-msgid "Overpass server: "
-msgstr ""
-
 msgid "Paste"
 msgstr ""
 
@@ -1348,6 +1345,9 @@ msgstr ""
 msgid "Split a way at the selected node."
 msgstr ""
 
+msgid "Cannot split since another split operation is already in progress"
+msgstr ""
+
 msgid ""
 "The current selection cannot be used for splitting - no node is selected."
 msgstr ""
@@ -1459,6 +1459,27 @@ msgid ""
 "own copy and all nodes will be selected."
 msgstr ""
 
+msgid "Existing node"
+msgstr ""
+
+msgid "Both nodes"
+msgstr ""
+
+msgid "New node"
+msgstr ""
+
+msgid "Tags / Memberships"
+msgstr ""
+
+msgid "Unglue"
+msgstr ""
+
+msgid "Where should the tags of the node be put?"
+msgstr ""
+
+msgid "Where should the memberships of this node be put?"
+msgstr ""
+
 msgid "Unglued Node"
 msgstr ""
 
@@ -3049,6 +3070,15 @@ msgstr ""
 msgid "Restoring files"
 msgstr ""
 
+msgid "Unable to delete backup file {0}"
+msgstr ""
+
+msgid "Unable to delete PID file {0}"
+msgstr ""
+
+msgid "Unable to delete archived backup file {0}"
+msgstr ""
+
 msgid "Illegal latitude value ''{0}''"
 msgstr ""
 
@@ -4207,6 +4237,9 @@ msgstr ""
 msgid "No \"to\" way found"
 msgstr ""
 
+msgid "\"from\" way equals \"to\" way"
+msgstr ""
+
 msgid "No \"via\" node or way found"
 msgstr ""
 
@@ -7004,9 +7037,6 @@ msgstr ""
 msgid "Tags: {0} / Memberships: {1}"
 msgstr ""
 
-msgid "Tags / Memberships"
-msgstr ""
-
 msgid "Delete the selected key in all objects"
 msgstr ""
 
@@ -11611,6 +11641,15 @@ msgstr ""
 msgid "Please enter the OSM API URL."
 msgstr ""
 
+msgid "Use Overpass server for object downloads"
+msgstr ""
+
+msgid "Overpass server: "
+msgstr ""
+
+msgid "Overpass server"
+msgstr ""
+
 msgid "Proxy settings"
 msgstr ""
 
@@ -13749,6 +13788,9 @@ msgstr ""
 msgid "reserved"
 msgstr ""
 
+msgid "Unable to delete old preferences file {0}"
+msgstr ""
+
 msgid "Outdated Java version"
 msgstr ""
 
@@ -13840,6 +13882,9 @@ msgid ""
 "contain any JOSM object or suitable text. </p></html>"
 msgstr ""
 
+msgid "Unable to delete file {0}"
+msgstr ""
+
 msgid "ms"
 msgstr ""
 
@@ -16954,6 +16999,9 @@ msgstr ""
 msgid "Tourist buses"
 msgstr ""
 
+msgid "Max. speed Heavy Goods Vehicles (km/h)"
+msgstr ""
+
 msgid "Min. speed (km/h)"
 msgstr ""
 
@@ -19251,12 +19299,6 @@ msgstr ""
 msgid "Dentist"
 msgstr ""
 
-msgid "Nursing Home"
-msgstr ""
-
-msgid "Retirement Home"
-msgstr ""
-
 msgid "Pharmacy"
 msgstr ""
 
@@ -19284,6 +19326,31 @@ msgstr ""
 msgid "Veterinary"
 msgstr ""
 
+msgid "Social Facility"
+msgstr ""
+
+msgid "Nursing Home"
+msgstr ""
+
+msgid "Group Home"
+msgstr ""
+
+msgid "For"
+msgstr ""
+
+msgid "Assisted Living"
+msgstr ""
+
+msgid "Outreach"
+msgstr ""
+
+msgctxt "social_facility"
+msgid "Shelter"
+msgstr ""
+
+msgid "Food Bank"
+msgstr ""
+
 msgid "Toilets/Restrooms"
 msgstr ""
 
@@ -19326,6 +19393,13 @@ msgstr ""
 msgid "urinal"
 msgstr ""
 
+msgctxt "toilets"
+msgid "Diaper"
+msgstr ""
+
+msgid "room"
+msgstr ""
+
 msgid "Post Box"
 msgstr ""
 
@@ -23363,24 +23437,24 @@ msgstr ""
 msgid "Download GPX track from openstreetmap.org"
 msgstr ""
 
+msgid "Download Track"
+msgstr ""
+
+msgid "Filename"
+msgstr ""
+
 msgid ""
 "Error occurred while parsing gpx file {0}. Only a part of the file will be "
 "available."
 msgstr ""
 
-msgid "Invalid URL {0}"
-msgstr ""
-
 msgid "Error fetching URL {0}"
 msgstr ""
 
 msgid "Error parsing data from URL {0}"
 msgstr ""
 
-msgid "Download Track"
-msgstr ""
-
-msgid "Filename"
+msgid "Invalid URL {0}"
 msgstr ""
 
 msgid "Private (only shared as anonymous, unordered points)"
@@ -23430,9 +23504,6 @@ msgstr ""
 msgid "Uploading trace ..."
 msgstr ""
 
-msgid "Connecting..."
-msgstr ""
-
 msgid "Upload canceled"
 msgstr ""
 
@@ -27871,6 +27942,69 @@ msgstr ""
 msgid "Please load some photos."
 msgstr ""
 
+msgid "Edit photo GPS data"
+msgstr ""
+
+msgid "Edit GPS data of selected photo."
+msgstr ""
+
+msgid "Edit Photo GPS Data"
+msgstr ""
+
+msgid "Please select an image first."
+msgstr ""
+
+msgid "No image selected"
+msgstr ""
+
+msgid "(Empty values delete the according fields.)"
+msgstr ""
+
+msgid "coordinates"
+msgstr ""
+
+msgid "Latitude and longitude"
+msgstr ""
+
+msgid "Edit Image Coordinates"
+msgstr ""
+
+msgid "Edit coordinates in separate editor"
+msgstr ""
+
+msgid "altitude"
+msgstr ""
+
+msgid "Altitude:"
+msgstr ""
+
+msgid "speed"
+msgstr ""
+
+msgid "positive number or empty"
+msgstr ""
+
+msgid "Speed:"
+msgstr ""
+
+msgid "direction"
+msgstr ""
+
+msgid "range -360.0 .. 360.0, or empty"
+msgstr ""
+
+msgid "Direction:"
+msgstr ""
+
+msgid "°"
+msgstr ""
+
+msgid "Undo changes made in this dialog"
+msgstr ""
+
+msgid "Reload GPS data from image file"
+msgstr ""
+
 msgid "New layer for untagged images"
 msgstr ""
 
@@ -30887,9 +31021,6 @@ msgstr ""
 msgid "Fetches all coordinates from Wikipedia in the current view"
 msgstr ""
 
-msgid "coordinates"
-msgstr ""
-
 msgid "Category"
 msgstr ""
 
diff --git a/i18n/po/id.po b/i18n/po/id.po
index 9d65e14..38ca05a 100644
--- a/i18n/po/id.po
+++ b/i18n/po/id.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: josm\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-12-31 03:40+0100\n"
+"POT-Creation-Date: 2016-01-06 03:38+0100\n"
 "PO-Revision-Date: 2015-04-10 09:39+0000\n"
 "Last-Translator: Trisno Pamuji <tri.snowman at gmail.com>\n"
 "Language-Team: Indonesian <id at li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=1; plural=0;\n"
-"X-Launchpad-Export-Date: 2015-12-31 04:48+0000\n"
-"X-Generator: Launchpad (build 17865)\n"
+"X-Launchpad-Export-Date: 2016-01-06 04:47+0000\n"
+"X-Generator: Launchpad (build 17876)\n"
 "Language: id\n"
 "X-Language: id_ID\n"
 
@@ -1128,9 +1128,6 @@ msgstr ""
 msgid "Overpass query: "
 msgstr ""
 
-msgid "Overpass server: "
-msgstr ""
-
 msgid "Paste"
 msgstr "Tempel"
 
@@ -1436,6 +1433,9 @@ msgstr "Memisahkan Garis/Way"
 msgid "Split a way at the selected node."
 msgstr "Pisahkan sebuah jalur pada node terpilih"
 
+msgid "Cannot split since another split operation is already in progress"
+msgstr ""
+
 msgid ""
 "The current selection cannot be used for splitting - no node is selected."
 msgstr ""
@@ -1563,6 +1563,27 @@ msgstr ""
 "mendapatkan \n"
 "salinan sendiri dan semua node akan dipilih."
 
+msgid "Existing node"
+msgstr ""
+
+msgid "Both nodes"
+msgstr ""
+
+msgid "New node"
+msgstr ""
+
+msgid "Tags / Memberships"
+msgstr ""
+
+msgid "Unglue"
+msgstr ""
+
+msgid "Where should the tags of the node be put?"
+msgstr ""
+
+msgid "Where should the memberships of this node be put?"
+msgstr ""
+
 msgid "Unglued Node"
 msgstr "Node yang dilepas"
 
@@ -3241,6 +3262,15 @@ msgstr ""
 msgid "Restoring files"
 msgstr "Mengembalikan file"
 
+msgid "Unable to delete backup file {0}"
+msgstr ""
+
+msgid "Unable to delete PID file {0}"
+msgstr ""
+
+msgid "Unable to delete archived backup file {0}"
+msgstr ""
+
 msgid "Illegal latitude value ''{0}''"
 msgstr "Nilai lintang tidak sah ''{0}''"
 
@@ -4457,6 +4487,9 @@ msgstr "Tidak ada \"from\" way/garis ditemukan"
 msgid "No \"to\" way found"
 msgstr "Tidak ada \"to\" way/garis ditemukan"
 
+msgid "\"from\" way equals \"to\" way"
+msgstr ""
+
 msgid "No \"via\" node or way found"
 msgstr "Tidak ada \"via\" way/garis ditemukan"
 
@@ -7373,9 +7406,6 @@ msgstr ""
 msgid "Tags: {0} / Memberships: {1}"
 msgstr ""
 
-msgid "Tags / Memberships"
-msgstr ""
-
 msgid "Delete the selected key in all objects"
 msgstr "Hapus key yang dipilih pada semua objek"
 
@@ -12393,6 +12423,15 @@ msgstr "Nilai saat ini URL tidak valid"
 msgid "Please enter the OSM API URL."
 msgstr "Mohon masukkan OSM API URL"
 
+msgid "Use Overpass server for object downloads"
+msgstr ""
+
+msgid "Overpass server: "
+msgstr ""
+
+msgid "Overpass server"
+msgstr ""
+
 msgid "Proxy settings"
 msgstr "Pengaturan proxy"
 
@@ -14747,6 +14786,9 @@ msgstr ""
 msgid "reserved"
 msgstr ""
 
+msgid "Unable to delete old preferences file {0}"
+msgstr ""
+
 msgid "Outdated Java version"
 msgstr ""
 
@@ -14840,6 +14882,9 @@ msgstr ""
 "<html><p> Maaf, itu tidak mungkin untuk menyisipkan tag dari penyangga. Ini "
 "tidak ada dalam objek JOSM atau teks yang sesuai. </p></html>"
 
+msgid "Unable to delete file {0}"
+msgstr ""
+
 msgid "ms"
 msgstr ""
 
@@ -18059,6 +18104,9 @@ msgstr "Kendaraan Umum (psv)"
 msgid "Tourist buses"
 msgstr ""
 
+msgid "Max. speed Heavy Goods Vehicles (km/h)"
+msgstr ""
+
 msgid "Min. speed (km/h)"
 msgstr "Kecepatan minimum (km/h)"
 
@@ -20365,12 +20413,6 @@ msgstr ""
 msgid "Dentist"
 msgstr "Dokter Gigi"
 
-msgid "Nursing Home"
-msgstr "Rumah perawatan"
-
-msgid "Retirement Home"
-msgstr "Rumah Pensiunan"
-
 msgid "Pharmacy"
 msgstr "Apotik"
 
@@ -20398,6 +20440,31 @@ msgstr "(Gunakan kode internasional, seperti +12-345-67890)"
 msgid "Veterinary"
 msgstr "Dokter Hewan"
 
+msgid "Social Facility"
+msgstr ""
+
+msgid "Nursing Home"
+msgstr "Rumah perawatan"
+
+msgid "Group Home"
+msgstr ""
+
+msgid "For"
+msgstr ""
+
+msgid "Assisted Living"
+msgstr ""
+
+msgid "Outreach"
+msgstr ""
+
+msgctxt "social_facility"
+msgid "Shelter"
+msgstr ""
+
+msgid "Food Bank"
+msgstr ""
+
 msgid "Toilets/Restrooms"
 msgstr ""
 
@@ -20440,6 +20507,13 @@ msgstr ""
 msgid "urinal"
 msgstr ""
 
+msgctxt "toilets"
+msgid "Diaper"
+msgstr ""
+
+msgid "room"
+msgstr ""
+
 msgid "Post Box"
 msgstr "Kotak Pos"
 
@@ -24483,6 +24557,12 @@ msgstr "Download Track ..."
 msgid "Download GPX track from openstreetmap.org"
 msgstr "Download GPX track dari openstreetmap.org"
 
+msgid "Download Track"
+msgstr "Download Track"
+
+msgid "Filename"
+msgstr "Nama File"
+
 msgid ""
 "Error occurred while parsing gpx file {0}. Only a part of the file will be "
 "available."
@@ -24490,20 +24570,14 @@ msgstr ""
 "kesalahan terjadi ketika mengurai berkas gpx {0}. Hanya bagian dari berkas "
 "yang tersedia."
 
-msgid "Invalid URL {0}"
-msgstr "URL salah {0}"
-
 msgid "Error fetching URL {0}"
 msgstr "Kesalahan mengambil URL {0}"
 
 msgid "Error parsing data from URL {0}"
 msgstr "Kesalahan mengurai data dari URL {0}"
 
-msgid "Download Track"
-msgstr "Download Track"
-
-msgid "Filename"
-msgstr "Nama File"
+msgid "Invalid URL {0}"
+msgstr "URL salah {0}"
 
 msgid "Private (only shared as anonymous, unordered points)"
 msgstr "Pribadi (hanya berbagi sebagai anonim, tidak mengatur titik)"
@@ -24556,9 +24630,6 @@ msgstr "Tidak ada layer GPX yang terpilih. Tidak dapat mengupload jejak."
 msgid "Uploading trace ..."
 msgstr "Mengupload jejak"
 
-msgid "Connecting..."
-msgstr "Menghubungkan..."
-
 msgid "Upload canceled"
 msgstr "Unggahan ditunda"
 
@@ -29303,6 +29374,69 @@ msgstr ""
 msgid "Please load some photos."
 msgstr ""
 
+msgid "Edit photo GPS data"
+msgstr ""
+
+msgid "Edit GPS data of selected photo."
+msgstr ""
+
+msgid "Edit Photo GPS Data"
+msgstr ""
+
+msgid "Please select an image first."
+msgstr ""
+
+msgid "No image selected"
+msgstr ""
+
+msgid "(Empty values delete the according fields.)"
+msgstr ""
+
+msgid "coordinates"
+msgstr "koordinat"
+
+msgid "Latitude and longitude"
+msgstr ""
+
+msgid "Edit Image Coordinates"
+msgstr ""
+
+msgid "Edit coordinates in separate editor"
+msgstr ""
+
+msgid "altitude"
+msgstr ""
+
+msgid "Altitude:"
+msgstr ""
+
+msgid "speed"
+msgstr ""
+
+msgid "positive number or empty"
+msgstr ""
+
+msgid "Speed:"
+msgstr ""
+
+msgid "direction"
+msgstr ""
+
+msgid "range -360.0 .. 360.0, or empty"
+msgstr ""
+
+msgid "Direction:"
+msgstr ""
+
+msgid "°"
+msgstr ""
+
+msgid "Undo changes made in this dialog"
+msgstr ""
+
+msgid "Reload GPS data from image file"
+msgstr ""
+
 msgid "New layer for untagged images"
 msgstr ""
 
@@ -32565,9 +32699,6 @@ msgstr "{0}.Wikipedia.org: {1}"
 msgid "Fetches all coordinates from Wikipedia in the current view"
 msgstr "mengambil semua koordinat dari wikipedia dalam pandangan saat ini"
 
-msgid "coordinates"
-msgstr "koordinat"
-
 msgid "Category"
 msgstr "Kategori"
 
@@ -32613,3 +32744,6 @@ msgstr "Pergi mengemudi"
 
 msgid "Drive a race car on this layer"
 msgstr "Mengendarai mobil balap pada layer ini"
+
+#~ msgid "Retirement Home"
+#~ msgstr "Rumah Pensiunan"
diff --git a/i18n/po/is.po b/i18n/po/is.po
index e728f94..5b1ba87 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: 2015-12-31 03:40+0100\n"
+"POT-Creation-Date: 2016-01-06 03:38+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: 2015-12-31 04:47+0000\n"
-"X-Generator: Launchpad (build 17865)\n"
+"X-Launchpad-Export-Date: 2016-01-06 04:46+0000\n"
+"X-Generator: Launchpad (build 17876)\n"
 "Language: is\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -1059,9 +1059,6 @@ msgstr ""
 msgid "Overpass query: "
 msgstr ""
 
-msgid "Overpass server: "
-msgstr ""
-
 msgid "Paste"
 msgstr "Líma"
 
@@ -1354,6 +1351,9 @@ msgstr "Skipta veg"
 msgid "Split a way at the selected node."
 msgstr "Skipta veg á völdum hnút(um)."
 
+msgid "Cannot split since another split operation is already in progress"
+msgstr ""
+
 msgid ""
 "The current selection cannot be used for splitting - no node is selected."
 msgstr ""
@@ -1473,6 +1473,27 @@ msgid ""
 "own copy and all nodes will be selected."
 msgstr ""
 
+msgid "Existing node"
+msgstr ""
+
+msgid "Both nodes"
+msgstr ""
+
+msgid "New node"
+msgstr ""
+
+msgid "Tags / Memberships"
+msgstr ""
+
+msgid "Unglue"
+msgstr ""
+
+msgid "Where should the tags of the node be put?"
+msgstr ""
+
+msgid "Where should the memberships of this node be put?"
+msgstr ""
+
 msgid "Unglued Node"
 msgstr ""
 
@@ -3068,6 +3089,15 @@ msgstr ""
 msgid "Restoring files"
 msgstr ""
 
+msgid "Unable to delete backup file {0}"
+msgstr ""
+
+msgid "Unable to delete PID file {0}"
+msgstr ""
+
+msgid "Unable to delete archived backup file {0}"
+msgstr ""
+
 msgid "Illegal latitude value ''{0}''"
 msgstr ""
 
@@ -4226,6 +4256,9 @@ msgstr ""
 msgid "No \"to\" way found"
 msgstr ""
 
+msgid "\"from\" way equals \"to\" way"
+msgstr ""
+
 msgid "No \"via\" node or way found"
 msgstr ""
 
@@ -7029,9 +7062,6 @@ msgstr ""
 msgid "Tags: {0} / Memberships: {1}"
 msgstr ""
 
-msgid "Tags / Memberships"
-msgstr ""
-
 msgid "Delete the selected key in all objects"
 msgstr "Eyða völdum lykil í öllum völdum hlutum"
 
@@ -11656,6 +11686,15 @@ msgstr ""
 msgid "Please enter the OSM API URL."
 msgstr ""
 
+msgid "Use Overpass server for object downloads"
+msgstr ""
+
+msgid "Overpass server: "
+msgstr ""
+
+msgid "Overpass server"
+msgstr ""
+
 msgid "Proxy settings"
 msgstr ""
 
@@ -13800,6 +13839,9 @@ msgstr ""
 msgid "reserved"
 msgstr ""
 
+msgid "Unable to delete old preferences file {0}"
+msgstr ""
+
 msgid "Outdated Java version"
 msgstr ""
 
@@ -13891,6 +13933,9 @@ msgid ""
 "contain any JOSM object or suitable text. </p></html>"
 msgstr ""
 
+msgid "Unable to delete file {0}"
+msgstr ""
+
 msgid "ms"
 msgstr ""
 
@@ -17006,6 +17051,9 @@ msgstr ""
 msgid "Tourist buses"
 msgstr ""
 
+msgid "Max. speed Heavy Goods Vehicles (km/h)"
+msgstr ""
+
 msgid "Min. speed (km/h)"
 msgstr "Lámarkshraði (km/klst)"
 
@@ -19303,12 +19351,6 @@ msgstr ""
 msgid "Dentist"
 msgstr "Tannlæknir"
 
-msgid "Nursing Home"
-msgstr ""
-
-msgid "Retirement Home"
-msgstr ""
-
 msgid "Pharmacy"
 msgstr "Apótek"
 
@@ -19336,6 +19378,31 @@ msgstr ""
 msgid "Veterinary"
 msgstr "Dýralæknir"
 
+msgid "Social Facility"
+msgstr ""
+
+msgid "Nursing Home"
+msgstr ""
+
+msgid "Group Home"
+msgstr ""
+
+msgid "For"
+msgstr ""
+
+msgid "Assisted Living"
+msgstr ""
+
+msgid "Outreach"
+msgstr ""
+
+msgctxt "social_facility"
+msgid "Shelter"
+msgstr ""
+
+msgid "Food Bank"
+msgstr ""
+
 msgid "Toilets/Restrooms"
 msgstr ""
 
@@ -19378,6 +19445,13 @@ msgstr ""
 msgid "urinal"
 msgstr ""
 
+msgctxt "toilets"
+msgid "Diaper"
+msgstr ""
+
+msgid "room"
+msgstr ""
+
 msgid "Post Box"
 msgstr "Póstkassi"
 
@@ -23415,25 +23489,25 @@ msgstr "Sækja Slóð ..."
 msgid "Download GPX track from openstreetmap.org"
 msgstr "Sækja GPX slóð frá openstreetmap.org"
 
+msgid "Download Track"
+msgstr "Sækja slóð"
+
+msgid "Filename"
+msgstr "Skráarnafn"
+
 msgid ""
 "Error occurred while parsing gpx file {0}. Only a part of the file will be "
 "available."
 msgstr ""
 
-msgid "Invalid URL {0}"
-msgstr ""
-
 msgid "Error fetching URL {0}"
 msgstr ""
 
 msgid "Error parsing data from URL {0}"
 msgstr ""
 
-msgid "Download Track"
-msgstr "Sækja slóð"
-
-msgid "Filename"
-msgstr "Skráarnafn"
+msgid "Invalid URL {0}"
+msgstr ""
 
 msgid "Private (only shared as anonymous, unordered points)"
 msgstr ""
@@ -23482,9 +23556,6 @@ msgstr ""
 msgid "Uploading trace ..."
 msgstr ""
 
-msgid "Connecting..."
-msgstr ""
-
 msgid "Upload canceled"
 msgstr ""
 
@@ -27923,6 +27994,69 @@ msgstr ""
 msgid "Please load some photos."
 msgstr ""
 
+msgid "Edit photo GPS data"
+msgstr ""
+
+msgid "Edit GPS data of selected photo."
+msgstr ""
+
+msgid "Edit Photo GPS Data"
+msgstr ""
+
+msgid "Please select an image first."
+msgstr ""
+
+msgid "No image selected"
+msgstr ""
+
+msgid "(Empty values delete the according fields.)"
+msgstr ""
+
+msgid "coordinates"
+msgstr ""
+
+msgid "Latitude and longitude"
+msgstr ""
+
+msgid "Edit Image Coordinates"
+msgstr ""
+
+msgid "Edit coordinates in separate editor"
+msgstr ""
+
+msgid "altitude"
+msgstr ""
+
+msgid "Altitude:"
+msgstr ""
+
+msgid "speed"
+msgstr ""
+
+msgid "positive number or empty"
+msgstr ""
+
+msgid "Speed:"
+msgstr ""
+
+msgid "direction"
+msgstr ""
+
+msgid "range -360.0 .. 360.0, or empty"
+msgstr ""
+
+msgid "Direction:"
+msgstr ""
+
+msgid "°"
+msgstr ""
+
+msgid "Undo changes made in this dialog"
+msgstr ""
+
+msgid "Reload GPS data from image file"
+msgstr ""
+
 msgid "New layer for untagged images"
 msgstr ""
 
@@ -30939,9 +31073,6 @@ msgstr ""
 msgid "Fetches all coordinates from Wikipedia in the current view"
 msgstr ""
 
-msgid "coordinates"
-msgstr ""
-
 msgid "Category"
 msgstr ""
 
diff --git a/i18n/po/it.po b/i18n/po/it.po
index fe31875..db34e32 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: 2015-12-31 03:40+0100\n"
+"POT-Creation-Date: 2016-01-06 03:38+0100\n"
 "PO-Revision-Date: 2015-09-21 07:50+0000\n"
 "Last-Translator: Don-vip <Unknown>\n"
 "Language-Team: Italian <talk-it at lists.openstreetmap.org>\n"
@@ -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: 2015-12-31 04:48+0000\n"
-"X-Generator: Launchpad (build 17865)\n"
+"X-Launchpad-Export-Date: 2016-01-06 04:48+0000\n"
+"X-Generator: Launchpad (build 17876)\n"
 "Language: it\n"
 "X-Language: it_IT\n"
 "X-Source-Language: en\n"
@@ -1161,9 +1161,6 @@ msgstr "Errore di analisi"
 msgid "Overpass query: "
 msgstr "Interrogazione Overpass: "
 
-msgid "Overpass server: "
-msgstr "Server Overpass: "
-
 msgid "Paste"
 msgstr "Incolla"
 
@@ -1472,6 +1469,9 @@ msgstr "Dividi percorso"
 msgid "Split a way at the selected node."
 msgstr "Divide un percorso in corrispondenza del nodo selezionato."
 
+msgid "Cannot split since another split operation is already in progress"
+msgstr ""
+
 msgid ""
 "The current selection cannot be used for splitting - no node is selected."
 msgstr ""
@@ -1605,6 +1605,27 @@ msgstr ""
 "avranno la propria copia\n"
 "e tutti i nodi saranno selezionati."
 
+msgid "Existing node"
+msgstr ""
+
+msgid "Both nodes"
+msgstr ""
+
+msgid "New node"
+msgstr ""
+
+msgid "Tags / Memberships"
+msgstr "Etichette / Appartenenze"
+
+msgid "Unglue"
+msgstr ""
+
+msgid "Where should the tags of the node be put?"
+msgstr ""
+
+msgid "Where should the memberships of this node be put?"
+msgstr ""
+
 msgid "Unglued Node"
 msgstr "Nodo staccato"
 
@@ -3374,6 +3395,15 @@ msgstr "Il proprio lavoro è stato salvato automaticamente."
 msgid "Restoring files"
 msgstr "Ripristino dei file in corso"
 
+msgid "Unable to delete backup file {0}"
+msgstr ""
+
+msgid "Unable to delete PID file {0}"
+msgstr ""
+
+msgid "Unable to delete archived backup file {0}"
+msgstr ""
+
 msgid "Illegal latitude value ''{0}''"
 msgstr "Valore ''''{0}'''' non valido per la latitudine"
 
@@ -4660,6 +4690,9 @@ msgstr "Nessun percorso \"from\" trovato"
 msgid "No \"to\" way found"
 msgstr "Nessun percorso \"to\" trovato"
 
+msgid "\"from\" way equals \"to\" way"
+msgstr ""
+
 msgid "No \"via\" node or way found"
 msgstr "Nessun nodo o percorso \"via\" trovato"
 
@@ -7755,9 +7788,6 @@ msgstr "Oggetti: {2} / Etichette: {0} / Appartenenze: {1}"
 msgid "Tags: {0} / Memberships: {1}"
 msgstr "Etichette: {0} / Appartenenze: {1}"
 
-msgid "Tags / Memberships"
-msgstr "Etichette / Appartenenze"
-
 msgid "Delete the selected key in all objects"
 msgstr "Cancella la chiave selezionata in tutti gli oggetti"
 
@@ -13062,6 +13092,15 @@ msgstr "Il valore corrente non è un indirizzo URL valido"
 msgid "Please enter the OSM API URL."
 msgstr "Si prega di inserire l’indirizzo URL delle API di OSM."
 
+msgid "Use Overpass server for object downloads"
+msgstr ""
+
+msgid "Overpass server: "
+msgstr "Server Overpass: "
+
+msgid "Overpass server"
+msgstr ""
+
 msgid "Proxy settings"
 msgstr "Impostazioni proxy"
 
@@ -15627,6 +15666,9 @@ msgstr "L''indirizzo URL non contiene un valido {0}"
 msgid "reserved"
 msgstr "riservato"
 
+msgid "Unable to delete old preferences file {0}"
+msgstr ""
+
 msgid "Outdated Java version"
 msgstr "Versione Java obsoleta"
 
@@ -15738,6 +15780,9 @@ msgstr ""
 "<html><p> Spiacenti, non è possibile incollare le etichette dal buffer. Non "
 "contiene alcun oggetto JOSM o testo adatto. </p></html>"
 
+msgid "Unable to delete file {0}"
+msgstr ""
+
 msgid "ms"
 msgstr "ms"
 
@@ -19022,6 +19067,9 @@ msgstr "Veicoli del servizio pubblico"
 msgid "Tourist buses"
 msgstr "Autobus turistici"
 
+msgid "Max. speed Heavy Goods Vehicles (km/h)"
+msgstr ""
+
 msgid "Min. speed (km/h)"
 msgstr "Velocità minima (km/h)"
 
@@ -21349,12 +21397,6 @@ msgstr "Consultorio"
 msgid "Dentist"
 msgstr "Dentista"
 
-msgid "Nursing Home"
-msgstr "Struttura di assistenza continua (casa di riposo...)"
-
-msgid "Retirement Home"
-msgstr "Casa di riposo"
-
 msgid "Pharmacy"
 msgstr "Farmacia"
 
@@ -21382,6 +21424,31 @@ msgstr "(Usare prefisso internazionale, es. +12-345-67890)"
 msgid "Veterinary"
 msgstr "Veterinario"
 
+msgid "Social Facility"
+msgstr ""
+
+msgid "Nursing Home"
+msgstr "Struttura di assistenza continua (casa di riposo...)"
+
+msgid "Group Home"
+msgstr ""
+
+msgid "For"
+msgstr ""
+
+msgid "Assisted Living"
+msgstr ""
+
+msgid "Outreach"
+msgstr ""
+
+msgctxt "social_facility"
+msgid "Shelter"
+msgstr ""
+
+msgid "Food Bank"
+msgstr ""
+
 msgid "Toilets/Restrooms"
 msgstr "Bagni"
 
@@ -21424,6 +21491,13 @@ msgstr "accovacciata"
 msgid "urinal"
 msgstr "orinatoio"
 
+msgctxt "toilets"
+msgid "Diaper"
+msgstr ""
+
+msgid "room"
+msgstr ""
+
 msgid "Post Box"
 msgstr "Cassetta Postale"
 
@@ -25513,6 +25587,12 @@ msgstr "Scarica tracciato ..."
 msgid "Download GPX track from openstreetmap.org"
 msgstr "Scarica un tracciato GPX da openstreetmap.org"
 
+msgid "Download Track"
+msgstr "Scarica tracciato"
+
+msgid "Filename"
+msgstr "Nome del file"
+
 msgid ""
 "Error occurred while parsing gpx file {0}. Only a part of the file will be "
 "available."
@@ -25520,9 +25600,6 @@ msgstr ""
 "È stato generato un errore durante l''analisi del file gpx {0}. Sarà "
 "disponibile soltanto una parte del file."
 
-msgid "Invalid URL {0}"
-msgstr "Indirizzo URL {0} non valido"
-
 msgid "Error fetching URL {0}"
 msgstr "Errore durante il prelevamento dell''indirizzo URL {0}"
 
@@ -25530,11 +25607,8 @@ msgid "Error parsing data from URL {0}"
 msgstr ""
 "Errore durante l''analisi dei dati provenienti dall''indirizzo URL {0}"
 
-msgid "Download Track"
-msgstr "Scarica tracciato"
-
-msgid "Filename"
-msgstr "Nome del file"
+msgid "Invalid URL {0}"
+msgstr "Indirizzo URL {0} non valido"
 
 msgid "Private (only shared as anonymous, unordered points)"
 msgstr "Privato (condiviso solo come punti anonimi, non ordinati)"
@@ -25590,9 +25664,6 @@ msgstr "Nessun livello GPX selezionato. Impossibile caricare un tracciato."
 msgid "Uploading trace ..."
 msgstr "Caricamento tracciato in corso ..."
 
-msgid "Connecting..."
-msgstr "Connessione in corso..."
-
 msgid "Upload canceled"
 msgstr "Caricamento annullato"
 
@@ -30471,6 +30542,69 @@ msgstr ""
 msgid "Please load some photos."
 msgstr "Si prega di caricare alcune foto."
 
+msgid "Edit photo GPS data"
+msgstr ""
+
+msgid "Edit GPS data of selected photo."
+msgstr ""
+
+msgid "Edit Photo GPS Data"
+msgstr ""
+
+msgid "Please select an image first."
+msgstr ""
+
+msgid "No image selected"
+msgstr ""
+
+msgid "(Empty values delete the according fields.)"
+msgstr ""
+
+msgid "coordinates"
+msgstr "coordinate"
+
+msgid "Latitude and longitude"
+msgstr ""
+
+msgid "Edit Image Coordinates"
+msgstr ""
+
+msgid "Edit coordinates in separate editor"
+msgstr ""
+
+msgid "altitude"
+msgstr ""
+
+msgid "Altitude:"
+msgstr ""
+
+msgid "speed"
+msgstr ""
+
+msgid "positive number or empty"
+msgstr ""
+
+msgid "Speed:"
+msgstr ""
+
+msgid "direction"
+msgstr ""
+
+msgid "range -360.0 .. 360.0, or empty"
+msgstr ""
+
+msgid "Direction:"
+msgstr ""
+
+msgid "°"
+msgstr ""
+
+msgid "Undo changes made in this dialog"
+msgstr ""
+
+msgid "Reload GPS data from image file"
+msgstr ""
+
 msgid "New layer for untagged images"
 msgstr "Nuovo livello per immagini non etichettate"
 
@@ -33821,9 +33955,6 @@ msgstr ""
 "Ottiene tutte le coordinate da Wikipedia relative alla visualizzazione "
 "corrente"
 
-msgid "coordinates"
-msgstr "coordinate"
-
 msgid "Category"
 msgstr "Categoria"
 
@@ -33869,3 +34000,6 @@ msgstr "Inizia a guidare"
 
 msgid "Drive a race car on this layer"
 msgstr "Guida una macchina da corsa su questo livello"
+
+#~ msgid "Retirement Home"
+#~ msgstr "Casa di riposo"
diff --git a/i18n/po/ja.po b/i18n/po/ja.po
index a906617..41c8b4b 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: 2015-12-31 03:40+0100\n"
+"POT-Creation-Date: 2016-01-06 03:38+0100\n"
 "PO-Revision-Date: 2015-12-23 12:34+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: 2015-12-31 04:49+0000\n"
-"X-Generator: Launchpad (build 17865)\n"
+"X-Launchpad-Export-Date: 2016-01-06 04:48+0000\n"
+"X-Generator: Launchpad (build 17876)\n"
 "X-Poedit-Country: JAPAN\n"
 "Language: ja\n"
 "X-Poedit-Language: Japanese\n"
@@ -1075,9 +1075,6 @@ msgstr "解釈エラー"
 msgid "Overpass query: "
 msgstr "Overpassのクエリー: "
 
-msgid "Overpass server: "
-msgstr "Overpass サーバー: "
-
 msgid "Paste"
 msgstr "貼り付け"
 
@@ -1366,6 +1363,9 @@ msgstr "ウェイを分割"
 msgid "Split a way at the selected node."
 msgstr "選択したノードでウェイを分割"
 
+msgid "Cannot split since another split operation is already in progress"
+msgstr ""
+
 msgid ""
 "The current selection cannot be used for splitting - no node is selected."
 msgstr "現在の選択は分割に使えません - ノードが選択されていません。"
@@ -1477,6 +1477,27 @@ msgstr ""
 "そして新しいノードが選択状態になります。そうでなければ、全てのウェイの自身の\n"
 "コピーが作られ、全てのノードが選択状態になります。"
 
+msgid "Existing node"
+msgstr ""
+
+msgid "Both nodes"
+msgstr ""
+
+msgid "New node"
+msgstr ""
+
+msgid "Tags / Memberships"
+msgstr "タグ/所属"
+
+msgid "Unglue"
+msgstr ""
+
+msgid "Where should the tags of the node be put?"
+msgstr ""
+
+msgid "Where should the memberships of this node be put?"
+msgstr ""
+
 msgid "Unglued Node"
 msgstr "ノードを引き離す"
 
@@ -3077,6 +3098,15 @@ msgstr "作業内容が自動的に保存されました。"
 msgid "Restoring files"
 msgstr "ファイルを復元中"
 
+msgid "Unable to delete backup file {0}"
+msgstr ""
+
+msgid "Unable to delete PID file {0}"
+msgstr ""
+
+msgid "Unable to delete archived backup file {0}"
+msgstr ""
+
 msgid "Illegal latitude value ''{0}''"
 msgstr "誤った緯度の値 ''{0}''"
 
@@ -4245,6 +4275,9 @@ msgstr "\"from\" ウェイが見つかりません"
 msgid "No \"to\" way found"
 msgstr "\"to\" ウェイが見つかりません"
 
+msgid "\"from\" way equals \"to\" way"
+msgstr ""
+
 msgid "No \"via\" node or way found"
 msgstr "\"via\" ノードまたはウェイが見つかりません"
 
@@ -7065,9 +7098,6 @@ msgstr "オブジェクト: {2}件/タグ: {0}件/メンバーシップ: {1}件"
 msgid "Tags: {0} / Memberships: {1}"
 msgstr "タグ: {0}件/所属: {1}件"
 
-msgid "Tags / Memberships"
-msgstr "タグ/所属"
-
 msgid "Delete the selected key in all objects"
 msgstr "すべてのオブジェクトの選択したキーの削除"
 
@@ -11819,6 +11849,15 @@ msgstr "現在の値は正しいURLではありません"
 msgid "Please enter the OSM API URL."
 msgstr "OSM API URLを入力してください。"
 
+msgid "Use Overpass server for object downloads"
+msgstr ""
+
+msgid "Overpass server: "
+msgstr "Overpass サーバー: "
+
+msgid "Overpass server"
+msgstr ""
+
 msgid "Proxy settings"
 msgstr "プロキシ設定"
 
@@ -14029,6 +14068,9 @@ msgstr "URLが有効な{0}を含んでいません"
 msgid "reserved"
 msgstr "予約"
 
+msgid "Unable to delete old preferences file {0}"
+msgstr ""
+
 msgid "Outdated Java version"
 msgstr "Javaのバージョンが期限切れ"
 
@@ -14127,6 +14169,9 @@ msgstr ""
 "<html><p>恐れ入りますが、バッファからタグを貼り付けることができません。JOSMオブジェクトが含まれていないか、合う文字列がありません。</p><"
 "/html>"
 
+msgid "Unable to delete file {0}"
+msgstr ""
+
 msgid "ms"
 msgstr "ミリ秒"
 
@@ -17286,6 +17331,9 @@ msgstr "公共交通機関(psv)"
 msgid "Tourist buses"
 msgstr "観光バス"
 
+msgid "Max. speed Heavy Goods Vehicles (km/h)"
+msgstr ""
+
 msgid "Min. speed (km/h)"
 msgstr "最低速度(km/h)"
 
@@ -19585,12 +19633,6 @@ msgstr "医院"
 msgid "Dentist"
 msgstr "歯科医院"
 
-msgid "Nursing Home"
-msgstr "看護ステーション"
-
-msgid "Retirement Home"
-msgstr "老人ホーム"
-
 msgid "Pharmacy"
 msgstr "薬局"
 
@@ -19618,6 +19660,31 @@ msgstr "(+81-3-3345-6789のような国際で通用する電話番号を使っ
 msgid "Veterinary"
 msgstr "動物病院"
 
+msgid "Social Facility"
+msgstr ""
+
+msgid "Nursing Home"
+msgstr "看護ステーション"
+
+msgid "Group Home"
+msgstr ""
+
+msgid "For"
+msgstr ""
+
+msgid "Assisted Living"
+msgstr ""
+
+msgid "Outreach"
+msgstr ""
+
+msgctxt "social_facility"
+msgid "Shelter"
+msgstr ""
+
+msgid "Food Bank"
+msgstr ""
+
 msgid "Toilets/Restrooms"
 msgstr "トイレ"
 
@@ -19660,6 +19727,13 @@ msgstr "和式"
 msgid "urinal"
 msgstr "小便器"
 
+msgctxt "toilets"
+msgid "Diaper"
+msgstr ""
+
+msgid "room"
+msgstr ""
+
 msgid "Post Box"
 msgstr "郵便ポスト"
 
@@ -23701,25 +23775,25 @@ msgstr "トラックのダウンロード..."
 msgid "Download GPX track from openstreetmap.org"
 msgstr "openstreetmap.orgよりGPXトラックをダウンロード"
 
+msgid "Download Track"
+msgstr "トラックをダウンロード"
+
+msgid "Filename"
+msgstr "ファイル名"
+
 msgid ""
 "Error occurred while parsing gpx file {0}. Only a part of the file will be "
 "available."
 msgstr "gpxファイル {0} の処理中にエラーが発生しました。ファイルの一部のみが有効です。"
 
-msgid "Invalid URL {0}"
-msgstr "不正な URL {0}"
-
 msgid "Error fetching URL {0}"
 msgstr "URL {0} の取得に失敗"
 
 msgid "Error parsing data from URL {0}"
 msgstr "URL {0} からのデータの解釈中にエラーが発生しました"
 
-msgid "Download Track"
-msgstr "トラックをダウンロード"
-
-msgid "Filename"
-msgstr "ファイル名"
+msgid "Invalid URL {0}"
+msgstr "不正な URL {0}"
 
 msgid "Private (only shared as anonymous, unordered points)"
 msgstr "非公開(匿名、点は順不同)"
@@ -23768,9 +23842,6 @@ msgstr "GPXレイヤーが選択されていません。トレースのアップ
 msgid "Uploading trace ..."
 msgstr "トレースをアップロード中..."
 
-msgid "Connecting..."
-msgstr "接続中..."
-
 msgid "Upload canceled"
 msgstr "アップロードがキャンセルされました"
 
@@ -28380,6 +28451,69 @@ msgstr ""
 msgid "Please load some photos."
 msgstr "写真をロードしてください。"
 
+msgid "Edit photo GPS data"
+msgstr ""
+
+msgid "Edit GPS data of selected photo."
+msgstr ""
+
+msgid "Edit Photo GPS Data"
+msgstr ""
+
+msgid "Please select an image first."
+msgstr ""
+
+msgid "No image selected"
+msgstr ""
+
+msgid "(Empty values delete the according fields.)"
+msgstr ""
+
+msgid "coordinates"
+msgstr "座標"
+
+msgid "Latitude and longitude"
+msgstr ""
+
+msgid "Edit Image Coordinates"
+msgstr ""
+
+msgid "Edit coordinates in separate editor"
+msgstr ""
+
+msgid "altitude"
+msgstr ""
+
+msgid "Altitude:"
+msgstr ""
+
+msgid "speed"
+msgstr ""
+
+msgid "positive number or empty"
+msgstr ""
+
+msgid "Speed:"
+msgstr ""
+
+msgid "direction"
+msgstr ""
+
+msgid "range -360.0 .. 360.0, or empty"
+msgstr ""
+
+msgid "Direction:"
+msgstr ""
+
+msgid "°"
+msgstr ""
+
+msgid "Undo changes made in this dialog"
+msgstr ""
+
+msgid "Reload GPS data from image file"
+msgstr ""
+
 msgid "New layer for untagged images"
 msgstr "タグ付けされていない画像の新しいレイヤー"
 
@@ -31491,9 +31625,6 @@ msgstr "{0}.Wikipedia.org: {1}"
 msgid "Fetches all coordinates from Wikipedia in the current view"
 msgstr "現在のビューのすべての座標をWikipedia上で検索"
 
-msgid "coordinates"
-msgstr "座標"
-
 msgid "Category"
 msgstr "カテゴリ"
 
@@ -31537,3 +31668,6 @@ msgstr "ドライブに行く"
 
 msgid "Drive a race car on this layer"
 msgstr "このレイヤーでレースカーをドライブします。"
+
+#~ msgid "Retirement Home"
+#~ msgstr "老人ホーム"
diff --git a/i18n/po/ka.po b/i18n/po/ka.po
index c346fc8..9472f6d 100644
--- a/i18n/po/ka.po
+++ b/i18n/po/ka.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: josm\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-12-31 03:40+0100\n"
+"POT-Creation-Date: 2016-01-06 03:38+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: 2015-12-31 04:43+0000\n"
-"X-Generator: Launchpad (build 17865)\n"
+"X-Launchpad-Export-Date: 2016-01-06 04:41+0000\n"
+"X-Generator: Launchpad (build 17876)\n"
 "Language: ka\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -1061,9 +1061,6 @@ msgstr ""
 msgid "Overpass query: "
 msgstr ""
 
-msgid "Overpass server: "
-msgstr ""
-
 msgid "Paste"
 msgstr ""
 
@@ -1353,6 +1350,9 @@ msgstr ""
 msgid "Split a way at the selected node."
 msgstr ""
 
+msgid "Cannot split since another split operation is already in progress"
+msgstr ""
+
 msgid ""
 "The current selection cannot be used for splitting - no node is selected."
 msgstr ""
@@ -1464,6 +1464,27 @@ msgid ""
 "own copy and all nodes will be selected."
 msgstr ""
 
+msgid "Existing node"
+msgstr ""
+
+msgid "Both nodes"
+msgstr ""
+
+msgid "New node"
+msgstr ""
+
+msgid "Tags / Memberships"
+msgstr ""
+
+msgid "Unglue"
+msgstr ""
+
+msgid "Where should the tags of the node be put?"
+msgstr ""
+
+msgid "Where should the memberships of this node be put?"
+msgstr ""
+
 msgid "Unglued Node"
 msgstr ""
 
@@ -3054,6 +3075,15 @@ msgstr ""
 msgid "Restoring files"
 msgstr ""
 
+msgid "Unable to delete backup file {0}"
+msgstr ""
+
+msgid "Unable to delete PID file {0}"
+msgstr ""
+
+msgid "Unable to delete archived backup file {0}"
+msgstr ""
+
 msgid "Illegal latitude value ''{0}''"
 msgstr ""
 
@@ -4212,6 +4242,9 @@ msgstr ""
 msgid "No \"to\" way found"
 msgstr ""
 
+msgid "\"from\" way equals \"to\" way"
+msgstr ""
+
 msgid "No \"via\" node or way found"
 msgstr ""
 
@@ -7009,9 +7042,6 @@ msgstr ""
 msgid "Tags: {0} / Memberships: {1}"
 msgstr ""
 
-msgid "Tags / Memberships"
-msgstr ""
-
 msgid "Delete the selected key in all objects"
 msgstr ""
 
@@ -11616,6 +11646,15 @@ msgstr ""
 msgid "Please enter the OSM API URL."
 msgstr ""
 
+msgid "Use Overpass server for object downloads"
+msgstr ""
+
+msgid "Overpass server: "
+msgstr ""
+
+msgid "Overpass server"
+msgstr ""
+
 msgid "Proxy settings"
 msgstr ""
 
@@ -13754,6 +13793,9 @@ msgstr ""
 msgid "reserved"
 msgstr ""
 
+msgid "Unable to delete old preferences file {0}"
+msgstr ""
+
 msgid "Outdated Java version"
 msgstr ""
 
@@ -13845,6 +13887,9 @@ msgid ""
 "contain any JOSM object or suitable text. </p></html>"
 msgstr ""
 
+msgid "Unable to delete file {0}"
+msgstr ""
+
 msgid "ms"
 msgstr ""
 
@@ -16959,6 +17004,9 @@ msgstr ""
 msgid "Tourist buses"
 msgstr ""
 
+msgid "Max. speed Heavy Goods Vehicles (km/h)"
+msgstr ""
+
 msgid "Min. speed (km/h)"
 msgstr ""
 
@@ -19256,12 +19304,6 @@ msgstr ""
 msgid "Dentist"
 msgstr ""
 
-msgid "Nursing Home"
-msgstr ""
-
-msgid "Retirement Home"
-msgstr ""
-
 msgid "Pharmacy"
 msgstr ""
 
@@ -19289,6 +19331,31 @@ msgstr ""
 msgid "Veterinary"
 msgstr ""
 
+msgid "Social Facility"
+msgstr ""
+
+msgid "Nursing Home"
+msgstr ""
+
+msgid "Group Home"
+msgstr ""
+
+msgid "For"
+msgstr ""
+
+msgid "Assisted Living"
+msgstr ""
+
+msgid "Outreach"
+msgstr ""
+
+msgctxt "social_facility"
+msgid "Shelter"
+msgstr ""
+
+msgid "Food Bank"
+msgstr ""
+
 msgid "Toilets/Restrooms"
 msgstr ""
 
@@ -19331,6 +19398,13 @@ msgstr ""
 msgid "urinal"
 msgstr ""
 
+msgctxt "toilets"
+msgid "Diaper"
+msgstr ""
+
+msgid "room"
+msgstr ""
+
 msgid "Post Box"
 msgstr ""
 
@@ -23368,24 +23442,24 @@ msgstr ""
 msgid "Download GPX track from openstreetmap.org"
 msgstr ""
 
+msgid "Download Track"
+msgstr ""
+
+msgid "Filename"
+msgstr ""
+
 msgid ""
 "Error occurred while parsing gpx file {0}. Only a part of the file will be "
 "available."
 msgstr ""
 
-msgid "Invalid URL {0}"
-msgstr ""
-
 msgid "Error fetching URL {0}"
 msgstr ""
 
 msgid "Error parsing data from URL {0}"
 msgstr ""
 
-msgid "Download Track"
-msgstr ""
-
-msgid "Filename"
+msgid "Invalid URL {0}"
 msgstr ""
 
 msgid "Private (only shared as anonymous, unordered points)"
@@ -23435,9 +23509,6 @@ msgstr ""
 msgid "Uploading trace ..."
 msgstr ""
 
-msgid "Connecting..."
-msgstr ""
-
 msgid "Upload canceled"
 msgstr ""
 
@@ -27876,6 +27947,69 @@ msgstr ""
 msgid "Please load some photos."
 msgstr ""
 
+msgid "Edit photo GPS data"
+msgstr ""
+
+msgid "Edit GPS data of selected photo."
+msgstr ""
+
+msgid "Edit Photo GPS Data"
+msgstr ""
+
+msgid "Please select an image first."
+msgstr ""
+
+msgid "No image selected"
+msgstr ""
+
+msgid "(Empty values delete the according fields.)"
+msgstr ""
+
+msgid "coordinates"
+msgstr ""
+
+msgid "Latitude and longitude"
+msgstr ""
+
+msgid "Edit Image Coordinates"
+msgstr ""
+
+msgid "Edit coordinates in separate editor"
+msgstr ""
+
+msgid "altitude"
+msgstr ""
+
+msgid "Altitude:"
+msgstr ""
+
+msgid "speed"
+msgstr ""
+
+msgid "positive number or empty"
+msgstr ""
+
+msgid "Speed:"
+msgstr ""
+
+msgid "direction"
+msgstr ""
+
+msgid "range -360.0 .. 360.0, or empty"
+msgstr ""
+
+msgid "Direction:"
+msgstr ""
+
+msgid "°"
+msgstr ""
+
+msgid "Undo changes made in this dialog"
+msgstr ""
+
+msgid "Reload GPS data from image file"
+msgstr ""
+
 msgid "New layer for untagged images"
 msgstr ""
 
@@ -30892,9 +31026,6 @@ msgstr ""
 msgid "Fetches all coordinates from Wikipedia in the current view"
 msgstr ""
 
-msgid "coordinates"
-msgstr ""
-
 msgid "Category"
 msgstr ""
 
diff --git a/i18n/po/km.po b/i18n/po/km.po
index 8c0ea31..cdae781 100644
--- a/i18n/po/km.po
+++ b/i18n/po/km.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: josm\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-12-31 03:40+0100\n"
+"POT-Creation-Date: 2016-01-06 03:38+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: 2015-12-31 04:49+0000\n"
-"X-Generator: Launchpad (build 17865)\n"
+"X-Launchpad-Export-Date: 2016-01-06 04:49+0000\n"
+"X-Generator: Launchpad (build 17876)\n"
 "Language: \n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -1122,9 +1122,6 @@ msgstr ""
 msgid "Overpass query: "
 msgstr ""
 
-msgid "Overpass server: "
-msgstr ""
-
 msgid "Paste"
 msgstr "បិទ​ភ្ជាប់"
 
@@ -1428,6 +1425,9 @@ msgstr "បំបែក​ផ្លូវ"
 msgid "Split a way at the selected node."
 msgstr "បំបែក​ផ្លូវ​នៅ​តំណ​ដែល​បាន​ជ្រើស។"
 
+msgid "Cannot split since another split operation is already in progress"
+msgstr ""
+
 msgid ""
 "The current selection cannot be used for splitting - no node is selected."
 msgstr ""
@@ -1556,6 +1556,27 @@ msgstr ""
 "ផ្លូវ​ទាំងអស់\n"
 "នឹង​ទទួល​បាន​ច្បាប់​ចម្លង​ផ្ទាល់ខ្លួន​វា ហើយ​តំណ​ទាំងអស់​នឹង​ត្រូវ​បាន​ជ្រើស។"
 
+msgid "Existing node"
+msgstr ""
+
+msgid "Both nodes"
+msgstr ""
+
+msgid "New node"
+msgstr ""
+
+msgid "Tags / Memberships"
+msgstr "ស្លាក/សមាជិកភាព"
+
+msgid "Unglue"
+msgstr ""
+
+msgid "Where should the tags of the node be put?"
+msgstr ""
+
+msgid "Where should the memberships of this node be put?"
+msgstr ""
+
 msgid "Unglued Node"
 msgstr "តំណ​ដែល​បាន​ផ្ដាច់"
 
@@ -3230,6 +3251,15 @@ msgstr "ការងារ​របស់​អ្នក​ត្រូវ​ប
 msgid "Restoring files"
 msgstr "ការ​ស្ដារ​ឯកសារ"
 
+msgid "Unable to delete backup file {0}"
+msgstr ""
+
+msgid "Unable to delete PID file {0}"
+msgstr ""
+
+msgid "Unable to delete archived backup file {0}"
+msgstr ""
+
 msgid "Illegal latitude value ''{0}''"
 msgstr "តម្លៃ​រយៈទទឹង​មិន​ត្រឹមត្រូវ ''{0}''"
 
@@ -4473,6 +4503,9 @@ msgstr "រក​មិន​ឃើញ​ផ្លូវ \"មកពី\""
 msgid "No \"to\" way found"
 msgstr "រក​មិន​ឃើញ​ផ្លូវ \"ទៅកាន់\""
 
+msgid "\"from\" way equals \"to\" way"
+msgstr ""
+
 msgid "No \"via\" node or way found"
 msgstr "រក​មិន​ឃើញ​ផ្លូវ ឬ​តំណ \"កាត់​តាម\""
 
@@ -7477,9 +7510,6 @@ msgstr ""
 msgid "Tags: {0} / Memberships: {1}"
 msgstr "ស្លាក៖ {0} / សមាជិកភាព៖ {1}"
 
-msgid "Tags / Memberships"
-msgstr "ស្លាក/សមាជិកភាព"
-
 msgid "Delete the selected key in all objects"
 msgstr "លុប​ពាក្យ​គន្លឹះ​ដែល​ជ្រើស​ក្នុង​វត្ថុ​ទាំងអស់"
 
@@ -12613,6 +12643,15 @@ msgstr "តម្លៃ​បច្ចុប្បន្ន​មិនមែន
 msgid "Please enter the OSM API URL."
 msgstr "សូម​បញ្ចូល OSM API URL ។"
 
+msgid "Use Overpass server for object downloads"
+msgstr ""
+
+msgid "Overpass server: "
+msgstr ""
+
+msgid "Overpass server"
+msgstr ""
+
 msgid "Proxy settings"
 msgstr "ការកំណត់​ប្រូកស៊ី"
 
@@ -15074,6 +15113,9 @@ msgstr ""
 msgid "reserved"
 msgstr ""
 
+msgid "Unable to delete old preferences file {0}"
+msgstr ""
+
 msgid "Outdated Java version"
 msgstr "កំណែ Java ហួស​សម័យ"
 
@@ -15186,6 +15228,9 @@ msgstr ""
 "<html><p> សូមទោស មិន​អាច​បិទភ្ជាប់​ស្លាក​ពី​ទ្រនាប់។ វា​មិន​មាន​វត្ថុ JOSM "
 "ឬ​អត្ថបទ​សមរម្យ។ </p></html>"
 
+msgid "Unable to delete file {0}"
+msgstr ""
+
 msgid "ms"
 msgstr "មិល្លី​វិនាទី"
 
@@ -18413,6 +18458,9 @@ msgstr ""
 msgid "Tourist buses"
 msgstr ""
 
+msgid "Max. speed Heavy Goods Vehicles (km/h)"
+msgstr ""
+
 msgid "Min. speed (km/h)"
 msgstr ""
 
@@ -20710,12 +20758,6 @@ msgstr ""
 msgid "Dentist"
 msgstr ""
 
-msgid "Nursing Home"
-msgstr ""
-
-msgid "Retirement Home"
-msgstr ""
-
 msgid "Pharmacy"
 msgstr ""
 
@@ -20743,6 +20785,31 @@ msgstr ""
 msgid "Veterinary"
 msgstr ""
 
+msgid "Social Facility"
+msgstr ""
+
+msgid "Nursing Home"
+msgstr ""
+
+msgid "Group Home"
+msgstr ""
+
+msgid "For"
+msgstr ""
+
+msgid "Assisted Living"
+msgstr ""
+
+msgid "Outreach"
+msgstr ""
+
+msgctxt "social_facility"
+msgid "Shelter"
+msgstr ""
+
+msgid "Food Bank"
+msgstr ""
+
 msgid "Toilets/Restrooms"
 msgstr ""
 
@@ -20785,6 +20852,13 @@ msgstr ""
 msgid "urinal"
 msgstr ""
 
+msgctxt "toilets"
+msgid "Diaper"
+msgstr ""
+
+msgid "room"
+msgstr ""
+
 msgid "Post Box"
 msgstr ""
 
@@ -24822,24 +24896,24 @@ msgstr ""
 msgid "Download GPX track from openstreetmap.org"
 msgstr ""
 
+msgid "Download Track"
+msgstr ""
+
+msgid "Filename"
+msgstr ""
+
 msgid ""
 "Error occurred while parsing gpx file {0}. Only a part of the file will be "
 "available."
 msgstr ""
 
-msgid "Invalid URL {0}"
-msgstr ""
-
 msgid "Error fetching URL {0}"
 msgstr ""
 
 msgid "Error parsing data from URL {0}"
 msgstr ""
 
-msgid "Download Track"
-msgstr ""
-
-msgid "Filename"
+msgid "Invalid URL {0}"
 msgstr ""
 
 msgid "Private (only shared as anonymous, unordered points)"
@@ -24889,9 +24963,6 @@ msgstr ""
 msgid "Uploading trace ..."
 msgstr ""
 
-msgid "Connecting..."
-msgstr ""
-
 msgid "Upload canceled"
 msgstr ""
 
@@ -29330,6 +29401,69 @@ msgstr ""
 msgid "Please load some photos."
 msgstr ""
 
+msgid "Edit photo GPS data"
+msgstr ""
+
+msgid "Edit GPS data of selected photo."
+msgstr ""
+
+msgid "Edit Photo GPS Data"
+msgstr ""
+
+msgid "Please select an image first."
+msgstr ""
+
+msgid "No image selected"
+msgstr ""
+
+msgid "(Empty values delete the according fields.)"
+msgstr ""
+
+msgid "coordinates"
+msgstr ""
+
+msgid "Latitude and longitude"
+msgstr ""
+
+msgid "Edit Image Coordinates"
+msgstr ""
+
+msgid "Edit coordinates in separate editor"
+msgstr ""
+
+msgid "altitude"
+msgstr ""
+
+msgid "Altitude:"
+msgstr ""
+
+msgid "speed"
+msgstr ""
+
+msgid "positive number or empty"
+msgstr ""
+
+msgid "Speed:"
+msgstr ""
+
+msgid "direction"
+msgstr ""
+
+msgid "range -360.0 .. 360.0, or empty"
+msgstr ""
+
+msgid "Direction:"
+msgstr ""
+
+msgid "°"
+msgstr ""
+
+msgid "Undo changes made in this dialog"
+msgstr ""
+
+msgid "Reload GPS data from image file"
+msgstr ""
+
 msgid "New layer for untagged images"
 msgstr ""
 
@@ -32346,9 +32480,6 @@ msgstr "{0}.Wikipedia.org: {1}"
 msgid "Fetches all coordinates from Wikipedia in the current view"
 msgstr ""
 
-msgid "coordinates"
-msgstr ""
-
 msgid "Category"
 msgstr "ចំណាត់ថ្នាក់ក្រុម"
 
diff --git a/i18n/po/ko.po b/i18n/po/ko.po
index 92b2261..85458c5 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: 2015-12-31 03:40+0100\n"
+"POT-Creation-Date: 2016-01-06 03:38+0100\n"
 "PO-Revision-Date: 2015-12-17 12:48+0000\n"
 "Last-Translator: Myeongjin <aranet100 at gmail.com>\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: 2015-12-31 04:50+0000\n"
-"X-Generator: Launchpad (build 17865)\n"
+"X-Launchpad-Export-Date: 2016-01-06 04:50+0000\n"
+"X-Generator: Launchpad (build 17876)\n"
 "Language: ko\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -1052,9 +1052,6 @@ msgstr "구문 분석 오류"
 msgid "Overpass query: "
 msgstr ""
 
-msgid "Overpass server: "
-msgstr ""
-
 msgid "Paste"
 msgstr "붙여넣기"
 
@@ -1342,6 +1339,9 @@ msgstr "Way 쪼개기"
 msgid "Split a way at the selected node."
 msgstr "선택된 Node에서 Way를 쪼갭니다"
 
+msgid "Cannot split since another split operation is already in progress"
+msgstr ""
+
 msgid ""
 "The current selection cannot be used for splitting - no node is selected."
 msgstr ""
@@ -1451,6 +1451,27 @@ msgid ""
 "own copy and all nodes will be selected."
 msgstr ""
 
+msgid "Existing node"
+msgstr ""
+
+msgid "Both nodes"
+msgstr ""
+
+msgid "New node"
+msgstr ""
+
+msgid "Tags / Memberships"
+msgstr ""
+
+msgid "Unglue"
+msgstr ""
+
+msgid "Where should the tags of the node be put?"
+msgstr ""
+
+msgid "Where should the memberships of this node be put?"
+msgstr ""
+
 msgid "Unglued Node"
 msgstr "node 떼기"
 
@@ -3035,6 +3056,15 @@ msgstr ""
 msgid "Restoring files"
 msgstr ""
 
+msgid "Unable to delete backup file {0}"
+msgstr ""
+
+msgid "Unable to delete PID file {0}"
+msgstr ""
+
+msgid "Unable to delete archived backup file {0}"
+msgstr ""
+
 msgid "Illegal latitude value ''{0}''"
 msgstr ""
 
@@ -4191,6 +4221,9 @@ msgstr ""
 msgid "No \"to\" way found"
 msgstr ""
 
+msgid "\"from\" way equals \"to\" way"
+msgstr ""
+
 msgid "No \"via\" node or way found"
 msgstr ""
 
@@ -6987,9 +7020,6 @@ msgstr ""
 msgid "Tags: {0} / Memberships: {1}"
 msgstr ""
 
-msgid "Tags / Memberships"
-msgstr ""
-
 msgid "Delete the selected key in all objects"
 msgstr "모든 대상에서 선택된 key 지우기"
 
@@ -11599,6 +11629,15 @@ msgstr ""
 msgid "Please enter the OSM API URL."
 msgstr ""
 
+msgid "Use Overpass server for object downloads"
+msgstr ""
+
+msgid "Overpass server: "
+msgstr ""
+
+msgid "Overpass server"
+msgstr ""
+
 msgid "Proxy settings"
 msgstr ""
 
@@ -13737,6 +13776,9 @@ msgstr ""
 msgid "reserved"
 msgstr ""
 
+msgid "Unable to delete old preferences file {0}"
+msgstr ""
+
 msgid "Outdated Java version"
 msgstr ""
 
@@ -13828,6 +13870,9 @@ msgid ""
 "contain any JOSM object or suitable text. </p></html>"
 msgstr ""
 
+msgid "Unable to delete file {0}"
+msgstr ""
+
 msgid "ms"
 msgstr ""
 
@@ -16942,6 +16987,9 @@ msgstr ""
 msgid "Tourist buses"
 msgstr ""
 
+msgid "Max. speed Heavy Goods Vehicles (km/h)"
+msgstr ""
+
 msgid "Min. speed (km/h)"
 msgstr ""
 
@@ -19239,12 +19287,6 @@ msgstr ""
 msgid "Dentist"
 msgstr ""
 
-msgid "Nursing Home"
-msgstr ""
-
-msgid "Retirement Home"
-msgstr ""
-
 msgid "Pharmacy"
 msgstr ""
 
@@ -19272,6 +19314,31 @@ msgstr ""
 msgid "Veterinary"
 msgstr ""
 
+msgid "Social Facility"
+msgstr ""
+
+msgid "Nursing Home"
+msgstr ""
+
+msgid "Group Home"
+msgstr ""
+
+msgid "For"
+msgstr ""
+
+msgid "Assisted Living"
+msgstr ""
+
+msgid "Outreach"
+msgstr ""
+
+msgctxt "social_facility"
+msgid "Shelter"
+msgstr ""
+
+msgid "Food Bank"
+msgstr ""
+
 msgid "Toilets/Restrooms"
 msgstr ""
 
@@ -19314,6 +19381,13 @@ msgstr ""
 msgid "urinal"
 msgstr ""
 
+msgctxt "toilets"
+msgid "Diaper"
+msgstr ""
+
+msgid "room"
+msgstr ""
+
 msgid "Post Box"
 msgstr ""
 
@@ -23351,24 +23425,24 @@ msgstr ""
 msgid "Download GPX track from openstreetmap.org"
 msgstr ""
 
+msgid "Download Track"
+msgstr ""
+
+msgid "Filename"
+msgstr ""
+
 msgid ""
 "Error occurred while parsing gpx file {0}. Only a part of the file will be "
 "available."
 msgstr ""
 
-msgid "Invalid URL {0}"
-msgstr ""
-
 msgid "Error fetching URL {0}"
 msgstr ""
 
 msgid "Error parsing data from URL {0}"
 msgstr ""
 
-msgid "Download Track"
-msgstr ""
-
-msgid "Filename"
+msgid "Invalid URL {0}"
 msgstr ""
 
 msgid "Private (only shared as anonymous, unordered points)"
@@ -23418,9 +23492,6 @@ msgstr ""
 msgid "Uploading trace ..."
 msgstr ""
 
-msgid "Connecting..."
-msgstr ""
-
 msgid "Upload canceled"
 msgstr ""
 
@@ -27859,6 +27930,69 @@ msgstr ""
 msgid "Please load some photos."
 msgstr ""
 
+msgid "Edit photo GPS data"
+msgstr ""
+
+msgid "Edit GPS data of selected photo."
+msgstr ""
+
+msgid "Edit Photo GPS Data"
+msgstr ""
+
+msgid "Please select an image first."
+msgstr ""
+
+msgid "No image selected"
+msgstr ""
+
+msgid "(Empty values delete the according fields.)"
+msgstr ""
+
+msgid "coordinates"
+msgstr ""
+
+msgid "Latitude and longitude"
+msgstr ""
+
+msgid "Edit Image Coordinates"
+msgstr ""
+
+msgid "Edit coordinates in separate editor"
+msgstr ""
+
+msgid "altitude"
+msgstr ""
+
+msgid "Altitude:"
+msgstr ""
+
+msgid "speed"
+msgstr ""
+
+msgid "positive number or empty"
+msgstr ""
+
+msgid "Speed:"
+msgstr ""
+
+msgid "direction"
+msgstr ""
+
+msgid "range -360.0 .. 360.0, or empty"
+msgstr ""
+
+msgid "Direction:"
+msgstr ""
+
+msgid "°"
+msgstr ""
+
+msgid "Undo changes made in this dialog"
+msgstr ""
+
+msgid "Reload GPS data from image file"
+msgstr ""
+
 msgid "New layer for untagged images"
 msgstr ""
 
@@ -30874,9 +31008,6 @@ msgstr ""
 msgid "Fetches all coordinates from Wikipedia in the current view"
 msgstr "현재 보기에서"
 
-msgid "coordinates"
-msgstr ""
-
 msgid "Category"
 msgstr "분류"
 
diff --git a/i18n/po/ky.po b/i18n/po/ky.po
index 065bac2..05dfc1a 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: 2015-12-31 03:40+0100\n"
+"POT-Creation-Date: 2016-01-06 03:38+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: 2015-12-31 04:50+0000\n"
-"X-Generator: Launchpad (build 17865)\n"
+"X-Launchpad-Export-Date: 2016-01-06 04:50+0000\n"
+"X-Generator: Launchpad (build 17876)\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
 msgstr ""
@@ -1055,9 +1055,6 @@ msgstr ""
 msgid "Overpass query: "
 msgstr ""
 
-msgid "Overpass server: "
-msgstr ""
-
 msgid "Paste"
 msgstr ""
 
@@ -1347,6 +1344,9 @@ msgstr ""
 msgid "Split a way at the selected node."
 msgstr ""
 
+msgid "Cannot split since another split operation is already in progress"
+msgstr ""
+
 msgid ""
 "The current selection cannot be used for splitting - no node is selected."
 msgstr ""
@@ -1458,6 +1458,27 @@ msgid ""
 "own copy and all nodes will be selected."
 msgstr ""
 
+msgid "Existing node"
+msgstr ""
+
+msgid "Both nodes"
+msgstr ""
+
+msgid "New node"
+msgstr ""
+
+msgid "Tags / Memberships"
+msgstr ""
+
+msgid "Unglue"
+msgstr ""
+
+msgid "Where should the tags of the node be put?"
+msgstr ""
+
+msgid "Where should the memberships of this node be put?"
+msgstr ""
+
 msgid "Unglued Node"
 msgstr ""
 
@@ -3048,6 +3069,15 @@ msgstr ""
 msgid "Restoring files"
 msgstr ""
 
+msgid "Unable to delete backup file {0}"
+msgstr ""
+
+msgid "Unable to delete PID file {0}"
+msgstr ""
+
+msgid "Unable to delete archived backup file {0}"
+msgstr ""
+
 msgid "Illegal latitude value ''{0}''"
 msgstr ""
 
@@ -4206,6 +4236,9 @@ msgstr ""
 msgid "No \"to\" way found"
 msgstr ""
 
+msgid "\"from\" way equals \"to\" way"
+msgstr ""
+
 msgid "No \"via\" node or way found"
 msgstr ""
 
@@ -7003,9 +7036,6 @@ msgstr ""
 msgid "Tags: {0} / Memberships: {1}"
 msgstr ""
 
-msgid "Tags / Memberships"
-msgstr ""
-
 msgid "Delete the selected key in all objects"
 msgstr ""
 
@@ -11610,6 +11640,15 @@ msgstr ""
 msgid "Please enter the OSM API URL."
 msgstr ""
 
+msgid "Use Overpass server for object downloads"
+msgstr ""
+
+msgid "Overpass server: "
+msgstr ""
+
+msgid "Overpass server"
+msgstr ""
+
 msgid "Proxy settings"
 msgstr ""
 
@@ -13748,6 +13787,9 @@ msgstr ""
 msgid "reserved"
 msgstr ""
 
+msgid "Unable to delete old preferences file {0}"
+msgstr ""
+
 msgid "Outdated Java version"
 msgstr ""
 
@@ -13839,6 +13881,9 @@ msgid ""
 "contain any JOSM object or suitable text. </p></html>"
 msgstr ""
 
+msgid "Unable to delete file {0}"
+msgstr ""
+
 msgid "ms"
 msgstr ""
 
@@ -16953,6 +16998,9 @@ msgstr ""
 msgid "Tourist buses"
 msgstr ""
 
+msgid "Max. speed Heavy Goods Vehicles (km/h)"
+msgstr ""
+
 msgid "Min. speed (km/h)"
 msgstr ""
 
@@ -19250,12 +19298,6 @@ msgstr ""
 msgid "Dentist"
 msgstr ""
 
-msgid "Nursing Home"
-msgstr ""
-
-msgid "Retirement Home"
-msgstr ""
-
 msgid "Pharmacy"
 msgstr ""
 
@@ -19283,6 +19325,31 @@ msgstr ""
 msgid "Veterinary"
 msgstr ""
 
+msgid "Social Facility"
+msgstr ""
+
+msgid "Nursing Home"
+msgstr ""
+
+msgid "Group Home"
+msgstr ""
+
+msgid "For"
+msgstr ""
+
+msgid "Assisted Living"
+msgstr ""
+
+msgid "Outreach"
+msgstr ""
+
+msgctxt "social_facility"
+msgid "Shelter"
+msgstr ""
+
+msgid "Food Bank"
+msgstr ""
+
 msgid "Toilets/Restrooms"
 msgstr ""
 
@@ -19325,6 +19392,13 @@ msgstr ""
 msgid "urinal"
 msgstr ""
 
+msgctxt "toilets"
+msgid "Diaper"
+msgstr ""
+
+msgid "room"
+msgstr ""
+
 msgid "Post Box"
 msgstr ""
 
@@ -23362,24 +23436,24 @@ msgstr ""
 msgid "Download GPX track from openstreetmap.org"
 msgstr ""
 
+msgid "Download Track"
+msgstr ""
+
+msgid "Filename"
+msgstr ""
+
 msgid ""
 "Error occurred while parsing gpx file {0}. Only a part of the file will be "
 "available."
 msgstr ""
 
-msgid "Invalid URL {0}"
-msgstr ""
-
 msgid "Error fetching URL {0}"
 msgstr ""
 
 msgid "Error parsing data from URL {0}"
 msgstr ""
 
-msgid "Download Track"
-msgstr ""
-
-msgid "Filename"
+msgid "Invalid URL {0}"
 msgstr ""
 
 msgid "Private (only shared as anonymous, unordered points)"
@@ -23429,9 +23503,6 @@ msgstr ""
 msgid "Uploading trace ..."
 msgstr ""
 
-msgid "Connecting..."
-msgstr ""
-
 msgid "Upload canceled"
 msgstr ""
 
@@ -27870,6 +27941,69 @@ msgstr ""
 msgid "Please load some photos."
 msgstr ""
 
+msgid "Edit photo GPS data"
+msgstr ""
+
+msgid "Edit GPS data of selected photo."
+msgstr ""
+
+msgid "Edit Photo GPS Data"
+msgstr ""
+
+msgid "Please select an image first."
+msgstr ""
+
+msgid "No image selected"
+msgstr ""
+
+msgid "(Empty values delete the according fields.)"
+msgstr ""
+
+msgid "coordinates"
+msgstr ""
+
+msgid "Latitude and longitude"
+msgstr ""
+
+msgid "Edit Image Coordinates"
+msgstr ""
+
+msgid "Edit coordinates in separate editor"
+msgstr ""
+
+msgid "altitude"
+msgstr ""
+
+msgid "Altitude:"
+msgstr ""
+
+msgid "speed"
+msgstr ""
+
+msgid "positive number or empty"
+msgstr ""
+
+msgid "Speed:"
+msgstr ""
+
+msgid "direction"
+msgstr ""
+
+msgid "range -360.0 .. 360.0, or empty"
+msgstr ""
+
+msgid "Direction:"
+msgstr ""
+
+msgid "°"
+msgstr ""
+
+msgid "Undo changes made in this dialog"
+msgstr ""
+
+msgid "Reload GPS data from image file"
+msgstr ""
+
 msgid "New layer for untagged images"
 msgstr ""
 
@@ -30886,9 +31020,6 @@ msgstr ""
 msgid "Fetches all coordinates from Wikipedia in the current view"
 msgstr ""
 
-msgid "coordinates"
-msgstr ""
-
 msgid "Category"
 msgstr ""
 
diff --git a/i18n/po/lo.po b/i18n/po/lo.po
index f76469f..ed3440c 100644
--- a/i18n/po/lo.po
+++ b/i18n/po/lo.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: josm\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-12-31 03:40+0100\n"
+"POT-Creation-Date: 2016-01-06 03:38+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: 2015-12-31 04:50+0000\n"
-"X-Generator: Launchpad (build 17865)\n"
+"X-Launchpad-Export-Date: 2016-01-06 04:51+0000\n"
+"X-Generator: Launchpad (build 17876)\n"
 "Language: \n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -1056,9 +1056,6 @@ msgstr ""
 msgid "Overpass query: "
 msgstr ""
 
-msgid "Overpass server: "
-msgstr ""
-
 msgid "Paste"
 msgstr ""
 
@@ -1348,6 +1345,9 @@ msgstr ""
 msgid "Split a way at the selected node."
 msgstr ""
 
+msgid "Cannot split since another split operation is already in progress"
+msgstr ""
+
 msgid ""
 "The current selection cannot be used for splitting - no node is selected."
 msgstr ""
@@ -1459,6 +1459,27 @@ msgid ""
 "own copy and all nodes will be selected."
 msgstr ""
 
+msgid "Existing node"
+msgstr ""
+
+msgid "Both nodes"
+msgstr ""
+
+msgid "New node"
+msgstr ""
+
+msgid "Tags / Memberships"
+msgstr ""
+
+msgid "Unglue"
+msgstr ""
+
+msgid "Where should the tags of the node be put?"
+msgstr ""
+
+msgid "Where should the memberships of this node be put?"
+msgstr ""
+
 msgid "Unglued Node"
 msgstr ""
 
@@ -3049,6 +3070,15 @@ msgstr ""
 msgid "Restoring files"
 msgstr ""
 
+msgid "Unable to delete backup file {0}"
+msgstr ""
+
+msgid "Unable to delete PID file {0}"
+msgstr ""
+
+msgid "Unable to delete archived backup file {0}"
+msgstr ""
+
 msgid "Illegal latitude value ''{0}''"
 msgstr ""
 
@@ -4207,6 +4237,9 @@ msgstr ""
 msgid "No \"to\" way found"
 msgstr ""
 
+msgid "\"from\" way equals \"to\" way"
+msgstr ""
+
 msgid "No \"via\" node or way found"
 msgstr ""
 
@@ -7004,9 +7037,6 @@ msgstr ""
 msgid "Tags: {0} / Memberships: {1}"
 msgstr ""
 
-msgid "Tags / Memberships"
-msgstr ""
-
 msgid "Delete the selected key in all objects"
 msgstr ""
 
@@ -11611,6 +11641,15 @@ msgstr ""
 msgid "Please enter the OSM API URL."
 msgstr ""
 
+msgid "Use Overpass server for object downloads"
+msgstr ""
+
+msgid "Overpass server: "
+msgstr ""
+
+msgid "Overpass server"
+msgstr ""
+
 msgid "Proxy settings"
 msgstr ""
 
@@ -13749,6 +13788,9 @@ msgstr ""
 msgid "reserved"
 msgstr ""
 
+msgid "Unable to delete old preferences file {0}"
+msgstr ""
+
 msgid "Outdated Java version"
 msgstr ""
 
@@ -13840,6 +13882,9 @@ msgid ""
 "contain any JOSM object or suitable text. </p></html>"
 msgstr ""
 
+msgid "Unable to delete file {0}"
+msgstr ""
+
 msgid "ms"
 msgstr ""
 
@@ -16954,6 +16999,9 @@ msgstr ""
 msgid "Tourist buses"
 msgstr ""
 
+msgid "Max. speed Heavy Goods Vehicles (km/h)"
+msgstr ""
+
 msgid "Min. speed (km/h)"
 msgstr ""
 
@@ -19251,12 +19299,6 @@ msgstr ""
 msgid "Dentist"
 msgstr ""
 
-msgid "Nursing Home"
-msgstr ""
-
-msgid "Retirement Home"
-msgstr ""
-
 msgid "Pharmacy"
 msgstr ""
 
@@ -19284,6 +19326,31 @@ msgstr ""
 msgid "Veterinary"
 msgstr ""
 
+msgid "Social Facility"
+msgstr ""
+
+msgid "Nursing Home"
+msgstr ""
+
+msgid "Group Home"
+msgstr ""
+
+msgid "For"
+msgstr ""
+
+msgid "Assisted Living"
+msgstr ""
+
+msgid "Outreach"
+msgstr ""
+
+msgctxt "social_facility"
+msgid "Shelter"
+msgstr ""
+
+msgid "Food Bank"
+msgstr ""
+
 msgid "Toilets/Restrooms"
 msgstr ""
 
@@ -19326,6 +19393,13 @@ msgstr ""
 msgid "urinal"
 msgstr ""
 
+msgctxt "toilets"
+msgid "Diaper"
+msgstr ""
+
+msgid "room"
+msgstr ""
+
 msgid "Post Box"
 msgstr ""
 
@@ -23363,24 +23437,24 @@ msgstr ""
 msgid "Download GPX track from openstreetmap.org"
 msgstr ""
 
+msgid "Download Track"
+msgstr ""
+
+msgid "Filename"
+msgstr ""
+
 msgid ""
 "Error occurred while parsing gpx file {0}. Only a part of the file will be "
 "available."
 msgstr ""
 
-msgid "Invalid URL {0}"
-msgstr ""
-
 msgid "Error fetching URL {0}"
 msgstr ""
 
 msgid "Error parsing data from URL {0}"
 msgstr ""
 
-msgid "Download Track"
-msgstr ""
-
-msgid "Filename"
+msgid "Invalid URL {0}"
 msgstr ""
 
 msgid "Private (only shared as anonymous, unordered points)"
@@ -23430,9 +23504,6 @@ msgstr ""
 msgid "Uploading trace ..."
 msgstr ""
 
-msgid "Connecting..."
-msgstr ""
-
 msgid "Upload canceled"
 msgstr ""
 
@@ -27871,6 +27942,69 @@ msgstr ""
 msgid "Please load some photos."
 msgstr ""
 
+msgid "Edit photo GPS data"
+msgstr ""
+
+msgid "Edit GPS data of selected photo."
+msgstr ""
+
+msgid "Edit Photo GPS Data"
+msgstr ""
+
+msgid "Please select an image first."
+msgstr ""
+
+msgid "No image selected"
+msgstr ""
+
+msgid "(Empty values delete the according fields.)"
+msgstr ""
+
+msgid "coordinates"
+msgstr ""
+
+msgid "Latitude and longitude"
+msgstr ""
+
+msgid "Edit Image Coordinates"
+msgstr ""
+
+msgid "Edit coordinates in separate editor"
+msgstr ""
+
+msgid "altitude"
+msgstr ""
+
+msgid "Altitude:"
+msgstr ""
+
+msgid "speed"
+msgstr ""
+
+msgid "positive number or empty"
+msgstr ""
+
+msgid "Speed:"
+msgstr ""
+
+msgid "direction"
+msgstr ""
+
+msgid "range -360.0 .. 360.0, or empty"
+msgstr ""
+
+msgid "Direction:"
+msgstr ""
+
+msgid "°"
+msgstr ""
+
+msgid "Undo changes made in this dialog"
+msgstr ""
+
+msgid "Reload GPS data from image file"
+msgstr ""
+
 msgid "New layer for untagged images"
 msgstr ""
 
@@ -30887,9 +31021,6 @@ msgstr ""
 msgid "Fetches all coordinates from Wikipedia in the current view"
 msgstr ""
 
-msgid "coordinates"
-msgstr ""
-
 msgid "Category"
 msgstr ""
 
diff --git a/i18n/po/lt.po b/i18n/po/lt.po
index cf3d2c9..2f8dae6 100644
--- a/i18n/po/lt.po
+++ b/i18n/po/lt.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: josm\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-12-31 03:40+0100\n"
+"POT-Creation-Date: 2016-01-06 03:38+0100\n"
 "PO-Revision-Date: 2015-12-27 12:14+0000\n"
 "Last-Translator: Aurimas Fišeras <Unknown>\n"
 "Language-Team: Lithuanian <lt 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%100<10 || n%100>=20) ? 1 : 2;\n"
-"X-Launchpad-Export-Date: 2015-12-31 04:51+0000\n"
-"X-Generator: Launchpad (build 17865)\n"
+"X-Launchpad-Export-Date: 2016-01-06 04:52+0000\n"
+"X-Generator: Launchpad (build 17876)\n"
 "Language: lt\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -1140,9 +1140,6 @@ msgstr ""
 msgid "Overpass query: "
 msgstr "Overpass užklausa: "
 
-msgid "Overpass server: "
-msgstr "Overpass serveris: "
-
 msgid "Paste"
 msgstr "Įdėti"
 
@@ -1448,6 +1445,9 @@ msgstr "Perskirti kelius"
 msgid "Split a way at the selected node."
 msgstr "Perskirti kelią ties parinktu tašku."
 
+msgid "Cannot split since another split operation is already in progress"
+msgstr ""
+
 msgid ""
 "The current selection cannot be used for splitting - no node is selected."
 msgstr ""
@@ -1583,6 +1583,27 @@ msgstr ""
 "kopijas ir šie taškai bus pažymėti. Kitu atveju, visi keliai gaus savo\n"
 "kopijas ir visi taškai bus pažymėti."
 
+msgid "Existing node"
+msgstr ""
+
+msgid "Both nodes"
+msgstr ""
+
+msgid "New node"
+msgstr ""
+
+msgid "Tags / Memberships"
+msgstr "Žymos / narystės"
+
+msgid "Unglue"
+msgstr ""
+
+msgid "Where should the tags of the node be put?"
+msgstr ""
+
+msgid "Where should the memberships of this node be put?"
+msgstr ""
+
 msgid "Unglued Node"
 msgstr "Atjungtas taškas"
 
@@ -3342,6 +3363,15 @@ msgstr "Jūsų darbas buvo automatiškai įrašytas."
 msgid "Restoring files"
 msgstr "Atkuriami failai"
 
+msgid "Unable to delete backup file {0}"
+msgstr ""
+
+msgid "Unable to delete PID file {0}"
+msgstr ""
+
+msgid "Unable to delete archived backup file {0}"
+msgstr ""
+
 msgid "Illegal latitude value ''{0}''"
 msgstr "Netinkama platumos reikšmė „{0}“"
 
@@ -4577,6 +4607,9 @@ msgstr "Nerastas „from“ (iš) kelias"
 msgid "No \"to\" way found"
 msgstr "Nerastas „to“ (į) kelias"
 
+msgid "\"from\" way equals \"to\" way"
+msgstr ""
+
 msgid "No \"via\" node or way found"
 msgstr "Nerastas „via“ (per) taškas arba kelias"
 
@@ -7585,9 +7618,6 @@ msgstr "Objektai: {2} / Žymos: {0} / Narystės: {1}"
 msgid "Tags: {0} / Memberships: {1}"
 msgstr "Žymos: {0} / Narystės: {1}"
 
-msgid "Tags / Memberships"
-msgstr "Žymos / narystės"
-
 msgid "Delete the selected key in all objects"
 msgstr "Šalinti pažymėtą raktą visiems objektams"
 
@@ -12726,6 +12756,15 @@ msgstr "Dabartinė vertė nėra teisinga URL"
 msgid "Please enter the OSM API URL."
 msgstr "Prašome įvesti OSM API URL."
 
+msgid "Use Overpass server for object downloads"
+msgstr ""
+
+msgid "Overpass server: "
+msgstr "Overpass serveris: "
+
+msgid "Overpass server"
+msgstr ""
+
 msgid "Proxy settings"
 msgstr "Įgaliotojo serverio nuostatos"
 
@@ -15025,6 +15064,9 @@ msgstr "URL neturi galimo {0}"
 msgid "reserved"
 msgstr "rezervuota"
 
+msgid "Unable to delete old preferences file {0}"
+msgstr ""
+
 msgid "Outdated Java version"
 msgstr "Pasenusi Java versija"
 
@@ -15132,6 +15174,9 @@ msgstr ""
 "<html><p> Atsiprašome, neįmanoma įkelti žymų iš buferio. Jame nėra jokių "
 "JOSM objektų ar tinkamo teksto. </p></html>"
 
+msgid "Unable to delete file {0}"
+msgstr ""
+
 msgid "ms"
 msgstr "ms"
 
@@ -18274,6 +18319,9 @@ msgstr "Viešų paslaugų transportas (psv)"
 msgid "Tourist buses"
 msgstr ""
 
+msgid "Max. speed Heavy Goods Vehicles (km/h)"
+msgstr ""
+
 msgid "Min. speed (km/h)"
 msgstr "Ribotas Mažiausias greitis (km/h)"
 
@@ -20571,12 +20619,6 @@ msgstr "Gydytojo kabinetas"
 msgid "Dentist"
 msgstr "Dantistas"
 
-msgid "Nursing Home"
-msgstr "Slaugos namai"
-
-msgid "Retirement Home"
-msgstr "Senelių namai"
-
 msgid "Pharmacy"
 msgstr "Vaistinė"
 
@@ -20604,6 +20646,31 @@ msgstr ""
 msgid "Veterinary"
 msgstr "Veterinarija"
 
+msgid "Social Facility"
+msgstr ""
+
+msgid "Nursing Home"
+msgstr "Slaugos namai"
+
+msgid "Group Home"
+msgstr ""
+
+msgid "For"
+msgstr ""
+
+msgid "Assisted Living"
+msgstr ""
+
+msgid "Outreach"
+msgstr ""
+
+msgctxt "social_facility"
+msgid "Shelter"
+msgstr ""
+
+msgid "Food Bank"
+msgstr ""
+
 msgid "Toilets/Restrooms"
 msgstr "Tualetai/Tualeto kambariai"
 
@@ -20646,6 +20713,13 @@ msgstr ""
 msgid "urinal"
 msgstr ""
 
+msgctxt "toilets"
+msgid "Diaper"
+msgstr ""
+
+msgid "room"
+msgstr ""
+
 msgid "Post Box"
 msgstr "Pašto dėžutė"
 
@@ -24696,24 +24770,24 @@ msgstr ""
 msgid "Download GPX track from openstreetmap.org"
 msgstr ""
 
+msgid "Download Track"
+msgstr ""
+
+msgid "Filename"
+msgstr ""
+
 msgid ""
 "Error occurred while parsing gpx file {0}. Only a part of the file will be "
 "available."
 msgstr ""
 
-msgid "Invalid URL {0}"
-msgstr ""
-
 msgid "Error fetching URL {0}"
 msgstr "Klaida ištraukiant iš URL {0}"
 
 msgid "Error parsing data from URL {0}"
 msgstr ""
 
-msgid "Download Track"
-msgstr ""
-
-msgid "Filename"
+msgid "Invalid URL {0}"
 msgstr ""
 
 msgid "Private (only shared as anonymous, unordered points)"
@@ -24763,9 +24837,6 @@ msgstr ""
 msgid "Uploading trace ..."
 msgstr ""
 
-msgid "Connecting..."
-msgstr ""
-
 msgid "Upload canceled"
 msgstr ""
 
@@ -29255,6 +29326,69 @@ msgstr ""
 msgid "Please load some photos."
 msgstr ""
 
+msgid "Edit photo GPS data"
+msgstr ""
+
+msgid "Edit GPS data of selected photo."
+msgstr ""
+
+msgid "Edit Photo GPS Data"
+msgstr ""
+
+msgid "Please select an image first."
+msgstr ""
+
+msgid "No image selected"
+msgstr ""
+
+msgid "(Empty values delete the according fields.)"
+msgstr ""
+
+msgid "coordinates"
+msgstr "koordinatės"
+
+msgid "Latitude and longitude"
+msgstr ""
+
+msgid "Edit Image Coordinates"
+msgstr ""
+
+msgid "Edit coordinates in separate editor"
+msgstr ""
+
+msgid "altitude"
+msgstr ""
+
+msgid "Altitude:"
+msgstr ""
+
+msgid "speed"
+msgstr ""
+
+msgid "positive number or empty"
+msgstr ""
+
+msgid "Speed:"
+msgstr ""
+
+msgid "direction"
+msgstr ""
+
+msgid "range -360.0 .. 360.0, or empty"
+msgstr ""
+
+msgid "Direction:"
+msgstr ""
+
+msgid "°"
+msgstr ""
+
+msgid "Undo changes made in this dialog"
+msgstr ""
+
+msgid "Reload GPS data from image file"
+msgstr ""
+
 msgid "New layer for untagged images"
 msgstr ""
 
@@ -32304,9 +32438,6 @@ msgstr "{0}.Wikipedia.org: {1}"
 msgid "Fetches all coordinates from Wikipedia in the current view"
 msgstr "Gauna visas koordinates iš Vikipedijos dabartiniame rodinyje"
 
-msgid "coordinates"
-msgstr "koordinatės"
-
 msgid "Category"
 msgstr "Kategorija"
 
@@ -32351,3 +32482,6 @@ msgstr ""
 
 msgid "Drive a race car on this layer"
 msgstr ""
+
+#~ msgid "Retirement Home"
+#~ msgstr "Senelių namai"
diff --git a/i18n/po/lv.po b/i18n/po/lv.po
index 897c71d..9977e73 100644
--- a/i18n/po/lv.po
+++ b/i18n/po/lv.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: josm\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-12-31 03:40+0100\n"
+"POT-Creation-Date: 2016-01-06 03:38+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: 2015-12-31 04:51+0000\n"
-"X-Generator: Launchpad (build 17865)\n"
+"X-Launchpad-Export-Date: 2016-01-06 04:51+0000\n"
+"X-Generator: Launchpad (build 17876)\n"
 "Language: lv\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -1067,9 +1067,6 @@ msgstr ""
 msgid "Overpass query: "
 msgstr ""
 
-msgid "Overpass server: "
-msgstr ""
-
 msgid "Paste"
 msgstr "Ielīmēt"
 
@@ -1359,6 +1356,9 @@ msgstr ""
 msgid "Split a way at the selected node."
 msgstr ""
 
+msgid "Cannot split since another split operation is already in progress"
+msgstr ""
+
 msgid ""
 "The current selection cannot be used for splitting - no node is selected."
 msgstr ""
@@ -1470,6 +1470,27 @@ msgid ""
 "own copy and all nodes will be selected."
 msgstr ""
 
+msgid "Existing node"
+msgstr ""
+
+msgid "Both nodes"
+msgstr ""
+
+msgid "New node"
+msgstr ""
+
+msgid "Tags / Memberships"
+msgstr ""
+
+msgid "Unglue"
+msgstr ""
+
+msgid "Where should the tags of the node be put?"
+msgstr ""
+
+msgid "Where should the memberships of this node be put?"
+msgstr ""
+
 msgid "Unglued Node"
 msgstr ""
 
@@ -3060,6 +3081,15 @@ msgstr ""
 msgid "Restoring files"
 msgstr ""
 
+msgid "Unable to delete backup file {0}"
+msgstr ""
+
+msgid "Unable to delete PID file {0}"
+msgstr ""
+
+msgid "Unable to delete archived backup file {0}"
+msgstr ""
+
 msgid "Illegal latitude value ''{0}''"
 msgstr ""
 
@@ -4218,6 +4248,9 @@ msgstr ""
 msgid "No \"to\" way found"
 msgstr ""
 
+msgid "\"from\" way equals \"to\" way"
+msgstr ""
+
 msgid "No \"via\" node or way found"
 msgstr ""
 
@@ -7014,9 +7047,6 @@ msgstr ""
 msgid "Tags: {0} / Memberships: {1}"
 msgstr ""
 
-msgid "Tags / Memberships"
-msgstr ""
-
 msgid "Delete the selected key in all objects"
 msgstr ""
 
@@ -11621,6 +11651,15 @@ msgstr ""
 msgid "Please enter the OSM API URL."
 msgstr ""
 
+msgid "Use Overpass server for object downloads"
+msgstr ""
+
+msgid "Overpass server: "
+msgstr ""
+
+msgid "Overpass server"
+msgstr ""
+
 msgid "Proxy settings"
 msgstr ""
 
@@ -13763,6 +13802,9 @@ msgstr ""
 msgid "reserved"
 msgstr ""
 
+msgid "Unable to delete old preferences file {0}"
+msgstr ""
+
 msgid "Outdated Java version"
 msgstr ""
 
@@ -13854,6 +13896,9 @@ msgid ""
 "contain any JOSM object or suitable text. </p></html>"
 msgstr ""
 
+msgid "Unable to delete file {0}"
+msgstr ""
+
 msgid "ms"
 msgstr ""
 
@@ -16968,6 +17013,9 @@ msgstr ""
 msgid "Tourist buses"
 msgstr ""
 
+msgid "Max. speed Heavy Goods Vehicles (km/h)"
+msgstr ""
+
 msgid "Min. speed (km/h)"
 msgstr ""
 
@@ -19265,12 +19313,6 @@ msgstr ""
 msgid "Dentist"
 msgstr ""
 
-msgid "Nursing Home"
-msgstr ""
-
-msgid "Retirement Home"
-msgstr ""
-
 msgid "Pharmacy"
 msgstr ""
 
@@ -19298,6 +19340,31 @@ msgstr ""
 msgid "Veterinary"
 msgstr ""
 
+msgid "Social Facility"
+msgstr ""
+
+msgid "Nursing Home"
+msgstr ""
+
+msgid "Group Home"
+msgstr ""
+
+msgid "For"
+msgstr ""
+
+msgid "Assisted Living"
+msgstr ""
+
+msgid "Outreach"
+msgstr ""
+
+msgctxt "social_facility"
+msgid "Shelter"
+msgstr ""
+
+msgid "Food Bank"
+msgstr ""
+
 msgid "Toilets/Restrooms"
 msgstr ""
 
@@ -19340,6 +19407,13 @@ msgstr ""
 msgid "urinal"
 msgstr ""
 
+msgctxt "toilets"
+msgid "Diaper"
+msgstr ""
+
+msgid "room"
+msgstr ""
+
 msgid "Post Box"
 msgstr ""
 
@@ -23377,24 +23451,24 @@ msgstr ""
 msgid "Download GPX track from openstreetmap.org"
 msgstr ""
 
+msgid "Download Track"
+msgstr ""
+
+msgid "Filename"
+msgstr ""
+
 msgid ""
 "Error occurred while parsing gpx file {0}. Only a part of the file will be "
 "available."
 msgstr ""
 
-msgid "Invalid URL {0}"
-msgstr ""
-
 msgid "Error fetching URL {0}"
 msgstr ""
 
 msgid "Error parsing data from URL {0}"
 msgstr ""
 
-msgid "Download Track"
-msgstr ""
-
-msgid "Filename"
+msgid "Invalid URL {0}"
 msgstr ""
 
 msgid "Private (only shared as anonymous, unordered points)"
@@ -23444,9 +23518,6 @@ msgstr ""
 msgid "Uploading trace ..."
 msgstr ""
 
-msgid "Connecting..."
-msgstr ""
-
 msgid "Upload canceled"
 msgstr ""
 
@@ -27885,6 +27956,69 @@ msgstr ""
 msgid "Please load some photos."
 msgstr ""
 
+msgid "Edit photo GPS data"
+msgstr ""
+
+msgid "Edit GPS data of selected photo."
+msgstr ""
+
+msgid "Edit Photo GPS Data"
+msgstr ""
+
+msgid "Please select an image first."
+msgstr ""
+
+msgid "No image selected"
+msgstr ""
+
+msgid "(Empty values delete the according fields.)"
+msgstr ""
+
+msgid "coordinates"
+msgstr ""
+
+msgid "Latitude and longitude"
+msgstr ""
+
+msgid "Edit Image Coordinates"
+msgstr ""
+
+msgid "Edit coordinates in separate editor"
+msgstr ""
+
+msgid "altitude"
+msgstr ""
+
+msgid "Altitude:"
+msgstr ""
+
+msgid "speed"
+msgstr ""
+
+msgid "positive number or empty"
+msgstr ""
+
+msgid "Speed:"
+msgstr ""
+
+msgid "direction"
+msgstr ""
+
+msgid "range -360.0 .. 360.0, or empty"
+msgstr ""
+
+msgid "Direction:"
+msgstr ""
+
+msgid "°"
+msgstr ""
+
+msgid "Undo changes made in this dialog"
+msgstr ""
+
+msgid "Reload GPS data from image file"
+msgstr ""
+
 msgid "New layer for untagged images"
 msgstr ""
 
@@ -30901,9 +31035,6 @@ msgstr ""
 msgid "Fetches all coordinates from Wikipedia in the current view"
 msgstr ""
 
-msgid "coordinates"
-msgstr ""
-
 msgid "Category"
 msgstr ""
 
diff --git a/i18n/po/mk.po b/i18n/po/mk.po
index fcc4614..0fed136 100644
--- a/i18n/po/mk.po
+++ b/i18n/po/mk.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: josm\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-12-31 03:40+0100\n"
+"POT-Creation-Date: 2016-01-06 03:38+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: 2015-12-31 04:52+0000\n"
-"X-Generator: Launchpad (build 17865)\n"
+"X-Launchpad-Export-Date: 2016-01-06 04:52+0000\n"
+"X-Generator: Launchpad (build 17876)\n"
 "Language: mk\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -1059,9 +1059,6 @@ msgstr ""
 msgid "Overpass query: "
 msgstr ""
 
-msgid "Overpass server: "
-msgstr ""
-
 msgid "Paste"
 msgstr ""
 
@@ -1351,6 +1348,9 @@ msgstr ""
 msgid "Split a way at the selected node."
 msgstr ""
 
+msgid "Cannot split since another split operation is already in progress"
+msgstr ""
+
 msgid ""
 "The current selection cannot be used for splitting - no node is selected."
 msgstr ""
@@ -1462,6 +1462,27 @@ msgid ""
 "own copy and all nodes will be selected."
 msgstr ""
 
+msgid "Existing node"
+msgstr ""
+
+msgid "Both nodes"
+msgstr ""
+
+msgid "New node"
+msgstr ""
+
+msgid "Tags / Memberships"
+msgstr ""
+
+msgid "Unglue"
+msgstr ""
+
+msgid "Where should the tags of the node be put?"
+msgstr ""
+
+msgid "Where should the memberships of this node be put?"
+msgstr ""
+
 msgid "Unglued Node"
 msgstr ""
 
@@ -3052,6 +3073,15 @@ msgstr ""
 msgid "Restoring files"
 msgstr ""
 
+msgid "Unable to delete backup file {0}"
+msgstr ""
+
+msgid "Unable to delete PID file {0}"
+msgstr ""
+
+msgid "Unable to delete archived backup file {0}"
+msgstr ""
+
 msgid "Illegal latitude value ''{0}''"
 msgstr ""
 
@@ -4210,6 +4240,9 @@ msgstr ""
 msgid "No \"to\" way found"
 msgstr ""
 
+msgid "\"from\" way equals \"to\" way"
+msgstr ""
+
 msgid "No \"via\" node or way found"
 msgstr ""
 
@@ -7007,9 +7040,6 @@ msgstr ""
 msgid "Tags: {0} / Memberships: {1}"
 msgstr ""
 
-msgid "Tags / Memberships"
-msgstr ""
-
 msgid "Delete the selected key in all objects"
 msgstr ""
 
@@ -11615,6 +11645,15 @@ msgstr ""
 msgid "Please enter the OSM API URL."
 msgstr ""
 
+msgid "Use Overpass server for object downloads"
+msgstr ""
+
+msgid "Overpass server: "
+msgstr ""
+
+msgid "Overpass server"
+msgstr ""
+
 msgid "Proxy settings"
 msgstr ""
 
@@ -13753,6 +13792,9 @@ msgstr ""
 msgid "reserved"
 msgstr ""
 
+msgid "Unable to delete old preferences file {0}"
+msgstr ""
+
 msgid "Outdated Java version"
 msgstr ""
 
@@ -13844,6 +13886,9 @@ msgid ""
 "contain any JOSM object or suitable text. </p></html>"
 msgstr ""
 
+msgid "Unable to delete file {0}"
+msgstr ""
+
 msgid "ms"
 msgstr ""
 
@@ -16958,6 +17003,9 @@ msgstr ""
 msgid "Tourist buses"
 msgstr ""
 
+msgid "Max. speed Heavy Goods Vehicles (km/h)"
+msgstr ""
+
 msgid "Min. speed (km/h)"
 msgstr ""
 
@@ -19255,12 +19303,6 @@ msgstr ""
 msgid "Dentist"
 msgstr ""
 
-msgid "Nursing Home"
-msgstr ""
-
-msgid "Retirement Home"
-msgstr ""
-
 msgid "Pharmacy"
 msgstr ""
 
@@ -19288,6 +19330,31 @@ msgstr ""
 msgid "Veterinary"
 msgstr ""
 
+msgid "Social Facility"
+msgstr ""
+
+msgid "Nursing Home"
+msgstr ""
+
+msgid "Group Home"
+msgstr ""
+
+msgid "For"
+msgstr ""
+
+msgid "Assisted Living"
+msgstr ""
+
+msgid "Outreach"
+msgstr ""
+
+msgctxt "social_facility"
+msgid "Shelter"
+msgstr ""
+
+msgid "Food Bank"
+msgstr ""
+
 msgid "Toilets/Restrooms"
 msgstr ""
 
@@ -19330,6 +19397,13 @@ msgstr ""
 msgid "urinal"
 msgstr ""
 
+msgctxt "toilets"
+msgid "Diaper"
+msgstr ""
+
+msgid "room"
+msgstr ""
+
 msgid "Post Box"
 msgstr ""
 
@@ -23367,24 +23441,24 @@ msgstr ""
 msgid "Download GPX track from openstreetmap.org"
 msgstr ""
 
+msgid "Download Track"
+msgstr ""
+
+msgid "Filename"
+msgstr ""
+
 msgid ""
 "Error occurred while parsing gpx file {0}. Only a part of the file will be "
 "available."
 msgstr ""
 
-msgid "Invalid URL {0}"
-msgstr ""
-
 msgid "Error fetching URL {0}"
 msgstr ""
 
 msgid "Error parsing data from URL {0}"
 msgstr ""
 
-msgid "Download Track"
-msgstr ""
-
-msgid "Filename"
+msgid "Invalid URL {0}"
 msgstr ""
 
 msgid "Private (only shared as anonymous, unordered points)"
@@ -23434,9 +23508,6 @@ msgstr ""
 msgid "Uploading trace ..."
 msgstr ""
 
-msgid "Connecting..."
-msgstr ""
-
 msgid "Upload canceled"
 msgstr ""
 
@@ -27875,6 +27946,69 @@ msgstr ""
 msgid "Please load some photos."
 msgstr ""
 
+msgid "Edit photo GPS data"
+msgstr ""
+
+msgid "Edit GPS data of selected photo."
+msgstr ""
+
+msgid "Edit Photo GPS Data"
+msgstr ""
+
+msgid "Please select an image first."
+msgstr ""
+
+msgid "No image selected"
+msgstr ""
+
+msgid "(Empty values delete the according fields.)"
+msgstr ""
+
+msgid "coordinates"
+msgstr ""
+
+msgid "Latitude and longitude"
+msgstr ""
+
+msgid "Edit Image Coordinates"
+msgstr ""
+
+msgid "Edit coordinates in separate editor"
+msgstr ""
+
+msgid "altitude"
+msgstr ""
+
+msgid "Altitude:"
+msgstr ""
+
+msgid "speed"
+msgstr ""
+
+msgid "positive number or empty"
+msgstr ""
+
+msgid "Speed:"
+msgstr ""
+
+msgid "direction"
+msgstr ""
+
+msgid "range -360.0 .. 360.0, or empty"
+msgstr ""
+
+msgid "Direction:"
+msgstr ""
+
+msgid "°"
+msgstr ""
+
+msgid "Undo changes made in this dialog"
+msgstr ""
+
+msgid "Reload GPS data from image file"
+msgstr ""
+
 msgid "New layer for untagged images"
 msgstr ""
 
@@ -30891,9 +31025,6 @@ msgstr ""
 msgid "Fetches all coordinates from Wikipedia in the current view"
 msgstr ""
 
-msgid "coordinates"
-msgstr ""
-
 msgid "Category"
 msgstr ""
 
diff --git a/i18n/po/mr.po b/i18n/po/mr.po
index fcdf1a6..5521d01 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: 2015-12-31 03:40+0100\n"
+"POT-Creation-Date: 2016-01-06 03:38+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: 2015-12-31 04:52+0000\n"
-"X-Generator: Launchpad (build 17865)\n"
+"X-Launchpad-Export-Date: 2016-01-06 04:53+0000\n"
+"X-Generator: Launchpad (build 17876)\n"
 "Language: mr\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -1077,9 +1077,6 @@ msgstr ""
 msgid "Overpass query: "
 msgstr ""
 
-msgid "Overpass server: "
-msgstr ""
-
 msgid "Paste"
 msgstr "चिकटवा"
 
@@ -1369,6 +1366,9 @@ msgstr "मार्ग विभागा"
 msgid "Split a way at the selected node."
 msgstr "निवडलेल्या गाठीपाशी मार्ग विभागा."
 
+msgid "Cannot split since another split operation is already in progress"
+msgstr ""
+
 msgid ""
 "The current selection cannot be used for splitting - no node is selected."
 msgstr ""
@@ -1489,6 +1489,27 @@ msgid ""
 "own copy and all nodes will be selected."
 msgstr ""
 
+msgid "Existing node"
+msgstr ""
+
+msgid "Both nodes"
+msgstr ""
+
+msgid "New node"
+msgstr ""
+
+msgid "Tags / Memberships"
+msgstr ""
+
+msgid "Unglue"
+msgstr ""
+
+msgid "Where should the tags of the node be put?"
+msgstr ""
+
+msgid "Where should the memberships of this node be put?"
+msgstr ""
+
 msgid "Unglued Node"
 msgstr ""
 
@@ -3080,6 +3101,15 @@ msgstr ""
 msgid "Restoring files"
 msgstr ""
 
+msgid "Unable to delete backup file {0}"
+msgstr ""
+
+msgid "Unable to delete PID file {0}"
+msgstr ""
+
+msgid "Unable to delete archived backup file {0}"
+msgstr ""
+
 msgid "Illegal latitude value ''{0}''"
 msgstr ""
 
@@ -4238,6 +4268,9 @@ msgstr ""
 msgid "No \"to\" way found"
 msgstr ""
 
+msgid "\"from\" way equals \"to\" way"
+msgstr ""
+
 msgid "No \"via\" node or way found"
 msgstr ""
 
@@ -7035,9 +7068,6 @@ msgstr ""
 msgid "Tags: {0} / Memberships: {1}"
 msgstr ""
 
-msgid "Tags / Memberships"
-msgstr ""
-
 msgid "Delete the selected key in all objects"
 msgstr ""
 
@@ -11653,6 +11683,15 @@ msgstr ""
 msgid "Please enter the OSM API URL."
 msgstr ""
 
+msgid "Use Overpass server for object downloads"
+msgstr ""
+
+msgid "Overpass server: "
+msgstr ""
+
+msgid "Overpass server"
+msgstr ""
+
 msgid "Proxy settings"
 msgstr ""
 
@@ -13791,6 +13830,9 @@ msgstr ""
 msgid "reserved"
 msgstr ""
 
+msgid "Unable to delete old preferences file {0}"
+msgstr ""
+
 msgid "Outdated Java version"
 msgstr ""
 
@@ -13882,6 +13924,9 @@ msgid ""
 "contain any JOSM object or suitable text. </p></html>"
 msgstr ""
 
+msgid "Unable to delete file {0}"
+msgstr ""
+
 msgid "ms"
 msgstr ""
 
@@ -16996,6 +17041,9 @@ msgstr ""
 msgid "Tourist buses"
 msgstr ""
 
+msgid "Max. speed Heavy Goods Vehicles (km/h)"
+msgstr ""
+
 msgid "Min. speed (km/h)"
 msgstr ""
 
@@ -19293,12 +19341,6 @@ msgstr ""
 msgid "Dentist"
 msgstr ""
 
-msgid "Nursing Home"
-msgstr ""
-
-msgid "Retirement Home"
-msgstr ""
-
 msgid "Pharmacy"
 msgstr ""
 
@@ -19326,6 +19368,31 @@ msgstr ""
 msgid "Veterinary"
 msgstr ""
 
+msgid "Social Facility"
+msgstr ""
+
+msgid "Nursing Home"
+msgstr ""
+
+msgid "Group Home"
+msgstr ""
+
+msgid "For"
+msgstr ""
+
+msgid "Assisted Living"
+msgstr ""
+
+msgid "Outreach"
+msgstr ""
+
+msgctxt "social_facility"
+msgid "Shelter"
+msgstr ""
+
+msgid "Food Bank"
+msgstr ""
+
 msgid "Toilets/Restrooms"
 msgstr ""
 
@@ -19368,6 +19435,13 @@ msgstr ""
 msgid "urinal"
 msgstr ""
 
+msgctxt "toilets"
+msgid "Diaper"
+msgstr ""
+
+msgid "room"
+msgstr ""
+
 msgid "Post Box"
 msgstr ""
 
@@ -23405,24 +23479,24 @@ msgstr ""
 msgid "Download GPX track from openstreetmap.org"
 msgstr ""
 
+msgid "Download Track"
+msgstr ""
+
+msgid "Filename"
+msgstr ""
+
 msgid ""
 "Error occurred while parsing gpx file {0}. Only a part of the file will be "
 "available."
 msgstr ""
 
-msgid "Invalid URL {0}"
-msgstr ""
-
 msgid "Error fetching URL {0}"
 msgstr ""
 
 msgid "Error parsing data from URL {0}"
 msgstr ""
 
-msgid "Download Track"
-msgstr ""
-
-msgid "Filename"
+msgid "Invalid URL {0}"
 msgstr ""
 
 msgid "Private (only shared as anonymous, unordered points)"
@@ -23472,9 +23546,6 @@ msgstr ""
 msgid "Uploading trace ..."
 msgstr ""
 
-msgid "Connecting..."
-msgstr ""
-
 msgid "Upload canceled"
 msgstr ""
 
@@ -27913,6 +27984,69 @@ msgstr ""
 msgid "Please load some photos."
 msgstr ""
 
+msgid "Edit photo GPS data"
+msgstr ""
+
+msgid "Edit GPS data of selected photo."
+msgstr ""
+
+msgid "Edit Photo GPS Data"
+msgstr ""
+
+msgid "Please select an image first."
+msgstr ""
+
+msgid "No image selected"
+msgstr ""
+
+msgid "(Empty values delete the according fields.)"
+msgstr ""
+
+msgid "coordinates"
+msgstr ""
+
+msgid "Latitude and longitude"
+msgstr ""
+
+msgid "Edit Image Coordinates"
+msgstr ""
+
+msgid "Edit coordinates in separate editor"
+msgstr ""
+
+msgid "altitude"
+msgstr ""
+
+msgid "Altitude:"
+msgstr ""
+
+msgid "speed"
+msgstr ""
+
+msgid "positive number or empty"
+msgstr ""
+
+msgid "Speed:"
+msgstr ""
+
+msgid "direction"
+msgstr ""
+
+msgid "range -360.0 .. 360.0, or empty"
+msgstr ""
+
+msgid "Direction:"
+msgstr ""
+
+msgid "°"
+msgstr ""
+
+msgid "Undo changes made in this dialog"
+msgstr ""
+
+msgid "Reload GPS data from image file"
+msgstr ""
+
 msgid "New layer for untagged images"
 msgstr ""
 
@@ -30929,9 +31063,6 @@ msgstr ""
 msgid "Fetches all coordinates from Wikipedia in the current view"
 msgstr ""
 
-msgid "coordinates"
-msgstr ""
-
 msgid "Category"
 msgstr ""
 
diff --git a/i18n/po/ms.po b/i18n/po/ms.po
index 0e428a8..282cd11 100644
--- a/i18n/po/ms.po
+++ b/i18n/po/ms.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: josm\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-12-31 03:40+0100\n"
+"POT-Creation-Date: 2016-01-06 03:38+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: 2015-12-31 04:53+0000\n"
-"X-Generator: Launchpad (build 17865)\n"
+"X-Launchpad-Export-Date: 2016-01-06 04:53+0000\n"
+"X-Generator: Launchpad (build 17876)\n"
 "Language: ms\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -1056,9 +1056,6 @@ msgstr ""
 msgid "Overpass query: "
 msgstr ""
 
-msgid "Overpass server: "
-msgstr ""
-
 msgid "Paste"
 msgstr ""
 
@@ -1348,6 +1345,9 @@ msgstr ""
 msgid "Split a way at the selected node."
 msgstr ""
 
+msgid "Cannot split since another split operation is already in progress"
+msgstr ""
+
 msgid ""
 "The current selection cannot be used for splitting - no node is selected."
 msgstr ""
@@ -1459,6 +1459,27 @@ msgid ""
 "own copy and all nodes will be selected."
 msgstr ""
 
+msgid "Existing node"
+msgstr ""
+
+msgid "Both nodes"
+msgstr ""
+
+msgid "New node"
+msgstr ""
+
+msgid "Tags / Memberships"
+msgstr ""
+
+msgid "Unglue"
+msgstr ""
+
+msgid "Where should the tags of the node be put?"
+msgstr ""
+
+msgid "Where should the memberships of this node be put?"
+msgstr ""
+
 msgid "Unglued Node"
 msgstr ""
 
@@ -3049,6 +3070,15 @@ msgstr ""
 msgid "Restoring files"
 msgstr ""
 
+msgid "Unable to delete backup file {0}"
+msgstr ""
+
+msgid "Unable to delete PID file {0}"
+msgstr ""
+
+msgid "Unable to delete archived backup file {0}"
+msgstr ""
+
 msgid "Illegal latitude value ''{0}''"
 msgstr ""
 
@@ -4207,6 +4237,9 @@ msgstr ""
 msgid "No \"to\" way found"
 msgstr ""
 
+msgid "\"from\" way equals \"to\" way"
+msgstr ""
+
 msgid "No \"via\" node or way found"
 msgstr ""
 
@@ -7004,9 +7037,6 @@ msgstr ""
 msgid "Tags: {0} / Memberships: {1}"
 msgstr ""
 
-msgid "Tags / Memberships"
-msgstr ""
-
 msgid "Delete the selected key in all objects"
 msgstr ""
 
@@ -11611,6 +11641,15 @@ msgstr ""
 msgid "Please enter the OSM API URL."
 msgstr ""
 
+msgid "Use Overpass server for object downloads"
+msgstr ""
+
+msgid "Overpass server: "
+msgstr ""
+
+msgid "Overpass server"
+msgstr ""
+
 msgid "Proxy settings"
 msgstr ""
 
@@ -13749,6 +13788,9 @@ msgstr ""
 msgid "reserved"
 msgstr ""
 
+msgid "Unable to delete old preferences file {0}"
+msgstr ""
+
 msgid "Outdated Java version"
 msgstr ""
 
@@ -13840,6 +13882,9 @@ msgid ""
 "contain any JOSM object or suitable text. </p></html>"
 msgstr ""
 
+msgid "Unable to delete file {0}"
+msgstr ""
+
 msgid "ms"
 msgstr ""
 
@@ -16954,6 +16999,9 @@ msgstr ""
 msgid "Tourist buses"
 msgstr ""
 
+msgid "Max. speed Heavy Goods Vehicles (km/h)"
+msgstr ""
+
 msgid "Min. speed (km/h)"
 msgstr ""
 
@@ -19251,12 +19299,6 @@ msgstr ""
 msgid "Dentist"
 msgstr ""
 
-msgid "Nursing Home"
-msgstr ""
-
-msgid "Retirement Home"
-msgstr ""
-
 msgid "Pharmacy"
 msgstr ""
 
@@ -19284,6 +19326,31 @@ msgstr ""
 msgid "Veterinary"
 msgstr ""
 
+msgid "Social Facility"
+msgstr ""
+
+msgid "Nursing Home"
+msgstr ""
+
+msgid "Group Home"
+msgstr ""
+
+msgid "For"
+msgstr ""
+
+msgid "Assisted Living"
+msgstr ""
+
+msgid "Outreach"
+msgstr ""
+
+msgctxt "social_facility"
+msgid "Shelter"
+msgstr ""
+
+msgid "Food Bank"
+msgstr ""
+
 msgid "Toilets/Restrooms"
 msgstr ""
 
@@ -19326,6 +19393,13 @@ msgstr ""
 msgid "urinal"
 msgstr ""
 
+msgctxt "toilets"
+msgid "Diaper"
+msgstr ""
+
+msgid "room"
+msgstr ""
+
 msgid "Post Box"
 msgstr ""
 
@@ -23363,24 +23437,24 @@ msgstr ""
 msgid "Download GPX track from openstreetmap.org"
 msgstr ""
 
+msgid "Download Track"
+msgstr ""
+
+msgid "Filename"
+msgstr ""
+
 msgid ""
 "Error occurred while parsing gpx file {0}. Only a part of the file will be "
 "available."
 msgstr ""
 
-msgid "Invalid URL {0}"
-msgstr ""
-
 msgid "Error fetching URL {0}"
 msgstr ""
 
 msgid "Error parsing data from URL {0}"
 msgstr ""
 
-msgid "Download Track"
-msgstr ""
-
-msgid "Filename"
+msgid "Invalid URL {0}"
 msgstr ""
 
 msgid "Private (only shared as anonymous, unordered points)"
@@ -23430,9 +23504,6 @@ msgstr ""
 msgid "Uploading trace ..."
 msgstr ""
 
-msgid "Connecting..."
-msgstr ""
-
 msgid "Upload canceled"
 msgstr ""
 
@@ -27871,6 +27942,69 @@ msgstr ""
 msgid "Please load some photos."
 msgstr ""
 
+msgid "Edit photo GPS data"
+msgstr ""
+
+msgid "Edit GPS data of selected photo."
+msgstr ""
+
+msgid "Edit Photo GPS Data"
+msgstr ""
+
+msgid "Please select an image first."
+msgstr ""
+
+msgid "No image selected"
+msgstr ""
+
+msgid "(Empty values delete the according fields.)"
+msgstr ""
+
+msgid "coordinates"
+msgstr ""
+
+msgid "Latitude and longitude"
+msgstr ""
+
+msgid "Edit Image Coordinates"
+msgstr ""
+
+msgid "Edit coordinates in separate editor"
+msgstr ""
+
+msgid "altitude"
+msgstr ""
+
+msgid "Altitude:"
+msgstr ""
+
+msgid "speed"
+msgstr ""
+
+msgid "positive number or empty"
+msgstr ""
+
+msgid "Speed:"
+msgstr ""
+
+msgid "direction"
+msgstr ""
+
+msgid "range -360.0 .. 360.0, or empty"
+msgstr ""
+
+msgid "Direction:"
+msgstr ""
+
+msgid "°"
+msgstr ""
+
+msgid "Undo changes made in this dialog"
+msgstr ""
+
+msgid "Reload GPS data from image file"
+msgstr ""
+
 msgid "New layer for untagged images"
 msgstr ""
 
@@ -30887,9 +31021,6 @@ msgstr ""
 msgid "Fetches all coordinates from Wikipedia in the current view"
 msgstr ""
 
-msgid "coordinates"
-msgstr ""
-
 msgid "Category"
 msgstr ""
 
diff --git a/i18n/po/nb.po b/i18n/po/nb.po
index e581e2a..3d38971 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: 2015-12-31 03:40+0100\n"
+"POT-Creation-Date: 2016-01-06 03:38+0100\n"
 "PO-Revision-Date: 2015-11-28 16:18+0000\n"
 "Last-Translator: Magnus Meyer Hustveit <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: 2015-12-31 04:54+0000\n"
-"X-Generator: Launchpad (build 17865)\n"
+"X-Launchpad-Export-Date: 2016-01-06 04:55+0000\n"
+"X-Generator: Launchpad (build 17876)\n"
 "Language: nb\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -1082,9 +1082,6 @@ msgstr ""
 msgid "Overpass query: "
 msgstr ""
 
-msgid "Overpass server: "
-msgstr ""
-
 msgid "Paste"
 msgstr "Lim inn"
 
@@ -1381,6 +1378,9 @@ msgstr "Splitt linje"
 msgid "Split a way at the selected node."
 msgstr "Splitt en linje i den valgte noden."
 
+msgid "Cannot split since another split operation is already in progress"
+msgstr ""
+
 msgid ""
 "The current selection cannot be used for splitting - no node is selected."
 msgstr ""
@@ -1500,6 +1500,27 @@ msgstr ""
 "tilknytninger og nodene bli valgt. Ellers vil alle linjer få egne\n"
 "kopier og alle noder bli valgt."
 
+msgid "Existing node"
+msgstr ""
+
+msgid "Both nodes"
+msgstr ""
+
+msgid "New node"
+msgstr ""
+
+msgid "Tags / Memberships"
+msgstr ""
+
+msgid "Unglue"
+msgstr ""
+
+msgid "Where should the tags of the node be put?"
+msgstr ""
+
+msgid "Where should the memberships of this node be put?"
+msgstr ""
+
 msgid "Unglued Node"
 msgstr "Node uten tilknytning"
 
@@ -3106,6 +3127,15 @@ msgstr ""
 msgid "Restoring files"
 msgstr ""
 
+msgid "Unable to delete backup file {0}"
+msgstr ""
+
+msgid "Unable to delete PID file {0}"
+msgstr ""
+
+msgid "Unable to delete archived backup file {0}"
+msgstr ""
+
 msgid "Illegal latitude value ''{0}''"
 msgstr ""
 
@@ -4271,6 +4301,9 @@ msgstr ""
 msgid "No \"to\" way found"
 msgstr ""
 
+msgid "\"from\" way equals \"to\" way"
+msgstr ""
+
 msgid "No \"via\" node or way found"
 msgstr ""
 
@@ -7098,9 +7131,6 @@ msgstr ""
 msgid "Tags: {0} / Memberships: {1}"
 msgstr ""
 
-msgid "Tags / Memberships"
-msgstr ""
-
 msgid "Delete the selected key in all objects"
 msgstr "Fjern den valgte nøkkel i alle objekt"
 
@@ -11777,6 +11807,15 @@ msgstr ""
 msgid "Please enter the OSM API URL."
 msgstr ""
 
+msgid "Use Overpass server for object downloads"
+msgstr ""
+
+msgid "Overpass server: "
+msgstr ""
+
+msgid "Overpass server"
+msgstr ""
+
 msgid "Proxy settings"
 msgstr ""
 
@@ -13940,6 +13979,9 @@ msgstr ""
 msgid "reserved"
 msgstr ""
 
+msgid "Unable to delete old preferences file {0}"
+msgstr ""
+
 msgid "Outdated Java version"
 msgstr ""
 
@@ -14031,6 +14073,9 @@ msgid ""
 "contain any JOSM object or suitable text. </p></html>"
 msgstr ""
 
+msgid "Unable to delete file {0}"
+msgstr ""
+
 msgid "ms"
 msgstr ""
 
@@ -17164,6 +17209,9 @@ msgstr "Offentlig transport"
 msgid "Tourist buses"
 msgstr ""
 
+msgid "Max. speed Heavy Goods Vehicles (km/h)"
+msgstr ""
+
 msgid "Min. speed (km/h)"
 msgstr "Minste fart (km/t)"
 
@@ -19461,12 +19509,6 @@ msgstr ""
 msgid "Dentist"
 msgstr "Tannlege"
 
-msgid "Nursing Home"
-msgstr ""
-
-msgid "Retirement Home"
-msgstr ""
-
 msgid "Pharmacy"
 msgstr "Apotek"
 
@@ -19494,6 +19536,31 @@ msgstr "(Bruk internasjonalt nummer, f.eks. +12-345-67890)"
 msgid "Veterinary"
 msgstr "Veterinær"
 
+msgid "Social Facility"
+msgstr ""
+
+msgid "Nursing Home"
+msgstr ""
+
+msgid "Group Home"
+msgstr ""
+
+msgid "For"
+msgstr ""
+
+msgid "Assisted Living"
+msgstr ""
+
+msgid "Outreach"
+msgstr ""
+
+msgctxt "social_facility"
+msgid "Shelter"
+msgstr ""
+
+msgid "Food Bank"
+msgstr ""
+
 msgid "Toilets/Restrooms"
 msgstr ""
 
@@ -19536,6 +19603,13 @@ msgstr ""
 msgid "urinal"
 msgstr ""
 
+msgctxt "toilets"
+msgid "Diaper"
+msgstr ""
+
+msgid "room"
+msgstr ""
+
 msgid "Post Box"
 msgstr "Postkasse"
 
@@ -23581,24 +23655,24 @@ msgstr ""
 msgid "Download GPX track from openstreetmap.org"
 msgstr ""
 
+msgid "Download Track"
+msgstr ""
+
+msgid "Filename"
+msgstr ""
+
 msgid ""
 "Error occurred while parsing gpx file {0}. Only a part of the file will be "
 "available."
 msgstr ""
 
-msgid "Invalid URL {0}"
-msgstr ""
-
 msgid "Error fetching URL {0}"
 msgstr ""
 
 msgid "Error parsing data from URL {0}"
 msgstr ""
 
-msgid "Download Track"
-msgstr ""
-
-msgid "Filename"
+msgid "Invalid URL {0}"
 msgstr ""
 
 msgid "Private (only shared as anonymous, unordered points)"
@@ -23648,9 +23722,6 @@ msgstr "GPX lag er ikke valgt -> Ingen spor å laste opp."
 msgid "Uploading trace ..."
 msgstr ""
 
-msgid "Connecting..."
-msgstr "Kobler til …"
-
 msgid "Upload canceled"
 msgstr ""
 
@@ -28124,6 +28195,69 @@ msgstr ""
 msgid "Please load some photos."
 msgstr ""
 
+msgid "Edit photo GPS data"
+msgstr ""
+
+msgid "Edit GPS data of selected photo."
+msgstr ""
+
+msgid "Edit Photo GPS Data"
+msgstr ""
+
+msgid "Please select an image first."
+msgstr ""
+
+msgid "No image selected"
+msgstr ""
+
+msgid "(Empty values delete the according fields.)"
+msgstr ""
+
+msgid "coordinates"
+msgstr ""
+
+msgid "Latitude and longitude"
+msgstr ""
+
+msgid "Edit Image Coordinates"
+msgstr ""
+
+msgid "Edit coordinates in separate editor"
+msgstr ""
+
+msgid "altitude"
+msgstr ""
+
+msgid "Altitude:"
+msgstr ""
+
+msgid "speed"
+msgstr ""
+
+msgid "positive number or empty"
+msgstr ""
+
+msgid "Speed:"
+msgstr ""
+
+msgid "direction"
+msgstr ""
+
+msgid "range -360.0 .. 360.0, or empty"
+msgstr ""
+
+msgid "Direction:"
+msgstr ""
+
+msgid "°"
+msgstr ""
+
+msgid "Undo changes made in this dialog"
+msgstr ""
+
+msgid "Reload GPS data from image file"
+msgstr ""
+
 msgid "New layer for untagged images"
 msgstr ""
 
@@ -31146,9 +31280,6 @@ msgstr ""
 msgid "Fetches all coordinates from Wikipedia in the current view"
 msgstr ""
 
-msgid "coordinates"
-msgstr ""
-
 msgid "Category"
 msgstr ""
 
diff --git a/i18n/po/nds.po b/i18n/po/nds.po
index 9c80efb..9395e3c 100644
--- a/i18n/po/nds.po
+++ b/i18n/po/nds.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: josm\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-12-31 03:40+0100\n"
+"POT-Creation-Date: 2016-01-06 03:38+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: 2015-12-31 04:53+0000\n"
-"X-Generator: Launchpad (build 17865)\n"
+"X-Launchpad-Export-Date: 2016-01-06 04:54+0000\n"
+"X-Generator: Launchpad (build 17876)\n"
 "Language: \n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -1056,9 +1056,6 @@ msgstr ""
 msgid "Overpass query: "
 msgstr ""
 
-msgid "Overpass server: "
-msgstr ""
-
 msgid "Paste"
 msgstr ""
 
@@ -1348,6 +1345,9 @@ msgstr ""
 msgid "Split a way at the selected node."
 msgstr ""
 
+msgid "Cannot split since another split operation is already in progress"
+msgstr ""
+
 msgid ""
 "The current selection cannot be used for splitting - no node is selected."
 msgstr ""
@@ -1459,6 +1459,27 @@ msgid ""
 "own copy and all nodes will be selected."
 msgstr ""
 
+msgid "Existing node"
+msgstr ""
+
+msgid "Both nodes"
+msgstr ""
+
+msgid "New node"
+msgstr ""
+
+msgid "Tags / Memberships"
+msgstr ""
+
+msgid "Unglue"
+msgstr ""
+
+msgid "Where should the tags of the node be put?"
+msgstr ""
+
+msgid "Where should the memberships of this node be put?"
+msgstr ""
+
 msgid "Unglued Node"
 msgstr ""
 
@@ -3048,6 +3069,15 @@ msgstr ""
 msgid "Restoring files"
 msgstr ""
 
+msgid "Unable to delete backup file {0}"
+msgstr ""
+
+msgid "Unable to delete PID file {0}"
+msgstr ""
+
+msgid "Unable to delete archived backup file {0}"
+msgstr ""
+
 msgid "Illegal latitude value ''{0}''"
 msgstr ""
 
@@ -4206,6 +4236,9 @@ msgstr ""
 msgid "No \"to\" way found"
 msgstr ""
 
+msgid "\"from\" way equals \"to\" way"
+msgstr ""
+
 msgid "No \"via\" node or way found"
 msgstr ""
 
@@ -7003,9 +7036,6 @@ msgstr ""
 msgid "Tags: {0} / Memberships: {1}"
 msgstr ""
 
-msgid "Tags / Memberships"
-msgstr ""
-
 msgid "Delete the selected key in all objects"
 msgstr ""
 
@@ -11610,6 +11640,15 @@ msgstr ""
 msgid "Please enter the OSM API URL."
 msgstr ""
 
+msgid "Use Overpass server for object downloads"
+msgstr ""
+
+msgid "Overpass server: "
+msgstr ""
+
+msgid "Overpass server"
+msgstr ""
+
 msgid "Proxy settings"
 msgstr ""
 
@@ -13748,6 +13787,9 @@ msgstr ""
 msgid "reserved"
 msgstr ""
 
+msgid "Unable to delete old preferences file {0}"
+msgstr ""
+
 msgid "Outdated Java version"
 msgstr ""
 
@@ -13839,6 +13881,9 @@ msgid ""
 "contain any JOSM object or suitable text. </p></html>"
 msgstr ""
 
+msgid "Unable to delete file {0}"
+msgstr ""
+
 msgid "ms"
 msgstr ""
 
@@ -16953,6 +16998,9 @@ msgstr ""
 msgid "Tourist buses"
 msgstr ""
 
+msgid "Max. speed Heavy Goods Vehicles (km/h)"
+msgstr ""
+
 msgid "Min. speed (km/h)"
 msgstr ""
 
@@ -19250,12 +19298,6 @@ msgstr ""
 msgid "Dentist"
 msgstr "Tandedoktor"
 
-msgid "Nursing Home"
-msgstr ""
-
-msgid "Retirement Home"
-msgstr ""
-
 msgid "Pharmacy"
 msgstr "Aftheek"
 
@@ -19283,6 +19325,31 @@ msgstr ""
 msgid "Veterinary"
 msgstr "Tierarz"
 
+msgid "Social Facility"
+msgstr ""
+
+msgid "Nursing Home"
+msgstr ""
+
+msgid "Group Home"
+msgstr ""
+
+msgid "For"
+msgstr ""
+
+msgid "Assisted Living"
+msgstr ""
+
+msgid "Outreach"
+msgstr ""
+
+msgctxt "social_facility"
+msgid "Shelter"
+msgstr ""
+
+msgid "Food Bank"
+msgstr ""
+
 msgid "Toilets/Restrooms"
 msgstr ""
 
@@ -19325,6 +19392,13 @@ msgstr ""
 msgid "urinal"
 msgstr ""
 
+msgctxt "toilets"
+msgid "Diaper"
+msgstr ""
+
+msgid "room"
+msgstr ""
+
 msgid "Post Box"
 msgstr ""
 
@@ -23362,24 +23436,24 @@ msgstr ""
 msgid "Download GPX track from openstreetmap.org"
 msgstr ""
 
+msgid "Download Track"
+msgstr ""
+
+msgid "Filename"
+msgstr ""
+
 msgid ""
 "Error occurred while parsing gpx file {0}. Only a part of the file will be "
 "available."
 msgstr ""
 
-msgid "Invalid URL {0}"
-msgstr ""
-
 msgid "Error fetching URL {0}"
 msgstr ""
 
 msgid "Error parsing data from URL {0}"
 msgstr ""
 
-msgid "Download Track"
-msgstr ""
-
-msgid "Filename"
+msgid "Invalid URL {0}"
 msgstr ""
 
 msgid "Private (only shared as anonymous, unordered points)"
@@ -23429,9 +23503,6 @@ msgstr ""
 msgid "Uploading trace ..."
 msgstr ""
 
-msgid "Connecting..."
-msgstr ""
-
 msgid "Upload canceled"
 msgstr ""
 
@@ -27870,6 +27941,69 @@ msgstr ""
 msgid "Please load some photos."
 msgstr ""
 
+msgid "Edit photo GPS data"
+msgstr ""
+
+msgid "Edit GPS data of selected photo."
+msgstr ""
+
+msgid "Edit Photo GPS Data"
+msgstr ""
+
+msgid "Please select an image first."
+msgstr ""
+
+msgid "No image selected"
+msgstr ""
+
+msgid "(Empty values delete the according fields.)"
+msgstr ""
+
+msgid "coordinates"
+msgstr ""
+
+msgid "Latitude and longitude"
+msgstr ""
+
+msgid "Edit Image Coordinates"
+msgstr ""
+
+msgid "Edit coordinates in separate editor"
+msgstr ""
+
+msgid "altitude"
+msgstr ""
+
+msgid "Altitude:"
+msgstr ""
+
+msgid "speed"
+msgstr ""
+
+msgid "positive number or empty"
+msgstr ""
+
+msgid "Speed:"
+msgstr ""
+
+msgid "direction"
+msgstr ""
+
+msgid "range -360.0 .. 360.0, or empty"
+msgstr ""
+
+msgid "Direction:"
+msgstr ""
+
+msgid "°"
+msgstr ""
+
+msgid "Undo changes made in this dialog"
+msgstr ""
+
+msgid "Reload GPS data from image file"
+msgstr ""
+
 msgid "New layer for untagged images"
 msgstr ""
 
@@ -30886,9 +31020,6 @@ msgstr ""
 msgid "Fetches all coordinates from Wikipedia in the current view"
 msgstr ""
 
-msgid "coordinates"
-msgstr ""
-
 msgid "Category"
 msgstr ""
 
diff --git a/i18n/po/nl.po b/i18n/po/nl.po
index 546f5ae..29fb7f3 100644
--- a/i18n/po/nl.po
+++ b/i18n/po/nl.po
@@ -7,16 +7,16 @@ msgid ""
 msgstr ""
 "Project-Id-Version: josm\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-12-31 03:40+0100\n"
-"PO-Revision-Date: 2015-12-25 09:54+0000\n"
-"Last-Translator: korst <Unknown>\n"
+"POT-Creation-Date: 2016-01-06 03:38+0100\n"
+"PO-Revision-Date: 2016-01-04 22:47+0000\n"
+"Last-Translator: Don-vip <Unknown>\n"
 "Language-Team: Dutch\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Launchpad-Export-Date: 2015-12-31 04:40+0000\n"
-"X-Generator: Launchpad (build 17865)\n"
+"X-Launchpad-Export-Date: 2016-01-06 04:38+0000\n"
+"X-Generator: Launchpad (build 17876)\n"
 "Language: nl\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -1169,9 +1169,6 @@ msgstr "Fout bij parsen"
 msgid "Overpass query: "
 msgstr "Overpass query: "
 
-msgid "Overpass server: "
-msgstr "Overpass-server: "
-
 msgid "Paste"
 msgstr "Plakken"
 
@@ -1481,6 +1478,11 @@ msgstr "Weg splitsen"
 msgid "Split a way at the selected node."
 msgstr "Een weg bij de geselecteerde knoop splitsen."
 
+msgid "Cannot split since another split operation is already in progress"
+msgstr ""
+"Kan niet splitsen omdat een andere bewerking voor splitsen nog wordt "
+"uitgevoerd"
+
 msgid ""
 "The current selection cannot be used for splitting - no node is selected."
 msgstr ""
@@ -1616,6 +1618,27 @@ msgstr ""
 "zouden\n"
 "geselecteerd worden."
 
+msgid "Existing node"
+msgstr ""
+
+msgid "Both nodes"
+msgstr ""
+
+msgid "New node"
+msgstr ""
+
+msgid "Tags / Memberships"
+msgstr "Tags / Leden"
+
+msgid "Unglue"
+msgstr ""
+
+msgid "Where should the tags of the node be put?"
+msgstr ""
+
+msgid "Where should the memberships of this node be put?"
+msgstr ""
+
 msgid "Unglued Node"
 msgstr "Losgemaakte knoop"
 
@@ -3364,6 +3387,15 @@ msgstr "Uw werk is automatisch opgeslagen."
 msgid "Restoring files"
 msgstr "Bezig met herstellen van bestanden"
 
+msgid "Unable to delete backup file {0}"
+msgstr ""
+
+msgid "Unable to delete PID file {0}"
+msgstr ""
+
+msgid "Unable to delete archived backup file {0}"
+msgstr ""
+
 msgid "Illegal latitude value ''{0}''"
 msgstr "Ongeldige waarde ''{0}'' voor breedtegraad"
 
@@ -3898,7 +3930,7 @@ msgid "WGS84"
 msgstr "WGS84"
 
 msgid "Double Stereographic"
-msgstr ""
+msgstr "Dubbel stereografisch"
 
 msgid "Parameter ''{0}'' required."
 msgstr "Parameter ''{0}'' vereist."
@@ -4631,6 +4663,9 @@ msgstr "Er werd geen weg met \"from\" gevonden"
 msgid "No \"to\" way found"
 msgstr "Er werd geen weg met \"to\" gevonden"
 
+msgid "\"from\" way equals \"to\" way"
+msgstr "\"from\" weg is gelijk aan de \"to\" weg"
+
 msgid "No \"via\" node or way found"
 msgstr "Er werd geen weg of knoop met \"via\" gevonden"
 
@@ -7714,9 +7749,6 @@ msgstr "Objecten: {2} / Tags: {0} / Leden: {1}"
 msgid "Tags: {0} / Memberships: {1}"
 msgstr "Tags: {0} / Leden: {1}"
 
-msgid "Tags / Memberships"
-msgstr "Tags / Leden"
-
 msgid "Delete the selected key in all objects"
 msgstr "Verwijder de geselecteerde sleutel uit alle objecten"
 
@@ -9766,6 +9798,8 @@ msgid ""
 "Aerial imagery \"{0}\" might be misaligned. Please check its offset using "
 "GPS tracks!"
 msgstr ""
+"Luchtfoto \"{0}\" zou niet goed uitgelijnd kunnen zijn. Controleer zijn "
+"verschuiving met behulp van GPS-sporen!"
 
 msgid "http://wiki.openstreetmap.org/wiki/Using_Imagery"
 msgstr "http://wiki.openstreetmap.org/wiki/Using_Imagery"
@@ -9978,6 +10012,9 @@ msgid ""
 " Supported projections are: {2}\n"
 "Change the projection again or remove the layer."
 msgstr ""
+"De laag {0} ondersteunt de nieuwe projectie {1} niet.\n"
+" Ondersteunde projecties zijn: {2}\n"
+"Wijzig de projectie opnieuw of verwijder de laag."
 
 msgid "Correlate to GPX"
 msgstr "Met GPX relateren"
@@ -12624,7 +12661,7 @@ msgid "LKS-92 (Latvia TM)"
 msgstr "LKS-92 (Letland TM)"
 
 msgid "Rijksdriehoekscoördinaten (Netherlands)"
-msgstr ""
+msgstr "Rijksdriehoekscoördinaten (Nederland)"
 
 msgid "SWEREF99 13 30 / EPSG:3008 (Sweden)"
 msgstr "SWEREF99 13 30 / EPSG:3008 (Zweden)"
@@ -12949,6 +12986,15 @@ msgstr "De huidige waarde is geen geldige URL"
 msgid "Please enter the OSM API URL."
 msgstr "Voer de OSM API URL in."
 
+msgid "Use Overpass server for object downloads"
+msgstr "Overpass-server gebruiken voor downloaden van objecten"
+
+msgid "Overpass server: "
+msgstr "Overpass-server: "
+
+msgid "Overpass server"
+msgstr "Overpass-server"
+
 msgid "Proxy settings"
 msgstr "Proxy-instellingen"
 
@@ -14901,7 +14947,7 @@ msgid "Downloading plugin list from ''{0}''"
 msgstr "Downloaden van lijst voor plug-in vanaf ''{0}''"
 
 msgid "Unsuccessful HTTP request"
-msgstr ""
+msgstr "Niet succesvol HTTP-verzoek"
 
 msgid "Plugin list download error"
 msgstr "Plug-inlijst fout bij downloaden"
@@ -15449,6 +15495,9 @@ msgstr "URL bevat gene geldige {0}"
 msgid "reserved"
 msgstr "gereserveerd"
 
+msgid "Unable to delete old preferences file {0}"
+msgstr ""
+
 msgid "Outdated Java version"
 msgstr "Verouderde Java-versie"
 
@@ -15562,6 +15611,9 @@ msgstr ""
 "<html><p> Sorry, het is niet mogelijk om tags uit de buffer te plakken. Het "
 "bevat geen JOSM-object of geschikte tekst. </p></html>"
 
+msgid "Unable to delete file {0}"
+msgstr ""
+
 msgid "ms"
 msgstr "ms"
 
@@ -16058,31 +16110,31 @@ msgid "AGRI black-and-white 2.5m"
 msgstr "AGRI zwart-wit 2.5m"
 
 msgid "LPI NSW Base Map"
-msgstr ""
+msgstr "LPI NSW Basiskaart"
 
 msgid "LPI NSW Topographic Map"
-msgstr ""
+msgstr "LPI NSW Topografische kaart"
 
 msgid "LPI NSW Imagery"
-msgstr ""
+msgstr "LPI NSW Afbeeldingen"
 
 msgid "LPI NSW Administrative Boundaries Suburb"
-msgstr ""
+msgstr "LPI NSW Administratieve grenzen Suburb"
 
 msgid "LPI NSW Administrative Boundaries LGA"
-msgstr ""
+msgstr "LPI NSW Administratieve grenzen LGA"
 
 msgid "LPI NSW Administrative Boundaries County"
-msgstr ""
+msgstr "LPI NSW Administratieve grenzen County"
 
 msgid "LPI NSW Administrative Boundaries Parish"
-msgstr ""
+msgstr "LPI NSW Administratieve grenzen Parochie"
 
 msgid "LPI NSW Administrative Boundaries State Forest"
-msgstr ""
+msgstr "LPI NSW Administratieve grenzen State Forest"
 
 msgid "LPI NSW Administrative Boundaries NPWS Reserve"
-msgstr ""
+msgstr "LPI NSW Administratieve grenzen NPWS Reserve"
 
 msgid "Geoimage.at MaxRes"
 msgstr "Geoimage.at MaxRes"
@@ -16157,7 +16209,7 @@ msgid "SPW(allonie) 2009 aerial imagery"
 msgstr "SPW(allonie) 2009 luchtfoto"
 
 msgid "TEC bus lines"
-msgstr ""
+msgstr "TEC buslijnen"
 
 msgid "IBGE Mapa de Setores Urbanos"
 msgstr "IBGE Mapa de Setores Urbanos"
@@ -16199,7 +16251,7 @@ msgid "Geodatastyrelsen (Denmark)"
 msgstr "Geodatastyrelsen (Denemarken)"
 
 msgid "Geodatastyrelsen Cadastral Parcels INSPIRE View"
-msgstr ""
+msgstr "Geodatastyrelsen Cadastral Parcels INSPIRE View"
 
 msgid "Geodatastyrelsen DTK Kort25"
 msgstr "Geodatastyrelsen DTK Kort25"
@@ -16323,13 +16375,13 @@ msgid "Bavaria (2 m)"
 msgstr "Beieren (2 m)"
 
 msgid "Stuttgart (aerial imagery)"
-msgstr ""
+msgstr "Stuttgart (luchtfoto''s)"
 
 msgid "Erlangen aerial imagery (2013 6.25 cm)"
-msgstr ""
+msgstr "Erlangen luchtfoto''s (2013 6.25 cm)"
 
 msgid "Erlangen 2011 aerial imagery (5.0 cm)"
-msgstr ""
+msgstr "Erlangen 2011 luchtfoto''s (5.0 cm)"
 
 msgid "Old map of Zwenkau - TK25 Messtischblatt (4739; 1906; PROJ.4-rect)"
 msgstr ""
@@ -16339,14 +16391,16 @@ msgid "Old map of Pegau - TK25 Messtischblatt (4839; 1909; PROJ.4-rect)"
 msgstr "Oude kaart van Pegau - TK25 Messtischblatt (4839; 1909; PROJ.4-rect)"
 
 msgid "Physical DE - Physical map (natural regions)"
-msgstr ""
+msgstr "Physical DE - Fysieke kaart (natuurregio''s)"
 
 msgid "Physical DE:Harz - Physical map (natural regions)"
-msgstr ""
+msgstr "Physical DE:Harz - Fysieke kaart (natuurregio''s)"
 
 msgid ""
 "Physical DE:Harz - Overlay for Bing (e.g. use opacity between 20% and 50%)"
 msgstr ""
+"Physical DE:Harz - Overlay voor Bing (bijv. gebruik transparantie tussen 20% "
+"en 50%)"
 
 msgid "Maps4BW (LGL-BW, www.lgl-bw.de)"
 msgstr "Maps4BW (LGL-BW, www.lgl-bw.de)"
@@ -17539,6 +17593,9 @@ msgid ""
 "of tagging presets (quick preview of the dialog that will popup). You can "
 "start the jar-file as standalone as well."
 msgstr ""
+"Voegt een tester voor Voorkeuze tags toe aan het menu Venster, wat u helpt "
+"bij het ontwikkelen van voorkeuzen voor tags (snel voorbeeld van het "
+"dialoogvenster dat opkomt). U kunt het jar-bestand ook zelfstandig starten."
 
 msgid "Make terraced houses out of single blocks."
 msgstr "Maak rijtjeswoningen uit één enkel blok."
@@ -17655,10 +17712,10 @@ msgid "wood"
 msgstr "hout"
 
 msgid "paving_stones"
-msgstr "stoeptegels"
+msgstr "straatstenen"
 
 msgid "cobblestone"
-msgstr "kinderhoofdjes"
+msgstr "kinderkopjes"
 
 msgid "gravel"
 msgstr "steenslag"
@@ -17670,7 +17727,7 @@ msgid "compacted"
 msgstr "aangestampt"
 
 msgid "grass_paver"
-msgstr "open stenen met gras"
+msgstr "grastegels"
 
 msgid "grass"
 msgstr "gras"
@@ -17682,7 +17739,7 @@ msgid "ground"
 msgstr "grond"
 
 msgid "sett"
-msgstr "sett"
+msgstr "Rechthoekig kasseien"
 
 msgid "Smoothness"
 msgstr "Gladheid"
@@ -17718,19 +17775,19 @@ msgid "High Clearance: light duty off-road vehicle"
 msgstr "Veel vrijheid: liichtgrwicht off-road voertuig"
 
 msgid "horrible"
-msgstr "slecht"
+msgstr "verschrikkelijk"
 
 msgid "Off-Road: heavy duty off-road vehicle"
 msgstr "Off-Road: zwaar off-road voertuig"
 
 msgid "very_horrible"
-msgstr "zeer_slecht"
+msgstr "uiterst verschrikkelijk"
 
 msgid "Specialized off-road: tractor, ATV"
 msgstr "Gespecialiseerd off-road: tractor, ATV"
 
 msgid "impassable"
-msgstr "geblokkeerd"
+msgstr "onmogelijk"
 
 msgid "No wheeled vehicle"
 msgstr "Geen voertuigen met wielen"
@@ -17758,7 +17815,7 @@ msgid "dirt"
 msgstr "aarde"
 
 msgid "fine_gravel"
-msgstr "fijne_gravel"
+msgstr "fijne steenslag"
 
 msgid "mud"
 msgstr "slikgronden"
@@ -18619,19 +18676,19 @@ msgid "Trunk Link"
 msgstr "Af-/Oprit autoweg"
 
 msgid "Primary"
-msgstr "Provinciale weg"
+msgstr "Primair"
 
 msgid "Overhead trolley wires"
-msgstr ""
+msgstr "Bovenliggende trolley-lijnen"
 
 msgid "Primary Link"
-msgstr "Af-/Oprit provinciale weg"
+msgstr "Af-/Oprit primaire weg"
 
 msgid "Secondary"
-msgstr "N-weg > 400"
+msgstr "Secundair"
 
 msgid "Secondary Link"
-msgstr "Secondaire koppeling"
+msgstr ""
 
 msgid "Tertiary"
 msgstr "Tertiaire weg"
@@ -18867,6 +18924,9 @@ msgstr "Openbaar vervoer"
 msgid "Tourist buses"
 msgstr "Toeristenbussen"
 
+msgid "Max. speed Heavy Goods Vehicles (km/h)"
+msgstr ""
+
 msgid "Min. speed (km/h)"
 msgstr "Min. snelheid (km/u)"
 
@@ -19152,7 +19212,7 @@ msgid "backward"
 msgstr "achteruit"
 
 msgid "reversible"
-msgstr ""
+msgstr "omkeerbaar"
 
 msgid "Waypoints"
 msgstr "Wegpunten"
@@ -19649,7 +19709,7 @@ msgid "Beach"
 msgstr "Strand"
 
 msgid "A flat area of sand, gravel or pebble next to water."
-msgstr "Een vlak gebied van zand, gravel of kiezels langs water."
+msgstr "Een vlak gebied van zand, steenslag of kiezel langs water"
 
 msgid "swimming"
 msgstr "zwemmen"
@@ -19956,7 +20016,7 @@ msgid "Railway Switch"
 msgstr "wissel spoorweg"
 
 msgid "Railway Signal"
-msgstr ""
+msgstr "Spoorwegsignaal"
 
 msgid "Railway milestone"
 msgstr "Element spoorweg"
@@ -20658,7 +20718,7 @@ msgid "sandwich"
 msgstr "sandwich"
 
 msgid "coffee_shop"
-msgstr ""
+msgstr "Koffieshop"
 
 msgid "sushi"
 msgstr "sushi"
@@ -21190,12 +21250,6 @@ msgstr "Dokterspraktijk"
 msgid "Dentist"
 msgstr "Tandarts"
 
-msgid "Nursing Home"
-msgstr "Verpleeghuis"
-
-msgid "Retirement Home"
-msgstr "Verzorgingshuis"
-
 msgid "Pharmacy"
 msgstr "Apotheek"
 
@@ -21223,6 +21277,31 @@ msgstr "(Gebruik de landtoegangscode, b.v. +31-20-3456789)"
 msgid "Veterinary"
 msgstr "Dierenarts"
 
+msgid "Social Facility"
+msgstr ""
+
+msgid "Nursing Home"
+msgstr "Verpleeghuis"
+
+msgid "Group Home"
+msgstr ""
+
+msgid "For"
+msgstr ""
+
+msgid "Assisted Living"
+msgstr ""
+
+msgid "Outreach"
+msgstr ""
+
+msgctxt "social_facility"
+msgid "Shelter"
+msgstr ""
+
+msgid "Food Bank"
+msgstr ""
+
 msgid "Toilets/Restrooms"
 msgstr "Toiletten/Wasruimten"
 
@@ -21265,6 +21344,13 @@ msgstr "Frans toilet"
 msgid "urinal"
 msgstr "urinoir"
 
+msgctxt "toilets"
+msgid "Diaper"
+msgstr ""
+
+msgid "room"
+msgstr ""
+
 msgid "Post Box"
 msgstr "Brievenbus"
 
@@ -21585,7 +21671,7 @@ msgid "artificial_turf"
 msgstr "kunst_gras"
 
 msgid "decoturf"
-msgstr "decorgras"
+msgstr "decoturf kunststof"
 
 msgid "tartan"
 msgstr "tartan"
@@ -21912,11 +21998,11 @@ msgstr "zakelijk"
 
 msgctxt "building"
 msgid "service"
-msgstr ""
+msgstr "dienst"
 
 msgctxt "building"
 msgid "train_station"
-msgstr ""
+msgstr "treinstation"
 
 msgctxt "building"
 msgid "barn"
@@ -21956,11 +22042,11 @@ msgstr "ziekenhuis"
 
 msgctxt "building"
 msgid "kindergarten"
-msgstr ""
+msgstr "kleuterschool"
 
 msgctxt "building"
 msgid "manufacture"
-msgstr ""
+msgstr "manufacturen"
 
 msgctxt "building"
 msgid "warehouse"
@@ -22015,7 +22101,7 @@ msgstr "huis"
 
 msgctxt "building"
 msgid "hotel"
-msgstr ""
+msgstr "hotel"
 
 msgctxt "building"
 msgid "hut"
@@ -22072,7 +22158,7 @@ msgstr "nooduitgang"
 
 msgctxt "entrance"
 msgid "staircase"
-msgstr ""
+msgstr "trap"
 
 msgid "Entrance number"
 msgstr "Ingang nr:"
@@ -25356,6 +25442,12 @@ msgstr "Spoor downloaden ..."
 msgid "Download GPX track from openstreetmap.org"
 msgstr "Download GPX-spoor vanaf openstreetmap.org"
 
+msgid "Download Track"
+msgstr "Spoor downloaden"
+
+msgid "Filename"
+msgstr "Bestandsnaam"
+
 msgid ""
 "Error occurred while parsing gpx file {0}. Only a part of the file will be "
 "available."
@@ -25363,20 +25455,14 @@ msgstr ""
 "Er trad een fout op tijdens het parsen van GPX-bestand {0}. Slechts een "
 "gedeelte van het bestand zal beschikbaar zijn."
 
-msgid "Invalid URL {0}"
-msgstr "Ongeldige URL {0}"
-
 msgid "Error fetching URL {0}"
 msgstr "Fout bij ophalen URL {0}"
 
 msgid "Error parsing data from URL {0}"
 msgstr "Fout bij parsen van gegevens van URL {0}"
 
-msgid "Download Track"
-msgstr "Spoor downloaden"
-
-msgid "Filename"
-msgstr "Bestandsnaam"
+msgid "Invalid URL {0}"
+msgstr "Ongeldige URL {0}"
 
 msgid "Private (only shared as anonymous, unordered points)"
 msgstr "Privé (slechts gedeeld als anoniem, niet geordende punten)"
@@ -25431,9 +25517,6 @@ msgstr "Geen GPX-laag geselecteerd. Kan geen spoor uploaden."
 msgid "Uploading trace ..."
 msgstr "Uploaden van spoor ..."
 
-msgid "Connecting..."
-msgstr "Verbinden..."
-
 msgid "Upload canceled"
 msgstr "Uploaden geannuleerd"
 
@@ -27417,7 +27500,7 @@ msgid "Freeze reference selection"
 msgstr ""
 
 msgid "{0}: {1} / {2}: {3} / {4}: {5}"
-msgstr ""
+msgstr "{0}: {1} / {2}: {3} / {4}: {5}"
 
 msgid "Invalid reference or subject"
 msgstr "Ongeldige verwijzing of onderwerp"
@@ -29149,7 +29232,7 @@ msgstr ""
 "Naar locatie van afbeeldingen verplaatsen met knoppen Volgende/Vorige"
 
 msgid "Download mode"
-msgstr ""
+msgstr "Modus Downloaden"
 
 msgid "You are logged in as ''{0}''."
 msgstr "U bent aangemeld als ''{0}''."
@@ -29158,10 +29241,10 @@ msgid "Re-Login"
 msgstr "Opnieuw aanmelden"
 
 msgid "You are currently not logged in."
-msgstr ""
+msgstr "U bent momenteel niet ingelogd."
 
 msgid "Go to setting and log in to Mapillary before uploading."
-msgstr ""
+msgstr "Ga naar Instellingen en log in bij Mapillary vóór uploaden."
 
 msgid "Upload selected sequence"
 msgstr "Geselecteerde reeks uploaden"
@@ -29218,10 +29301,10 @@ msgid "Select mode"
 msgstr "Modus Selectie"
 
 msgid "Mapillary login"
-msgstr ""
+msgstr "Log-in voor Mapillary"
 
 msgid "Login successful, return to JOSM."
-msgstr ""
+msgstr "Log-in succesvol, terug naar JOSM."
 
 msgid "Downloading Mapillary images"
 msgstr "Afbeeldingen van Mapillary downloaden"
@@ -30294,6 +30377,69 @@ msgstr ""
 msgid "Please load some photos."
 msgstr "Laad enkele foto''s."
 
+msgid "Edit photo GPS data"
+msgstr ""
+
+msgid "Edit GPS data of selected photo."
+msgstr ""
+
+msgid "Edit Photo GPS Data"
+msgstr ""
+
+msgid "Please select an image first."
+msgstr ""
+
+msgid "No image selected"
+msgstr ""
+
+msgid "(Empty values delete the according fields.)"
+msgstr ""
+
+msgid "coordinates"
+msgstr "coördinaten"
+
+msgid "Latitude and longitude"
+msgstr ""
+
+msgid "Edit Image Coordinates"
+msgstr ""
+
+msgid "Edit coordinates in separate editor"
+msgstr ""
+
+msgid "altitude"
+msgstr ""
+
+msgid "Altitude:"
+msgstr ""
+
+msgid "speed"
+msgstr ""
+
+msgid "positive number or empty"
+msgstr ""
+
+msgid "Speed:"
+msgstr ""
+
+msgid "direction"
+msgstr ""
+
+msgid "range -360.0 .. 360.0, or empty"
+msgstr ""
+
+msgid "Direction:"
+msgstr ""
+
+msgid "°"
+msgstr ""
+
+msgid "Undo changes made in this dialog"
+msgstr ""
+
+msgid "Reload GPS data from image file"
+msgstr ""
+
 msgid "New layer for untagged images"
 msgstr "Nieuwe laag voor niet-getagde afbeeldingen"
 
@@ -33551,27 +33697,27 @@ msgstr ""
 "wegpunt."
 
 msgid "Fetch Wikidata IDs"
-msgstr ""
+msgstr "Ophalen Wikigegevens-ID''s"
 
 msgid "Fetch Wikidata IDs using the ''wikipedia'' tag"
-msgstr ""
+msgstr "Ophalen Wikigegevens-ID''s met behulp van de tag ''wikipedia''"
 
 msgid "Fetching Wikidata IDs"
-msgstr ""
+msgstr "Ophalen Wikigegevens-ID''s"
 
 msgid "Add Wikidata"
-msgstr ""
+msgstr "Wikigegevens toevoegen"
 
 msgid "No Wikidata ID found for: {0}"
-msgstr ""
+msgstr "Geen Wikigegevens-ID gevonden voor: {0}"
 
 msgid "Fetching {0} Wikidata ID for language ''{1}''"
 msgid_plural "Fetching {0} Wikidata IDs for language ''{1}''"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Ophalen {0} Wikigegevens-ID voor taal ''{1}''"
+msgstr[1] "Ophalen {0} Wikigegevens-ID''s voor taal ''{1}''"
 
 msgid "Add Wikidata for language ''{0}''"
-msgstr ""
+msgstr "Wikigegevens toevoegen voor taal ''{0}''"
 
 msgid "Add names from Wikipedia"
 msgstr "Voeg namen vanaf Wikipedia toe"
@@ -33620,9 +33766,6 @@ msgstr "{0}.Wikipedia.org: {1}"
 msgid "Fetches all coordinates from Wikipedia in the current view"
 msgstr "Haalt alle coördinaten van Wikipedia op voor de huidige weergave"
 
-msgid "coordinates"
-msgstr "coördinaten"
-
 msgid "Category"
 msgstr "Categorie"
 
@@ -33669,3 +33812,6 @@ msgstr "Begin te rijden"
 
 msgid "Drive a race car on this layer"
 msgstr "Rijd met een raceauto over deze laag"
+
+#~ msgid "Retirement Home"
+#~ msgstr "Verzorgingshuis"
diff --git a/i18n/po/nn.po b/i18n/po/nn.po
index cdc161b..9c2a64c 100644
--- a/i18n/po/nn.po
+++ b/i18n/po/nn.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: josm\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-12-31 03:40+0100\n"
+"POT-Creation-Date: 2016-01-06 03:38+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: 2015-12-31 04:53+0000\n"
-"X-Generator: Launchpad (build 17865)\n"
+"X-Launchpad-Export-Date: 2016-01-06 04:54+0000\n"
+"X-Generator: Launchpad (build 17876)\n"
 "Language: nn\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -1056,9 +1056,6 @@ msgstr ""
 msgid "Overpass query: "
 msgstr ""
 
-msgid "Overpass server: "
-msgstr ""
-
 msgid "Paste"
 msgstr ""
 
@@ -1348,6 +1345,9 @@ msgstr ""
 msgid "Split a way at the selected node."
 msgstr ""
 
+msgid "Cannot split since another split operation is already in progress"
+msgstr ""
+
 msgid ""
 "The current selection cannot be used for splitting - no node is selected."
 msgstr ""
@@ -1459,6 +1459,27 @@ msgid ""
 "own copy and all nodes will be selected."
 msgstr ""
 
+msgid "Existing node"
+msgstr ""
+
+msgid "Both nodes"
+msgstr ""
+
+msgid "New node"
+msgstr ""
+
+msgid "Tags / Memberships"
+msgstr ""
+
+msgid "Unglue"
+msgstr ""
+
+msgid "Where should the tags of the node be put?"
+msgstr ""
+
+msgid "Where should the memberships of this node be put?"
+msgstr ""
+
 msgid "Unglued Node"
 msgstr ""
 
@@ -3049,6 +3070,15 @@ msgstr ""
 msgid "Restoring files"
 msgstr ""
 
+msgid "Unable to delete backup file {0}"
+msgstr ""
+
+msgid "Unable to delete PID file {0}"
+msgstr ""
+
+msgid "Unable to delete archived backup file {0}"
+msgstr ""
+
 msgid "Illegal latitude value ''{0}''"
 msgstr ""
 
@@ -4207,6 +4237,9 @@ msgstr ""
 msgid "No \"to\" way found"
 msgstr ""
 
+msgid "\"from\" way equals \"to\" way"
+msgstr ""
+
 msgid "No \"via\" node or way found"
 msgstr ""
 
@@ -7004,9 +7037,6 @@ msgstr ""
 msgid "Tags: {0} / Memberships: {1}"
 msgstr ""
 
-msgid "Tags / Memberships"
-msgstr ""
-
 msgid "Delete the selected key in all objects"
 msgstr ""
 
@@ -11611,6 +11641,15 @@ msgstr ""
 msgid "Please enter the OSM API URL."
 msgstr ""
 
+msgid "Use Overpass server for object downloads"
+msgstr ""
+
+msgid "Overpass server: "
+msgstr ""
+
+msgid "Overpass server"
+msgstr ""
+
 msgid "Proxy settings"
 msgstr ""
 
@@ -13749,6 +13788,9 @@ msgstr ""
 msgid "reserved"
 msgstr ""
 
+msgid "Unable to delete old preferences file {0}"
+msgstr ""
+
 msgid "Outdated Java version"
 msgstr ""
 
@@ -13840,6 +13882,9 @@ msgid ""
 "contain any JOSM object or suitable text. </p></html>"
 msgstr ""
 
+msgid "Unable to delete file {0}"
+msgstr ""
+
 msgid "ms"
 msgstr ""
 
@@ -16954,6 +16999,9 @@ msgstr ""
 msgid "Tourist buses"
 msgstr ""
 
+msgid "Max. speed Heavy Goods Vehicles (km/h)"
+msgstr ""
+
 msgid "Min. speed (km/h)"
 msgstr ""
 
@@ -19251,12 +19299,6 @@ msgstr ""
 msgid "Dentist"
 msgstr ""
 
-msgid "Nursing Home"
-msgstr ""
-
-msgid "Retirement Home"
-msgstr ""
-
 msgid "Pharmacy"
 msgstr ""
 
@@ -19284,6 +19326,31 @@ msgstr ""
 msgid "Veterinary"
 msgstr ""
 
+msgid "Social Facility"
+msgstr ""
+
+msgid "Nursing Home"
+msgstr ""
+
+msgid "Group Home"
+msgstr ""
+
+msgid "For"
+msgstr ""
+
+msgid "Assisted Living"
+msgstr ""
+
+msgid "Outreach"
+msgstr ""
+
+msgctxt "social_facility"
+msgid "Shelter"
+msgstr ""
+
+msgid "Food Bank"
+msgstr ""
+
 msgid "Toilets/Restrooms"
 msgstr ""
 
@@ -19326,6 +19393,13 @@ msgstr ""
 msgid "urinal"
 msgstr ""
 
+msgctxt "toilets"
+msgid "Diaper"
+msgstr ""
+
+msgid "room"
+msgstr ""
+
 msgid "Post Box"
 msgstr ""
 
@@ -23363,24 +23437,24 @@ msgstr ""
 msgid "Download GPX track from openstreetmap.org"
 msgstr ""
 
+msgid "Download Track"
+msgstr ""
+
+msgid "Filename"
+msgstr ""
+
 msgid ""
 "Error occurred while parsing gpx file {0}. Only a part of the file will be "
 "available."
 msgstr ""
 
-msgid "Invalid URL {0}"
-msgstr ""
-
 msgid "Error fetching URL {0}"
 msgstr ""
 
 msgid "Error parsing data from URL {0}"
 msgstr ""
 
-msgid "Download Track"
-msgstr ""
-
-msgid "Filename"
+msgid "Invalid URL {0}"
 msgstr ""
 
 msgid "Private (only shared as anonymous, unordered points)"
@@ -23430,9 +23504,6 @@ msgstr ""
 msgid "Uploading trace ..."
 msgstr ""
 
-msgid "Connecting..."
-msgstr ""
-
 msgid "Upload canceled"
 msgstr ""
 
@@ -27871,6 +27942,69 @@ msgstr ""
 msgid "Please load some photos."
 msgstr ""
 
+msgid "Edit photo GPS data"
+msgstr ""
+
+msgid "Edit GPS data of selected photo."
+msgstr ""
+
+msgid "Edit Photo GPS Data"
+msgstr ""
+
+msgid "Please select an image first."
+msgstr ""
+
+msgid "No image selected"
+msgstr ""
+
+msgid "(Empty values delete the according fields.)"
+msgstr ""
+
+msgid "coordinates"
+msgstr ""
+
+msgid "Latitude and longitude"
+msgstr ""
+
+msgid "Edit Image Coordinates"
+msgstr ""
+
+msgid "Edit coordinates in separate editor"
+msgstr ""
+
+msgid "altitude"
+msgstr ""
+
+msgid "Altitude:"
+msgstr ""
+
+msgid "speed"
+msgstr ""
+
+msgid "positive number or empty"
+msgstr ""
+
+msgid "Speed:"
+msgstr ""
+
+msgid "direction"
+msgstr ""
+
+msgid "range -360.0 .. 360.0, or empty"
+msgstr ""
+
+msgid "Direction:"
+msgstr ""
+
+msgid "°"
+msgstr ""
+
+msgid "Undo changes made in this dialog"
+msgstr ""
+
+msgid "Reload GPS data from image file"
+msgstr ""
+
 msgid "New layer for untagged images"
 msgstr ""
 
@@ -30887,9 +31021,6 @@ msgstr ""
 msgid "Fetches all coordinates from Wikipedia in the current view"
 msgstr ""
 
-msgid "coordinates"
-msgstr ""
-
 msgid "Category"
 msgstr ""
 
diff --git a/i18n/po/oc.po b/i18n/po/oc.po
index 87f357e..e0c02f3 100644
--- a/i18n/po/oc.po
+++ b/i18n/po/oc.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: josm\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-12-31 03:40+0100\n"
+"POT-Creation-Date: 2016-01-06 03:38+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: 2015-12-31 04:54+0000\n"
-"X-Generator: Launchpad (build 17865)\n"
+"X-Launchpad-Export-Date: 2016-01-06 04:55+0000\n"
+"X-Generator: Launchpad (build 17876)\n"
 "Language: \n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -1063,9 +1063,6 @@ msgstr ""
 msgid "Overpass query: "
 msgstr ""
 
-msgid "Overpass server: "
-msgstr ""
-
 msgid "Paste"
 msgstr "Empegar"
 
@@ -1355,6 +1352,9 @@ msgstr "Copar lo camin"
 msgid "Split a way at the selected node."
 msgstr ""
 
+msgid "Cannot split since another split operation is already in progress"
+msgstr ""
+
 msgid ""
 "The current selection cannot be used for splitting - no node is selected."
 msgstr ""
@@ -1466,6 +1466,27 @@ msgid ""
 "own copy and all nodes will be selected."
 msgstr ""
 
+msgid "Existing node"
+msgstr ""
+
+msgid "Both nodes"
+msgstr ""
+
+msgid "New node"
+msgstr ""
+
+msgid "Tags / Memberships"
+msgstr ""
+
+msgid "Unglue"
+msgstr ""
+
+msgid "Where should the tags of the node be put?"
+msgstr ""
+
+msgid "Where should the memberships of this node be put?"
+msgstr ""
+
 msgid "Unglued Node"
 msgstr ""
 
@@ -3056,6 +3077,15 @@ msgstr ""
 msgid "Restoring files"
 msgstr ""
 
+msgid "Unable to delete backup file {0}"
+msgstr ""
+
+msgid "Unable to delete PID file {0}"
+msgstr ""
+
+msgid "Unable to delete archived backup file {0}"
+msgstr ""
+
 msgid "Illegal latitude value ''{0}''"
 msgstr ""
 
@@ -4214,6 +4244,9 @@ msgstr ""
 msgid "No \"to\" way found"
 msgstr ""
 
+msgid "\"from\" way equals \"to\" way"
+msgstr ""
+
 msgid "No \"via\" node or way found"
 msgstr ""
 
@@ -7011,9 +7044,6 @@ msgstr ""
 msgid "Tags: {0} / Memberships: {1}"
 msgstr ""
 
-msgid "Tags / Memberships"
-msgstr ""
-
 msgid "Delete the selected key in all objects"
 msgstr ""
 
@@ -11620,6 +11650,15 @@ msgstr ""
 msgid "Please enter the OSM API URL."
 msgstr ""
 
+msgid "Use Overpass server for object downloads"
+msgstr ""
+
+msgid "Overpass server: "
+msgstr ""
+
+msgid "Overpass server"
+msgstr ""
+
 msgid "Proxy settings"
 msgstr ""
 
@@ -13758,6 +13797,9 @@ msgstr ""
 msgid "reserved"
 msgstr ""
 
+msgid "Unable to delete old preferences file {0}"
+msgstr ""
+
 msgid "Outdated Java version"
 msgstr ""
 
@@ -13849,6 +13891,9 @@ msgid ""
 "contain any JOSM object or suitable text. </p></html>"
 msgstr ""
 
+msgid "Unable to delete file {0}"
+msgstr ""
+
 msgid "ms"
 msgstr ""
 
@@ -16963,6 +17008,9 @@ msgstr ""
 msgid "Tourist buses"
 msgstr ""
 
+msgid "Max. speed Heavy Goods Vehicles (km/h)"
+msgstr ""
+
 msgid "Min. speed (km/h)"
 msgstr ""
 
@@ -19260,12 +19308,6 @@ msgstr ""
 msgid "Dentist"
 msgstr ""
 
-msgid "Nursing Home"
-msgstr ""
-
-msgid "Retirement Home"
-msgstr ""
-
 msgid "Pharmacy"
 msgstr ""
 
@@ -19293,6 +19335,31 @@ msgstr ""
 msgid "Veterinary"
 msgstr ""
 
+msgid "Social Facility"
+msgstr ""
+
+msgid "Nursing Home"
+msgstr ""
+
+msgid "Group Home"
+msgstr ""
+
+msgid "For"
+msgstr ""
+
+msgid "Assisted Living"
+msgstr ""
+
+msgid "Outreach"
+msgstr ""
+
+msgctxt "social_facility"
+msgid "Shelter"
+msgstr ""
+
+msgid "Food Bank"
+msgstr ""
+
 msgid "Toilets/Restrooms"
 msgstr ""
 
@@ -19335,6 +19402,13 @@ msgstr ""
 msgid "urinal"
 msgstr ""
 
+msgctxt "toilets"
+msgid "Diaper"
+msgstr ""
+
+msgid "room"
+msgstr ""
+
 msgid "Post Box"
 msgstr ""
 
@@ -23372,26 +23446,26 @@ msgstr ""
 msgid "Download GPX track from openstreetmap.org"
 msgstr ""
 
+msgid "Download Track"
+msgstr ""
+
+msgid "Filename"
+msgstr "Nom del fichièr"
+
 msgid ""
 "Error occurred while parsing gpx file {0}. Only a part of the file will be "
 "available."
 msgstr ""
 
-msgid "Invalid URL {0}"
-msgstr ""
-
 msgid "Error fetching URL {0}"
 msgstr ""
 
 msgid "Error parsing data from URL {0}"
 msgstr ""
 
-msgid "Download Track"
+msgid "Invalid URL {0}"
 msgstr ""
 
-msgid "Filename"
-msgstr "Nom del fichièr"
-
 msgid "Private (only shared as anonymous, unordered points)"
 msgstr ""
 
@@ -23439,9 +23513,6 @@ msgstr ""
 msgid "Uploading trace ..."
 msgstr ""
 
-msgid "Connecting..."
-msgstr ""
-
 msgid "Upload canceled"
 msgstr ""
 
@@ -27880,6 +27951,69 @@ msgstr ""
 msgid "Please load some photos."
 msgstr ""
 
+msgid "Edit photo GPS data"
+msgstr ""
+
+msgid "Edit GPS data of selected photo."
+msgstr ""
+
+msgid "Edit Photo GPS Data"
+msgstr ""
+
+msgid "Please select an image first."
+msgstr ""
+
+msgid "No image selected"
+msgstr ""
+
+msgid "(Empty values delete the according fields.)"
+msgstr ""
+
+msgid "coordinates"
+msgstr ""
+
+msgid "Latitude and longitude"
+msgstr ""
+
+msgid "Edit Image Coordinates"
+msgstr ""
+
+msgid "Edit coordinates in separate editor"
+msgstr ""
+
+msgid "altitude"
+msgstr ""
+
+msgid "Altitude:"
+msgstr ""
+
+msgid "speed"
+msgstr ""
+
+msgid "positive number or empty"
+msgstr ""
+
+msgid "Speed:"
+msgstr ""
+
+msgid "direction"
+msgstr ""
+
+msgid "range -360.0 .. 360.0, or empty"
+msgstr ""
+
+msgid "Direction:"
+msgstr ""
+
+msgid "°"
+msgstr ""
+
+msgid "Undo changes made in this dialog"
+msgstr ""
+
+msgid "Reload GPS data from image file"
+msgstr ""
+
 msgid "New layer for untagged images"
 msgstr ""
 
@@ -30896,9 +31030,6 @@ msgstr ""
 msgid "Fetches all coordinates from Wikipedia in the current view"
 msgstr ""
 
-msgid "coordinates"
-msgstr ""
-
 msgid "Category"
 msgstr ""
 
diff --git a/i18n/po/pa.po b/i18n/po/pa.po
index 1641599..0b1cffa 100644
--- a/i18n/po/pa.po
+++ b/i18n/po/pa.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: josm\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-12-31 03:40+0100\n"
+"POT-Creation-Date: 2016-01-06 03:38+0100\n"
 "PO-Revision-Date: 2011-05-06 15:52+0000\n"
 "Last-Translator: A S Alam <aalam at users.sf.net>\n"
 "Language-Team: Punjabi <pa at li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Launchpad-Export-Date: 2015-12-31 04:55+0000\n"
-"X-Generator: Launchpad (build 17865)\n"
+"X-Launchpad-Export-Date: 2016-01-06 04:56+0000\n"
+"X-Generator: Launchpad (build 17876)\n"
 "Language: pa\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -1056,9 +1056,6 @@ msgstr ""
 msgid "Overpass query: "
 msgstr ""
 
-msgid "Overpass server: "
-msgstr ""
-
 msgid "Paste"
 msgstr ""
 
@@ -1348,6 +1345,9 @@ msgstr ""
 msgid "Split a way at the selected node."
 msgstr ""
 
+msgid "Cannot split since another split operation is already in progress"
+msgstr ""
+
 msgid ""
 "The current selection cannot be used for splitting - no node is selected."
 msgstr ""
@@ -1459,6 +1459,27 @@ msgid ""
 "own copy and all nodes will be selected."
 msgstr ""
 
+msgid "Existing node"
+msgstr ""
+
+msgid "Both nodes"
+msgstr ""
+
+msgid "New node"
+msgstr ""
+
+msgid "Tags / Memberships"
+msgstr ""
+
+msgid "Unglue"
+msgstr ""
+
+msgid "Where should the tags of the node be put?"
+msgstr ""
+
+msgid "Where should the memberships of this node be put?"
+msgstr ""
+
 msgid "Unglued Node"
 msgstr ""
 
@@ -3049,6 +3070,15 @@ msgstr ""
 msgid "Restoring files"
 msgstr ""
 
+msgid "Unable to delete backup file {0}"
+msgstr ""
+
+msgid "Unable to delete PID file {0}"
+msgstr ""
+
+msgid "Unable to delete archived backup file {0}"
+msgstr ""
+
 msgid "Illegal latitude value ''{0}''"
 msgstr ""
 
@@ -4207,6 +4237,9 @@ msgstr ""
 msgid "No \"to\" way found"
 msgstr ""
 
+msgid "\"from\" way equals \"to\" way"
+msgstr ""
+
 msgid "No \"via\" node or way found"
 msgstr ""
 
@@ -7004,9 +7037,6 @@ msgstr ""
 msgid "Tags: {0} / Memberships: {1}"
 msgstr ""
 
-msgid "Tags / Memberships"
-msgstr ""
-
 msgid "Delete the selected key in all objects"
 msgstr ""
 
@@ -11611,6 +11641,15 @@ msgstr ""
 msgid "Please enter the OSM API URL."
 msgstr ""
 
+msgid "Use Overpass server for object downloads"
+msgstr ""
+
+msgid "Overpass server: "
+msgstr ""
+
+msgid "Overpass server"
+msgstr ""
+
 msgid "Proxy settings"
 msgstr ""
 
@@ -13749,6 +13788,9 @@ msgstr ""
 msgid "reserved"
 msgstr ""
 
+msgid "Unable to delete old preferences file {0}"
+msgstr ""
+
 msgid "Outdated Java version"
 msgstr ""
 
@@ -13840,6 +13882,9 @@ msgid ""
 "contain any JOSM object or suitable text. </p></html>"
 msgstr ""
 
+msgid "Unable to delete file {0}"
+msgstr ""
+
 msgid "ms"
 msgstr ""
 
@@ -16954,6 +16999,9 @@ msgstr ""
 msgid "Tourist buses"
 msgstr ""
 
+msgid "Max. speed Heavy Goods Vehicles (km/h)"
+msgstr ""
+
 msgid "Min. speed (km/h)"
 msgstr ""
 
@@ -19251,12 +19299,6 @@ msgstr ""
 msgid "Dentist"
 msgstr ""
 
-msgid "Nursing Home"
-msgstr ""
-
-msgid "Retirement Home"
-msgstr ""
-
 msgid "Pharmacy"
 msgstr ""
 
@@ -19284,6 +19326,31 @@ msgstr ""
 msgid "Veterinary"
 msgstr ""
 
+msgid "Social Facility"
+msgstr ""
+
+msgid "Nursing Home"
+msgstr ""
+
+msgid "Group Home"
+msgstr ""
+
+msgid "For"
+msgstr ""
+
+msgid "Assisted Living"
+msgstr ""
+
+msgid "Outreach"
+msgstr ""
+
+msgctxt "social_facility"
+msgid "Shelter"
+msgstr ""
+
+msgid "Food Bank"
+msgstr ""
+
 msgid "Toilets/Restrooms"
 msgstr ""
 
@@ -19326,6 +19393,13 @@ msgstr ""
 msgid "urinal"
 msgstr ""
 
+msgctxt "toilets"
+msgid "Diaper"
+msgstr ""
+
+msgid "room"
+msgstr ""
+
 msgid "Post Box"
 msgstr ""
 
@@ -23363,24 +23437,24 @@ msgstr ""
 msgid "Download GPX track from openstreetmap.org"
 msgstr ""
 
+msgid "Download Track"
+msgstr ""
+
+msgid "Filename"
+msgstr ""
+
 msgid ""
 "Error occurred while parsing gpx file {0}. Only a part of the file will be "
 "available."
 msgstr ""
 
-msgid "Invalid URL {0}"
-msgstr ""
-
 msgid "Error fetching URL {0}"
 msgstr ""
 
 msgid "Error parsing data from URL {0}"
 msgstr ""
 
-msgid "Download Track"
-msgstr ""
-
-msgid "Filename"
+msgid "Invalid URL {0}"
 msgstr ""
 
 msgid "Private (only shared as anonymous, unordered points)"
@@ -23430,9 +23504,6 @@ msgstr ""
 msgid "Uploading trace ..."
 msgstr ""
 
-msgid "Connecting..."
-msgstr ""
-
 msgid "Upload canceled"
 msgstr ""
 
@@ -27871,6 +27942,69 @@ msgstr ""
 msgid "Please load some photos."
 msgstr ""
 
+msgid "Edit photo GPS data"
+msgstr ""
+
+msgid "Edit GPS data of selected photo."
+msgstr ""
+
+msgid "Edit Photo GPS Data"
+msgstr ""
+
+msgid "Please select an image first."
+msgstr ""
+
+msgid "No image selected"
+msgstr ""
+
+msgid "(Empty values delete the according fields.)"
+msgstr ""
+
+msgid "coordinates"
+msgstr ""
+
+msgid "Latitude and longitude"
+msgstr ""
+
+msgid "Edit Image Coordinates"
+msgstr ""
+
+msgid "Edit coordinates in separate editor"
+msgstr ""
+
+msgid "altitude"
+msgstr ""
+
+msgid "Altitude:"
+msgstr ""
+
+msgid "speed"
+msgstr ""
+
+msgid "positive number or empty"
+msgstr ""
+
+msgid "Speed:"
+msgstr ""
+
+msgid "direction"
+msgstr ""
+
+msgid "range -360.0 .. 360.0, or empty"
+msgstr ""
+
+msgid "Direction:"
+msgstr ""
+
+msgid "°"
+msgstr ""
+
+msgid "Undo changes made in this dialog"
+msgstr ""
+
+msgid "Reload GPS data from image file"
+msgstr ""
+
 msgid "New layer for untagged images"
 msgstr ""
 
@@ -30887,9 +31021,6 @@ msgstr ""
 msgid "Fetches all coordinates from Wikipedia in the current view"
 msgstr ""
 
-msgid "coordinates"
-msgstr ""
-
 msgid "Category"
 msgstr ""
 
diff --git a/i18n/po/pl.po b/i18n/po/pl.po
index 36bd5de..e7eacc4 100644
--- a/i18n/po/pl.po
+++ b/i18n/po/pl.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: josm\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-12-31 03:40+0100\n"
+"POT-Creation-Date: 2016-01-06 03:38+0100\n"
 "PO-Revision-Date: 2015-12-29 10:34+0000\n"
 "Last-Translator: Piotr Strębski <strebski at o2.pl>\n"
 "Language-Team: Polish <josm-lang-pl at googlegroups.com>\n"
@@ -16,8 +16,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: 2015-12-31 04:56+0000\n"
-"X-Generator: Launchpad (build 17865)\n"
+"X-Launchpad-Export-Date: 2016-01-06 04:57+0000\n"
+"X-Generator: Launchpad (build 17876)\n"
 "Language: pl\n"
 "X-Poedit-Bookmarks: 1098,-1,-1,-1,-1,-1,-1,-1,-1,-1\n"
 "X-Poedit-Basepath: /home/mfloryan/dev/josm/i18n/\n"
@@ -1151,9 +1151,6 @@ msgstr "Błąd przetwarzania"
 msgid "Overpass query: "
 msgstr "Zapytanie Overpass: "
 
-msgid "Overpass server: "
-msgstr "Serwer Overpass: "
-
 msgid "Paste"
 msgstr "Wklej"
 
@@ -1462,6 +1459,9 @@ msgstr "Przetnij linię"
 msgid "Split a way at the selected node."
 msgstr "Przecina linię w zaznaczonym węźle"
 
+msgid "Cannot split since another split operation is already in progress"
+msgstr ""
+
 msgid ""
 "The current selection cannot be used for splitting - no node is selected."
 msgstr ""
@@ -1600,6 +1600,27 @@ msgstr ""
 "W przeciwnym wypadku, wszystkie linie zostaną skopiowane i wszystkie\n"
 "węzły zostaną wybrane."
 
+msgid "Existing node"
+msgstr ""
+
+msgid "Both nodes"
+msgstr ""
+
+msgid "New node"
+msgstr ""
+
+msgid "Tags / Memberships"
+msgstr "Znaczniki / członkowie"
+
+msgid "Unglue"
+msgstr ""
+
+msgid "Where should the tags of the node be put?"
+msgstr ""
+
+msgid "Where should the memberships of this node be put?"
+msgstr ""
+
 msgid "Unglued Node"
 msgstr "Rozdzielony węzeł"
 
@@ -3365,6 +3386,15 @@ msgstr "Twoja praca została zapisana automatycznie."
 msgid "Restoring files"
 msgstr "Odzyskiwanie plików"
 
+msgid "Unable to delete backup file {0}"
+msgstr ""
+
+msgid "Unable to delete PID file {0}"
+msgstr ""
+
+msgid "Unable to delete archived backup file {0}"
+msgstr ""
+
 msgid "Illegal latitude value ''{0}''"
 msgstr "Niewłaściwa wartość szerokości geograficznej \"{0}\""
 
@@ -4608,6 +4638,9 @@ msgstr "Nie znaleziono linii \"from\""
 msgid "No \"to\" way found"
 msgstr "Nie znaleziono linii z rolą \"to\""
 
+msgid "\"from\" way equals \"to\" way"
+msgstr ""
+
 msgid "No \"via\" node or way found"
 msgstr "Nie znaleziono linii lub węzła z rolą \"via\""
 
@@ -7583,9 +7616,6 @@ msgstr "Obiekty: {2} / Znaczniki: {0} / Członkowie: {1}"
 msgid "Tags: {0} / Memberships: {1}"
 msgstr "Znaczniki: {0} / Członkowie: {1}"
 
-msgid "Tags / Memberships"
-msgstr "Znaczniki / członkowie"
-
 msgid "Delete the selected key in all objects"
 msgstr "Usuń wybrany klucz ze wszystkich obiektów."
 
@@ -12624,6 +12654,15 @@ msgstr "Aktualna wartość nie jest prawidłowym adresem URL"
 msgid "Please enter the OSM API URL."
 msgstr "Podaj OSM API URL."
 
+msgid "Use Overpass server for object downloads"
+msgstr ""
+
+msgid "Overpass server: "
+msgstr "Serwer Overpass: "
+
+msgid "Overpass server"
+msgstr ""
+
 msgid "Proxy settings"
 msgstr "Ustawienia proxy"
 
@@ -14883,6 +14922,9 @@ msgstr ""
 msgid "reserved"
 msgstr "zarezerwowane"
 
+msgid "Unable to delete old preferences file {0}"
+msgstr ""
+
 msgid "Outdated Java version"
 msgstr "Nieaktualna wersja Javy"
 
@@ -14984,6 +15026,9 @@ msgid ""
 "contain any JOSM object or suitable text. </p></html>"
 msgstr ""
 
+msgid "Unable to delete file {0}"
+msgstr ""
+
 msgid "ms"
 msgstr "ms"
 
@@ -18128,6 +18173,9 @@ msgstr "transport publiczny"
 msgid "Tourist buses"
 msgstr "Autokary turystyczne"
 
+msgid "Max. speed Heavy Goods Vehicles (km/h)"
+msgstr ""
+
 msgid "Min. speed (km/h)"
 msgstr "Min. prędkość (km/h)"
 
@@ -20427,12 +20475,6 @@ msgstr "Przychodnia lekarska"
 msgid "Dentist"
 msgstr "Dentysta"
 
-msgid "Nursing Home"
-msgstr "Dom opieki"
-
-msgid "Retirement Home"
-msgstr "Dom seniora"
-
 msgid "Pharmacy"
 msgstr "Apteka"
 
@@ -20460,6 +20502,31 @@ msgstr "(Podaj razem z kodem kraju, np.: +12-345-67890)"
 msgid "Veterinary"
 msgstr "Weterynarz"
 
+msgid "Social Facility"
+msgstr ""
+
+msgid "Nursing Home"
+msgstr "Dom opieki"
+
+msgid "Group Home"
+msgstr ""
+
+msgid "For"
+msgstr ""
+
+msgid "Assisted Living"
+msgstr ""
+
+msgid "Outreach"
+msgstr ""
+
+msgctxt "social_facility"
+msgid "Shelter"
+msgstr ""
+
+msgid "Food Bank"
+msgstr ""
+
 msgid "Toilets/Restrooms"
 msgstr "Toalety"
 
@@ -20502,6 +20569,13 @@ msgstr ""
 msgid "urinal"
 msgstr ""
 
+msgctxt "toilets"
+msgid "Diaper"
+msgstr ""
+
+msgid "room"
+msgstr ""
+
 msgid "Post Box"
 msgstr "Skrzynka pocztowa"
 
@@ -24547,25 +24621,25 @@ msgstr "Pobierz ślad..."
 msgid "Download GPX track from openstreetmap.org"
 msgstr "Pobierz ślad GPX z openstreetmap.org"
 
+msgid "Download Track"
+msgstr ""
+
+msgid "Filename"
+msgstr "Nazwa pliku"
+
 msgid ""
 "Error occurred while parsing gpx file {0}. Only a part of the file will be "
 "available."
 msgstr ""
 
-msgid "Invalid URL {0}"
-msgstr "Nieprawidłowy URL {0}"
-
 msgid "Error fetching URL {0}"
 msgstr ""
 
 msgid "Error parsing data from URL {0}"
 msgstr ""
 
-msgid "Download Track"
-msgstr ""
-
-msgid "Filename"
-msgstr "Nazwa pliku"
+msgid "Invalid URL {0}"
+msgstr "Nieprawidłowy URL {0}"
 
 msgid "Private (only shared as anonymous, unordered points)"
 msgstr ""
@@ -24614,9 +24688,6 @@ msgstr "Nie wybrano żadnej warstwy GPX. Nie można wysłać sladu."
 msgid "Uploading trace ..."
 msgstr "Wysyłanie śladu..."
 
-msgid "Connecting..."
-msgstr "Łączenie..."
-
 msgid "Upload canceled"
 msgstr "Wysyłanie zostało anulowane"
 
@@ -29090,6 +29161,69 @@ msgstr ""
 msgid "Please load some photos."
 msgstr ""
 
+msgid "Edit photo GPS data"
+msgstr ""
+
+msgid "Edit GPS data of selected photo."
+msgstr ""
+
+msgid "Edit Photo GPS Data"
+msgstr ""
+
+msgid "Please select an image first."
+msgstr ""
+
+msgid "No image selected"
+msgstr ""
+
+msgid "(Empty values delete the according fields.)"
+msgstr ""
+
+msgid "coordinates"
+msgstr "współrzędne"
+
+msgid "Latitude and longitude"
+msgstr ""
+
+msgid "Edit Image Coordinates"
+msgstr ""
+
+msgid "Edit coordinates in separate editor"
+msgstr ""
+
+msgid "altitude"
+msgstr ""
+
+msgid "Altitude:"
+msgstr ""
+
+msgid "speed"
+msgstr ""
+
+msgid "positive number or empty"
+msgstr ""
+
+msgid "Speed:"
+msgstr ""
+
+msgid "direction"
+msgstr ""
+
+msgid "range -360.0 .. 360.0, or empty"
+msgstr ""
+
+msgid "Direction:"
+msgstr ""
+
+msgid "°"
+msgstr ""
+
+msgid "Undo changes made in this dialog"
+msgstr ""
+
+msgid "Reload GPS data from image file"
+msgstr ""
+
 msgid "New layer for untagged images"
 msgstr ""
 
@@ -32210,9 +32344,6 @@ msgstr "{0}.Wikipedia.org: {1}"
 msgid "Fetches all coordinates from Wikipedia in the current view"
 msgstr "Pobiera wszystkie współrzędne z Wikipedii dla aktualnego widoku"
 
-msgid "coordinates"
-msgstr "współrzędne"
-
 msgid "Category"
 msgstr "Kategoria"
 
@@ -32259,3 +32390,6 @@ msgstr "Jedź!"
 
 msgid "Drive a race car on this layer"
 msgstr "Prowadź wyścigówkę po tej warstwie"
+
+#~ msgid "Retirement Home"
+#~ msgstr "Dom seniora"
diff --git a/i18n/po/pt.po b/i18n/po/pt.po
index 42b49c3..64a7c49 100644
--- a/i18n/po/pt.po
+++ b/i18n/po/pt.po
@@ -7,16 +7,16 @@ msgid ""
 msgstr ""
 "Project-Id-Version: josm\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-12-31 03:40+0100\n"
-"PO-Revision-Date: 2015-12-17 02:31+0000\n"
+"POT-Creation-Date: 2016-01-06 03:38+0100\n"
+"PO-Revision-Date: 2016-01-04 06:17+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: 2015-12-31 04:56+0000\n"
-"X-Generator: Launchpad (build 17865)\n"
+"X-Launchpad-Export-Date: 2016-01-06 04:57+0000\n"
+"X-Generator: Launchpad (build 17876)\n"
 "Language: pt\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -1165,9 +1165,6 @@ msgstr "Erro de processamento"
 msgid "Overpass query: "
 msgstr "Pedido Overpass: "
 
-msgid "Overpass server: "
-msgstr "Servidor Overpass: "
-
 msgid "Paste"
 msgstr "Colar"
 
@@ -1486,6 +1483,9 @@ msgstr "Dividir Linha"
 msgid "Split a way at the selected node."
 msgstr "Dividir linha no nó ou nós selecionados."
 
+msgid "Cannot split since another split operation is already in progress"
+msgstr ""
+
 msgid ""
 "The current selection cannot be used for splitting - no node is selected."
 msgstr ""
@@ -1616,6 +1616,27 @@ msgstr ""
 "ter\n"
 "a sua cópia e todos os nós serão selecionados."
 
+msgid "Existing node"
+msgstr ""
+
+msgid "Both nodes"
+msgstr ""
+
+msgid "New node"
+msgstr ""
+
+msgid "Tags / Memberships"
+msgstr "Etiquetas / Membros"
+
+msgid "Unglue"
+msgstr ""
+
+msgid "Where should the tags of the node be put?"
+msgstr ""
+
+msgid "Where should the memberships of this node be put?"
+msgstr ""
+
 msgid "Unglued Node"
 msgstr "Nó Desligado"
 
@@ -3364,6 +3385,15 @@ msgstr "Foi feita uma cópia de segurança"
 msgid "Restoring files"
 msgstr "A restaurar ficheiros"
 
+msgid "Unable to delete backup file {0}"
+msgstr ""
+
+msgid "Unable to delete PID file {0}"
+msgstr ""
+
+msgid "Unable to delete archived backup file {0}"
+msgstr ""
+
 msgid "Illegal latitude value ''{0}''"
 msgstr "Valor de latitude \"{0}\" incorreto"
 
@@ -4648,6 +4678,9 @@ msgstr "Falta o elemento com a função \"from\" (de)"
 msgid "No \"to\" way found"
 msgstr "Falta o elemento com a função \"to\" (para)"
 
+msgid "\"from\" way equals \"to\" way"
+msgstr ""
+
 msgid "No \"via\" node or way found"
 msgstr "Falta o elemento com a função \"via\" (através de)"
 
@@ -7721,9 +7754,6 @@ msgstr "Objetos: {2} / Etiquetas: {0} / Membros: {1}"
 msgid "Tags: {0} / Memberships: {1}"
 msgstr "Etiquetas: {0} / Membros: {1}"
 
-msgid "Tags / Memberships"
-msgstr "Etiquetas / Membros"
-
 msgid "Delete the selected key in all objects"
 msgstr "Eliminar as etiquetas selecionadas em todos os objetos selecionados"
 
@@ -12961,6 +12991,15 @@ msgstr "O URL atual não é um endereço válido"
 msgid "Please enter the OSM API URL."
 msgstr "Por favor introduza o endereço da API OSM."
 
+msgid "Use Overpass server for object downloads"
+msgstr ""
+
+msgid "Overpass server: "
+msgstr "Servidor Overpass: "
+
+msgid "Overpass server"
+msgstr ""
+
 msgid "Proxy settings"
 msgstr "Definições de Proxy"
 
@@ -15467,6 +15506,9 @@ msgstr "O URL não contém {0} válidos"
 msgid "reserved"
 msgstr "reservado"
 
+msgid "Unable to delete old preferences file {0}"
+msgstr ""
+
 msgid "Outdated Java version"
 msgstr "Versão do JAVA desatualizada"
 
@@ -15590,6 +15632,9 @@ msgstr ""
 "<html><p> Desculpe, mas não é possível colar etiquetas da memória porque não "
 "contém nenhum elemento do JOSM ou texto adequado. </p></html>"
 
+msgid "Unable to delete file {0}"
+msgstr ""
+
 msgid "ms"
 msgstr "ms"
 
@@ -18910,6 +18955,9 @@ msgstr "Transporte Público de Passageiros"
 msgid "Tourist buses"
 msgstr "Autocarros de turismo"
 
+msgid "Max. speed Heavy Goods Vehicles (km/h)"
+msgstr ""
+
 msgid "Min. speed (km/h)"
 msgstr "Velocidade mínima (km/h)"
 
@@ -20727,7 +20775,7 @@ msgid "ice_cream"
 msgstr "geladaria"
 
 msgid "Pub"
-msgstr "Bar"
+msgstr "Pub"
 
 msgid "Beer Garden"
 msgstr "Beer Garden (não existem em Portugal)"
@@ -21223,12 +21271,6 @@ msgstr "Médico Privado"
 msgid "Dentist"
 msgstr "Dentista"
 
-msgid "Nursing Home"
-msgstr "Lar de Terceira Idade (com cuidado médico permanenete)"
-
-msgid "Retirement Home"
-msgstr "Lar de Terceira Idade (sem cuidado médico permanenete)"
-
 msgid "Pharmacy"
 msgstr "Farmácia"
 
@@ -21257,6 +21299,31 @@ msgstr "(Usar código internacional, p.ex. +12-345-67890)"
 msgid "Veterinary"
 msgstr "Veterinário"
 
+msgid "Social Facility"
+msgstr ""
+
+msgid "Nursing Home"
+msgstr "Lar de Terceira Idade (com cuidado médico permanenete)"
+
+msgid "Group Home"
+msgstr ""
+
+msgid "For"
+msgstr ""
+
+msgid "Assisted Living"
+msgstr ""
+
+msgid "Outreach"
+msgstr ""
+
+msgctxt "social_facility"
+msgid "Shelter"
+msgstr ""
+
+msgid "Food Bank"
+msgstr ""
+
 msgid "Toilets/Restrooms"
 msgstr "Casas de Banho"
 
@@ -21299,6 +21366,13 @@ msgstr "agachado"
 msgid "urinal"
 msgstr "urinol"
 
+msgctxt "toilets"
+msgid "Diaper"
+msgstr ""
+
+msgid "room"
+msgstr ""
+
 msgid "Post Box"
 msgstr "Marco / caixa de correio"
 
@@ -25383,6 +25457,12 @@ msgstr "Descarregar Trilho GPS..."
 msgid "Download GPX track from openstreetmap.org"
 msgstr "Descarregar trilho GPS (GPX) do openstreetmap.org"
 
+msgid "Download Track"
+msgstr "Descarregar Trilho GPS"
+
+msgid "Filename"
+msgstr "Nome do ficheiro"
+
 msgid ""
 "Error occurred while parsing gpx file {0}. Only a part of the file will be "
 "available."
@@ -25390,20 +25470,14 @@ msgstr ""
 "Ocorreu um erro ao processar o ficheiro GPX {0}. Apenas estará disponível "
 "uma parte do ficheiro."
 
-msgid "Invalid URL {0}"
-msgstr "URL inválido {0}"
-
 msgid "Error fetching URL {0}"
 msgstr "Ocorreu um erro ao obter o endereço {0}"
 
 msgid "Error parsing data from URL {0}"
 msgstr "Ocorreu um erro ao processar os dados do endereço {0}"
 
-msgid "Download Track"
-msgstr "Descarregar Trilho GPS"
-
-msgid "Filename"
-msgstr "Nome do ficheiro"
+msgid "Invalid URL {0}"
+msgstr "URL inválido {0}"
 
 msgid "Private (only shared as anonymous, unordered points)"
 msgstr "Privado (partilhado apenas como anónimo, pontos GPS não ordenados)"
@@ -25461,9 +25535,6 @@ msgstr ""
 msgid "Uploading trace ..."
 msgstr "A enviar trilho GPS..."
 
-msgid "Connecting..."
-msgstr "A estabelecer a ligação..."
-
 msgid "Upload canceled"
 msgstr "Envio cancelado"
 
@@ -30308,6 +30379,69 @@ msgstr ""
 msgid "Please load some photos."
 msgstr "Por favor carregue algumas fotografias."
 
+msgid "Edit photo GPS data"
+msgstr ""
+
+msgid "Edit GPS data of selected photo."
+msgstr ""
+
+msgid "Edit Photo GPS Data"
+msgstr ""
+
+msgid "Please select an image first."
+msgstr ""
+
+msgid "No image selected"
+msgstr ""
+
+msgid "(Empty values delete the according fields.)"
+msgstr ""
+
+msgid "coordinates"
+msgstr "coordenadas"
+
+msgid "Latitude and longitude"
+msgstr ""
+
+msgid "Edit Image Coordinates"
+msgstr ""
+
+msgid "Edit coordinates in separate editor"
+msgstr ""
+
+msgid "altitude"
+msgstr ""
+
+msgid "Altitude:"
+msgstr ""
+
+msgid "speed"
+msgstr ""
+
+msgid "positive number or empty"
+msgstr ""
+
+msgid "Speed:"
+msgstr ""
+
+msgid "direction"
+msgstr ""
+
+msgid "range -360.0 .. 360.0, or empty"
+msgstr ""
+
+msgid "Direction:"
+msgstr ""
+
+msgid "°"
+msgstr ""
+
+msgid "Undo changes made in this dialog"
+msgstr ""
+
+msgid "Reload GPS data from image file"
+msgstr ""
+
 msgid "New layer for untagged images"
 msgstr ""
 
@@ -33650,9 +33784,6 @@ msgstr ""
 "Procura por artigos com coordenadas na Wikipédia que estejam na área de "
 "visualização do JOSM"
 
-msgid "coordinates"
-msgstr "coordenadas"
-
 msgid "Category"
 msgstr "Categoria"
 
@@ -33701,3 +33832,6 @@ msgid "Drive a race car on this layer"
 msgstr ""
 "Conduza um carro (necessário ter camada Bing ativa) e grave simultaneamente "
 "um trilho GPS do percurso (não envie para o OpenStreetMap!)"
+
+#~ msgid "Retirement Home"
+#~ msgstr "Lar de Terceira Idade (sem cuidado médico permanenete)"
diff --git a/i18n/po/pt_BR.po b/i18n/po/pt_BR.po
index e668645..41870f8 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: 2015-12-31 03:40+0100\n"
-"PO-Revision-Date: 2015-12-27 23:38+0000\n"
-"Last-Translator: Adrianojbr <adrianojbr at gmail.com>\n"
+"POT-Creation-Date: 2016-01-06 03:38+0100\n"
+"PO-Revision-Date: 2016-01-02 21:35+0000\n"
+"Last-Translator: Felipe L. <felipe.idj at hotmail.com>\n"
 "Language-Team: Português Brasileiro <gnome-pt_br-list at gnome.org>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n > 1;\n"
-"X-Launchpad-Export-Date: 2015-12-31 05:05+0000\n"
-"X-Generator: Launchpad (build 17865)\n"
+"X-Launchpad-Export-Date: 2016-01-06 05:07+0000\n"
+"X-Generator: Launchpad (build 17876)\n"
 "Language: pt_BR\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -1152,9 +1152,6 @@ msgstr ""
 msgid "Overpass query: "
 msgstr "Consulta superior: "
 
-msgid "Overpass server: "
-msgstr ""
-
 msgid "Paste"
 msgstr "Colar"
 
@@ -1464,6 +1461,9 @@ msgstr "Dividir Caminho"
 msgid "Split a way at the selected node."
 msgstr "Dividir caminho no nó selecionado."
 
+msgid "Cannot split since another split operation is already in progress"
+msgstr ""
+
 msgid ""
 "The current selection cannot be used for splitting - no node is selected."
 msgstr ""
@@ -1594,6 +1594,27 @@ msgstr ""
 "sua própria\n"
 "cópia e todos os nós serão selecionados."
 
+msgid "Existing node"
+msgstr ""
+
+msgid "Both nodes"
+msgstr ""
+
+msgid "New node"
+msgstr ""
+
+msgid "Tags / Memberships"
+msgstr "Tags / Membros"
+
+msgid "Unglue"
+msgstr ""
+
+msgid "Where should the tags of the node be put?"
+msgstr ""
+
+msgid "Where should the memberships of this node be put?"
+msgstr ""
+
 msgid "Unglued Node"
 msgstr "Nó não grudado"
 
@@ -3319,6 +3340,15 @@ msgstr "Suas modificações foram salvas automaticamente."
 msgid "Restoring files"
 msgstr "Restaurando arquivos"
 
+msgid "Unable to delete backup file {0}"
+msgstr ""
+
+msgid "Unable to delete PID file {0}"
+msgstr ""
+
+msgid "Unable to delete archived backup file {0}"
+msgstr ""
+
 msgid "Illegal latitude value ''{0}''"
 msgstr "Valor de latitude ilegal ''{0}''"
 
@@ -4582,6 +4612,9 @@ msgstr "Nenhuma via \"de\" encontrada"
 msgid "No \"to\" way found"
 msgstr "Nenhuma via \"para\" encontrada"
 
+msgid "\"from\" way equals \"to\" way"
+msgstr ""
+
 msgid "No \"via\" node or way found"
 msgstr "Nenhum nó \"via\" ou caminho encontrado"
 
@@ -5208,7 +5241,7 @@ msgstr "Buscar itens do menu"
 
 msgctxt "menu"
 msgid "Audio"
-msgstr ""
+msgstr "Áudio"
 
 msgid "Do not hide toolbar"
 msgstr "Não ocultar barra de ferramentas"
@@ -7625,9 +7658,6 @@ msgstr "Objetos: {2} / Tags: {0} / Membros: {1}"
 msgid "Tags: {0} / Memberships: {1}"
 msgstr "Tags: {0} / Membros: {1}"
 
-msgid "Tags / Memberships"
-msgstr "Tags / Membros"
-
 msgid "Delete the selected key in all objects"
 msgstr "Excluir a chave selecionada em todos objetos"
 
@@ -12785,6 +12815,15 @@ msgstr "O valor atual não é uma URL válida"
 msgid "Please enter the OSM API URL."
 msgstr "Por favor digite a URL da API do OSM."
 
+msgid "Use Overpass server for object downloads"
+msgstr ""
+
+msgid "Overpass server: "
+msgstr ""
+
+msgid "Overpass server"
+msgstr ""
+
 msgid "Proxy settings"
 msgstr "Configurações de Proxy"
 
@@ -15261,6 +15300,9 @@ msgstr "URL não contém válido {0}"
 msgid "reserved"
 msgstr "reservado"
 
+msgid "Unable to delete old preferences file {0}"
+msgstr ""
+
 msgid "Outdated Java version"
 msgstr "Versão desatualizada do Java"
 
@@ -15375,6 +15417,9 @@ msgstr ""
 "<html><p> Desculpe, é impossível colar etiquetas do buffer. Ele não contém "
 "qualquer objeto JOSM ou texto adequado. </ p></html>"
 
+msgid "Unable to delete file {0}"
+msgstr ""
+
 msgid "ms"
 msgstr "ms"
 
@@ -18627,6 +18672,9 @@ msgstr "Veículos de Serviço Público (psv)"
 msgid "Tourist buses"
 msgstr "Ônibus de turistas"
 
+msgid "Max. speed Heavy Goods Vehicles (km/h)"
+msgstr ""
+
 msgid "Min. speed (km/h)"
 msgstr "Velocidade mínima (km/h)"
 
@@ -20948,12 +20996,6 @@ msgstr "Consultório médico"
 msgid "Dentist"
 msgstr "Dentista"
 
-msgid "Nursing Home"
-msgstr "Lar de idosos"
-
-msgid "Retirement Home"
-msgstr "Casa de repouso"
-
 msgid "Pharmacy"
 msgstr "Farmácia"
 
@@ -20981,6 +21023,31 @@ msgstr "(Use código internacional, como +12-345-67890)"
 msgid "Veterinary"
 msgstr "Veterinária"
 
+msgid "Social Facility"
+msgstr ""
+
+msgid "Nursing Home"
+msgstr "Lar de idosos"
+
+msgid "Group Home"
+msgstr ""
+
+msgid "For"
+msgstr ""
+
+msgid "Assisted Living"
+msgstr ""
+
+msgid "Outreach"
+msgstr ""
+
+msgctxt "social_facility"
+msgid "Shelter"
+msgstr ""
+
+msgid "Food Bank"
+msgstr ""
+
 msgid "Toilets/Restrooms"
 msgstr "Banheiros"
 
@@ -21023,6 +21090,13 @@ msgstr "agachamento"
 msgid "urinal"
 msgstr "mictório"
 
+msgctxt "toilets"
+msgid "Diaper"
+msgstr ""
+
+msgid "room"
+msgstr ""
+
 msgid "Post Box"
 msgstr "Caixa de Correio"
 
@@ -25110,6 +25184,12 @@ msgstr "Baixando faixa..."
 msgid "Download GPX track from openstreetmap.org"
 msgstr "Baixar trilha GPX de openstreetmap.org"
 
+msgid "Download Track"
+msgstr "Baixando faixa"
+
+msgid "Filename"
+msgstr "Nome do arquivo"
+
 msgid ""
 "Error occurred while parsing gpx file {0}. Only a part of the file will be "
 "available."
@@ -25117,20 +25197,14 @@ msgstr ""
 "Ocorreu um erro ao analisar o arquivo gpx {0}. Apenas uma parte do arquivo "
 "estará disponível."
 
-msgid "Invalid URL {0}"
-msgstr "URL inválida {0}"
-
 msgid "Error fetching URL {0}"
 msgstr "Erro ao buscar URL {0}"
 
 msgid "Error parsing data from URL {0}"
 msgstr "Erro na análise de dados da URL {0}"
 
-msgid "Download Track"
-msgstr "Baixando faixa"
-
-msgid "Filename"
-msgstr "Nome do arquivo"
+msgid "Invalid URL {0}"
+msgstr "URL inválida {0}"
 
 msgid "Private (only shared as anonymous, unordered points)"
 msgstr "Privado (compartilhado apenas como anônimo, com pontos desordenados)"
@@ -25184,9 +25258,6 @@ msgstr "Nenhuma camada GPX selecionada. Não é possível enviar uma trilha."
 msgid "Uploading trace ..."
 msgstr "Enviando trilha ..."
 
-msgid "Connecting..."
-msgstr "Conectando..."
-
 msgid "Upload canceled"
 msgstr "Envio cancelado"
 
@@ -29992,6 +30063,69 @@ msgstr ""
 msgid "Please load some photos."
 msgstr "Por favor, carrega algumas fotos."
 
+msgid "Edit photo GPS data"
+msgstr ""
+
+msgid "Edit GPS data of selected photo."
+msgstr ""
+
+msgid "Edit Photo GPS Data"
+msgstr ""
+
+msgid "Please select an image first."
+msgstr ""
+
+msgid "No image selected"
+msgstr ""
+
+msgid "(Empty values delete the according fields.)"
+msgstr ""
+
+msgid "coordinates"
+msgstr "coordenadas"
+
+msgid "Latitude and longitude"
+msgstr ""
+
+msgid "Edit Image Coordinates"
+msgstr ""
+
+msgid "Edit coordinates in separate editor"
+msgstr ""
+
+msgid "altitude"
+msgstr ""
+
+msgid "Altitude:"
+msgstr ""
+
+msgid "speed"
+msgstr ""
+
+msgid "positive number or empty"
+msgstr ""
+
+msgid "Speed:"
+msgstr ""
+
+msgid "direction"
+msgstr ""
+
+msgid "range -360.0 .. 360.0, or empty"
+msgstr ""
+
+msgid "Direction:"
+msgstr ""
+
+msgid "°"
+msgstr ""
+
+msgid "Undo changes made in this dialog"
+msgstr ""
+
+msgid "Reload GPS data from image file"
+msgstr ""
+
 msgid "New layer for untagged images"
 msgstr "Nova camada para imagens sem tags"
 
@@ -33287,9 +33421,6 @@ msgstr "{0}.Wikipedia.org: {1}"
 msgid "Fetches all coordinates from Wikipedia in the current view"
 msgstr "Retorna todas as coordenadas de Wikipedia na visão atual"
 
-msgid "coordinates"
-msgstr "coordenadas"
-
 msgid "Category"
 msgstr "Categoria"
 
diff --git a/i18n/po/rm.po b/i18n/po/rm.po
index 0334221..05c0128 100644
--- a/i18n/po/rm.po
+++ b/i18n/po/rm.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: josm\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-12-31 03:40+0100\n"
+"POT-Creation-Date: 2016-01-06 03:38+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: 2015-12-31 04:57+0000\n"
-"X-Generator: Launchpad (build 17865)\n"
+"X-Launchpad-Export-Date: 2016-01-06 04:58+0000\n"
+"X-Generator: Launchpad (build 17876)\n"
 "Language: \n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -1056,9 +1056,6 @@ msgstr ""
 msgid "Overpass query: "
 msgstr ""
 
-msgid "Overpass server: "
-msgstr ""
-
 msgid "Paste"
 msgstr ""
 
@@ -1348,6 +1345,9 @@ msgstr ""
 msgid "Split a way at the selected node."
 msgstr ""
 
+msgid "Cannot split since another split operation is already in progress"
+msgstr ""
+
 msgid ""
 "The current selection cannot be used for splitting - no node is selected."
 msgstr ""
@@ -1459,6 +1459,27 @@ msgid ""
 "own copy and all nodes will be selected."
 msgstr ""
 
+msgid "Existing node"
+msgstr ""
+
+msgid "Both nodes"
+msgstr ""
+
+msgid "New node"
+msgstr ""
+
+msgid "Tags / Memberships"
+msgstr ""
+
+msgid "Unglue"
+msgstr ""
+
+msgid "Where should the tags of the node be put?"
+msgstr ""
+
+msgid "Where should the memberships of this node be put?"
+msgstr ""
+
 msgid "Unglued Node"
 msgstr ""
 
@@ -3049,6 +3070,15 @@ msgstr ""
 msgid "Restoring files"
 msgstr ""
 
+msgid "Unable to delete backup file {0}"
+msgstr ""
+
+msgid "Unable to delete PID file {0}"
+msgstr ""
+
+msgid "Unable to delete archived backup file {0}"
+msgstr ""
+
 msgid "Illegal latitude value ''{0}''"
 msgstr ""
 
@@ -4207,6 +4237,9 @@ msgstr ""
 msgid "No \"to\" way found"
 msgstr ""
 
+msgid "\"from\" way equals \"to\" way"
+msgstr ""
+
 msgid "No \"via\" node or way found"
 msgstr ""
 
@@ -7004,9 +7037,6 @@ msgstr ""
 msgid "Tags: {0} / Memberships: {1}"
 msgstr ""
 
-msgid "Tags / Memberships"
-msgstr ""
-
 msgid "Delete the selected key in all objects"
 msgstr ""
 
@@ -11611,6 +11641,15 @@ msgstr ""
 msgid "Please enter the OSM API URL."
 msgstr ""
 
+msgid "Use Overpass server for object downloads"
+msgstr ""
+
+msgid "Overpass server: "
+msgstr ""
+
+msgid "Overpass server"
+msgstr ""
+
 msgid "Proxy settings"
 msgstr ""
 
@@ -13749,6 +13788,9 @@ msgstr ""
 msgid "reserved"
 msgstr ""
 
+msgid "Unable to delete old preferences file {0}"
+msgstr ""
+
 msgid "Outdated Java version"
 msgstr ""
 
@@ -13840,6 +13882,9 @@ msgid ""
 "contain any JOSM object or suitable text. </p></html>"
 msgstr ""
 
+msgid "Unable to delete file {0}"
+msgstr ""
+
 msgid "ms"
 msgstr ""
 
@@ -16954,6 +16999,9 @@ msgstr ""
 msgid "Tourist buses"
 msgstr ""
 
+msgid "Max. speed Heavy Goods Vehicles (km/h)"
+msgstr ""
+
 msgid "Min. speed (km/h)"
 msgstr ""
 
@@ -19251,12 +19299,6 @@ msgstr ""
 msgid "Dentist"
 msgstr ""
 
-msgid "Nursing Home"
-msgstr ""
-
-msgid "Retirement Home"
-msgstr ""
-
 msgid "Pharmacy"
 msgstr ""
 
@@ -19284,6 +19326,31 @@ msgstr ""
 msgid "Veterinary"
 msgstr ""
 
+msgid "Social Facility"
+msgstr ""
+
+msgid "Nursing Home"
+msgstr ""
+
+msgid "Group Home"
+msgstr ""
+
+msgid "For"
+msgstr ""
+
+msgid "Assisted Living"
+msgstr ""
+
+msgid "Outreach"
+msgstr ""
+
+msgctxt "social_facility"
+msgid "Shelter"
+msgstr ""
+
+msgid "Food Bank"
+msgstr ""
+
 msgid "Toilets/Restrooms"
 msgstr ""
 
@@ -19326,6 +19393,13 @@ msgstr ""
 msgid "urinal"
 msgstr ""
 
+msgctxt "toilets"
+msgid "Diaper"
+msgstr ""
+
+msgid "room"
+msgstr ""
+
 msgid "Post Box"
 msgstr ""
 
@@ -23363,24 +23437,24 @@ msgstr ""
 msgid "Download GPX track from openstreetmap.org"
 msgstr ""
 
+msgid "Download Track"
+msgstr ""
+
+msgid "Filename"
+msgstr ""
+
 msgid ""
 "Error occurred while parsing gpx file {0}. Only a part of the file will be "
 "available."
 msgstr ""
 
-msgid "Invalid URL {0}"
-msgstr ""
-
 msgid "Error fetching URL {0}"
 msgstr ""
 
 msgid "Error parsing data from URL {0}"
 msgstr ""
 
-msgid "Download Track"
-msgstr ""
-
-msgid "Filename"
+msgid "Invalid URL {0}"
 msgstr ""
 
 msgid "Private (only shared as anonymous, unordered points)"
@@ -23430,9 +23504,6 @@ msgstr ""
 msgid "Uploading trace ..."
 msgstr ""
 
-msgid "Connecting..."
-msgstr ""
-
 msgid "Upload canceled"
 msgstr ""
 
@@ -27871,6 +27942,69 @@ msgstr ""
 msgid "Please load some photos."
 msgstr ""
 
+msgid "Edit photo GPS data"
+msgstr ""
+
+msgid "Edit GPS data of selected photo."
+msgstr ""
+
+msgid "Edit Photo GPS Data"
+msgstr ""
+
+msgid "Please select an image first."
+msgstr ""
+
+msgid "No image selected"
+msgstr ""
+
+msgid "(Empty values delete the according fields.)"
+msgstr ""
+
+msgid "coordinates"
+msgstr ""
+
+msgid "Latitude and longitude"
+msgstr ""
+
+msgid "Edit Image Coordinates"
+msgstr ""
+
+msgid "Edit coordinates in separate editor"
+msgstr ""
+
+msgid "altitude"
+msgstr ""
+
+msgid "Altitude:"
+msgstr ""
+
+msgid "speed"
+msgstr ""
+
+msgid "positive number or empty"
+msgstr ""
+
+msgid "Speed:"
+msgstr ""
+
+msgid "direction"
+msgstr ""
+
+msgid "range -360.0 .. 360.0, or empty"
+msgstr ""
+
+msgid "Direction:"
+msgstr ""
+
+msgid "°"
+msgstr ""
+
+msgid "Undo changes made in this dialog"
+msgstr ""
+
+msgid "Reload GPS data from image file"
+msgstr ""
+
 msgid "New layer for untagged images"
 msgstr ""
 
@@ -30887,9 +31021,6 @@ msgstr ""
 msgid "Fetches all coordinates from Wikipedia in the current view"
 msgstr ""
 
-msgid "coordinates"
-msgstr ""
-
 msgid "Category"
 msgstr ""
 
diff --git a/i18n/po/ro.po b/i18n/po/ro.po
index feec2db..6bd3b28 100644
--- a/i18n/po/ro.po
+++ b/i18n/po/ro.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: JOSM\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-12-31 03:40+0100\n"
+"POT-Creation-Date: 2016-01-06 03:38+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: 2015-12-31 04:57+0000\n"
-"X-Generator: Launchpad (build 17865)\n"
+"X-Launchpad-Export-Date: 2016-01-06 04:58+0000\n"
+"X-Generator: Launchpad (build 17876)\n"
 "X-Poedit-Country: ROMANIA\n"
 "Language: ro\n"
 "X-Poedit-Language: Romanian\n"
@@ -1110,9 +1110,6 @@ msgstr ""
 msgid "Overpass query: "
 msgstr ""
 
-msgid "Overpass server: "
-msgstr ""
-
 msgid "Paste"
 msgstr ""
 
@@ -1402,6 +1399,9 @@ msgstr ""
 msgid "Split a way at the selected node."
 msgstr ""
 
+msgid "Cannot split since another split operation is already in progress"
+msgstr ""
+
 msgid ""
 "The current selection cannot be used for splitting - no node is selected."
 msgstr ""
@@ -1513,6 +1513,27 @@ msgid ""
 "own copy and all nodes will be selected."
 msgstr ""
 
+msgid "Existing node"
+msgstr ""
+
+msgid "Both nodes"
+msgstr ""
+
+msgid "New node"
+msgstr ""
+
+msgid "Tags / Memberships"
+msgstr ""
+
+msgid "Unglue"
+msgstr ""
+
+msgid "Where should the tags of the node be put?"
+msgstr ""
+
+msgid "Where should the memberships of this node be put?"
+msgstr ""
+
 msgid "Unglued Node"
 msgstr ""
 
@@ -3105,6 +3126,15 @@ msgstr ""
 msgid "Restoring files"
 msgstr ""
 
+msgid "Unable to delete backup file {0}"
+msgstr ""
+
+msgid "Unable to delete PID file {0}"
+msgstr ""
+
+msgid "Unable to delete archived backup file {0}"
+msgstr ""
+
 msgid "Illegal latitude value ''{0}''"
 msgstr ""
 
@@ -4265,6 +4295,9 @@ msgstr ""
 msgid "No \"to\" way found"
 msgstr ""
 
+msgid "\"from\" way equals \"to\" way"
+msgstr ""
+
 msgid "No \"via\" node or way found"
 msgstr ""
 
@@ -7064,9 +7097,6 @@ msgstr ""
 msgid "Tags: {0} / Memberships: {1}"
 msgstr ""
 
-msgid "Tags / Memberships"
-msgstr ""
-
 msgid "Delete the selected key in all objects"
 msgstr "Şterge cheia selectată din toate obiectele"
 
@@ -11677,6 +11707,15 @@ msgstr ""
 msgid "Please enter the OSM API URL."
 msgstr ""
 
+msgid "Use Overpass server for object downloads"
+msgstr ""
+
+msgid "Overpass server: "
+msgstr ""
+
+msgid "Overpass server"
+msgstr ""
+
 msgid "Proxy settings"
 msgstr ""
 
@@ -13816,6 +13855,9 @@ msgstr ""
 msgid "reserved"
 msgstr ""
 
+msgid "Unable to delete old preferences file {0}"
+msgstr ""
+
 msgid "Outdated Java version"
 msgstr ""
 
@@ -13907,6 +13949,9 @@ msgid ""
 "contain any JOSM object or suitable text. </p></html>"
 msgstr ""
 
+msgid "Unable to delete file {0}"
+msgstr ""
+
 msgid "ms"
 msgstr ""
 
@@ -17021,6 +17066,9 @@ msgstr ""
 msgid "Tourist buses"
 msgstr ""
 
+msgid "Max. speed Heavy Goods Vehicles (km/h)"
+msgstr ""
+
 msgid "Min. speed (km/h)"
 msgstr ""
 
@@ -19318,12 +19366,6 @@ msgstr ""
 msgid "Dentist"
 msgstr ""
 
-msgid "Nursing Home"
-msgstr ""
-
-msgid "Retirement Home"
-msgstr ""
-
 msgid "Pharmacy"
 msgstr ""
 
@@ -19351,6 +19393,31 @@ msgstr ""
 msgid "Veterinary"
 msgstr ""
 
+msgid "Social Facility"
+msgstr ""
+
+msgid "Nursing Home"
+msgstr ""
+
+msgid "Group Home"
+msgstr ""
+
+msgid "For"
+msgstr ""
+
+msgid "Assisted Living"
+msgstr ""
+
+msgid "Outreach"
+msgstr ""
+
+msgctxt "social_facility"
+msgid "Shelter"
+msgstr ""
+
+msgid "Food Bank"
+msgstr ""
+
 msgid "Toilets/Restrooms"
 msgstr ""
 
@@ -19393,6 +19460,13 @@ msgstr ""
 msgid "urinal"
 msgstr ""
 
+msgctxt "toilets"
+msgid "Diaper"
+msgstr ""
+
+msgid "room"
+msgstr ""
+
 msgid "Post Box"
 msgstr ""
 
@@ -23430,24 +23504,24 @@ msgstr ""
 msgid "Download GPX track from openstreetmap.org"
 msgstr ""
 
+msgid "Download Track"
+msgstr ""
+
+msgid "Filename"
+msgstr ""
+
 msgid ""
 "Error occurred while parsing gpx file {0}. Only a part of the file will be "
 "available."
 msgstr ""
 
-msgid "Invalid URL {0}"
-msgstr ""
-
 msgid "Error fetching URL {0}"
 msgstr ""
 
 msgid "Error parsing data from URL {0}"
 msgstr ""
 
-msgid "Download Track"
-msgstr ""
-
-msgid "Filename"
+msgid "Invalid URL {0}"
 msgstr ""
 
 msgid "Private (only shared as anonymous, unordered points)"
@@ -23497,9 +23571,6 @@ msgstr ""
 msgid "Uploading trace ..."
 msgstr ""
 
-msgid "Connecting..."
-msgstr ""
-
 msgid "Upload canceled"
 msgstr ""
 
@@ -27938,6 +28009,69 @@ msgstr ""
 msgid "Please load some photos."
 msgstr ""
 
+msgid "Edit photo GPS data"
+msgstr ""
+
+msgid "Edit GPS data of selected photo."
+msgstr ""
+
+msgid "Edit Photo GPS Data"
+msgstr ""
+
+msgid "Please select an image first."
+msgstr ""
+
+msgid "No image selected"
+msgstr ""
+
+msgid "(Empty values delete the according fields.)"
+msgstr ""
+
+msgid "coordinates"
+msgstr "coordonate"
+
+msgid "Latitude and longitude"
+msgstr ""
+
+msgid "Edit Image Coordinates"
+msgstr ""
+
+msgid "Edit coordinates in separate editor"
+msgstr ""
+
+msgid "altitude"
+msgstr ""
+
+msgid "Altitude:"
+msgstr ""
+
+msgid "speed"
+msgstr ""
+
+msgid "positive number or empty"
+msgstr ""
+
+msgid "Speed:"
+msgstr ""
+
+msgid "direction"
+msgstr ""
+
+msgid "range -360.0 .. 360.0, or empty"
+msgstr ""
+
+msgid "Direction:"
+msgstr ""
+
+msgid "°"
+msgstr ""
+
+msgid "Undo changes made in this dialog"
+msgstr ""
+
+msgid "Reload GPS data from image file"
+msgstr ""
+
 msgid "New layer for untagged images"
 msgstr ""
 
@@ -30954,9 +31088,6 @@ msgstr ""
 msgid "Fetches all coordinates from Wikipedia in the current view"
 msgstr ""
 
-msgid "coordinates"
-msgstr "coordonate"
-
 msgid "Category"
 msgstr "Categorie"
 
diff --git a/i18n/po/ru.po b/i18n/po/ru.po
index a2119d0..fb3efde 100644
--- a/i18n/po/ru.po
+++ b/i18n/po/ru.po
@@ -7,17 +7,17 @@ msgid ""
 msgstr ""
 "Project-Id-Version: josm\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-12-31 03:40+0100\n"
-"PO-Revision-Date: 2015-12-28 07:13+0000\n"
-"Last-Translator: Nkolay Parukhin <parukhin at gmail.com>\n"
+"POT-Creation-Date: 2016-01-06 03:38+0100\n"
+"PO-Revision-Date: 2016-01-05 10:28+0000\n"
+"Last-Translator: Aleksey Kabanov <Unknown>\n"
 "Language-Team: Koptev Oleg <koptev.oleg at gmail.com>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
 "n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
-"X-Launchpad-Export-Date: 2015-12-31 04:57+0000\n"
-"X-Generator: Launchpad (build 17865)\n"
+"X-Launchpad-Export-Date: 2016-01-06 04:59+0000\n"
+"X-Generator: Launchpad (build 17876)\n"
 "Language: ru_RU\n"
 
 msgid "Note"
@@ -1175,9 +1175,6 @@ msgstr "Ошибка разбора"
 msgid "Overpass query: "
 msgstr "Запрос к Overpass: "
 
-msgid "Overpass server: "
-msgstr "Сервер Overpass: "
-
 msgid "Paste"
 msgstr "Вставить"
 
@@ -1486,6 +1483,10 @@ msgstr "Разделить линию"
 msgid "Split a way at the selected node."
 msgstr "Разделить линию в выделенной точке."
 
+msgid "Cannot split since another split operation is already in progress"
+msgstr ""
+"Невозможно выполнить разделение, пока другая операция разделения не завершена"
+
 msgid ""
 "The current selection cannot be used for splitting - no node is selected."
 msgstr "Текущее выделение невозможно разделить - не выделена точка."
@@ -1619,6 +1620,27 @@ msgstr ""
 "будут выделены. В противном случае, все линии получат дубликаты,\n"
 "и все точки будут выделены."
 
+msgid "Existing node"
+msgstr "Существующая точка"
+
+msgid "Both nodes"
+msgstr "Обе точки"
+
+msgid "New node"
+msgstr "Новая точка"
+
+msgid "Tags / Memberships"
+msgstr "Теги / Участие"
+
+msgid "Unglue"
+msgstr "Разъединить"
+
+msgid "Where should the tags of the node be put?"
+msgstr "Куда перенести теги точки?"
+
+msgid "Where should the memberships of this node be put?"
+msgstr "Куда перенести участие этой точки в отношениях?"
+
 msgid "Unglued Node"
 msgstr "Неприкрепленная точка"
 
@@ -3391,6 +3413,15 @@ msgstr "Результаты вашей работы были сохранены
 msgid "Restoring files"
 msgstr "Восстановление файлов"
 
+msgid "Unable to delete backup file {0}"
+msgstr "Не удалось удалить файл резервной копии {0}"
+
+msgid "Unable to delete PID file {0}"
+msgstr "Не удалось удалить PID-файл {0}"
+
+msgid "Unable to delete archived backup file {0}"
+msgstr "Не удалось удалить помещённый в архив файл резервной копии {0}"
+
 msgid "Illegal latitude value ''{0}''"
 msgstr "Неправильное значение широты ''{0}''"
 
@@ -4636,6 +4667,9 @@ msgstr "Не указан путь \"откуда\""
 msgid "No \"to\" way found"
 msgstr "Не указан путь \"куда\""
 
+msgid "\"from\" way equals \"to\" way"
+msgstr "линия \"from\"  идентична линии \"to\""
+
 msgid "No \"via\" node or way found"
 msgstr "Нет точки или пути \"через\""
 
@@ -7694,9 +7728,6 @@ msgstr "Объекты: {2} / Теги: {0} / Участие: {1}"
 msgid "Tags: {0} / Memberships: {1}"
 msgstr "Теги: {0} / Участие: {1}"
 
-msgid "Tags / Memberships"
-msgstr "Теги / Участие"
-
 msgid "Delete the selected key in all objects"
 msgstr "Удалить выделенный ключ из всех объектов"
 
@@ -12915,6 +12946,15 @@ msgstr "Текущее значение это неверный URL"
 msgid "Please enter the OSM API URL."
 msgstr "Пожалуйста, введите URL OSM API."
 
+msgid "Use Overpass server for object downloads"
+msgstr "Использовать сервер Overpass для загрузки объектов"
+
+msgid "Overpass server: "
+msgstr "Сервер Overpass: "
+
+msgid "Overpass server"
+msgstr "Сервер Overpass"
+
 msgid "Proxy settings"
 msgstr "Настройки прокси-сервера"
 
@@ -15433,6 +15473,9 @@ msgstr "URL не содержит верного значения {0}"
 msgid "reserved"
 msgstr "зарезервировано"
 
+msgid "Unable to delete old preferences file {0}"
+msgstr "Не удалось удалить старый файл настроек {0}"
+
 msgid "Outdated Java version"
 msgstr "Устаревшая версия Java"
 
@@ -15545,6 +15588,9 @@ msgstr ""
 "<html><p> Невозможно вставить теги из буфера обмена. Он не содержит объектов "
 "JOSM или подходящего текста. </p></html>"
 
+msgid "Unable to delete file {0}"
+msgstr "Не удалось удалить файл {0}"
+
 msgid "ms"
 msgstr "мс"
 
@@ -18820,6 +18866,9 @@ msgstr "Общественный транспорт"
 msgid "Tourist buses"
 msgstr "Туристические автобусы"
 
+msgid "Max. speed Heavy Goods Vehicles (km/h)"
+msgstr ""
+
 msgid "Min. speed (km/h)"
 msgstr "Мин. скорость (в км/ч)"
 
@@ -21141,12 +21190,6 @@ msgstr "Кабинет врача"
 msgid "Dentist"
 msgstr "Стоматология"
 
-msgid "Nursing Home"
-msgstr "Дом престарелых (устаревший тег)"
-
-msgid "Retirement Home"
-msgstr "Дом престарелых"
-
 msgid "Pharmacy"
 msgstr "Аптека"
 
@@ -21174,6 +21217,31 @@ msgstr "(Используйте международный код, наприм
 msgid "Veterinary"
 msgstr "Ветеринария"
 
+msgid "Social Facility"
+msgstr "Социальные услуги"
+
+msgid "Nursing Home"
+msgstr "Дом престарелых (устаревший тег)"
+
+msgid "Group Home"
+msgstr "Учреждение группового проживания"
+
+msgid "For"
+msgstr "Для"
+
+msgid "Assisted Living"
+msgstr ""
+
+msgid "Outreach"
+msgstr ""
+
+msgctxt "social_facility"
+msgid "Shelter"
+msgstr ""
+
+msgid "Food Bank"
+msgstr ""
+
 msgid "Toilets/Restrooms"
 msgstr "Общественный туалет"
 
@@ -21216,6 +21284,13 @@ msgstr "напольный унитаз"
 msgid "urinal"
 msgstr "писуар"
 
+msgctxt "toilets"
+msgid "Diaper"
+msgstr "Столик для смены пелёнок"
+
+msgid "room"
+msgstr "в отдельной комнате"
+
 msgid "Post Box"
 msgstr "Почтовый ящик"
 
@@ -25308,6 +25383,12 @@ msgstr "Загрузка трека ..."
 msgid "Download GPX track from openstreetmap.org"
 msgstr "Загрузка GPX трека с openstreetmap.org"
 
+msgid "Download Track"
+msgstr "Скачать трек"
+
+msgid "Filename"
+msgstr "Имя файла"
+
 msgid ""
 "Error occurred while parsing gpx file {0}. Only a part of the file will be "
 "available."
@@ -25315,20 +25396,14 @@ msgstr ""
 "Возникла ошибка при синтаксическом разборе gpx-файла {0}. Будет доступна "
 "только часть файла."
 
-msgid "Invalid URL {0}"
-msgstr "Неверная ссылка {0}"
-
 msgid "Error fetching URL {0}"
 msgstr "Ошибка обработки ссылки {0}"
 
 msgid "Error parsing data from URL {0}"
 msgstr "Ошибка анализа данных ссылки {0}"
 
-msgid "Download Track"
-msgstr "Скачать трек"
-
-msgid "Filename"
-msgstr "Имя файла"
+msgid "Invalid URL {0}"
+msgstr "Неверная ссылка {0}"
 
 msgid "Private (only shared as anonymous, unordered points)"
 msgstr "Частные (видны другим как anonymous, неупорядоченные точки)"
@@ -25383,9 +25458,6 @@ msgstr "Слой GPX не выбран. Не удается передать т
 msgid "Uploading trace ..."
 msgstr "Передача трека на сервер ..."
 
-msgid "Connecting..."
-msgstr "Подключение..."
-
 msgid "Upload canceled"
 msgstr "Передача отменена"
 
@@ -30213,6 +30285,69 @@ msgstr ""
 msgid "Please load some photos."
 msgstr "Позалуйста загрузите несколько фотографий."
 
+msgid "Edit photo GPS data"
+msgstr "Редактировать GPS-данные снимка"
+
+msgid "Edit GPS data of selected photo."
+msgstr "Редактировать GPS-данные выделенного снимка."
+
+msgid "Edit Photo GPS Data"
+msgstr "Редактировать GPS-данные снимка"
+
+msgid "Please select an image first."
+msgstr "Сначала выберите изображение."
+
+msgid "No image selected"
+msgstr "Изображение не выбрано"
+
+msgid "(Empty values delete the according fields.)"
+msgstr "(Пустые значения удаляют соответствующие поля.)"
+
+msgid "coordinates"
+msgstr "координаты"
+
+msgid "Latitude and longitude"
+msgstr "Широта и долгота"
+
+msgid "Edit Image Coordinates"
+msgstr "Изменить координаты изображения"
+
+msgid "Edit coordinates in separate editor"
+msgstr "Изменить координаты в отдельном редакторе"
+
+msgid "altitude"
+msgstr "высота"
+
+msgid "Altitude:"
+msgstr "Высота:"
+
+msgid "speed"
+msgstr "скорость"
+
+msgid "positive number or empty"
+msgstr "положительное число или пустое"
+
+msgid "Speed:"
+msgstr "Скорость:"
+
+msgid "direction"
+msgstr "направление"
+
+msgid "range -360.0 .. 360.0, or empty"
+msgstr "в диапазоне -360.0 .. 360.0, или пустое"
+
+msgid "Direction:"
+msgstr "Направление:"
+
+msgid "°"
+msgstr "°"
+
+msgid "Undo changes made in this dialog"
+msgstr "Отменить изменения, сделанные в этом диалоге"
+
+msgid "Reload GPS data from image file"
+msgstr "Перезагрузить GPS-данные из файла изображения"
+
 msgid "New layer for untagged images"
 msgstr "Новый слой для не отмеченного изображения"
 
@@ -33506,9 +33641,6 @@ msgid "Fetches all coordinates from Wikipedia in the current view"
 msgstr ""
 "Получение из Википедии всех координат для видимой в окне области карты"
 
-msgid "coordinates"
-msgstr "координаты"
-
 msgid "Category"
 msgstr "Категория"
 
@@ -33553,3 +33685,6 @@ msgstr "Приступить к вождению"
 
 msgid "Drive a race car on this layer"
 msgstr "Вести гоночный автомобиль на этом слое"
+
+#~ msgid "Retirement Home"
+#~ msgstr "Дом престарелых"
diff --git a/i18n/po/sk.po b/i18n/po/sk.po
index 48e2864..026a0e5 100644
--- a/i18n/po/sk.po
+++ b/i18n/po/sk.po
@@ -9,16 +9,16 @@ msgid ""
 msgstr ""
 "Project-Id-Version: josm\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-12-31 03:40+0100\n"
-"PO-Revision-Date: 2015-12-30 19:43+0000\n"
+"POT-Creation-Date: 2016-01-06 03:38+0100\n"
+"PO-Revision-Date: 2016-01-06 00:23+0000\n"
 "Last-Translator: aceman444 <Unknown>\n"
 "Language-Team: Slovak <>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=3; plural=(n==1) ? 1 : (n>=2 && n<=4) ? 2 : 0;\n"
-"X-Launchpad-Export-Date: 2015-12-31 04:59+0000\n"
-"X-Generator: Launchpad (build 17865)\n"
+"X-Launchpad-Export-Date: 2016-01-06 05:00+0000\n"
+"X-Generator: Launchpad (build 17876)\n"
 "Language: sk\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -1151,9 +1151,6 @@ msgstr "Chyba spracovania"
 msgid "Overpass query: "
 msgstr "Overpass požiadavka: "
 
-msgid "Overpass server: "
-msgstr "Overpass server: "
-
 msgid "Paste"
 msgstr "Vložiť"
 
@@ -1462,6 +1459,9 @@ msgstr "Rozdeliť cestu"
 msgid "Split a way at the selected node."
 msgstr "Rozdeliť cestu vo zvolenom bode"
 
+msgid "Cannot split since another split operation is already in progress"
+msgstr "Nedá sa rozdeliť pretože už prebieha iná operácia rozdelenia"
+
 msgid ""
 "The current selection cannot be used for splitting - no node is selected."
 msgstr ""
@@ -1594,6 +1594,27 @@ msgstr ""
 "bodov a tieto nové body budú vybraté. Inak všetky cesty dostanú\n"
 "svoje vlastné kópie a všetky bodybudú vybraté."
 
+msgid "Existing node"
+msgstr "Existujúci bod"
+
+msgid "Both nodes"
+msgstr "Oba body"
+
+msgid "New node"
+msgstr "Nový bod"
+
+msgid "Tags / Memberships"
+msgstr "Značky / Členstvá"
+
+msgid "Unglue"
+msgstr "Odpojiť"
+
+msgid "Where should the tags of the node be put?"
+msgstr "Kde majú zostať značky pôvodného bodu?"
+
+msgid "Where should the memberships of this node be put?"
+msgstr "Kde majú zostať členstvá pôvodného bodu?"
+
 msgid "Unglued Node"
 msgstr "Nepripojený bod (Unglued Node)"
 
@@ -3345,6 +3366,15 @@ msgstr "Vaša práva bola automaticky uložená."
 msgid "Restoring files"
 msgstr "Obnovenie súborov"
 
+msgid "Unable to delete backup file {0}"
+msgstr "Nepodarilo sa odstrániť záložný súbor {0}"
+
+msgid "Unable to delete PID file {0}"
+msgstr "Nepodarilo sa odstrániť PID súbor {0}"
+
+msgid "Unable to delete archived backup file {0}"
+msgstr "Nepodarilo sa odstrániť archivovaný záložný súbor {0}"
+
 msgid "Illegal latitude value ''{0}''"
 msgstr "Chybná hodnota zemepisnej šírky ''{0}''"
 
@@ -4597,6 +4627,9 @@ msgstr "Nenájdená cesta \"z (from)\""
 msgid "No \"to\" way found"
 msgstr "Nenájdená cesta \"na (to)\""
 
+msgid "\"from\" way equals \"to\" way"
+msgstr "cesta \"from\" (z) sa rovná ceste \"to\" (na)"
+
 msgid "No \"via\" node or way found"
 msgstr "Nenajdený \"cez\", bod alebo cesta"
 
@@ -7647,9 +7680,6 @@ msgstr "Objekty: {2} / Značky: {0} / Členstvá: {1}"
 msgid "Tags: {0} / Memberships: {1}"
 msgstr "Značky: {0} / Členstvá: {1}"
 
-msgid "Tags / Memberships"
-msgstr "Značky / Členstvá"
-
 msgid "Delete the selected key in all objects"
 msgstr "Zmaže zvolený klúč vo všetkých objektoch"
 
@@ -12164,7 +12194,7 @@ msgstr ""
 "\"{1}\""
 
 msgid "JOSM default (MapCSS)"
-msgstr "JOSM predvolené (MapCSS)"
+msgstr "JOSM predvolený (MapCSS)"
 
 msgid ""
 "Internal style to be used as base for runtime switchable overlay styles"
@@ -12832,6 +12862,15 @@ msgstr "Súčasná hodnota nie je platná URL"
 msgid "Please enter the OSM API URL."
 msgstr "Prosím, zadajte OSM API URL."
 
+msgid "Use Overpass server for object downloads"
+msgstr "Použiť server Overpass na stiahnutie objektov"
+
+msgid "Overpass server: "
+msgstr "Overpass server: "
+
+msgid "Overpass server"
+msgstr "Overpass server"
+
 msgid "Proxy settings"
 msgstr "Nastavenia proxy servera"
 
@@ -15364,6 +15403,9 @@ msgstr "URL neobsahuje platné {0}"
 msgid "reserved"
 msgstr "rezervované"
 
+msgid "Unable to delete old preferences file {0}"
+msgstr "Nepodarilo sa odstrániť starý súbor nastavení {0}"
+
 msgid "Outdated Java version"
 msgstr "Zastaralá verzia Java"
 
@@ -15474,6 +15516,9 @@ msgstr ""
 "<html><p> Prepáčte, ale nie je možné vložiť značky z vyrovnávacej pamäte. "
 "Neobsahujú žiadne objekty JOSM, alebo vhodné texty. </p></html>"
 
+msgid "Unable to delete file {0}"
+msgstr "Nepodarilo sa odstrániť súbor {0}"
+
 msgid "ms"
 msgstr "ms"
 
@@ -18735,6 +18780,9 @@ msgstr "Dopravná obsluha (bus+taxi) (psv)"
 msgid "Tourist buses"
 msgstr "Turistické autobusy"
 
+msgid "Max. speed Heavy Goods Vehicles (km/h)"
+msgstr "Max. rýchlosť pre nákladné vozidlá (km/h)"
+
 msgid "Min. speed (km/h)"
 msgstr "Min. rýchlosť (km/h)"
 
@@ -21055,12 +21103,6 @@ msgstr "Lekárska ambulancia"
 msgid "Dentist"
 msgstr "Zubný lekár"
 
-msgid "Nursing Home"
-msgstr "Sanatórium s opaterou"
-
-msgid "Retirement Home"
-msgstr "Domov dôchodcov"
-
 msgid "Pharmacy"
 msgstr "Lekáreň"
 
@@ -21088,6 +21130,31 @@ msgstr "(Použite medzinárodný kód, ako +12-345-67890)"
 msgid "Veterinary"
 msgstr "Veterinár"
 
+msgid "Social Facility"
+msgstr "Sociálne zariadenie"
+
+msgid "Nursing Home"
+msgstr "Sanatórium s opaterou"
+
+msgid "Group Home"
+msgstr "Spoločné bývanie"
+
+msgid "For"
+msgstr "Pre"
+
+msgid "Assisted Living"
+msgstr "Asistované bývanie"
+
+msgid "Outreach"
+msgstr "Osveta"
+
+msgctxt "social_facility"
+msgid "Shelter"
+msgstr "Prístrešok"
+
+msgid "Food Bank"
+msgstr "Výdajňa jedla"
+
 msgid "Toilets/Restrooms"
 msgstr "Toalety"
 
@@ -21130,6 +21197,13 @@ msgstr "čupenie"
 msgid "urinal"
 msgstr "pisoár"
 
+msgctxt "toilets"
+msgid "Diaper"
+msgstr "Plienky"
+
+msgid "room"
+msgstr "miestnosť"
+
 msgid "Post Box"
 msgstr "Poštová schránka"
 
@@ -25215,26 +25289,26 @@ msgstr "Stiahnuť Stopy ..."
 msgid "Download GPX track from openstreetmap.org"
 msgstr "Stiahnuť GPX stopy z openstreetmap.org"
 
+msgid "Download Track"
+msgstr "Stiahnuť stopu"
+
+msgid "Filename"
+msgstr "Meno súboru"
+
 msgid ""
 "Error occurred while parsing gpx file {0}. Only a part of the file will be "
 "available."
 msgstr ""
 "Došlo k chybe pri analýze GPX súboru {0}. Iba časť súboru bude k dispozícii."
 
-msgid "Invalid URL {0}"
-msgstr "Neplatná adresa URL {0}"
-
 msgid "Error fetching URL {0}"
 msgstr "Chyba pri načítaní URL {0}"
 
 msgid "Error parsing data from URL {0}"
 msgstr "Chyba pri analýze dát z URL {0}"
 
-msgid "Download Track"
-msgstr "Stiahnuť stopu"
-
-msgid "Filename"
-msgstr "Meno súboru"
+msgid "Invalid URL {0}"
+msgstr "Neplatná adresa URL {0}"
 
 msgid "Private (only shared as anonymous, unordered points)"
 msgstr "Súkromné (iba zdielané ako anonymné, neusporiadané body)"
@@ -25287,9 +25361,6 @@ msgstr "Nie je vybratá GPX vrstva. Nemôžem nahrať stopu (trace)."
 msgid "Uploading trace ..."
 msgstr "Nahrávanie stopy ..."
 
-msgid "Connecting..."
-msgstr "Pripájam sa..."
-
 msgid "Upload canceled"
 msgstr "Nahrávanie bolo zrušené"
 
@@ -29849,6 +29920,69 @@ msgstr ""
 msgid "Please load some photos."
 msgstr ""
 
+msgid "Edit photo GPS data"
+msgstr ""
+
+msgid "Edit GPS data of selected photo."
+msgstr ""
+
+msgid "Edit Photo GPS Data"
+msgstr ""
+
+msgid "Please select an image first."
+msgstr ""
+
+msgid "No image selected"
+msgstr ""
+
+msgid "(Empty values delete the according fields.)"
+msgstr ""
+
+msgid "coordinates"
+msgstr "súradnice"
+
+msgid "Latitude and longitude"
+msgstr ""
+
+msgid "Edit Image Coordinates"
+msgstr ""
+
+msgid "Edit coordinates in separate editor"
+msgstr ""
+
+msgid "altitude"
+msgstr ""
+
+msgid "Altitude:"
+msgstr ""
+
+msgid "speed"
+msgstr ""
+
+msgid "positive number or empty"
+msgstr ""
+
+msgid "Speed:"
+msgstr ""
+
+msgid "direction"
+msgstr ""
+
+msgid "range -360.0 .. 360.0, or empty"
+msgstr ""
+
+msgid "Direction:"
+msgstr ""
+
+msgid "°"
+msgstr ""
+
+msgid "Undo changes made in this dialog"
+msgstr ""
+
+msgid "Reload GPS data from image file"
+msgstr ""
+
 msgid "New layer for untagged images"
 msgstr ""
 
@@ -33033,9 +33167,6 @@ msgstr "{0}.Wikipedia.org: {1}"
 msgid "Fetches all coordinates from Wikipedia in the current view"
 msgstr "Získa všetky súradnice z Wikipedie v aktuálnom zobrazení"
 
-msgid "coordinates"
-msgstr "súradnice"
-
 msgid "Category"
 msgstr "Kategória"
 
diff --git a/i18n/po/sl.po b/i18n/po/sl.po
index a2303d8..9006057 100644
--- a/i18n/po/sl.po
+++ b/i18n/po/sl.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: josm\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-12-31 03:40+0100\n"
+"POT-Creation-Date: 2016-01-06 03:38+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: 2015-12-31 04:59+0000\n"
-"X-Generator: Launchpad (build 17865)\n"
+"X-Launchpad-Export-Date: 2016-01-06 05:01+0000\n"
+"X-Generator: Launchpad (build 17876)\n"
 "Language: sl\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -1061,9 +1061,6 @@ msgstr ""
 msgid "Overpass query: "
 msgstr ""
 
-msgid "Overpass server: "
-msgstr ""
-
 msgid "Paste"
 msgstr "Prilepi"
 
@@ -1354,6 +1351,9 @@ msgstr "Razdeli pot"
 msgid "Split a way at the selected node."
 msgstr "Razdeli pot pri izbranem vozlišču."
 
+msgid "Cannot split since another split operation is already in progress"
+msgstr ""
+
 msgid ""
 "The current selection cannot be used for splitting - no node is selected."
 msgstr ""
@@ -1471,6 +1471,27 @@ msgid ""
 "own copy and all nodes will be selected."
 msgstr ""
 
+msgid "Existing node"
+msgstr ""
+
+msgid "Both nodes"
+msgstr ""
+
+msgid "New node"
+msgstr ""
+
+msgid "Tags / Memberships"
+msgstr ""
+
+msgid "Unglue"
+msgstr ""
+
+msgid "Where should the tags of the node be put?"
+msgstr ""
+
+msgid "Where should the memberships of this node be put?"
+msgstr ""
+
 msgid "Unglued Node"
 msgstr ""
 
@@ -3065,6 +3086,15 @@ msgstr ""
 msgid "Restoring files"
 msgstr ""
 
+msgid "Unable to delete backup file {0}"
+msgstr ""
+
+msgid "Unable to delete PID file {0}"
+msgstr ""
+
+msgid "Unable to delete archived backup file {0}"
+msgstr ""
+
 msgid "Illegal latitude value ''{0}''"
 msgstr ""
 
@@ -4231,6 +4261,9 @@ msgstr ""
 msgid "No \"to\" way found"
 msgstr ""
 
+msgid "\"from\" way equals \"to\" way"
+msgstr ""
+
 msgid "No \"via\" node or way found"
 msgstr ""
 
@@ -7034,9 +7067,6 @@ msgstr ""
 msgid "Tags: {0} / Memberships: {1}"
 msgstr ""
 
-msgid "Tags / Memberships"
-msgstr ""
-
 msgid "Delete the selected key in all objects"
 msgstr "Izbriši izbrani ključ vsem predmetom"
 
@@ -11663,6 +11693,15 @@ msgstr ""
 msgid "Please enter the OSM API URL."
 msgstr ""
 
+msgid "Use Overpass server for object downloads"
+msgstr ""
+
+msgid "Overpass server: "
+msgstr ""
+
+msgid "Overpass server"
+msgstr ""
+
 msgid "Proxy settings"
 msgstr ""
 
@@ -13813,6 +13852,9 @@ msgstr ""
 msgid "reserved"
 msgstr ""
 
+msgid "Unable to delete old preferences file {0}"
+msgstr ""
+
 msgid "Outdated Java version"
 msgstr ""
 
@@ -13904,6 +13946,9 @@ msgid ""
 "contain any JOSM object or suitable text. </p></html>"
 msgstr ""
 
+msgid "Unable to delete file {0}"
+msgstr ""
+
 msgid "ms"
 msgstr ""
 
@@ -17018,6 +17063,9 @@ msgstr ""
 msgid "Tourist buses"
 msgstr ""
 
+msgid "Max. speed Heavy Goods Vehicles (km/h)"
+msgstr ""
+
 msgid "Min. speed (km/h)"
 msgstr "Najnižja hitrost (km/h)"
 
@@ -19315,12 +19363,6 @@ msgstr ""
 msgid "Dentist"
 msgstr ""
 
-msgid "Nursing Home"
-msgstr ""
-
-msgid "Retirement Home"
-msgstr ""
-
 msgid "Pharmacy"
 msgstr "Lekarna"
 
@@ -19348,6 +19390,31 @@ msgstr ""
 msgid "Veterinary"
 msgstr ""
 
+msgid "Social Facility"
+msgstr ""
+
+msgid "Nursing Home"
+msgstr ""
+
+msgid "Group Home"
+msgstr ""
+
+msgid "For"
+msgstr ""
+
+msgid "Assisted Living"
+msgstr ""
+
+msgid "Outreach"
+msgstr ""
+
+msgctxt "social_facility"
+msgid "Shelter"
+msgstr ""
+
+msgid "Food Bank"
+msgstr ""
+
 msgid "Toilets/Restrooms"
 msgstr ""
 
@@ -19390,6 +19457,13 @@ msgstr ""
 msgid "urinal"
 msgstr ""
 
+msgctxt "toilets"
+msgid "Diaper"
+msgstr ""
+
+msgid "room"
+msgstr ""
+
 msgid "Post Box"
 msgstr "Poštni nabiralnik"
 
@@ -23427,24 +23501,24 @@ msgstr ""
 msgid "Download GPX track from openstreetmap.org"
 msgstr ""
 
+msgid "Download Track"
+msgstr ""
+
+msgid "Filename"
+msgstr ""
+
 msgid ""
 "Error occurred while parsing gpx file {0}. Only a part of the file will be "
 "available."
 msgstr ""
 
-msgid "Invalid URL {0}"
-msgstr ""
-
 msgid "Error fetching URL {0}"
 msgstr ""
 
 msgid "Error parsing data from URL {0}"
 msgstr ""
 
-msgid "Download Track"
-msgstr ""
-
-msgid "Filename"
+msgid "Invalid URL {0}"
 msgstr ""
 
 msgid "Private (only shared as anonymous, unordered points)"
@@ -23494,9 +23568,6 @@ msgstr "Ni izbrana plast GPX. Sledi ni mogoče poslati."
 msgid "Uploading trace ..."
 msgstr ""
 
-msgid "Connecting..."
-msgstr ""
-
 msgid "Upload canceled"
 msgstr ""
 
@@ -27937,6 +28008,69 @@ msgstr ""
 msgid "Please load some photos."
 msgstr ""
 
+msgid "Edit photo GPS data"
+msgstr ""
+
+msgid "Edit GPS data of selected photo."
+msgstr ""
+
+msgid "Edit Photo GPS Data"
+msgstr ""
+
+msgid "Please select an image first."
+msgstr ""
+
+msgid "No image selected"
+msgstr ""
+
+msgid "(Empty values delete the according fields.)"
+msgstr ""
+
+msgid "coordinates"
+msgstr ""
+
+msgid "Latitude and longitude"
+msgstr ""
+
+msgid "Edit Image Coordinates"
+msgstr ""
+
+msgid "Edit coordinates in separate editor"
+msgstr ""
+
+msgid "altitude"
+msgstr ""
+
+msgid "Altitude:"
+msgstr ""
+
+msgid "speed"
+msgstr ""
+
+msgid "positive number or empty"
+msgstr ""
+
+msgid "Speed:"
+msgstr ""
+
+msgid "direction"
+msgstr ""
+
+msgid "range -360.0 .. 360.0, or empty"
+msgstr ""
+
+msgid "Direction:"
+msgstr ""
+
+msgid "°"
+msgstr ""
+
+msgid "Undo changes made in this dialog"
+msgstr ""
+
+msgid "Reload GPS data from image file"
+msgstr ""
+
 msgid "New layer for untagged images"
 msgstr ""
 
@@ -30955,9 +31089,6 @@ msgstr "{0}.Wikipedia.org: {1}"
 msgid "Fetches all coordinates from Wikipedia in the current view"
 msgstr "Iz Wikipedije poišči vse koordinate v trenutnem pogledu"
 
-msgid "coordinates"
-msgstr ""
-
 msgid "Category"
 msgstr "Kategorija"
 
diff --git a/i18n/po/sq.po b/i18n/po/sq.po
index 2536179..ff3aaed 100644
--- a/i18n/po/sq.po
+++ b/i18n/po/sq.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: josm\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-12-31 03:40+0100\n"
+"POT-Creation-Date: 2016-01-06 03:38+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: 2015-12-31 04:32+0000\n"
-"X-Generator: Launchpad (build 17865)\n"
+"X-Launchpad-Export-Date: 2016-01-06 04:31+0000\n"
+"X-Generator: Launchpad (build 17876)\n"
 "Language: \n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -1056,9 +1056,6 @@ msgstr ""
 msgid "Overpass query: "
 msgstr ""
 
-msgid "Overpass server: "
-msgstr ""
-
 msgid "Paste"
 msgstr ""
 
@@ -1348,6 +1345,9 @@ msgstr ""
 msgid "Split a way at the selected node."
 msgstr ""
 
+msgid "Cannot split since another split operation is already in progress"
+msgstr ""
+
 msgid ""
 "The current selection cannot be used for splitting - no node is selected."
 msgstr ""
@@ -1459,6 +1459,27 @@ msgid ""
 "own copy and all nodes will be selected."
 msgstr ""
 
+msgid "Existing node"
+msgstr ""
+
+msgid "Both nodes"
+msgstr ""
+
+msgid "New node"
+msgstr ""
+
+msgid "Tags / Memberships"
+msgstr ""
+
+msgid "Unglue"
+msgstr ""
+
+msgid "Where should the tags of the node be put?"
+msgstr ""
+
+msgid "Where should the memberships of this node be put?"
+msgstr ""
+
 msgid "Unglued Node"
 msgstr ""
 
@@ -3049,6 +3070,15 @@ msgstr ""
 msgid "Restoring files"
 msgstr ""
 
+msgid "Unable to delete backup file {0}"
+msgstr ""
+
+msgid "Unable to delete PID file {0}"
+msgstr ""
+
+msgid "Unable to delete archived backup file {0}"
+msgstr ""
+
 msgid "Illegal latitude value ''{0}''"
 msgstr ""
 
@@ -4207,6 +4237,9 @@ msgstr ""
 msgid "No \"to\" way found"
 msgstr ""
 
+msgid "\"from\" way equals \"to\" way"
+msgstr ""
+
 msgid "No \"via\" node or way found"
 msgstr ""
 
@@ -7004,9 +7037,6 @@ msgstr ""
 msgid "Tags: {0} / Memberships: {1}"
 msgstr ""
 
-msgid "Tags / Memberships"
-msgstr ""
-
 msgid "Delete the selected key in all objects"
 msgstr ""
 
@@ -11611,6 +11641,15 @@ msgstr ""
 msgid "Please enter the OSM API URL."
 msgstr ""
 
+msgid "Use Overpass server for object downloads"
+msgstr ""
+
+msgid "Overpass server: "
+msgstr ""
+
+msgid "Overpass server"
+msgstr ""
+
 msgid "Proxy settings"
 msgstr ""
 
@@ -13749,6 +13788,9 @@ msgstr ""
 msgid "reserved"
 msgstr ""
 
+msgid "Unable to delete old preferences file {0}"
+msgstr ""
+
 msgid "Outdated Java version"
 msgstr ""
 
@@ -13840,6 +13882,9 @@ msgid ""
 "contain any JOSM object or suitable text. </p></html>"
 msgstr ""
 
+msgid "Unable to delete file {0}"
+msgstr ""
+
 msgid "ms"
 msgstr ""
 
@@ -16954,6 +16999,9 @@ msgstr ""
 msgid "Tourist buses"
 msgstr ""
 
+msgid "Max. speed Heavy Goods Vehicles (km/h)"
+msgstr ""
+
 msgid "Min. speed (km/h)"
 msgstr ""
 
@@ -19251,12 +19299,6 @@ msgstr ""
 msgid "Dentist"
 msgstr "Dentist"
 
-msgid "Nursing Home"
-msgstr ""
-
-msgid "Retirement Home"
-msgstr ""
-
 msgid "Pharmacy"
 msgstr ""
 
@@ -19284,6 +19326,31 @@ msgstr ""
 msgid "Veterinary"
 msgstr ""
 
+msgid "Social Facility"
+msgstr ""
+
+msgid "Nursing Home"
+msgstr ""
+
+msgid "Group Home"
+msgstr ""
+
+msgid "For"
+msgstr ""
+
+msgid "Assisted Living"
+msgstr ""
+
+msgid "Outreach"
+msgstr ""
+
+msgctxt "social_facility"
+msgid "Shelter"
+msgstr ""
+
+msgid "Food Bank"
+msgstr ""
+
 msgid "Toilets/Restrooms"
 msgstr ""
 
@@ -19326,6 +19393,13 @@ msgstr ""
 msgid "urinal"
 msgstr ""
 
+msgctxt "toilets"
+msgid "Diaper"
+msgstr ""
+
+msgid "room"
+msgstr ""
+
 msgid "Post Box"
 msgstr ""
 
@@ -23363,24 +23437,24 @@ msgstr ""
 msgid "Download GPX track from openstreetmap.org"
 msgstr ""
 
+msgid "Download Track"
+msgstr ""
+
+msgid "Filename"
+msgstr ""
+
 msgid ""
 "Error occurred while parsing gpx file {0}. Only a part of the file will be "
 "available."
 msgstr ""
 
-msgid "Invalid URL {0}"
-msgstr ""
-
 msgid "Error fetching URL {0}"
 msgstr ""
 
 msgid "Error parsing data from URL {0}"
 msgstr ""
 
-msgid "Download Track"
-msgstr ""
-
-msgid "Filename"
+msgid "Invalid URL {0}"
 msgstr ""
 
 msgid "Private (only shared as anonymous, unordered points)"
@@ -23430,9 +23504,6 @@ msgstr ""
 msgid "Uploading trace ..."
 msgstr ""
 
-msgid "Connecting..."
-msgstr ""
-
 msgid "Upload canceled"
 msgstr ""
 
@@ -27871,6 +27942,69 @@ msgstr ""
 msgid "Please load some photos."
 msgstr ""
 
+msgid "Edit photo GPS data"
+msgstr ""
+
+msgid "Edit GPS data of selected photo."
+msgstr ""
+
+msgid "Edit Photo GPS Data"
+msgstr ""
+
+msgid "Please select an image first."
+msgstr ""
+
+msgid "No image selected"
+msgstr ""
+
+msgid "(Empty values delete the according fields.)"
+msgstr ""
+
+msgid "coordinates"
+msgstr ""
+
+msgid "Latitude and longitude"
+msgstr ""
+
+msgid "Edit Image Coordinates"
+msgstr ""
+
+msgid "Edit coordinates in separate editor"
+msgstr ""
+
+msgid "altitude"
+msgstr ""
+
+msgid "Altitude:"
+msgstr ""
+
+msgid "speed"
+msgstr ""
+
+msgid "positive number or empty"
+msgstr ""
+
+msgid "Speed:"
+msgstr ""
+
+msgid "direction"
+msgstr ""
+
+msgid "range -360.0 .. 360.0, or empty"
+msgstr ""
+
+msgid "Direction:"
+msgstr ""
+
+msgid "°"
+msgstr ""
+
+msgid "Undo changes made in this dialog"
+msgstr ""
+
+msgid "Reload GPS data from image file"
+msgstr ""
+
 msgid "New layer for untagged images"
 msgstr ""
 
@@ -30887,9 +31021,6 @@ msgstr ""
 msgid "Fetches all coordinates from Wikipedia in the current view"
 msgstr ""
 
-msgid "coordinates"
-msgstr ""
-
 msgid "Category"
 msgstr ""
 
diff --git a/i18n/po/sr.po b/i18n/po/sr.po
index 2164b66..8703c79 100644
--- a/i18n/po/sr.po
+++ b/i18n/po/sr.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: josm\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-12-31 03:40+0100\n"
+"POT-Creation-Date: 2016-01-06 03:38+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: 2015-12-31 04:58+0000\n"
-"X-Generator: Launchpad (build 17865)\n"
+"X-Launchpad-Export-Date: 2016-01-06 04:59+0000\n"
+"X-Generator: Launchpad (build 17876)\n"
 "Language: sr\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -1057,9 +1057,6 @@ msgstr ""
 msgid "Overpass query: "
 msgstr ""
 
-msgid "Overpass server: "
-msgstr ""
-
 msgid "Paste"
 msgstr ""
 
@@ -1349,6 +1346,9 @@ msgstr ""
 msgid "Split a way at the selected node."
 msgstr ""
 
+msgid "Cannot split since another split operation is already in progress"
+msgstr ""
+
 msgid ""
 "The current selection cannot be used for splitting - no node is selected."
 msgstr ""
@@ -1460,6 +1460,27 @@ msgid ""
 "own copy and all nodes will be selected."
 msgstr ""
 
+msgid "Existing node"
+msgstr ""
+
+msgid "Both nodes"
+msgstr ""
+
+msgid "New node"
+msgstr ""
+
+msgid "Tags / Memberships"
+msgstr ""
+
+msgid "Unglue"
+msgstr ""
+
+msgid "Where should the tags of the node be put?"
+msgstr ""
+
+msgid "Where should the memberships of this node be put?"
+msgstr ""
+
 msgid "Unglued Node"
 msgstr ""
 
@@ -3050,6 +3071,15 @@ msgstr ""
 msgid "Restoring files"
 msgstr ""
 
+msgid "Unable to delete backup file {0}"
+msgstr ""
+
+msgid "Unable to delete PID file {0}"
+msgstr ""
+
+msgid "Unable to delete archived backup file {0}"
+msgstr ""
+
 msgid "Illegal latitude value ''{0}''"
 msgstr ""
 
@@ -4208,6 +4238,9 @@ msgstr ""
 msgid "No \"to\" way found"
 msgstr ""
 
+msgid "\"from\" way equals \"to\" way"
+msgstr ""
+
 msgid "No \"via\" node or way found"
 msgstr ""
 
@@ -7005,9 +7038,6 @@ msgstr ""
 msgid "Tags: {0} / Memberships: {1}"
 msgstr ""
 
-msgid "Tags / Memberships"
-msgstr ""
-
 msgid "Delete the selected key in all objects"
 msgstr ""
 
@@ -11613,6 +11643,15 @@ msgstr ""
 msgid "Please enter the OSM API URL."
 msgstr ""
 
+msgid "Use Overpass server for object downloads"
+msgstr ""
+
+msgid "Overpass server: "
+msgstr ""
+
+msgid "Overpass server"
+msgstr ""
+
 msgid "Proxy settings"
 msgstr ""
 
@@ -13751,6 +13790,9 @@ msgstr ""
 msgid "reserved"
 msgstr ""
 
+msgid "Unable to delete old preferences file {0}"
+msgstr ""
+
 msgid "Outdated Java version"
 msgstr ""
 
@@ -13842,6 +13884,9 @@ msgid ""
 "contain any JOSM object or suitable text. </p></html>"
 msgstr ""
 
+msgid "Unable to delete file {0}"
+msgstr ""
+
 msgid "ms"
 msgstr ""
 
@@ -16956,6 +17001,9 @@ msgstr ""
 msgid "Tourist buses"
 msgstr ""
 
+msgid "Max. speed Heavy Goods Vehicles (km/h)"
+msgstr ""
+
 msgid "Min. speed (km/h)"
 msgstr ""
 
@@ -19253,12 +19301,6 @@ msgstr ""
 msgid "Dentist"
 msgstr ""
 
-msgid "Nursing Home"
-msgstr ""
-
-msgid "Retirement Home"
-msgstr ""
-
 msgid "Pharmacy"
 msgstr ""
 
@@ -19286,6 +19328,31 @@ msgstr ""
 msgid "Veterinary"
 msgstr ""
 
+msgid "Social Facility"
+msgstr ""
+
+msgid "Nursing Home"
+msgstr ""
+
+msgid "Group Home"
+msgstr ""
+
+msgid "For"
+msgstr ""
+
+msgid "Assisted Living"
+msgstr ""
+
+msgid "Outreach"
+msgstr ""
+
+msgctxt "social_facility"
+msgid "Shelter"
+msgstr ""
+
+msgid "Food Bank"
+msgstr ""
+
 msgid "Toilets/Restrooms"
 msgstr ""
 
@@ -19328,6 +19395,13 @@ msgstr ""
 msgid "urinal"
 msgstr ""
 
+msgctxt "toilets"
+msgid "Diaper"
+msgstr ""
+
+msgid "room"
+msgstr ""
+
 msgid "Post Box"
 msgstr ""
 
@@ -23365,24 +23439,24 @@ msgstr ""
 msgid "Download GPX track from openstreetmap.org"
 msgstr ""
 
+msgid "Download Track"
+msgstr ""
+
+msgid "Filename"
+msgstr ""
+
 msgid ""
 "Error occurred while parsing gpx file {0}. Only a part of the file will be "
 "available."
 msgstr ""
 
-msgid "Invalid URL {0}"
-msgstr ""
-
 msgid "Error fetching URL {0}"
 msgstr ""
 
 msgid "Error parsing data from URL {0}"
 msgstr ""
 
-msgid "Download Track"
-msgstr ""
-
-msgid "Filename"
+msgid "Invalid URL {0}"
 msgstr ""
 
 msgid "Private (only shared as anonymous, unordered points)"
@@ -23432,9 +23506,6 @@ msgstr ""
 msgid "Uploading trace ..."
 msgstr ""
 
-msgid "Connecting..."
-msgstr ""
-
 msgid "Upload canceled"
 msgstr ""
 
@@ -27873,6 +27944,69 @@ msgstr ""
 msgid "Please load some photos."
 msgstr ""
 
+msgid "Edit photo GPS data"
+msgstr ""
+
+msgid "Edit GPS data of selected photo."
+msgstr ""
+
+msgid "Edit Photo GPS Data"
+msgstr ""
+
+msgid "Please select an image first."
+msgstr ""
+
+msgid "No image selected"
+msgstr ""
+
+msgid "(Empty values delete the according fields.)"
+msgstr ""
+
+msgid "coordinates"
+msgstr ""
+
+msgid "Latitude and longitude"
+msgstr ""
+
+msgid "Edit Image Coordinates"
+msgstr ""
+
+msgid "Edit coordinates in separate editor"
+msgstr ""
+
+msgid "altitude"
+msgstr ""
+
+msgid "Altitude:"
+msgstr ""
+
+msgid "speed"
+msgstr ""
+
+msgid "positive number or empty"
+msgstr ""
+
+msgid "Speed:"
+msgstr ""
+
+msgid "direction"
+msgstr ""
+
+msgid "range -360.0 .. 360.0, or empty"
+msgstr ""
+
+msgid "Direction:"
+msgstr ""
+
+msgid "°"
+msgstr ""
+
+msgid "Undo changes made in this dialog"
+msgstr ""
+
+msgid "Reload GPS data from image file"
+msgstr ""
+
 msgid "New layer for untagged images"
 msgstr ""
 
@@ -30889,9 +31023,6 @@ msgstr ""
 msgid "Fetches all coordinates from Wikipedia in the current view"
 msgstr ""
 
-msgid "coordinates"
-msgstr ""
-
 msgid "Category"
 msgstr ""
 
diff --git a/i18n/po/sv.po b/i18n/po/sv.po
index 7695268..475f8cd 100644
--- a/i18n/po/sv.po
+++ b/i18n/po/sv.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: josm\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-12-31 03:40+0100\n"
+"POT-Creation-Date: 2016-01-06 03:38+0100\n"
 "PO-Revision-Date: 2015-12-11 20:32+0000\n"
 "Last-Translator: Niklas Henriksson <fringillus92 at gmail.com>\n"
 "Language-Team: Swedish <sv at li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Launchpad-Export-Date: 2015-12-31 05:00+0000\n"
-"X-Generator: Launchpad (build 17865)\n"
+"X-Launchpad-Export-Date: 2016-01-06 05:02+0000\n"
+"X-Generator: Launchpad (build 17876)\n"
 "Language: sv\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -1132,9 +1132,6 @@ msgstr "Tolkningsfel"
 msgid "Overpass query: "
 msgstr "Overpass-fråga: "
 
-msgid "Overpass server: "
-msgstr "Overpass-server: "
-
 msgid "Paste"
 msgstr "Klistra in"
 
@@ -1439,6 +1436,9 @@ msgstr "Dela sträcka"
 msgid "Split a way at the selected node."
 msgstr "Dela sträckan vid vald nod."
 
+msgid "Cannot split since another split operation is already in progress"
+msgstr ""
+
 msgid ""
 "The current selection cannot be used for splitting - no node is selected."
 msgstr ""
@@ -1572,6 +1572,27 @@ msgstr ""
 "sträckor att\n"
 "få sina egna kopior och alla noder kommer att vara valda."
 
+msgid "Existing node"
+msgstr ""
+
+msgid "Both nodes"
+msgstr ""
+
+msgid "New node"
+msgstr ""
+
+msgid "Tags / Memberships"
+msgstr "Taggar / Medlemskap"
+
+msgid "Unglue"
+msgstr ""
+
+msgid "Where should the tags of the node be put?"
+msgstr ""
+
+msgid "Where should the memberships of this node be put?"
+msgstr ""
+
 msgid "Unglued Node"
 msgstr "Frigjord nod"
 
@@ -3294,6 +3315,15 @@ msgstr "Ditt arbete har sparats automatiskt."
 msgid "Restoring files"
 msgstr "Återställer filer"
 
+msgid "Unable to delete backup file {0}"
+msgstr ""
+
+msgid "Unable to delete PID file {0}"
+msgstr ""
+
+msgid "Unable to delete archived backup file {0}"
+msgstr ""
+
 msgid "Illegal latitude value ''{0}''"
 msgstr "Ogiltigt latitud-värde ''{0}''"
 
@@ -4490,6 +4520,9 @@ msgstr "Ingen sträcka med rollen \"från\" (from) hittades"
 msgid "No \"to\" way found"
 msgstr "Ingen sträcka med rollen \"till\" (to) hittades"
 
+msgid "\"from\" way equals \"to\" way"
+msgstr ""
+
 msgid "No \"via\" node or way found"
 msgstr "Ingen sträcka eller nod med rollen \"via\" hittades"
 
@@ -7338,9 +7371,6 @@ msgstr ""
 msgid "Tags: {0} / Memberships: {1}"
 msgstr "Taggar: {0} / Medlemskap: {1}"
 
-msgid "Tags / Memberships"
-msgstr "Taggar / Medlemskap"
-
 msgid "Delete the selected key in all objects"
 msgstr "Ta bort den valda nyckeln från alla objekt."
 
@@ -12097,6 +12127,15 @@ msgstr ""
 msgid "Please enter the OSM API URL."
 msgstr ""
 
+msgid "Use Overpass server for object downloads"
+msgstr ""
+
+msgid "Overpass server: "
+msgstr "Overpass-server: "
+
+msgid "Overpass server"
+msgstr ""
+
 msgid "Proxy settings"
 msgstr "Proxyinställningar"
 
@@ -14341,6 +14380,9 @@ msgstr ""
 msgid "reserved"
 msgstr "reserverad"
 
+msgid "Unable to delete old preferences file {0}"
+msgstr ""
+
 msgid "Outdated Java version"
 msgstr "Föråldrad Java-version"
 
@@ -14438,6 +14480,9 @@ msgstr ""
 "<html><p> Tyvärr, det är omöjligt att klistra in taggar från bufferten. Den "
 "innehåller inget JOSM-objekt eller lämplig text. </p></html>"
 
+msgid "Unable to delete file {0}"
+msgstr ""
+
 msgid "ms"
 msgstr ""
 
@@ -17572,6 +17617,9 @@ msgstr "Allmänna transportmedel (psv)"
 msgid "Tourist buses"
 msgstr "Turistbussar"
 
+msgid "Max. speed Heavy Goods Vehicles (km/h)"
+msgstr ""
+
 msgid "Min. speed (km/h)"
 msgstr "Minsta tillåtna hastighet (km/h)"
 
@@ -19879,12 +19927,6 @@ msgstr "Doktormottagning"
 msgid "Dentist"
 msgstr "Tandläkare"
 
-msgid "Nursing Home"
-msgstr "Vårdhem"
-
-msgid "Retirement Home"
-msgstr "Äldreboende"
-
 msgid "Pharmacy"
 msgstr "Apotek"
 
@@ -19912,6 +19954,31 @@ msgstr "Använd internationellt format, ex +12-345-67890"
 msgid "Veterinary"
 msgstr "Veterinär"
 
+msgid "Social Facility"
+msgstr ""
+
+msgid "Nursing Home"
+msgstr "Vårdhem"
+
+msgid "Group Home"
+msgstr ""
+
+msgid "For"
+msgstr ""
+
+msgid "Assisted Living"
+msgstr ""
+
+msgid "Outreach"
+msgstr ""
+
+msgctxt "social_facility"
+msgid "Shelter"
+msgstr ""
+
+msgid "Food Bank"
+msgstr ""
+
 msgid "Toilets/Restrooms"
 msgstr "Toaletter"
 
@@ -19954,6 +20021,13 @@ msgstr "på huk"
 msgid "urinal"
 msgstr "urinoar"
 
+msgctxt "toilets"
+msgid "Diaper"
+msgstr ""
+
+msgid "room"
+msgstr ""
+
 msgid "Post Box"
 msgstr "Brevlåda"
 
@@ -24000,25 +24074,25 @@ msgstr "Hämta spår..."
 msgid "Download GPX track from openstreetmap.org"
 msgstr "Hämta hem GPX-spår från openstreetmap.org"
 
+msgid "Download Track"
+msgstr "Hämta spår"
+
+msgid "Filename"
+msgstr "Filnamn"
+
 msgid ""
 "Error occurred while parsing gpx file {0}. Only a part of the file will be "
 "available."
 msgstr ""
 
-msgid "Invalid URL {0}"
-msgstr "Ogiltig URL {0}"
-
 msgid "Error fetching URL {0}"
 msgstr ""
 
 msgid "Error parsing data from URL {0}"
 msgstr ""
 
-msgid "Download Track"
-msgstr "Hämta spår"
-
-msgid "Filename"
-msgstr "Filnamn"
+msgid "Invalid URL {0}"
+msgstr "Ogiltig URL {0}"
 
 msgid "Private (only shared as anonymous, unordered points)"
 msgstr "Privat (delas endast som anonyma, oordnade punkter)"
@@ -24067,9 +24141,6 @@ msgstr "Inget GPX-lager valt. Kan inte skicka in ett spår."
 msgid "Uploading trace ..."
 msgstr ""
 
-msgid "Connecting..."
-msgstr "Ansluter..."
-
 msgid "Upload canceled"
 msgstr ""
 
@@ -28547,6 +28618,69 @@ msgstr ""
 msgid "Please load some photos."
 msgstr ""
 
+msgid "Edit photo GPS data"
+msgstr ""
+
+msgid "Edit GPS data of selected photo."
+msgstr ""
+
+msgid "Edit Photo GPS Data"
+msgstr ""
+
+msgid "Please select an image first."
+msgstr ""
+
+msgid "No image selected"
+msgstr ""
+
+msgid "(Empty values delete the according fields.)"
+msgstr ""
+
+msgid "coordinates"
+msgstr "koordinater"
+
+msgid "Latitude and longitude"
+msgstr ""
+
+msgid "Edit Image Coordinates"
+msgstr ""
+
+msgid "Edit coordinates in separate editor"
+msgstr ""
+
+msgid "altitude"
+msgstr ""
+
+msgid "Altitude:"
+msgstr ""
+
+msgid "speed"
+msgstr ""
+
+msgid "positive number or empty"
+msgstr ""
+
+msgid "Speed:"
+msgstr ""
+
+msgid "direction"
+msgstr ""
+
+msgid "range -360.0 .. 360.0, or empty"
+msgstr ""
+
+msgid "Direction:"
+msgstr ""
+
+msgid "°"
+msgstr ""
+
+msgid "Undo changes made in this dialog"
+msgstr ""
+
+msgid "Reload GPS data from image file"
+msgstr ""
+
 msgid "New layer for untagged images"
 msgstr ""
 
@@ -31577,9 +31711,6 @@ msgstr "{0}.Wikipedia.org: {1}"
 msgid "Fetches all coordinates from Wikipedia in the current view"
 msgstr "Hämtar alla koordinater från Wikipedia i aktuell vy"
 
-msgid "coordinates"
-msgstr "koordinater"
-
 msgid "Category"
 msgstr "Kategori"
 
diff --git a/i18n/po/ta.po b/i18n/po/ta.po
index dc0054f..3ba9f10 100644
--- a/i18n/po/ta.po
+++ b/i18n/po/ta.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: josm\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-12-31 03:40+0100\n"
+"POT-Creation-Date: 2016-01-06 03:38+0100\n"
 "PO-Revision-Date: 2015-10-28 15:55+0000\n"
 "Last-Translator: நவலடி <navaladi at gmail.com>\n"
 "Language-Team: Tamil <ta at li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Launchpad-Export-Date: 2015-12-31 05:01+0000\n"
-"X-Generator: Launchpad (build 17865)\n"
+"X-Launchpad-Export-Date: 2016-01-06 05:02+0000\n"
+"X-Generator: Launchpad (build 17876)\n"
 "X-Poedit-Country: INDIA\n"
 "Language: ta\n"
 "X-Poedit-Language: Tamil\n"
@@ -1080,9 +1080,6 @@ msgstr ""
 msgid "Overpass query: "
 msgstr ""
 
-msgid "Overpass server: "
-msgstr ""
-
 msgid "Paste"
 msgstr "ஒட்டு"
 
@@ -1375,6 +1372,9 @@ msgstr "வழியை பிரி"
 msgid "Split a way at the selected node."
 msgstr "தேர்ந்தெடுத்த புள்ளியில் வழியைப் பிரி"
 
+msgid "Cannot split since another split operation is already in progress"
+msgstr ""
+
 msgid ""
 "The current selection cannot be used for splitting - no node is selected."
 msgstr ""
@@ -1493,6 +1493,27 @@ msgid ""
 "own copy and all nodes will be selected."
 msgstr ""
 
+msgid "Existing node"
+msgstr ""
+
+msgid "Both nodes"
+msgstr ""
+
+msgid "New node"
+msgstr ""
+
+msgid "Tags / Memberships"
+msgstr ""
+
+msgid "Unglue"
+msgstr ""
+
+msgid "Where should the tags of the node be put?"
+msgstr ""
+
+msgid "Where should the memberships of this node be put?"
+msgstr ""
+
 msgid "Unglued Node"
 msgstr ""
 
@@ -3085,6 +3106,15 @@ msgstr ""
 msgid "Restoring files"
 msgstr ""
 
+msgid "Unable to delete backup file {0}"
+msgstr ""
+
+msgid "Unable to delete PID file {0}"
+msgstr ""
+
+msgid "Unable to delete archived backup file {0}"
+msgstr ""
+
 msgid "Illegal latitude value ''{0}''"
 msgstr ""
 
@@ -4243,6 +4273,9 @@ msgstr ""
 msgid "No \"to\" way found"
 msgstr ""
 
+msgid "\"from\" way equals \"to\" way"
+msgstr ""
+
 msgid "No \"via\" node or way found"
 msgstr ""
 
@@ -7041,9 +7074,6 @@ msgstr ""
 msgid "Tags: {0} / Memberships: {1}"
 msgstr ""
 
-msgid "Tags / Memberships"
-msgstr ""
-
 msgid "Delete the selected key in all objects"
 msgstr ""
 
@@ -11650,6 +11680,15 @@ msgstr ""
 msgid "Please enter the OSM API URL."
 msgstr ""
 
+msgid "Use Overpass server for object downloads"
+msgstr ""
+
+msgid "Overpass server: "
+msgstr ""
+
+msgid "Overpass server"
+msgstr ""
+
 msgid "Proxy settings"
 msgstr ""
 
@@ -13788,6 +13827,9 @@ msgstr ""
 msgid "reserved"
 msgstr ""
 
+msgid "Unable to delete old preferences file {0}"
+msgstr ""
+
 msgid "Outdated Java version"
 msgstr ""
 
@@ -13879,6 +13921,9 @@ msgid ""
 "contain any JOSM object or suitable text. </p></html>"
 msgstr ""
 
+msgid "Unable to delete file {0}"
+msgstr ""
+
 msgid "ms"
 msgstr ""
 
@@ -16993,6 +17038,9 @@ msgstr ""
 msgid "Tourist buses"
 msgstr ""
 
+msgid "Max. speed Heavy Goods Vehicles (km/h)"
+msgstr ""
+
 msgid "Min. speed (km/h)"
 msgstr ""
 
@@ -19290,12 +19338,6 @@ msgstr ""
 msgid "Dentist"
 msgstr "பல்மருத்துவர்"
 
-msgid "Nursing Home"
-msgstr ""
-
-msgid "Retirement Home"
-msgstr ""
-
 msgid "Pharmacy"
 msgstr "மருந்தகம்"
 
@@ -19323,6 +19365,31 @@ msgstr ""
 msgid "Veterinary"
 msgstr ""
 
+msgid "Social Facility"
+msgstr ""
+
+msgid "Nursing Home"
+msgstr ""
+
+msgid "Group Home"
+msgstr ""
+
+msgid "For"
+msgstr ""
+
+msgid "Assisted Living"
+msgstr ""
+
+msgid "Outreach"
+msgstr ""
+
+msgctxt "social_facility"
+msgid "Shelter"
+msgstr ""
+
+msgid "Food Bank"
+msgstr ""
+
 msgid "Toilets/Restrooms"
 msgstr ""
 
@@ -19365,6 +19432,13 @@ msgstr ""
 msgid "urinal"
 msgstr ""
 
+msgctxt "toilets"
+msgid "Diaper"
+msgstr ""
+
+msgid "room"
+msgstr ""
+
 msgid "Post Box"
 msgstr ""
 
@@ -23402,24 +23476,24 @@ msgstr ""
 msgid "Download GPX track from openstreetmap.org"
 msgstr ""
 
+msgid "Download Track"
+msgstr ""
+
+msgid "Filename"
+msgstr ""
+
 msgid ""
 "Error occurred while parsing gpx file {0}. Only a part of the file will be "
 "available."
 msgstr ""
 
-msgid "Invalid URL {0}"
-msgstr ""
-
 msgid "Error fetching URL {0}"
 msgstr ""
 
 msgid "Error parsing data from URL {0}"
 msgstr ""
 
-msgid "Download Track"
-msgstr ""
-
-msgid "Filename"
+msgid "Invalid URL {0}"
 msgstr ""
 
 msgid "Private (only shared as anonymous, unordered points)"
@@ -23469,9 +23543,6 @@ msgstr ""
 msgid "Uploading trace ..."
 msgstr ""
 
-msgid "Connecting..."
-msgstr ""
-
 msgid "Upload canceled"
 msgstr ""
 
@@ -27916,6 +27987,69 @@ msgstr ""
 msgid "Please load some photos."
 msgstr ""
 
+msgid "Edit photo GPS data"
+msgstr ""
+
+msgid "Edit GPS data of selected photo."
+msgstr ""
+
+msgid "Edit Photo GPS Data"
+msgstr ""
+
+msgid "Please select an image first."
+msgstr ""
+
+msgid "No image selected"
+msgstr ""
+
+msgid "(Empty values delete the according fields.)"
+msgstr ""
+
+msgid "coordinates"
+msgstr ""
+
+msgid "Latitude and longitude"
+msgstr ""
+
+msgid "Edit Image Coordinates"
+msgstr ""
+
+msgid "Edit coordinates in separate editor"
+msgstr ""
+
+msgid "altitude"
+msgstr ""
+
+msgid "Altitude:"
+msgstr ""
+
+msgid "speed"
+msgstr ""
+
+msgid "positive number or empty"
+msgstr ""
+
+msgid "Speed:"
+msgstr ""
+
+msgid "direction"
+msgstr ""
+
+msgid "range -360.0 .. 360.0, or empty"
+msgstr ""
+
+msgid "Direction:"
+msgstr ""
+
+msgid "°"
+msgstr ""
+
+msgid "Undo changes made in this dialog"
+msgstr ""
+
+msgid "Reload GPS data from image file"
+msgstr ""
+
 msgid "New layer for untagged images"
 msgstr ""
 
@@ -30932,9 +31066,6 @@ msgstr ""
 msgid "Fetches all coordinates from Wikipedia in the current view"
 msgstr ""
 
-msgid "coordinates"
-msgstr ""
-
 msgid "Category"
 msgstr ""
 
diff --git a/i18n/po/te.po b/i18n/po/te.po
index a1da928..2231c44 100644
--- a/i18n/po/te.po
+++ b/i18n/po/te.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: josm\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-12-31 03:40+0100\n"
+"POT-Creation-Date: 2016-01-06 03:38+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: 2015-12-31 05:01+0000\n"
-"X-Generator: Launchpad (build 17865)\n"
+"X-Launchpad-Export-Date: 2016-01-06 05:03+0000\n"
+"X-Generator: Launchpad (build 17876)\n"
 "Language: te\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -1056,9 +1056,6 @@ msgstr ""
 msgid "Overpass query: "
 msgstr ""
 
-msgid "Overpass server: "
-msgstr ""
-
 msgid "Paste"
 msgstr ""
 
@@ -1348,6 +1345,9 @@ msgstr ""
 msgid "Split a way at the selected node."
 msgstr ""
 
+msgid "Cannot split since another split operation is already in progress"
+msgstr ""
+
 msgid ""
 "The current selection cannot be used for splitting - no node is selected."
 msgstr ""
@@ -1459,6 +1459,27 @@ msgid ""
 "own copy and all nodes will be selected."
 msgstr ""
 
+msgid "Existing node"
+msgstr ""
+
+msgid "Both nodes"
+msgstr ""
+
+msgid "New node"
+msgstr ""
+
+msgid "Tags / Memberships"
+msgstr ""
+
+msgid "Unglue"
+msgstr ""
+
+msgid "Where should the tags of the node be put?"
+msgstr ""
+
+msgid "Where should the memberships of this node be put?"
+msgstr ""
+
 msgid "Unglued Node"
 msgstr ""
 
@@ -3049,6 +3070,15 @@ msgstr ""
 msgid "Restoring files"
 msgstr ""
 
+msgid "Unable to delete backup file {0}"
+msgstr ""
+
+msgid "Unable to delete PID file {0}"
+msgstr ""
+
+msgid "Unable to delete archived backup file {0}"
+msgstr ""
+
 msgid "Illegal latitude value ''{0}''"
 msgstr ""
 
@@ -4207,6 +4237,9 @@ msgstr ""
 msgid "No \"to\" way found"
 msgstr ""
 
+msgid "\"from\" way equals \"to\" way"
+msgstr ""
+
 msgid "No \"via\" node or way found"
 msgstr ""
 
@@ -7004,9 +7037,6 @@ msgstr ""
 msgid "Tags: {0} / Memberships: {1}"
 msgstr ""
 
-msgid "Tags / Memberships"
-msgstr ""
-
 msgid "Delete the selected key in all objects"
 msgstr ""
 
@@ -11611,6 +11641,15 @@ msgstr ""
 msgid "Please enter the OSM API URL."
 msgstr ""
 
+msgid "Use Overpass server for object downloads"
+msgstr ""
+
+msgid "Overpass server: "
+msgstr ""
+
+msgid "Overpass server"
+msgstr ""
+
 msgid "Proxy settings"
 msgstr ""
 
@@ -13749,6 +13788,9 @@ msgstr ""
 msgid "reserved"
 msgstr ""
 
+msgid "Unable to delete old preferences file {0}"
+msgstr ""
+
 msgid "Outdated Java version"
 msgstr ""
 
@@ -13840,6 +13882,9 @@ msgid ""
 "contain any JOSM object or suitable text. </p></html>"
 msgstr ""
 
+msgid "Unable to delete file {0}"
+msgstr ""
+
 msgid "ms"
 msgstr ""
 
@@ -16954,6 +16999,9 @@ msgstr ""
 msgid "Tourist buses"
 msgstr ""
 
+msgid "Max. speed Heavy Goods Vehicles (km/h)"
+msgstr ""
+
 msgid "Min. speed (km/h)"
 msgstr ""
 
@@ -19251,12 +19299,6 @@ msgstr ""
 msgid "Dentist"
 msgstr ""
 
-msgid "Nursing Home"
-msgstr ""
-
-msgid "Retirement Home"
-msgstr ""
-
 msgid "Pharmacy"
 msgstr ""
 
@@ -19284,6 +19326,31 @@ msgstr ""
 msgid "Veterinary"
 msgstr ""
 
+msgid "Social Facility"
+msgstr ""
+
+msgid "Nursing Home"
+msgstr ""
+
+msgid "Group Home"
+msgstr ""
+
+msgid "For"
+msgstr ""
+
+msgid "Assisted Living"
+msgstr ""
+
+msgid "Outreach"
+msgstr ""
+
+msgctxt "social_facility"
+msgid "Shelter"
+msgstr ""
+
+msgid "Food Bank"
+msgstr ""
+
 msgid "Toilets/Restrooms"
 msgstr ""
 
@@ -19326,6 +19393,13 @@ msgstr ""
 msgid "urinal"
 msgstr ""
 
+msgctxt "toilets"
+msgid "Diaper"
+msgstr ""
+
+msgid "room"
+msgstr ""
+
 msgid "Post Box"
 msgstr ""
 
@@ -23363,24 +23437,24 @@ msgstr ""
 msgid "Download GPX track from openstreetmap.org"
 msgstr ""
 
+msgid "Download Track"
+msgstr ""
+
+msgid "Filename"
+msgstr ""
+
 msgid ""
 "Error occurred while parsing gpx file {0}. Only a part of the file will be "
 "available."
 msgstr ""
 
-msgid "Invalid URL {0}"
-msgstr ""
-
 msgid "Error fetching URL {0}"
 msgstr ""
 
 msgid "Error parsing data from URL {0}"
 msgstr ""
 
-msgid "Download Track"
-msgstr ""
-
-msgid "Filename"
+msgid "Invalid URL {0}"
 msgstr ""
 
 msgid "Private (only shared as anonymous, unordered points)"
@@ -23430,9 +23504,6 @@ msgstr ""
 msgid "Uploading trace ..."
 msgstr ""
 
-msgid "Connecting..."
-msgstr ""
-
 msgid "Upload canceled"
 msgstr ""
 
@@ -27871,6 +27942,69 @@ msgstr ""
 msgid "Please load some photos."
 msgstr ""
 
+msgid "Edit photo GPS data"
+msgstr ""
+
+msgid "Edit GPS data of selected photo."
+msgstr ""
+
+msgid "Edit Photo GPS Data"
+msgstr ""
+
+msgid "Please select an image first."
+msgstr ""
+
+msgid "No image selected"
+msgstr ""
+
+msgid "(Empty values delete the according fields.)"
+msgstr ""
+
+msgid "coordinates"
+msgstr ""
+
+msgid "Latitude and longitude"
+msgstr ""
+
+msgid "Edit Image Coordinates"
+msgstr ""
+
+msgid "Edit coordinates in separate editor"
+msgstr ""
+
+msgid "altitude"
+msgstr ""
+
+msgid "Altitude:"
+msgstr ""
+
+msgid "speed"
+msgstr ""
+
+msgid "positive number or empty"
+msgstr ""
+
+msgid "Speed:"
+msgstr ""
+
+msgid "direction"
+msgstr ""
+
+msgid "range -360.0 .. 360.0, or empty"
+msgstr ""
+
+msgid "Direction:"
+msgstr ""
+
+msgid "°"
+msgstr ""
+
+msgid "Undo changes made in this dialog"
+msgstr ""
+
+msgid "Reload GPS data from image file"
+msgstr ""
+
 msgid "New layer for untagged images"
 msgstr ""
 
@@ -30887,9 +31021,6 @@ msgstr ""
 msgid "Fetches all coordinates from Wikipedia in the current view"
 msgstr ""
 
-msgid "coordinates"
-msgstr ""
-
 msgid "Category"
 msgstr ""
 
diff --git a/i18n/po/th.po b/i18n/po/th.po
index 3c160af..218e46a 100644
--- a/i18n/po/th.po
+++ b/i18n/po/th.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: josm\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-12-31 03:40+0100\n"
+"POT-Creation-Date: 2016-01-06 03:38+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: 2015-12-31 05:02+0000\n"
-"X-Generator: Launchpad (build 17865)\n"
+"X-Launchpad-Export-Date: 2016-01-06 05:03+0000\n"
+"X-Generator: Launchpad (build 17876)\n"
 "Language: th\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -1056,9 +1056,6 @@ msgstr ""
 msgid "Overpass query: "
 msgstr ""
 
-msgid "Overpass server: "
-msgstr ""
-
 msgid "Paste"
 msgstr ""
 
@@ -1348,6 +1345,9 @@ msgstr ""
 msgid "Split a way at the selected node."
 msgstr ""
 
+msgid "Cannot split since another split operation is already in progress"
+msgstr ""
+
 msgid ""
 "The current selection cannot be used for splitting - no node is selected."
 msgstr ""
@@ -1459,6 +1459,27 @@ msgid ""
 "own copy and all nodes will be selected."
 msgstr ""
 
+msgid "Existing node"
+msgstr ""
+
+msgid "Both nodes"
+msgstr ""
+
+msgid "New node"
+msgstr ""
+
+msgid "Tags / Memberships"
+msgstr ""
+
+msgid "Unglue"
+msgstr ""
+
+msgid "Where should the tags of the node be put?"
+msgstr ""
+
+msgid "Where should the memberships of this node be put?"
+msgstr ""
+
 msgid "Unglued Node"
 msgstr ""
 
@@ -3049,6 +3070,15 @@ msgstr ""
 msgid "Restoring files"
 msgstr ""
 
+msgid "Unable to delete backup file {0}"
+msgstr ""
+
+msgid "Unable to delete PID file {0}"
+msgstr ""
+
+msgid "Unable to delete archived backup file {0}"
+msgstr ""
+
 msgid "Illegal latitude value ''{0}''"
 msgstr ""
 
@@ -4207,6 +4237,9 @@ msgstr ""
 msgid "No \"to\" way found"
 msgstr ""
 
+msgid "\"from\" way equals \"to\" way"
+msgstr ""
+
 msgid "No \"via\" node or way found"
 msgstr ""
 
@@ -7004,9 +7037,6 @@ msgstr ""
 msgid "Tags: {0} / Memberships: {1}"
 msgstr ""
 
-msgid "Tags / Memberships"
-msgstr ""
-
 msgid "Delete the selected key in all objects"
 msgstr ""
 
@@ -11611,6 +11641,15 @@ msgstr ""
 msgid "Please enter the OSM API URL."
 msgstr ""
 
+msgid "Use Overpass server for object downloads"
+msgstr ""
+
+msgid "Overpass server: "
+msgstr ""
+
+msgid "Overpass server"
+msgstr ""
+
 msgid "Proxy settings"
 msgstr ""
 
@@ -13749,6 +13788,9 @@ msgstr ""
 msgid "reserved"
 msgstr ""
 
+msgid "Unable to delete old preferences file {0}"
+msgstr ""
+
 msgid "Outdated Java version"
 msgstr ""
 
@@ -13840,6 +13882,9 @@ msgid ""
 "contain any JOSM object or suitable text. </p></html>"
 msgstr ""
 
+msgid "Unable to delete file {0}"
+msgstr ""
+
 msgid "ms"
 msgstr ""
 
@@ -16954,6 +16999,9 @@ msgstr ""
 msgid "Tourist buses"
 msgstr ""
 
+msgid "Max. speed Heavy Goods Vehicles (km/h)"
+msgstr ""
+
 msgid "Min. speed (km/h)"
 msgstr ""
 
@@ -19251,12 +19299,6 @@ msgstr ""
 msgid "Dentist"
 msgstr ""
 
-msgid "Nursing Home"
-msgstr ""
-
-msgid "Retirement Home"
-msgstr ""
-
 msgid "Pharmacy"
 msgstr ""
 
@@ -19284,6 +19326,31 @@ msgstr ""
 msgid "Veterinary"
 msgstr ""
 
+msgid "Social Facility"
+msgstr ""
+
+msgid "Nursing Home"
+msgstr ""
+
+msgid "Group Home"
+msgstr ""
+
+msgid "For"
+msgstr ""
+
+msgid "Assisted Living"
+msgstr ""
+
+msgid "Outreach"
+msgstr ""
+
+msgctxt "social_facility"
+msgid "Shelter"
+msgstr ""
+
+msgid "Food Bank"
+msgstr ""
+
 msgid "Toilets/Restrooms"
 msgstr ""
 
@@ -19326,6 +19393,13 @@ msgstr ""
 msgid "urinal"
 msgstr ""
 
+msgctxt "toilets"
+msgid "Diaper"
+msgstr ""
+
+msgid "room"
+msgstr ""
+
 msgid "Post Box"
 msgstr ""
 
@@ -23363,24 +23437,24 @@ msgstr ""
 msgid "Download GPX track from openstreetmap.org"
 msgstr ""
 
+msgid "Download Track"
+msgstr ""
+
+msgid "Filename"
+msgstr ""
+
 msgid ""
 "Error occurred while parsing gpx file {0}. Only a part of the file will be "
 "available."
 msgstr ""
 
-msgid "Invalid URL {0}"
-msgstr ""
-
 msgid "Error fetching URL {0}"
 msgstr ""
 
 msgid "Error parsing data from URL {0}"
 msgstr ""
 
-msgid "Download Track"
-msgstr ""
-
-msgid "Filename"
+msgid "Invalid URL {0}"
 msgstr ""
 
 msgid "Private (only shared as anonymous, unordered points)"
@@ -23430,9 +23504,6 @@ msgstr ""
 msgid "Uploading trace ..."
 msgstr ""
 
-msgid "Connecting..."
-msgstr ""
-
 msgid "Upload canceled"
 msgstr ""
 
@@ -27871,6 +27942,69 @@ msgstr ""
 msgid "Please load some photos."
 msgstr ""
 
+msgid "Edit photo GPS data"
+msgstr ""
+
+msgid "Edit GPS data of selected photo."
+msgstr ""
+
+msgid "Edit Photo GPS Data"
+msgstr ""
+
+msgid "Please select an image first."
+msgstr ""
+
+msgid "No image selected"
+msgstr ""
+
+msgid "(Empty values delete the according fields.)"
+msgstr ""
+
+msgid "coordinates"
+msgstr ""
+
+msgid "Latitude and longitude"
+msgstr ""
+
+msgid "Edit Image Coordinates"
+msgstr ""
+
+msgid "Edit coordinates in separate editor"
+msgstr ""
+
+msgid "altitude"
+msgstr ""
+
+msgid "Altitude:"
+msgstr ""
+
+msgid "speed"
+msgstr ""
+
+msgid "positive number or empty"
+msgstr ""
+
+msgid "Speed:"
+msgstr ""
+
+msgid "direction"
+msgstr ""
+
+msgid "range -360.0 .. 360.0, or empty"
+msgstr ""
+
+msgid "Direction:"
+msgstr ""
+
+msgid "°"
+msgstr ""
+
+msgid "Undo changes made in this dialog"
+msgstr ""
+
+msgid "Reload GPS data from image file"
+msgstr ""
+
 msgid "New layer for untagged images"
 msgstr ""
 
@@ -30887,9 +31021,6 @@ msgstr ""
 msgid "Fetches all coordinates from Wikipedia in the current view"
 msgstr ""
 
-msgid "coordinates"
-msgstr ""
-
 msgid "Category"
 msgstr ""
 
diff --git a/i18n/po/tr.po b/i18n/po/tr.po
index 345db83..60c390d 100644
--- a/i18n/po/tr.po
+++ b/i18n/po/tr.po
@@ -9,7 +9,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: josm\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-12-31 03:40+0100\n"
+"POT-Creation-Date: 2016-01-06 03:38+0100\n"
 "PO-Revision-Date: 2015-11-16 12:04+0000\n"
 "Last-Translator: Erkin Alp Güney <Unknown>\n"
 "Language-Team: Türkçe <>\n"
@@ -17,8 +17,8 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Launchpad-Export-Date: 2015-12-31 05:02+0000\n"
-"X-Generator: Launchpad (build 17865)\n"
+"X-Launchpad-Export-Date: 2016-01-06 05:04+0000\n"
+"X-Generator: Launchpad (build 17876)\n"
 "Language: \n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -1081,9 +1081,6 @@ msgstr ""
 msgid "Overpass query: "
 msgstr ""
 
-msgid "Overpass server: "
-msgstr ""
-
 msgid "Paste"
 msgstr "Yapıştır"
 
@@ -1383,6 +1380,9 @@ msgstr "Yolları Böl"
 msgid "Split a way at the selected node."
 msgstr "Seçili kavşakta yolu böl."
 
+msgid "Cannot split since another split operation is already in progress"
+msgstr ""
+
 msgid ""
 "The current selection cannot be used for splitting - no node is selected."
 msgstr ""
@@ -1504,6 +1504,27 @@ msgstr ""
 "oluşturur ve yeni kavşaklar seçilir. Aksi halde, bütün yollar kendi "
 "kopyalarını oluşturur ve bütün kavşaklar seçilir"
 
+msgid "Existing node"
+msgstr ""
+
+msgid "Both nodes"
+msgstr ""
+
+msgid "New node"
+msgstr ""
+
+msgid "Tags / Memberships"
+msgstr ""
+
+msgid "Unglue"
+msgstr ""
+
+msgid "Where should the tags of the node be put?"
+msgstr ""
+
+msgid "Where should the memberships of this node be put?"
+msgstr ""
+
 msgid "Unglued Node"
 msgstr ""
 
@@ -3103,6 +3124,15 @@ msgstr ""
 msgid "Restoring files"
 msgstr "Dosyalar geri yükleniyor"
 
+msgid "Unable to delete backup file {0}"
+msgstr ""
+
+msgid "Unable to delete PID file {0}"
+msgstr ""
+
+msgid "Unable to delete archived backup file {0}"
+msgstr ""
+
 msgid "Illegal latitude value ''{0}''"
 msgstr "enlem değeri ''{0}'' geçerli değil"
 
@@ -4270,6 +4300,9 @@ msgstr ""
 msgid "No \"to\" way found"
 msgstr ""
 
+msgid "\"from\" way equals \"to\" way"
+msgstr ""
+
 msgid "No \"via\" node or way found"
 msgstr ""
 
@@ -7068,9 +7101,6 @@ msgstr ""
 msgid "Tags: {0} / Memberships: {1}"
 msgstr ""
 
-msgid "Tags / Memberships"
-msgstr ""
-
 msgid "Delete the selected key in all objects"
 msgstr "Seçili anahtarı her objeden sil"
 
@@ -11702,6 +11732,15 @@ msgstr ""
 msgid "Please enter the OSM API URL."
 msgstr ""
 
+msgid "Use Overpass server for object downloads"
+msgstr ""
+
+msgid "Overpass server: "
+msgstr ""
+
+msgid "Overpass server"
+msgstr ""
+
 msgid "Proxy settings"
 msgstr ""
 
@@ -13850,6 +13889,9 @@ msgstr ""
 msgid "reserved"
 msgstr ""
 
+msgid "Unable to delete old preferences file {0}"
+msgstr ""
+
 msgid "Outdated Java version"
 msgstr ""
 
@@ -13941,6 +13983,9 @@ msgid ""
 "contain any JOSM object or suitable text. </p></html>"
 msgstr ""
 
+msgid "Unable to delete file {0}"
+msgstr ""
+
 msgid "ms"
 msgstr ""
 
@@ -17059,6 +17104,9 @@ msgstr "Toplu taşıma araçları"
 msgid "Tourist buses"
 msgstr ""
 
+msgid "Max. speed Heavy Goods Vehicles (km/h)"
+msgstr ""
+
 msgid "Min. speed (km/h)"
 msgstr "Min. Hız (km/h)"
 
@@ -19356,12 +19404,6 @@ msgstr ""
 msgid "Dentist"
 msgstr "Dişçi"
 
-msgid "Nursing Home"
-msgstr ""
-
-msgid "Retirement Home"
-msgstr ""
-
 msgid "Pharmacy"
 msgstr "Eczane"
 
@@ -19389,6 +19431,31 @@ msgstr "(Uluslararası kod kullanın, ör +90-212-67890)"
 msgid "Veterinary"
 msgstr "Veteriner"
 
+msgid "Social Facility"
+msgstr ""
+
+msgid "Nursing Home"
+msgstr ""
+
+msgid "Group Home"
+msgstr ""
+
+msgid "For"
+msgstr ""
+
+msgid "Assisted Living"
+msgstr ""
+
+msgid "Outreach"
+msgstr ""
+
+msgctxt "social_facility"
+msgid "Shelter"
+msgstr ""
+
+msgid "Food Bank"
+msgstr ""
+
 msgid "Toilets/Restrooms"
 msgstr ""
 
@@ -19431,6 +19498,13 @@ msgstr ""
 msgid "urinal"
 msgstr ""
 
+msgctxt "toilets"
+msgid "Diaper"
+msgstr ""
+
+msgid "room"
+msgstr ""
+
 msgid "Post Box"
 msgstr "Posta Kutusu"
 
@@ -23468,24 +23542,24 @@ msgstr ""
 msgid "Download GPX track from openstreetmap.org"
 msgstr ""
 
+msgid "Download Track"
+msgstr ""
+
+msgid "Filename"
+msgstr ""
+
 msgid ""
 "Error occurred while parsing gpx file {0}. Only a part of the file will be "
 "available."
 msgstr ""
 
-msgid "Invalid URL {0}"
-msgstr ""
-
 msgid "Error fetching URL {0}"
 msgstr ""
 
 msgid "Error parsing data from URL {0}"
 msgstr ""
 
-msgid "Download Track"
-msgstr ""
-
-msgid "Filename"
+msgid "Invalid URL {0}"
 msgstr ""
 
 msgid "Private (only shared as anonymous, unordered points)"
@@ -23535,9 +23609,6 @@ msgstr "GPX tabakası seçili değil. İz yüklenemez."
 msgid "Uploading trace ..."
 msgstr ""
 
-msgid "Connecting..."
-msgstr "Bağlanıyor..."
-
 msgid "Upload canceled"
 msgstr ""
 
@@ -27990,6 +28061,69 @@ msgstr ""
 msgid "Please load some photos."
 msgstr ""
 
+msgid "Edit photo GPS data"
+msgstr ""
+
+msgid "Edit GPS data of selected photo."
+msgstr ""
+
+msgid "Edit Photo GPS Data"
+msgstr ""
+
+msgid "Please select an image first."
+msgstr ""
+
+msgid "No image selected"
+msgstr ""
+
+msgid "(Empty values delete the according fields.)"
+msgstr ""
+
+msgid "coordinates"
+msgstr ""
+
+msgid "Latitude and longitude"
+msgstr ""
+
+msgid "Edit Image Coordinates"
+msgstr ""
+
+msgid "Edit coordinates in separate editor"
+msgstr ""
+
+msgid "altitude"
+msgstr ""
+
+msgid "Altitude:"
+msgstr ""
+
+msgid "speed"
+msgstr ""
+
+msgid "positive number or empty"
+msgstr ""
+
+msgid "Speed:"
+msgstr ""
+
+msgid "direction"
+msgstr ""
+
+msgid "range -360.0 .. 360.0, or empty"
+msgstr ""
+
+msgid "Direction:"
+msgstr ""
+
+msgid "°"
+msgstr ""
+
+msgid "Undo changes made in this dialog"
+msgstr ""
+
+msgid "Reload GPS data from image file"
+msgstr ""
+
 msgid "New layer for untagged images"
 msgstr ""
 
@@ -31004,9 +31138,6 @@ msgstr "{0}.Wikipedia.org: {1}"
 msgid "Fetches all coordinates from Wikipedia in the current view"
 msgstr ""
 
-msgid "coordinates"
-msgstr ""
-
 msgid "Category"
 msgstr "Kategori"
 
diff --git a/i18n/po/ug.po b/i18n/po/ug.po
index fa3b03d..6f35bb4 100644
--- a/i18n/po/ug.po
+++ b/i18n/po/ug.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: josm\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-12-31 03:40+0100\n"
+"POT-Creation-Date: 2016-01-06 03:38+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: 2015-12-31 05:03+0000\n"
-"X-Generator: Launchpad (build 17865)\n"
+"X-Launchpad-Export-Date: 2016-01-06 05:04+0000\n"
+"X-Generator: Launchpad (build 17876)\n"
 "Language: \n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -1056,9 +1056,6 @@ msgstr ""
 msgid "Overpass query: "
 msgstr ""
 
-msgid "Overpass server: "
-msgstr ""
-
 msgid "Paste"
 msgstr ""
 
@@ -1348,6 +1345,9 @@ msgstr ""
 msgid "Split a way at the selected node."
 msgstr ""
 
+msgid "Cannot split since another split operation is already in progress"
+msgstr ""
+
 msgid ""
 "The current selection cannot be used for splitting - no node is selected."
 msgstr ""
@@ -1459,6 +1459,27 @@ msgid ""
 "own copy and all nodes will be selected."
 msgstr ""
 
+msgid "Existing node"
+msgstr ""
+
+msgid "Both nodes"
+msgstr ""
+
+msgid "New node"
+msgstr ""
+
+msgid "Tags / Memberships"
+msgstr ""
+
+msgid "Unglue"
+msgstr ""
+
+msgid "Where should the tags of the node be put?"
+msgstr ""
+
+msgid "Where should the memberships of this node be put?"
+msgstr ""
+
 msgid "Unglued Node"
 msgstr ""
 
@@ -3049,6 +3070,15 @@ msgstr ""
 msgid "Restoring files"
 msgstr ""
 
+msgid "Unable to delete backup file {0}"
+msgstr ""
+
+msgid "Unable to delete PID file {0}"
+msgstr ""
+
+msgid "Unable to delete archived backup file {0}"
+msgstr ""
+
 msgid "Illegal latitude value ''{0}''"
 msgstr ""
 
@@ -4207,6 +4237,9 @@ msgstr ""
 msgid "No \"to\" way found"
 msgstr ""
 
+msgid "\"from\" way equals \"to\" way"
+msgstr ""
+
 msgid "No \"via\" node or way found"
 msgstr ""
 
@@ -7004,9 +7037,6 @@ msgstr ""
 msgid "Tags: {0} / Memberships: {1}"
 msgstr ""
 
-msgid "Tags / Memberships"
-msgstr ""
-
 msgid "Delete the selected key in all objects"
 msgstr ""
 
@@ -11611,6 +11641,15 @@ msgstr ""
 msgid "Please enter the OSM API URL."
 msgstr ""
 
+msgid "Use Overpass server for object downloads"
+msgstr ""
+
+msgid "Overpass server: "
+msgstr ""
+
+msgid "Overpass server"
+msgstr ""
+
 msgid "Proxy settings"
 msgstr ""
 
@@ -13749,6 +13788,9 @@ msgstr ""
 msgid "reserved"
 msgstr ""
 
+msgid "Unable to delete old preferences file {0}"
+msgstr ""
+
 msgid "Outdated Java version"
 msgstr ""
 
@@ -13840,6 +13882,9 @@ msgid ""
 "contain any JOSM object or suitable text. </p></html>"
 msgstr ""
 
+msgid "Unable to delete file {0}"
+msgstr ""
+
 msgid "ms"
 msgstr ""
 
@@ -16954,6 +16999,9 @@ msgstr ""
 msgid "Tourist buses"
 msgstr ""
 
+msgid "Max. speed Heavy Goods Vehicles (km/h)"
+msgstr ""
+
 msgid "Min. speed (km/h)"
 msgstr ""
 
@@ -19251,12 +19299,6 @@ msgstr ""
 msgid "Dentist"
 msgstr ""
 
-msgid "Nursing Home"
-msgstr ""
-
-msgid "Retirement Home"
-msgstr ""
-
 msgid "Pharmacy"
 msgstr ""
 
@@ -19284,6 +19326,31 @@ msgstr ""
 msgid "Veterinary"
 msgstr ""
 
+msgid "Social Facility"
+msgstr ""
+
+msgid "Nursing Home"
+msgstr ""
+
+msgid "Group Home"
+msgstr ""
+
+msgid "For"
+msgstr ""
+
+msgid "Assisted Living"
+msgstr ""
+
+msgid "Outreach"
+msgstr ""
+
+msgctxt "social_facility"
+msgid "Shelter"
+msgstr ""
+
+msgid "Food Bank"
+msgstr ""
+
 msgid "Toilets/Restrooms"
 msgstr ""
 
@@ -19326,6 +19393,13 @@ msgstr ""
 msgid "urinal"
 msgstr ""
 
+msgctxt "toilets"
+msgid "Diaper"
+msgstr ""
+
+msgid "room"
+msgstr ""
+
 msgid "Post Box"
 msgstr ""
 
@@ -23363,24 +23437,24 @@ msgstr ""
 msgid "Download GPX track from openstreetmap.org"
 msgstr ""
 
+msgid "Download Track"
+msgstr ""
+
+msgid "Filename"
+msgstr ""
+
 msgid ""
 "Error occurred while parsing gpx file {0}. Only a part of the file will be "
 "available."
 msgstr ""
 
-msgid "Invalid URL {0}"
-msgstr ""
-
 msgid "Error fetching URL {0}"
 msgstr ""
 
 msgid "Error parsing data from URL {0}"
 msgstr ""
 
-msgid "Download Track"
-msgstr ""
-
-msgid "Filename"
+msgid "Invalid URL {0}"
 msgstr ""
 
 msgid "Private (only shared as anonymous, unordered points)"
@@ -23430,9 +23504,6 @@ msgstr ""
 msgid "Uploading trace ..."
 msgstr ""
 
-msgid "Connecting..."
-msgstr ""
-
 msgid "Upload canceled"
 msgstr ""
 
@@ -27871,6 +27942,69 @@ msgstr ""
 msgid "Please load some photos."
 msgstr ""
 
+msgid "Edit photo GPS data"
+msgstr ""
+
+msgid "Edit GPS data of selected photo."
+msgstr ""
+
+msgid "Edit Photo GPS Data"
+msgstr ""
+
+msgid "Please select an image first."
+msgstr ""
+
+msgid "No image selected"
+msgstr ""
+
+msgid "(Empty values delete the according fields.)"
+msgstr ""
+
+msgid "coordinates"
+msgstr ""
+
+msgid "Latitude and longitude"
+msgstr ""
+
+msgid "Edit Image Coordinates"
+msgstr ""
+
+msgid "Edit coordinates in separate editor"
+msgstr ""
+
+msgid "altitude"
+msgstr ""
+
+msgid "Altitude:"
+msgstr ""
+
+msgid "speed"
+msgstr ""
+
+msgid "positive number or empty"
+msgstr ""
+
+msgid "Speed:"
+msgstr ""
+
+msgid "direction"
+msgstr ""
+
+msgid "range -360.0 .. 360.0, or empty"
+msgstr ""
+
+msgid "Direction:"
+msgstr ""
+
+msgid "°"
+msgstr ""
+
+msgid "Undo changes made in this dialog"
+msgstr ""
+
+msgid "Reload GPS data from image file"
+msgstr ""
+
 msgid "New layer for untagged images"
 msgstr ""
 
@@ -30887,9 +31021,6 @@ msgstr ""
 msgid "Fetches all coordinates from Wikipedia in the current view"
 msgstr ""
 
-msgid "coordinates"
-msgstr ""
-
 msgid "Category"
 msgstr ""
 
diff --git a/i18n/po/uk.po b/i18n/po/uk.po
index ca12461..58c1546 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: 2015-12-31 03:40+0100\n"
-"PO-Revision-Date: 2015-12-13 17:53+0000\n"
-"Last-Translator: darkonus <darkonus at ukr.net>\n"
+"POT-Creation-Date: 2016-01-06 03:38+0100\n"
+"PO-Revision-Date: 2016-01-04 22:49+0000\n"
+"Last-Translator: Don-vip <Unknown>\n"
 "Language-Team: Ukrainian <uk at li.org>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
 "n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
-"X-Launchpad-Export-Date: 2015-12-31 05:03+0000\n"
-"X-Generator: Launchpad (build 17865)\n"
+"X-Launchpad-Export-Date: 2016-01-06 05:05+0000\n"
+"X-Generator: Launchpad (build 17876)\n"
 "Language: uk\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -1083,6 +1083,11 @@ msgid ""
 "can undo the movement for certain nodes:<br>Select them and press the "
 "shortcut for Orthogonalize / Undo. The default is Shift-Q.)"
 msgstr ""
+"<h3>Якщо виділено одну чи бильше ліній, форма буде змінена таким чином, щоб "
+"всі кути стали 90º чи 180º.</h3>Ви можете додати дві чи більше точки до "
+"виділення. Тоді напрямок буде змінений відповідно до них. (Після чого, ви "
+"можете відмінити переміщення деяких точок:<br>Виділіть їх та натисніть "
+"комбінацію для Зробити кути прямими/Відмінити. Типово  Shift+Q.)"
 
 msgid "Orthogonalize Shape"
 msgstr "Зробити кути прямими"
@@ -1160,9 +1165,6 @@ msgstr "Помилка розбору"
 msgid "Overpass query: "
 msgstr "Overpass запит: "
 
-msgid "Overpass server: "
-msgstr "Сервер Overpass: "
-
 msgid "Paste"
 msgstr "Вставити"
 
@@ -1445,7 +1447,7 @@ msgid "Simplify all selected ways"
 msgstr "Спростити всі виділені лінії"
 
 msgid "Cancel operation"
-msgstr ""
+msgstr "Скасувати операцію"
 
 msgid ""
 "The selection contains {0} ways. Are you sure you want to simplify them all?"
@@ -1474,6 +1476,9 @@ msgstr "Розділити лінію"
 msgid "Split a way at the selected node."
 msgstr "Розділити лінію у виділеній точці"
 
+msgid "Cannot split since another split operation is already in progress"
+msgstr "Неможливо розділити доки не закінчилась інша операція розділення"
+
 msgid ""
 "The current selection cannot be used for splitting - no node is selected."
 msgstr ""
@@ -1610,6 +1615,27 @@ msgstr ""
 "будуть виділені. В іншому випадку, всі лінії отримають дублікати\n"
 "і всі точки будуть виділені."
 
+msgid "Existing node"
+msgstr ""
+
+msgid "Both nodes"
+msgstr ""
+
+msgid "New node"
+msgstr ""
+
+msgid "Tags / Memberships"
+msgstr "Теґи / Членство"
+
+msgid "Unglue"
+msgstr ""
+
+msgid "Where should the tags of the node be put?"
+msgstr ""
+
+msgid "Where should the memberships of this node be put?"
+msgstr ""
+
 msgid "Unglued Node"
 msgstr "Не прикріплена точка"
 
@@ -3375,6 +3401,15 @@ msgstr "Вашу роботу було збережено автоматично
 msgid "Restoring files"
 msgstr "Відновлення файлів"
 
+msgid "Unable to delete backup file {0}"
+msgstr ""
+
+msgid "Unable to delete PID file {0}"
+msgstr ""
+
+msgid "Unable to delete archived backup file {0}"
+msgstr ""
+
 msgid "Illegal latitude value ''{0}''"
 msgstr "Неправильне значення широти — ''{0}''"
 
@@ -3899,7 +3934,7 @@ msgid "WGS84"
 msgstr "WGS84"
 
 msgid "Double Stereographic"
-msgstr ""
+msgstr "Подвійна стереографічна"
 
 msgid "Parameter ''{0}'' required."
 msgstr "Потрібен параметр ''{0}''."
@@ -4221,7 +4256,7 @@ msgstr ""
 "Перевірка на наявність довгих відрізків ліній, що зазвичай є помлковими."
 
 msgid "Very long segment of {0} kilometers"
-msgstr "Занадто довний відрізок ({0} кілометрів)"
+msgstr "Занадто довгий відрізок ({0} кілометрів)"
 
 msgid "Tag checker (MapCSS based)"
 msgstr "Перевірка теґів (на основі MapCSS)"
@@ -4621,6 +4656,9 @@ msgstr "Не знайдено лінію з роллю \"from\""
 msgid "No \"to\" way found"
 msgstr "Не знайдено лінію з роллю \"to\""
 
+msgid "\"from\" way equals \"to\" way"
+msgstr "лінія \"from\" тотожна лінії \"to\""
+
 msgid "No \"via\" node or way found"
 msgstr "Не знайдено точу чи лінію з роллю \"via\""
 
@@ -6304,6 +6342,12 @@ msgid ""
 "applied.</strong><br>Click <strong>{1}</strong> to return to resolving "
 "conflicts.</html>"
 msgstr ""
+"<html>Ви не закінчили обʼєднання відмінностей цього конфлікту.<br>Конфлікт "
+"не буде розвʼязаний доки не будуть розвʼязані<br>всі "
+"відмінності.<br>Натисніть <strong>{0}</strong> щоб закрити у будь-якому "
+"випадку.<strong> Вже<br>розвʼязані відмінності будуть "
+"відкинуті.</strong><br>Натисніть <strong>{1}</strong> щоб повернутись до "
+"розвʼязання конфліктів.</html>"
 
 msgid "Conflict not resolved completely"
 msgstr "Конфлікт розв’язано не до кінця"
@@ -7676,9 +7720,6 @@ msgstr "Об’єкти: {2} / Теґи: {0} / Члени: {1}"
 msgid "Tags: {0} / Memberships: {1}"
 msgstr "Теґи: {0} / Членство: {1}"
 
-msgid "Tags / Memberships"
-msgstr "Теґи / Членство"
-
 msgid "Delete the selected key in all objects"
 msgstr "Вилучити обраний ключ зі всіх об’єктів"
 
@@ -9729,6 +9770,8 @@ msgid ""
 "Aerial imagery \"{0}\" might be misaligned. Please check its offset using "
 "GPS tracks!"
 msgstr ""
+"Супутниковий знімок \"{0}\" може бути зміщений. Будь ласка, перевірте "
+"зміщення використовуючи треки GPS!"
 
 msgid "http://wiki.openstreetmap.org/wiki/Using_Imagery"
 msgstr "http://wiki.openstreetmap.org/wiki/Using_Imagery"
@@ -9737,7 +9780,7 @@ msgid "Details..."
 msgstr "Подробиці…"
 
 msgid "Do not show this message again"
-msgstr ""
+msgstr "Більше не показувати це повідомлення"
 
 msgid "Hide this message and never show it again"
 msgstr "Приховати це повідомлення і більше не показувати"
@@ -9946,6 +9989,9 @@ msgid ""
 " Supported projections are: {2}\n"
 "Change the projection again or remove the layer."
 msgstr ""
+"Шар {0} не підтримує нову проекцію {1}.\n"
+" Підтримуються проекції: {2}\n"
+"Змініть проекцію або вилучіть шар."
 
 msgid "Correlate to GPX"
 msgstr "Відносяться до GPX"
@@ -12265,7 +12311,7 @@ msgstr ""
 "{1}</table></html>"
 
 msgid "Sort presets menu alphabetically"
-msgstr ""
+msgstr "Впорядкувати заготовки за алфавітом"
 
 msgid "Tagging Presets"
 msgstr "Заготовки теґів"
@@ -12546,7 +12592,7 @@ msgid "LKS-92 (Latvia TM)"
 msgstr "LKS-92 (Латвія TM)"
 
 msgid "Rijksdriehoekscoördinaten (Netherlands)"
-msgstr ""
+msgstr "Rijksdriehoekscoördinaten (Нідерланди)"
 
 msgid "SWEREF99 13 30 / EPSG:3008 (Sweden)"
 msgstr "SWEREF99 13 30 / EPSG:3008 (Швеція)"
@@ -12858,6 +12904,15 @@ msgstr "Поточне значення — помилкове URL"
 msgid "Please enter the OSM API URL."
 msgstr "Будь ласка, введіть URL OSM API."
 
+msgid "Use Overpass server for object downloads"
+msgstr "Використовувати сервер Overpass для заватаження обʼєктів"
+
+msgid "Overpass server: "
+msgstr "Сервер Overpass: "
+
+msgid "Overpass server"
+msgstr "Сервер Overpass"
+
 msgid "Proxy settings"
 msgstr "Параметри проксі-сервера"
 
@@ -13349,7 +13404,7 @@ msgstr "істина: параметр явно увімкнено"
 
 msgid ""
 "partial: different selected objects have different values, do not change"
-msgstr ""
+msgstr "частково: виділені обʼєкти мають різні значення, не змінювати"
 
 msgid "unset: do not set this property on the selected objects"
 msgstr "обнулити: не встановлювати цей параметр для обраних об’єктів"
@@ -14810,7 +14865,7 @@ msgid "Downloading plugin list from ''{0}''"
 msgstr "Завантаження списку втулків з ''{0}''"
 
 msgid "Unsuccessful HTTP request"
-msgstr ""
+msgstr "Невдалий HTTP-запит"
 
 msgid "Plugin list download error"
 msgstr "Помилка завантаження переліку втулків"
@@ -15381,6 +15436,9 @@ msgstr "URL не містить правильний {0}"
 msgid "reserved"
 msgstr "зарезервовано"
 
+msgid "Unable to delete old preferences file {0}"
+msgstr ""
+
 msgid "Outdated Java version"
 msgstr "Застаріла версія Java"
 
@@ -15491,6 +15549,9 @@ msgstr ""
 "<html><p> На жаль, неможливо вставити теґи з буферу обміну. Він не містить "
 "об’єктів JOSM чи відповідного тексту. </p></html>"
 
+msgid "Unable to delete file {0}"
+msgstr ""
+
 msgid "ms"
 msgstr "мс"
 
@@ -15989,31 +16050,31 @@ msgid "AGRI black-and-white 2.5m"
 msgstr "AGRI чорно-біла 2,5 м"
 
 msgid "LPI NSW Base Map"
-msgstr ""
+msgstr "LPI NSW Базова мапа"
 
 msgid "LPI NSW Topographic Map"
-msgstr ""
+msgstr "LPI NSW Топографічна мапа"
 
 msgid "LPI NSW Imagery"
-msgstr ""
+msgstr "LPI NSW Супутникові знімки"
 
 msgid "LPI NSW Administrative Boundaries Suburb"
-msgstr ""
+msgstr "LPI NSW Адміністративні границі округів"
 
 msgid "LPI NSW Administrative Boundaries LGA"
-msgstr ""
+msgstr "LPI NSW Адміністративні границі районів місцевого самоврядування"
 
 msgid "LPI NSW Administrative Boundaries County"
-msgstr ""
+msgstr "LPI NSW Адміністративні границі графств"
 
 msgid "LPI NSW Administrative Boundaries Parish"
-msgstr ""
+msgstr "LPI NSW Адміністративні границі парафій"
 
 msgid "LPI NSW Administrative Boundaries State Forest"
-msgstr ""
+msgstr "LPI NSW Адміністративні границі державних лісів"
 
 msgid "LPI NSW Administrative Boundaries NPWS Reserve"
-msgstr ""
+msgstr "LPI NSW Адміністративні границі національних парків та заповідників"
 
 msgid "Geoimage.at MaxRes"
 msgstr "Geoimage.at MaxRes"
@@ -16088,7 +16149,7 @@ msgid "SPW(allonie) 2009 aerial imagery"
 msgstr "SPW (allonie) 2009 аерофотознімки"
 
 msgid "TEC bus lines"
-msgstr ""
+msgstr "TEC - автобусні маршрути"
 
 msgid "IBGE Mapa de Setores Urbanos"
 msgstr "IBGE Мапа міських районів"
@@ -16130,7 +16191,7 @@ msgid "Geodatastyrelsen (Denmark)"
 msgstr "Агенція геоданих (Данія)"
 
 msgid "Geodatastyrelsen Cadastral Parcels INSPIRE View"
-msgstr ""
+msgstr "Geodatastyrelsen кадастрові ділянки INSPIRE"
 
 msgid "Geodatastyrelsen DTK Kort25"
 msgstr "Геодані агентство DTK Kort25"
@@ -16252,13 +16313,13 @@ msgid "Bavaria (2 m)"
 msgstr "Баварія (2 м)"
 
 msgid "Stuttgart (aerial imagery)"
-msgstr ""
+msgstr "Штутгарт (аерофото)"
 
 msgid "Erlangen aerial imagery (2013 6.25 cm)"
-msgstr ""
+msgstr "Ерланген - аерофото (2013 6.25 см)"
 
 msgid "Erlangen 2011 aerial imagery (5.0 cm)"
-msgstr ""
+msgstr "Ерланген - аерофото (5.0 см)"
 
 msgid "Old map of Zwenkau - TK25 Messtischblatt (4739; 1906; PROJ.4-rect)"
 msgstr "Стара мапа Цвенкау - TK25 Messtischblatt (4739; 1906; PROJ.4-rect)"
@@ -16267,14 +16328,16 @@ msgid "Old map of Pegau - TK25 Messtischblatt (4839; 1909; PROJ.4-rect)"
 msgstr "Стара мапа Пегау - TK25 Messtischblatt (4839; 1909; PROJ.4-rect)"
 
 msgid "Physical DE - Physical map (natural regions)"
-msgstr ""
+msgstr "Physical DE - фізична мапа (природні зони)"
 
 msgid "Physical DE:Harz - Physical map (natural regions)"
-msgstr ""
+msgstr "Physical DE: Гарц - фізична мапа (природні зони)"
 
 msgid ""
 "Physical DE:Harz - Overlay for Bing (e.g. use opacity between 20% and 50%)"
 msgstr ""
+"Physical DE: Гарц - оверлей для Bing (напр., використовуйте прозорість від "
+"20% до 50%)"
 
 msgid "Maps4BW (LGL-BW, www.lgl-bw.de)"
 msgstr "Maps4BW (LGL-BW, www.lgl-bw.de)"
@@ -17449,6 +17512,9 @@ msgid ""
 "of tagging presets (quick preview of the dialog that will popup). You can "
 "start the jar-file as standalone as well."
 msgstr ""
+"Додає в меню «Панелі» пункт для перевірки заготовок теґів, який допомагає в "
+"створені заготовок (швидкий попередній перегляд діалогів). Ви також можете "
+"запустити jar-файл окремо."
 
 msgid "Make terraced houses out of single blocks."
 msgstr "Зробити ряд будинків по вулиці з одного блоку."
@@ -18463,10 +18529,10 @@ msgid "ICAO"
 msgstr "ICAO"
 
 msgid "Car brand"
-msgstr ""
+msgstr "Марка автомобіля"
 
 msgid "Motorcycle brand"
-msgstr ""
+msgstr "Марка мотоцикла"
 
 msgid "Streets"
 msgstr "Дороги"
@@ -18523,7 +18589,7 @@ msgid "Primary"
 msgstr "Головна"
 
 msgid "Overhead trolley wires"
-msgstr ""
+msgstr "Тролейбусна лінія"
 
 msgid "Primary Link"
 msgstr "З’їзд з/на Головну"
@@ -18769,6 +18835,9 @@ msgstr "Громадський транспорт"
 msgid "Tourist buses"
 msgstr "Туристичні автобуси"
 
+msgid "Max. speed Heavy Goods Vehicles (km/h)"
+msgstr ""
+
 msgid "Min. speed (km/h)"
 msgstr "Мін. швидкість (км/г)"
 
@@ -19000,11 +19069,11 @@ msgstr "Пішохідна доріжка"
 
 msgctxt "footway"
 msgid "sidewalk"
-msgstr ""
+msgstr "тротуар"
 
 msgctxt "footway"
 msgid "crossing"
-msgstr ""
+msgstr "пішохідний перехід"
 
 msgid "Steps"
 msgstr "Сходи"
@@ -19046,16 +19115,16 @@ msgid "Right handrail"
 msgstr "Перила праворуч"
 
 msgid "Escalator"
-msgstr ""
+msgstr "Ескалатор"
 
 msgid "forward"
-msgstr ""
+msgstr "за напрямком лінії"
 
 msgid "backward"
-msgstr ""
+msgstr "проти напрямку лінії"
 
 msgid "reversible"
-msgstr ""
+msgstr "зі змінним напрямком"
 
 msgid "Waypoints"
 msgstr "Маршрутні точки"
@@ -19855,7 +19924,7 @@ msgid "Railway Switch"
 msgstr "Стрілочний перевід"
 
 msgid "Railway Signal"
-msgstr ""
+msgstr "Семафор"
 
 msgid "Railway milestone"
 msgstr "Верстовий стовп"
@@ -20556,7 +20625,7 @@ msgid "sandwich"
 msgstr "сандвічі"
 
 msgid "coffee_shop"
-msgstr ""
+msgstr "кавʼярня"
 
 msgid "sushi"
 msgstr "суші"
@@ -21086,12 +21155,6 @@ msgstr "Кабінет лікаря"
 msgid "Dentist"
 msgstr "Стоматологія"
 
-msgid "Nursing Home"
-msgstr "Будинок престарілих"
-
-msgid "Retirement Home"
-msgstr "Будинок престарілих"
-
 msgid "Pharmacy"
 msgstr "Аптека"
 
@@ -21119,6 +21182,31 @@ msgstr "(Використовуйте міжнародний код, напри
 msgid "Veterinary"
 msgstr "Ветеринар"
 
+msgid "Social Facility"
+msgstr ""
+
+msgid "Nursing Home"
+msgstr "Будинок престарілих"
+
+msgid "Group Home"
+msgstr ""
+
+msgid "For"
+msgstr ""
+
+msgid "Assisted Living"
+msgstr ""
+
+msgid "Outreach"
+msgstr ""
+
+msgctxt "social_facility"
+msgid "Shelter"
+msgstr ""
+
+msgid "Food Bank"
+msgstr ""
+
 msgid "Toilets/Restrooms"
 msgstr "Туалет/Вбиральня"
 
@@ -21161,6 +21249,13 @@ msgstr "навприсядки"
 msgid "urinal"
 msgstr "пісуар"
 
+msgctxt "toilets"
+msgid "Diaper"
+msgstr ""
+
+msgid "room"
+msgstr ""
+
 msgid "Post Box"
 msgstr "Поштова скринька"
 
@@ -21808,11 +21903,11 @@ msgstr "комерційного призначення"
 
 msgctxt "building"
 msgid "service"
-msgstr ""
+msgstr "службова споруда"
 
 msgctxt "building"
 msgid "train_station"
-msgstr ""
+msgstr "залізнична станція"
 
 msgctxt "building"
 msgid "barn"
@@ -21852,11 +21947,11 @@ msgstr "лікарня"
 
 msgctxt "building"
 msgid "kindergarten"
-msgstr ""
+msgstr "дитячий садок"
 
 msgctxt "building"
 msgid "manufacture"
-msgstr ""
+msgstr "виробництво"
 
 msgctxt "building"
 msgid "warehouse"
@@ -21911,7 +22006,7 @@ msgstr "житло"
 
 msgctxt "building"
 msgid "hotel"
-msgstr ""
+msgstr "готель"
 
 msgctxt "building"
 msgid "hut"
@@ -21968,7 +22063,7 @@ msgstr "аварійний"
 
 msgctxt "entrance"
 msgid "staircase"
-msgstr ""
+msgstr "в підʼїзд/на сходи"
 
 msgid "Entrance number"
 msgstr "Номер входу"
@@ -23578,7 +23673,7 @@ msgid "Litecoin"
 msgstr "Litecoin"
 
 msgid "Offices"
-msgstr "Офиси"
+msgstr "Офіси"
 
 msgctxt "office"
 msgid "Accountant"
@@ -24881,6 +24976,8 @@ msgid ""
 "Wrong usage of {0} tag. Remove {1}, because it is clear that the name is "
 "missing even without an additional tag."
 msgstr ""
+"Неправильне використання теґу {0}. Вилучіть {1}, так як ясно, що назва "
+"відсутня, навіть без додаткових теґів."
 
 msgid "{0}={1} is deprecated. Please use instead a multipolygon."
 msgstr ""
@@ -25257,6 +25354,12 @@ msgstr "Завантажити Трек…"
 msgid "Download GPX track from openstreetmap.org"
 msgstr "Завантажити GPX-трек з openstreetmap.org"
 
+msgid "Download Track"
+msgstr "Завантаження Треку"
+
+msgid "Filename"
+msgstr "Назва файлу"
+
 msgid ""
 "Error occurred while parsing gpx file {0}. Only a part of the file will be "
 "available."
@@ -25264,20 +25367,14 @@ msgstr ""
 "Під час розбору файлу gpx {0} виникла помилка. Тільки частина цього файлу "
 "буде доступною."
 
-msgid "Invalid URL {0}"
-msgstr "Помилкове посилання {0}"
-
 msgid "Error fetching URL {0}"
 msgstr "Помилка отримання даних за посиланням {0}"
 
 msgid "Error parsing data from URL {0}"
 msgstr "Помилка синтаксичного розбору даних з {0}"
 
-msgid "Download Track"
-msgstr "Завантаження Треку"
-
-msgid "Filename"
-msgstr "Назва файлу"
+msgid "Invalid URL {0}"
+msgstr "Помилкове посилання {0}"
 
 msgid "Private (only shared as anonymous, unordered points)"
 msgstr "Приватні (що видні іншим, як анонімні, невпорядковані точки)"
@@ -25332,9 +25429,6 @@ msgstr "Шар GPX не вибрано. Не вдається надіслати
 msgid "Uploading trace ..."
 msgstr "Завантаження треку …"
 
-msgid "Connecting..."
-msgstr "З’єднуюсь..."
-
 msgid "Upload canceled"
 msgstr "Надсилання скасовано"
 
@@ -27268,10 +27362,10 @@ msgid "Generate matches"
 msgstr "Знайти збіги"
 
 msgid "Layer:"
-msgstr ""
+msgstr "Шар:"
 
 msgid "{0}: 0 / {1}: 0 / {2}: 0"
-msgstr ""
+msgstr "{0}: 0 / {1}: 0 / {2}: 0"
 
 msgid "Subject"
 msgstr "Об’єкт"
@@ -27304,10 +27398,10 @@ msgid "Empty selection"
 msgstr "Нічого не виділено"
 
 msgid "Freeze reference selection"
-msgstr ""
+msgstr "Зафіксувати виділення в довідковому шарі"
 
 msgid "{0}: {1} / {2}: {3} / {4}: {5}"
-msgstr ""
+msgstr "{0}: {1} / {2}: {3} / {4}: {5}"
 
 msgid "Invalid reference or subject"
 msgstr "Помилковий основний чи підлеглий об’єкти"
@@ -28773,10 +28867,10 @@ msgid "images"
 msgstr "знімків"
 
 msgid "Traffic sign font at ''{0}'' has wrong format."
-msgstr ""
+msgstr "Шрифт для дорожніх знаків ''{0}'' має невірний формат."
 
 msgid "Could not read font-file from ''{{0}}''."
-msgstr ""
+msgstr "Невдалося прочитати файл шрифта з  ''{{0}}''."
 
 msgid "Mapillary"
 msgstr "Mapillary"
@@ -29017,19 +29111,20 @@ msgstr ""
 "Пересуватись до місця де був зроблений знімок кнопками Наступний/Попередній"
 
 msgid "Download mode"
-msgstr ""
+msgstr "Режим завантаження"
 
 msgid "You are logged in as ''{0}''."
-msgstr ""
+msgstr "Ви увійшли як  ''{0}''."
 
 msgid "Re-Login"
-msgstr ""
+msgstr "Ввійти заново"
 
 msgid "You are currently not logged in."
-msgstr ""
+msgstr "Ви ще не ввійшли."
 
 msgid "Go to setting and log in to Mapillary before uploading."
 msgstr ""
+"Перейдіть в налаштування та увійдіть в Mapillary перед надсиланням даних."
 
 msgid "Upload selected sequence"
 msgstr "Надіслати виділену послідовність"
@@ -29090,10 +29185,10 @@ msgid "Select mode"
 msgstr "Режим виділення"
 
 msgid "Mapillary login"
-msgstr ""
+msgstr "Вхід в Mapillary"
 
 msgid "Login successful, return to JOSM."
-msgstr ""
+msgstr "Вдалий вхід, повертаємось в JOSM."
 
 msgid "Downloading Mapillary images"
 msgstr "Завантаження знімків Mapillary"
@@ -30158,6 +30253,69 @@ msgstr ""
 msgid "Please load some photos."
 msgstr "Завантажте кілька знімків."
 
+msgid "Edit photo GPS data"
+msgstr ""
+
+msgid "Edit GPS data of selected photo."
+msgstr ""
+
+msgid "Edit Photo GPS Data"
+msgstr ""
+
+msgid "Please select an image first."
+msgstr ""
+
+msgid "No image selected"
+msgstr ""
+
+msgid "(Empty values delete the according fields.)"
+msgstr ""
+
+msgid "coordinates"
+msgstr "координати"
+
+msgid "Latitude and longitude"
+msgstr ""
+
+msgid "Edit Image Coordinates"
+msgstr ""
+
+msgid "Edit coordinates in separate editor"
+msgstr ""
+
+msgid "altitude"
+msgstr ""
+
+msgid "Altitude:"
+msgstr ""
+
+msgid "speed"
+msgstr ""
+
+msgid "positive number or empty"
+msgstr ""
+
+msgid "Speed:"
+msgstr ""
+
+msgid "direction"
+msgstr ""
+
+msgid "range -360.0 .. 360.0, or empty"
+msgstr ""
+
+msgid "Direction:"
+msgstr ""
+
+msgid "°"
+msgstr ""
+
+msgid "Undo changes made in this dialog"
+msgstr ""
+
+msgid "Reload GPS data from image file"
+msgstr ""
+
 msgid "New layer for untagged images"
 msgstr "Новий шар для непозначених знімків"
 
@@ -33378,27 +33536,28 @@ msgstr ""
 "Пошук після маршрутної точки. Клацніть та потягніть мапу до маршрутної точки."
 
 msgid "Fetch Wikidata IDs"
-msgstr ""
+msgstr "Отримати id Вікіданих"
 
 msgid "Fetch Wikidata IDs using the ''wikipedia'' tag"
-msgstr ""
+msgstr "Отримати id Вікіданих, використовуючи теґ ''wikipedia''"
 
 msgid "Fetching Wikidata IDs"
-msgstr ""
+msgstr "Отримання id  Вікіданих"
 
 msgid "Add Wikidata"
-msgstr ""
+msgstr "Додати Вікідані"
 
 msgid "No Wikidata ID found for: {0}"
-msgstr ""
+msgstr "Не знайдено id Вікіданих для: {0}"
 
 msgid "Fetching {0} Wikidata ID for language ''{1}''"
 msgid_plural "Fetching {0} Wikidata IDs for language ''{1}''"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Отримання {0} id Вікіданих для мови ''{1}''"
+msgstr[1] "Отримання {0} id Вікіданих для мови ''{1}''"
+msgstr[2] "Отримання {0} id Вікіданих для мови ''{1}''"
 
 msgid "Add Wikidata for language ''{0}''"
-msgstr ""
+msgstr "Додати Вікідані для мови ''{0}''"
 
 msgid "Add names from Wikipedia"
 msgstr "Додати назву з Вікіпедії"
@@ -33446,9 +33605,6 @@ msgstr "{0}.Wikipedia.org: {1}"
 msgid "Fetches all coordinates from Wikipedia in the current view"
 msgstr "Отримати всі координати з Вікіпедії для поточного виду"
 
-msgid "coordinates"
-msgstr "координати"
-
 msgid "Category"
 msgstr "Категорія"
 
diff --git a/i18n/po/ur.po b/i18n/po/ur.po
index 8d83873..a17b747 100644
--- a/i18n/po/ur.po
+++ b/i18n/po/ur.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: josm\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-12-31 03:40+0100\n"
+"POT-Creation-Date: 2016-01-06 03:38+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: 2015-12-31 05:03+0000\n"
-"X-Generator: Launchpad (build 17865)\n"
+"X-Launchpad-Export-Date: 2016-01-06 05:05+0000\n"
+"X-Generator: Launchpad (build 17876)\n"
 "Language: ur\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -1056,9 +1056,6 @@ msgstr ""
 msgid "Overpass query: "
 msgstr ""
 
-msgid "Overpass server: "
-msgstr ""
-
 msgid "Paste"
 msgstr ""
 
@@ -1348,6 +1345,9 @@ msgstr ""
 msgid "Split a way at the selected node."
 msgstr ""
 
+msgid "Cannot split since another split operation is already in progress"
+msgstr ""
+
 msgid ""
 "The current selection cannot be used for splitting - no node is selected."
 msgstr ""
@@ -1459,6 +1459,27 @@ msgid ""
 "own copy and all nodes will be selected."
 msgstr ""
 
+msgid "Existing node"
+msgstr ""
+
+msgid "Both nodes"
+msgstr ""
+
+msgid "New node"
+msgstr ""
+
+msgid "Tags / Memberships"
+msgstr ""
+
+msgid "Unglue"
+msgstr ""
+
+msgid "Where should the tags of the node be put?"
+msgstr ""
+
+msgid "Where should the memberships of this node be put?"
+msgstr ""
+
 msgid "Unglued Node"
 msgstr ""
 
@@ -3049,6 +3070,15 @@ msgstr ""
 msgid "Restoring files"
 msgstr ""
 
+msgid "Unable to delete backup file {0}"
+msgstr ""
+
+msgid "Unable to delete PID file {0}"
+msgstr ""
+
+msgid "Unable to delete archived backup file {0}"
+msgstr ""
+
 msgid "Illegal latitude value ''{0}''"
 msgstr ""
 
@@ -4207,6 +4237,9 @@ msgstr ""
 msgid "No \"to\" way found"
 msgstr ""
 
+msgid "\"from\" way equals \"to\" way"
+msgstr ""
+
 msgid "No \"via\" node or way found"
 msgstr ""
 
@@ -7004,9 +7037,6 @@ msgstr ""
 msgid "Tags: {0} / Memberships: {1}"
 msgstr ""
 
-msgid "Tags / Memberships"
-msgstr ""
-
 msgid "Delete the selected key in all objects"
 msgstr ""
 
@@ -11611,6 +11641,15 @@ msgstr ""
 msgid "Please enter the OSM API URL."
 msgstr ""
 
+msgid "Use Overpass server for object downloads"
+msgstr ""
+
+msgid "Overpass server: "
+msgstr ""
+
+msgid "Overpass server"
+msgstr ""
+
 msgid "Proxy settings"
 msgstr ""
 
@@ -13749,6 +13788,9 @@ msgstr ""
 msgid "reserved"
 msgstr ""
 
+msgid "Unable to delete old preferences file {0}"
+msgstr ""
+
 msgid "Outdated Java version"
 msgstr ""
 
@@ -13840,6 +13882,9 @@ msgid ""
 "contain any JOSM object or suitable text. </p></html>"
 msgstr ""
 
+msgid "Unable to delete file {0}"
+msgstr ""
+
 msgid "ms"
 msgstr ""
 
@@ -16954,6 +16999,9 @@ msgstr ""
 msgid "Tourist buses"
 msgstr ""
 
+msgid "Max. speed Heavy Goods Vehicles (km/h)"
+msgstr ""
+
 msgid "Min. speed (km/h)"
 msgstr ""
 
@@ -19251,12 +19299,6 @@ msgstr ""
 msgid "Dentist"
 msgstr ""
 
-msgid "Nursing Home"
-msgstr ""
-
-msgid "Retirement Home"
-msgstr ""
-
 msgid "Pharmacy"
 msgstr ""
 
@@ -19284,6 +19326,31 @@ msgstr ""
 msgid "Veterinary"
 msgstr ""
 
+msgid "Social Facility"
+msgstr ""
+
+msgid "Nursing Home"
+msgstr ""
+
+msgid "Group Home"
+msgstr ""
+
+msgid "For"
+msgstr ""
+
+msgid "Assisted Living"
+msgstr ""
+
+msgid "Outreach"
+msgstr ""
+
+msgctxt "social_facility"
+msgid "Shelter"
+msgstr ""
+
+msgid "Food Bank"
+msgstr ""
+
 msgid "Toilets/Restrooms"
 msgstr ""
 
@@ -19326,6 +19393,13 @@ msgstr ""
 msgid "urinal"
 msgstr ""
 
+msgctxt "toilets"
+msgid "Diaper"
+msgstr ""
+
+msgid "room"
+msgstr ""
+
 msgid "Post Box"
 msgstr ""
 
@@ -23363,24 +23437,24 @@ msgstr ""
 msgid "Download GPX track from openstreetmap.org"
 msgstr ""
 
+msgid "Download Track"
+msgstr ""
+
+msgid "Filename"
+msgstr ""
+
 msgid ""
 "Error occurred while parsing gpx file {0}. Only a part of the file will be "
 "available."
 msgstr ""
 
-msgid "Invalid URL {0}"
-msgstr ""
-
 msgid "Error fetching URL {0}"
 msgstr ""
 
 msgid "Error parsing data from URL {0}"
 msgstr ""
 
-msgid "Download Track"
-msgstr ""
-
-msgid "Filename"
+msgid "Invalid URL {0}"
 msgstr ""
 
 msgid "Private (only shared as anonymous, unordered points)"
@@ -23430,9 +23504,6 @@ msgstr ""
 msgid "Uploading trace ..."
 msgstr ""
 
-msgid "Connecting..."
-msgstr ""
-
 msgid "Upload canceled"
 msgstr ""
 
@@ -27871,6 +27942,69 @@ msgstr ""
 msgid "Please load some photos."
 msgstr ""
 
+msgid "Edit photo GPS data"
+msgstr ""
+
+msgid "Edit GPS data of selected photo."
+msgstr ""
+
+msgid "Edit Photo GPS Data"
+msgstr ""
+
+msgid "Please select an image first."
+msgstr ""
+
+msgid "No image selected"
+msgstr ""
+
+msgid "(Empty values delete the according fields.)"
+msgstr ""
+
+msgid "coordinates"
+msgstr ""
+
+msgid "Latitude and longitude"
+msgstr ""
+
+msgid "Edit Image Coordinates"
+msgstr ""
+
+msgid "Edit coordinates in separate editor"
+msgstr ""
+
+msgid "altitude"
+msgstr ""
+
+msgid "Altitude:"
+msgstr ""
+
+msgid "speed"
+msgstr ""
+
+msgid "positive number or empty"
+msgstr ""
+
+msgid "Speed:"
+msgstr ""
+
+msgid "direction"
+msgstr ""
+
+msgid "range -360.0 .. 360.0, or empty"
+msgstr ""
+
+msgid "Direction:"
+msgstr ""
+
+msgid "°"
+msgstr ""
+
+msgid "Undo changes made in this dialog"
+msgstr ""
+
+msgid "Reload GPS data from image file"
+msgstr ""
+
 msgid "New layer for untagged images"
 msgstr ""
 
@@ -30887,9 +31021,6 @@ msgstr ""
 msgid "Fetches all coordinates from Wikipedia in the current view"
 msgstr ""
 
-msgid "coordinates"
-msgstr ""
-
 msgid "Category"
 msgstr ""
 
diff --git a/i18n/po/vi.po b/i18n/po/vi.po
index 3e1cc66..b7c52d7 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: 2015-12-31 03:40+0100\n"
+"POT-Creation-Date: 2016-01-06 03:38+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: 2015-12-31 05:04+0000\n"
-"X-Generator: Launchpad (build 17865)\n"
+"X-Launchpad-Export-Date: 2016-01-06 05:06+0000\n"
+"X-Generator: Launchpad (build 17876)\n"
 "Language: vi\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -1133,9 +1133,6 @@ msgstr ""
 msgid "Overpass query: "
 msgstr "query Cầu vượt: "
 
-msgid "Overpass server: "
-msgstr ""
-
 msgid "Paste"
 msgstr "Dán"
 
@@ -1440,6 +1437,9 @@ msgstr "Split Way"
 msgid "Split a way at the selected node."
 msgstr "Chia một cách tại nút lựa chọn."
 
+msgid "Cannot split since another split operation is already in progress"
+msgstr ""
+
 msgid ""
 "The current selection cannot be used for splitting - no node is selected."
 msgstr ""
@@ -1574,6 +1574,27 @@ msgstr ""
 "và các nốt mới này sẽ được chọn. Hay nói cách khác, tất cả các đường sẽ lấy "
 "bản sao của riêng chúng và các nốt sẽ được chọn"
 
+msgid "Existing node"
+msgstr ""
+
+msgid "Both nodes"
+msgstr ""
+
+msgid "New node"
+msgstr ""
+
+msgid "Tags / Memberships"
+msgstr "Tags / Thành Viên"
+
+msgid "Unglue"
+msgstr ""
+
+msgid "Where should the tags of the node be put?"
+msgstr ""
+
+msgid "Where should the memberships of this node be put?"
+msgstr ""
+
 msgid "Unglued Node"
 msgstr "Node unglued"
 
@@ -3242,6 +3263,15 @@ msgstr "Công việc của bạn đã được lưu tự động."
 msgid "Restoring files"
 msgstr "Khôi phục các tập tin"
 
+msgid "Unable to delete backup file {0}"
+msgstr ""
+
+msgid "Unable to delete PID file {0}"
+msgstr ""
+
+msgid "Unable to delete archived backup file {0}"
+msgstr ""
+
 msgid "Illegal latitude value ''{0}''"
 msgstr "giá trị vĩ độ bất hợp pháp '' {0} ''"
 
@@ -4478,6 +4508,9 @@ msgstr "No \"from\" way found"
 msgid "No \"to\" way found"
 msgstr "No \"to\" way found"
 
+msgid "\"from\" way equals \"to\" way"
+msgstr ""
+
 msgid "No \"via\" node or way found"
 msgstr "No \"via\" node or way found"
 
@@ -7435,9 +7468,6 @@ msgstr "Đối tượng: {2} / Tags: {0} / Thành viên: {1}"
 msgid "Tags: {0} / Memberships: {1}"
 msgstr "Tags: {0} / Thành viên: {1}"
 
-msgid "Tags / Memberships"
-msgstr "Tags / Thành Viên"
-
 msgid "Delete the selected key in all objects"
 msgstr "Xóa phím chọn trong tất cả các đối tượng"
 
@@ -12476,6 +12506,15 @@ msgstr "Giá trị hiện tại không phải là một URL hợp lệ"
 msgid "Please enter the OSM API URL."
 msgstr "Hãy nhập URL OSM API."
 
+msgid "Use Overpass server for object downloads"
+msgstr ""
+
+msgid "Overpass server: "
+msgstr ""
+
+msgid "Overpass server"
+msgstr ""
+
 msgid "Proxy settings"
 msgstr "Proxy settings"
 
@@ -14881,6 +14920,9 @@ msgstr "URL không chứa giá trị {0}"
 msgid "reserved"
 msgstr "dành riêng"
 
+msgid "Unable to delete old preferences file {0}"
+msgstr ""
+
 msgid "Outdated Java version"
 msgstr "phiên bản Java lỗi thời"
 
@@ -14991,6 +15033,9 @@ msgstr ""
 "<Html> <p> Xin lỗi, không thể để dán thẻ từ đệm. Nó khôngChứa bất kỳ đối "
 "tượng JOSM hoặc văn bản phù hợp. </ P> </ html>"
 
+msgid "Unable to delete file {0}"
+msgstr ""
+
 msgid "ms"
 msgstr "ms"
 
@@ -18244,6 +18289,9 @@ msgstr "Dịch vụ công cộng Phương tiện đi lại (PSV)"
 msgid "Tourist buses"
 msgstr "xe buýt du lịch"
 
+msgid "Max. speed Heavy Goods Vehicles (km/h)"
+msgstr ""
+
 msgid "Min. speed (km/h)"
 msgstr "Min. tốc độ (km / h)"
 
@@ -20563,12 +20611,6 @@ msgstr "Văn phòng của Bác sĩ"
 msgid "Dentist"
 msgstr "Dentist"
 
-msgid "Nursing Home"
-msgstr "Nursing Home"
-
-msgid "Retirement Home"
-msgstr "Hưu Home"
-
 msgid "Pharmacy"
 msgstr "Dược"
 
@@ -20596,6 +20638,31 @@ msgstr "(Sử dụng mã quốc tế, như + 12-345-67890)"
 msgid "Veterinary"
 msgstr "thú y"
 
+msgid "Social Facility"
+msgstr ""
+
+msgid "Nursing Home"
+msgstr "Nursing Home"
+
+msgid "Group Home"
+msgstr ""
+
+msgid "For"
+msgstr ""
+
+msgid "Assisted Living"
+msgstr ""
+
+msgid "Outreach"
+msgstr ""
+
+msgctxt "social_facility"
+msgid "Shelter"
+msgstr ""
+
+msgid "Food Bank"
+msgstr ""
+
 msgid "Toilets/Restrooms"
 msgstr "Nhà vệ sinh / Nhà vệ sinh"
 
@@ -20638,6 +20705,13 @@ msgstr "ngồi xổm"
 msgid "urinal"
 msgstr "nước tiểu"
 
+msgctxt "toilets"
+msgid "Diaper"
+msgstr ""
+
+msgid "room"
+msgstr ""
+
 msgid "Post Box"
 msgstr "Post Box"
 
@@ -24724,6 +24798,12 @@ msgstr "Tải dõi ..."
 msgid "Download GPX track from openstreetmap.org"
 msgstr "Tải GPX track từ openstreetmap.org"
 
+msgid "Download Track"
+msgstr "Tải Track"
+
+msgid "Filename"
+msgstr "Tên tệp"
+
 msgid ""
 "Error occurred while parsing gpx file {0}. Only a part of the file will be "
 "available."
@@ -24731,20 +24811,14 @@ msgstr ""
 "Lỗi xảy ra khi phân tích cú pháp tập tin GPX {0}. Chỉ có một phần của tập "
 "tin sẽ đượcCó sẵn."
 
-msgid "Invalid URL {0}"
-msgstr "URL không hợp lệ {0}"
-
 msgid "Error fetching URL {0}"
 msgstr "Lỗi lấy URL {0}"
 
 msgid "Error parsing data from URL {0}"
 msgstr "Lỗi phân tích dữ liệu từ URL {0}"
 
-msgid "Download Track"
-msgstr "Tải Track"
-
-msgid "Filename"
-msgstr "Tên tệp"
+msgid "Invalid URL {0}"
+msgstr "URL không hợp lệ {0}"
 
 msgid "Private (only shared as anonymous, unordered points)"
 msgstr "Riêng tư (chỉ chia sẻ như vô danh, không có thứ tự điểm)"
@@ -24798,9 +24872,6 @@ msgstr "Không có lớp GPX chọn. Không thể tải lên một dấu vết."
 msgid "Uploading trace ..."
 msgstr "Tải lên dấu vết ..."
 
-msgid "Connecting..."
-msgstr "Kết nối ..."
-
 msgid "Upload canceled"
 msgstr "Upload hủy"
 
@@ -29555,6 +29626,69 @@ msgstr ""
 msgid "Please load some photos."
 msgstr "Hãy tải một số hình ảnh."
 
+msgid "Edit photo GPS data"
+msgstr ""
+
+msgid "Edit GPS data of selected photo."
+msgstr ""
+
+msgid "Edit Photo GPS Data"
+msgstr ""
+
+msgid "Please select an image first."
+msgstr ""
+
+msgid "No image selected"
+msgstr ""
+
+msgid "(Empty values delete the according fields.)"
+msgstr ""
+
+msgid "coordinates"
+msgstr "tọa độ"
+
+msgid "Latitude and longitude"
+msgstr ""
+
+msgid "Edit Image Coordinates"
+msgstr ""
+
+msgid "Edit coordinates in separate editor"
+msgstr ""
+
+msgid "altitude"
+msgstr ""
+
+msgid "Altitude:"
+msgstr ""
+
+msgid "speed"
+msgstr ""
+
+msgid "positive number or empty"
+msgstr ""
+
+msgid "Speed:"
+msgstr ""
+
+msgid "direction"
+msgstr ""
+
+msgid "range -360.0 .. 360.0, or empty"
+msgstr ""
+
+msgid "Direction:"
+msgstr ""
+
+msgid "°"
+msgstr ""
+
+msgid "Undo changes made in this dialog"
+msgstr ""
+
+msgid "Reload GPS data from image file"
+msgstr ""
+
 msgid "New layer for untagged images"
 msgstr "layer mới cho hình ảnh không được gắn thẻ"
 
@@ -32801,9 +32935,6 @@ msgstr "{0} .Wikipedia.org: {1}"
 msgid "Fetches all coordinates from Wikipedia in the current view"
 msgstr "nạp tất cả các tọa độ từ Wikipedia trong quan điểm hiện tại"
 
-msgid "coordinates"
-msgstr "tọa độ"
-
 msgid "Category"
 msgstr "Thể loại"
 
diff --git a/i18n/po/zh_CN.po b/i18n/po/zh_CN.po
index 41df3fe..594f2d8 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: 2015-12-31 03:40+0100\n"
-"PO-Revision-Date: 2015-12-04 07:48+0000\n"
+"POT-Creation-Date: 2016-01-06 03:38+0100\n"
+"PO-Revision-Date: 2016-01-04 11:41+0000\n"
 "Last-Translator: rc1028 <q371320247 at live.com>\n"
 "Language-Team: 汉语 <>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=1; plural=0;\n"
-"X-Launchpad-Export-Date: 2015-12-31 05:07+0000\n"
-"X-Generator: Launchpad (build 17865)\n"
+"X-Launchpad-Export-Date: 2016-01-06 05:08+0000\n"
+"X-Generator: Launchpad (build 17876)\n"
 "Language: zh_CN\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -1069,9 +1069,6 @@ msgstr "解析错误"
 msgid "Overpass query: "
 msgstr "Overpass 查询: "
 
-msgid "Overpass server: "
-msgstr "Overpass 服务器: "
-
 msgid "Paste"
 msgstr "粘贴"
 
@@ -1357,6 +1354,9 @@ msgstr "切割路径"
 msgid "Split a way at the selected node."
 msgstr "在选定的节点上切割路径。"
 
+msgid "Cannot split since another split operation is already in progress"
+msgstr "无法打断,因为另一个已有的打断操作正在进行"
+
 msgid ""
 "The current selection cannot be used for splitting - no node is selected."
 msgstr "当前的选择范围不能用于切割 - 尚未选定节点。"
@@ -1467,6 +1467,27 @@ msgstr ""
 "注意:如果选定了路径,这个路径会取得拆开节点的最新复本,并且会选定这些新节点。\n"
 "否则,所有路径会取得他们自己的复本,并且所有的节点都会被选定。"
 
+msgid "Existing node"
+msgstr ""
+
+msgid "Both nodes"
+msgstr ""
+
+msgid "New node"
+msgstr ""
+
+msgid "Tags / Memberships"
+msgstr "标签/所在关系"
+
+msgid "Unglue"
+msgstr ""
+
+msgid "Where should the tags of the node be put?"
+msgstr ""
+
+msgid "Where should the memberships of this node be put?"
+msgstr ""
+
 msgid "Unglued Node"
 msgstr "拆开节点"
 
@@ -2142,7 +2163,7 @@ msgstr "选择、移动、缩放和旋转对象"
 msgid ""
 "Are you sure that you want to move elements with attached ways that are "
 "hidden by filters?"
-msgstr ""
+msgstr "你确定要移动有其他被过滤器隐藏的路径所依附的元素?"
 
 msgid ""
 "You moved more than {0} element. Moving a large number of elements is often "
@@ -3043,6 +3064,15 @@ msgstr "您的工作已自动保存。"
 msgid "Restoring files"
 msgstr "正在还原文件"
 
+msgid "Unable to delete backup file {0}"
+msgstr ""
+
+msgid "Unable to delete PID file {0}"
+msgstr ""
+
+msgid "Unable to delete archived backup file {0}"
+msgstr ""
+
 msgid "Illegal latitude value ''{0}''"
 msgstr "不合法的纬度数值“{0}”"
 
@@ -3169,7 +3199,7 @@ msgid "UNKNOWN"
 msgstr "不明"
 
 msgid "Error reading revision info from revision file: {0}"
-msgstr ""
+msgstr "从修改文件中读取修改信息出错: {0}"
 
 msgid "Unexpected JOSM version number in revision file, value is ''{0}''"
 msgstr "修订文件中有意外 JOSM 版本号,值为“{0}”"
@@ -4205,6 +4235,9 @@ msgstr "找不到“出发”路径"
 msgid "No \"to\" way found"
 msgstr "找不到“到达”路径"
 
+msgid "\"from\" way equals \"to\" way"
+msgstr ""
+
 msgid "No \"via\" node or way found"
 msgstr "找不到“经过”节点或路径"
 
@@ -7016,9 +7049,6 @@ msgstr "对象:{2} / 标签:{0} / 所在关系:{1}"
 msgid "Tags: {0} / Memberships: {1}"
 msgstr "标签:{0} / 所在关系:{1}"
 
-msgid "Tags / Memberships"
-msgstr "标签/所在关系"
-
 msgid "Delete the selected key in all objects"
 msgstr "删除所有对象中选定的设定键"
 
@@ -8828,7 +8858,7 @@ msgstr "保存 WMS 文件"
 msgid ""
 "Aerial imagery \"{0}\" might be misaligned. Please check its offset using "
 "GPS tracks!"
-msgstr ""
+msgstr "航空影像 \"{0}\" 可能有对齐错误。请用 GPS 轨迹检验其偏移!"
 
 msgid "http://wiki.openstreetmap.org/wiki/Using_Imagery"
 msgstr "http://wiki.openstreetmap.org/wiki/Using_Imagery"
@@ -8837,7 +8867,7 @@ msgid "Details..."
 msgstr "详细信息..."
 
 msgid "Do not show this message again"
-msgstr ""
+msgstr "不再显示此消息"
 
 msgid "Hide this message and never show it again"
 msgstr "隐藏此消息,并不再显示"
@@ -9032,6 +9062,9 @@ msgid ""
 " Supported projections are: {2}\n"
 "Change the projection again or remove the layer."
 msgstr ""
+"图层 {0}不支持新投影 {1}。\n"
+"  支持的投影有{2}。\n"
+"请重新修改投影或移除图层。"
 
 msgid "Correlate to GPX"
 msgstr "关联到 GPX"
@@ -11158,7 +11191,7 @@ msgstr ""
 "width=600>错误为:{1}</table></html>"
 
 msgid "Sort presets menu alphabetically"
-msgstr ""
+msgstr "按字母顺序排列预设组合菜单"
 
 msgid "Tagging Presets"
 msgstr "添加预设组合标签"
@@ -11708,6 +11741,15 @@ msgstr "目前的数值是无效的 URL"
 msgid "Please enter the OSM API URL."
 msgstr "请输入 OSM API URL。"
 
+msgid "Use Overpass server for object downloads"
+msgstr "使用Overpass服务器下载对象"
+
+msgid "Overpass server: "
+msgstr "Overpass 服务器: "
+
+msgid "Overpass server"
+msgstr "Overpass服务器"
+
 msgid "Proxy settings"
 msgstr "代理服务器设定值"
 
@@ -13446,7 +13488,7 @@ msgid "Downloading plugin list from ''{0}''"
 msgstr "正在从“{0}”下载插件列表"
 
 msgid "Unsuccessful HTTP request"
-msgstr ""
+msgstr "HTTP请求失败"
 
 msgid "Plugin list download error"
 msgstr "插件列表下载错误"
@@ -13861,6 +13903,9 @@ msgstr "URL 不包含有效的{0}"
 msgid "reserved"
 msgstr "保留"
 
+msgid "Unable to delete old preferences file {0}"
+msgstr ""
+
 msgid "Outdated Java version"
 msgstr "过时的 Java 版本"
 
@@ -13956,6 +14001,9 @@ msgid ""
 "contain any JOSM object or suitable text. </p></html>"
 msgstr "<html><p>对不起,无法解析缓存中的标签,缓存中没有 JOSM 对象或适当的文本。</p></html>"
 
+msgid "Unable to delete file {0}"
+msgstr ""
+
 msgid "ms"
 msgstr "毫秒"
 
@@ -17069,6 +17117,9 @@ msgstr "公共汽车(psv)"
 msgid "Tourist buses"
 msgstr "旅游巴士"
 
+msgid "Max. speed Heavy Goods Vehicles (km/h)"
+msgstr ""
+
 msgid "Min. speed (km/h)"
 msgstr "最低速度(km/h)"
 
@@ -19366,12 +19417,6 @@ msgstr "医生办公室"
 msgid "Dentist"
 msgstr "牙医"
 
-msgid "Nursing Home"
-msgstr "疗养院"
-
-msgid "Retirement Home"
-msgstr "养老院"
-
 msgid "Pharmacy"
 msgstr "药店"
 
@@ -19399,6 +19444,31 @@ msgstr "(使用国际码,像是 +12-345-67890)"
 msgid "Veterinary"
 msgstr "兽医"
 
+msgid "Social Facility"
+msgstr ""
+
+msgid "Nursing Home"
+msgstr "疗养院"
+
+msgid "Group Home"
+msgstr ""
+
+msgid "For"
+msgstr ""
+
+msgid "Assisted Living"
+msgstr ""
+
+msgid "Outreach"
+msgstr ""
+
+msgctxt "social_facility"
+msgid "Shelter"
+msgstr ""
+
+msgid "Food Bank"
+msgstr ""
+
 msgid "Toilets/Restrooms"
 msgstr "厕所/洗手间"
 
@@ -19441,6 +19511,13 @@ msgstr "蹲式"
 msgid "urinal"
 msgstr "小便器"
 
+msgctxt "toilets"
+msgid "Diaper"
+msgstr ""
+
+msgid "room"
+msgstr ""
+
 msgid "Post Box"
 msgstr "邮筒"
 
@@ -23481,25 +23558,25 @@ msgstr "下载轨迹..."
 msgid "Download GPX track from openstreetmap.org"
 msgstr "从 openstreetmap.org 下载 GPX 轨迹"
 
+msgid "Download Track"
+msgstr "下载轨迹"
+
+msgid "Filename"
+msgstr "文件名"
+
 msgid ""
 "Error occurred while parsing gpx file {0}. Only a part of the file will be "
 "available."
 msgstr "解析 GPX 文件 {0} 时发生错误。只有文件的一部分将可用。"
 
-msgid "Invalid URL {0}"
-msgstr "无效 URL {0}"
-
 msgid "Error fetching URL {0}"
 msgstr "错误的提取 URL {0}"
 
 msgid "Error parsing data from URL {0}"
 msgstr "来自 URL {0} 的错误解析数据"
 
-msgid "Download Track"
-msgstr "下载轨迹"
-
-msgid "Filename"
-msgstr "文件名"
+msgid "Invalid URL {0}"
+msgstr "无效 URL {0}"
 
 msgid "Private (only shared as anonymous, unordered points)"
 msgstr "私人(只以匿名分享,无顺序的点)"
@@ -23548,9 +23625,6 @@ msgstr "没有选定 GPX 图层。不能上传轨迹。"
 msgid "Uploading trace ..."
 msgstr "上传轨迹中..."
 
-msgid "Connecting..."
-msgstr "正在连接..."
-
 msgid "Upload canceled"
 msgstr "上传已取消"
 
@@ -28108,6 +28182,69 @@ msgstr ""
 msgid "Please load some photos."
 msgstr ""
 
+msgid "Edit photo GPS data"
+msgstr ""
+
+msgid "Edit GPS data of selected photo."
+msgstr ""
+
+msgid "Edit Photo GPS Data"
+msgstr ""
+
+msgid "Please select an image first."
+msgstr ""
+
+msgid "No image selected"
+msgstr ""
+
+msgid "(Empty values delete the according fields.)"
+msgstr ""
+
+msgid "coordinates"
+msgstr "坐标"
+
+msgid "Latitude and longitude"
+msgstr ""
+
+msgid "Edit Image Coordinates"
+msgstr ""
+
+msgid "Edit coordinates in separate editor"
+msgstr ""
+
+msgid "altitude"
+msgstr ""
+
+msgid "Altitude:"
+msgstr ""
+
+msgid "speed"
+msgstr ""
+
+msgid "positive number or empty"
+msgstr ""
+
+msgid "Speed:"
+msgstr ""
+
+msgid "direction"
+msgstr ""
+
+msgid "range -360.0 .. 360.0, or empty"
+msgstr ""
+
+msgid "Direction:"
+msgstr ""
+
+msgid "°"
+msgstr ""
+
+msgid "Undo changes made in this dialog"
+msgstr ""
+
+msgid "Reload GPS data from image file"
+msgstr ""
+
 msgid "New layer for untagged images"
 msgstr ""
 
@@ -31129,7 +31266,7 @@ msgstr[0] ""
 msgstr[1] ""
 
 msgid "Add Wikidata for language ''{0}''"
-msgstr ""
+msgstr "添加{0}语言的维基数据(Wikidata)"
 
 msgid "Add names from Wikipedia"
 msgstr "添加维基百科的名称"
@@ -31172,9 +31309,6 @@ msgstr "{0}.Wikipedia.org:{1}"
 msgid "Fetches all coordinates from Wikipedia in the current view"
 msgstr "从维基百科获取所有当前视图中的坐标"
 
-msgid "coordinates"
-msgstr "坐标"
-
 msgid "Category"
 msgstr "分类"
 
diff --git a/i18n/po/zh_TW.po b/i18n/po/zh_TW.po
index 45ee0cb..31b0408 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: 2015-12-31 03:40+0100\n"
+"POT-Creation-Date: 2016-01-06 03:38+0100\n"
 "PO-Revision-Date: 2015-12-18 19:32+0000\n"
 "Last-Translator: yellowsoar <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: 2015-12-31 05:06+0000\n"
-"X-Generator: Launchpad (build 17865)\n"
+"X-Launchpad-Export-Date: 2016-01-06 05:08+0000\n"
+"X-Generator: Launchpad (build 17876)\n"
 "Language: zh_TW\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -1062,9 +1062,6 @@ msgstr ""
 msgid "Overpass query: "
 msgstr ""
 
-msgid "Overpass server: "
-msgstr ""
-
 msgid "Paste"
 msgstr "貼上"
 
@@ -1350,6 +1347,9 @@ msgstr "切割路徑"
 msgid "Split a way at the selected node."
 msgstr "在選取的節點上切割路徑"
 
+msgid "Cannot split since another split operation is already in progress"
+msgstr ""
+
 msgid ""
 "The current selection cannot be used for splitting - no node is selected."
 msgstr "目前的選擇區域不能用於分割 - 尚未選取節點。"
@@ -1461,6 +1461,27 @@ msgstr ""
 "選取這些新節點。否則,所有路徑會取得他們自己的複本而且所有的節點\n"
 "都會被選取。"
 
+msgid "Existing node"
+msgstr ""
+
+msgid "Both nodes"
+msgstr ""
+
+msgid "New node"
+msgstr ""
+
+msgid "Tags / Memberships"
+msgstr "標籤 / 成員"
+
+msgid "Unglue"
+msgstr ""
+
+msgid "Where should the tags of the node be put?"
+msgstr ""
+
+msgid "Where should the memberships of this node be put?"
+msgstr ""
+
 msgid "Unglued Node"
 msgstr "取消黏合節點"
 
@@ -3045,6 +3066,15 @@ msgstr ""
 msgid "Restoring files"
 msgstr "正在還原檔案"
 
+msgid "Unable to delete backup file {0}"
+msgstr ""
+
+msgid "Unable to delete PID file {0}"
+msgstr ""
+
+msgid "Unable to delete archived backup file {0}"
+msgstr ""
+
 msgid "Illegal latitude value ''{0}''"
 msgstr "不合法的緯度數值「{0}」"
 
@@ -4204,6 +4234,9 @@ msgstr "找不到「from」路徑"
 msgid "No \"to\" way found"
 msgstr "找不到「to」路徑"
 
+msgid "\"from\" way equals \"to\" way"
+msgstr ""
+
 msgid "No \"via\" node or way found"
 msgstr "找不到「via」節點或路徑"
 
@@ -6995,9 +7028,6 @@ msgstr "物件: {2} / 標籤: {0} / 成員: {1}"
 msgid "Tags: {0} / Memberships: {1}"
 msgstr "標籤: {0} / 成員: {1}"
 
-msgid "Tags / Memberships"
-msgstr "標籤 / 成員"
-
 msgid "Delete the selected key in all objects"
 msgstr "刪除所有物件中選取的設定鍵"
 
@@ -11656,6 +11686,15 @@ msgstr "目前的數值是無效的 URL"
 msgid "Please enter the OSM API URL."
 msgstr "請輸入 OSM API URL。"
 
+msgid "Use Overpass server for object downloads"
+msgstr ""
+
+msgid "Overpass server: "
+msgstr ""
+
+msgid "Overpass server"
+msgstr ""
+
 msgid "Proxy settings"
 msgstr "代理伺服器設定值"
 
@@ -13808,6 +13847,9 @@ msgstr ""
 msgid "reserved"
 msgstr ""
 
+msgid "Unable to delete old preferences file {0}"
+msgstr ""
+
 msgid "Outdated Java version"
 msgstr ""
 
@@ -13899,6 +13941,9 @@ msgid ""
 "contain any JOSM object or suitable text. </p></html>"
 msgstr ""
 
+msgid "Unable to delete file {0}"
+msgstr ""
+
 msgid "ms"
 msgstr ""
 
@@ -17015,6 +17060,9 @@ msgstr "公共汽車 (psv)"
 msgid "Tourist buses"
 msgstr ""
 
+msgid "Max. speed Heavy Goods Vehicles (km/h)"
+msgstr ""
+
 msgid "Min. speed (km/h)"
 msgstr "最低限速 (km/h)"
 
@@ -19312,12 +19360,6 @@ msgstr ""
 msgid "Dentist"
 msgstr "牙醫"
 
-msgid "Nursing Home"
-msgstr ""
-
-msgid "Retirement Home"
-msgstr ""
-
 msgid "Pharmacy"
 msgstr "藥局"
 
@@ -19345,6 +19387,31 @@ msgstr "(使用國際碼,像是 +12-345-67890)"
 msgid "Veterinary"
 msgstr "獸醫"
 
+msgid "Social Facility"
+msgstr ""
+
+msgid "Nursing Home"
+msgstr ""
+
+msgid "Group Home"
+msgstr ""
+
+msgid "For"
+msgstr ""
+
+msgid "Assisted Living"
+msgstr ""
+
+msgid "Outreach"
+msgstr ""
+
+msgctxt "social_facility"
+msgid "Shelter"
+msgstr ""
+
+msgid "Food Bank"
+msgstr ""
+
 msgid "Toilets/Restrooms"
 msgstr ""
 
@@ -19387,6 +19454,13 @@ msgstr ""
 msgid "urinal"
 msgstr ""
 
+msgctxt "toilets"
+msgid "Diaper"
+msgstr ""
+
+msgid "room"
+msgstr ""
+
 msgid "Post Box"
 msgstr "郵筒"
 
@@ -23424,25 +23498,25 @@ msgstr "下載軌跡 ..."
 msgid "Download GPX track from openstreetmap.org"
 msgstr "從 openstreetmap.org 下載 GPX 軌跡"
 
+msgid "Download Track"
+msgstr "下載軌跡"
+
+msgid "Filename"
+msgstr "檔案名稱"
+
 msgid ""
 "Error occurred while parsing gpx file {0}. Only a part of the file will be "
 "available."
 msgstr ""
 
-msgid "Invalid URL {0}"
-msgstr "無效的 URL {0}"
-
 msgid "Error fetching URL {0}"
 msgstr "取得 URL {0} 時發生錯誤"
 
 msgid "Error parsing data from URL {0}"
 msgstr "從 URL {0} 解析資料時發生錯誤"
 
-msgid "Download Track"
-msgstr "下載軌跡"
-
-msgid "Filename"
-msgstr "檔案名稱"
+msgid "Invalid URL {0}"
+msgstr "無效的 URL {0}"
 
 msgid "Private (only shared as anonymous, unordered points)"
 msgstr "私人 (只以匿名分享,無順序的點)"
@@ -23491,9 +23565,6 @@ msgstr "沒有選取 GPX 圖層。不能上傳軌跡。"
 msgid "Uploading trace ..."
 msgstr "正在上傳軌跡 ..."
 
-msgid "Connecting..."
-msgstr "正在連線..."
-
 msgid "Upload canceled"
 msgstr ""
 
@@ -28006,6 +28077,69 @@ msgstr ""
 msgid "Please load some photos."
 msgstr ""
 
+msgid "Edit photo GPS data"
+msgstr ""
+
+msgid "Edit GPS data of selected photo."
+msgstr ""
+
+msgid "Edit Photo GPS Data"
+msgstr ""
+
+msgid "Please select an image first."
+msgstr ""
+
+msgid "No image selected"
+msgstr ""
+
+msgid "(Empty values delete the according fields.)"
+msgstr ""
+
+msgid "coordinates"
+msgstr ""
+
+msgid "Latitude and longitude"
+msgstr ""
+
+msgid "Edit Image Coordinates"
+msgstr ""
+
+msgid "Edit coordinates in separate editor"
+msgstr ""
+
+msgid "altitude"
+msgstr ""
+
+msgid "Altitude:"
+msgstr ""
+
+msgid "speed"
+msgstr ""
+
+msgid "positive number or empty"
+msgstr ""
+
+msgid "Speed:"
+msgstr ""
+
+msgid "direction"
+msgstr ""
+
+msgid "range -360.0 .. 360.0, or empty"
+msgstr ""
+
+msgid "Direction:"
+msgstr ""
+
+msgid "°"
+msgstr ""
+
+msgid "Undo changes made in this dialog"
+msgstr ""
+
+msgid "Reload GPS data from image file"
+msgstr ""
+
 msgid "New layer for untagged images"
 msgstr ""
 
@@ -31037,9 +31171,6 @@ msgstr ""
 msgid "Fetches all coordinates from Wikipedia in the current view"
 msgstr ""
 
-msgid "coordinates"
-msgstr ""
-
 msgid "Category"
 msgstr ""
 
diff --git a/images/presets/baby_hatch.png b/images/presets/baby_hatch.png
deleted file mode 100644
index b76deb9..0000000
Binary files a/images/presets/baby_hatch.png and /dev/null differ
diff --git a/linux/latest/DEBIAN/control b/linux/latest/DEBIAN/control
index d0deb6f..914aef0 100644
--- a/linux/latest/DEBIAN/control
+++ b/linux/latest/DEBIAN/control
@@ -5,7 +5,7 @@ Maintainer: josm developers <josm-dev at openstreetmap.org>
 Homepage: https://josm.openstreetmap.de
 Priority: extra
 Architecture: all
-Depends: openjdk-7-jre | openjdk-8-jre | openjdk-9-jre
+Depends: openjdk-8-jre | java7-runtime
 Description: Editor for OpenStreetMap (daily development snapshot)
  JOSM is an editor for OpenStreetMap (OSM) written in Java.
   The current version supports stand alone GPX tracks, GPX track data
diff --git a/linux/tested/DEBIAN/control b/linux/tested/DEBIAN/control
index 33f6869..db7d6e9 100644
--- a/linux/tested/DEBIAN/control
+++ b/linux/tested/DEBIAN/control
@@ -5,7 +5,7 @@ Maintainer: josm developers <josm-dev at openstreetmap.org>
 Homepage: https://josm.openstreetmap.de
 Priority: extra
 Architecture: all
-Depends: openjdk-7-jre | openjdk-8-jre | openjdk-9-jre
+Depends: openjdk-8-jre | java7-runtime
 Conflicts: josm-plugins
 Replaces: josm-plugins
 Description: Editor for OpenStreetMap
diff --git a/scripts/BuildProjectionDefinitions.java b/scripts/BuildProjectionDefinitions.java
index cb3471d..f408e8b 100644
--- a/scripts/BuildProjectionDefinitions.java
+++ b/scripts/BuildProjectionDefinitions.java
@@ -41,7 +41,12 @@ public class BuildProjectionDefinitions {
     private static int noJosm = 0;
     private static int noProj4 = 0;
 
-    public static void main(String[] args) throws IOException, InterruptedException {
+    /**
+     * Program entry point
+     * @param args command line arguments (not used)
+     * @throws IOException if any I/O error occurs
+     */
+    public static void main(String[] args) throws IOException {
         buildList();
     }
 
diff --git a/scripts/taginfoextract.groovy b/scripts/taginfoextract.groovy
index dc76d39..a606f50 100644
--- a/scripts/taginfoextract.groovy
+++ b/scripts/taginfoextract.groovy
@@ -21,20 +21,22 @@ import org.openstreetmap.josm.Main
 import org.openstreetmap.josm.data.Version
 import org.openstreetmap.josm.data.coor.LatLon
 import org.openstreetmap.josm.data.osm.Node
+import org.openstreetmap.josm.data.osm.OsmPrimitive
 import org.openstreetmap.josm.data.osm.Way
 import org.openstreetmap.josm.data.osm.visitor.paint.MapPaintSettings
 import org.openstreetmap.josm.data.osm.visitor.paint.StyledMapRenderer
 import org.openstreetmap.josm.data.projection.Projections
 import org.openstreetmap.josm.gui.NavigatableComponent
-import org.openstreetmap.josm.gui.mappaint.AreaElemStyle
 import org.openstreetmap.josm.gui.mappaint.Environment
-import org.openstreetmap.josm.gui.mappaint.LineElemStyle
 import org.openstreetmap.josm.gui.mappaint.MultiCascade
 import org.openstreetmap.josm.gui.mappaint.MapPaintStyles.IconReference
 import org.openstreetmap.josm.gui.mappaint.mapcss.MapCSSStyleSource
 import org.openstreetmap.josm.gui.mappaint.mapcss.Condition.SimpleKeyValueCondition
 import org.openstreetmap.josm.gui.mappaint.mapcss.Selector.GeneralSelector
 import org.openstreetmap.josm.gui.mappaint.mapcss.parsergen.MapCSSParser
+import org.openstreetmap.josm.gui.mappaint.styleelement.AreaElement
+import org.openstreetmap.josm.gui.mappaint.styleelement.LineElement
+import org.openstreetmap.josm.gui.mappaint.styleelement.StyleElement
 import org.openstreetmap.josm.gui.preferences.map.TaggingPresetPreference
 import org.openstreetmap.josm.gui.tagging.presets.TaggingPreset
 import org.openstreetmap.josm.gui.tagging.presets.TaggingPresetReader
@@ -52,8 +54,8 @@ class taginfoextract {
     String input_file
     MapCSSStyleSource style_source
     FileWriter output_file
-    def base_dir = "."
-    def tags = [] as Set
+    String base_dir = "."
+    Set tags = []
 
     private def cached_svnrev
 
@@ -63,17 +65,17 @@ class taginfoextract {
     abstract class Checker {
 
         def tag
-        def osm
+        OsmPrimitive osm
 
         Checker(tag) {
             this.tag = tag
         }
 
-        def apply_stylesheet(osm) {
+        Environment apply_stylesheet(OsmPrimitive osm) {
             osm.put(tag[0], tag[1])
-            def mc = new MultiCascade()
+            MultiCascade mc = new MultiCascade()
 
-            def env = new Environment(osm, mc, null, style_source)
+            Environment env = new Environment(osm, mc, null, style_source)
             for (def r in style_source.rules) {
                 env.clearSelectorMatchingInformation()
                 if (r.selector.matches(env)) {
@@ -89,10 +91,10 @@ class taginfoextract {
         }
 
         /**
-         * Create image file from ElemStyle.
+         * Create image file from StyleElement.
          * @return the URL
          */
-        def create_image(elem_style, type, nc) {
+        def create_image(StyleElement elem_style, type, nc) {
             def img = new BufferedImage(16, 16, BufferedImage.TYPE_INT_ARGB)
             def g = img.createGraphics()
             g.setClip(0, 0, 16, 16)
@@ -142,10 +144,10 @@ class taginfoextract {
             def nc = new NavigatableComponent()
             def n1 = new Node(nc.getLatLon(2,8))
             def n2 = new Node(nc.getLatLon(14,8))
-            osm.addNode(n1)
-            osm.addNode(n2)
+            ((Way)osm).addNode(n1)
+            ((Way)osm).addNode(n2)
             def env = apply_stylesheet(osm)
-            def les = LineElemStyle.createLine(env)
+            def les = LineElement.createLine(env)
             if (les != null) {
                 if (!generate_image) return true
                 return create_image(les, 'way', nc)
@@ -165,13 +167,13 @@ class taginfoextract {
             def n2 = new Node(nc.getLatLon(14,2))
             def n3 = new Node(nc.getLatLon(14,14))
             def n4 = new Node(nc.getLatLon(2,14))
-            osm.addNode(n1)
-            osm.addNode(n2)
-            osm.addNode(n3)
-            osm.addNode(n4)
-            osm.addNode(n1)
+            ((Way)osm).addNode(n1)
+            ((Way)osm).addNode(n2)
+            ((Way)osm).addNode(n3)
+            ((Way)osm).addNode(n4)
+            ((Way)osm).addNode(n1)
             def env = apply_stylesheet(osm)
-            def aes = AreaElemStyle.create(env)
+            def aes = AreaElement.create(env)
             if (aes != null) {
                 if (!generate_image) return true
                 return create_image(aes, 'area', nc)
@@ -389,7 +391,7 @@ class taginfoextract {
     /**
      * Determine full image url (can refer to JOSM or OSM repository).
      */
-    def find_image_url(path) {
+    def find_image_url(String path) {
         def f = new File("${base_dir}/images/styles/standard/${path}")
         if (f.exists()) {
             def rev = osm_svn_revision()
diff --git a/src/org/openstreetmap/josm/Main.java b/src/org/openstreetmap/josm/Main.java
index 9f28ef5..80ac33e 100644
--- a/src/org/openstreetmap/josm/Main.java
+++ b/src/org/openstreetmap/josm/Main.java
@@ -143,9 +143,7 @@ public abstract class Main {
      * @return <code>true</code> if JOSM currently displays a map view
      */
     public static boolean isDisplayingMapView() {
-        if (map == null) return false;
-        if (map.mapView == null) return false;
-        return true;
+        return map != null && map.mapView != null;
     }
 
     /**
@@ -1082,7 +1080,9 @@ public abstract class Main {
             worker.shutdown();
             ImageProvider.shutdown(false);
             JCSCacheManager.shutdown();
-            geometry.remember("gui.geometry");
+            if (geometry != null) {
+                geometry.remember("gui.geometry");
+            }
             if (map != null) {
                 map.rememberToggleDialogWidth();
             }
diff --git a/src/org/openstreetmap/josm/actions/DistributeAction.java b/src/org/openstreetmap/josm/actions/DistributeAction.java
index 0a9303a..cb16e86 100644
--- a/src/org/openstreetmap/josm/actions/DistributeAction.java
+++ b/src/org/openstreetmap/josm/actions/DistributeAction.java
@@ -2,7 +2,6 @@
 package org.openstreetmap.josm.actions;
 
 import static org.openstreetmap.josm.gui.help.HelpUtil.ht;
-import static org.openstreetmap.josm.tools.I18n.marktr;
 import static org.openstreetmap.josm.tools.I18n.tr;
 
 import java.awt.event.ActionEvent;
@@ -33,15 +32,13 @@ import org.openstreetmap.josm.tools.Shortcut;
  */
 public final class DistributeAction extends JosmAction {
 
-    private static final String ACTION_SHORT_NAME = marktr("Distribute Nodes");
-
     /**
      * Constructs a new {@code DistributeAction}.
      */
     public DistributeAction() {
-        super(tr(ACTION_SHORT_NAME), "distribute",
+        super(tr("Distribute Nodes"), "distribute",
               tr("Distribute the selected nodes to equal distances along a line."),
-              Shortcut.registerShortcut("tools:distribute", tr("Tool: {0}", tr(ACTION_SHORT_NAME)), KeyEvent.VK_B, Shortcut.SHIFT),
+              Shortcut.registerShortcut("tools:distribute", tr("Tool: {0}", tr("Distribute Nodes")), KeyEvent.VK_B, Shortcut.SHIFT),
               true);
         putValue("help", ht("/Action/DistributeNodes"));
     }
@@ -99,7 +96,7 @@ public final class DistributeAction extends JosmAction {
         }
 
         // Do it!
-        Main.main.undoRedo.add(new SequenceCommand(tr(ACTION_SHORT_NAME), cmds));
+        Main.main.undoRedo.add(new SequenceCommand(tr("Distribute Nodes"), cmds));
         Main.map.repaint();
     }
 
diff --git a/src/org/openstreetmap/josm/actions/DownloadNotesInViewAction.java b/src/org/openstreetmap/josm/actions/DownloadNotesInViewAction.java
index 4803523..97a3a10 100644
--- a/src/org/openstreetmap/josm/actions/DownloadNotesInViewAction.java
+++ b/src/org/openstreetmap/josm/actions/DownloadNotesInViewAction.java
@@ -42,6 +42,8 @@ public final class DownloadNotesInViewAction extends JosmAction {
 
     @Override
     protected void updateEnabledState() {
-        setEnabled(Main.map != null && Main.map.mapView != null && !Main.isOffline(OnlineResource.OSM_API));
+        setEnabled(Main.isDisplayingMapView()
+                && Main.map.mapView.getActiveLayer() != null
+                && !Main.isOffline(OnlineResource.OSM_API));
     }
 }
diff --git a/src/org/openstreetmap/josm/actions/HelpAction.java b/src/org/openstreetmap/josm/actions/HelpAction.java
index 1239309..7874504 100644
--- a/src/org/openstreetmap/josm/actions/HelpAction.java
+++ b/src/org/openstreetmap/josm/actions/HelpAction.java
@@ -6,32 +6,44 @@ import static org.openstreetmap.josm.tools.I18n.tr;
 import java.awt.Component;
 import java.awt.Point;
 import java.awt.event.ActionEvent;
+import java.awt.event.KeyEvent;
 
-import javax.swing.AbstractAction;
 import javax.swing.SwingUtilities;
 
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.gui.help.HelpBrowser;
 import org.openstreetmap.josm.gui.help.HelpUtil;
 import org.openstreetmap.josm.io.OnlineResource;
-import org.openstreetmap.josm.tools.ImageProvider;
+import org.openstreetmap.josm.tools.Shortcut;
 
 /**
  * Open a help browser and displays lightweight online help.
  * @since 155
  */
-public class HelpAction extends AbstractAction {
+public class HelpAction extends JosmAction {
 
     /**
      * Constructs a new {@code HelpAction}.
      */
     public HelpAction() {
-        super(tr("Help"));
-        new ImageProvider("help").getResource().getImageIcon(this);
-        putValue("toolbar", "help");
+        this(true);
+    }
+
+    private HelpAction(boolean shortcut) {
+        super(tr("Help"), "help", null,
+                shortcut ? Shortcut.registerShortcut("system:help", tr("Help"), KeyEvent.VK_F1, Shortcut.DIRECT) : null,
+                true);
         setEnabled(!Main.isOffline(OnlineResource.JOSM_WEBSITE));
     }
 
+    /**
+     * Constructs a new {@code HelpAction} without assigning a shortcut.
+     * @return a new {@code HelpAction}
+     */
+    public static HelpAction createWithoutShortcut() {
+        return new HelpAction(false);
+    }
+
     @Override
     public void actionPerformed(ActionEvent e) {
         if (e.getActionCommand() == null) {
diff --git a/src/org/openstreetmap/josm/actions/JoinAreasAction.java b/src/org/openstreetmap/josm/actions/JoinAreasAction.java
index 2d50667..d2ac3a9 100644
--- a/src/org/openstreetmap/josm/actions/JoinAreasAction.java
+++ b/src/org/openstreetmap/josm/actions/JoinAreasAction.java
@@ -195,7 +195,9 @@ public class JoinAreasAction extends JosmAction {
         /** Direction of current way */
         private boolean lastWayReverse;
 
-        /** Constructor */
+        /** Constructor
+         * @param ways available ways
+         */
         WayTraverser(Collection<WayInPolygon> ways) {
             availableWays = new HashSet<>(ways);
             lastWay = null;
@@ -259,6 +261,9 @@ public class JoinAreasAction extends JosmAction {
 
         /**
          * Returns oriented angle (N1N2, N1N3) in range [0; 2*Math.PI[
+         * @param N1 first node
+         * @param N2 second node
+         * @param N3 third node
          * @return oriented angle (N1N2, N1N3) in range [0; 2*Math.PI[
          */
         private static double getAngle(Node N1, Node N2, Node N3) {
@@ -1504,25 +1509,15 @@ public class JoinAreasAction extends JosmAction {
      */
     private void stripTags(Collection<Way> ways) {
         for (Way w : ways) {
-            stripTags(w);
+            final Way wayWithoutTags = new Way(w);
+            wayWithoutTags.removeAll();
+            cmds.add(new ChangeCommand(w, wayWithoutTags));
         }
         /* I18N: current action printed in status display */
         commitCommands(marktr("Remove tags from inner ways"));
     }
 
     /**
-     * Remove all tags from the way
-     * @param x The Way to remove all tags from
-     */
-    private void stripTags(Way x) {
-        Way y = new Way(x);
-        for (String key : x.keySet()) {
-            y.remove(key);
-        }
-        cmds.add(new ChangeCommand(x, y));
-    }
-
-    /**
      * Takes the last cmdsCount actions back and combines them into a single action
      * (for when the user wants to undo the join action)
      * @param message The commit message to display
diff --git a/src/org/openstreetmap/josm/actions/OpenFileAction.java b/src/org/openstreetmap/josm/actions/OpenFileAction.java
index a1e56a4..6a286fe 100644
--- a/src/org/openstreetmap/josm/actions/OpenFileAction.java
+++ b/src/org/openstreetmap/josm/actions/OpenFileAction.java
@@ -81,18 +81,27 @@ public class OpenFileAction extends DiskAccessAction {
 
     /**
      * Open a list of files. The complete list will be passed to batch importers.
+     * Filenames will not be saved in history.
      * @param fileList A list of files
      */
     public static void openFiles(List<File> fileList) {
         openFiles(fileList, false);
     }
 
+    /**
+     * Open a list of files. The complete list will be passed to batch importers.
+     * @param fileList A list of files
+     * @param recordHistory {@code true} to save filename in history (default: false)
+     */
     public static void openFiles(List<File> fileList, boolean recordHistory) {
         OpenFileTask task = new OpenFileTask(fileList, null);
         task.setRecordHistory(recordHistory);
         Main.worker.submit(task);
     }
 
+    /**
+     * Task to open files.
+     */
     public static class OpenFileTask extends PleaseWaitRunnable {
         private final List<File> files;
         private final List<File> successfullyOpenedFiles = new ArrayList<>();
@@ -102,6 +111,12 @@ public class OpenFileAction extends DiskAccessAction {
         private boolean canceled;
         private boolean recordHistory;
 
+        /**
+         * Constructs a new {@code OpenFileTask}.
+         * @param files files to open
+         * @param fileFilter file filter
+         * @param title message for the user
+         */
         public OpenFileTask(final List<File> files, final FileFilter fileFilter, final String title) {
             super(title, false /* don't ignore exception */);
             this.fileFilter = fileFilter;
@@ -129,18 +144,27 @@ public class OpenFileAction extends DiskAccessAction {
             }
         }
 
+        /**
+         * Constructs a new {@code OpenFileTask}.
+         * @param files files to open
+         * @param fileFilter file filter
+         */
         public OpenFileTask(List<File> files, FileFilter fileFilter) {
             this(files, fileFilter, tr("Opening files"));
         }
 
         /**
-         * save filename in history (for list of recently opened files)
-         * default: false
+         * Sets whether to save filename in history (for list of recently opened files).
+         * @param recordHistory {@code true} to save filename in history (default: false)
          */
         public void setRecordHistory(boolean recordHistory) {
             this.recordHistory = recordHistory;
         }
 
+        /**
+         * Determines if filename must be saved in history (for list of recently opened files).
+         * @return {@code true} if filename must be saved in history
+         */
         public boolean isRecordHistory() {
             return recordHistory;
         }
@@ -318,6 +342,11 @@ public class OpenFileAction extends DiskAccessAction {
             }
         }
 
+        /**
+         * Import data files with the given importer.
+         * @param importer file importer
+         * @param files data files to import
+         */
         public void importData(FileImporter importer, List<File> files) {
             if (importer.isBatchImporter()) {
                 if (canceled) return;
diff --git a/src/org/openstreetmap/josm/actions/OrthogonalizeAction.java b/src/org/openstreetmap/josm/actions/OrthogonalizeAction.java
index 903a16b..972ebcb 100644
--- a/src/org/openstreetmap/josm/actions/OrthogonalizeAction.java
+++ b/src/org/openstreetmap/josm/actions/OrthogonalizeAction.java
@@ -198,6 +198,7 @@ public final class OrthogonalizeAction extends JosmAction {
 
     /**
      * Collect groups of ways with common nodes in order to orthogonalize each group separately.
+     * @param wayDataList list of ways
      * @return groups of ways with common nodes
      */
     private static List<List<WayData>> buildGroups(List<WayData> wayDataList) {
@@ -245,6 +246,8 @@ public final class OrthogonalizeAction extends JosmAction {
      *      the mean value of their y-Coordinates.
      *      - The same for vertical segments.
      *  5. Rotate back.
+     * @param wayDataList list of ways
+     * @param headingNodes list of heading nodes
      * @return list of commands to perform
      * @throws InvalidUserInputException if selected ways have an angle different from 90 or 180 degrees
      **/
@@ -397,7 +400,7 @@ public final class OrthogonalizeAction extends JosmAction {
     }
 
     /**
-     * Class contains everything we need to know about a singe way.
+     * Class contains everything we need to know about a single way.
      */
     private static class WayData {
         public final Way way;             // The assigned way
@@ -476,6 +479,7 @@ public final class OrthogonalizeAction extends JosmAction {
 
     /**
      * Make sure angle (up to 2*Pi) is in interval [ 0, 2*Pi ).
+     * @param a angle
      * @return correct angle
      */
     private static double standard_angle_0_to_2PI(double a) {
@@ -490,6 +494,7 @@ public final class OrthogonalizeAction extends JosmAction {
 
     /**
      * Make sure angle (up to 2*Pi) is in interval ( -Pi, Pi ].
+     * @param a angle
      * @return correct angle
      */
     private static double standard_angle_mPI_to_PI(double a) {
@@ -512,6 +517,9 @@ public final class OrthogonalizeAction extends JosmAction {
 
         /**
          * Rotate counter-clock-wise.
+         * @param pivot pivot
+         * @param en original east/north
+         * @param angle angle, in radians
          * @return new east/north
          */
         public static EastNorth rotateCC(EastNorth pivot, EastNorth en, double angle) {
@@ -540,6 +548,8 @@ public final class OrthogonalizeAction extends JosmAction {
     /**
      * Recognize angle to be approximately 0, 90, 180 or 270 degrees.
      * returns an integral value, corresponding to a counter clockwise turn.
+     * @param a angle, in radians
+     * @param deltaMax maximum tolerance, in radians
      * @return an integral value, corresponding to a counter clockwise turn
      * @throws RejectedAngleException in case of invalid angle
      */
diff --git a/src/org/openstreetmap/josm/actions/OverpassDownloadAction.java b/src/org/openstreetmap/josm/actions/OverpassDownloadAction.java
index 18e2149..1cefa84 100644
--- a/src/org/openstreetmap/josm/actions/OverpassDownloadAction.java
+++ b/src/org/openstreetmap/josm/actions/OverpassDownloadAction.java
@@ -14,7 +14,6 @@ import java.awt.event.FocusEvent;
 import java.awt.event.FocusListener;
 import java.awt.event.KeyEvent;
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.Deque;
@@ -40,9 +39,9 @@ import org.openstreetmap.josm.actions.downloadtasks.PostDownloadHandler;
 import org.openstreetmap.josm.data.Bounds;
 import org.openstreetmap.josm.data.preferences.CollectionProperty;
 import org.openstreetmap.josm.data.preferences.IntegerProperty;
-import org.openstreetmap.josm.data.preferences.StringProperty;
 import org.openstreetmap.josm.gui.HelpAwareOptionPane;
 import org.openstreetmap.josm.gui.download.DownloadDialog;
+import org.openstreetmap.josm.gui.preferences.server.OverpassServerPreference;
 import org.openstreetmap.josm.gui.util.GuiHelper;
 import org.openstreetmap.josm.gui.widgets.HistoryComboBox;
 import org.openstreetmap.josm.gui.widgets.JosmTextArea;
@@ -80,7 +79,7 @@ public class OverpassDownloadAction extends JosmAction {
             Bounds area = dialog.getSelectedDownloadArea();
             DownloadOsmTask task = new DownloadOsmTask();
             Future<?> future = task.download(
-                    new OverpassDownloadReader(area, dialog.getOverpassServer(), dialog.getOverpassQuery()),
+                    new OverpassDownloadReader(area, OverpassServerPreference.getOverpassServer(), dialog.getOverpassQuery()),
                     dialog.isNewLayerRequired(), area, null);
             Main.worker.submit(new PostDownloadHandler(task, future));
         }
@@ -116,13 +115,9 @@ public class OverpassDownloadAction extends JosmAction {
 
     private static final class OverpassDownloadDialog extends DownloadDialog {
 
-        private HistoryComboBox overpassServer;
         private HistoryComboBox overpassWizard;
         private JosmTextArea overpassQuery;
         private static OverpassDownloadDialog instance;
-        private static final StringProperty OVERPASS_SERVER = new StringProperty("download.overpass.server", "http://overpass-api.de/api/");
-        private static final CollectionProperty OVERPASS_SERVER_HISTORY = new CollectionProperty("download.overpass.servers",
-                Arrays.asList("http://overpass-api.de/api/", "http://overpass.osm.rambler.ru/cgi/"));
         private static final CollectionProperty OVERPASS_WIZARD_HISTORY = new CollectionProperty("download.overpass.wizard",
                 new ArrayList<String>());
 
@@ -196,14 +191,6 @@ public class OverpassDownloadAction extends JosmAction {
             gbc.ipady = 200;
             pnl.add(pane, gbc);
 
-            overpassServer = new HistoryComboBox();
-            overpassServer.getEditor().getEditorComponent().addFocusListener(disableActionsFocusListener);
-            pnl.add(new JLabel(tr("Overpass server: ")), GBC.std().insets(5, 5, 5, 5));
-            pnl.add(overpassServer, GBC.eol().fill(GBC.HORIZONTAL));
-        }
-
-        public String getOverpassServer() {
-            return overpassServer.getText();
         }
 
         public String getOverpassQuery() {
@@ -217,8 +204,6 @@ public class OverpassDownloadAction extends JosmAction {
         @Override
         public void restoreSettings() {
             super.restoreSettings();
-            overpassServer.setPossibleItems(OVERPASS_SERVER_HISTORY.get());
-            overpassServer.setText(OVERPASS_SERVER.get());
             overpassWizard.setPossibleItems(OVERPASS_WIZARD_HISTORY.get());
         }
 
@@ -226,8 +211,6 @@ public class OverpassDownloadAction extends JosmAction {
         public void rememberSettings() {
             super.rememberSettings();
             overpassWizard.addCurrentItemToHistory();
-            OVERPASS_SERVER.put(getOverpassServer());
-            OVERPASS_SERVER_HISTORY.put(overpassServer.getHistory());
             OVERPASS_WIZARD_HISTORY.put(overpassWizard.getHistory());
             OverpassQueryHistoryPopup.addToHistory(getOverpassQuery());
         }
diff --git a/src/org/openstreetmap/josm/actions/PasteTagsAction.java b/src/org/openstreetmap/josm/actions/PasteTagsAction.java
index 0e83829..87ede1e 100644
--- a/src/org/openstreetmap/josm/actions/PasteTagsAction.java
+++ b/src/org/openstreetmap/josm/actions/PasteTagsAction.java
@@ -58,6 +58,11 @@ public final class PasteTagsAction extends JosmAction {
         private final Collection<OsmPrimitive> target;
         private final List<Tag> tags = new ArrayList<>();
 
+        /**
+         * Constructs a new {@code TagPaster}.
+         * @param source source primitives
+         * @param target target primitives
+         */
         public TagPaster(Collection<PrimitiveData> source, Collection<OsmPrimitive> target) {
             this.source = source;
             this.target = target;
@@ -68,7 +73,7 @@ public final class PasteTagsAction extends JosmAction {
          * {@link OsmPrimitive}s of exactly one type
          * @return true if the source for tag pasting is heterogeneous
          */
-        protected boolean isHeteogeneousSource() {
+        protected boolean isHeterogeneousSource() {
             int count = 0;
             count = !getSourcePrimitivesByType(OsmPrimitiveType.NODE).isEmpty() ? count + 1 : count;
             count = !getSourcePrimitivesByType(OsmPrimitiveType.WAY).isEmpty() ? count + 1 : count;
@@ -229,9 +234,13 @@ public final class PasteTagsAction extends JosmAction {
             }
         }
 
+        /**
+         * Performs the paste operation.
+         * @return list of tags
+         */
         public List<Tag> execute() {
             tags.clear();
-            if (isHeteogeneousSource()) {
+            if (isHeterogeneousSource()) {
                 pasteFromHeterogeneousSource();
             } else {
                 pasteFromHomogeneousSource();
@@ -257,8 +266,12 @@ public final class PasteTagsAction extends JosmAction {
         }
     }
 
-    /** Paste tags from arbitrary text, not using JOSM buffer
+    /**
+     * Paste tags from arbitrary text, not using JOSM buffer
+     * @param selection selected primitives
+     * @param text text containing tags
      * @return true if action was successful
+     * @see TextTagParser#readTagsFromText
      */
     public static boolean pasteTagsFromText(Collection<OsmPrimitive> selection, String text) {
         Map<String, String> tags = TextTagParser.readTagsFromText(text);
@@ -277,7 +290,8 @@ public final class PasteTagsAction extends JosmAction {
         return !commands.isEmpty();
     }
 
-    /** Paste tags from JOSM buffer
+    /**
+     * Paste tags from JOSM buffer
      * @param selection objects that will have the tags
      * @return false if JOSM buffer was empty
      */
@@ -296,6 +310,7 @@ public final class PasteTagsAction extends JosmAction {
 
     /**
      * Create and execute SequenceCommand with descriptive title
+     * @param selection selected primitives
      * @param commands the commands to perform in a sequential command
      */
     private static void commitCommands(Collection<OsmPrimitive> selection, List<Command> commands) {
diff --git a/src/org/openstreetmap/josm/actions/PurgeAction.java b/src/org/openstreetmap/josm/actions/PurgeAction.java
index 3572064..86a38a1 100644
--- a/src/org/openstreetmap/josm/actions/PurgeAction.java
+++ b/src/org/openstreetmap/josm/actions/PurgeAction.java
@@ -25,6 +25,7 @@ import javax.swing.JButton;
 import javax.swing.JCheckBox;
 import javax.swing.JLabel;
 import javax.swing.JList;
+import javax.swing.JOptionPane;
 import javax.swing.JPanel;
 import javax.swing.JScrollPane;
 import javax.swing.JSeparator;
@@ -36,7 +37,7 @@ import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.data.osm.Relation;
 import org.openstreetmap.josm.data.osm.RelationMember;
 import org.openstreetmap.josm.data.osm.Way;
-import org.openstreetmap.josm.gui.ExtendedDialog;
+import org.openstreetmap.josm.gui.ConditionalOptionPaneUtil;
 import org.openstreetmap.josm.gui.OsmPrimitivRenderer;
 import org.openstreetmap.josm.gui.help.HelpUtil;
 import org.openstreetmap.josm.gui.layer.OsmDataLayer;
@@ -205,13 +206,10 @@ public class PurgeAction extends JosmAction {
         boolean clearUndoRedo = false;
 
         if (!GraphicsEnvironment.isHeadless()) {
-            ExtendedDialog confirmDlg = new ExtendedDialog(Main.parent, tr("Confirm Purging"),
-                    new String[] {tr("Purge"), tr("Cancel")});
-            confirmDlg.setContent(buildPanel(modified), false);
-            confirmDlg.setButtonIcons(new String[] {"ok", "cancel"});
-
-            int answer = confirmDlg.showDialog().getValue();
-            if (answer != 1)
+            final boolean answer = ConditionalOptionPaneUtil.showConfirmationDialog(
+                    "purge", Main.parent, buildPanel(modified), tr("Confirm Purging"),
+                    JOptionPane.OK_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE, JOptionPane.OK_OPTION);
+            if (!answer)
                 return;
 
             clearUndoRedo = cbClearUndoRedo.isSelected();
diff --git a/src/org/openstreetmap/josm/actions/RenameLayerAction.java b/src/org/openstreetmap/josm/actions/RenameLayerAction.java
index 0acfbba..b5bd308 100644
--- a/src/org/openstreetmap/josm/actions/RenameLayerAction.java
+++ b/src/org/openstreetmap/josm/actions/RenameLayerAction.java
@@ -31,8 +31,10 @@ public class RenameLayerAction extends AbstractAction {
     private final transient Layer layer;
 
     /**
+     * Constructs a new {@code RenameLayerAction}.
      * @param file The file of the original location of this layer.
      *      If null, no possibility to "rename the file as well" is provided.
+     * @param layer layer to rename
      */
     public RenameLayerAction(File file, Layer layer) {
         super(tr("Rename layer"), ImageProvider.get("dialogs", "edit"));
diff --git a/src/org/openstreetmap/josm/actions/RestartAction.java b/src/org/openstreetmap/josm/actions/RestartAction.java
index db81373..eb4a904 100644
--- a/src/org/openstreetmap/josm/actions/RestartAction.java
+++ b/src/org/openstreetmap/josm/actions/RestartAction.java
@@ -45,7 +45,9 @@ public class RestartAction extends JosmAction {
                 Shortcut.registerShortcut("file:restart", tr("File: {0}", tr("Restart")), KeyEvent.VK_J, Shortcut.ALT_CTRL_SHIFT), false);
         putValue("help", ht("/Action/Restart"));
         putValue("toolbar", "action/restart");
-        Main.toolbar.register(this);
+        if (Main.toolbar != null) {
+            Main.toolbar.register(this);
+        }
         setEnabled(isRestartSupported());
     }
 
diff --git a/src/org/openstreetmap/josm/actions/SaveActionBase.java b/src/org/openstreetmap/josm/actions/SaveActionBase.java
index 9d53955..474be51 100644
--- a/src/org/openstreetmap/josm/actions/SaveActionBase.java
+++ b/src/org/openstreetmap/josm/actions/SaveActionBase.java
@@ -35,9 +35,6 @@ public abstract class SaveActionBase extends DiskAccessAction {
         if (!isEnabled())
             return;
         boolean saved = doSave();
-        if (saved) {
-            addToFileOpenHistory(file);
-        }
     }
 
     public boolean doSave() {
@@ -105,6 +102,7 @@ public abstract class SaveActionBase extends DiskAccessAction {
             Main.error(e);
             return false;
         }
+        addToFileOpenHistory(file);
         return true;
     }
 
diff --git a/src/org/openstreetmap/josm/actions/SessionLoadAction.java b/src/org/openstreetmap/josm/actions/SessionLoadAction.java
index e377053..f244d0d 100644
--- a/src/org/openstreetmap/josm/actions/SessionLoadAction.java
+++ b/src/org/openstreetmap/josm/actions/SessionLoadAction.java
@@ -6,10 +6,11 @@ import static org.openstreetmap.josm.tools.I18n.tr;
 
 import java.awt.event.ActionEvent;
 import java.io.File;
-import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
 import java.net.URI;
+import java.nio.file.Files;
+import java.nio.file.StandardCopyOption;
 import java.util.Arrays;
 import java.util.List;
 
@@ -152,9 +153,7 @@ public class SessionLoadAction extends DiskAccessAction {
                         // Download and write entire joz file as a temp file on disk as we need random access later
                         file = File.createTempFile("session_", ".joz", Utils.getJosmTempDir());
                         tempFile = true;
-                        try (FileOutputStream out = new FileOutputStream(file)) {
-                            Utils.copyStream(is, out);
-                        }
+                        Files.copy(is, file.toPath(), StandardCopyOption.REPLACE_EXISTING);
                     }
                     reader.loadSession(file, zip, monitor);
                     layers = reader.getLayers();
@@ -163,9 +162,7 @@ public class SessionLoadAction extends DiskAccessAction {
                     viewport = reader.getViewport();
                 } finally {
                     if (tempFile) {
-                        if (!file.delete()) {
-                            file.deleteOnExit();
-                        }
+                        Utils.deleteFile(file);
                         file = null;
                     }
                 }
diff --git a/src/org/openstreetmap/josm/actions/SimplifyWayAction.java b/src/org/openstreetmap/josm/actions/SimplifyWayAction.java
index 22ff54a..731922d 100644
--- a/src/org/openstreetmap/josm/actions/SimplifyWayAction.java
+++ b/src/org/openstreetmap/josm/actions/SimplifyWayAction.java
@@ -26,6 +26,7 @@ import org.openstreetmap.josm.data.osm.DataSet;
 import org.openstreetmap.josm.data.osm.Node;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.data.osm.Way;
+import org.openstreetmap.josm.data.projection.Ellipsoid;
 import org.openstreetmap.josm.gui.HelpAwareOptionPane;
 import org.openstreetmap.josm.gui.HelpAwareOptionPane.ButtonSpec;
 import org.openstreetmap.josm.gui.Notification;
@@ -216,6 +217,7 @@ public class SimplifyWayAction extends JosmAction {
      * @param from the lower index
      * @param to the upper index
      * @param threshold the max error threshold
+     * @param simplifiedNodes list that will contain resulting nodes
      */
     protected void buildSimplifiedNodeList(List<Node> wnew, int from, int to, double threshold, List<Node> simplifiedNodes) {
 
@@ -227,7 +229,7 @@ public class SimplifyWayAction extends JosmAction {
         double xtemax = 0;
         for (int i = from + 1; i < to; i++) {
             Node n = wnew.get(i);
-            double xte = Math.abs(EARTH_RAD
+            double xte = Math.abs(Ellipsoid.WGS84.a
                     * xtd(fromN.getCoor().lat() * Math.PI / 180, fromN.getCoor().lon() * Math.PI / 180, toN.getCoor().lat() * Math.PI
                             / 180, toN.getCoor().lon() * Math.PI / 180, n.getCoor().lat() * Math.PI / 180, n.getCoor().lon() * Math.PI
                             / 180));
@@ -252,8 +254,6 @@ public class SimplifyWayAction extends JosmAction {
         }
     }
 
-    public static final double EARTH_RAD = 6378137.0;
-
     /* From Aviaton Formulary v1.3
      * http://williams.best.vwh.net/avform.htm
      */
diff --git a/src/org/openstreetmap/josm/actions/SplitWayAction.java b/src/org/openstreetmap/josm/actions/SplitWayAction.java
index 3b45773..e7ec67e 100644
--- a/src/org/openstreetmap/josm/actions/SplitWayAction.java
+++ b/src/org/openstreetmap/josm/actions/SplitWayAction.java
@@ -18,6 +18,7 @@ import java.util.Iterator;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.Set;
+import java.util.concurrent.atomic.AtomicInteger;
 
 import javax.swing.DefaultListCellRenderer;
 import javax.swing.JLabel;
@@ -54,7 +55,6 @@ import org.openstreetmap.josm.tools.Shortcut;
  * Ways are just split at the selected nodes.  The nodes remain in their
  * original order.  Selected nodes at the end of a way are ignored.
  */
-
 public class SplitWayAction extends JosmAction {
 
     /**
@@ -132,6 +132,12 @@ public class SplitWayAction extends JosmAction {
     @Override
     public void actionPerformed(ActionEvent e) {
 
+        if (SegmentToKeepSelectionDialog.DISPLAY_COUNT.get() > 0) {
+            new Notification(tr("Cannot split since another split operation is already in progress"))
+                    .setIcon(JOptionPane.WARNING_MESSAGE).show();
+            return;
+        }
+
         Collection<OsmPrimitive> selection = getCurrentDataSet().getSelected();
 
         List<Node> selectedNodes = OsmPrimitive.getFilteredList(selection, Node.class);
@@ -216,6 +222,7 @@ public class SplitWayAction extends JosmAction {
      * A dialog to query which way segment should reuse the history of the way to split.
      */
     static class SegmentToKeepSelectionDialog extends ExtendedDialog {
+        static final AtomicInteger DISPLAY_COUNT = new AtomicInteger();
         final Way selectedWay;
         final List<Way> newWays;
         final JList<Way> list;
@@ -238,6 +245,7 @@ public class SplitWayAction extends JosmAction {
             pane.add(new JLabel(getTitle()), GBC.eol().fill(GBC.HORIZONTAL));
             pane.add(list, GBC.eop().fill(GBC.HORIZONTAL));
             setContent(pane);
+            setDefaultCloseOperation(HIDE_ON_CLOSE);
         }
 
         private void configureList() {
@@ -283,9 +291,11 @@ public class SplitWayAction extends JosmAction {
         public void setVisible(boolean visible) {
             super.setVisible(visible);
             if (visible) {
+                DISPLAY_COUNT.incrementAndGet();
                 list.setSelectedValue(wayToKeep, true);
             } else {
                 setHighlightedWaySegments(Collections.<WaySegment>emptyList());
+                DISPLAY_COUNT.decrementAndGet();
             }
         }
 
@@ -319,6 +329,7 @@ public class SplitWayAction extends JosmAction {
 
         /**
          * Returns a strategy which selects the way chunk with the highest node count to keep.
+         * @return strategy which selects the way chunk with the highest node count to keep
          */
         public static Strategy keepLongestChunk() {
             return new Strategy() {
@@ -337,6 +348,7 @@ public class SplitWayAction extends JosmAction {
 
         /**
          * Returns a strategy which selects the first way chunk.
+         * @return strategy which selects the first way chunk
          */
         public static Strategy keepFirstChunk() {
             return new Strategy() {
@@ -348,7 +360,6 @@ public class SplitWayAction extends JosmAction {
         }
     }
 
-
     /**
      * Determine which ways to split.
      * @param selectedWays List of user selected ways.
diff --git a/src/org/openstreetmap/josm/actions/UnGlueAction.java b/src/org/openstreetmap/josm/actions/UnGlueAction.java
index 6a821a4..5b3d266 100644
--- a/src/org/openstreetmap/josm/actions/UnGlueAction.java
+++ b/src/org/openstreetmap/josm/actions/UnGlueAction.java
@@ -5,6 +5,7 @@ import static org.openstreetmap.josm.gui.help.HelpUtil.ht;
 import static org.openstreetmap.josm.tools.I18n.tr;
 import static org.openstreetmap.josm.tools.I18n.trn;
 
+import java.awt.GridBagLayout;
 import java.awt.event.ActionEvent;
 import java.awt.event.KeyEvent;
 import java.util.ArrayList;
@@ -17,8 +18,12 @@ import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
+import javax.swing.AbstractButton;
+import javax.swing.ButtonGroup;
+import javax.swing.JLabel;
 import javax.swing.JOptionPane;
 import javax.swing.JPanel;
+import javax.swing.JToggleButton;
 
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.command.AddCommand;
@@ -31,9 +36,15 @@ import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.data.osm.Relation;
 import org.openstreetmap.josm.data.osm.RelationMember;
 import org.openstreetmap.josm.data.osm.Way;
+import org.openstreetmap.josm.gui.ExtendedDialog;
 import org.openstreetmap.josm.gui.MapView;
 import org.openstreetmap.josm.gui.Notification;
+import org.openstreetmap.josm.tools.GBC;
+import org.openstreetmap.josm.tools.ImageProvider;
+import org.openstreetmap.josm.tools.Predicate;
 import org.openstreetmap.josm.tools.Shortcut;
+import org.openstreetmap.josm.tools.UserCancelException;
+import org.openstreetmap.josm.tools.Utils;
 
 /**
  * Duplicate nodes that are used by multiple ways.
@@ -71,7 +82,7 @@ public class UnGlueAction extends JosmAction {
 
         String errMsg = null;
         int errorTime = Notification.TIME_DEFAULT;
-        if (checkSelection(selection)) {
+        if (checkSelectionOneNodeAtMostOneWay(selection)) {
             if (!checkAndConfirmOutlyingUnglue()) {
                 // FIXME: Leaving action without clearing selectedNode, selectedWay, selectedNodes
                 return;
@@ -93,7 +104,7 @@ public class UnGlueAction extends JosmAction {
                 // (= copy tags to a new node)
                 if (!selfCrossing)
                     if (checkForUnglueNode(selection)) {
-                        unglueNode(e);
+                        unglueOneNodeAtMostOneWay(e);
                     } else {
                         errorTime = Notification.TIME_SHORT;
                         errMsg = tr("This node is not glued to anything else.");
@@ -102,7 +113,7 @@ public class UnGlueAction extends JosmAction {
                 // and then do the work.
                 unglueWays();
             }
-        } else if (checkSelection2(selection)) {
+        } else if (checkSelectionOneWayAnyNodes(selection)) {
             if (!checkAndConfirmOutlyingUnglue()) {
                 // FIXME: Leaving action without clearing selectedNode, selectedWay, selectedNodes
                 return;
@@ -129,7 +140,7 @@ public class UnGlueAction extends JosmAction {
             } else {
                 // and then do the work.
                 selectedNodes = tmpNodes;
-                unglueWays2();
+                unglueOneWayAnyNodes();
             }
         } else {
             errorTime = Notification.TIME_VERY_LONG;
@@ -162,18 +173,140 @@ public class UnGlueAction extends JosmAction {
     }
 
     /**
+     * Provides toggle buttons to allow the user choose the existing node, the new nodes, or all of them.
+     */
+    private static class ExistingBothNewChoice {
+        final AbstractButton oldNode = new JToggleButton(tr("Existing node"), ImageProvider.get("dialogs/conflict/tagkeeptheir"));
+        final AbstractButton bothNodes = new JToggleButton(tr("Both nodes"), ImageProvider.get("dialogs/conflict/tagundecide"));
+        final AbstractButton newNode = new JToggleButton(tr("New node"), ImageProvider.get("dialogs/conflict/tagkeepmine"));
+
+        ExistingBothNewChoice(final boolean preselectNew) {
+            final ButtonGroup tagsGroup = new ButtonGroup();
+            tagsGroup.add(oldNode);
+            tagsGroup.add(bothNodes);
+            tagsGroup.add(newNode);
+            tagsGroup.setSelected((preselectNew ? newNode : oldNode).getModel(), true);
+        }
+    }
+
+    /**
+     * A dialog allowing the user decide whether the tags/memberships of the existing node should afterwards be at
+     * the existing node, the new nodes, or all of them.
+     */
+    static final class PropertiesMembershipDialog extends ExtendedDialog {
+
+        final ExistingBothNewChoice tags;
+        final ExistingBothNewChoice memberships;
+
+        private PropertiesMembershipDialog(boolean preselectNew, boolean queryTags, boolean queryMemberships) {
+            super(Main.parent, tr("Tags / Memberships"), new String[]{tr("Unglue"), tr("Cancel")});
+            setButtonIcons(new String[]{"unglueways", "cancel"});
+
+            final JPanel content = new JPanel(new GridBagLayout());
+
+            if (queryTags) {
+                content.add(new JLabel(tr("Where should the tags of the node be put?")), GBC.std(1, 1).span(3).insets(0, 20, 0, 0));
+                tags = new ExistingBothNewChoice(preselectNew);
+                content.add(tags.oldNode, GBC.std(1, 2));
+                content.add(tags.bothNodes, GBC.std(2, 2));
+                content.add(tags.newNode, GBC.std(3, 2));
+            } else {
+                tags = null;
+            }
+
+            if (queryMemberships) {
+                content.add(new JLabel(tr("Where should the memberships of this node be put?")), GBC.std(1, 3).span(3).insets(0, 20, 0, 0));
+                memberships = new ExistingBothNewChoice(preselectNew);
+                content.add(memberships.oldNode, GBC.std(1, 4));
+                content.add(memberships.bothNodes, GBC.std(2, 4));
+                content.add(memberships.newNode, GBC.std(3, 4));
+            } else {
+                memberships = null;
+            }
+
+            setContent(content);
+            setResizable(false);
+        }
+
+        static PropertiesMembershipDialog showIfNecessary(Iterable<Node> selectedNodes, boolean preselectNew) throws UserCancelException {
+            final boolean tagged = isTagged(selectedNodes);
+            final boolean usedInRelations = isUsedInRelations(selectedNodes);
+            if (tagged || usedInRelations) {
+                final PropertiesMembershipDialog dialog = new PropertiesMembershipDialog(preselectNew, tagged, usedInRelations);
+                dialog.showDialog();
+                if (dialog.getValue() != 1) {
+                    throw new UserCancelException();
+                }
+                return dialog;
+            }
+            return null;
+        }
+
+        private static boolean isTagged(final Iterable<Node> existingNodes) {
+            return Utils.exists(existingNodes, new Predicate<Node>() {
+                @Override
+                public boolean evaluate(final Node selectedNode) {
+                    return selectedNode.hasKeys();
+                }
+            });
+        }
+
+        private static boolean isUsedInRelations(final Iterable<Node> existingNodes) {
+            return Utils.exists(existingNodes, new Predicate<Node>() {
+                @Override
+                public boolean evaluate(final Node selectedNode) {
+                    return Utils.exists(selectedNode.getReferrers(), OsmPrimitive.relationPredicate);
+                }
+            });
+        }
+
+        void update(final Node existingNode, final List<Node> newNodes, final Collection<Command> cmds) {
+            updateMemberships(existingNode, newNodes, cmds);
+            updateProperties(existingNode, newNodes, cmds);
+        }
+
+        private void updateProperties(final Node existingNode, final Iterable<Node> newNodes, final Collection<Command> cmds) {
+            if (tags != null && tags.newNode.isSelected()) {
+                final Node newSelectedNode = new Node(existingNode);
+                newSelectedNode.removeAll();
+                cmds.add(new ChangeCommand(existingNode, newSelectedNode));
+            } else if (tags != null && tags.oldNode.isSelected()) {
+                for (Node newNode : newNodes) {
+                    newNode.removeAll();
+                }
+            }
+        }
+
+        private void updateMemberships(final Node existingNode, final List<Node> newNodes, final Collection<Command> cmds) {
+            if (memberships != null && memberships.bothNodes.isSelected()) {
+                fixRelations(existingNode, cmds, newNodes, false);
+            } else if (memberships != null && memberships.newNode.isSelected()) {
+                fixRelations(existingNode, cmds, newNodes, true);
+            }
+        }
+    }
+
+    /**
      * Assumes there is one tagged Node stored in selectedNode that it will try to unglue.
      * (i.e. copy node and remove all tags from the old one. Relations will not be removed)
+     * @param e event that trigerred the action
      */
-    private void unglueNode(ActionEvent e) {
+    private void unglueOneNodeAtMostOneWay(ActionEvent e) {
         List<Command> cmds = new LinkedList<>();
 
-        Node c = new Node(selectedNode);
-        c.removeAll();
-        getCurrentDataSet().clearSelection(c);
-        cmds.add(new ChangeCommand(selectedNode, c));
+        final PropertiesMembershipDialog dialog;
+        try {
+            dialog = PropertiesMembershipDialog.showIfNecessary(Collections.singleton(selectedNode), true);
+        } catch (UserCancelException e1) {
+            return;
+        }
 
-        Node n = new Node(selectedNode, true);
+        final Node n = new Node(selectedNode, true);
+
+        cmds.add(new AddCommand(n));
+        if (dialog != null) {
+            dialog.update(selectedNode, Collections.singletonList(n), cmds);
+        }
 
         // If this wasn't called from menu, place it where the cursor is/was
         if (e.getSource() instanceof JPanel) {
@@ -181,10 +314,6 @@ public class UnGlueAction extends JosmAction {
             n.setCoor(mv.getLatLon(mv.lastMEvent.getX(), mv.lastMEvent.getY()));
         }
 
-        cmds.add(new AddCommand(n));
-
-        fixRelations(selectedNode, cmds, Collections.singletonList(n));
-
         Main.main.undoRedo.add(new SequenceCommand(tr("Unglued Node"), cmds));
         getCurrentDataSet().setSelected(n);
         Main.map.mapView.repaint();
@@ -216,17 +345,16 @@ public class UnGlueAction extends JosmAction {
      * Checks if the selection consists of something we can work with.
      * Checks only if the number and type of items selected looks good.
      *
-     * If this method returns "true", selectedNode and selectedWay will
-     * be set.
+     * If this method returns "true", selectedNode and selectedWay will be set.
      *
      * Returns true if either one node is selected or one node and one
      * way are selected and the node is part of the way.
      *
-     * The way will be put into the object variable "selectedWay", the
-     * node into "selectedNode".
+     * The way will be put into the object variable "selectedWay", the node into "selectedNode".
+     * @param selection selected primitives
      * @return true if either one node is selected or one node and one way are selected and the node is part of the way
      */
-    private boolean checkSelection(Collection<? extends OsmPrimitive> selection) {
+    private boolean checkSelectionOneNodeAtMostOneWay(Collection<? extends OsmPrimitive> selection) {
 
         int size = selection.size();
         if (size < 1 || size > 2)
@@ -254,15 +382,14 @@ public class UnGlueAction extends JosmAction {
      * Checks if the selection consists of something we can work with.
      * Checks only if the number and type of items selected looks good.
      *
-     * Returns true if one way and any number of nodes that are part of
-     * that way are selected. Note: "any" can be none, then all nodes of
-     * the way are used.
+     * Returns true if one way and any number of nodes that are part of that way are selected.
+     * Note: "any" can be none, then all nodes of the way are used.
      *
-     * The way will be put into the object variable "selectedWay", the
-     * nodes into "selectedNodes".
+     * The way will be put into the object variable "selectedWay", the nodes into "selectedNodes".
+     * @param selection selected primitives
      * @return true if one way and any number of nodes that are part of that way are selected
      */
-    private boolean checkSelection2(Collection<? extends OsmPrimitive> selection) {
+    private boolean checkSelectionOneWayAnyNodes(Collection<? extends OsmPrimitive> selection) {
         if (selection.isEmpty())
             return false;
 
@@ -297,13 +424,17 @@ public class UnGlueAction extends JosmAction {
     /**
      * dupe the given node of the given way
      *
-     * assume that OrginalNode is in the way
+     * assume that originalNode is in the way
      * <ul>
      * <li>the new node will be put into the parameter newNodes.</li>
      * <li>the add-node command will be put into the parameter cmds.</li>
      * <li>the changed way will be returned and must be put into cmds by the caller!</li>
      * </ul>
-     * @return new way
+     * @param originalNode original node to duplicate
+     * @param w parent way
+     * @param cmds List of commands that will contain the new "add node" command
+     * @param newNodes List of nodes that will contain the new node
+     * @return new way The modified way. Change command mus be handled by the caller
      */
     private static Way modifyWay(Node originalNode, Way w, List<Command> cmds, List<Node> newNodes) {
         // clone the node for the way
@@ -326,8 +457,12 @@ public class UnGlueAction extends JosmAction {
 
     /**
      * put all newNodes into the same relation(s) that originalNode is in
+     * @param originalNode original node to duplicate
+     * @param cmds List of commands that will contain the new "change relation" commands
+     * @param newNodes List of nodes that contain the new node
+     * @param removeOldMember whether the membership of the "old node" should be removed
      */
-    private void fixRelations(Node originalNode, List<Command> cmds, List<Node> newNodes) {
+    private static void fixRelations(Node originalNode, Collection<Command> cmds, List<Node> newNodes, boolean removeOldMember) {
         // modify all relations containing the node
         for (Relation r : OsmPrimitive.getFilteredList(originalNode.getReferrers(), Relation.class)) {
             if (r.isDeleted()) {
@@ -342,14 +477,21 @@ public class UnGlueAction extends JosmAction {
                         newRel = new Relation(r);
                         rolesToReAdd = new HashMap<>();
                     }
-                    rolesToReAdd.put(rm.getRole(), i);
+                    if (rolesToReAdd != null) {
+                        rolesToReAdd.put(rm.getRole(), i);
+                    }
                 }
                 i++;
             }
             if (newRel != null) {
-                for (Node n : newNodes) {
+                if (rolesToReAdd != null) {
                     for (Map.Entry<String, Integer> role : rolesToReAdd.entrySet()) {
-                        newRel.addMember(role.getValue() + 1, new RelationMember(role.getKey(), n));
+                        for (Node n : newNodes) {
+                            newRel.addMember(role.getValue() + 1, new RelationMember(role.getKey(), n));
+                        }
+                        if (removeOldMember) {
+                            newRel.removeMember(role.getValue());
+                        }
                     }
                 }
                 cmds.add(new ChangeCommand(r, newRel));
@@ -366,6 +508,13 @@ public class UnGlueAction extends JosmAction {
         List<Command> cmds = new LinkedList<>();
         List<Node> newNodes = new LinkedList<>();
 
+        final PropertiesMembershipDialog dialog;
+        try {
+            dialog = PropertiesMembershipDialog.showIfNecessary(Collections.singleton(selectedNode), false);
+        } catch (UserCancelException e) {
+            return;
+        }
+
         if (selectedWay == null) {
             Way wayWithSelectedNode = null;
             LinkedList<Way> parentWays = new LinkedList<>();
@@ -389,7 +538,10 @@ public class UnGlueAction extends JosmAction {
             cmds.add(new ChangeCommand(selectedWay, modifyWay(selectedNode, selectedWay, cmds, newNodes)));
         }
 
-        fixRelations(selectedNode, cmds, newNodes);
+        if (dialog != null) {
+            dialog.update(selectedNode, newNodes, cmds);
+        }
+
         execCommands(cmds, newNodes);
     }
 
@@ -446,25 +598,41 @@ public class UnGlueAction extends JosmAction {
             return false;
         }
         cmds.add(new ChangeNodesCommand(way, newNodes));
-        // Update relation
-        fixRelations(selectedNode, cmds, addNodes);
-        execCommands(cmds, addNodes);
-        return true;
-     }
+        try {
+            final PropertiesMembershipDialog dialog = PropertiesMembershipDialog.showIfNecessary(Collections.singleton(selectedNode), false);
+            if (dialog != null) {
+                dialog.update(selectedNode, addNodes, cmds);
+            }
+            execCommands(cmds, addNodes);
+            return true;
+        } catch (UserCancelException ignore) {
+            Main.debug(ignore.getMessage());
+        }
+        return false;
+    }
 
     /**
      * dupe all nodes that are selected, and put the copies on the selected way
      *
      */
-    private void unglueWays2() {
+    private void unglueOneWayAnyNodes() {
         List<Command> cmds = new LinkedList<>();
         List<Node> allNewNodes = new LinkedList<>();
         Way tmpWay = selectedWay;
 
+        final PropertiesMembershipDialog dialog;
+        try {
+            dialog = PropertiesMembershipDialog.showIfNecessary(selectedNodes, false);
+        } catch (UserCancelException e) {
+            return;
+        }
+
         for (Node n : selectedNodes) {
             List<Node> newNodes = new LinkedList<>();
             tmpWay = modifyWay(n, tmpWay, cmds, newNodes);
-            fixRelations(n, cmds, newNodes);
+            if (dialog != null) {
+                dialog.update(n, newNodes, cmds);
+            }
             allNewNodes.addAll(newNodes);
         }
         cmds.add(new ChangeCommand(selectedWay, tmpWay)); // only one changeCommand for a way, else garbage will happen
diff --git a/src/org/openstreetmap/josm/actions/UpdateSelectionAction.java b/src/org/openstreetmap/josm/actions/UpdateSelectionAction.java
index 248aad9..c803b7c 100644
--- a/src/org/openstreetmap/josm/actions/UpdateSelectionAction.java
+++ b/src/org/openstreetmap/josm/actions/UpdateSelectionAction.java
@@ -38,7 +38,7 @@ public class UpdateSelectionAction extends JosmAction {
      * {@link OsmPrimitiveType#WAY WAY}, {@link OsmPrimitiveType#RELATION RELATION}
      */
     public static void handlePrimitiveGoneException(long id, OsmPrimitiveType type) {
-        MultiFetchServerObjectReader reader = new MultiFetchServerObjectReader();
+        MultiFetchServerObjectReader reader = MultiFetchServerObjectReader.create();
         reader.append(getCurrentDataSet(), id, type);
         try {
             DataSet ds = reader.parseOsm(NullProgressMonitor.INSTANCE);
diff --git a/src/org/openstreetmap/josm/actions/downloadtasks/DownloadReferrersTask.java b/src/org/openstreetmap/josm/actions/downloadtasks/DownloadReferrersTask.java
index deca8fd..d305bd6 100644
--- a/src/org/openstreetmap/josm/actions/downloadtasks/DownloadReferrersTask.java
+++ b/src/org/openstreetmap/josm/actions/downloadtasks/DownloadReferrersTask.java
@@ -219,7 +219,7 @@ public class DownloadReferrersTask extends PleaseWaitRunnable {
             // Don't retrieve any nodes we've already grabbed
             nodes.removeAll(targetLayer.data.getNodes());
             if (!nodes.isEmpty()) {
-                reader = new MultiFetchServerObjectReader();
+                reader = MultiFetchServerObjectReader.create();
                 ((MultiFetchServerObjectReader) reader).append(nodes);
                 DataSet wayNodes = reader.parseOsm(progressMonitor.createSubTaskMonitor(1, false));
                 synchronized (this) { // avoid race condition in cancel()
diff --git a/src/org/openstreetmap/josm/actions/downloadtasks/DownloadTask.java b/src/org/openstreetmap/josm/actions/downloadtasks/DownloadTask.java
index d391735..e6ed30e 100644
--- a/src/org/openstreetmap/josm/actions/downloadtasks/DownloadTask.java
+++ b/src/org/openstreetmap/josm/actions/downloadtasks/DownloadTask.java
@@ -124,7 +124,7 @@ public interface DownloadTask {
      * Replies the HTML-formatted confirmation message to be shown to user when the given URL needs to be confirmed before loading.
      * @param url The URL to be confirmed
      * @return The HTML-formatted confirmation message to be shown to user
-     * @since
+     * @since 5691
      */
     String getConfirmationMessage(URL url);
 }
diff --git a/src/org/openstreetmap/josm/actions/downloadtasks/DownloadTaskList.java b/src/org/openstreetmap/josm/actions/downloadtasks/DownloadTaskList.java
index 25f9d2c..4b9beff 100644
--- a/src/org/openstreetmap/josm/actions/downloadtasks/DownloadTaskList.java
+++ b/src/org/openstreetmap/josm/actions/downloadtasks/DownloadTaskList.java
@@ -119,8 +119,8 @@ public class DownloadTaskList {
     }
 
     /**
-     * Replies the set of ids of all complete, non-new primitives (i.e. those with !
-     * primitive.incomplete)
+     * Replies the set of ids of all complete, non-new primitives (i.e. those with !primitive.incomplete)
+     * @param ds data set
      *
      * @return the set of ids of all complete, non-new primitives
      */
@@ -284,7 +284,7 @@ public class DownloadTaskList {
             //
             for (DownloadTask task : tasks) {
                 if (task instanceof AbstractDownloadTask) {
-                    AbstractDownloadTask absTask = (AbstractDownloadTask) task;
+                    AbstractDownloadTask<?> absTask = (AbstractDownloadTask<?>) task;
                     if (absTask.isCanceled() || absTask.isFailed())
                         return;
                 }
diff --git a/src/org/openstreetmap/josm/actions/mapmode/DeleteAction.java b/src/org/openstreetmap/josm/actions/mapmode/DeleteAction.java
index 53962b0..5add7d1 100644
--- a/src/org/openstreetmap/josm/actions/mapmode/DeleteAction.java
+++ b/src/org/openstreetmap/josm/actions/mapmode/DeleteAction.java
@@ -255,6 +255,8 @@ public class DeleteAction extends MapMode implements ModifierListener {
      * mouse is not moved and only modifier keys are pressed, no mouse event
      * occurs. We can use AWTEvent to catch those but still lack a proper
      * mouseevent. Instead we copy the previous event and only update the modifiers.
+     * @param e mouse event
+     * @param modifiers mouse modifiers
      */
     private void giveUserFeedback(MouseEvent e, int modifiers) {
         updateCursor(e, modifiers);
@@ -265,6 +267,7 @@ public class DeleteAction extends MapMode implements ModifierListener {
      * Gives the user feedback for the action he/she is about to do. Currently
      * calls the cursor and target highlighting routines. Extracts modifiers
      * from mouse event.
+     * @param e mouse event
      */
     private void giveUserFeedback(MouseEvent e) {
         giveUserFeedback(e, e.getModifiers());
diff --git a/src/org/openstreetmap/josm/actions/mapmode/DrawAction.java b/src/org/openstreetmap/josm/actions/mapmode/DrawAction.java
index 572c53a..175212f 100644
--- a/src/org/openstreetmap/josm/actions/mapmode/DrawAction.java
+++ b/src/org/openstreetmap/josm/actions/mapmode/DrawAction.java
@@ -893,8 +893,10 @@ public class DrawAction extends MapMode implements MapViewPaintable, SelectionCh
     }
 
     /**
-     * if one of the ends of @param way is given @param node ,
+     * if one of the ends of {@code way} is given {@code  node},
      * then set  currentBaseNode = node and previousNode = adjacent node of way
+     * @param way way to continue
+     * @param node starting node
      */
     private void continueWayFromNode(Way way, Node node) {
         int n = way.getNodesCount();
@@ -925,6 +927,7 @@ public class DrawAction extends MapMode implements MapViewPaintable, SelectionCh
     }
 
     /**
+     * @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 d6bcb11..7752184 100644
--- a/src/org/openstreetmap/josm/actions/mapmode/ExtrudeAction.java
+++ b/src/org/openstreetmap/josm/actions/mapmode/ExtrudeAction.java
@@ -908,6 +908,7 @@ public class ExtrudeAction extends MapMode implements MapViewPaintable, KeyPress
      * Calculate newN1en, newN2en best suitable for given mouse coordinates
      * For dual align, calculates positions of new nodes, aligning them to neighboring segments.
      * Elsewhere, just adds the vetor returned by calculateBestMovement to {@link #initialN1en},  {@link #initialN2en}.
+     * @param mouseEn mouse coordinates
      * @return best movement vector
      */
     private EastNorth calculateBestMovementAndNewNodes(EastNorth mouseEn) {
@@ -1108,8 +1109,12 @@ public class ExtrudeAction extends MapMode implements MapViewPaintable, KeyPress
     }
 
     /**
-     * Determines if from1-to1 and from2-to2 vertors directions are opposite
-     * @return true if from1-to1 and from2-to2 vertors directions are opposite
+     * Determines if from1-to1 and from2-to2 vectors directions are opposite
+     * @param from1 vector1 start
+     * @param to1 vector1 end
+     * @param from2 vector2 start
+     * @param to2 vector2 end
+     * @return true if from1-to1 and from2-to2 vectors directions are opposite
      */
     private static boolean isOppositeDirection(EastNorth from1, EastNorth to1, EastNorth from2, EastNorth to2) {
         return (from1.getX()-to1.getX())*(from2.getX()-to2.getX())
diff --git a/src/org/openstreetmap/josm/actions/mapmode/MapMode.java b/src/org/openstreetmap/josm/actions/mapmode/MapMode.java
index 77141fe..ba5d48a 100644
--- a/src/org/openstreetmap/josm/actions/mapmode/MapMode.java
+++ b/src/org/openstreetmap/josm/actions/mapmode/MapMode.java
@@ -17,8 +17,7 @@ import org.openstreetmap.josm.tools.Shortcut;
 
 /**
  * A class implementing MapMode is able to be selected as an mode for map editing.
- * As example scrolling the map is a MapMode, connecting Nodes to new Ways
- * is another.
+ * As example scrolling the map is a MapMode, connecting Nodes to new Ways is another.
  *
  * MapModes should register/deregister all necessary listeners on the map's view control.
  */
@@ -29,8 +28,13 @@ public abstract class MapMode extends JosmAction implements MouseListener, Mouse
     protected boolean shift;
 
     /**
-     * Constructor for mapmodes without an menu
+     * Constructor for mapmodes without a menu
+     * @param name the action's text
+     * @param iconName icon filename in {@code mapmode} directory
+     * @param tooltip  a longer description of the action that will be displayed in the tooltip.
+     * @param shortcut a ready-created shortcut object or null if you don't want a shortcut.
      * @param mapFrame unused but kept for plugin compatibility. Can be {@code null}
+     * @param cursor cursor displayed when map mode is active
      */
     public MapMode(String name, String iconName, String tooltip, Shortcut shortcut, MapFrame mapFrame, Cursor cursor) {
         super(name, "mapmode/"+iconName, tooltip, shortcut, false);
@@ -39,8 +43,12 @@ public abstract class MapMode extends JosmAction implements MouseListener, Mouse
     }
 
     /**
-     * Constructor for mapmodes with an menu (no shortcut will be registered)
+     * Constructor for mapmodes with a menu (no shortcut will be registered)
+     * @param name the action's text
+     * @param iconName icon filename in {@code mapmode} directory
+     * @param tooltip  a longer description of the action that will be displayed in the tooltip.
      * @param mapFrame unused but kept for plugin compatibility. Can be {@code null}
+     * @param cursor cursor displayed when map mode is active
      */
     public MapMode(String name, String iconName, String tooltip, MapFrame mapFrame, Cursor cursor) {
         putValue(NAME, name);
diff --git a/src/org/openstreetmap/josm/actions/mapmode/SelectAction.java b/src/org/openstreetmap/josm/actions/mapmode/SelectAction.java
index c2c4551..492079b 100644
--- a/src/org/openstreetmap/josm/actions/mapmode/SelectAction.java
+++ b/src/org/openstreetmap/josm/actions/mapmode/SelectAction.java
@@ -886,6 +886,7 @@ public class SelectAction extends MapMode implements ModifierListener, KeyPressR
      * Merges the selected nodes to the one closest to the given mouse position if the control
      * key is pressed. If there is no such node, no action will be done and no error will be
      * reported. If there is, it will execute the merge and add it to the undo buffer.
+     * @param p mouse position
      */
     private void mergePrims(Point p) {
         Collection<Node> selNodes = getCurrentDataSet().getSelectedNodes();
@@ -934,6 +935,7 @@ public class SelectAction extends MapMode implements ModifierListener, KeyPressR
     /**
      * Tries to find a node to merge to when in move-merge mode for the current mouse
      * position. Either returns the node or null, if no suitable one is nearby.
+     * @param p mouse position
      * @return node to merge to, or null
      */
     private Node findNodeToMergeTo(Point p) {
@@ -1260,7 +1262,10 @@ public class SelectAction extends MapMode implements ModifierListener, KeyPressR
     }
 
     /**
-     * @return o as collection of o's type.
+     * Returns {@code o} as collection of {@code o}'s type.
+     * @param <T> object type
+     * @param o any object
+     * @return {@code o} as collection of {@code o}'s type.
      */
     protected static <T> Collection<T> asColl(T o) {
         if (o == null)
diff --git a/src/org/openstreetmap/josm/command/MoveCommand.java b/src/org/openstreetmap/josm/command/MoveCommand.java
index cab3073..576a29a 100644
--- a/src/org/openstreetmap/josm/command/MoveCommand.java
+++ b/src/org/openstreetmap/josm/command/MoveCommand.java
@@ -138,13 +138,20 @@ public class MoveCommand extends Command {
         this.y += y;
     }
 
+    /**
+     * Move again to the specified coordinates.
+     * @param x X coordinate
+     * @param y Y coordinate
+     * @see #moveAgain
+     */
     public void moveAgainTo(double x, double y) {
         moveAgain(x - this.x, y - this.y);
     }
 
     /**
-     * Change the displacement vector to have endpoint @param currentEN
-     * starting point is  startEN
+     * Change the displacement vector to have endpoint {@code currentEN}.
+     * starting point is startEN
+     * @param currentEN the new endpoint
      */
     public void applyVectorTo(EastNorth currentEN) {
         if (startEN == null)
diff --git a/src/org/openstreetmap/josm/command/PurgeCommand.java b/src/org/openstreetmap/josm/command/PurgeCommand.java
index 6c6cc90..2e967b8 100644
--- a/src/org/openstreetmap/josm/command/PurgeCommand.java
+++ b/src/org/openstreetmap/josm/command/PurgeCommand.java
@@ -50,6 +50,9 @@ public class PurgeCommand extends Command {
      *      have all its referrers in toPurge.
      *  - Each element of makeIncomplete must not be new and must have only
      *      referrers that are either a relation or included in toPurge.
+     * @param layer OSM data layer
+     * @param toPurge primitives to purge
+     * @param makeIncomplete primitives to make incomplete
      */
     public PurgeCommand(OsmDataLayer layer, Collection<OsmPrimitive> toPurge, Collection<OsmPrimitive> makeIncomplete) {
         super(layer);
@@ -141,6 +144,7 @@ public class PurgeCommand extends Command {
     /**
      * Sorts a collection of primitives such that for each object
      * its referrers come later in the sorted collection.
+     * @param sel collection of primitives to sort
      * @return sorted list
      */
     public static List<OsmPrimitive> topoSort(Collection<OsmPrimitive> sel) {
diff --git a/src/org/openstreetmap/josm/command/RotateCommand.java b/src/org/openstreetmap/josm/command/RotateCommand.java
index 96eb822..3570c23 100644
--- a/src/org/openstreetmap/josm/command/RotateCommand.java
+++ b/src/org/openstreetmap/josm/command/RotateCommand.java
@@ -34,6 +34,8 @@ public class RotateCommand extends TransformNodesCommand {
     /**
      * Creates a RotateCommand.
      * Assign the initial object set, compute pivot point and inital rotation angle.
+     * @param objects objects to fetch nodes from
+     * @param currentEN cuurent eats/north
      */
     public RotateCommand(Collection<OsmPrimitive> objects, EastNorth currentEN) {
         super(objects);
@@ -47,6 +49,7 @@ public class RotateCommand extends TransformNodesCommand {
 
     /**
      * Get angle between the horizontal axis and the line formed by the pivot and given point.
+     * @param currentEN cuurent eats/north
      * @return angle between the horizontal axis and the line formed by the pivot and given point
      **/
     protected final double getAngle(EastNorth currentEN) {
diff --git a/src/org/openstreetmap/josm/command/ScaleCommand.java b/src/org/openstreetmap/josm/command/ScaleCommand.java
index 5c2847d..7457161 100644
--- a/src/org/openstreetmap/josm/command/ScaleCommand.java
+++ b/src/org/openstreetmap/josm/command/ScaleCommand.java
@@ -30,6 +30,8 @@ public class ScaleCommand extends TransformNodesCommand {
      * Assign the initial object set, compute pivot point.
      * Computation of pivot point is done by the same rules that are used in
      * the "align nodes in circle" action.
+     * @param objects objects to fetch nodes from
+     * @param currentEN cuurent eats/north
      */
     public ScaleCommand(Collection<OsmPrimitive> objects, EastNorth currentEN) {
         super(objects);
diff --git a/src/org/openstreetmap/josm/command/TransformNodesCommand.java b/src/org/openstreetmap/josm/command/TransformNodesCommand.java
index 831dd02..c30abba 100644
--- a/src/org/openstreetmap/josm/command/TransformNodesCommand.java
+++ b/src/org/openstreetmap/josm/command/TransformNodesCommand.java
@@ -45,6 +45,7 @@ public abstract class TransformNodesCommand extends Command {
     /**
      * Creates a TransformNodesObject.
      * Find out the impacted nodes and store their initial state.
+     * @param objects objects to fetch nodes from
      */
     public TransformNodesCommand(Collection<OsmPrimitive> objects) {
         this.nodes = AllNodesVisitor.getAllNodes(objects);
diff --git a/src/org/openstreetmap/josm/data/AutosaveTask.java b/src/org/openstreetmap/josm/data/AutosaveTask.java
index 040b7b7..e0fa1b7 100644
--- a/src/org/openstreetmap/josm/data/AutosaveTask.java
+++ b/src/org/openstreetmap/josm/data/AutosaveTask.java
@@ -1,6 +1,7 @@
 // License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.data;
 
+import static org.openstreetmap.josm.tools.I18n.marktr;
 import static org.openstreetmap.josm.tools.I18n.tr;
 
 import java.io.BufferedReader;
@@ -39,6 +40,7 @@ import org.openstreetmap.josm.gui.layer.OsmDataLayer;
 import org.openstreetmap.josm.gui.util.GuiHelper;
 import org.openstreetmap.josm.io.OsmExporter;
 import org.openstreetmap.josm.io.OsmImporter;
+import org.openstreetmap.josm.tools.Utils;
 
 /**
  * Saves data layers periodically so they can be recovered in case of a crash.
@@ -193,13 +195,8 @@ public class AutosaveTask extends TimerTask implements LayerChangeListener, List
         }
         while (info.backupFiles.size() > PROP_FILES_PER_LAYER.get()) {
             File oldFile = info.backupFiles.remove();
-            if (!oldFile.delete()) {
-                Main.warn(tr("Unable to delete old backup file {0}", oldFile.getAbsolutePath()));
-            } else {
-                File pidFile = getPidFile(oldFile);
-                if (!pidFile.delete()) {
-                    Main.warn(tr("Unable to delete old backup file {0}", pidFile.getAbsolutePath()));
-                }
+            if (Utils.deleteFile(oldFile, marktr("Unable to delete old backup file {0}"))) {
+                Utils.deleteFile(getPidFile(oldFile), marktr("Unable to delete old backup file {0}"));
             }
         }
     }
@@ -272,8 +269,8 @@ public class AutosaveTask extends TimerTask implements LayerChangeListener, List
                             moveToDeletedLayersFolder(lastFile);
                         }
                         for (File file: info.backupFiles) {
-                            if (file.delete()) {
-                                getPidFile(file).delete();
+                            if (Utils.deleteFile(file)) {
+                                Utils.deleteFile(getPidFile(file));
                             }
                         }
 
@@ -368,20 +365,16 @@ public class AutosaveTask extends TimerTask implements LayerChangeListener, List
 
         if (backupFile.exists()) {
             deletedLayers.remove(backupFile);
-            if (!backupFile.delete()) {
-                Main.warn(String.format("Could not delete old backup file %s", backupFile));
-            }
+            Utils.deleteFile(backupFile, marktr("Unable to delete old backup file {0}"));
         }
         if (f.renameTo(backupFile)) {
             deletedLayers.add(backupFile);
-            pidFile.delete();
+            Utils.deleteFile(pidFile);
         } else {
             Main.warn(String.format("Could not move autosaved file %s to %s folder", f.getName(), deletedLayersDir.getName()));
             // we cannot move to deleted folder, so just try to delete it directly
-            if (!f.delete()) {
-                Main.warn(String.format("Could not delete backup file %s", f));
-            } else if (!pidFile.delete()) {
-                Main.warn(String.format("Could not delete PID file %s", pidFile));
+            if (Utils.deleteFile(f, marktr("Unable to delete backup file {0}"))) {
+                Utils.deleteFile(pidFile, marktr("Unable to delete PID file {0}"));
             }
         }
         while (deletedLayers.size() > PROP_DELETED_LAYERS.get()) {
@@ -389,9 +382,7 @@ public class AutosaveTask extends TimerTask implements LayerChangeListener, List
             if (next == null) {
                 break;
             }
-            if (!next.delete()) {
-                Main.warn(String.format("Could not delete archived backup file %s", next));
-            }
+            Utils.deleteFile(next, marktr("Unable to delete archived backup file {0}"));
         }
     }
 
diff --git a/src/org/openstreetmap/josm/data/Bounds.java b/src/org/openstreetmap/josm/data/Bounds.java
index 88ae881..7221189 100644
--- a/src/org/openstreetmap/josm/data/Bounds.java
+++ b/src/org/openstreetmap/josm/data/Bounds.java
@@ -78,6 +78,8 @@ public class Bounds {
 
     /**
      * Construct bounds out of two points. Coords will be rounded.
+     * @param min min lat/lon
+     * @param max max lat/lon
      */
     public Bounds(LatLon min, LatLon max) {
         this(min.lat(), min.lon(), max.lat(), max.lon());
@@ -87,6 +89,10 @@ public class Bounds {
         this(min.lat(), min.lon(), max.lat(), max.lon(), roundToOsmPrecision);
     }
 
+    /**
+     * Constructs bounds out a single point.
+     * @param b lat/lon
+     */
     public Bounds(LatLon b) {
         this(b, true);
     }
@@ -359,6 +365,8 @@ public class Bounds {
     /**
      * The two bounds intersect? Compared to java Shape.intersects, if does not use
      * the interior but the closure. (">=" instead of ">")
+     * @param b other bounds
+     * @return {@code true} if the two bounds intersect
      */
     public boolean intersects(Bounds b) {
         if (b.maxLat < minLat || b.minLat > maxLat)
diff --git a/src/org/openstreetmap/josm/data/CustomConfigurator.java b/src/org/openstreetmap/josm/data/CustomConfigurator.java
index 74bb588..2513684 100644
--- a/src/org/openstreetmap/josm/data/CustomConfigurator.java
+++ b/src/org/openstreetmap/josm/data/CustomConfigurator.java
@@ -313,10 +313,8 @@ public final class CustomConfigurator {
                 }
             }
         }
-        try {
-            f.delete();
-        } catch (Exception e) {
-            log("Warning: Can not delete file "+f.getPath()+": "+e.getMessage());
+        if (!Utils.deleteFile(f)) {
+            log("Warning: Can not delete file "+f.getPath());
         }
     }
 
@@ -701,10 +699,11 @@ public final class CustomConfigurator {
 
         /**
          * substitute ${expression} = expression evaluated by JavaScript
+         * @param s string
+         * @return evaluation result
          */
         private String evalVars(String s) {
-            Pattern p = Pattern.compile("\\$\\{([^\\}]*)\\}");
-            Matcher mr =  p.matcher(s);
+            Matcher mr = Pattern.compile("\\$\\{([^\\}]*)\\}").matcher(s);
             StringBuffer sb = new StringBuffer();
             while (mr.find()) {
                 try {
@@ -809,8 +808,10 @@ public final class CustomConfigurator {
         }
 
         /**
-        * Delete items from @param mainpref collections that match items from @param fragment collections
-        */
+         * Delete items from {@code mainpref} collections that match items from {@code fragment} collections.
+         * @param fragment preferences
+         * @param mainpref main preferences
+         */
         private static void deletePreferenceValues(Preferences fragment, Preferences mainpref) {
 
             for (Entry<String, Setting<?>> entry : fragment.settingsMap.entrySet()) {
diff --git a/src/org/openstreetmap/josm/data/Preferences.java b/src/org/openstreetmap/josm/data/Preferences.java
index e87c335..0ddaa15 100644
--- a/src/org/openstreetmap/josm/data/Preferences.java
+++ b/src/org/openstreetmap/josm/data/Preferences.java
@@ -1,6 +1,7 @@
 // License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.data;
 
+import static org.openstreetmap.josm.tools.I18n.marktr;
 import static org.openstreetmap.josm.tools.I18n.tr;
 
 import java.awt.Color;
@@ -149,6 +150,12 @@ public class Preferences {
     protected final SortedMap<String, String> colornames = new TreeMap<>();
 
     /**
+     * Indicates whether {@link #init(boolean)} completed successfully.
+     * Used to decide whether to write backup preference file in {@link #save()}
+     */
+    protected boolean initSuccessful = false;
+
+    /**
      * Interface for a preference value.
      *
      * Implementations must provide a proper <code>equals</code> method.
@@ -821,7 +828,7 @@ public class Preferences {
      * @param key the unique identifier for the setting
      * @param value the value of the setting. Can be null or "" which both removes
      *  the key-value entry.
-     * @return true, if something has changed (i.e. value is different than before)
+     * @return {@code true}, if something has changed (i.e. value is different than before)
      */
     public boolean put(final String key, String value) {
         if (value != null && value.isEmpty()) {
@@ -860,7 +867,7 @@ public class Preferences {
         File backupFile = new File(prefFile + "_backup");
 
         // Backup old preferences if there are old preferences
-        if (prefFile.exists()) {
+        if (prefFile.exists() && prefFile.length() > 0 && initSuccessful) {
             Utils.copyFile(prefFile, backupFile);
         }
 
@@ -871,9 +878,7 @@ public class Preferences {
 
         File tmpFile = new File(prefFile + "_tmp");
         Utils.copyFile(tmpFile, prefFile);
-        if (!tmpFile.delete()) {
-            Main.warn(tr("Unable to delete temporary file {0}", tmpFile.getAbsolutePath()));
-        }
+        Utils.deleteFile(tmpFile, marktr("Unable to delete temporary file {0}"));
 
         setCorrectPermissions(prefFile);
         setCorrectPermissions(backupFile);
@@ -921,6 +926,7 @@ public class Preferences {
      * @param reset if {@code true}, current settings file is replaced by the default one
      */
     public void init(boolean reset) {
+        initSuccessful = false;
         // get the preferences.
         File prefDir = getPreferencesDirectory();
         if (prefDir.exists()) {
@@ -958,6 +964,8 @@ public class Preferences {
                 resetToDefault();
                 save();
             } else if (reset) {
+                File backupFile = new File(prefDir, "preferences.xml.bak");
+                Main.platform.rename(preferenceFile, backupFile);
                 Main.warn(tr("Replacing existing preference file ''{0}'' with default preference file.", preferenceFile.getAbsoluteFile()));
                 resetToDefault();
                 save();
@@ -975,6 +983,7 @@ public class Preferences {
         }
         try {
             load();
+            initSuccessful = true;
         } catch (Exception e) {
             Main.error(e);
             File backupFile = new File(prefDir, "preferences.xml.bak");
@@ -1177,7 +1186,7 @@ public class Preferences {
      * @param key the unique identifier for the setting
      * @param setting the value of the setting. In case it is null, the key-value
      * entry will be removed.
-     * @return true, if something has changed (i.e. value is different than before)
+     * @return {@code true}, if something has changed (i.e. value is different than before)
      */
     public boolean putSetting(final String key, Setting<?> setting) {
         CheckParameterUtil.ensureParameterNotNull(key);
@@ -1246,12 +1255,22 @@ public class Preferences {
         }
     }
 
+    /**
+     * Put a collection.
+     * @param key key
+     * @param value value
+     * @return {@code true}, if something has changed (i.e. value is different than before)
+     */
     public boolean putCollection(String key, Collection<String> value) {
         return putSetting(key, value == null ? null : ListSetting.create(value));
     }
 
     /**
      * Saves at most {@code maxsize} items of collection {@code val}.
+     * @param key key
+     * @param maxsize max number of items to save
+     * @param val value
+     * @return {@code true}, if something has changed (i.e. value is different than before)
      */
     public boolean putCollectionBounded(String key, int maxsize, Collection<String> val) {
         Collection<String> newCollection = new ArrayList<>(Math.min(maxsize, val.size()));
@@ -1267,6 +1286,9 @@ public class Preferences {
     /**
      * Used to read a 2-dimensional array of strings from the preference file.
      * If not a single entry could be found, <code>def</code> is returned.
+     * @param key preference key
+     * @param def default array value
+     * @return array value
      */
     @SuppressWarnings({ "unchecked", "rawtypes" })
     public synchronized Collection<Collection<String>> getArray(String key, Collection<Collection<String>> def) {
@@ -1279,6 +1301,12 @@ public class Preferences {
         return res == null ? Collections.<Collection<String>>emptyList() : res;
     }
 
+    /**
+     * Put an array.
+     * @param key key
+     * @param value value
+     * @return {@code true}, if something has changed (i.e. value is different than before)
+     */
     public boolean putArray(String key, Collection<Collection<String>> value) {
         return putSetting(key, value == null ? null : ListListSetting.create(value));
     }
@@ -1318,6 +1346,7 @@ public class Preferences {
      * the @pref annotation.
      * Default constructor is used to initialize the struct objects, properties
      * then override some of these default values.
+     * @param <T> klass type
      * @param key main preference key
      * @param klass The struct class
      * @return a list of objects of type T or an empty list if nothing was found
@@ -1332,6 +1361,11 @@ public class Preferences {
 
     /**
      * same as above, but returns def if nothing was found
+     * @param <T> klass type
+     * @param key main preference key
+     * @param def default value
+     * @param klass The struct class
+     * @return a list of objects of type T or {@code def} if nothing was found
      */
     public <T> List<T> getListOfStructs(String key, Collection<T> def, Class<T> klass) {
         Collection<Map<String, String>> prop =
diff --git a/src/org/openstreetmap/josm/data/ProjectionBounds.java b/src/org/openstreetmap/josm/data/ProjectionBounds.java
index b8ddfaf..4f7cbd8 100644
--- a/src/org/openstreetmap/josm/data/ProjectionBounds.java
+++ b/src/org/openstreetmap/josm/data/ProjectionBounds.java
@@ -12,12 +12,26 @@ import org.openstreetmap.josm.tools.Utils;
  */
 public class ProjectionBounds {
     /**
-     * The minimum and maximum coordinates.
+     * The minimum east coordinate.
      */
-    public double minEast, minNorth, maxEast, maxNorth;
+    public double minEast;
+    /**
+     * The minimum north coordinate.
+     */
+    public double minNorth;
+    /**
+     * The maximum east coordinate.
+     */
+    public double maxEast;
+    /**
+     * The minimum north coordinate.
+     */
+    public double maxNorth;
 
     /**
      * Construct bounds out of two points.
+     * @param min min east/north
+     * @param max max east/north
      */
     public ProjectionBounds(EastNorth min, EastNorth max) {
         this.minEast = min.east();
@@ -26,11 +40,21 @@ public class ProjectionBounds {
         this.maxNorth = max.north();
     }
 
+    /**
+     * Construct bounds out of a single point.
+     * @param p east/north
+     */
     public ProjectionBounds(EastNorth p) {
         this.minEast = this.maxEast = p.east();
         this.minNorth = this.maxNorth = p.north();
     }
 
+    /**
+     * Construct bounds out of a center point and east/north dimensions.
+     * @param center center east/north
+     * @param east east dimension
+     * @param north north dimension
+     */
     public ProjectionBounds(EastNorth center, double east, double north) {
         this.minEast = center.east()-east/2.0;
         this.minNorth = center.north()-north/2.0;
@@ -38,6 +62,13 @@ public class ProjectionBounds {
         this.maxNorth = center.north()+north/2.0;
     }
 
+    /**
+     * Construct bounds out of two points.
+     * @param minEast min east
+     * @param minNorth min north
+     * @param maxEast max east
+     * @param maxNorth max north
+     */
     public ProjectionBounds(double minEast, double minNorth, double maxEast, double maxNorth) {
         this.minEast = minEast;
         this.minNorth = minNorth;
@@ -45,6 +76,10 @@ public class ProjectionBounds {
         this.maxNorth = maxNorth;
     }
 
+    /**
+     * Extends bounds to include point {@code e}.
+     * @param e east/north to include
+     */
     public void extend(EastNorth e) {
         if (e.east() < minEast) {
             minEast = e.east();
@@ -60,6 +95,10 @@ public class ProjectionBounds {
         }
     }
 
+    /**
+     * Returns the center east/north.
+     * @return the center east/north
+     */
     public EastNorth getCenter() {
         return new EastNorth((minEast + maxEast) / 2.0, (minNorth + maxNorth) / 2.0);
     }
@@ -72,6 +111,8 @@ public class ProjectionBounds {
     /**
      * The two bounds intersect? Compared to java Shape.intersects, if does not use
      * the interior but the closure. (">=" instead of ">")
+     * @param b projection bounds
+     * @return {@code true} if the two bounds intersect
      */
     public boolean intersects(ProjectionBounds b) {
         return b.maxEast >= minEast &&
@@ -80,10 +121,18 @@ public class ProjectionBounds {
         b.minNorth <= maxNorth;
     }
 
+    /**
+     * Returns the min east/north.
+     * @return the min east/north
+     */
     public EastNorth getMin() {
         return new EastNorth(minEast, minNorth);
     }
 
+    /**
+     * Returns the max east/north.
+     * @return the max east/north
+     */
     public EastNorth getMax() {
         return new EastNorth(maxEast, maxNorth);
     }
diff --git a/src/org/openstreetmap/josm/data/cache/JCSCacheManager.java b/src/org/openstreetmap/josm/data/cache/JCSCacheManager.java
index 47635b2..c584fcb 100644
--- a/src/org/openstreetmap/josm/data/cache/JCSCacheManager.java
+++ b/src/org/openstreetmap/josm/data/cache/JCSCacheManager.java
@@ -123,6 +123,8 @@ public final class JCSCacheManager {
 
     /**
      * Returns configured cache object for named cache region
+     * @param <K> key type
+     * @param <V> value type
      * @param cacheName region name
      * @return cache access object
      * @throws IOException if directory is not found
@@ -133,6 +135,8 @@ public final class JCSCacheManager {
 
     /**
      * Returns configured cache object with defined limits of memory cache and disk cache
+     * @param <K> key type
+     * @param <V> value type
      * @param cacheName         region name
      * @param maxMemoryObjects  number of objects to keep in memory
      * @param maxDiskObjects    maximum size of the objects stored on disk in kB
diff --git a/src/org/openstreetmap/josm/data/cache/JCSCachedTileLoaderJob.java b/src/org/openstreetmap/josm/data/cache/JCSCachedTileLoaderJob.java
index f107e18..53191c6 100644
--- a/src/org/openstreetmap/josm/data/cache/JCSCachedTileLoaderJob.java
+++ b/src/org/openstreetmap/josm/data/cache/JCSCachedTileLoaderJob.java
@@ -3,13 +3,10 @@ package org.openstreetmap.josm.data.cache;
 
 import java.io.FileNotFoundException;
 import java.io.IOException;
-import java.net.HttpURLConnection;
 import java.net.URL;
-import java.net.URLConnection;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
-import java.util.Map.Entry;
 import java.util.Random;
 import java.util.Set;
 import java.util.concurrent.ConcurrentHashMap;
@@ -26,6 +23,7 @@ import org.openstreetmap.gui.jmapviewer.FeatureAdapter;
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.data.cache.ICachedLoaderListener.LoadResult;
 import org.openstreetmap.josm.data.preferences.IntegerProperty;
+import org.openstreetmap.josm.tools.HttpClient;
 import org.openstreetmap.josm.tools.Utils;
 
 /**
@@ -310,40 +308,32 @@ public abstract class JCSCachedTileLoaderJob<K, V extends CacheEntry> implements
                 return true;
             }
 
-            HttpURLConnection urlConn = getURLConnection(getUrl(), true);
+            final HttpClient request = getRequest("GET", true);
 
             if (isObjectLoadable()  &&
                     (now - attributes.getLastModification()) <= ABSOLUTE_EXPIRE_TIME_LIMIT) {
-                urlConn.setIfModifiedSince(attributes.getLastModification());
+                request.setIfModifiedSince(attributes.getLastModification());
             }
             if (isObjectLoadable() && attributes.getEtag() != null) {
-                urlConn.addRequestProperty("If-None-Match", attributes.getEtag());
+                request.setHeader("If-None-Match", attributes.getEtag());
             }
 
-            log.log(Level.INFO, "GET {0} -> {1}", new Object[]{getUrl(), urlConn.getResponseCode()});
+            final HttpClient.Response urlConn = request.connect();
 
-            // follow redirects
-            for (int i = 0; i < 5; i++) {
-                if (urlConn.getResponseCode() == 302) {
-                    urlConn = getURLConnection(new URL(urlConn.getHeaderField("Location")), true);
-                } else {
-                    break;
-                }
-            }
             if (urlConn.getResponseCode() == 304) {
                 // If isModifiedSince or If-None-Match has been set
                 // and the server answers with a HTTP 304 = "Not Modified"
-                log.log(Level.FINE, "JCS - IfModifiedSince/Etag test: local version is up to date: {0}", getUrl());
+                log.log(Level.FINE, "JCS - If-Modified-Since/ETag test: local version is up to date: {0}", getUrl());
                 return true;
-            } else if (isObjectLoadable() // we have an object in cache, but we haven't received 304 resposne code
+            } else if (isObjectLoadable() // we have an object in cache, but we haven't received 304 response code
                     && (
-                            (attributes.getEtag() != null && attributes.getEtag().equals(urlConn.getRequestProperty("ETag"))) ||
+                            (attributes.getEtag() != null && attributes.getEtag().equals(urlConn.getHeaderField("ETag"))) ||
                             attributes.getLastModification() == urlConn.getLastModified())
                     ) {
                 // we sent ETag or If-Modified-Since, but didn't get 304 response code
                 // for further requests - use HEAD
                 String serverKey = getServerKey();
-                log.log(Level.INFO, "JCS - Host: {0} found not to return 304 codes for If-Modifed-Since or If-None-Match headers",
+                log.log(Level.INFO, "JCS - Host: {0} found not to return 304 codes for If-Modified-Since or If-None-Match headers",
                         serverKey);
                 useHead.put(serverKey, Boolean.TRUE);
             }
@@ -360,7 +350,7 @@ public abstract class JCSCachedTileLoaderJob<K, V extends CacheEntry> implements
                 attributes.setResponseCode(urlConn.getResponseCode());
                 byte[] raw;
                 if (urlConn.getResponseCode() == 200) {
-                    raw = Utils.readBytesFromStream(urlConn.getInputStream());
+                    raw = Utils.readBytesFromStream(urlConn.getContent());
                 } else {
                     raw = new byte[]{};
                 }
@@ -433,7 +423,7 @@ public abstract class JCSCachedTileLoaderJob<K, V extends CacheEntry> implements
 
     protected abstract V createCacheEntry(byte[] content);
 
-    protected CacheEntryAttributes parseHeaders(URLConnection urlConn) {
+    protected CacheEntryAttributes parseHeaders(HttpClient.Response urlConn) {
         CacheEntryAttributes ret = new CacheEntryAttributes();
 
         Long lng = urlConn.getExpiration();
@@ -460,44 +450,28 @@ public abstract class JCSCachedTileLoaderJob<K, V extends CacheEntry> implements
         ret.setLastModification(now);
         ret.setEtag(urlConn.getHeaderField("ETag"));
 
-        if (Main.isDebugEnabled()) {
-            for (Entry<String, List<String>> header: urlConn.getHeaderFields().entrySet()) {
-                log.log(Level.FINE, "Response header - {0}: {1}", new Object[]{header.getKey(), header.getValue()});
-            }
-        }
-
         return ret;
     }
 
-    private HttpURLConnection getURLConnection(URL url, boolean noCache) throws IOException {
-        HttpURLConnection urlConn = (HttpURLConnection) url.openConnection();
-        urlConn.setRequestProperty("Accept", "text/html, image/png, image/jpeg, image/gif, */*");
+    private HttpClient getRequest(String requestMethod, boolean noCache) throws IOException {
+        final HttpClient urlConn = HttpClient.create(getUrl(), requestMethod);
+        urlConn.setAccept("text/html, image/png, image/jpeg, image/gif, */*");
         urlConn.setReadTimeout(readTimeout); // 30 seconds read timeout
         urlConn.setConnectTimeout(connectTimeout);
         if (headers != null) {
-            for (Map.Entry<String, String> e: headers.entrySet()) {
-                urlConn.setRequestProperty(e.getKey(), e.getValue());
-            }
+            urlConn.setHeaders(headers);
         }
 
         if (force || noCache) {
-            urlConn.setUseCaches(false);
+            urlConn.useCache(false);
         }
         return urlConn;
     }
 
     private boolean isCacheValidUsingHead() throws IOException {
-        HttpURLConnection urlConn = getURLConnection(getUrl(), false);
-        urlConn.setRequestMethod("HEAD");
-        for (int i = 0; i < 5; i++) {
-            if (urlConn.getResponseCode() == 302) {
-                urlConn = getURLConnection(new URL(urlConn.getHeaderField("Location")), false);
-            } else {
-                break;
-            }
-        }
+        final HttpClient.Response urlConn = getRequest("HEAD", false).connect();
         long lastModified = urlConn.getLastModified();
-        return (attributes.getEtag() != null && attributes.getEtag().equals(urlConn.getRequestProperty("ETag"))) ||
+        return (attributes.getEtag() != null && attributes.getEtag().equals(urlConn.getHeaderField("ETag"))) ||
                 (lastModified != 0 && lastModified <= attributes.getLastModification());
     }
 
diff --git a/src/org/openstreetmap/josm/data/conflict/Conflict.java b/src/org/openstreetmap/josm/data/conflict/Conflict.java
index 1fbbafa..414f8dd 100644
--- a/src/org/openstreetmap/josm/data/conflict/Conflict.java
+++ b/src/org/openstreetmap/josm/data/conflict/Conflict.java
@@ -16,10 +16,10 @@ import org.openstreetmap.josm.data.osm.PrimitiveId;
  *   it was tried to merge it onto <code>my</code>. <code>their</code> is usually the
  *   {@link OsmPrimitive} from the dataset in another layer or the one retrieved from the server.</li>
  * </ul>
- *
- *
+ * @param <T> primitive type of the conflict
+ * @since 1750
  */
-public class  Conflict<T extends OsmPrimitive> {
+public class Conflict<T extends OsmPrimitive> {
     private final T my;
     private final T their;
     private final boolean isMyDeleted;
diff --git a/src/org/openstreetmap/josm/data/coor/EastNorth.java b/src/org/openstreetmap/josm/data/coor/EastNorth.java
index ad9f28b..77fca04 100644
--- a/src/org/openstreetmap/josm/data/coor/EastNorth.java
+++ b/src/org/openstreetmap/josm/data/coor/EastNorth.java
@@ -155,8 +155,10 @@ public class EastNorth extends Coordinate {
 
     /**
      * Compares two EastNorth values
+     * @param other other east.north
+     * @param e epsilon
      *
-     * @return true if "x" and "y" values are within 1E-6 of each other
+     * @return true if "x" and "y" values are within epsilon {@code e} of each other
      */
     public boolean equalsEpsilon(EastNorth other, double e) {
         return Math.abs(x - other.x) < e && Math.abs(y - other.y) < e;
diff --git a/src/org/openstreetmap/josm/data/coor/LatLon.java b/src/org/openstreetmap/josm/data/coor/LatLon.java
index f5125a1..f7fb7a2 100644
--- a/src/org/openstreetmap/josm/data/coor/LatLon.java
+++ b/src/org/openstreetmap/josm/data/coor/LatLon.java
@@ -114,6 +114,7 @@ public class LatLon extends Coordinate {
      * Returns a valid OSM longitude [-180,+180] for the given extended longitude value.
      * For example, a value of -181 will return +179, a value of +181 will return -179.
      * @param value A longitude value not restricted to the [-180,+180] range.
+     * @return a valid OSM longitude [-180,+180]
      */
     public static double toIntervalLon(double value) {
         if (isValidLon(value))
@@ -236,9 +237,9 @@ public class LatLon extends Coordinate {
     }
 
     /**
+     * @param other other lat/lon
      * @return <code>true</code> if the other point has almost the same lat/lon
-     * values, only differing by no more than
-     * 1 / {@link #MAX_SERVER_PRECISION MAX_SERVER_PRECISION}.
+     * values, only differing by no more than 1 / {@link #MAX_SERVER_PRECISION MAX_SERVER_PRECISION}.
      */
     public boolean equalsEpsilon(LatLon other) {
         double p = MAX_SERVER_PRECISION / 2;
@@ -246,8 +247,8 @@ public class LatLon extends Coordinate {
     }
 
     /**
-     * @return <code>true</code>, if the coordinate is outside the world, compared
-     * by using lat/lon.
+     * Determines if this lat/lon is outside of the world
+     * @return <code>true</code>, if the coordinate is outside the world, compared by using lat/lon.
      */
     public boolean isOutSideWorld() {
         Bounds b = Main.getProjection().getWorldBoundsLatLon();
@@ -256,6 +257,8 @@ public class LatLon extends Coordinate {
     }
 
     /**
+     * Determines if this lat/lon is within the given bounding box.
+     * @param b bounding box
      * @return <code>true</code> if this is within the given bounding box.
      */
     public boolean isWithin(Bounds b) {
@@ -329,6 +332,7 @@ public class LatLon extends Coordinate {
 
     /**
      * Returns this lat/lon pair in human-readable format separated by {@code separator}.
+     * @param separator values separator
      * @return String in the format {@code "1.23456[separator]2.34567"}
      */
     public String toStringCSV(String separator) {
@@ -375,8 +379,8 @@ public class LatLon extends Coordinate {
     }
 
     /**
-     * Returns the value rounded to OSM precisions, i.e. to
-     * LatLon.MAX_SERVER_PRECISION
+     * Returns the value rounded to OSM precisions, i.e. to {@link LatLon#MAX_SERVER_PRECISION}.
+     * @param value lat/lon value
      *
      * @return rounded value
      */
@@ -387,6 +391,7 @@ public class LatLon extends Coordinate {
     /**
      * Returns the value rounded to OSM precision. This function is now the same as
      * {@link #roundToOsmPrecision(double)}, since the rounding error has been fixed.
+     * @param value lat/lon value
      *
      * @return rounded value
      */
diff --git a/src/org/openstreetmap/josm/data/gpx/IWithAttributes.java b/src/org/openstreetmap/josm/data/gpx/IWithAttributes.java
index d5cc7e8..1298a0d 100644
--- a/src/org/openstreetmap/josm/data/gpx/IWithAttributes.java
+++ b/src/org/openstreetmap/josm/data/gpx/IWithAttributes.java
@@ -30,6 +30,7 @@ public interface IWithAttributes {
     /**
      * Returns the Collection value to which the specified key is mapped,
      * or {@code null} if this map contains no Collection mapping for the key.
+     * @param <T> type of items
      *
      * @param key the key whose associated value is to be returned
      * @return the Collection value to which the specified key is mapped,
diff --git a/src/org/openstreetmap/josm/data/imagery/TMSCachedTileLoaderJob.java b/src/org/openstreetmap/josm/data/imagery/TMSCachedTileLoaderJob.java
index 64c933c..631b5ef 100644
--- a/src/org/openstreetmap/josm/data/imagery/TMSCachedTileLoaderJob.java
+++ b/src/org/openstreetmap/josm/data/imagery/TMSCachedTileLoaderJob.java
@@ -6,7 +6,6 @@ import static org.openstreetmap.josm.tools.I18n.tr;
 import java.io.ByteArrayInputStream;
 import java.io.IOException;
 import java.net.URL;
-import java.net.URLConnection;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
@@ -30,6 +29,7 @@ import org.openstreetmap.josm.data.cache.CacheEntry;
 import org.openstreetmap.josm.data.cache.CacheEntryAttributes;
 import org.openstreetmap.josm.data.cache.ICachedLoaderListener;
 import org.openstreetmap.josm.data.cache.JCSCachedTileLoaderJob;
+import org.openstreetmap.josm.tools.HttpClient;
 
 /**
  * @author Wiktor Niesiobędzki
@@ -239,7 +239,7 @@ public class TMSCachedTileLoaderJob extends JCSCachedTileLoaderJob<String, Buffe
     }
 
     @Override
-    protected CacheEntryAttributes parseHeaders(URLConnection urlConn) {
+    protected CacheEntryAttributes parseHeaders(HttpClient.Response urlConn) {
         CacheEntryAttributes ret = super.parseHeaders(urlConn);
         // keep the expiration time between MINIMUM_EXPIRES and MAXIMUM_EXPIRES, so we will cache the tiles
         // at least for some short period of time, but not too long
diff --git a/src/org/openstreetmap/josm/data/oauth/SignpostAdapters.java b/src/org/openstreetmap/josm/data/oauth/SignpostAdapters.java
index 8769671..98395d0 100644
--- a/src/org/openstreetmap/josm/data/oauth/SignpostAdapters.java
+++ b/src/org/openstreetmap/josm/data/oauth/SignpostAdapters.java
@@ -8,10 +8,11 @@ import java.util.Map;
 
 import oauth.signpost.AbstractOAuthConsumer;
 import oauth.signpost.AbstractOAuthProvider;
+
 import org.openstreetmap.josm.tools.HttpClient;
 
 /**
- * Adapters to make {@link oauth.signpost} work with {@link HttpClient}.
+ * Adapters to make {@code oauth.signpost} work with {@link HttpClient}.
  */
 public final class SignpostAdapters {
 
@@ -38,6 +39,8 @@ public final class SignpostAdapters {
         protected void closeConnection(oauth.signpost.http.HttpRequest request, oauth.signpost.http.HttpResponse response) throws Exception {
             if (response != null) {
                 ((HttpResponse) response).response.disconnect();
+            } else if (request != null) {
+                ((HttpRequest) request).request.disconnect();
             }
         }
     }
diff --git a/src/org/openstreetmap/josm/data/osm/AbstractPrimitive.java b/src/org/openstreetmap/josm/data/osm/AbstractPrimitive.java
index ec8f942..090fbd6 100644
--- a/src/org/openstreetmap/josm/data/osm/AbstractPrimitive.java
+++ b/src/org/openstreetmap/josm/data/osm/AbstractPrimitive.java
@@ -448,6 +448,7 @@ public abstract class AbstractPrimitive implements IPrimitive {
     /**
      * If set to true, this object is incomplete, which means only the id
      * and type is known (type is the objects instance class)
+     * @param incomplete incomplete flag value
      */
     protected void setIncomplete(boolean incomplete) {
         updateFlags(FLAG_INCOMPLETE, incomplete);
@@ -480,14 +481,26 @@ public abstract class AbstractPrimitive implements IPrimitive {
      * Keys handling
      ------------*/
 
-    // Note that all methods that read keys first make local copy of keys array reference. This is to ensure thread safety - reading
-    // doesn't have to be locked so it's possible that keys array will be modified. But all write methods make copy of keys array so
-    // the array itself will be never modified - only reference will be changed
-
     /**
      * The key/value list for this primitive.
-     */
-    protected String[] keys;
+     * <p>
+     * Note that the keys field is synchronized using RCU.
+     * Writes to it are not synchronized by this object, the writers have to synchronize writes themselves.
+     * <p>
+     * In short this means that you should not rely on this variable being the same value when read again and your should always
+     * copy it on writes.
+     * <p>
+     * Further reading:
+     * <ul>
+     * <li>{@link java.util.concurrent.CopyOnWriteArrayList}</li>
+     * <li> <a href="http://stackoverflow.com/questions/2950871/how-can-copyonwritearraylist-be-thread-safe">
+     *     http://stackoverflow.com/questions/2950871/how-can-copyonwritearraylist-be-thread-safe</a></li>
+     * <li> <a href="https://en.wikipedia.org/wiki/Read-copy-update">
+     *     https://en.wikipedia.org/wiki/Read-copy-update</a> (mind that we have a Garbage collector,
+     *     {@code rcu_assign_pointer} and {@code rcu_dereference} are ensured by the {@code volatile} keyword)</li>
+     * </ul>
+     */
+    protected volatile String[] keys;
 
     /**
      * Replies the map of key/value pairs. Never replies null. The map can be empty, though.
@@ -529,6 +542,9 @@ public abstract class AbstractPrimitive implements IPrimitive {
      * Sets the keys of this primitives to the key/value pairs in <code>keys</code>.
      * Old key/value pairs are removed.
      * If <code>keys</code> is null, clears existing key/value pairs.
+     * <p>
+     * Note that this method, like all methods that modify keys, is not synchronized and may lead to data corruption when being used
+     * from multiple threads.
      *
      * @param keys the key/value pairs to set. If null, removes all existing key/value pairs.
      */
@@ -553,6 +569,9 @@ public abstract class AbstractPrimitive implements IPrimitive {
     /**
      * Set the given value to the given key. If key is null, does nothing. If value is null,
      * removes the key and behaves like {@link #remove(String)}.
+     * <p>
+     * Note that this method, like all methods that modify keys, is not synchronized and may lead to data corruption when being used
+     * from multiple threads.
      *
      * @param key  The key, for which the value is to be set. Can be null or empty, does nothing in this case.
      * @param value The value for the key. If null, removes the respective key/value pair.
@@ -570,24 +589,48 @@ public abstract class AbstractPrimitive implements IPrimitive {
             keys = new String[] {key, value};
             keysChangedImpl(originalKeys);
         } else {
-            for (int i = 0; i < keys.length; i += 2) {
-                if (keys[i].equals(key)) {
-                    // This modifies the keys array but it doesn't make it invalidate for any time so its ok (see note no top)
-                    keys[i+1] = value;
-                    keysChangedImpl(originalKeys);
-                    return;
-                }
+            int keyIndex = indexOfKey(keys, key);
+            int tagArrayLength = keys.length;
+            if (keyIndex < 0) {
+                keyIndex = tagArrayLength;
+                tagArrayLength += 2;
             }
-            String[] newKeys = Arrays.copyOf(keys, keys.length + 2);
-            newKeys[keys.length] = key;
-            newKeys[keys.length + 1] = value;
+
+            // Do not try to optimize this array creation if the key already exists.
+            // We would need to convert the keys array to be an AtomicReferenceArray
+            // Or we would at least need a volatile write after the array was modified to
+            // ensure that changes are visible by other threads.
+            String[] newKeys = Arrays.copyOf(keys, tagArrayLength);
+            newKeys[keyIndex] = key;
+            newKeys[keyIndex + 1] = value;
             keys = newKeys;
             keysChangedImpl(originalKeys);
         }
     }
 
     /**
+     * Scans a key/value array for a given key.
+     * @param keys The key array. It is not modified. It may be null to indicate an emtpy array.
+     * @param key The key to search for.
+     * @return The position of that key in the keys array - which is always a multiple of 2 - or -1 if it was not found.
+     */
+    private static int indexOfKey(String[] keys, String key) {
+        if (keys == null) {
+            return -1;
+        }
+        for (int i = 0; i < keys.length; i += 2) {
+            if (keys[i].equals(key)) {
+                return i;
+            }
+        }
+        return -1;
+    }
+
+    /**
      * Remove the given key from the list
+     * <p>
+     * Note that this method, like all methods that modify keys, is not synchronized and may lead to data corruption when being used
+     * from multiple threads.
      *
      * @param key  the key to be removed. Ignored, if key is null.
      */
@@ -616,6 +659,9 @@ public abstract class AbstractPrimitive implements IPrimitive {
 
     /**
      * Removes all keys from this primitive.
+     * <p>
+     * Note that this method, like all methods that modify keys, is not synchronized and may lead to data corruption when being used
+     * from multiple threads.
      */
     @Override
     public void removeAll() {
@@ -648,6 +694,8 @@ public abstract class AbstractPrimitive implements IPrimitive {
 
     /**
      * Returns true if the {@code key} corresponds to an OSM true value.
+     * @param key OSM key
+     * @return {@code true} if the {@code key} corresponds to an OSM true value
      * @see OsmUtils#isTrue(String)
      */
     public final boolean isKeyTrue(String key) {
@@ -656,6 +704,8 @@ public abstract class AbstractPrimitive implements IPrimitive {
 
     /**
      * Returns true if the {@code key} corresponds to an OSM false value.
+     * @param key OSM key
+     * @return {@code true} if the {@code key} corresponds to an OSM false value
      * @see OsmUtils#isFalse(String)
      */
     public final boolean isKeyFalse(String key) {
@@ -675,6 +725,7 @@ public abstract class AbstractPrimitive implements IPrimitive {
     }
 
     public final int getNumKeys() {
+        String[] keys = this.keys;
         return keys == null ? 0 : keys.length / 2;
     }
 
@@ -713,17 +764,12 @@ public abstract class AbstractPrimitive implements IPrimitive {
      * @return true, if his primitive has a tag with key <code>key</code>
      */
     public boolean hasKey(String key) {
-        String[] keys = this.keys;
-        if (key == null) return false;
-        if (keys == null) return false;
-        for (int i = 0; i < keys.length; i += 2) {
-            if (keys[i].equals(key)) return true;
-        }
-        return false;
+        return key != null && indexOfKey(keys, key) >= 0;
     }
 
     /**
      * What to do, when the tags have changed by one of the tag-changing methods.
+     * @param originalKeys original tags
      */
     protected abstract void keysChangedImpl(Map<String, String> originalKeys);
 
diff --git a/src/org/openstreetmap/josm/data/osm/BBox.java b/src/org/openstreetmap/josm/data/osm/BBox.java
index f4e4b01..5882c9f 100644
--- a/src/org/openstreetmap/josm/data/osm/BBox.java
+++ b/src/org/openstreetmap/josm/data/osm/BBox.java
@@ -113,6 +113,8 @@ public class BBox {
 
     /**
      * Extends this bbox to include the point (x, y)
+     * @param x X coordinate
+     * @param y Y coordinate
      */
     public final void add(double x, double y) {
         xmin = Math.min(xmin, x);
@@ -145,8 +147,9 @@ public class BBox {
     }
 
     /**
-     * Tests, weather the bbox b lies completely inside
-     * this bbox.
+     * Tests, whether the bbox {@code b} lies completely inside this bbox.
+     * @param b bounding box
+     * @return {@code true} if {@code b} lies completely inside this bbox
      */
     public boolean bounds(BBox b) {
         if (!(xmin <= b.xmin) ||
@@ -158,7 +161,9 @@ public class BBox {
     }
 
     /**
-     * Tests, weather the Point c lies within the bbox.
+     * Tests, whether the Point {@code c} lies within the bbox.
+     * @param c point
+     * @return {@code true} if {@code c} lies within the bbox
      */
     public boolean bounds(LatLon c) {
         if ((xmin <= c.lon()) &&
@@ -170,8 +175,10 @@ public class BBox {
     }
 
     /**
-     * Tests, weather two BBoxes intersect as an area.
+     * Tests, whether two BBoxes intersect as an area.
      * I.e. whether there exists a point that lies in both of them.
+     * @param b other bounding box
+     * @return {@code true} if this bbox intersects with the other
      */
     public boolean intersects(BBox b) {
         if (xmin > b.xmax)
diff --git a/src/org/openstreetmap/josm/data/osm/Hash.java b/src/org/openstreetmap/josm/data/osm/Hash.java
index e652085..28f15ae 100644
--- a/src/org/openstreetmap/josm/data/osm/Hash.java
+++ b/src/org/openstreetmap/josm/data/osm/Hash.java
@@ -9,6 +9,8 @@ package org.openstreetmap.josm.data.osm;
  *
  * For use cases, see {@link Storage}.
  * @author nenik
+ * @param <K> type for hashCode and first equals parameter
+ * @param <T> type for second equals parameter
  */
 public interface Hash<K, T> {
 
diff --git a/src/org/openstreetmap/josm/data/osm/MultipolygonBuilder.java b/src/org/openstreetmap/josm/data/osm/MultipolygonBuilder.java
index 717dc87..bf757c6 100644
--- a/src/org/openstreetmap/josm/data/osm/MultipolygonBuilder.java
+++ b/src/org/openstreetmap/josm/data/osm/MultipolygonBuilder.java
@@ -46,6 +46,7 @@ public class MultipolygonBuilder {
         /**
          * Constructs a new {@code JoinedPolygon} from given list of ways.
          * @param ways The ways used to build joined polygon
+         * @param reversed list of reversed states
          */
         public JoinedPolygon(List<Way> ways, List<Boolean> reversed) {
             this.ways = ways;
@@ -93,7 +94,7 @@ public class MultipolygonBuilder {
      * Helper storage class for finding findOuterWays
      */
     static class PolygonLevel {
-        public final int level; //nesting level , even for outer, odd for inner polygons.
+        public final int level; // nesting level, even for outer, odd for inner polygons.
         public final JoinedPolygon outerWay;
 
         public List<JoinedPolygon> innerWays;
@@ -297,6 +298,7 @@ public class MultipolygonBuilder {
 
     /**
      * Collects outer way and corresponding inner ways from all boundaries.
+     * @param boundaryWays boundary ways
      * @return the outermostWay, or {@code null} if intersection found.
      */
     private static List<PolygonLevel> findOuterWaysMultiThread(List<JoinedPolygon> boundaryWays) {
@@ -353,6 +355,8 @@ public class MultipolygonBuilder {
 
         /**
          * Collects outer way and corresponding inner ways from all boundaries.
+         * @param level nesting level
+         * @param boundaryWays boundary ways
          * @return the outermostWay, or {@code null} if intersection found.
          */
         private static List<PolygonLevel> findOuterWaysRecursive(int level, List<JoinedPolygon> boundaryWays) {
diff --git a/src/org/openstreetmap/josm/data/osm/Node.java b/src/org/openstreetmap/josm/data/osm/Node.java
index 58955b0..f63f02b 100644
--- a/src/org/openstreetmap/josm/data/osm/Node.java
+++ b/src/org/openstreetmap/josm/data/osm/Node.java
@@ -108,6 +108,8 @@ public final class Node extends OsmPrimitive implements INode {
 
     /**
      * To be used only by Dataset.reindexNode
+     * @param coor lat/lon
+     * @param eastNorth east/north
      */
     protected void setCoorInternal(LatLon coor, EastNorth eastNorth) {
         if (coor != null) {
@@ -353,6 +355,10 @@ public final class Node extends OsmPrimitive implements INode {
     /**
      * Tests whether {@code this} node is connected to {@code otherNode} via at most {@code hops} nodes
      * matching the {@code predicate} (which may be {@code null} to consider all nodes).
+     * @param otherNodes other nodes
+     * @param hops number of hops
+     * @param predicate predicate to match
+     * @return {@code true} if {@code this} node mets the conditions
      */
     public boolean isConnectedTo(final Collection<Node> otherNodes, final int hops, Predicate<Node> predicate) {
         CheckParameterUtil.ensureParameterNotNull(otherNodes);
diff --git a/src/org/openstreetmap/josm/data/osm/OsmPrimitive.java b/src/org/openstreetmap/josm/data/osm/OsmPrimitive.java
index 233485c..1f45a68 100644
--- a/src/org/openstreetmap/josm/data/osm/OsmPrimitive.java
+++ b/src/org/openstreetmap/josm/data/osm/OsmPrimitive.java
@@ -476,8 +476,8 @@ public abstract class OsmPrimitive extends AbstractPrimitive implements Comparab
 
     /**
      * Remove the disabled flag from the primitive.
-     * Afterwards, the primitive is displayed normally and can be selected
-     * again.
+     * Afterwards, the primitive is displayed normally and can be selected again.
+     * @return {@code true} if a change occurred
      */
     public boolean unsetDisabledState() {
         boolean locked = writeLock();
@@ -492,6 +492,7 @@ public abstract class OsmPrimitive extends AbstractPrimitive implements Comparab
 
     /**
      * Set binary property used internally by the filter mechanism.
+     * @param isExplicit new "disabled type" flag value
      */
     public void setDisabledType(boolean isExplicit) {
         updateFlags(FLAG_DISABLED_TYPE, isExplicit);
@@ -499,22 +500,23 @@ public abstract class OsmPrimitive extends AbstractPrimitive implements Comparab
 
     /**
      * Set binary property used internally by the filter mechanism.
+     * @param isExplicit new "hidden type" flag value
      */
     public void setHiddenType(boolean isExplicit) {
         updateFlags(FLAG_HIDDEN_TYPE, isExplicit);
     }
 
     /**
-     * Replies true, if this primitive is disabled. (E.g. a filter
-     * applies)
+     * Replies true, if this primitive is disabled. (E.g. a filter applies)
+     * @return {@code true} if this object has the "disabled" flag enabled
      */
     public boolean isDisabled() {
         return (flags & FLAG_DISABLED) != 0;
     }
 
     /**
-     * Replies true, if this primitive is disabled and marked as
-     * completely hidden on the map.
+     * Replies true, if this primitive is disabled and marked as completely hidden on the map.
+     * @return {@code true} if this object has both the "disabled" and "hide if disabled" flags enabled
      */
     public boolean isDisabledAndHidden() {
         return ((flags & FLAG_DISABLED) != 0) && ((flags & FLAG_HIDE_IF_DISABLED) != 0);
@@ -522,6 +524,7 @@ public abstract class OsmPrimitive extends AbstractPrimitive implements Comparab
 
     /**
      * Get binary property used internally by the filter mechanism.
+     * @return {@code true} if this object has the "hidden type" flag enabled
      */
     public boolean getHiddenType() {
         return (flags & FLAG_HIDDEN_TYPE) != 0;
@@ -529,15 +532,24 @@ public abstract class OsmPrimitive extends AbstractPrimitive implements Comparab
 
     /**
      * Get binary property used internally by the filter mechanism.
+     * @return {@code true} if this object has the "disabled type" flag enabled
      */
     public boolean getDisabledType() {
         return (flags & FLAG_DISABLED_TYPE) != 0;
     }
 
+    /**
+     * Determines if this object is selectable.
+     * @return {@code true} if this object is selectable
+     */
     public boolean isSelectable() {
         return (flags & (FLAG_DELETED + FLAG_INCOMPLETE + FLAG_DISABLED + FLAG_HIDE_IF_DISABLED)) == 0;
     }
 
+    /**
+     * Determines if this object is drawable.
+     * @return {@code true} if this object is drawable
+     */
     public boolean isDrawable() {
         return (flags & (FLAG_DELETED + FLAG_INCOMPLETE + FLAG_HIDE_IF_DISABLED)) == 0;
     }
@@ -763,6 +775,7 @@ public abstract class OsmPrimitive extends AbstractPrimitive implements Comparab
 
     /**
      * Returns {@link #getKeys()} for which {@code key} does not fulfill {@link #isUninterestingKey}.
+     * @return A map of interesting tags
      */
     public Map<String, String> getInterestingTags() {
         Map<String, String> result = new HashMap<>();
@@ -819,26 +832,22 @@ public abstract class OsmPrimitive extends AbstractPrimitive implements Comparab
     }
 
     private void updateTagged() {
-        if (keys != null) {
-            for (String key: keySet()) {
-                // 'area' is not really uninteresting (putting it in that list may have unpredictable side effects)
-                // but it's clearly not enough to consider an object as tagged (see #9261)
-                if (!isUninterestingKey(key) && !"area".equals(key)) {
-                    updateFlagsNoLock(FLAG_TAGGED, true);
-                    return;
-                }
+        for (String key: keySet()) {
+            // 'area' is not really uninteresting (putting it in that list may have unpredictable side effects)
+            // but it's clearly not enough to consider an object as tagged (see #9261)
+            if (!isUninterestingKey(key) && !"area".equals(key)) {
+                updateFlagsNoLock(FLAG_TAGGED, true);
+                return;
             }
         }
         updateFlagsNoLock(FLAG_TAGGED, false);
     }
 
     private void updateAnnotated() {
-        if (keys != null) {
-            for (String key: keySet()) {
-                if (getWorkInProgressKeys().contains(key)) {
-                    updateFlagsNoLock(FLAG_ANNOTATED, true);
-                    return;
-                }
+        for (String key: keySet()) {
+            if (getWorkInProgressKeys().contains(key)) {
+                updateFlagsNoLock(FLAG_ANNOTATED, true);
+                return;
             }
         }
         updateFlagsNoLock(FLAG_ANNOTATED, false);
@@ -882,11 +891,16 @@ public abstract class OsmPrimitive extends AbstractPrimitive implements Comparab
 
     /**
      * true if this object has direction dependent tags (e.g. oneway)
+     * @return {@code true} if this object has direction dependent tags
      */
     public boolean hasDirectionKeys() {
         return (flags & FLAG_HAS_DIRECTIONS) != 0;
     }
 
+    /**
+     * true if this object has the "reversed diretion" flag enabled
+     * @return {@code true} if this object has the "reversed diretion" flag enabled
+     */
     public boolean reversedDirection() {
         return (flags & FLAG_DIRECTION_REVERSED) != 0;
     }
@@ -1081,6 +1095,7 @@ public abstract class OsmPrimitive extends AbstractPrimitive implements Comparab
     /**
       Return true, if this primitive is referred by at least n ways
       @param n Minimal number of ways to return true. Must be positive
+     * @return {@code true} if this primitive is referred by at least n ways
      */
     public final boolean isReferredByWays(int n) {
         // Count only referrers that are members of the same dataset (primitive can have some fake references, for example
@@ -1116,6 +1131,7 @@ public abstract class OsmPrimitive extends AbstractPrimitive implements Comparab
     /**
      * Get and write all attributes from the parameter. Does not fire any listener, so
      * use this only in the data initializing phase
+     * @param other other primitive
      */
     public void cloneFrom(OsmPrimitive other) {
         // write lock is provided by subclasses
@@ -1148,7 +1164,7 @@ public abstract class OsmPrimitive extends AbstractPrimitive implements Comparab
                 throw new DataIntegrityProblemException(
                         tr("Cannot merge primitives with different ids. This id is {0}, the other is {1}", id, other.getId()));
 
-            setKeys(other.getKeys());
+            setKeys(other.hasKeys() ? other.getKeys() : null);
             timestamp = other.timestamp;
             version = other.version;
             setIncomplete(other.isIncomplete());
@@ -1167,12 +1183,8 @@ public abstract class OsmPrimitive extends AbstractPrimitive implements Comparab
      * @return true if other isn't null and has the same interesting tags (key/value-pairs) as this.
      */
     public boolean hasSameInterestingTags(OsmPrimitive other) {
-        // We cannot directly use Arrays.equals(keys, other.keys) as keys is not ordered by key
-        // but we can at least check if both arrays are null or of the same size before creating
-        // and comparing the key maps (costly operation, see #7159)
         return (keys == null && other.keys == null)
-                || (keys != null && other.keys != null && keys.length == other.keys.length
-                        && (keys.length == 0 || getInterestingTags().equals(other.getInterestingTags())));
+                || getInterestingTags().equals(other.getInterestingTags());
     }
 
     /**
@@ -1228,7 +1240,7 @@ public abstract class OsmPrimitive extends AbstractPrimitive implements Comparab
      */
     public void load(PrimitiveData data) {
         // Write lock is provided by subclasses
-        setKeys(data.getKeys());
+        setKeys(data.hasKeys() ? data.getKeys() : null);
         setRawTimestamp(data.getRawTimestamp());
         user = data.getUser();
         setChangesetId(data.getChangesetId());
@@ -1250,7 +1262,7 @@ public abstract class OsmPrimitive extends AbstractPrimitive implements Comparab
      */
     protected void saveCommonAttributes(PrimitiveData data) {
         data.setId(id);
-        data.setKeys(getKeys());
+        data.setKeys(hasKeys() ? getKeys() : null);
         data.setRawTimestamp(getRawTimestamp());
         data.setUser(user);
         data.setDeleted(isDeleted());
@@ -1324,6 +1336,7 @@ public abstract class OsmPrimitive extends AbstractPrimitive implements Comparab
 
     /**
      * Replies the display name of a primitive formatted by <code>formatter</code>
+     * @param formatter formatter to use
      *
      * @return the display name
      */
@@ -1361,6 +1374,7 @@ public abstract class OsmPrimitive extends AbstractPrimitive implements Comparab
 
     /**
      * Replies the set of referring relations
+     * @param primitives primitives to fetch relations from
      *
      * @return the set of referring relations
      */
diff --git a/src/org/openstreetmap/josm/data/osm/QuadBuckets.java b/src/org/openstreetmap/josm/data/osm/QuadBuckets.java
index b5e32cb..ebd27c8 100644
--- a/src/org/openstreetmap/josm/data/osm/QuadBuckets.java
+++ b/src/org/openstreetmap/josm/data/osm/QuadBuckets.java
@@ -16,7 +16,8 @@ import org.openstreetmap.josm.data.coor.QuadTiling;
  * be removed and readded.
  *
  * This class is (no longer) thread safe.
- *
+ * @param <T> type of primitives
+ * @since 2165
  */
 public class QuadBuckets<T extends OsmPrimitive> implements Collection<T> {
     private static final boolean consistency_testing = false;
@@ -84,6 +85,7 @@ public class QuadBuckets<T extends OsmPrimitive> implements Collection<T> {
 
         /**
          * Constructor for root node
+         * @param buckets quadbuckets
          */
         QBLevel(final QuadBuckets<T> buckets) {
             level = 0;
diff --git a/src/org/openstreetmap/josm/data/osm/Relation.java b/src/org/openstreetmap/josm/data/osm/Relation.java
index 0586e60..2ae4bf8 100644
--- a/src/org/openstreetmap/josm/data/osm/Relation.java
+++ b/src/org/openstreetmap/josm/data/osm/Relation.java
@@ -348,6 +348,7 @@ public final class Relation extends OsmPrimitive implements IRelation {
     /**
      * Obtains all members with member.member == primitive
      * @param primitives the primitives to check for
+     * @return all relation members for the given primitives
      */
     public Collection<RelationMember> getMembersFor(final Collection<? extends OsmPrimitive> primitives) {
         return Utils.filter(getMembers(), new Predicate<RelationMember>() {
diff --git a/src/org/openstreetmap/josm/data/osm/Storage.java b/src/org/openstreetmap/josm/data/osm/Storage.java
index 050df89..3dc5a63 100644
--- a/src/org/openstreetmap/josm/data/osm/Storage.java
+++ b/src/org/openstreetmap/josm/data/osm/Storage.java
@@ -67,6 +67,7 @@ import org.openstreetmap.josm.tools.Utils;
  * </ul>
  *
  * @author nenik
+ * @param <T> type of stored objects
  */
 public class Storage<T> extends AbstractSet<T> {
 
@@ -103,6 +104,7 @@ public class Storage<T> extends AbstractSet<T> {
 
     /**
      * Constructs a new {@code Storage} with given capacity.
+     * @param capacity capacity
      */
     public Storage(int capacity) {
         this(Storage.<T>defaultHash(), capacity, false);
@@ -265,6 +267,8 @@ public class Storage<T> extends AbstractSet<T> {
 
     /**
      * Additional mixing of hash
+     * @param h hash
+     * @return new hash
      */
     private static int rehash(int h) {
         return 1103515245*h >> 2;
@@ -272,6 +276,8 @@ public class Storage<T> extends AbstractSet<T> {
 
     /**
      * Finds a bucket for given key.
+     * @param <K> type for hashCode and first equals parameter
+     * @param ha hash function
      *
      * @param key The key to compare
      * @return the bucket equivalent to the key or -(bucket) as an empty slot
@@ -344,8 +350,8 @@ public class Storage<T> extends AbstractSet<T> {
     // -------------- factories --------------------
     /**
      * A factory for default hash implementation.
-     * @return a hash implementation that just delegates to object's own
-     * hashCode and equals.
+     * @param <O> type for hash
+     * @return a hash implementation that just delegates to object's own hashCode and equals.
      */
     public static <O> Hash<O, O> defaultHash() {
         return new Hash<O, O>() {
diff --git a/src/org/openstreetmap/josm/data/osm/User.java b/src/org/openstreetmap/josm/data/osm/User.java
index 9969839..f98e9e1 100644
--- a/src/org/openstreetmap/josm/data/osm/User.java
+++ b/src/org/openstreetmap/josm/data/osm/User.java
@@ -188,7 +188,11 @@ public final class User {
         return uid;
     }
 
-    /** private constructor, only called from get method. */
+    /**
+     * Private constructor, only called from get method.
+     * @param uid user id
+     * @param name user name
+     */
     private User(long uid, String name) {
         this.uid = uid;
         if (name != null) {
diff --git a/src/org/openstreetmap/josm/data/osm/Way.java b/src/org/openstreetmap/josm/data/osm/Way.java
index 88c3d6e..262636f 100644
--- a/src/org/openstreetmap/josm/data/osm/Way.java
+++ b/src/org/openstreetmap/josm/data/osm/Way.java
@@ -79,6 +79,8 @@ public final class Way extends OsmPrimitive implements IWay {
 
     /**
      * Prevent directly following identical nodes in ways.
+     * @param nodes list of nodes
+     * @return {@code nodes} with consecutive identical nodes removed
      */
     private static List<Node> removeDouble(List<Node> nodes) {
         Node last = null;
diff --git a/src/org/openstreetmap/josm/data/osm/WaySegment.java b/src/org/openstreetmap/josm/data/osm/WaySegment.java
index c395b28..5933b4a 100644
--- a/src/org/openstreetmap/josm/data/osm/WaySegment.java
+++ b/src/org/openstreetmap/josm/data/osm/WaySegment.java
@@ -47,6 +47,10 @@ public final class WaySegment implements Comparable<WaySegment> {
 
     /**
      * Determines and returns the way segment for the given way and node pair.
+     * @param way way
+     * @param first first node
+     * @param second second node
+     * @return way segment
      * @throws IllegalArgumentException if the node pair is not part of way
      */
     public static WaySegment forNodePair(Way way, Node first, Node second) {
diff --git a/src/org/openstreetmap/josm/data/osm/event/DataSetListener.java b/src/org/openstreetmap/josm/data/osm/event/DataSetListener.java
index 1150a23..2a6a858 100644
--- a/src/org/openstreetmap/josm/data/osm/event/DataSetListener.java
+++ b/src/org/openstreetmap/josm/data/osm/event/DataSetListener.java
@@ -60,6 +60,7 @@ public interface DataSetListener {
     /**
      * Called after big changes in dataset. Usually other events are stopped using Dataset.beginUpdate() and
      * after operation is completed (Dataset.endUpdate()), {@link #dataChanged(DataChangedEvent event)} is called.
+     * @param event data change event
      */
     void dataChanged(DataChangedEvent event);
 }
diff --git a/src/org/openstreetmap/josm/data/osm/visitor/paint/LineClip.java b/src/org/openstreetmap/josm/data/osm/visitor/paint/LineClip.java
index 2d8a756..0f9960c 100644
--- a/src/org/openstreetmap/josm/data/osm/visitor/paint/LineClip.java
+++ b/src/org/openstreetmap/josm/data/osm/visitor/paint/LineClip.java
@@ -58,6 +58,14 @@ public class LineClip {
     /**
      * Cohen–Sutherland algorithm.
      * See <a href="https://en.wikipedia.org/wiki/Cohen%E2%80%93Sutherland_algorithm">Wikipedia article</a>
+     * @param x1 X coordinate of first point
+     * @param y1 Y coordinate of first point
+     * @param x2 X coordinate of second point
+     * @param y2 Y coordinate of second point
+     * @param xmin minimal X coordinate
+     * @param ymin minimal Y coordinate
+     * @param xmax maximal X coordinate
+     * @param ymax maximal Y coordinate
      * @return true, if line is visible in the given clip region
      */
     private boolean cohenSutherland(long x1, long y1, long x2, long y2, long xmin, long ymin, long xmax, long ymax) {
@@ -113,7 +121,14 @@ public class LineClip {
 
     /**
      * The outcode of the point.
-     * We cannot use Rectangle.outcode since it does not work with long ints.
+     * We cannot use {@link Rectangle#outcode} since it does not work with long ints.
+     * @param x X coordinate
+     * @param y Y coordinate
+     * @param xmin minimal X coordinate
+     * @param ymin minimal Y coordinate
+     * @param xmax maximal X coordinate
+     * @param ymax maximal Y coordinate
+     * @return outcode
      */
     private static int computeOutCode(long x, long y, long xmin, long ymin, long xmax, long ymax) {
         int code = 0;
diff --git a/src/org/openstreetmap/josm/data/osm/visitor/paint/MapRendererFactory.java b/src/org/openstreetmap/josm/data/osm/visitor/paint/MapRendererFactory.java
index 2630506..f804ab5 100644
--- a/src/org/openstreetmap/josm/data/osm/visitor/paint/MapRendererFactory.java
+++ b/src/org/openstreetmap/josm/data/osm/visitor/paint/MapRendererFactory.java
@@ -257,6 +257,9 @@ public final class MapRendererFactory {
 
     /**
      * <p>Creates an instance of the currently active renderer.</p>
+     * @param g Graphics
+     * @param viewport Navigatable component
+     * @param isInactiveMode {@code true} if the paint visitor shall render OSM objects such that they look inactive
      * @return an instance of the currently active renderer
      *
      * @throws MapRendererFactoryException if creating an instance fails
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 5acdb01..92cca83 100644
--- a/src/org/openstreetmap/josm/data/osm/visitor/paint/StyledMapRenderer.java
+++ b/src/org/openstreetmap/josm/data/osm/visitor/paint/StyledMapRenderer.java
@@ -58,21 +58,21 @@ import org.openstreetmap.josm.data.osm.visitor.paint.relations.Multipolygon;
 import org.openstreetmap.josm.data.osm.visitor.paint.relations.Multipolygon.PolyData;
 import org.openstreetmap.josm.data.osm.visitor.paint.relations.MultipolygonCache;
 import org.openstreetmap.josm.gui.NavigatableComponent;
-import org.openstreetmap.josm.gui.mappaint.AreaElemStyle;
-import org.openstreetmap.josm.gui.mappaint.BoxTextElemStyle;
-import org.openstreetmap.josm.gui.mappaint.BoxTextElemStyle.HorizontalTextAlignment;
-import org.openstreetmap.josm.gui.mappaint.BoxTextElemStyle.VerticalTextAlignment;
-import org.openstreetmap.josm.gui.mappaint.ElemStyle;
 import org.openstreetmap.josm.gui.mappaint.ElemStyles;
-import org.openstreetmap.josm.gui.mappaint.MapImage;
 import org.openstreetmap.josm.gui.mappaint.MapPaintStyles;
-import org.openstreetmap.josm.gui.mappaint.NodeElemStyle;
-import org.openstreetmap.josm.gui.mappaint.NodeElemStyle.Symbol;
-import org.openstreetmap.josm.gui.mappaint.RepeatImageElemStyle.LineImageAlignment;
-import org.openstreetmap.josm.gui.mappaint.StyleCache.StyleList;
-import org.openstreetmap.josm.gui.mappaint.TextElement;
+import org.openstreetmap.josm.gui.mappaint.StyleElementList;
 import org.openstreetmap.josm.gui.mappaint.mapcss.MapCSSStyleSource;
 import org.openstreetmap.josm.gui.mappaint.mapcss.Selector;
+import org.openstreetmap.josm.gui.mappaint.styleelement.AreaElement;
+import org.openstreetmap.josm.gui.mappaint.styleelement.BoxTextElement;
+import org.openstreetmap.josm.gui.mappaint.styleelement.BoxTextElement.HorizontalTextAlignment;
+import org.openstreetmap.josm.gui.mappaint.styleelement.BoxTextElement.VerticalTextAlignment;
+import org.openstreetmap.josm.gui.mappaint.styleelement.MapImage;
+import org.openstreetmap.josm.gui.mappaint.styleelement.NodeElement;
+import org.openstreetmap.josm.gui.mappaint.styleelement.NodeElement.Symbol;
+import org.openstreetmap.josm.gui.mappaint.styleelement.RepeatImageElement.LineImageAlignment;
+import org.openstreetmap.josm.gui.mappaint.styleelement.StyleElement;
+import org.openstreetmap.josm.gui.mappaint.styleelement.TextLabel;
 import org.openstreetmap.josm.tools.CompositeList;
 import org.openstreetmap.josm.tools.Geometry;
 import org.openstreetmap.josm.tools.Geometry.AreaAndPerimeter;
@@ -189,11 +189,11 @@ public class StyledMapRenderer extends AbstractMapRenderer {
     }
 
     private static class StyleRecord implements Comparable<StyleRecord> {
-        private final ElemStyle style;
+        private final StyleElement style;
         private final OsmPrimitive osm;
         private final int flags;
 
-        StyleRecord(ElemStyle style, OsmPrimitive osm, int flags) {
+        StyleRecord(StyleElement style, OsmPrimitive osm, int flags) {
             this.style = style;
             this.osm = osm;
             this.flags = flags;
@@ -222,9 +222,9 @@ public class StyledMapRenderer extends AbstractMapRenderer {
                 return dz;
 
             // simple node on top of icons and shapes
-            if (this.style == NodeElemStyle.SIMPLE_NODE_ELEMSTYLE && other.style != NodeElemStyle.SIMPLE_NODE_ELEMSTYLE)
+            if (this.style == NodeElement.SIMPLE_NODE_ELEMSTYLE && other.style != NodeElement.SIMPLE_NODE_ELEMSTYLE)
                 return 1;
-            if (this.style != NodeElemStyle.SIMPLE_NODE_ELEMSTYLE && other.style == NodeElemStyle.SIMPLE_NODE_ELEMSTYLE)
+            if (this.style != NodeElement.SIMPLE_NODE_ELEMSTYLE && other.style == NodeElement.SIMPLE_NODE_ELEMSTYLE)
                 return -1;
 
             // newer primitives to the front
@@ -417,7 +417,7 @@ public class StyledMapRenderer extends AbstractMapRenderer {
      * @param disabled {@code true} if element is disabled (filtered out)
      * @param text text style to use
      */
-    private void displayText(GlyphVector gv, String s, int x, int y, boolean disabled, TextElement text) {
+    private void displayText(GlyphVector gv, String s, int x, int y, boolean disabled, TextLabel text) {
         if (gv == null && s.isEmpty()) return;
         if (isInactiveMode || disabled) {
             g.setColor(inactiveColor);
@@ -471,7 +471,7 @@ public class StyledMapRenderer extends AbstractMapRenderer {
      * @param text The text to write on the area.
      */
     protected void drawArea(OsmPrimitive osm, Path2D.Double path, Color color,
-            MapImage fillImage, Float extent, Path2D.Double pfClip, boolean disabled, TextElement text) {
+            MapImage fillImage, Float extent, Path2D.Double pfClip, boolean disabled, TextLabel text) {
 
         Shape area = path.createTransformedShape(nc.getAffineTransform());
 
@@ -524,7 +524,7 @@ public class StyledMapRenderer extends AbstractMapRenderer {
         drawAreaText(osm, text, area);
     }
 
-    private void drawAreaText(OsmPrimitive osm, TextElement text, Shape area) {
+    private void drawAreaText(OsmPrimitive osm, TextLabel text, Shape area) {
         if (text != null && isShowNames()) {
             // abort if we can't compose the label to be rendered
             if (text.labelCompositionStrategy == null) return;
@@ -611,7 +611,7 @@ public class StyledMapRenderer extends AbstractMapRenderer {
      * @param disabled If this should be drawn with a special disabled style.
      * @param text The text to write on the area.
      */
-    public void drawArea(Relation r, Color color, MapImage fillImage, Float extent, Float extentThreshold, boolean disabled, TextElement text) {
+    public void drawArea(Relation r, Color color, MapImage fillImage, Float extent, Float extentThreshold, boolean disabled, TextLabel text) {
         Multipolygon multipolygon = MultipolygonCache.getInstance().get(nc, r);
         if (!r.isDisabled() && !multipolygon.getOuterWays().isEmpty()) {
             for (PolyData pd : multipolygon.getCombinedPolygons()) {
@@ -647,7 +647,7 @@ public class StyledMapRenderer extends AbstractMapRenderer {
      * @param disabled If this should be drawn with a special disabled style.
      * @param text The text to write on the area.
      */
-    public void drawArea(Way w, Color color, MapImage fillImage, Float extent, Float extentThreshold, boolean disabled, TextElement text) {
+    public void drawArea(Way w, Color color, MapImage fillImage, Float extent, Float extentThreshold, boolean disabled, TextLabel text) {
         Path2D.Double pfClip = null;
         if (extent != null) {
             if (!usePartialFill(Geometry.getAreaAndPerimeter(w.getNodes()), extent, extentThreshold)) {
@@ -677,12 +677,12 @@ public class StyledMapRenderer extends AbstractMapRenderer {
         return ap.getPerimeter() * extent * scale < threshold * ap.getArea();
     }
 
-    public void drawBoxText(Node n, BoxTextElemStyle bs) {
+    public void drawBoxText(Node n, BoxTextElement bs) {
         if (!isShowNames() || bs == null)
             return;
 
         Point p = nc.getPoint(n);
-        TextElement text = bs.text;
+        TextLabel text = bs.text;
         String s = text.labelCompositionStrategy.compose(n);
         if (s == null) return;
 
@@ -1003,6 +1003,8 @@ public class StyledMapRenderer extends AbstractMapRenderer {
     /**
      * highlights a given point by drawing a rounded rectangle around it. Give the
      * size of the object you want to be highlighted, width is added automatically.
+     * @param p point
+     * @param size highlight size
      */
     private void drawPointHighlight(Point p, int size) {
         g.setColor(highlightColorTransparent);
@@ -1201,7 +1203,7 @@ public class StyledMapRenderer extends AbstractMapRenderer {
      * @param way The way to draw the text on.
      * @param text The text definition (font/.../text content) to draw.
      */
-    public void drawTextOnPath(Way way, TextElement text) {
+    public void drawTextOnPath(Way way, TextLabel text) {
         if (way == null || text == null)
             return;
         String name = text.getString(way);
@@ -1822,27 +1824,27 @@ public class StyledMapRenderer extends AbstractMapRenderer {
         }
 
         public void add(Node osm, int flags) {
-            StyleList sl = styles.get(osm, circum, nc);
-            for (ElemStyle s : sl) {
+            StyleElementList sl = styles.get(osm, circum, nc);
+            for (StyleElement s : sl) {
                 output.add(new StyleRecord(s, osm, flags));
             }
         }
 
         public void add(Relation osm, int flags) {
-            StyleList sl = styles.get(osm, circum, nc);
-            for (ElemStyle s : sl) {
-                if (drawMultipolygon && drawArea && s instanceof AreaElemStyle && (flags & FLAG_DISABLED) == 0) {
+            StyleElementList sl = styles.get(osm, circum, nc);
+            for (StyleElement s : sl) {
+                if (drawMultipolygon && drawArea && s instanceof AreaElement && (flags & FLAG_DISABLED) == 0) {
                     output.add(new StyleRecord(s, osm, flags));
-                } else if (drawRestriction && s instanceof NodeElemStyle) {
+                } else if (drawRestriction && s instanceof NodeElement) {
                     output.add(new StyleRecord(s, osm, flags));
                 }
             }
         }
 
         public void add(Way osm, int flags) {
-            StyleList sl = styles.get(osm, circum, nc);
-            for (ElemStyle s : sl) {
-                if (!(drawArea && (flags & FLAG_DISABLED) == 0) && s instanceof AreaElemStyle) {
+            StyleElementList sl = styles.get(osm, circum, nc);
+            for (StyleElement s : sl) {
+                if (!(drawArea && (flags & FLAG_DISABLED) == 0) && s instanceof AreaElement) {
                     continue;
                 }
                 output.add(new StyleRecord(s, osm, flags));
diff --git a/src/org/openstreetmap/josm/data/osm/visitor/paint/WireframeMapRenderer.java b/src/org/openstreetmap/josm/data/osm/visitor/paint/WireframeMapRenderer.java
index dfaa5d0..aad01af 100644
--- a/src/org/openstreetmap/josm/data/osm/visitor/paint/WireframeMapRenderer.java
+++ b/src/org/openstreetmap/josm/data/osm/visitor/paint/WireframeMapRenderer.java
@@ -221,6 +221,7 @@ public class WireframeMapRenderer extends AbstractMapRenderer implements Visitor
      * @param b Second value
      * @param c Third value
      * @param d Fourth value
+     * @return maximumof {@code a}, {@code b}, {@code c}, {@code d}
      */
     private static int max(int a, int b, int c, int d) {
         return Math.max(Math.max(a, b), Math.max(c, d));
diff --git a/src/org/openstreetmap/josm/data/projection/Ellipsoid.java b/src/org/openstreetmap/josm/data/projection/Ellipsoid.java
index 4ea2136..b791116 100644
--- a/src/org/openstreetmap/josm/data/projection/Ellipsoid.java
+++ b/src/org/openstreetmap/josm/data/projection/Ellipsoid.java
@@ -265,6 +265,7 @@ public final class Ellipsoid {
     /**
      * Returns isometric latitude of phi on given first eccentricity (e)
      * @param phi The local latitude (radians).
+     * @param e first eccentricity
      * @return isometric latitude of phi on first eccentricity (e)
      */
     public double latitudeIsometric(double phi, double e) {
@@ -285,10 +286,11 @@ public final class Ellipsoid {
     }
 
     /**
-     * Returns geographic latitude of isometric latitude of first eccentricity (e)
-     * and epsilon precision
-     * @return geographic latitude of isometric latitude of first eccentricity (e)
-     * and epsilon precision
+     * Returns geographic latitude of isometric latitude of first eccentricity (e) and epsilon precision
+     * @param latIso isometric latitude
+     * @param e first eccentricity
+     * @param epsilon epsilon precision
+     * @return geographic latitude of isometric latitude of first eccentricity (e) and epsilon precision
      */
     public double latitude(double latIso, double e, double epsilon) {
         double lat0 = 2*Math.atan(Math.exp(latIso))-Math.PI/2;
diff --git a/src/org/openstreetmap/josm/data/projection/Projections.java b/src/org/openstreetmap/josm/data/projection/Projections.java
index 60526d4..e9c398a 100644
--- a/src/org/openstreetmap/josm/data/projection/Projections.java
+++ b/src/org/openstreetmap/josm/data/projection/Projections.java
@@ -282,6 +282,12 @@ public final class Projections {
         return proj;
     }
 
+    /**
+     * Get a list of all supported projection codes.
+     *
+     * @return all supported projection codes
+     * @see #getProjectionByCode(java.lang.String)
+     */
     public static Collection<String> getAllProjectionCodes() {
         return Collections.unmodifiableCollection(allCodes);
     }
diff --git a/src/org/openstreetmap/josm/data/projection/datum/Datum.java b/src/org/openstreetmap/josm/data/projection/datum/Datum.java
index 5b65ea0..16cf527 100644
--- a/src/org/openstreetmap/josm/data/projection/datum/Datum.java
+++ b/src/org/openstreetmap/josm/data/projection/datum/Datum.java
@@ -29,13 +29,16 @@ public interface Datum {
     Ellipsoid getEllipsoid();
 
     /**
-     * Convert lat/lon from this datum to WGS84 datum.
+     * Convert lat/lon from this datum to {@link Ellipsoid#WGS84} datum.
+     * @param ll original lat/lon in this datum
+     * @return lat/lon converted to WGS84
      */
     LatLon toWGS84(LatLon ll);
 
     /**
-     * Convert lat/lon from WGS84 to this datum.
+     * Convert lat/lon from {@link Ellipsoid#WGS84} to this datum.
+     * @param ll original lat/lon in WGS84
+     * @return converted lat/lon in this datum
      */
     LatLon fromWGS84(LatLon ll);
-
 }
diff --git a/src/org/openstreetmap/josm/data/projection/datum/NTV2GridShift.java b/src/org/openstreetmap/josm/data/projection/datum/NTV2GridShift.java
index 407cf46..3df6f5d 100644
--- a/src/org/openstreetmap/josm/data/projection/datum/NTV2GridShift.java
+++ b/src/org/openstreetmap/josm/data/projection/datum/NTV2GridShift.java
@@ -22,6 +22,7 @@ package org.openstreetmap.josm.data.projection.datum;
 import java.io.Serializable;
 
 import org.openstreetmap.josm.data.coor.LatLon;
+import org.openstreetmap.josm.data.projection.Ellipsoid;
 
 /**
  * A value object for storing Longitude and Latitude of a point, the
@@ -38,7 +39,7 @@ public class NTV2GridShift implements Serializable {
 
     private static final long serialVersionUID = 1L;
 
-    private static final double METRE_PER_SECOND = 2.0 * Math.PI * 6378137.0 / 3600.0 / 360.0;
+    private static final double METRE_PER_SECOND = 2.0 * Math.PI * Ellipsoid.WGS84.a / 3600.0 / 360.0;
     private static final double RADIANS_PER_SECOND = 2.0 * Math.PI / 3600.0 / 360.0;
     private double lon;
     private double lat;
diff --git a/src/org/openstreetmap/josm/data/projection/proj/LambertConformalConic.java b/src/org/openstreetmap/josm/data/projection/proj/LambertConformalConic.java
index 3c88a50..a57356b 100644
--- a/src/org/openstreetmap/josm/data/projection/proj/LambertConformalConic.java
+++ b/src/org/openstreetmap/josm/data/projection/proj/LambertConformalConic.java
@@ -129,6 +129,8 @@ public class LambertConformalConic extends AbstractProj {
 
     /**
      * auxiliary function t
+     * @param lat_rad latitude in radians
+     * @return result
      */
     protected double t(double lat_rad) {
         return tan(PI/4 - lat_rad / 2.0)
@@ -137,6 +139,8 @@ public class LambertConformalConic extends AbstractProj {
 
     /**
      * auxiliary function m
+     * @param lat_rad latitude in radians
+     * @return result
      */
     protected double m(double lat_rad) {
         return cos(lat_rad) / (sqrt(1 - e * e * pow(sin(lat_rad), 2)));
diff --git a/src/org/openstreetmap/josm/data/validation/OsmValidator.java b/src/org/openstreetmap/josm/data/validation/OsmValidator.java
index 2c66c9e..eed934e 100644
--- a/src/org/openstreetmap/josm/data/validation/OsmValidator.java
+++ b/src/org/openstreetmap/josm/data/validation/OsmValidator.java
@@ -228,6 +228,7 @@ public class OsmValidator implements LayerChangeListener {
 
     /**
      * Returns the instance of the given test class.
+     * @param <T> testClass type
      * @param testClass The class of test to retrieve
      * @return the instance of the given test class, if any, or {@code null}
      * @since 6670
diff --git a/src/org/openstreetmap/josm/data/validation/routines/DomainValidator.java b/src/org/openstreetmap/josm/data/validation/routines/DomainValidator.java
index 11614fa..41dacff 100644
--- a/src/org/openstreetmap/josm/data/validation/routines/DomainValidator.java
+++ b/src/org/openstreetmap/josm/data/validation/routines/DomainValidator.java
@@ -120,7 +120,10 @@ public final class DomainValidator extends AbstractValidator {
        return DOMAIN_VALIDATOR;
     }
 
-    /** Private constructor. */
+    /**
+     * Private constructor.
+     * @param allowLocal whether to allow local domains
+     */
     private DomainValidator(boolean allowLocal) {
        this.allowLocal = allowLocal;
     }
diff --git a/src/org/openstreetmap/josm/data/validation/routines/RegexValidator.java b/src/org/openstreetmap/josm/data/validation/routines/RegexValidator.java
index 035d2f0..25a1ce2 100644
--- a/src/org/openstreetmap/josm/data/validation/routines/RegexValidator.java
+++ b/src/org/openstreetmap/josm/data/validation/routines/RegexValidator.java
@@ -31,7 +31,6 @@ import java.util.regex.Pattern;
  *         String[] regexs = new String[] {...};
  *         RegexValidator validator = new RegexValidator(regexs, false);
  * </pre>
- * <p>
  * <ul>
  *   <li>Validate <code>true</code> or <code>false</code>:
  *   <ul>
diff --git a/src/org/openstreetmap/josm/data/validation/tests/MapCSSTagChecker.java b/src/org/openstreetmap/josm/data/validation/tests/MapCSSTagChecker.java
index 3bf60d8..d1776ef 100644
--- a/src/org/openstreetmap/josm/data/validation/tests/MapCSSTagChecker.java
+++ b/src/org/openstreetmap/josm/data/validation/tests/MapCSSTagChecker.java
@@ -162,6 +162,10 @@ public class MapCSSTagChecker extends Test.TagTest {
 
         /**
          * Evaluates given object as {@link Expression} or {@link String} on the matched {@link OsmPrimitive} and {@code matchingSelector}.
+         * @param obj object to evaluate ({@link Expression} or {@link String})
+         * @param p OSM primitive
+         * @param matchingSelector matching selector
+         * @return result string
          */
         private static String evaluateObject(final Object obj, final OsmPrimitive p, final Selector matchingSelector) {
             final String s;
@@ -177,6 +181,8 @@ public class MapCSSTagChecker extends Test.TagTest {
 
         /**
          * Creates a fixing command which executes a {@link ChangePropertyCommand} on the specified tag.
+         * @param obj object to evaluate ({@link Expression} or {@link String})
+         * @return created fix command
          */
         static FixCommand fixAdd(final Object obj) {
             checkObject(obj);
@@ -192,11 +198,12 @@ public class MapCSSTagChecker extends Test.TagTest {
                     return "fixAdd: " + obj;
                 }
             };
-
         }
 
         /**
          * Creates a fixing command which executes a {@link ChangePropertyCommand} to delete the specified key.
+         * @param obj object to evaluate ({@link Expression} or {@link String})
+         * @return created fix command
          */
         static FixCommand fixRemove(final Object obj) {
             checkObject(obj);
@@ -216,6 +223,9 @@ public class MapCSSTagChecker extends Test.TagTest {
 
         /**
          * Creates a fixing command which executes a {@link ChangePropertyKeyCommand} on the specified keys.
+         * @param oldKey old key
+         * @param newKey new key
+         * @return created fix command
          */
         static FixCommand fixChangeKey(final String oldKey, final String newKey) {
             return new FixCommand() {
@@ -415,6 +425,11 @@ public class MapCSSTagChecker extends Test.TagTest {
         /**
          * Determines the {@code index}-th key/value/tag (depending on {@code type}) of the
          * {@link org.openstreetmap.josm.gui.mappaint.mapcss.Selector.GeneralSelector}.
+         * @param matchingSelector matching selector
+         * @param index index
+         * @param type selector type ("key", "value" or "tag")
+         * @param p OSM primitive
+         * @return argument value, can be {@code null}
          */
         static String determineArgument(Selector.GeneralSelector matchingSelector, int index, String type, OsmPrimitive p) {
             try {
@@ -446,6 +461,10 @@ public class MapCSSTagChecker extends Test.TagTest {
         /**
          * Replaces occurrences of <code>{i.key}</code>, <code>{i.value}</code>, <code>{i.tag}</code> in {@code s} by the corresponding
          * key/value/tag of the {@code index}-th {@link Condition} of {@code matchingSelector}.
+         * @param matchingSelector matching selector
+         * @param s any string
+         * @param p OSM primitive
+         * @return string with arguments inserted
          */
         static String insertArguments(Selector matchingSelector, String s, OsmPrimitive p) {
             if (s != null && matchingSelector instanceof Selector.ChildOrParentSelector) {
@@ -493,6 +512,7 @@ public class MapCSSTagChecker extends Test.TagTest {
 
         /**
          * Constructs a (localized) message for this deprecation check.
+         * @param p OSM primitive
          *
          * @return a message
          */
@@ -512,6 +532,7 @@ public class MapCSSTagChecker extends Test.TagTest {
 
         /**
          * Constructs a (localized) description for this deprecation check.
+         * @param p OSM primitive
          *
          * @return a description (possibly with alternative suggestions)
          * @see #getDescriptionForMatchingSelector
@@ -529,6 +550,8 @@ public class MapCSSTagChecker extends Test.TagTest {
          * Constructs a (localized) description for this deprecation check
          * where any placeholders are replaced by values of the matched selector.
          *
+         * @param matchingSelector matching selector
+         * @param p OSM primitive
          * @return a description (possibly with alternative suggestions)
          */
         String getDescriptionForMatchingSelector(OsmPrimitive p, Selector matchingSelector) {
diff --git a/src/org/openstreetmap/josm/data/validation/tests/MultipolygonTest.java b/src/org/openstreetmap/josm/data/validation/tests/MultipolygonTest.java
index 79b056d..d7b5fa6 100644
--- a/src/org/openstreetmap/josm/data/validation/tests/MultipolygonTest.java
+++ b/src/org/openstreetmap/josm/data/validation/tests/MultipolygonTest.java
@@ -30,7 +30,7 @@ import org.openstreetmap.josm.data.validation.Severity;
 import org.openstreetmap.josm.data.validation.Test;
 import org.openstreetmap.josm.data.validation.TestError;
 import org.openstreetmap.josm.gui.DefaultNameFormatter;
-import org.openstreetmap.josm.gui.mappaint.AreaElemStyle;
+import org.openstreetmap.josm.gui.mappaint.styleelement.AreaElement;
 import org.openstreetmap.josm.gui.mappaint.ElemStyles;
 import org.openstreetmap.josm.gui.mappaint.MapPaintStyles;
 import org.openstreetmap.josm.gui.progress.ProgressMonitor;
@@ -181,7 +181,7 @@ public class MultipolygonTest extends Test {
             }
 
             if (styles != null && !"boundary".equals(r.get("type"))) {
-                AreaElemStyle area = ElemStyles.getAreaElemStyle(r, false);
+                AreaElement area = ElemStyles.getAreaElemStyle(r, false);
                 boolean areaStyle = area != null;
                 // If area style was not found for relation then use style of ways
                 if (area == null) {
@@ -205,7 +205,7 @@ public class MultipolygonTest extends Test {
 
                 if (area != null) {
                     for (Way wInner : polygon.getInnerWays()) {
-                        AreaElemStyle areaInner = ElemStyles.getAreaElemStyle(wInner, false);
+                        AreaElement areaInner = ElemStyles.getAreaElemStyle(wInner, false);
 
                         if (areaInner != null && area.equals(areaInner)) {
                             List<OsmPrimitive> l = new ArrayList<>();
@@ -217,7 +217,7 @@ public class MultipolygonTest extends Test {
                         }
                     }
                     for (Way wOuter : polygon.getOuterWays()) {
-                        AreaElemStyle areaOuter = ElemStyles.getAreaElemStyle(wOuter, false);
+                        AreaElement areaOuter = ElemStyles.getAreaElemStyle(wOuter, false);
                         if (areaOuter != null) {
                             List<OsmPrimitive> l = new ArrayList<>();
                             l.add(r);
diff --git a/src/org/openstreetmap/josm/data/validation/tests/PowerLines.java b/src/org/openstreetmap/josm/data/validation/tests/PowerLines.java
index 7aa40de..a9ed009 100644
--- a/src/org/openstreetmap/josm/data/validation/tests/PowerLines.java
+++ b/src/org/openstreetmap/josm/data/validation/tests/PowerLines.java
@@ -12,6 +12,7 @@ import java.util.List;
 import java.util.Map;
 
 import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.actions.search.SearchCompiler.InDataSourceArea;
 import org.openstreetmap.josm.command.ChangePropertyCommand;
 import org.openstreetmap.josm.command.Command;
 import org.openstreetmap.josm.data.osm.Node;
@@ -26,6 +27,7 @@ import org.openstreetmap.josm.data.validation.Test;
 import org.openstreetmap.josm.data.validation.TestError;
 import org.openstreetmap.josm.gui.progress.ProgressMonitor;
 import org.openstreetmap.josm.tools.Geometry;
+import org.openstreetmap.josm.tools.Predicate;
 
 /**
  * Checks for nodes in power lines/minor_lines that do not have a power=tower/pole tag.<br>
@@ -44,6 +46,8 @@ public class PowerLines extends Test {
     /** Values for {@code power} key interpreted as allowed power items */
     protected static final Collection<String> POWER_ALLOWED_TAGS = Arrays.asList("switch", "transformer", "busbar", "generator", "switchgear");
 
+    protected static final Predicate<OsmPrimitive> IN_DOWNLOADED_AREA = new InDataSourceArea(false);
+
     private final Map<Way, String> towerPoleTagMap = new HashMap<>();
 
     private final List<PowerLineError> potentialErrors = new ArrayList<>();
@@ -66,7 +70,7 @@ public class PowerLines extends Test {
                 boolean canFix = false;
                 for (Node n : w.getNodes()) {
                     if (!isPowerTower(n)) {
-                        if (!isPowerAllowed(n)) {
+                        if (!isPowerAllowed(n) && IN_DOWNLOADED_AREA.evaluate(n)) {
                             if (!w.isFirstLastNode(n) || !isPowerStation(n)) {
                                 potentialErrors.add(new PowerLineError(n, w));
                                 erroneous = true;
diff --git a/src/org/openstreetmap/josm/data/validation/tests/TurnrestrictionTest.java b/src/org/openstreetmap/josm/data/validation/tests/TurnrestrictionTest.java
index 74278c5..70a9fa7 100644
--- a/src/org/openstreetmap/josm/data/validation/tests/TurnrestrictionTest.java
+++ b/src/org/openstreetmap/josm/data/validation/tests/TurnrestrictionTest.java
@@ -38,6 +38,7 @@ public class TurnrestrictionTest extends Test {
     protected static final int MIX_VIA = 1813;
     protected static final int UNCONNECTED_VIA = 1814;
     protected static final int SUPERFLUOUS = 1815;
+    protected static final int FROM_EQUALS_TO = 1816;
 
     /**
      * Constructs a new {@code TurnrestrictionTest}.
@@ -142,6 +143,10 @@ public class TurnrestrictionTest extends Test {
             errors.add(new TestError(this, Severity.ERROR, tr("No \"to\" way found"), NO_TO, r));
             return;
         }
+        if (fromWay.equals(toWay)) {
+            errors.add(new TestError(this, r.hasTag("restriction", "no_u_turn") ? Severity.OTHER : Severity.WARNING,
+                    tr("\"from\" way equals \"to\" way"), FROM_EQUALS_TO, r));
+        }
         if (via.isEmpty()) {
             errors.add(new TestError(this, Severity.ERROR, tr("No \"via\" node or way found"), NO_VIA, r));
             return;
diff --git a/src/org/openstreetmap/josm/gui/FileDrop.java b/src/org/openstreetmap/josm/gui/FileDrop.java
index 9ad1a69..26d7771 100644
--- a/src/org/openstreetmap/josm/gui/FileDrop.java
+++ b/src/org/openstreetmap/josm/gui/FileDrop.java
@@ -33,6 +33,7 @@ import javax.swing.border.Border;
 
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.actions.OpenFileAction;
+import org.openstreetmap.josm.gui.FileDrop.TransferableObject;
 
 // CHECKSTYLE.OFF: HideUtilityClassConstructor
 
@@ -64,7 +65,6 @@ import org.openstreetmap.josm.actions.OpenFileAction;
  * You can turn on some debugging features by passing a <tt>PrintStream</tt>
  * object (such as <tt>System.out</tt>) into the full constructor. A <tt>null</tt>
  * value will result in no extra debugging information being output.
- * <p>
  *
  * <p>I'm releasing this code into the Public Domain. Enjoy.
  * </p>
diff --git a/src/org/openstreetmap/josm/gui/IconToggleButton.java b/src/org/openstreetmap/josm/gui/IconToggleButton.java
index 3a4492c..5ef07c5 100644
--- a/src/org/openstreetmap/josm/gui/IconToggleButton.java
+++ b/src/org/openstreetmap/josm/gui/IconToggleButton.java
@@ -30,6 +30,7 @@ public class IconToggleButton extends JToggleButton implements HideableButton, P
 
     /**
      * Construct the toggle button with the given action.
+     * @param action associated action
      */
     public IconToggleButton(Action action) {
         this(action, false);
@@ -37,6 +38,8 @@ public class IconToggleButton extends JToggleButton implements HideableButton, P
 
     /**
      * Construct the toggle button with the given action.
+     * @param action associated action
+     * @param isExpert {@code true} if it's reserved to expert mode
      */
     public IconToggleButton(Action action, boolean isExpert) {
         super(action);
diff --git a/src/org/openstreetmap/josm/gui/ImageryMenu.java b/src/org/openstreetmap/josm/gui/ImageryMenu.java
index 66889b4..e3189e7 100644
--- a/src/org/openstreetmap/josm/gui/ImageryMenu.java
+++ b/src/org/openstreetmap/josm/gui/ImageryMenu.java
@@ -107,6 +107,7 @@ public class ImageryMenu extends JMenu implements LayerChangeListener {
      * @param subMenu submenu in that contains plugin-managed additional imagery layers
      */
     public ImageryMenu(JMenu subMenu) {
+        /* I18N: mnemonic: I */
         super(trc("menu", "Imagery"));
         setupMenuScroller();
         MapView.addLayerChangeListener(this);
diff --git a/src/org/openstreetmap/josm/gui/MainApplication.java b/src/org/openstreetmap/josm/gui/MainApplication.java
index a088311..f051cb3 100644
--- a/src/org/openstreetmap/josm/gui/MainApplication.java
+++ b/src/org/openstreetmap/josm/gui/MainApplication.java
@@ -3,6 +3,8 @@ package org.openstreetmap.josm.gui;
 
 import static org.openstreetmap.josm.tools.I18n.tr;
 import static org.openstreetmap.josm.tools.I18n.trn;
+import gnu.getopt.Getopt;
+import gnu.getopt.LongOpt;
 
 import java.awt.Dimension;
 import java.awt.Image;
@@ -47,6 +49,7 @@ import javax.swing.SwingUtilities;
 import org.jdesktop.swinghelper.debug.CheckThreadViolationRepaintManager;
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.actions.PreferencesAction;
+import org.openstreetmap.josm.actions.RestartAction;
 import org.openstreetmap.josm.data.AutosaveTask;
 import org.openstreetmap.josm.data.CustomConfigurator;
 import org.openstreetmap.josm.data.Version;
@@ -71,9 +74,6 @@ import org.openstreetmap.josm.tools.OsmUrlToBounds;
 import org.openstreetmap.josm.tools.PlatformHookWindows;
 import org.openstreetmap.josm.tools.Utils;
 
-import gnu.getopt.Getopt;
-import gnu.getopt.LongOpt;
-
 /**
  * Main window class application.
  *
@@ -582,6 +582,8 @@ public class MainApplication extends Main {
                     }
                     if (wasv6 && !hasv6) {
                         Main.info(tr("Detected no useable IPv6 network, prefering IPv4 over IPv6 after next restart."));
+                        Main.pref.put("validated.ipv6", hasv6); // be sure it is stored before the restart!
+                        new RestartAction().actionPerformed(null);
                     }
                     Main.pref.put("validated.ipv6", hasv6);
                 }
diff --git a/src/org/openstreetmap/josm/gui/MainMenu.java b/src/org/openstreetmap/josm/gui/MainMenu.java
index 7263dda..f09799f 100644
--- a/src/org/openstreetmap/josm/gui/MainMenu.java
+++ b/src/org/openstreetmap/josm/gui/MainMenu.java
@@ -367,7 +367,7 @@ public class MainMenu extends JMenuBar {
     /**
      * imageryMenu contains all imagery-related actions
      */
-    public final ImageryMenu imageryMenu = addMenu(new ImageryMenu(imagerySubMenu), /* I18N: mnemonic: I */ "Imagery", KeyEvent.VK_I, 8, ht("/Menu/Imagery"));
+    public final ImageryMenu imageryMenu = addMenu(new ImageryMenu(imagerySubMenu), /* untranslated name */ "Imagery", KeyEvent.VK_I, 8, ht("/Menu/Imagery"));
     // CHECKSTYLE.ON: LineLength
     /**
      * gpsMenu contains all plugin actions that are related
@@ -534,6 +534,7 @@ public class MainMenu extends JMenuBar {
      *
      * This method handles all the shortcut handling. It also makes sure that actions that are
      * handled by the OS are not duplicated on the menu.
+     * @param <E> group item enum type
      * @param menu to add the action to
      * @param action the action that should get a menu item
      * @param group the item should be added to. Groups are split by a separator.
@@ -555,6 +556,7 @@ public class MainMenu extends JMenuBar {
     /**
      * Add a JosmAction to a menu and automatically prints accelerator if available.
      * Also adds a checkbox that may be toggled.
+     * @param <E> group enum item type
      * @param menu to add the action to
      * @param action the action that should get a menu item
      * @param group the item should be added to. Groups are split by a separator. Use
@@ -572,7 +574,12 @@ public class MainMenu extends JMenuBar {
         return mi;
     }
 
-    /** finds the correct insertion index for a given group and adds separators if necessary */
+    /**
+     * Finds the correct insertion index for a given group and adds separators if necessary
+     * @param menu menu
+     * @param group group number
+     * @return correct insertion index
+     */
     private static int getInsertionIndexForGroup(JMenu menu, int group) {
         if (group < 0)
             return -1;
@@ -616,6 +623,7 @@ public class MainMenu extends JMenuBar {
 
     /**
      * Adds the given menu on the given position to the main menu.
+     * @param <T> menu type
      *
      * @param menu              the menu to add
      * @param name              the untranslated name (used as identifier for shortcut registration)
@@ -809,13 +817,11 @@ public class MainMenu extends JMenuBar {
             }
         });
 
-        helpMenu.add(statusreport);
-        helpMenu.add(reportbug);
+        add(helpMenu, statusreport);
+        add(helpMenu, reportbug);
         helpMenu.addSeparator();
 
-        // FIXME why is help not a JosmAction?
-        helpMenu.add(help).setAccelerator(Shortcut.registerShortcut("system:help", tr("Help"), KeyEvent.VK_F1,
-                Shortcut.DIRECT).getKeyStroke());
+        add(helpMenu, help);
         add(helpMenu, about);
         add(Box.createHorizontalGlue());
         final DisableShortcutsOnFocusGainedTextField searchField = createSearchField();
diff --git a/src/org/openstreetmap/josm/gui/MapFrame.java b/src/org/openstreetmap/josm/gui/MapFrame.java
index cda4e9a..1c61150 100644
--- a/src/org/openstreetmap/josm/gui/MapFrame.java
+++ b/src/org/openstreetmap/josm/gui/MapFrame.java
@@ -329,6 +329,7 @@ public class MapFrame extends JPanel implements Destroyable, LayerChangeListener
     /**
      * Call this to add new toggle dialogs to the left button-list
      * @param dlg The toggle dialog. It must not be in the list already.
+     * @param isExpert {@code true} if it's reserved to expert mode
      * @return button allowing to toggle the dialog
      */
     public IconToggleButton addToggleDialog(final ToggleDialog dlg, boolean isExpert) {
@@ -630,6 +631,7 @@ public class MapFrame extends JPanel implements Destroyable, LayerChangeListener
 
     /**
      * Remove panel from top of MapView by class
+     * @param type type of panel
      */
     public void removeTopPanel(Class<?> type) {
         int n = leftPanel.getComponentCount();
@@ -643,8 +645,11 @@ public class MapFrame extends JPanel implements Destroyable, LayerChangeListener
         }
     }
 
-    /*
+    /**
      * Find panel on top of MapView by class
+     * @param <T> type
+     * @param type type of panel
+     * @return found panel
      */
     public <T> T getTopPanel(Class<T> type) {
         int n = leftPanel.getComponentCount();
@@ -657,7 +662,8 @@ public class MapFrame extends JPanel implements Destroyable, LayerChangeListener
     }
 
     /**
-     * Add component @param c on top of MapView
+     * Add component {@code c} on top of MapView
+     * @param c component
      */
     public void addTopPanel(Component c) {
         leftPanel.add(c, GBC.eol().fill(GBC.HORIZONTAL), leftPanel.getComponentCount()-1);
@@ -669,6 +675,11 @@ public class MapFrame extends JPanel implements Destroyable, LayerChangeListener
      * Interface to notify listeners of the change of the mapMode.
      */
     public interface MapModeChangeListener {
+        /**
+         * Trigerred when map mode changes.
+         * @param oldMapMode old map mode
+         * @param newMapMode new map mode
+         */
         void mapModeChange(MapMode oldMapMode, MapMode newMapMode);
     }
 
diff --git a/src/org/openstreetmap/josm/gui/MapStatus.java b/src/org/openstreetmap/josm/gui/MapStatus.java
index d620410..0a6fd0a 100644
--- a/src/org/openstreetmap/josm/gui/MapStatus.java
+++ b/src/org/openstreetmap/josm/gui/MapStatus.java
@@ -91,7 +91,9 @@ import org.openstreetmap.josm.tools.Predicate;
  */
 public class MapStatus extends JPanel implements Helpful, Destroyable, PreferenceChangedListener {
 
-    private static final DecimalFormat ONE_DECIMAL_PLACE = new DecimalFormat("0.0");
+    private static final DecimalFormat ONE_DECIMAL_PLACE = new DecimalFormat(
+            Main.pref.get("statusbar.decimal-format", "0.0")); // change of preference requires restart
+    private static final double DISTANCE_THRESHOLD = Main.pref.getDouble("statusbar.distance-threshold", 0.01);
 
     /**
      * Property for map status background color.
@@ -184,9 +186,11 @@ public class MapStatus extends JPanel implements Helpful, Destroyable, Preferenc
     private final ImageLabel lonText = new ImageLabel("lon",
             tr("The geographic longitude at the mouse pointer."), 11, PROP_BACKGROUND_COLOR.get());
     private final ImageLabel headingText = new ImageLabel("heading",
-            tr("The (compass) heading of the line segment being drawn."), 6, PROP_BACKGROUND_COLOR.get());
+            tr("The (compass) heading of the line segment being drawn."),
+            ONE_DECIMAL_PLACE.format(360).length() + 1, PROP_BACKGROUND_COLOR.get());
     private final ImageLabel angleText = new ImageLabel("angle",
-            tr("The angle between the previous and the current way segment."), 6, PROP_BACKGROUND_COLOR.get());
+            tr("The angle between the previous and the current way segment."),
+            ONE_DECIMAL_PLACE.format(360).length() + 1, PROP_BACKGROUND_COLOR.get());
     private final ImageLabel distText = new ImageLabel("dist",
             tr("The length of the new way segment being drawn."), 10, PROP_BACKGROUND_COLOR.get());
     private final ImageLabel nameText = new ImageLabel("name",
@@ -756,7 +760,10 @@ public class MapStatus extends JPanel implements Helpful, Destroyable, Preferenc
 
         private final JMenuItem jumpButton = add(Main.main.menu.jumpToAct);
 
+        /** Icons for selecting {@link SystemOfMeasurement} */
         private final Collection<JCheckBoxMenuItem> somItems = new ArrayList<>();
+        /** Icons for selecting {@link CoordinateFormat}  */
+        private final Collection<JCheckBoxMenuItem> coordinateFormatItems = new ArrayList<>();
 
         private final JSeparator separator = new JSeparator();
 
@@ -779,6 +786,16 @@ public class MapStatus extends JPanel implements Helpful, Destroyable, Preferenc
                 somItems.add(item);
                 add(item);
             }
+            for (final CoordinateFormat format : CoordinateFormat.values()) {
+                JCheckBoxMenuItem item = new JCheckBoxMenuItem(new AbstractAction(format.getDisplayName()) {
+                    @Override
+                    public void actionPerformed(ActionEvent e) {
+                        CoordinateFormat.setCoordinateFormat(format);
+                    }
+                });
+                coordinateFormatItems.add(item);
+                add(item);
+            }
 
             add(separator);
             add(doNotHide);
@@ -793,7 +810,12 @@ public class MapStatus extends JPanel implements Helpful, Destroyable, Preferenc
                         item.setSelected(item.getText().equals(currentSOM));
                         item.setVisible(distText.equals(invoker));
                     }
-                    separator.setVisible(distText.equals(invoker));
+                    final String currentCorrdinateFormat = CoordinateFormat.getDefaultFormat().getDisplayName();
+                    for (JMenuItem item : coordinateFormatItems) {
+                        item.setSelected(currentCorrdinateFormat.equals(item.getText()));
+                        item.setVisible(latText.equals(invoker) || lonText.equals(invoker));
+                    }
+                    separator.setVisible(distText.equals(invoker) || latText.equals(invoker) || lonText.equals(invoker));
                     doNotHide.setSelected(Main.pref.getBoolean("statusbar.always-visible", true));
                 }
 
@@ -998,7 +1020,7 @@ public class MapStatus extends JPanel implements Helpful, Destroyable, Preferenc
      */
     public void setDist(double dist) {
         distValue = dist;
-        distText.setText(dist < 0 ? "--" : NavigatableComponent.getDistText(dist, ONE_DECIMAL_PLACE, 0.01));
+        distText.setText(dist < 0 ? "--" : NavigatableComponent.getDistText(dist, ONE_DECIMAL_PLACE, DISTANCE_THRESHOLD));
     }
 
     /**
diff --git a/src/org/openstreetmap/josm/gui/MapView.java b/src/org/openstreetmap/josm/gui/MapView.java
index 0567630..ad767f2 100644
--- a/src/org/openstreetmap/josm/gui/MapView.java
+++ b/src/org/openstreetmap/josm/gui/MapView.java
@@ -464,6 +464,7 @@ implements PropertyChangeListener, PreferenceChangedListener, OsmDataLayer.Layer
      *     becomes active</li>
      *   <li>otherwise, the top most layer of any type becomes active</li>
      * </ul>
+     * @param layersList lit of layers
      *
      * @return the next active data layer
      */
@@ -836,6 +837,7 @@ implements PropertyChangeListener, PreferenceChangedListener, OsmDataLayer.Layer
      * <pre>
      *     List<WMSLayer> wmsLayers = getLayersOfType(WMSLayer.class);
      * </pre>
+     * @param <T> layer type
      *
      * @param ofType The layer type.
      * @return an unmodifiable list of layers of a certain type.
diff --git a/src/org/openstreetmap/josm/gui/NavigatableComponent.java b/src/org/openstreetmap/josm/gui/NavigatableComponent.java
index f700eff..b7f2ddf 100644
--- a/src/org/openstreetmap/josm/gui/NavigatableComponent.java
+++ b/src/org/openstreetmap/josm/gui/NavigatableComponent.java
@@ -207,7 +207,7 @@ public class NavigatableComponent extends JComponent implements Helpful {
 
     /**
      * Get the distance in meter that correspond to 100 px on screen.
-     * 
+     *
      * @return the distance in meter that correspond to 100 px on screen
      */
     public double getDist100Pixel() {
@@ -216,7 +216,7 @@ public class NavigatableComponent extends JComponent implements Helpful {
 
     /**
      * Get the distance in meter that correspond to 100 px on screen.
-     * 
+     *
      * @param alwaysPositive if true, makes sure the return value is always
      * > 0. (Two points 100 px apart can appear to be identical if the user
      * has zoomed out a lot and the projection code does something funny.)
@@ -497,8 +497,8 @@ public class NavigatableComponent extends JComponent implements Helpful {
     }
 
     /**
-     * Create a thread that moves the viewport to the given center in an
-     * animated fashion.
+     * Create a thread that moves the viewport to the given center in an animated fashion.
+     * @param newCenter new east/north center
      */
     public void smoothScrollTo(EastNorth newCenter) {
         // FIXME make these configurable.
@@ -582,6 +582,7 @@ public class NavigatableComponent extends JComponent implements Helpful {
 
     /**
      * Set the new dimension to the view.
+     * @param box box to zoom to
      */
     public void zoomTo(BoundingXYVisitor box) {
         if (box == null) {
@@ -661,15 +662,14 @@ public class NavigatableComponent extends JComponent implements Helpful {
     }
 
     /**
-     * The *result* does not depend on the current map selection state,
-     * neither does the result *order*.
+     * The *result* does not depend on the current map selection state, neither does the result *order*.
      * It solely depends on the distance to point p.
+     * @param p point
+     * @param predicate predicate to match
      *
-     * @return a sorted map with the keys representing the distance of
-     *      their associated nodes to point p.
+     * @return a sorted map with the keys representing the distance of their associated nodes to point p.
      */
-    private Map<Double, List<Node>> getNearestNodesImpl(Point p,
-            Predicate<OsmPrimitive> predicate) {
+    private Map<Double, List<Node>> getNearestNodesImpl(Point p, Predicate<OsmPrimitive> predicate) {
         Map<Double, List<Node>> nearestMap = new TreeMap<>();
         DataSet ds = getCurrentDataSet();
 
@@ -767,17 +767,16 @@ public class NavigatableComponent extends JComponent implements Helpful {
      * Else the nearest new/id=0 node within about the same distance
      * as the true nearest node is returned.
      *
-     * If no such node is found either, the true nearest
-     * node to p is returned.
+     * If no such node is found either, the true nearest node to p is returned.
      *
      * Finally, if a node is not found at all, null is returned.
      *
      * @param p the screen point
      * @param predicate this parameter imposes a condition on the returned object, e.g.
      *        give the nearest node that is tagged.
+     * @param useSelected make search depend on selection
      *
-     * @return A node within snap-distance to point p,
-     *      that is chosen by the algorithm described.
+     * @return A node within snap-distance to point p, that is chosen by the algorithm described.
      */
     public final Node getNearestNode(Point p, Predicate<OsmPrimitive> predicate, boolean useSelected) {
         return getNearestNode(p, predicate, useSelected, null);
@@ -794,18 +793,17 @@ public class NavigatableComponent extends JComponent implements Helpful {
      * Else the nearest new/id=0 node within about the same distance
      * as the true nearest node is returned.
      *
-     * If no such node is found either, the true nearest
-     * node to p is returned.
+     * If no such node is found either, the true nearest node to p is returned.
      *
      * Finally, if a node is not found at all, null is returned.
      *
      * @param p the screen point
      * @param predicate this parameter imposes a condition on the returned object, e.g.
      *        give the nearest node that is tagged.
+     * @param useSelected make search depend on selection
      * @param preferredRefs primitives, whose nodes we prefer
      *
-     * @return A node within snap-distance to point p,
-     *      that is chosen by the algorithm described.
+     * @return A node within snap-distance to point p, that is chosen by the algorithm described.
      * @since 6065
      */
     public final Node getNearestNode(Point p, Predicate<OsmPrimitive> predicate,
@@ -871,15 +869,16 @@ public class NavigatableComponent extends JComponent implements Helpful {
     }
 
     /**
-     * The *result* does not depend on the current map selection state,
-     * neither does the result *order*.
+     * The *result* does not depend on the current map selection state, neither does the result *order*.
      * It solely depends on the distance to point p.
+     * @param p the screen point
+     * @param predicate this parameter imposes a condition on the returned object, e.g.
+     *        give the nearest node that is tagged.
      *
      * @return a sorted map with the keys representing the perpendicular
      *      distance of their associated way segments to point p.
      */
-    private Map<Double, List<WaySegment>> getNearestWaySegmentsImpl(Point p,
-            Predicate<OsmPrimitive> predicate) {
+    private Map<Double, List<WaySegment>> getNearestWaySegmentsImpl(Point p, Predicate<OsmPrimitive> predicate) {
         Map<Double, List<WaySegment>> nearestMap = new TreeMap<>();
         DataSet ds = getCurrentDataSet();
 
@@ -1413,17 +1412,25 @@ public class NavigatableComponent extends JComponent implements Helpful {
 
     /**
      * Set new cursor.
+     * @param cursor The new cursor to use.
+     * @param reference A reference object that can be passed to the next set/reset calls to identify the caller.
      */
     public void setNewCursor(Cursor cursor, Object reference) {
         cursorManager.setNewCursor(cursor, reference);
     }
 
+    /**
+     * Set new cursor.
+     * @param cursor the type of predefined cursor
+     * @param reference A reference object that can be passed to the next set/reset calls to identify the caller.
+     */
     public void setNewCursor(int cursor, Object reference) {
         setNewCursor(Cursor.getPredefinedCursor(cursor), reference);
     }
 
     /**
      * Remove the new cursor and reset to previous
+     * @param reference Cursor reference
      */
     public void resetCursor(Object reference) {
         cursorManager.resetCursor(reference);
diff --git a/src/org/openstreetmap/josm/gui/SideButton.java b/src/org/openstreetmap/josm/gui/SideButton.java
index 7da1e8d..88539ba 100644
--- a/src/org/openstreetmap/josm/gui/SideButton.java
+++ b/src/org/openstreetmap/josm/gui/SideButton.java
@@ -24,7 +24,7 @@ import org.openstreetmap.josm.tools.ImageProvider;
  * Button that is usually used in toggle dialogs
  */
 public class SideButton extends JButton implements Destroyable {
-    private static final int iconHeight = 20;
+    private static final int iconHeight = ImageProvider.getImageSizes(ImageProvider.ImageSizes.SIDEBUTTON).height;
 
     private transient PropertyChangeListener propertyChangeListener;
 
diff --git a/src/org/openstreetmap/josm/gui/SplashScreen.java b/src/org/openstreetmap/josm/gui/SplashScreen.java
index 8239636..7c43ed5 100644
--- a/src/org/openstreetmap/josm/gui/SplashScreen.java
+++ b/src/org/openstreetmap/josm/gui/SplashScreen.java
@@ -388,6 +388,7 @@ public class SplashScreen extends JFrame implements ChangeListener {
 
         /**
          * Sets the tasks to displayed. A HTML formatted list is expected.
+         * @param tasks HTML formatted list of tasks
          */
         public void setTasks(String tasks) {
             lblTaskTitle.setText(LABEL_HTML + tasks);
diff --git a/src/org/openstreetmap/josm/gui/bbox/SlippyMapControler.java b/src/org/openstreetmap/josm/gui/bbox/SlippyMapControler.java
index bf2b52c..d3dfcf7 100644
--- a/src/org/openstreetmap/josm/gui/bbox/SlippyMapControler.java
+++ b/src/org/openstreetmap/josm/gui/bbox/SlippyMapControler.java
@@ -63,6 +63,8 @@ public class SlippyMapControler extends MouseAdapter implements MouseMotionListe
 
     /**
      * Constructs a new {@code SlippyMapControler}.
+     * @param navComp navigatable component
+     * @param contentPane content pane
      */
     public SlippyMapControler(SlippyMapBBoxChooser navComp, JPanel contentPane) {
         iSlippyMapChooser = navComp;
diff --git a/src/org/openstreetmap/josm/gui/conflict/pair/nodes/NodeListTableCellRenderer.java b/src/org/openstreetmap/josm/gui/conflict/pair/nodes/NodeListTableCellRenderer.java
index ab8d82b..d62f36d 100644
--- a/src/org/openstreetmap/josm/gui/conflict/pair/nodes/NodeListTableCellRenderer.java
+++ b/src/org/openstreetmap/josm/gui/conflict/pair/nodes/NodeListTableCellRenderer.java
@@ -48,8 +48,9 @@ public  class NodeListTableCellRenderer extends JLabel implements TableCellRende
 
     /**
      * render a node
-     * @param model  the model
+     * @param model the model
      * @param node the node
+     * @param row the row
      * @param isSelected true, if the current row is selected
      */
     protected void renderNode(ListMergeModel<Node>.EntriesTableModel model, Node node, int row, boolean isSelected) {
diff --git a/src/org/openstreetmap/josm/gui/conflict/pair/properties/PropertiesMergeModel.java b/src/org/openstreetmap/josm/gui/conflict/pair/properties/PropertiesMergeModel.java
index 90e3645..0412196 100644
--- a/src/org/openstreetmap/josm/gui/conflict/pair/properties/PropertiesMergeModel.java
+++ b/src/org/openstreetmap/josm/gui/conflict/pair/properties/PropertiesMergeModel.java
@@ -100,6 +100,7 @@ public class PropertiesMergeModel extends Observable {
 
     /**
      * replies true if the current decision for the coordinate conflict is <code>decision</code>
+     * @param decision conflict resolution decision
      *
      * @return true if the current decision for the coordinate conflict is <code>decision</code>;
      *  false, otherwise
@@ -110,6 +111,7 @@ public class PropertiesMergeModel extends Observable {
 
     /**
      * replies true if the current decision for the deleted state conflict is <code>decision</code>
+     * @param decision conflict resolution decision
      *
      * @return true if the current decision for the deleted state conflict is <code>decision</code>;
      *  false, otherwise
diff --git a/src/org/openstreetmap/josm/gui/conflict/tags/MultiValueCellRenderer.java b/src/org/openstreetmap/josm/gui/conflict/tags/MultiValueCellRenderer.java
index 8974b3b..5b5620c 100644
--- a/src/org/openstreetmap/josm/gui/conflict/tags/MultiValueCellRenderer.java
+++ b/src/org/openstreetmap/josm/gui/conflict/tags/MultiValueCellRenderer.java
@@ -108,6 +108,7 @@ public class MultiValueCellRenderer extends JLabel implements TableCellRenderer
 
     /**
      * Sets the text of the tooltip for both renderers, this (the JLabel) and the combobox renderer.
+     * @param decision conflict resolution decision
      */
     protected void renderToolTipText(MultiValueResolutionDecision decision) {
         String toolTipText = null;
diff --git a/src/org/openstreetmap/josm/gui/dialogs/CommandStackDialog.java b/src/org/openstreetmap/josm/gui/dialogs/CommandStackDialog.java
index 698951d..e86f031 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/CommandStackDialog.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/CommandStackDialog.java
@@ -196,6 +196,8 @@ public class CommandStackDialog extends ToggleDialog implements CommandQueueList
 
     /**
      * Wires updater for enabled state to the events. Also updates dialog title if needed.
+     * @param updater updater
+     * @param tree tree on which wire updater
      */
     protected void wireUpdateEnabledStateUpdater(final IEnabledStateUpdating updater, JTree tree) {
         addShowNotifyListener(updater);
@@ -321,6 +323,7 @@ public class CommandStackDialog extends ToggleDialog implements CommandQueueList
      * Wraps a command in a CommandListMutableTreeNode.
      * Recursively adds child commands.
      * @param c the command
+     * @param idx index
      * @return the resulting node
      */
     protected CommandListMutableTreeNode getNodeForCommand(PseudoCommand c, int idx) {
diff --git a/src/org/openstreetmap/josm/gui/dialogs/InspectPrimitiveDialog.java b/src/org/openstreetmap/josm/gui/dialogs/InspectPrimitiveDialog.java
index 2486888..6a69388 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/InspectPrimitiveDialog.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/InspectPrimitiveDialog.java
@@ -38,12 +38,12 @@ import org.openstreetmap.josm.gui.ExtendedDialog;
 import org.openstreetmap.josm.gui.NavigatableComponent;
 import org.openstreetmap.josm.gui.layer.OsmDataLayer;
 import org.openstreetmap.josm.gui.mappaint.Cascade;
-import org.openstreetmap.josm.gui.mappaint.ElemStyle;
+import org.openstreetmap.josm.gui.mappaint.styleelement.StyleElement;
 import org.openstreetmap.josm.gui.mappaint.ElemStyles;
 import org.openstreetmap.josm.gui.mappaint.MapPaintStyles;
 import org.openstreetmap.josm.gui.mappaint.MultiCascade;
 import org.openstreetmap.josm.gui.mappaint.StyleCache;
-import org.openstreetmap.josm.gui.mappaint.StyleCache.StyleList;
+import org.openstreetmap.josm.gui.mappaint.StyleElementList;
 import org.openstreetmap.josm.gui.mappaint.StyleSource;
 import org.openstreetmap.josm.gui.mappaint.mapcss.MapCSSStyleSource;
 import org.openstreetmap.josm.gui.mappaint.xml.XmlStyleSource;
@@ -361,8 +361,8 @@ public class InspectPrimitiveDialog extends ExtendedDialog {
                     }
                 }
                 txtMappaint.append(tr("\n\nList of generated Styles:\n"));
-                StyleList sl = elemstyles.get(osm, scale, nc);
-                for (ElemStyle s : sl) {
+                StyleElementList sl = elemstyles.get(osm, scale, nc);
+                for (StyleElement s : sl) {
                     txtMappaint.append(" * ").append(s).append('\n');
                 }
                 txtMappaint.append("\n\n");
diff --git a/src/org/openstreetmap/josm/gui/dialogs/LayerListDialog.java b/src/org/openstreetmap/josm/gui/dialogs/LayerListDialog.java
index 6b8e83a..3ad8737 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/LayerListDialog.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/LayerListDialog.java
@@ -145,13 +145,11 @@ public class LayerListDialog extends ToggleDialog {
      * to toggle the visibility of the first ten layers.
      */
     private void createVisibilityToggleShortcuts() {
-        final int[] k = {
-                KeyEvent.VK_1, KeyEvent.VK_2, KeyEvent.VK_3, KeyEvent.VK_4, KeyEvent.VK_5,
-                KeyEvent.VK_6, KeyEvent.VK_7, KeyEvent.VK_8, KeyEvent.VK_9, KeyEvent.VK_0};
-
         for (int i = 0; i < 10; i++) {
-            visibilityToggleShortcuts[i] = Shortcut.registerShortcut("subwindow:layers:toggleLayer" + (i+1),
-                    tr("Toggle visibility of layer: {0}", i+1), k[i], Shortcut.ALT);
+            final int i1 = i + 1;
+            /* POSSIBLE SHORTCUTS: 1,2,3,4,5,6,7,8,9,0=10 */
+            visibilityToggleShortcuts[i] = Shortcut.registerShortcut("subwindow:layers:toggleLayer" + i1,
+                    tr("Toggle visibility of layer: {0}", i1), KeyEvent.VK_0 + (i1 % 10), Shortcut.ALT);
             visibilityToggleActions[i] = new ToggleLayerIndexVisibility(i);
             Main.registerActionShortcut(visibilityToggleActions[i], visibilityToggleShortcuts[i]);
         }
@@ -159,6 +157,7 @@ public class LayerListDialog extends ToggleDialog {
 
     /**
      * Creates a layer list and attach it to the given mapView.
+     * @param mapFrame map frame
      */
     protected LayerListDialog(MapFrame mapFrame) {
         super(tr("Layers"), "layerlist", tr("Open a list of all loaded layers."),
@@ -830,6 +829,8 @@ public class LayerListDialog extends ToggleDialog {
 
         /**
          * Constructs a new {@code MergeAction}.
+         * @param layer the layer (null if layer list if specified)
+         * @param layers the layer list (null if a single layer is specified)
          */
         private MergeAction(Layer layer, List<Layer> layers) {
             this.layer = layer;
diff --git a/src/org/openstreetmap/josm/gui/dialogs/MapPaintDialog.java b/src/org/openstreetmap/josm/gui/dialogs/MapPaintDialog.java
index 6ba7e93..7917ab5 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/MapPaintDialog.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/MapPaintDialog.java
@@ -15,15 +15,14 @@ import java.awt.event.ActionListener;
 import java.awt.event.KeyEvent;
 import java.awt.event.MouseEvent;
 import java.io.BufferedInputStream;
-import java.io.BufferedOutputStream;
 import java.io.BufferedReader;
 import java.io.File;
-import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.InputStreamReader;
-import java.io.OutputStream;
 import java.nio.charset.StandardCharsets;
+import java.nio.file.Files;
+import java.nio.file.StandardCopyOption;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
@@ -509,19 +508,13 @@ public class MapPaintDialog extends ToggleDialog {
                         tr("Save style ''{0}'' as ''{1}''", s.getDisplayString(), file.getPath()));
                 try {
                     InputStream in = s.getSourceInputStream();
-                    try (
-                        InputStream bis = new BufferedInputStream(in);
-                        OutputStream bos = new BufferedOutputStream(new FileOutputStream(file))
-                    ) {
-                        byte[] buffer = new byte[4096];
-                        int length;
-                        while ((length = bis.read(buffer)) > -1 && !canceled) {
-                            bos.write(buffer, 0, length);
-                        }
+                    try (InputStream bis = new BufferedInputStream(in)) {
+                        Files.copy(bis, file.toPath(), StandardCopyOption.REPLACE_EXISTING);
                     } finally {
                         s.closeSourceInputStream(in);
                     }
                 } catch (IOException e) {
+                    Main.warn(e);
                     error = true;
                 }
             }
diff --git a/src/org/openstreetmap/josm/gui/dialogs/RelationListDialog.java b/src/org/openstreetmap/josm/gui/dialogs/RelationListDialog.java
index 44ec931..7b31cf3 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/RelationListDialog.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/RelationListDialog.java
@@ -59,6 +59,7 @@ import org.openstreetmap.josm.data.osm.event.WayNodesChangedEvent;
 import org.openstreetmap.josm.gui.DefaultNameFormatter;
 import org.openstreetmap.josm.gui.MapView;
 import org.openstreetmap.josm.gui.MapView.LayerChangeListener;
+import org.openstreetmap.josm.gui.NavigatableComponent;
 import org.openstreetmap.josm.gui.OsmPrimitivRenderer;
 import org.openstreetmap.josm.gui.PopupMenuHandler;
 import org.openstreetmap.josm.gui.SideButton;
@@ -84,7 +85,7 @@ import org.openstreetmap.josm.tools.Utils;
  * We don't have such dialogs for nodes, segments, and ways, because those
  * objects are visible on the map and can be selected there. Relations are not.
  */
-public class RelationListDialog extends ToggleDialog implements DataSetListener {
+public class RelationListDialog extends ToggleDialog implements DataSetListener, NavigatableComponent.ZoomChangeListener {
     /** The display list. */
     private final JList<Relation> displaylist;
     /** the list model used */
@@ -205,6 +206,7 @@ public class RelationListDialog extends ToggleDialog implements DataSetListener
     @Override
     public void showNotify() {
         MapView.addLayerChangeListener(newAction);
+        MapView.addZoomChangeListener(this);
         newAction.updateEnabledState();
         DatasetEventManager.getInstance().addDatasetListener(this, FireMode.IN_EDT);
         DataSet.addSelectionListener(addSelectionToRelations);
@@ -214,6 +216,7 @@ public class RelationListDialog extends ToggleDialog implements DataSetListener
     @Override
     public void hideNotify() {
         MapView.removeLayerChangeListener(newAction);
+        MapView.removeZoomChangeListener(this);
         DatasetEventManager.getInstance().removeDatasetListener(this);
         DataSet.removeSelectionListener(addSelectionToRelations);
     }
@@ -670,4 +673,12 @@ public class RelationListDialog extends ToggleDialog implements DataSetListener
     public void otherDatasetChange(AbstractDatasetChangedEvent event) {
         /* ignore */
     }
+
+    @Override
+    public void zoomChanged() {
+        // re-filter relations
+        if (model.filter != null) {
+            model.setFilter(model.filter);
+        }
+    }
 }
diff --git a/src/org/openstreetmap/josm/gui/dialogs/properties/PresetListPanel.java b/src/org/openstreetmap/josm/gui/dialogs/properties/PresetListPanel.java
index 5889db5..6909c3d 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/properties/PresetListPanel.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/properties/PresetListPanel.java
@@ -16,6 +16,7 @@ import org.openstreetmap.josm.gui.tagging.presets.TaggingPreset;
 import org.openstreetmap.josm.gui.tagging.presets.TaggingPresetHandler;
 import org.openstreetmap.josm.gui.tagging.presets.TaggingPresetLabel;
 import org.openstreetmap.josm.gui.tagging.presets.TaggingPresetType;
+import org.openstreetmap.josm.gui.tagging.presets.TaggingPresets;
 import org.openstreetmap.josm.tools.GBC;
 
 /**
@@ -33,6 +34,9 @@ public class PresetListPanel extends JPanel {
     /**
      * Updates the preset list based on the {@code tags} and {@code types},
      * and associates an interaction with (matching) presets via {@code presetHandler}.
+     * @param types collection of tagging presets types
+     * @param tags colelction of tags
+     * @param presetHandler tagging preset handler
      */
     public void updatePresets(final Collection<TaggingPresetType> types, final Map<String, String> tags,
             final TaggingPresetHandler presetHandler) {
@@ -43,7 +47,7 @@ public class PresetListPanel extends JPanel {
             return;
         }
 
-        for (final TaggingPreset t : TaggingPreset.getMatchingPresets(types, tags, true)) {
+        for (final TaggingPreset t : TaggingPresets.getMatchingPresets(types, tags, true)) {
             final JLabel lbl = new TaggingPresetLabel(t);
             lbl.addMouseListener(new MouseAdapter() {
                 @Override
diff --git a/src/org/openstreetmap/josm/gui/dialogs/properties/SearchBasedRowFilter.java b/src/org/openstreetmap/josm/gui/dialogs/properties/SearchBasedRowFilter.java
index 72fcd7c..7155669 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/properties/SearchBasedRowFilter.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/properties/SearchBasedRowFilter.java
@@ -13,7 +13,7 @@ import org.openstreetmap.josm.data.osm.Tagged;
 
 /**
  * A {@link RowFilter} implementation which matches tags w.r.t. the specified filter's
- * {@link SearchCompiler.Match#match(org.openstreetmap.josm.data.osm.Tagged)} method.
+ * {@link org.openstreetmap.josm.actions.search.SearchCompiler.Match#match(org.openstreetmap.josm.data.osm.Tagged)} method.
  *
  * <p>An {@link javax.swing.RowFilter.Entry}'s column 0 is considered as key, and column 1 is considered as value.</p>
  */
diff --git a/src/org/openstreetmap/josm/gui/dialogs/properties/TagEditHelper.java b/src/org/openstreetmap/josm/gui/dialogs/properties/TagEditHelper.java
index b212a72..6901fed 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/properties/TagEditHelper.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/properties/TagEditHelper.java
@@ -73,6 +73,7 @@ import org.openstreetmap.josm.gui.tagging.ac.AutoCompletingComboBox;
 import org.openstreetmap.josm.gui.tagging.ac.AutoCompletionListItem;
 import org.openstreetmap.josm.gui.tagging.ac.AutoCompletionManager;
 import org.openstreetmap.josm.gui.tagging.presets.TaggingPreset;
+import org.openstreetmap.josm.gui.tagging.presets.TaggingPresets;
 import org.openstreetmap.josm.gui.util.GuiHelper;
 import org.openstreetmap.josm.gui.widgets.PopupMenuLauncher;
 import org.openstreetmap.josm.io.XmlWriter;
@@ -704,13 +705,12 @@ class TagEditHelper {
             List<Tag> tags = new LinkedList<>(recentTags.keySet());
             for (int i = tags.size()-1; i >= 0 && count <= tagsToShow; i--, count++) {
                 final Tag t = tags.get(i);
-                // Create action for reusing the tag, with keyboard shortcut Ctrl+(1-5)
-                String actionShortcutKey = "properties:recent:"+count;
-                String actionShortcutShiftKey = "properties:recent:shift:"+count;
-                // CHECKSTYLE.OFF: LineLength
-                Shortcut sc = Shortcut.registerShortcut(actionShortcutKey, tr("Choose recent tag {0}", count), KeyEvent.VK_0+count, Shortcut.CTRL);
-                // CHECKSTYLE.ON: LineLength
-                final JosmAction action = new JosmAction(actionShortcutKey, null, tr("Use this tag again"), sc, false) {
+                // Create action for reusing the tag, with keyboard shortcut
+                /* POSSIBLE SHORTCUTS: 1,2,3,4,5,6,7,8,9,0=10 */
+                final Shortcut sc = count > 10 ? null : Shortcut.registerShortcut("properties:recent:" + count,
+                        tr("Choose recent tag {0}", count), KeyEvent.VK_0 + (count % 10), Shortcut.CTRL);
+                final JosmAction action = new JosmAction(
+                        tr("Choose recent tag {0}", count), null, tr("Use this tag again"), sc, false) {
                     @Override
                     public void actionPerformed(ActionEvent e) {
                         keys.setSelectedItem(t.getKey());
@@ -720,9 +720,11 @@ class TagEditHelper {
                         selectValuesCombobox();
                     }
                 };
-                Shortcut scShift = Shortcut.registerShortcut(actionShortcutShiftKey, tr("Apply recent tag {0}", count),
-                        KeyEvent.VK_0+count, Shortcut.CTRL_SHIFT);
-                final JosmAction actionShift = new JosmAction(actionShortcutShiftKey, null, tr("Use this tag again"), scShift, false) {
+                /* POSSIBLE SHORTCUTS: 1,2,3,4,5,6,7,8,9,0=10 */
+                final Shortcut scShift = count > 10 ? null : Shortcut.registerShortcut("properties:recent:apply:" + count,
+                         tr("Apply recent tag {0}", count), KeyEvent.VK_0 + (count % 10), Shortcut.CTRL_SHIFT);
+                final JosmAction actionShift = new JosmAction(
+                        tr("Apply recent tag {0}", count), null, tr("Use this tag again"), scShift, false) {
                     @Override
                     public void actionPerformed(ActionEvent e) {
                         action.actionPerformed(null);
@@ -739,7 +741,7 @@ class TagEditHelper {
                     // If no icon found in map style look at presets
                     Map<String, String> map = new HashMap<>();
                     map.put(t.getKey(), t.getValue());
-                    for (TaggingPreset tp : TaggingPreset.getMatchingPresets(null, map, false)) {
+                    for (TaggingPreset tp : TaggingPresets.getMatchingPresets(null, map, false)) {
                         icon = tp.getIcon();
                         if (icon != null) {
                             break;
@@ -762,12 +764,14 @@ class TagEditHelper {
                         + "<td style='border:1px solid gray'>" + XmlWriter.encode(t.toString(), true) + '<' +
                         "/td></tr></table></html>");
                 tagLabel.setFont(tagLabel.getFont().deriveFont(Font.PLAIN));
-                if (action.isEnabled()) {
+                if (action.isEnabled() && sc != null && scShift != null) {
                     // Register action
-                    mainPanel.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(sc.getKeyStroke(), actionShortcutKey);
-                    mainPanel.getActionMap().put(actionShortcutKey, action);
-                    mainPanel.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(scShift.getKeyStroke(), actionShortcutShiftKey);
-                    mainPanel.getActionMap().put(actionShortcutShiftKey, actionShift);
+                    mainPanel.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(sc.getKeyStroke(), "choose"+count);
+                    mainPanel.getActionMap().put("choose"+count, action);
+                    mainPanel.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(scShift.getKeyStroke(), "apply"+count);
+                    mainPanel.getActionMap().put("apply"+count, actionShift);
+                }
+                if (action.isEnabled()) {
                     // Make the tag label clickable and set tooltip to the action description (this displays also the keyboard shortcut)
                     tagLabel.setToolTipText((String) action.getValue(Action.SHORT_DESCRIPTION));
                     tagLabel.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
diff --git a/src/org/openstreetmap/josm/gui/dialogs/relation/DownloadRelationMemberTask.java b/src/org/openstreetmap/josm/gui/dialogs/relation/DownloadRelationMemberTask.java
index 0b36843..b1387ab 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/relation/DownloadRelationMemberTask.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/relation/DownloadRelationMemberTask.java
@@ -116,7 +116,7 @@ public class DownloadRelationMemberTask extends PleaseWaitRunnable {
         try {
             synchronized (this) {
                 if (canceled) return;
-                objectReader = new MultiFetchServerObjectReader();
+                objectReader = MultiFetchServerObjectReader.create();
             }
             objectReader.append(children);
             progressMonitor.indeterminateSubTask(
diff --git a/src/org/openstreetmap/josm/gui/dialogs/relation/GenericRelationEditor.java b/src/org/openstreetmap/josm/gui/dialogs/relation/GenericRelationEditor.java
index e54fcc9..1e19fb7 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/relation/GenericRelationEditor.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/relation/GenericRelationEditor.java
@@ -85,6 +85,7 @@ import org.openstreetmap.josm.gui.tagging.ac.AutoCompletionList;
 import org.openstreetmap.josm.gui.tagging.presets.TaggingPreset;
 import org.openstreetmap.josm.gui.tagging.presets.TaggingPresetHandler;
 import org.openstreetmap.josm.gui.tagging.presets.TaggingPresetType;
+import org.openstreetmap.josm.gui.tagging.presets.TaggingPresets;
 import org.openstreetmap.josm.io.OnlineResource;
 import org.openstreetmap.josm.tools.CheckParameterUtil;
 import org.openstreetmap.josm.tools.ImageProvider;
@@ -762,7 +763,7 @@ public class GenericRelationEditor extends RelationEditor  {
     public static Command addPrimitivesToRelation(final Relation orig, Collection<? extends OsmPrimitive> primitivesToAdd) {
         CheckParameterUtil.ensureParameterNotNull(orig, "orig");
         try {
-            final Collection<TaggingPreset> presets = TaggingPreset.getMatchingPresets(
+            final Collection<TaggingPreset> presets = TaggingPresets.getMatchingPresets(
                     EnumSet.of(TaggingPresetType.RELATION), orig.getKeys(), false);
             Relation relation = new Relation(orig);
             boolean modified = false;
diff --git a/src/org/openstreetmap/josm/gui/dialogs/relation/MemberTableModel.java b/src/org/openstreetmap/josm/gui/dialogs/relation/MemberTableModel.java
index fb44ac9..f87ef71 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/relation/MemberTableModel.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/relation/MemberTableModel.java
@@ -41,6 +41,7 @@ import org.openstreetmap.josm.gui.layer.OsmDataLayer;
 import org.openstreetmap.josm.gui.tagging.presets.TaggingPreset;
 import org.openstreetmap.josm.gui.tagging.presets.TaggingPresetHandler;
 import org.openstreetmap.josm.gui.tagging.presets.TaggingPresetType;
+import org.openstreetmap.josm.gui.tagging.presets.TaggingPresets;
 import org.openstreetmap.josm.gui.util.GuiHelper;
 import org.openstreetmap.josm.gui.widgets.OsmPrimitivesTableModel;
 
@@ -63,6 +64,8 @@ implements TableModelListener, SelectionChangedListener, DataSetListener, OsmPri
 
     /**
      * constructor
+     * @param layer data layer
+     * @param presetHandler tagging preset handler
      */
     public MemberTableModel(OsmDataLayer layer, TaggingPresetHandler presetHandler) {
         members = new ArrayList<>();
@@ -72,6 +75,10 @@ implements TableModelListener, SelectionChangedListener, DataSetListener, OsmPri
         addTableModelListener(this);
     }
 
+    /**
+     * Returns the data layer.
+     * @return the data layer
+     */
     public OsmDataLayer getLayer() {
         return layer;
     }
@@ -415,7 +422,7 @@ implements TableModelListener, SelectionChangedListener, DataSetListener, OsmPri
     }
 
     private void addMembersAtIndex(List<? extends OsmPrimitive> primitives, int index) {
-        final Collection<TaggingPreset> presets = TaggingPreset.getMatchingPresets(EnumSet.of(TaggingPresetType.RELATION),
+        final Collection<TaggingPreset> presets = TaggingPresets.getMatchingPresets(EnumSet.of(TaggingPresetType.RELATION),
                 presetHandler.getSelection().iterator().next().getKeys(), false);
         if (primitives == null)
             return;
@@ -524,6 +531,7 @@ implements TableModelListener, SelectionChangedListener, DataSetListener, OsmPri
 
     /**
      * Replies the set of selected referers. Never null, but may be empty.
+     * @param referenceSet reference set
      *
      * @return the set of selected referers
      */
diff --git a/src/org/openstreetmap/josm/gui/dialogs/relation/RelationDialogManager.java b/src/org/openstreetmap/josm/gui/dialogs/relation/RelationDialogManager.java
index 9f6aa26..f3c298d 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/relation/RelationDialogManager.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/relation/RelationDialogManager.java
@@ -230,7 +230,8 @@ public class RelationDialogManager extends WindowAdapter implements MapView.Laye
      * Replies true, if there is another open {@link RelationEditor} whose
      * upper left corner is close to <code>p</code>.
      *
-     * @param p  the reference point to check
+     * @param p the reference point to check
+     * @param thisEditor the current editor
      * @return true, if there is another open {@link RelationEditor} whose
      * upper left corner is close to <code>p</code>.
      */
diff --git a/src/org/openstreetmap/josm/gui/dialogs/relation/sort/RelationNodeMap.java b/src/org/openstreetmap/josm/gui/dialogs/relation/sort/RelationNodeMap.java
index c9f8803..1cc838d 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/relation/sort/RelationNodeMap.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/relation/sort/RelationNodeMap.java
@@ -26,7 +26,7 @@ import org.openstreetmap.josm.data.osm.Way;
  * (that are shared by other members).
  *
  * @author Christiaan Welvaart <cjw at time4t.net>
- *
+ * @since 1785
  */
 public class RelationNodeMap {
 
@@ -172,9 +172,10 @@ public class RelationNodeMap {
     private Node firstCircular;
 
     /**
-     * Return a relation member that is linked to the
-     * member 'i', but has not been popped yet.
+     * Return a relation member that is linked to the member 'i', but has not been popped yet.
      * Return null if there is no such member left.
+     * @param way way key
+     * @return a relation member that is linked to the member 'i', but has not been popped yet
      */
     public Integer popAdjacent(Integer way) {
         if (lastOnewayNode != null) return popBackwardOnewayPart(way);
@@ -294,8 +295,8 @@ public class RelationNodeMap {
     }
 
     /**
-     * Returns some remaining member or null if
-     * every sortable member has been processed.
+     * Returns some remaining member or null if every sortable member has been processed.
+     * @return member key
      */
     public Integer pop() {
         if (!remaining.isEmpty()) {
@@ -305,7 +306,7 @@ public class RelationNodeMap {
         }
 
         if (remainingOneway.isEmpty()) return null;
-        for (Integer i :remainingOneway.keySet()) { //find oneway, which is connected to more than one way (is between two oneway loops)
+        for (Integer i : remainingOneway.keySet()) { //find oneway, which is connected to more than one way (is between two oneway loops)
             for (Node n : onewayReverseMap.ways.get(i)) {
                 if (onewayReverseMap.nodes.containsKey(n) && onewayReverseMap.nodes.get(n).size() > 1) {
                     doneOneway(i);
@@ -323,6 +324,7 @@ public class RelationNodeMap {
     /**
      * This relation member has been processed.
      * Remove references in the map.nodes.
+     * @param i member key
      */
     private void doneOneway(Integer i) {
         Set<Node> nodesForward = remainingOneway.get(i);
diff --git a/src/org/openstreetmap/josm/gui/dialogs/relation/sort/RelationSortUtils.java b/src/org/openstreetmap/josm/gui/dialogs/relation/sort/RelationSortUtils.java
index 1504bf7..6acb7c3 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/relation/sort/RelationSortUtils.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/relation/sort/RelationSortUtils.java
@@ -18,11 +18,12 @@ final class RelationSortUtils {
 
     /**
      * determine, if the way i is a roundabout and if yes, what type of roundabout
+     * @param member relation member
+     * @return roundabout type
      */
     static Direction roundaboutType(RelationMember member) {
         if (member == null || !member.isWay()) return NONE;
-        Way w = member.getWay();
-        return roundaboutType(w);
+        return roundaboutType(member.getWay());
     }
 
     static Direction roundaboutType(Way w) {
diff --git a/src/org/openstreetmap/josm/gui/dialogs/relation/sort/WayConnectionTypeCalculator.java b/src/org/openstreetmap/josm/gui/dialogs/relation/sort/WayConnectionTypeCalculator.java
index ef7774b..7596e66 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/relation/sort/WayConnectionTypeCalculator.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/relation/sort/WayConnectionTypeCalculator.java
@@ -21,6 +21,8 @@ public class WayConnectionTypeCalculator {
 
     /**
      * refresh the cache of member WayConnectionTypes
+     * @param members relation members
+     * @return way connections
      */
     public List<WayConnectionType> updateLinks(List<RelationMember> members) {
         this.members = members;
@@ -214,17 +216,20 @@ public class WayConnectionTypeCalculator {
     }
 
     /**
-     * Determines the direction of way k with respect to the way ref_i.
-     * The way ref_i is assumed to have the direction ref_direction and
-     * to be the predecessor of k.
+     * Determines the direction of way {@code k} with respect to the way {@code ref_i}.
+     * The way {@code ref_i} is assumed to have the direction {@code ref_direction} and to be the predecessor of {@code k}.
      *
      * If both ways are not linked in any way, NONE is returned.
      *
      * Else the direction is given as follows:
      * Let the relation be a route of oneway streets, and someone travels them in the given order.
      * Direction is FORWARD if it is legal and BACKWARD if it is illegal to do so for the given way.
-     *
-     **/
+     * @param ref_i way key
+     * @param ref_direction direction of ref_i
+     * @param k successor of ref_i
+     * @param reversed if {@code true} determine reverse direction
+     * @return direction of way {@code k}
+     */
     private Direction determineDirection(int ref_i, final Direction ref_direction, int k, boolean reversed) {
         if (ref_i < 0 || k < 0 || ref_i >= members.size() || k >= members.size())
             return NONE;
diff --git a/src/org/openstreetmap/josm/gui/dialogs/validator/ValidatorTreePanel.java b/src/org/openstreetmap/josm/gui/dialogs/validator/ValidatorTreePanel.java
index 23e3f37..44b9da0 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/validator/ValidatorTreePanel.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/validator/ValidatorTreePanel.java
@@ -348,6 +348,7 @@ public class ValidatorTreePanel extends JTree implements Destroyable {
     /**
      * Selects all errors related to the specified {@code primitives}, i.e. where {@link TestError#getPrimitives()}
      * returns a primitive present in {@code primitives}.
+     * @param primitives collection of primitives
      */
     public void selectRelatedErrors(final Collection<OsmPrimitive> primitives) {
         final Collection<TreePath> paths = new ArrayList<>();
diff --git a/src/org/openstreetmap/josm/gui/download/DownloadDialog.java b/src/org/openstreetmap/josm/gui/download/DownloadDialog.java
index 9a9bbe2..0a5c59d 100644
--- a/src/org/openstreetmap/josm/gui/download/DownloadDialog.java
+++ b/src/org/openstreetmap/josm/gui/download/DownloadDialog.java
@@ -280,6 +280,7 @@ public class DownloadDialog extends JDialog  {
     /**
      * Distributes a "bounding box changed" from one DownloadSelection
      * object to the others, so they may update or clear their input fields.
+     * @param b new current bounds
      *
      * @param eventSource - the DownloadSelection object that fired this notification.
      */
@@ -428,6 +429,10 @@ public class DownloadDialog extends JDialog  {
         return Main.pref.getBoolean("download.autorun", false);
     }
 
+    /**
+     * Automatically opens the download dialog, if autorun is enabled.
+     * @see #isAutorunEnabled
+     */
     public static void autostartIfNeeded() {
         if (isAutorunEnabled()) {
             Main.main.menu.download.actionPerformed(null);
diff --git a/src/org/openstreetmap/josm/gui/download/DownloadSelection.java b/src/org/openstreetmap/josm/gui/download/DownloadSelection.java
index 6d04511..d9dde3b 100644
--- a/src/org/openstreetmap/josm/gui/download/DownloadSelection.java
+++ b/src/org/openstreetmap/josm/gui/download/DownloadSelection.java
@@ -7,6 +7,7 @@ public interface DownloadSelection  {
 
     /**
      * Add the GUI elements to the dialog.
+     * @param gui download dialog
      */
     void addGui(DownloadDialog gui);
 
diff --git a/src/org/openstreetmap/josm/gui/download/PlaceSelection.java b/src/org/openstreetmap/josm/gui/download/PlaceSelection.java
index 5826129..60d25e0 100644
--- a/src/org/openstreetmap/josm/gui/download/PlaceSelection.java
+++ b/src/org/openstreetmap/josm/gui/download/PlaceSelection.java
@@ -324,7 +324,7 @@ public class PlaceSelection implements DownloadSelection {
     class NameQueryTask extends PleaseWaitRunnable {
 
         private final String searchExpression;
-        private HttpClient.Response connection;
+        private HttpClient connection;
         private List<SearchResult> data;
         private boolean canceled;
         private final Server useserver;
@@ -367,9 +367,10 @@ public class PlaceSelection implements DownloadSelection {
                 getProgressMonitor().indeterminateSubTask(tr("Querying name server ..."));
                 URL url = new URL(urlString);
                 synchronized (this) {
-                    connection = HttpClient.create(url).connect();
+                    connection = HttpClient.create(url);
+                    connection.connect();
                 }
-                try (Reader reader = connection.getContentReader()) {
+                try (Reader reader = connection.getResponse().getContentReader()) {
                     InputSource inputSource = new InputSource(reader);
                     NameFinderResultParser parser = new NameFinderResultParser();
                     Utils.parseSafeSAX(inputSource, parser);
diff --git a/src/org/openstreetmap/josm/gui/help/HelpContentReader.java b/src/org/openstreetmap/josm/gui/help/HelpContentReader.java
index 29c886f..1f63e56 100644
--- a/src/org/openstreetmap/josm/gui/help/HelpContentReader.java
+++ b/src/org/openstreetmap/josm/gui/help/HelpContentReader.java
@@ -34,6 +34,7 @@ public class HelpContentReader extends WikiReader {
      * Fetches the content of a help topic from the JOSM wiki.
      *
      * @param helpTopicUrl  the absolute help topic URL
+     * @param dotest if {@code true}, checks if help content is empty
      * @return the content, filtered and transformed for being displayed in the internal help browser
      * @throws HelpContentReaderException if problem occurs
      * @throws MissingHelpContentException if this helpTopicUrl doesn't point to an existing Wiki help page
@@ -67,6 +68,8 @@ public class HelpContentReader extends WikiReader {
      * most likely represents a stub help page.
      *
      * @param in the input stream
+     * @param dotest if {@code true}, checks if help content is empty
+     * @param url help topic URL
      * @return the content
      * @throws HelpContentReaderException if an exception occurs
      * @throws MissingHelpContentException if the content read isn't a help page
diff --git a/src/org/openstreetmap/josm/gui/help/HelpUtil.java b/src/org/openstreetmap/josm/gui/help/HelpUtil.java
index 6182ec4..b1a6644 100644
--- a/src/org/openstreetmap/josm/gui/help/HelpUtil.java
+++ b/src/org/openstreetmap/josm/gui/help/HelpUtil.java
@@ -191,7 +191,7 @@ public final class HelpUtil {
         if (Main.main != null && Main.main.menu != null) {
             return Main.main.menu.help;
         }
-        return new HelpAction();
+        return HelpAction.createWithoutShortcut();
     }
 
     /**
diff --git a/src/org/openstreetmap/josm/gui/history/TwoColumnDiff.java b/src/org/openstreetmap/josm/gui/history/TwoColumnDiff.java
index 740cd5a..72329b6 100644
--- a/src/org/openstreetmap/josm/gui/history/TwoColumnDiff.java
+++ b/src/org/openstreetmap/josm/gui/history/TwoColumnDiff.java
@@ -90,6 +90,10 @@ class TwoColumnDiff {
     /**
      * The result from the diff algorithm is a "script" (a compressed description of the changes)
      * This method expands this script into a full two column description.
+     * @param script diff script
+     * @param a reference version
+     * @param b current version
+     * @param reversed if {@code true} use {@link DiffItemType#REVERSED} instead of {@link DiffItemType#SAME}
      */
     private void twoColumnDiffFromScript(Diff.Change script, Object[] a, Object[] b, final boolean reversed) {
         int ia = 0;
diff --git a/src/org/openstreetmap/josm/gui/io/AbstractUploadTask.java b/src/org/openstreetmap/josm/gui/io/AbstractUploadTask.java
index 0c0cf35..5813a6c 100644
--- a/src/org/openstreetmap/josm/gui/io/AbstractUploadTask.java
+++ b/src/org/openstreetmap/josm/gui/io/AbstractUploadTask.java
@@ -52,7 +52,7 @@ public abstract class AbstractUploadTask extends PleaseWaitRunnable {
     /**
      * Synchronizes the local state of an {@link OsmPrimitive} with its state on the
      * server. The method uses an individual GET for the primitive.
-     *
+     * @param type the primitive type
      * @param id the primitive ID
      */
     protected void synchronizePrimitive(final OsmPrimitiveType type, final long id) {
@@ -191,7 +191,8 @@ public abstract class AbstractUploadTask extends PleaseWaitRunnable {
     /**
      * Handles the case that a conflict was detected while uploading where we don't
      * know what {@link OsmPrimitive} actually caused the conflict (for whatever reason)
-     *
+     * @param changesetId changeset ID
+     * @param d changeset date
      */
     protected void handleUploadConflictForClosedChangeset(long changesetId, Date d) {
         String msg =  tr("<html>Uploading <strong>failed</strong> because you have been using<br>"
@@ -210,6 +211,8 @@ public abstract class AbstractUploadTask extends PleaseWaitRunnable {
     /**
      * Handles the case where deleting a node failed because it is still in use in
      * a non-deleted way on the server.
+     * @param e exception
+     * @param conflict conflict
      */
     protected void handleUploadPreconditionFailedConflict(OsmApiException e, Pair<OsmPrimitive, Collection<OsmPrimitive>> conflict) {
         ButtonSpec[] options = new ButtonSpec[] {
diff --git a/src/org/openstreetmap/josm/gui/io/DownloadFileTask.java b/src/org/openstreetmap/josm/gui/io/DownloadFileTask.java
index f828468..ed8dd76 100644
--- a/src/org/openstreetmap/josm/gui/io/DownloadFileTask.java
+++ b/src/org/openstreetmap/josm/gui/io/DownloadFileTask.java
@@ -4,7 +4,6 @@ package org.openstreetmap.josm.gui.io;
 import static org.openstreetmap.josm.tools.I18n.tr;
 
 import java.awt.Component;
-import java.io.BufferedOutputStream;
 import java.io.File;
 import java.io.FileOutputStream;
 import java.io.IOException;
@@ -13,6 +12,8 @@ import java.io.OutputStream;
 import java.net.MalformedURLException;
 import java.net.URL;
 import java.nio.charset.StandardCharsets;
+import java.nio.file.Files;
+import java.nio.file.StandardCopyOption;
 import java.util.Enumeration;
 import java.util.zip.ZipEntry;
 import java.util.zip.ZipFile;
@@ -21,6 +22,7 @@ import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.gui.PleaseWaitDialog;
 import org.openstreetmap.josm.gui.PleaseWaitRunnable;
 import org.openstreetmap.josm.tools.HttpClient;
+import org.openstreetmap.josm.tools.Utils;
 import org.xml.sax.SAXException;
 
 /**
@@ -66,7 +68,7 @@ public class DownloadFileTask extends PleaseWaitRunnable {
     }
 
     private boolean canceled;
-    private HttpClient.Response downloadConnection;
+    private HttpClient downloadConnection;
 
     private synchronized void closeConnectionIfNeeded() {
         if (downloadConnection != null) {
@@ -100,15 +102,16 @@ public class DownloadFileTask extends PleaseWaitRunnable {
             URL url = new URL(address);
             long size;
             synchronized (this) {
-                downloadConnection = HttpClient.create(url).useCache(false).connect();
-                size = downloadConnection.getContentLength();
+                downloadConnection = HttpClient.create(url).useCache(false);
+                downloadConnection.connect();
+                size = downloadConnection.getResponse().getContentLength();
             }
 
             progressMonitor.setTicksCount(100);
             progressMonitor.subTask(tr("Downloading File {0}: {1} bytes...", file.getName(), size));
 
             try (
-                InputStream in = downloadConnection.getContent();
+                InputStream in = downloadConnection.getResponse().getContent();
                 OutputStream out = new FileOutputStream(file)
             ) {
                 byte[] buffer = new byte[32768];
@@ -130,7 +133,7 @@ public class DownloadFileTask extends PleaseWaitRunnable {
                 if (unpack) {
                     Main.info(tr("Unpacking {0} into {1}", file.getAbsolutePath(), file.getParent()));
                     unzipFileRecursively(file, file.getParent());
-                    file.delete();
+                    Utils.deleteFile(file);
                 }
             }
         } catch (MalformedURLException e) {
@@ -181,15 +184,8 @@ public class DownloadFileTask extends PleaseWaitRunnable {
                 File newFile = new File(dir, ze.getName());
                 if (ze.isDirectory()) {
                     newFile.mkdirs();
-                } else try (
-                    InputStream is = zf.getInputStream(ze);
-                    OutputStream os = new BufferedOutputStream(new FileOutputStream(newFile))
-                ) {
-                    byte[] buffer = new byte[8192];
-                    int read;
-                    while ((read = is.read(buffer)) != -1) {
-                        os.write(buffer, 0, read);
-                    }
+                } else try (InputStream is = zf.getInputStream(ze)) {
+                    Files.copy(is, newFile.toPath(), StandardCopyOption.REPLACE_EXISTING);
                 }
             }
         }
diff --git a/src/org/openstreetmap/josm/gui/io/DownloadPrimitivesTask.java b/src/org/openstreetmap/josm/gui/io/DownloadPrimitivesTask.java
index 30a96d6..bf3fefe 100644
--- a/src/org/openstreetmap/josm/gui/io/DownloadPrimitivesTask.java
+++ b/src/org/openstreetmap/josm/gui/io/DownloadPrimitivesTask.java
@@ -140,7 +140,7 @@ public class DownloadPrimitivesTask extends PleaseWaitRunnable {
         try {
             synchronized (this) {
                 if (canceled) return;
-                multiObjectReader = new MultiFetchServerObjectReader();
+                multiObjectReader = MultiFetchServerObjectReader.create();
             }
             initMultiFetchReader(multiObjectReader);
             theirDataSet = multiObjectReader.parseOsm(progressMonitor.createSubTaskMonitor(ProgressMonitor.ALL_TICKS, false));
diff --git a/src/org/openstreetmap/josm/gui/io/LayerNameAndFilePathTableCell.java b/src/org/openstreetmap/josm/gui/io/LayerNameAndFilePathTableCell.java
index f228d95..2c504cb 100644
--- a/src/org/openstreetmap/josm/gui/io/LayerNameAndFilePathTableCell.java
+++ b/src/org/openstreetmap/josm/gui/io/LayerNameAndFilePathTableCell.java
@@ -120,8 +120,11 @@ class LayerNameAndFilePathTableCell extends JPanel implements TableCellRenderer,
         return false;
     }
 
-    /** adds layer name label to (this) using the given info. Returns tooltip that
-     * should be added to the panel **/
+    /**
+     * Adds layer name label to (this) using the given info. Returns tooltip that should be added to the panel
+     * @param info information, user preferences and save/upload states of the layer
+     * @return tooltip that should be added to the panel
+     */
     private String addLblLayerName(SaveLayerInfo info) {
         lblLayerName.setIcon(info.getLayer().getIcon());
         lblLayerName.setText(info.getName());
@@ -129,8 +132,11 @@ class LayerNameAndFilePathTableCell extends JPanel implements TableCellRenderer,
         return tr("The bold text is the name of the layer.");
     }
 
-    /** adds filename label to (this) using the given info. Returns tooltip that
-     * should be added to the panel */
+    /**
+     * Adds filename label to (this) using the given info. Returns tooltip that should be added to the panel
+     * @param info information, user preferences and save/upload states of the layer
+     * @return tooltip that should be added to the panel
+     */
     private String addLblFilename(SaveLayerInfo info) {
         String tooltip = "";
         boolean error = false;
@@ -156,8 +162,12 @@ class LayerNameAndFilePathTableCell extends JPanel implements TableCellRenderer,
         return tr("Click cell to change the file path.") + "<br/>" + tooltip;
     }
 
-    /** makes the given path fit lblFilename, appends ellipsis on the left if it doesn’t fit.
-     * Idea: /home/user/josm → …/user/josm → …/josm; and take the first one that fits */
+    /**
+     * Makes the given path fit lblFilename, appends ellipsis on the left if it doesn’t fit.
+     * Idea: /home/user/josm → …/user/josm → …/josm; and take the first one that fits
+     * @param t complete path
+     * @return shorter path
+     */
     private String makePathFit(String t) {
         boolean hasEllipsis = false;
         while (t != null && !t.isEmpty()) {
diff --git a/src/org/openstreetmap/josm/gui/io/TagSettingsPanel.java b/src/org/openstreetmap/josm/gui/io/TagSettingsPanel.java
index a0824b6..3e377d3 100644
--- a/src/org/openstreetmap/josm/gui/io/TagSettingsPanel.java
+++ b/src/org/openstreetmap/josm/gui/io/TagSettingsPanel.java
@@ -79,6 +79,10 @@ public class TagSettingsPanel extends JPanel implements TableModelListener {
         return tag.getValue();
     }
 
+    /**
+     * Initialize panel from changeset.
+     * @param cs changeset
+     */
     public void initFromChangeset(Changeset cs) {
         Map<String, String> tags = getDefaultTags();
         if (cs != null) {
@@ -102,19 +106,27 @@ public class TagSettingsPanel extends JPanel implements TableModelListener {
 
     /**
      * Replies the map with the current tags in the tag editor model.
-     *
+     * @param keepEmpty {@code true} to keep empty tags
      * @return the map with the current tags in the tag editor model.
      */
     public Map<String, String> getTags(boolean keepEmpty) {
         return pnlTagEditor.getModel().getTags(keepEmpty);
     }
 
+    /**
+     * Replies the map with the default tags.
+     * @return the map with the default tags
+     */
     public Map<String, String> getDefaultTags() {
         Map<String, String> tags = new HashMap<>();
         tags.putAll(defaultTags);
         return tags;
     }
 
+    /**
+     * Sets the map with the default tags.
+     * @param tags the map with the default tags
+     */
     public void setDefaultTags(Map<String, String> tags) {
         defaultTags.clear();
         defaultTags.putAll(tags);
diff --git a/src/org/openstreetmap/josm/gui/io/UpdatePrimitivesTask.java b/src/org/openstreetmap/josm/gui/io/UpdatePrimitivesTask.java
index ea1353e..fb02571 100644
--- a/src/org/openstreetmap/josm/gui/io/UpdatePrimitivesTask.java
+++ b/src/org/openstreetmap/josm/gui/io/UpdatePrimitivesTask.java
@@ -91,13 +91,6 @@ public class UpdatePrimitivesTask extends PleaseWaitRunnable {
         for (OsmPrimitive primitive : toUpdate) {
             if (primitive instanceof Node && !primitive.isNew()) {
                 reader.append(primitive);
-            } else if (primitive instanceof Way) {
-                Way way = (Way) primitive;
-                for (Node node: way.getNodes()) {
-                    if (!node.isNew()) {
-                        reader.append(node);
-                    }
-                }
             }
         }
     }
@@ -106,6 +99,7 @@ public class UpdatePrimitivesTask extends PleaseWaitRunnable {
         getProgressMonitor().indeterminateSubTask(tr("Initializing ways to update ..."));
         for (OsmPrimitive primitive : toUpdate) {
             if (primitive instanceof Way && !primitive.isNew()) {
+                // this also adds way nodes
                 reader.append(primitive);
             }
         }
@@ -115,6 +109,7 @@ public class UpdatePrimitivesTask extends PleaseWaitRunnable {
         getProgressMonitor().indeterminateSubTask(tr("Initializing relations to update ..."));
         for (OsmPrimitive primitive : toUpdate) {
             if (primitive instanceof Relation && !primitive.isNew()) {
+                // this also adds relation members
                 reader.append(primitive);
             }
         }
@@ -127,7 +122,7 @@ public class UpdatePrimitivesTask extends PleaseWaitRunnable {
         try {
             synchronized (this) {
                 if (canceled) return;
-                multiObjectReader = new MultiFetchServerObjectReader();
+                multiObjectReader = MultiFetchServerObjectReader.create();
             }
             initMultiFetchReaderWithNodes(multiObjectReader);
             initMultiFetchReaderWithWays(multiObjectReader);
diff --git a/src/org/openstreetmap/josm/gui/layer/Layer.java b/src/org/openstreetmap/josm/gui/layer/Layer.java
index a1ac612..2357a2f 100644
--- a/src/org/openstreetmap/josm/gui/layer/Layer.java
+++ b/src/org/openstreetmap/josm/gui/layer/Layer.java
@@ -407,6 +407,7 @@ public abstract class Layer implements Destroyable, MapViewPaintable, Projection
 
     /**
      * allows to check whether a projection is supported or not
+     * @param proj projection
      *
      * @return True if projection is supported for this layer
      */
diff --git a/src/org/openstreetmap/josm/gui/layer/MapViewPaintable.java b/src/org/openstreetmap/josm/gui/layer/MapViewPaintable.java
index 5b29a27..fa0fc7b 100644
--- a/src/org/openstreetmap/josm/gui/layer/MapViewPaintable.java
+++ b/src/org/openstreetmap/josm/gui/layer/MapViewPaintable.java
@@ -10,8 +10,9 @@ public interface MapViewPaintable {
 
     /**
      * Paint the dataset using the engine set.
+     * @param g Graphics
      * @param mv The object that can translate GeoPoints to screen coordinates.
+     * @param bbox Bounding box
      */
     void paint(Graphics2D g, MapView mv, Bounds bbox);
-
 }
diff --git a/src/org/openstreetmap/josm/gui/layer/geoimage/CorrelateGpxWithImages.java b/src/org/openstreetmap/josm/gui/layer/geoimage/CorrelateGpxWithImages.java
index 4d1a094..f035008 100644
--- a/src/org/openstreetmap/josm/gui/layer/geoimage/CorrelateGpxWithImages.java
+++ b/src/org/openstreetmap/josm/gui/layer/geoimage/CorrelateGpxWithImages.java
@@ -156,7 +156,7 @@ public class CorrelateGpxWithImages extends AbstractAction {
                 if (yLayer != null) {
                     if (yLayer.data != null) {
                         for (ImageEntry ie : yLayer.data) {
-                            ie.tmp = null;
+                            ie.discardTmp();
                         }
                     }
                     yLayer.updateBufferAndRepaint();
@@ -825,7 +825,7 @@ public class CorrelateGpxWithImages extends AbstractAction {
             // So reset all images.
             if (yLayer.data != null) {
                 for (ImageEntry ie: yLayer.data) {
-                    ie.tmp = null;
+                    ie.discardTmp();
                 }
             }
 
@@ -833,7 +833,8 @@ public class CorrelateGpxWithImages extends AbstractAction {
             List<ImageEntry> dateImgLst = getSortedImgList();
             // Create a temporary copy for each image
             for (ImageEntry ie : dateImgLst) {
-                ie.cleanTmp();
+                ie.createTmp();
+                ie.tmp.setPos(null);
             }
 
             GpxDataWrapper selGpx = selectedGPX(false);
@@ -1143,6 +1144,10 @@ public class CorrelateGpxWithImages extends AbstractAction {
     /**
      * Match a list of photos to a gpx track with a given offset.
      * All images need a exifTime attribute and the List must be sorted according to these times.
+     * @param images images to match
+     * @param selectedGpx selected GPX data
+     * @param offset offset
+     * @return number of matched points
      */
     private int matchGpxTrack(List<ImageEntry> images, GpxData selectedGpx, long offset) {
         int ret = 0;
diff --git a/src/org/openstreetmap/josm/gui/layer/geoimage/GeoImageLayer.java b/src/org/openstreetmap/josm/gui/layer/geoimage/GeoImageLayer.java
index c1de97d..7e85bed 100644
--- a/src/org/openstreetmap/josm/gui/layer/geoimage/GeoImageLayer.java
+++ b/src/org/openstreetmap/josm/gui/layer/geoimage/GeoImageLayer.java
@@ -21,19 +21,15 @@ import java.beans.PropertyChangeEvent;
 import java.beans.PropertyChangeListener;
 import java.io.File;
 import java.io.IOException;
-import java.text.ParseException;
 import java.util.ArrayList;
 import java.util.Arrays;
-import java.util.Calendar;
 import java.util.Collection;
 import java.util.Collections;
-import java.util.GregorianCalendar;
 import java.util.HashSet;
 import java.util.LinkedHashSet;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.Set;
-import java.util.TimeZone;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
 
@@ -49,7 +45,6 @@ import org.openstreetmap.josm.actions.RenameLayerAction;
 import org.openstreetmap.josm.actions.mapmode.MapMode;
 import org.openstreetmap.josm.actions.mapmode.SelectAction;
 import org.openstreetmap.josm.data.Bounds;
-import org.openstreetmap.josm.data.coor.LatLon;
 import org.openstreetmap.josm.data.osm.visitor.BoundingXYVisitor;
 import org.openstreetmap.josm.gui.ExtendedDialog;
 import org.openstreetmap.josm.gui.MapFrame;
@@ -67,18 +62,9 @@ import org.openstreetmap.josm.gui.layer.JumpToMarkerActions.JumpToPreviousMarker
 import org.openstreetmap.josm.gui.layer.Layer;
 import org.openstreetmap.josm.gui.util.GuiHelper;
 import org.openstreetmap.josm.io.JpgImporter;
-import org.openstreetmap.josm.tools.ExifReader;
 import org.openstreetmap.josm.tools.ImageProvider;
 import org.openstreetmap.josm.tools.Utils;
 
-import com.drew.imaging.jpeg.JpegMetadataReader;
-import com.drew.lang.CompoundException;
-import com.drew.metadata.Directory;
-import com.drew.metadata.Metadata;
-import com.drew.metadata.MetadataException;
-import com.drew.metadata.exif.ExifIFD0Directory;
-import com.drew.metadata.exif.GpsDirectory;
-
 /**
  * Layer displaying geottaged pictures.
  */
@@ -157,18 +143,8 @@ public class GeoImageLayer extends Layer implements PropertyChangeListener, Jump
                 progressMonitor.subTask(tr("Reading {0}...", f.getName()));
                 progressMonitor.worked(1);
 
-                ImageEntry e = new ImageEntry();
-
-                // Changed to silently cope with no time info in exif. One case
-                // of person having time that couldn't be parsed, but valid GPS info
-
-                try {
-                    e.setExifTime(ExifReader.readTime(f));
-                } catch (ParseException ex) {
-                    e.setExifTime(null);
-                }
-                e.setFile(f);
-                extractExif(e);
+                ImageEntry e = new ImageEntry(f);
+                e.extractExif();
                 data.add(e);
             }
             layer = new GeoImageLayer(data, gpxLayer);
@@ -498,11 +474,11 @@ public class GeoImageLayer extends Layer implements PropertyChangeListener, Jump
                             continue;
                         }
                         Point p = mv.getPoint(e.getPos());
-                        if (e.thumbnail != null) {
-                            Dimension d = scaledDimension(e.thumbnail);
+                        if (e.hasThumbnail()) {
+                            Dimension d = scaledDimension(e.getThumbnail());
                             Rectangle target = new Rectangle(p.x - d.width / 2, p.y - d.height / 2, d.width, d.height);
                             if (clip.intersects(target)) {
-                                tempG.drawImage(e.thumbnail, target.x, target.y, target.width, target.height, null);
+                                tempG.drawImage(e.getThumbnail(), target.x, target.y, target.width, target.height, null);
                             }
                         } else { // thumbnail not loaded yet
                             icon.paintIcon(mv, tempG,
@@ -534,8 +510,8 @@ public class GeoImageLayer extends Layer implements PropertyChangeListener, Jump
 
                 int imgWidth = 100;
                 int imgHeight = 100;
-                if (useThumbs && e.thumbnail != null) {
-                    Dimension d = scaledDimension(e.thumbnail);
+                if (useThumbs && e.hasThumbnail()) {
+                    Dimension d = scaledDimension(e.getThumbnail());
                     imgWidth = d.width;
                     imgHeight = d.height;
                 } else {
@@ -573,7 +549,7 @@ public class GeoImageLayer extends Layer implements PropertyChangeListener, Jump
                     g.drawPolyline(xar, yar, 3);
                 }
 
-                if (useThumbs && e.thumbnail != null) {
+                if (useThumbs && e.hasThumbnail()) {
                     g.setColor(new Color(128, 0, 0, 122));
                     g.fillRect(p.x - imgWidth / 2, p.y - imgHeight / 2, imgWidth, imgHeight);
                 } else {
@@ -593,125 +569,6 @@ public class GeoImageLayer extends Layer implements PropertyChangeListener, Jump
         }
     }
 
-    /**
-     * Extract GPS metadata from image EXIF
-     *
-     * If successful, fills in the LatLon and EastNorth attributes of passed in image
-     */
-    private static void extractExif(ImageEntry e) {
-
-        Metadata metadata;
-        Directory dirExif;
-        GpsDirectory dirGps;
-
-        try {
-            metadata = JpegMetadataReader.readMetadata(e.getFile());
-            dirExif = metadata.getFirstDirectoryOfType(ExifIFD0Directory.class);
-            dirGps = metadata.getFirstDirectoryOfType(GpsDirectory.class);
-        } catch (CompoundException | IOException p) {
-            e.setExifCoor(null);
-            e.setPos(null);
-            return;
-        }
-
-        try {
-            if (dirExif != null) {
-                int orientation = dirExif.getInt(ExifIFD0Directory.TAG_ORIENTATION);
-                e.setExifOrientation(orientation);
-            }
-        } catch (MetadataException ex) {
-            Main.debug(ex.getMessage());
-        }
-
-        if (dirGps == null) {
-            e.setExifCoor(null);
-            e.setPos(null);
-            return;
-        }
-
-        try {
-            double speed = dirGps.getDouble(GpsDirectory.TAG_SPEED);
-            String speedRef = dirGps.getString(GpsDirectory.TAG_SPEED_REF);
-            if ("M".equalsIgnoreCase(speedRef)) {
-                // miles per hour
-                speed *= 1.609344;
-            } else if ("N".equalsIgnoreCase(speedRef)) {
-                // knots == nautical miles per hour
-                speed *= 1.852;
-            }
-            // default is K (km/h)
-            e.setSpeed(speed);
-        } catch (Exception ex) {
-            Main.debug(ex.getMessage());
-        }
-
-        try {
-            double ele = dirGps.getDouble(GpsDirectory.TAG_ALTITUDE);
-            int d = dirGps.getInt(GpsDirectory.TAG_ALTITUDE_REF);
-            if (d == 1) {
-                ele *= -1;
-            }
-            e.setElevation(ele);
-        } catch (MetadataException ex) {
-            Main.debug(ex.getMessage());
-        }
-
-        try {
-            LatLon latlon = ExifReader.readLatLon(dirGps);
-            e.setExifCoor(latlon);
-            e.setPos(e.getExifCoor());
-
-        } catch (Exception ex) { // (other exceptions, e.g. #5271)
-            Main.error("Error reading EXIF from file: "+ex);
-            e.setExifCoor(null);
-            e.setPos(null);
-        }
-
-        try {
-            Double direction = ExifReader.readDirection(dirGps);
-            if (direction != null) {
-                e.setExifImgDir(direction.doubleValue());
-            }
-        } catch (Exception ex) { // (CompoundException and other exceptions, e.g. #5271)
-            Main.debug(ex.getMessage());
-        }
-
-        // Time and date. We can have these cases:
-        // 1) GPS_TIME_STAMP not set -> date/time will be null
-        // 2) GPS_DATE_STAMP not set -> use EXIF date or set to default
-        // 3) GPS_TIME_STAMP and GPS_DATE_STAMP are set
-        int[] timeStampComps = dirGps.getIntArray(GpsDirectory.TAG_TIME_STAMP);
-        if (timeStampComps != null) {
-            int gpsHour = timeStampComps[0];
-            int gpsMin = timeStampComps[1];
-            int gpsSec = timeStampComps[2];
-            Calendar cal = new GregorianCalendar(TimeZone.getTimeZone("UTC"));
-
-            // We have the time. Next step is to check if the GPS date stamp is set.
-            // dirGps.getString() always succeeds, but the return value might be null.
-            String dateStampStr = dirGps.getString(GpsDirectory.TAG_DATE_STAMP);
-            if (dateStampStr != null && dateStampStr.matches("^\\d+:\\d+:\\d+$")) {
-                String[] dateStampComps = dateStampStr.split(":");
-                cal.set(Calendar.YEAR, Integer.parseInt(dateStampComps[0]));
-                cal.set(Calendar.MONTH, Integer.parseInt(dateStampComps[1]) - 1);
-                cal.set(Calendar.DAY_OF_MONTH, Integer.parseInt(dateStampComps[2]));
-            } else {
-                // No GPS date stamp in EXIF data. Copy it from EXIF time.
-                // Date is not set if EXIF time is not available.
-                if (e.hasExifTime()) {
-                    // Time not set yet, so we can copy everything, not just date.
-                    cal.setTime(e.getExifTime());
-                }
-            }
-
-            cal.set(Calendar.HOUR_OF_DAY, gpsHour);
-            cal.set(Calendar.MINUTE, gpsMin);
-            cal.set(Calendar.SECOND, gpsSec);
-
-            e.setExifGpsTime(cal.getTime());
-        }
-    }
-
     public void showNextPhoto() {
         if (data != null && !data.isEmpty()) {
             currentPhoto++;
@@ -808,7 +665,7 @@ public class GeoImageLayer extends Layer implements PropertyChangeListener, Jump
                     ImageViewerDialog.showImage(this, null);
                 }
 
-                if (toDelete.getFile().delete()) {
+                if (Utils.deleteFile(toDelete.getFile())) {
                     Main.info("File "+toDelete.getFile()+" deleted. ");
                 } else {
                     JOptionPane.showMessageDialog(
@@ -860,8 +717,8 @@ public class GeoImageLayer extends Layer implements PropertyChangeListener, Jump
                 }
                 Point p = Main.map.mapView.getPoint(img.getPos());
                 Rectangle r;
-                if (useThumbs && img.thumbnail != null) {
-                    Dimension d = scaledDimension(img.thumbnail);
+                if (useThumbs && img.hasThumbnail()) {
+                    Dimension d = scaledDimension(img.getThumbnail());
                     r = new Rectangle(p.x - d.width / 2, p.y - d.height / 2, d.width, d.height);
                 } else {
                     r = new Rectangle(p.x - icon.getIconWidth() / 2,
@@ -970,8 +827,8 @@ public class GeoImageLayer extends Layer implements PropertyChangeListener, Jump
                     }
                     Point p = Main.map.mapView.getPoint(e.getPos());
                     Rectangle r;
-                    if (useThumbs && e.thumbnail != null) {
-                        Dimension d = scaledDimension(e.thumbnail);
+                    if (useThumbs && e.hasThumbnail()) {
+                        Dimension d = scaledDimension(e.getThumbnail());
                         r = new Rectangle(p.x - d.width / 2, p.y - d.height / 2, d.width, d.height);
                     } else {
                         r = new Rectangle(p.x - icon.getIconWidth() / 2,
diff --git a/src/org/openstreetmap/josm/gui/layer/geoimage/ImageEntry.java b/src/org/openstreetmap/josm/gui/layer/geoimage/ImageEntry.java
index be92dfd..4f2acc9 100644
--- a/src/org/openstreetmap/josm/gui/layer/geoimage/ImageEntry.java
+++ b/src/org/openstreetmap/josm/gui/layer/geoimage/ImageEntry.java
@@ -3,10 +3,27 @@ package org.openstreetmap.josm.gui.layer.geoimage;
 
 import java.awt.Image;
 import java.io.File;
+import java.io.IOException;
+import java.text.ParseException;
+import java.util.Calendar;
+import java.util.Collections;
 import java.util.Date;
+import java.util.GregorianCalendar;
+import java.util.TimeZone;
 
+import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.data.SystemOfMeasurement;
 import org.openstreetmap.josm.data.coor.CachedLatLon;
 import org.openstreetmap.josm.data.coor.LatLon;
+import org.openstreetmap.josm.tools.ExifReader;
+
+import com.drew.imaging.jpeg.JpegMetadataReader;
+import com.drew.lang.CompoundException;
+import com.drew.metadata.Directory;
+import com.drew.metadata.Metadata;
+import com.drew.metadata.MetadataException;
+import com.drew.metadata.exif.ExifIFD0Directory;
+import com.drew.metadata.exif.GpsDirectory;
 
 /**
  * Stores info about each image
@@ -25,7 +42,7 @@ public final class ImageEntry implements Comparable<ImageEntry>, Cloneable {
     private boolean isNewGpsData;
     /** Temporary source of GPS time if not correlated with GPX track. */
     private Date exifGpsTime;
-    Image thumbnail;
+    private Image thumbnail;
 
     /**
      * The following values are computed from the correlation with the gpx track
@@ -43,14 +60,29 @@ public final class ImageEntry implements Comparable<ImageEntry>, Cloneable {
      * When the correlation dialog is open, we like to show the image position
      * for the current time offset on the map in real time.
      * On the other hand, when the user aborts this operation, the old values
-     * should be restored. We have a temprary copy, that overrides
+     * should be restored. We have a temporary copy, that overrides
      * the normal values if it is not null. (This may be not the most elegant
      * solution for this, but it works.)
      */
     ImageEntry tmp;
 
     /**
-     * getter methods that refer to the temporary value
+     * Constructs a new {@code ImageEntry}.
+     */
+    public ImageEntry() {}
+
+    /**
+     * Constructs a new {@code ImageEntry}.
+     * @param file Path to image file on disk
+     */
+    public ImageEntry(File file) {
+        setFile(file);
+    }
+
+    /**
+     * Returns the position value. The position value from the temporary copy
+     * is returned if that copy exists.
+     * @return the position value
      */
     public CachedLatLon getPos() {
         if (tmp != null)
@@ -58,18 +90,33 @@ public final class ImageEntry implements Comparable<ImageEntry>, Cloneable {
         return pos;
     }
 
+    /**
+     * Returns the speed value. The speed value from the temporary copy is
+     * returned if that copy exists.
+     * @return the speed value
+     */
     public Double getSpeed() {
         if (tmp != null)
             return tmp.speed;
         return speed;
     }
 
+    /**
+     * Returns the elevation value. The elevation value from the temporary
+     * copy is returned if that copy exists.
+     * @return the elevation value
+     */
     public Double getElevation() {
         if (tmp != null)
             return tmp.elevation;
         return elevation;
     }
 
+    /**
+     * Returns the GPS time value. The GPS time value from the temporary copy
+     * is returned if that copy exists.
+     * @return the GPS time value
+     */
     public Date getGpsTime() {
         if (tmp != null)
             return getDefensiveDate(tmp.gpsTime);
@@ -86,16 +133,25 @@ public final class ImageEntry implements Comparable<ImageEntry>, Cloneable {
     }
 
     /**
-     * other getter methods
+     * Returns associated file.
+     * @return associated file
      */
     public File getFile() {
         return file;
     }
 
+    /**
+     * Returns EXIF orientation
+     * @return EXIF orientation
+     */
     public Integer getExifOrientation() {
         return exifOrientation;
     }
 
+    /**
+     * Returns EXIF time
+     * @return EXIF time
+     */
     public Date getExifTime() {
         return getDefensiveDate(exifTime);
     }
@@ -138,40 +194,97 @@ public final class ImageEntry implements Comparable<ImageEntry>, Cloneable {
     }
 
     public Double getExifImgDir() {
+        if (tmp != null)
+            return tmp.exifImgDir;
         return exifImgDir;
     }
 
+    /**
+     * Determines whether a thumbnail is set
+     * @return {@code true} if a thumbnail is set
+     */
     public boolean hasThumbnail() {
         return thumbnail != null;
     }
 
     /**
-     * setter methods
+     * Returns the thumbnail.
+     * @return the thumbnail
+     */
+    public Image getThumbnail() {
+        return thumbnail;
+    }
+
+    /**
+     * Sets the thumbnail.
+     * @param thumbnail thumbnail
+     */
+    public void setThumbnail(Image thumbnail) {
+        this.thumbnail = thumbnail;
+    }
+
+    /**
+     * Loads the thumbnail if it was not loaded yet.
+     * @see ThumbsLoader
+     */
+    public void loadThumbnail() {
+        if (thumbnail == null) {
+            new ThumbsLoader(Collections.singleton(this)).run();
+        }
+    }
+
+    /**
+     * Sets the position.
+     * @param pos cached position
      */
     public void setPos(CachedLatLon pos) {
         this.pos = pos;
     }
 
+    /**
+     * Sets the position.
+     * @param pos position (will be cached)
+     */
     public void setPos(LatLon pos) {
-        this.pos = new CachedLatLon(pos);
+        setPos(pos != null ? new CachedLatLon(pos) : null);
     }
 
+    /**
+     * Sets the speed.
+     * @param speed speed
+     */
     public void setSpeed(Double speed) {
         this.speed = speed;
     }
 
+    /**
+     * Sets the elevation.
+     * @param elevation elevation
+     */
     public void setElevation(Double elevation) {
         this.elevation = elevation;
     }
 
+    /**
+     * Sets associated file.
+     * @param file associated file
+     */
     public void setFile(File file) {
         this.file = file;
     }
 
+    /**
+     * Sets EXIF orientation.
+     * @param exifOrientation EXIF orientation
+     */
     public void setExifOrientation(Integer exifOrientation) {
         this.exifOrientation = exifOrientation;
     }
 
+    /**
+     * Sets EXIF time.
+     * @param exifTime EXIF time
+     */
     public void setExifTime(Date exifTime) {
         this.exifTime = getDefensiveDate(exifTime);
     }
@@ -193,7 +306,7 @@ public final class ImageEntry implements Comparable<ImageEntry>, Cloneable {
         this.exifCoor = exifCoor;
     }
 
-    public void setExifImgDir(double exifDir) {
+    public void setExifImgDir(Double exifDir) {
         this.exifImgDir = exifDir;
     }
 
@@ -221,16 +334,33 @@ public final class ImageEntry implements Comparable<ImageEntry>, Cloneable {
     }
 
     /**
-     * Make a fresh copy and save it in the temporary variable.
+     * Make a fresh copy and save it in the temporary variable. Use
+     * {@link #applyTmp()} or {@link #discardTmp()} if the temporary variable
+     * is not needed anymore.
      */
-    public void cleanTmp() {
+    public void createTmp() {
         tmp = clone();
-        tmp.setPos(null);
         tmp.tmp = null;
     }
 
     /**
-     * Copy the values from the temporary variable to the main instance.
+     * Get temporary variable that is used for real time parameter
+     * adjustments. The temporary variable is created if it does not exist
+     * yet. Use {@link #applyTmp()} or {@link #discardTmp()} if the temporary
+     * variable is not needed anymore.
+     * @return temporary variable
+     */
+    public ImageEntry getTmp() {
+        if (tmp == null) {
+            createTmp();
+        }
+        return tmp;
+    }
+
+    /**
+     * Copy the values from the temporary variable to the main instance. The
+     * temporary variable is deleted.
+     * @see #discardTmp()
      */
     public void applyTmp() {
         if (tmp != null) {
@@ -238,12 +368,22 @@ public final class ImageEntry implements Comparable<ImageEntry>, Cloneable {
             speed = tmp.speed;
             elevation = tmp.elevation;
             gpsTime = tmp.gpsTime;
+            exifImgDir = tmp.exifImgDir;
             tmp = null;
         }
     }
 
     /**
+     * Delete the temporary variable. Temporary modifications are lost.
+     * @see #applyTmp()
+     */
+    public void discardTmp() {
+        tmp = null;
+    }
+
+    /**
      * If it has been tagged i.e. matched to a gpx track or retrieved lat/lon from exif
+     * @return {@code true} if it has been tagged
      */
     public boolean isTagged() {
         return pos != null;
@@ -287,4 +427,145 @@ public final class ImageEntry implements Comparable<ImageEntry>, Cloneable {
     public boolean hasNewGpsData() {
         return isNewGpsData;
     }
+
+    /**
+     * Extract GPS metadata from image EXIF. Has no effect if the image file is not set
+     *
+     * If successful, fills in the LatLon, speed, elevation, image direction, and other attributes
+     * @since 9270
+     */
+    public void extractExif() {
+
+        Metadata metadata;
+        Directory dirExif;
+        GpsDirectory dirGps;
+
+        if (file == null) {
+            return;
+        }
+
+        try {
+            metadata = JpegMetadataReader.readMetadata(file);
+            dirExif = metadata.getFirstDirectoryOfType(ExifIFD0Directory.class);
+            dirGps = metadata.getFirstDirectoryOfType(GpsDirectory.class);
+        } catch (CompoundException | IOException p) {
+            Main.warn(p);
+            setExifCoor(null);
+            setPos(null);
+            return;
+        }
+
+        try {
+            if (dirExif != null) {
+                int orientation = dirExif.getInt(ExifIFD0Directory.TAG_ORIENTATION);
+                setExifOrientation(orientation);
+            }
+        } catch (MetadataException ex) {
+            if (Main.isDebugEnabled()) {
+                Main.debug(ex.getMessage());
+            }
+        }
+
+        // Changed to silently cope with no time info in exif. One case
+        // of person having time that couldn't be parsed, but valid GPS info
+        try {
+            setExifTime(ExifReader.readTime(file));
+        } catch (ParseException ex) {
+            setExifTime(null);
+        }
+
+        if (dirGps == null) {
+            setExifCoor(null);
+            setPos(null);
+            return;
+        }
+
+        try {
+            double speed = dirGps.getDouble(GpsDirectory.TAG_SPEED);
+            String speedRef = dirGps.getString(GpsDirectory.TAG_SPEED_REF);
+            if ("M".equalsIgnoreCase(speedRef)) {
+                // miles per hour
+                speed *= SystemOfMeasurement.IMPERIAL.bValue / 1000;
+            } else if ("N".equalsIgnoreCase(speedRef)) {
+                // knots == nautical miles per hour
+                speed *= SystemOfMeasurement.NAUTICAL_MILE.bValue / 1000;
+            }
+            // default is K (km/h)
+            setSpeed(speed);
+        } catch (Exception ex) {
+            if (Main.isDebugEnabled()) {
+                Main.debug(ex.getMessage());
+            }
+        }
+
+        try {
+            double ele = dirGps.getDouble(GpsDirectory.TAG_ALTITUDE);
+            int d = dirGps.getInt(GpsDirectory.TAG_ALTITUDE_REF);
+            if (d == 1) {
+                ele *= -1;
+            }
+            setElevation(ele);
+        } catch (MetadataException ex) {
+            if (Main.isDebugEnabled()) {
+                Main.debug(ex.getMessage());
+            }
+        }
+
+        try {
+            LatLon latlon = ExifReader.readLatLon(dirGps);
+            setExifCoor(latlon);
+            setPos(getExifCoor());
+
+        } catch (Exception ex) { // (other exceptions, e.g. #5271)
+            Main.error("Error reading EXIF from file: " + ex);
+            setExifCoor(null);
+            setPos(null);
+        }
+
+        try {
+            Double direction = ExifReader.readDirection(dirGps);
+            if (direction != null) {
+                setExifImgDir(direction);
+            }
+        } catch (Exception ex) { // (CompoundException and other exceptions, e.g. #5271)
+            if (Main.isDebugEnabled()) {
+                Main.debug(ex.getMessage());
+            }
+        }
+
+        // Time and date. We can have these cases:
+        // 1) GPS_TIME_STAMP not set -> date/time will be null
+        // 2) GPS_DATE_STAMP not set -> use EXIF date or set to default
+        // 3) GPS_TIME_STAMP and GPS_DATE_STAMP are set
+        int[] timeStampComps = dirGps.getIntArray(GpsDirectory.TAG_TIME_STAMP);
+        if (timeStampComps != null) {
+            int gpsHour = timeStampComps[0];
+            int gpsMin = timeStampComps[1];
+            int gpsSec = timeStampComps[2];
+            Calendar cal = new GregorianCalendar(TimeZone.getTimeZone("UTC"));
+
+            // We have the time. Next step is to check if the GPS date stamp is set.
+            // dirGps.getString() always succeeds, but the return value might be null.
+            String dateStampStr = dirGps.getString(GpsDirectory.TAG_DATE_STAMP);
+            if (dateStampStr != null && dateStampStr.matches("^\\d+:\\d+:\\d+$")) {
+                String[] dateStampComps = dateStampStr.split(":");
+                cal.set(Calendar.YEAR, Integer.parseInt(dateStampComps[0]));
+                cal.set(Calendar.MONTH, Integer.parseInt(dateStampComps[1]) - 1);
+                cal.set(Calendar.DAY_OF_MONTH, Integer.parseInt(dateStampComps[2]));
+            } else {
+                // No GPS date stamp in EXIF data. Copy it from EXIF time.
+                // Date is not set if EXIF time is not available.
+                if (hasExifTime()) {
+                    // Time not set yet, so we can copy everything, not just date.
+                    cal.setTime(getExifTime());
+                }
+            }
+
+            cal.set(Calendar.HOUR_OF_DAY, gpsHour);
+            cal.set(Calendar.MINUTE, gpsMin);
+            cal.set(Calendar.SECOND, gpsSec);
+
+            setExifGpsTime(cal.getTime());
+        }
+    }
 }
diff --git a/src/org/openstreetmap/josm/gui/layer/geoimage/ImageViewerDialog.java b/src/org/openstreetmap/josm/gui/layer/geoimage/ImageViewerDialog.java
index 8ff6a51..6666eb2 100644
--- a/src/org/openstreetmap/josm/gui/layer/geoimage/ImageViewerDialog.java
+++ b/src/org/openstreetmap/josm/gui/layer/geoimage/ImageViewerDialog.java
@@ -69,6 +69,7 @@ public final class ImageViewerDialog extends ToggleDialog implements LayerChange
     private JButton btnNext;
     private JButton btnPrevious;
     private JButton btnCollapse;
+    private JToggleButton tbCentre;
 
     private ImageViewerDialog() {
         super(tr("Geotagged Images"), "geoimage", tr("Display geotagged images"), Shortcut.registerShortcut("tools:geotagged",
@@ -149,7 +150,7 @@ public final class ImageViewerDialog extends ToggleDialog implements LayerChange
                         "geoimage:last", tr("Geoimage: {0}", tr("Show last Image")), KeyEvent.VK_END, Shortcut.DIRECT)
         );
 
-        JToggleButton tbCentre = new JToggleButton(new ImageAction(COMMAND_CENTERVIEW,
+        tbCentre = new JToggleButton(new ImageAction(COMMAND_CENTERVIEW,
                 ImageProvider.get("dialogs", "centreview"), tr("Center view")));
         tbCentre.setPreferredSize(buttonDim);
 
@@ -224,7 +225,8 @@ public final class ImageViewerDialog extends ToggleDialog implements LayerChange
             } else if (COMMAND_LAST.equals(action) && currentLayer != null) {
                 currentLayer.showLastPhoto();
             } else if (COMMAND_CENTERVIEW.equals(action)) {
-                centerView = ((JToggleButton) e.getSource()).isSelected();
+                final JToggleButton button = (JToggleButton) e.getSource();
+                centerView = button.isEnabled() && button.isSelected();
                 if (centerView && currentEntry != null && currentEntry.getPos() != null) {
                     Main.map.mapView.zoomTo(currentEntry.getPos());
                 }
@@ -275,6 +277,19 @@ public final class ImageViewerDialog extends ToggleDialog implements LayerChange
         getInstance().btnNext.setEnabled(value);
     }
 
+    /**
+     * Enables (or disables) the "Center view" button.
+     * @param value {@code true} to enable the button, {@code false} otherwise
+     * @return the old enabled value. Can be used to restore the original enable state
+     */
+    public static synchronized boolean setCentreEnabled(boolean value) {
+        final ImageViewerDialog instance = getInstance();
+        final boolean wasEnabled = instance.tbCentre.isEnabled();
+        instance.tbCentre.setEnabled(value);
+        instance.tbCentre.getAction().actionPerformed(new ActionEvent(instance.tbCentre, 0, null));
+        return wasEnabled;
+    }
+
     private transient GeoImageLayer currentLayer;
     private transient ImageEntry currentEntry;
 
@@ -303,7 +318,7 @@ public final class ImageViewerDialog extends ToggleDialog implements LayerChange
             setTitle(tr("Geotagged Images") + (entry.getFile() != null ? " - " + entry.getFile().getName() : ""));
             StringBuilder osd = new StringBuilder(entry.getFile() != null ? entry.getFile().getName() : "");
             if (entry.getElevation() != null) {
-                osd.append(tr("\nAltitude: {0} m", entry.getElevation().longValue()));
+                osd.append(tr("\nAltitude: {0} m", Math.round(entry.getElevation())));
             }
             if (entry.getSpeed() != null) {
                 osd.append(tr("\nSpeed: {0} km/h", Math.round(entry.getSpeed())));
diff --git a/src/org/openstreetmap/josm/gui/layer/geoimage/ThumbsLoader.java b/src/org/openstreetmap/josm/gui/layer/geoimage/ThumbsLoader.java
index 9460d76..e559e1d 100644
--- a/src/org/openstreetmap/josm/gui/layer/geoimage/ThumbsLoader.java
+++ b/src/org/openstreetmap/josm/gui/layer/geoimage/ThumbsLoader.java
@@ -12,7 +12,7 @@ import java.io.ByteArrayOutputStream;
 import java.io.File;
 import java.io.IOException;
 import java.util.ArrayList;
-import java.util.List;
+import java.util.Collection;
 
 import javax.imageio.ImageIO;
 
@@ -26,15 +26,38 @@ public class ThumbsLoader implements Runnable {
     public static final int maxSize = 120;
     public static final int minSize = 22;
     public volatile boolean stop;
-    private final List<ImageEntry> data;
+    private final Collection<ImageEntry> data;
     private final GeoImageLayer layer;
     private MediaTracker tracker;
     private ICacheAccess<String, BufferedImageCacheEntry> cache;
     private final boolean cacheOff = Main.pref.getBoolean("geoimage.noThumbnailCache", false);
 
-    public ThumbsLoader(GeoImageLayer layer) {
+    private ThumbsLoader(Collection<ImageEntry> data, GeoImageLayer layer) {
+        this.data = data;
         this.layer = layer;
-        this.data = new ArrayList<>(layer.data);
+        initCache();
+    }
+
+    /**
+     * Constructs a new thumbnail loader that operates on a geoimage layer.
+     * @param layer geoimage layer
+     */
+    public ThumbsLoader(GeoImageLayer layer) {
+        this(new ArrayList<>(layer.data), layer);
+    }
+
+    /**
+     * Constructs a new thumbnail loader that operates on the image entries
+     * @param entries image entries
+     */
+    public ThumbsLoader(Collection<ImageEntry> entries) {
+        this(entries, null);
+    }
+
+    /**
+     * Initialize the thumbnail cache.
+     */
+    private void initCache() {
         if (!cacheOff) {
             try {
                 cache = JCSCacheManager.getCache("geoimage-thumbnails", 0, 120,
@@ -54,18 +77,20 @@ public class ThumbsLoader implements Runnable {
             if (stop) return;
 
             // Do not load thumbnails that were loaded before.
-            if (entry.thumbnail == null) {
-                entry.thumbnail = loadThumb(entry);
+            if (!entry.hasThumbnail()) {
+                entry.setThumbnail(loadThumb(entry));
 
-                if (Main.isDisplayingMapView()) {
+                if (layer != null && Main.isDisplayingMapView()) {
                     layer.updateOffscreenBuffer = true;
                     Main.map.mapView.repaint();
                 }
             }
         }
-        layer.thumbsLoaded();
-        layer.updateOffscreenBuffer = true;
-        Main.map.mapView.repaint();
+        if (layer != null) {
+            layer.thumbsLoaded();
+            layer.updateOffscreenBuffer = true;
+            Main.map.mapView.repaint();
+        }
     }
 
     private BufferedImage loadThumb(ImageEntry entry) {
diff --git a/src/org/openstreetmap/josm/gui/layer/gpx/ChooseTrackVisibilityAction.java b/src/org/openstreetmap/josm/gui/layer/gpx/ChooseTrackVisibilityAction.java
index 67f3fe7..6f67df1 100644
--- a/src/org/openstreetmap/josm/gui/layer/gpx/ChooseTrackVisibilityAction.java
+++ b/src/org/openstreetmap/josm/gui/layer/gpx/ChooseTrackVisibilityAction.java
@@ -107,8 +107,10 @@ public class ChooseTrackVisibilityAction extends AbstractAction {
     }
 
     /**
-     * gathers all available data for the tracks and returns them as array of arrays
-     * in the expected column order  */
+     * Gathers all available data for the tracks and returns them as array of arrays
+     * in the expected column order.
+     * @return table data
+     */
     private Object[][] buildTableContents() {
         Object[][] tracks = new Object[layer.data.tracks.size()][5];
         int i = 0;
@@ -127,7 +129,10 @@ public class ChooseTrackVisibilityAction extends AbstractAction {
 
     /**
      * Builds an non-editable table whose 5th column will open a browser when double clicked.
-     * The table will fill its parent. */
+     * The table will fill its parent.
+     * @param content table data
+     * @return non-editable table
+     */
     private JTable buildTable(Object[][] content) {
         final String[] headers = {tr("Name"), tr("Description"), tr("Timespan"), tr("Length"), tr("URL")};
         DefaultTableModel model = new DefaultTableModel(content, headers);
diff --git a/src/org/openstreetmap/josm/gui/layer/gpx/DateFilterPanel.java b/src/org/openstreetmap/josm/gui/layer/gpx/DateFilterPanel.java
index 1b1b4bc..489bcdf 100644
--- a/src/org/openstreetmap/josm/gui/layer/gpx/DateFilterPanel.java
+++ b/src/org/openstreetmap/josm/gui/layer/gpx/DateFilterPanel.java
@@ -36,7 +36,10 @@ public class DateFilterPanel extends JPanel {
     /**
      * Create the panel to filter tracks on GPX layer @param layer by date
      * Preferences will be stored in @param preferencePrefix
-     * If @param enabled = true, the the panel is created as active and filtering occurs immediately.
+     * If @param enabled = true, then the panel is created as active and filtering occurs immediately.
+     * @param layer GPX layer
+     * @param preferencePrefix preference prefix
+     * @param enabled panel initial enabled state
      */
     public DateFilterPanel(GpxLayer layer, String preferencePrefix, boolean enabled) {
         super(new GridBagLayout());
diff --git a/src/org/openstreetmap/josm/gui/layer/gpx/GpxDrawHelper.java b/src/org/openstreetmap/josm/gui/layer/gpx/GpxDrawHelper.java
index d0b7610..4e98710 100644
--- a/src/org/openstreetmap/josm/gui/layer/gpx/GpxDrawHelper.java
+++ b/src/org/openstreetmap/josm/gui/layer/gpx/GpxDrawHelper.java
@@ -10,7 +10,9 @@ import java.awt.Graphics2D;
 import java.awt.Point;
 import java.awt.RenderingHints;
 import java.awt.Stroke;
+import java.util.ArrayList;
 import java.util.Collection;
+import java.util.Collections;
 import java.util.Date;
 import java.util.List;
 
@@ -78,6 +80,7 @@ public class GpxDrawHelper {
     /** Opacity for hdop points **/
     private int hdopAlpha;
 
+    private static final Color DEFAULT_COLOR = Color.magenta;
 
     // lookup array to draw arrows without doing any math
     private static final int ll0 = 9;
@@ -125,7 +128,7 @@ public class GpxDrawHelper {
      * @return the color or null if the color is not constant
      */
     public Color getColor(String layerName, boolean ignoreCustom) {
-        Color c = Main.pref.getColor(marktr("gps point"), specName(layerName), Color.gray);
+        Color c = Main.pref.getColor(marktr("gps point"), specName(layerName), DEFAULT_COLOR);
         return ignoreCustom || getColorMode(layerName) == ColorMode.NONE ? c : null;
     }
 
@@ -148,7 +151,7 @@ public class GpxDrawHelper {
      * @return the color
      **/
     public static Color getGenericColor() {
-        return Main.pref.getColor(marktr("gps point"), Color.gray);
+        return Main.pref.getColor(marktr("gps point"), DEFAULT_COLOR);
     }
 
     /**
@@ -223,6 +226,7 @@ public class GpxDrawHelper {
 
         if (colorModeDynamic) {
             if (colored == ColorMode.VELOCITY) {
+                final List<Double> velocities = new ArrayList<>();
                 for (Collection<WayPoint> segment : data.getLinesIterable(null)) {
                     if (!forceLines) {
                         oldWp = null;
@@ -235,6 +239,7 @@ public class GpxDrawHelper {
                         if (oldWp != null && trkPnt.time > oldWp.time) {
                             double vel = c.greatCircleDistance(oldWp.getCoor())
                                     / (trkPnt.time - oldWp.time);
+                            velocities.add(vel);
                             if (vel > maxval) {
                                 maxval = vel;
                             }
@@ -245,6 +250,9 @@ public class GpxDrawHelper {
                         oldWp = trkPnt;
                     }
                 }
+                Collections.sort(velocities);
+                minval = velocities.get(velocities.size() / 20); // 5% percentile to remove outliers
+                maxval = velocities.get(velocities.size() * 19 / 20); // 95% percentile to remove outliers
                 if (minval >= maxval) {
                     velocityScale.setRange(0, 120/3.6);
                 } else {
diff --git a/src/org/openstreetmap/josm/gui/layer/gpx/ImportAudioAction.java b/src/org/openstreetmap/josm/gui/layer/gpx/ImportAudioAction.java
index b974239..6f55f5a 100644
--- a/src/org/openstreetmap/josm/gui/layer/gpx/ImportAudioAction.java
+++ b/src/org/openstreetmap/josm/gui/layer/gpx/ImportAudioAction.java
@@ -125,8 +125,10 @@ public class ImportAudioAction extends AbstractAction {
      * explict waypoints in the GPX layer, or (b) named trackpoints in the GPX layer, or (d)
      * timestamp on the wav file (e) (in future) voice recognised markers in the sound recording (f)
      * a single marker at the beginning of the track
-     * @param wavFile : the file to be associated with the markers in the new marker layer
-     * @param markers : keeps track of warning messages to avoid repeated warnings
+     * @param wavFile the file to be associated with the markers in the new marker layer
+     * @param ml marker layer
+     * @param firstStartTime first start time in milliseconds, used for (d)
+     * @param markers keeps track of warning messages to avoid repeated warnings
      */
     private void importAudio(File wavFile, MarkerLayer ml, double firstStartTime, Markers markers) {
         URL url = Utils.fileToURL(wavFile);
diff --git a/src/org/openstreetmap/josm/gui/layer/gpx/ImportImagesAction.java b/src/org/openstreetmap/josm/gui/layer/gpx/ImportImagesAction.java
index b47e731..74dca6c 100644
--- a/src/org/openstreetmap/josm/gui/layer/gpx/ImportImagesAction.java
+++ b/src/org/openstreetmap/josm/gui/layer/gpx/ImportImagesAction.java
@@ -41,6 +41,9 @@ public class ImportImagesAction extends AbstractAction {
     }
 
     private static void addRecursiveFiles(List<File> files, File[] sel) {
+        if (sel == null) { // listFiles might return null
+            return;
+        }
         for (File f : sel) {
             if (f.isDirectory()) {
                 addRecursiveFiles(files, f.listFiles());
diff --git a/src/org/openstreetmap/josm/gui/layer/markerlayer/MarkerLayer.java b/src/org/openstreetmap/josm/gui/layer/markerlayer/MarkerLayer.java
index 42f9b82..e62d62b 100644
--- a/src/org/openstreetmap/josm/gui/layer/markerlayer/MarkerLayer.java
+++ b/src/org/openstreetmap/josm/gui/layer/markerlayer/MarkerLayer.java
@@ -73,6 +73,8 @@ public class MarkerLayer extends Layer implements JumpToMarkerLayer {
     private Marker currentMarker;
     public AudioMarker syncAudioMarker;
 
+    private static final Color DEFAULT_COLOR = Color.magenta;
+
     /**
      * Constructs a new {@code MarkerLayer}.
      * @param indata The GPX data for this layer
@@ -189,12 +191,12 @@ public class MarkerLayer extends Layer implements JumpToMarkerLayer {
     @Override
     public Color getColor(boolean ignoreCustom) {
         String name = getName();
-        return Main.pref.getColor(marktr("gps marker"), name != null ? "layer "+name : null, Color.gray);
+        return Main.pref.getColor(marktr("gps marker"), name != null ? "layer "+name : null, DEFAULT_COLOR);
     }
 
     /* for preferences */
     public static Color getGenericColor() {
-        return Main.pref.getColor(marktr("gps marker"), Color.gray);
+        return Main.pref.getColor(marktr("gps marker"), DEFAULT_COLOR);
     }
 
     @Override
diff --git a/src/org/openstreetmap/josm/gui/layer/markerlayer/MarkerProducers.java b/src/org/openstreetmap/josm/gui/layer/markerlayer/MarkerProducers.java
index 699ba16..517ce08 100644
--- a/src/org/openstreetmap/josm/gui/layer/markerlayer/MarkerProducers.java
+++ b/src/org/openstreetmap/josm/gui/layer/markerlayer/MarkerProducers.java
@@ -22,6 +22,9 @@ public interface MarkerProducers {
      * @param wp waypoint data
      * @param relativePath An path to use for constructing relative URLs or
      *        <code>null</code> for no relative URLs
+     * @param parentLayer parent marker layer
+     * @param time Absolute time of marker in seconds since epoch
+     * @param offset Time offset in seconds from the gpx point from which it was derived
      * @return A collection of Marker objects, or <code>null</code>.
      */
     Collection<Marker> createMarkers(WayPoint wp, File relativePath, MarkerLayer parentLayer, double time, double offset);
diff --git a/src/org/openstreetmap/josm/gui/layer/markerlayer/PlayHeadMarker.java b/src/org/openstreetmap/josm/gui/layer/markerlayer/PlayHeadMarker.java
index 4880a23..f44722f 100644
--- a/src/org/openstreetmap/josm/gui/layer/markerlayer/PlayHeadMarker.java
+++ b/src/org/openstreetmap/josm/gui/layer/markerlayer/PlayHeadMarker.java
@@ -112,6 +112,7 @@ public final class PlayHeadMarker extends Marker {
 
     /**
      * reinstate the old map mode after switching temporarily to do a play head drag
+     * @param reset whether to reset state (pause audio and restore old coordinates)
      */
     private void endDrag(boolean reset) {
         if (!wasPlaying || reset) {
@@ -181,8 +182,10 @@ public final class PlayHeadMarker extends Marker {
                     );
             endDrag(true);
         } else {
-            setCoor(cw.getCoor());
-            ca.play(cw.time - ca.time);
+            if (cw != null) {
+                setCoor(cw.getCoor());
+                ca.play(cw.time - ca.time);
+            }
             endDrag(false);
         }
     }
diff --git a/src/org/openstreetmap/josm/gui/mappaint/StyleCache.java b/src/org/openstreetmap/josm/gui/mappaint/DividedScale.java
similarity index 52%
copy from src/org/openstreetmap/josm/gui/mappaint/StyleCache.java
copy to src/org/openstreetmap/josm/gui/mappaint/DividedScale.java
index 23b1716..6eb0383 100644
--- a/src/org/openstreetmap/josm/gui/mappaint/StyleCache.java
+++ b/src/org/openstreetmap/josm/gui/mappaint/DividedScale.java
@@ -2,34 +2,42 @@
 package org.openstreetmap.josm.gui.mappaint;
 
 import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Iterator;
 import java.util.List;
-import java.util.Objects;
 
-import org.openstreetmap.josm.data.osm.Storage;
+import org.openstreetmap.josm.gui.mappaint.styleelement.StyleElement;
 import org.openstreetmap.josm.tools.Pair;
 
 /**
- * Caches styles for a single primitive.
- * Splits the range of possible scale values (0 < scale < +Infinity) into multiple
- * subranges, for each scale range it keeps a list of styles.
- * Immutable class, equals & hashCode is required (the same for StyleList, ElemStyle
- * and its subclasses).
+ * Splits the range of possible scale values (0 < scale < +Infinity) into
+ * multiple subranges, for each scale range it keeps a data object of a certain
+ * type T (can be null).
+ *
+ * Used for caching style information for different zoom levels.
+ *
+ * Immutable class, equals & hashCode is required (the same for
+ * {@link StyleElementList}, {@link StyleElement} and its subclasses).
+ *
+ * @param <T> the type of the data objects
  */
-public final class StyleCache {
-    /* list of boundaries for the scale ranges */
-    private final List<Double> bd;
-    /* styles for each scale range */
-    private final List<StyleList> data;
+public class DividedScale<T> {
 
-    // TODO: clean up the intern pool from time to time (after purge or layer removal)
-    private static final Storage<StyleCache> internPool = new Storage<>();
+    // this exception type is for debugging #8997 and can later be replaced
+    // by AssertionError
+    public static class RangeViolatedError extends Error {
+        public RangeViolatedError() {
+        }
 
-    public static final StyleCache EMPTY_STYLECACHE = (new StyleCache()).intern();
+        public RangeViolatedError(String message) {
+            super(message);
+        }
+    }
 
-    private StyleCache() {
+    /* list of boundaries for the scale ranges */
+    private final List<Double> bd;
+    /* data objects for each scale range */
+    private final List<T> data;
+
+    protected DividedScale() {
         bd = new ArrayList<>();
         bd.add(0.0);
         bd.add(Double.POSITIVE_INFINITY);
@@ -37,73 +45,18 @@ public final class StyleCache {
         data.add(null);
     }
 
-    private StyleCache(StyleCache s) {
+    protected DividedScale(DividedScale<T> s) {
         bd = new ArrayList<>(s.bd);
         data = new ArrayList<>(s.data);
     }
 
     /**
-     * List of Styles, immutable
-     */
-    public static class StyleList implements Iterable<ElemStyle> {
-        private final List<ElemStyle> lst;
-
-        /**
-         * Constructs a new {@code StyleList}.
-         */
-        public StyleList() {
-            lst = new ArrayList<>();
-        }
-
-        public StyleList(ElemStyle... init) {
-            lst = new ArrayList<>(Arrays.asList(init));
-        }
-
-        public StyleList(Collection<ElemStyle> sl) {
-            lst = new ArrayList<>(sl);
-        }
-
-        public StyleList(StyleList sl, ElemStyle s) {
-            lst = new ArrayList<>(sl.lst);
-            lst.add(s);
-        }
-
-        @Override
-        public Iterator<ElemStyle> iterator() {
-            return lst.iterator();
-        }
-
-        public boolean isEmpty() {
-            return lst.isEmpty();
-        }
-
-        public int size() {
-            return lst.size();
-        }
-
-        @Override
-        public String toString() {
-            return lst.toString();
-        }
-
-        @Override
-        public boolean equals(Object obj) {
-            if (obj == null || getClass() != obj.getClass())
-                return false;
-            final StyleList other = (StyleList) obj;
-            return Objects.equals(lst, other.lst);
-        }
-
-        @Override
-        public int hashCode() {
-            return lst.hashCode();
-        }
-    }
-
-    /**
-     * looks up styles for a certain scale value
+     * Looks up the data object for a certain scale value.
+     *
+     * @param scale scale
+     * @return the data object at the given scale, can be null
      */
-    public StyleList get(double scale) {
+    public T get(double scale) {
         if (scale <= 0)
             throw new IllegalArgumentException("scale must be <= 0 but is "+scale);
         for (int i = 0; i < data.size(); ++i) {
@@ -115,10 +68,13 @@ public final class StyleCache {
     }
 
     /**
-     * looks up styles for a certain scale value and additionally returns
-     * the scale range for the returned styles
+     * Looks up the data object for a certain scale value and additionally returns
+     * the scale range where the object is valid.
+     *
+     * @param scale scale
+     * @return pair containing data object and range
      */
-    public Pair<StyleList, Range> getWithRange(double scale) {
+    public Pair<T, Range> getWithRange(double scale) {
         if (scale <= 0)
             throw new IllegalArgumentException("scale must be <= 0 but is "+scale);
         for (int i = 0; i < data.size(); ++i) {
@@ -129,33 +85,25 @@ public final class StyleCache {
         throw new AssertionError();
     }
 
-    public StyleCache put(StyleList sl, Range r) {
-        return put(sl, r.getLower(), r.getUpper());
-    }
-
     /**
-     * add a new styles to the cache. this is only possible, if
-     * for this scale range, there is nothing in the cache yet.
+     * Add data object which is valid for the given range.
+     *
+     * This is only possible, if there is no data for the given range yet.
+     *
+     * @param o data object
+     * @param r the valid range
+     * @return a new, updated, <code>DividedScale</code> object
      */
-    public StyleCache put(StyleList sl, double lower, double upper) {
-        StyleCache s = new StyleCache(this);
-        s.putImpl(sl, lower, upper);
+    public DividedScale<T> put(T o, Range r) {
+        DividedScale<T> s = new DividedScale<>(this);
+        s.putImpl(o, r.getLower(), r.getUpper());
         s.consistencyTest();
-        return s.intern();
-    }
-
-    // this exception type is for debugging #8997 and can later be replaced
-    // by AssertionError
-    public static class RangeViolatedError extends Error {
-        public RangeViolatedError() {
-        }
-
-        public RangeViolatedError(String message) {
-            super(message);
-        }
+        return s;
     }
 
     /**
+     * Implementation of the <code>put</code> operation.
+     *
      * ASCII-art explanation:
      *
      *              data[i]
@@ -164,34 +112,36 @@ public final class StyleCache {
      *
      *         (--------]
      *       lower     upper
+     * @param o data object
+     * @param lower lower bound
+     * @param upper upper bound
      */
-    private void putImpl(StyleList sl, double lower, double upper) {
+    protected void putImpl(T o, double lower, double upper) {
         int i = 0;
         while (bd.get(i) < lower) {
             ++i;
         }
         if (bd.get(i) == lower) {
             if (upper > bd.get(i+1))
-                throw new RangeViolatedError("the new range must be within a single subrange (1)");
+                throw new StyleCache.RangeViolatedError("the new range must be within a single subrange (1)");
             if (data.get(i) != null)
-                throw new RangeViolatedError("the new range must be within a subrange that has no data");
+                throw new StyleCache.RangeViolatedError("the new range must be within a subrange that has no data");
 
             if (bd.get(i+1) == upper) {
                 //  --|-------|--------|--
                 //   i-1      i       i+1
                 //            (--------]
-                data.set(i, sl);
+                data.set(i, o);
             } else {
                 //  --|-------|--------|--
                 //   i-1      i       i+1
                 //            (-----]
                 bd.add(i+1, upper);
-                data.add(i, sl);
+                data.add(i, o);
             }
-            return;
         } else {
             if (bd.get(i) < upper)
-                throw new RangeViolatedError("the new range must be within a single subrange (2)");
+                throw new StyleCache.RangeViolatedError("the new range must be within a single subrange (2)");
             if (data.get(i-1) != null)
                 throw new AssertionError();
 
@@ -200,7 +150,7 @@ public final class StyleCache {
             //       (--]   or
             //       (----]
             bd.add(i, lower);
-            data.add(i, sl);
+            data.add(i, o);
 
             //  --|--|----|--------|--
             //   i-1 i   i+1      i+2
@@ -209,7 +159,6 @@ public final class StyleCache {
                 bd.add(i+1, upper);
                 data.add(i+1, null);
             }
-            return;
         }
     }
 
@@ -224,20 +173,11 @@ public final class StyleCache {
         }
     }
 
-    /**
-     * Like String.intern() (reduce memory consumption).
-     * StyleCache must not be changed after it has
-     * been added to the intern pool.
-     */
-    public StyleCache intern() {
-        return internPool.putUnique(this);
-    }
-
     @Override
     public boolean equals(Object obj) {
         if (obj == null || getClass() != obj.getClass())
             return false;
-        final StyleCache other = (StyleCache) obj;
+        final DividedScale other = (DividedScale) obj;
         return bd.equals(other.bd) && data.equals(other.data);
     }
 
@@ -251,6 +191,6 @@ public final class StyleCache {
 
     @Override
     public String toString() {
-        return "SC{" + bd + ' ' + data + '}';
+        return "DS{" + bd + ' ' + data + '}';
     }
 }
diff --git a/src/org/openstreetmap/josm/gui/mappaint/ElemStyles.java b/src/org/openstreetmap/josm/gui/mappaint/ElemStyles.java
index 0444099..1f4248e 100644
--- a/src/org/openstreetmap/josm/gui/mappaint/ElemStyles.java
+++ b/src/org/openstreetmap/josm/gui/mappaint/ElemStyles.java
@@ -20,8 +20,15 @@ import org.openstreetmap.josm.data.osm.Way;
 import org.openstreetmap.josm.data.osm.visitor.paint.relations.Multipolygon;
 import org.openstreetmap.josm.data.osm.visitor.paint.relations.MultipolygonCache;
 import org.openstreetmap.josm.gui.NavigatableComponent;
-import org.openstreetmap.josm.gui.mappaint.StyleCache.StyleList;
 import org.openstreetmap.josm.gui.mappaint.mapcss.MapCSSStyleSource;
+import org.openstreetmap.josm.gui.mappaint.styleelement.AreaElement;
+import org.openstreetmap.josm.gui.mappaint.styleelement.BoxTextElement;
+import org.openstreetmap.josm.gui.mappaint.styleelement.LineElement;
+import org.openstreetmap.josm.gui.mappaint.styleelement.LineTextElement;
+import org.openstreetmap.josm.gui.mappaint.styleelement.NodeElement;
+import org.openstreetmap.josm.gui.mappaint.styleelement.RepeatImageElement;
+import org.openstreetmap.josm.gui.mappaint.styleelement.StyleElement;
+import org.openstreetmap.josm.gui.mappaint.styleelement.TextLabel;
 import org.openstreetmap.josm.gui.util.GuiHelper;
 import org.openstreetmap.josm.tools.Pair;
 import org.openstreetmap.josm.tools.Utils;
@@ -71,7 +78,7 @@ public class ElemStyles implements PreferenceChangedListener {
      * @param nc display component
      * @return list of styles
      */
-    public StyleList get(OsmPrimitive osm, double scale, NavigatableComponent nc) {
+    public StyleElementList get(OsmPrimitive osm, double scale, NavigatableComponent nc) {
         return getStyleCacheWithRange(osm, scale, nc).a;
     }
 
@@ -80,28 +87,32 @@ public class ElemStyles implements PreferenceChangedListener {
      *
      * Automatically adds default styles in case no proper style was found.
      * Uses the cache, if possible, and saves the results to the cache.
+     * @param osm OSM primitive
+     * @param scale scale
+     * @param nc navigatable component
+     * @return pair containing style list and range
      */
-    public Pair<StyleList, Range> getStyleCacheWithRange(OsmPrimitive osm, double scale, NavigatableComponent nc) {
+    public Pair<StyleElementList, Range> getStyleCacheWithRange(OsmPrimitive osm, double scale, NavigatableComponent nc) {
         if (osm.mappaintStyle == null || osm.mappaintCacheIdx != cacheIdx || scale <= 0) {
             osm.mappaintStyle = StyleCache.EMPTY_STYLECACHE;
         } else {
-            Pair<StyleList, Range> lst = osm.mappaintStyle.getWithRange(scale);
+            Pair<StyleElementList, Range> lst = osm.mappaintStyle.getWithRange(scale);
             if (lst.a != null)
                 return lst;
         }
-        Pair<StyleList, Range> p = getImpl(osm, scale, nc);
+        Pair<StyleElementList, Range> p = getImpl(osm, scale, nc);
         if (osm instanceof Node && isDefaultNodes()) {
             if (p.a.isEmpty()) {
-                if (TextElement.AUTO_LABEL_COMPOSITION_STRATEGY.compose(osm) != null) {
-                    p.a = NodeElemStyle.DEFAULT_NODE_STYLELIST_TEXT;
+                if (TextLabel.AUTO_LABEL_COMPOSITION_STRATEGY.compose(osm) != null) {
+                    p.a = NodeElement.DEFAULT_NODE_STYLELIST_TEXT;
                 } else {
-                    p.a = NodeElemStyle.DEFAULT_NODE_STYLELIST;
+                    p.a = NodeElement.DEFAULT_NODE_STYLELIST;
                 }
             } else {
                 boolean hasNonModifier = false;
                 boolean hasText = false;
-                for (ElemStyle s : p.a) {
-                    if (s instanceof BoxTextElemStyle) {
+                for (StyleElement s : p.a) {
+                    if (s instanceof BoxTextElement) {
                         hasText = true;
                     } else {
                         if (!s.isModifier) {
@@ -110,26 +121,26 @@ public class ElemStyles implements PreferenceChangedListener {
                     }
                 }
                 if (!hasNonModifier) {
-                    p.a = new StyleList(p.a, NodeElemStyle.SIMPLE_NODE_ELEMSTYLE);
+                    p.a = new StyleElementList(p.a, NodeElement.SIMPLE_NODE_ELEMSTYLE);
                     if (!hasText) {
-                        if (TextElement.AUTO_LABEL_COMPOSITION_STRATEGY.compose(osm) != null) {
-                            p.a = new StyleList(p.a, BoxTextElemStyle.SIMPLE_NODE_TEXT_ELEMSTYLE);
+                        if (TextLabel.AUTO_LABEL_COMPOSITION_STRATEGY.compose(osm) != null) {
+                            p.a = new StyleElementList(p.a, BoxTextElement.SIMPLE_NODE_TEXT_ELEMSTYLE);
                         }
                     }
                 }
             }
         } else if (osm instanceof Way && isDefaultLines()) {
             boolean hasProperLineStyle = false;
-            for (ElemStyle s : p.a) {
+            for (StyleElement s : p.a) {
                 if (s.isProperLineStyle()) {
                     hasProperLineStyle = true;
                     break;
                 }
             }
             if (!hasProperLineStyle) {
-                AreaElemStyle area = Utils.find(p.a, AreaElemStyle.class);
-                LineElemStyle line = area == null ? LineElemStyle.UNTAGGED_WAY : LineElemStyle.createSimpleLineStyle(area.color, true);
-                p.a = new StyleList(p.a, line);
+                AreaElement area = Utils.find(p.a, AreaElement.class);
+                LineElement line = area == null ? LineElement.UNTAGGED_WAY : LineElement.createSimpleLineStyle(area.color, true);
+                p.a = new StyleElementList(p.a, line);
             }
         }
         StyleCache style = osm.mappaintStyle != null ? osm.mappaintStyle : StyleCache.EMPTY_STYLECACHE;
@@ -168,12 +179,16 @@ public class ElemStyles implements PreferenceChangedListener {
      * Then check, if the way describes something in its own right. (linear feature
      * or area) If not, add a default line style from the area color of the multipolygon.
      *
+     * @param osm OSM primitive
+     * @param scale scale
+     * @param nc navigatable component
+     * @return pair containing style list and range
      */
-    private Pair<StyleList, Range> getImpl(OsmPrimitive osm, double scale, NavigatableComponent nc) {
+    private Pair<StyleElementList, Range> getImpl(OsmPrimitive osm, double scale, NavigatableComponent nc) {
         if (osm instanceof Node)
             return generateStyles(osm, scale, false);
         else if (osm instanceof Way) {
-            Pair<StyleList, Range> p = generateStyles(osm, scale, false);
+            Pair<StyleElementList, Range> p = generateStyles(osm, scale, false);
 
             boolean isOuterWayOfSomeMP = false;
             Color wayColor = null;
@@ -188,10 +203,10 @@ public class ElemStyles implements PreferenceChangedListener {
                 if (multipolygon.getOuterWays().contains(osm)) {
                     boolean hasIndependentLineStyle = false;
                     if (!isOuterWayOfSomeMP) { // do this only one time
-                        List<ElemStyle> tmp = new ArrayList<>(p.a.size());
-                        for (ElemStyle s : p.a) {
-                            if (s instanceof AreaElemStyle) {
-                                wayColor = ((AreaElemStyle) s).color;
+                        List<StyleElement> tmp = new ArrayList<>(p.a.size());
+                        for (StyleElement s : p.a) {
+                            if (s instanceof AreaElement) {
+                                wayColor = ((AreaElement) s).color;
                             } else {
                                 tmp.add(s);
                                 if (s.isProperLineStyle()) {
@@ -199,17 +214,17 @@ public class ElemStyles implements PreferenceChangedListener {
                                 }
                             }
                         }
-                        p.a = new StyleList(tmp);
+                        p.a = new StyleElementList(tmp);
                         isOuterWayOfSomeMP = true;
                     }
 
                     if (!hasIndependentLineStyle) {
-                        Pair<StyleList, Range> mpElemStyles;
+                        Pair<StyleElementList, Range> mpElemStyles;
                         synchronized (r) {
                             mpElemStyles = getStyleCacheWithRange(r, scale, nc);
                         }
-                        ElemStyle mpLine = null;
-                        for (ElemStyle s : mpElemStyles.a) {
+                        StyleElement mpLine = null;
+                        for (StyleElement s : mpElemStyles.a) {
                             if (s.isProperLineStyle()) {
                                 mpLine = s;
                                 break;
@@ -217,10 +232,10 @@ public class ElemStyles implements PreferenceChangedListener {
                         }
                         p.b = Range.cut(p.b, mpElemStyles.b);
                         if (mpLine != null) {
-                            p.a = new StyleList(p.a, mpLine);
+                            p.a = new StyleElementList(p.a, mpLine);
                             break;
                         } else if (wayColor == null && isDefaultLines()) {
-                            AreaElemStyle mpArea = Utils.find(mpElemStyles.a, AreaElemStyle.class);
+                            AreaElement mpArea = Utils.find(mpElemStyles.a, AreaElement.class);
                             if (mpArea != null) {
                                 wayColor = mpArea.color;
                             }
@@ -231,14 +246,14 @@ public class ElemStyles implements PreferenceChangedListener {
             if (isOuterWayOfSomeMP) {
                 if (isDefaultLines()) {
                     boolean hasLineStyle = false;
-                    for (ElemStyle s : p.a) {
+                    for (StyleElement s : p.a) {
                         if (s.isProperLineStyle()) {
                             hasLineStyle = true;
                             break;
                         }
                     }
                     if (!hasLineStyle) {
-                        p.a = new StyleList(p.a, LineElemStyle.createSimpleLineStyle(wayColor, true));
+                        p.a = new StyleElementList(p.a, LineElement.createSimpleLineStyle(wayColor, true));
                     }
                 }
                 return p;
@@ -256,42 +271,42 @@ public class ElemStyles implements PreferenceChangedListener {
                 if (multipolygon.getInnerWays().contains(osm)) {
                     p = generateStyles(osm, scale, false);
                     boolean hasIndependentElemStyle = false;
-                    for (ElemStyle s : p.a) {
-                        if (s.isProperLineStyle() || s instanceof AreaElemStyle) {
+                    for (StyleElement s : p.a) {
+                        if (s.isProperLineStyle() || s instanceof AreaElement) {
                             hasIndependentElemStyle = true;
                             break;
                         }
                     }
                     if (!hasIndependentElemStyle && !multipolygon.getOuterWays().isEmpty()) {
                         Color mpColor = null;
-                        StyleList mpElemStyles = null;
+                        StyleElementList mpElemStyles = null;
                         synchronized (ref) {
                             mpElemStyles = get(ref, scale, nc);
                         }
-                        for (ElemStyle mpS : mpElemStyles) {
-                            if (mpS instanceof AreaElemStyle) {
-                                mpColor = ((AreaElemStyle) mpS).color;
+                        for (StyleElement mpS : mpElemStyles) {
+                            if (mpS instanceof AreaElement) {
+                                mpColor = ((AreaElement) mpS).color;
                                 break;
                             }
                         }
-                        p.a = new StyleList(p.a, LineElemStyle.createSimpleLineStyle(mpColor, true));
+                        p.a = new StyleElementList(p.a, LineElement.createSimpleLineStyle(mpColor, true));
                     }
                     return p;
                 }
             }
             return p;
         } else if (osm instanceof Relation) {
-            Pair<StyleList, Range> p = generateStyles(osm, scale, true);
+            Pair<StyleElementList, Range> p = generateStyles(osm, scale, true);
             if (drawMultipolygon && ((Relation) osm).isMultipolygon()) {
-                if (!Utils.exists(p.a, AreaElemStyle.class) && Main.pref.getBoolean("multipolygon.deprecated.outerstyle", true)) {
+                if (!Utils.exists(p.a, AreaElement.class) && Main.pref.getBoolean("multipolygon.deprecated.outerstyle", true)) {
                     // look at outer ways to find area style
                     Multipolygon multipolygon = MultipolygonCache.getInstance().get(nc, (Relation) osm);
                     for (Way w : multipolygon.getOuterWays()) {
-                        Pair<StyleList, Range> wayStyles = generateStyles(w, scale, false);
+                        Pair<StyleElementList, Range> wayStyles = generateStyles(w, scale, false);
                         p.b = Range.cut(p.b, wayStyles.b);
-                        ElemStyle area = Utils.find(wayStyles.a, AreaElemStyle.class);
+                        StyleElement area = Utils.find(wayStyles.a, AreaElement.class);
                         if (area != null) {
-                            p.a = new StyleList(p.a, area);
+                            p.a = new StyleElementList(p.a, area);
                             break;
                         }
                     }
@@ -315,9 +330,9 @@ public class ElemStyles implements PreferenceChangedListener {
      * outer ways of a multipolygon.
      * @return the generated styles and the valid range as a pair
      */
-    public Pair<StyleList, Range> generateStyles(OsmPrimitive osm, double scale, boolean pretendWayIsClosed) {
+    public Pair<StyleElementList, Range> generateStyles(OsmPrimitive osm, double scale, boolean pretendWayIsClosed) {
 
-        List<ElemStyle> sl = new ArrayList<>();
+        List<StyleElement> sl = new ArrayList<>();
         MultiCascade mc = new MultiCascade();
         Environment env = new Environment(osm, mc, null, null);
 
@@ -333,34 +348,34 @@ public class ElemStyles implements PreferenceChangedListener {
             }
             env.layer = e.getKey();
             if (osm instanceof Way) {
-                addIfNotNull(sl, AreaElemStyle.create(env));
-                addIfNotNull(sl, RepeatImageElemStyle.create(env));
-                addIfNotNull(sl, LineElemStyle.createLine(env));
-                addIfNotNull(sl, LineElemStyle.createLeftCasing(env));
-                addIfNotNull(sl, LineElemStyle.createRightCasing(env));
-                addIfNotNull(sl, LineElemStyle.createCasing(env));
-                addIfNotNull(sl, LineTextElemStyle.create(env));
+                addIfNotNull(sl, AreaElement.create(env));
+                addIfNotNull(sl, RepeatImageElement.create(env));
+                addIfNotNull(sl, LineElement.createLine(env));
+                addIfNotNull(sl, LineElement.createLeftCasing(env));
+                addIfNotNull(sl, LineElement.createRightCasing(env));
+                addIfNotNull(sl, LineElement.createCasing(env));
+                addIfNotNull(sl, LineTextElement.create(env));
             } else if (osm instanceof Node) {
-                NodeElemStyle nodeStyle = NodeElemStyle.create(env);
+                NodeElement nodeStyle = NodeElement.create(env);
                 if (nodeStyle != null) {
                     sl.add(nodeStyle);
-                    addIfNotNull(sl, BoxTextElemStyle.create(env, nodeStyle.getBoxProvider()));
+                    addIfNotNull(sl, BoxTextElement.create(env, nodeStyle.getBoxProvider()));
                 } else {
-                    addIfNotNull(sl, BoxTextElemStyle.create(env, NodeElemStyle.SIMPLE_NODE_ELEMSTYLE_BOXPROVIDER));
+                    addIfNotNull(sl, BoxTextElement.create(env, NodeElement.SIMPLE_NODE_ELEMSTYLE_BOXPROVIDER));
                 }
             } else if (osm instanceof Relation) {
                 if (((Relation) osm).isMultipolygon()) {
-                    addIfNotNull(sl, AreaElemStyle.create(env));
-                    addIfNotNull(sl, RepeatImageElemStyle.create(env));
-                    addIfNotNull(sl, LineElemStyle.createLine(env));
-                    addIfNotNull(sl, LineElemStyle.createCasing(env));
-                    addIfNotNull(sl, LineTextElemStyle.create(env));
+                    addIfNotNull(sl, AreaElement.create(env));
+                    addIfNotNull(sl, RepeatImageElement.create(env));
+                    addIfNotNull(sl, LineElement.createLine(env));
+                    addIfNotNull(sl, LineElement.createCasing(env));
+                    addIfNotNull(sl, LineTextElement.create(env));
                 } else if ("restriction".equals(osm.get("type"))) {
-                    addIfNotNull(sl, NodeElemStyle.create(env));
+                    addIfNotNull(sl, NodeElement.create(env));
                 }
             }
         }
-        return new Pair<>(new StyleList(sl), mc.range);
+        return new Pair<>(new StyleElementList(sl), mc.range);
     }
 
     private static <T> void addIfNotNull(List<T> list, T obj) {
@@ -371,6 +386,7 @@ public class ElemStyles implements PreferenceChangedListener {
 
     /**
      * Draw a default node symbol for nodes that have no style?
+     * @return {@code true} if default node symbol must be drawn
      */
     private boolean isDefaultNodes() {
         if (defaultNodesIdx == cacheIdx)
@@ -382,6 +398,7 @@ public class ElemStyles implements PreferenceChangedListener {
 
     /**
      * Draw a default line for ways that do not have an own line style?
+     * @return {@code true} if default line must be drawn
      */
     private boolean isDefaultLines() {
         if (defaultLinesIdx == cacheIdx)
@@ -421,6 +438,7 @@ public class ElemStyles implements PreferenceChangedListener {
 
     /**
      * add a style source; only accessed from MapPaintStyles
+     * @param style style source to add
      */
     void add(StyleSource style) {
         styleSources.add(style);
@@ -428,6 +446,7 @@ public class ElemStyles implements PreferenceChangedListener {
 
     /**
      * set the style sources; only accessed from MapPaintStyles
+     * @param sources new style sources
      */
     void setStyleSources(Collection<StyleSource> sources) {
         styleSources.clear();
@@ -435,21 +454,21 @@ public class ElemStyles implements PreferenceChangedListener {
     }
 
     /**
-     * Returns the first AreaElemStyle for a given primitive.
+     * Returns the first AreaElement for a given primitive.
      * @param p the OSM primitive
      * @param pretendWayIsClosed For styles that require the way to be closed,
      * we pretend it is. This is useful for generating area styles from the (segmented)
      * outer ways of a multipolygon.
-     * @return first AreaElemStyle found or {@code null}.
+     * @return first AreaElement found or {@code null}.
      */
-    public static AreaElemStyle getAreaElemStyle(OsmPrimitive p, boolean pretendWayIsClosed) {
+    public static AreaElement getAreaElemStyle(OsmPrimitive p, boolean pretendWayIsClosed) {
         MapCSSStyleSource.STYLE_SOURCE_LOCK.readLock().lock();
         try {
             if (MapPaintStyles.getStyles() == null)
                 return null;
-            for (ElemStyle s : MapPaintStyles.getStyles().generateStyles(p, 1.0, pretendWayIsClosed).a) {
-                if (s instanceof AreaElemStyle)
-                    return (AreaElemStyle) s;
+            for (StyleElement s : MapPaintStyles.getStyles().generateStyles(p, 1.0, pretendWayIsClosed).a) {
+                if (s instanceof AreaElement)
+                    return (AreaElement) s;
             }
             return null;
         } finally {
@@ -458,21 +477,21 @@ public class ElemStyles implements PreferenceChangedListener {
     }
 
     /**
-     * Determines whether primitive has an AreaElemStyle.
+     * Determines whether primitive has an AreaElement.
      * @param p the OSM primitive
      * @param pretendWayIsClosed For styles that require the way to be closed,
      * we pretend it is. This is useful for generating area styles from the (segmented)
      * outer ways of a multipolygon.
-     * @return {@code true} if primitive has an AreaElemStyle
+     * @return {@code true} if primitive has an AreaElement
      */
     public static boolean hasAreaElemStyle(OsmPrimitive p, boolean pretendWayIsClosed) {
         return getAreaElemStyle(p, pretendWayIsClosed) != null;
     }
 
     /**
-     * Determines whether primitive has <b>only</b> an AreaElemStyle.
+     * Determines whether primitive has <b>only</b> an AreaElement.
      * @param p the OSM primitive
-     * @return {@code true} if primitive has only an AreaElemStyle
+     * @return {@code true} if primitive has only an AreaElement
      * @since 7486
      */
     public static boolean hasOnlyAreaElemStyle(OsmPrimitive p) {
@@ -480,12 +499,12 @@ public class ElemStyles implements PreferenceChangedListener {
         try {
             if (MapPaintStyles.getStyles() == null)
                 return false;
-            StyleList styles = MapPaintStyles.getStyles().generateStyles(p, 1.0, false).a;
+            StyleElementList styles = MapPaintStyles.getStyles().generateStyles(p, 1.0, false).a;
             if (styles.isEmpty()) {
                 return false;
             }
-            for (ElemStyle s : styles) {
-                if (!(s instanceof AreaElemStyle)) {
+            for (StyleElement s : styles) {
+                if (!(s instanceof AreaElement)) {
                     return false;
                 }
             }
diff --git a/src/org/openstreetmap/josm/gui/mappaint/Environment.java b/src/org/openstreetmap/josm/gui/mappaint/Environment.java
index f004267..b3429da 100644
--- a/src/org/openstreetmap/josm/gui/mappaint/Environment.java
+++ b/src/org/openstreetmap/josm/gui/mappaint/Environment.java
@@ -52,6 +52,7 @@ public class Environment {
 
     /**
      * Creates a new environment.
+     * @param osm OSM primitive
      * @since 8415
      */
     public Environment(OsmPrimitive osm) {
@@ -60,6 +61,10 @@ public class Environment {
 
     /**
      * Creates a new environment.
+     * @param osm OSM primitive
+     * @param mc multi cascade
+     * @param layer layer
+     * @param source style source
      */
     public Environment(OsmPrimitive osm, MultiCascade mc, String layer, StyleSource source) {
         this.osm = osm;
@@ -89,6 +94,7 @@ public class Environment {
 
     /**
      * Creates a clone of this environment, with the specified primitive.
+     * @param osm OSM primitive
      * @return A clone of this environment, with the specified primitive
      * @see #osm
      */
@@ -176,6 +182,7 @@ public class Environment {
 
     /**
      * Creates a clone of this environment, with the specified {@link Context}.
+     * @param context context
      * @return A clone of this environment, with the specified {@code Context}
      */
     public Environment withContext(Context context) {
diff --git a/src/org/openstreetmap/josm/gui/mappaint/MapPaintStyles.java b/src/org/openstreetmap/josm/gui/mappaint/MapPaintStyles.java
index a024cfe..b8f18c0 100644
--- a/src/org/openstreetmap/josm/gui/mappaint/MapPaintStyles.java
+++ b/src/org/openstreetmap/josm/gui/mappaint/MapPaintStyles.java
@@ -26,8 +26,10 @@ import org.openstreetmap.josm.data.osm.DataSet;
 import org.openstreetmap.josm.data.osm.Node;
 import org.openstreetmap.josm.data.osm.Tag;
 import org.openstreetmap.josm.gui.PleaseWaitRunnable;
-import org.openstreetmap.josm.gui.mappaint.StyleCache.StyleList;
 import org.openstreetmap.josm.gui.mappaint.mapcss.MapCSSStyleSource;
+import org.openstreetmap.josm.gui.mappaint.styleelement.MapImage;
+import org.openstreetmap.josm.gui.mappaint.styleelement.NodeElement;
+import org.openstreetmap.josm.gui.mappaint.styleelement.StyleElement;
 import org.openstreetmap.josm.gui.mappaint.xml.XmlStyleSource;
 import org.openstreetmap.josm.gui.preferences.SourceEntry;
 import org.openstreetmap.josm.gui.preferences.map.MapPaintPreference.MapPaintPrefHelper;
@@ -149,6 +151,7 @@ public final class MapPaintStyles {
 
     /**
      * No icon with the given name was found, show a dummy icon instead
+     * @param source style source
      * @return the icon misc/no_icon.png, in descending priority:
      *   - relative to source file
      *   - from user icon paths
@@ -179,7 +182,7 @@ public final class MapPaintStyles {
             DataSet ds = new DataSet();
             Node virtualNode = new Node(LatLon.ZERO);
             virtualNode.put(tag.getKey(), tag.getValue());
-            StyleList styleList;
+            StyleElementList styleList;
             MapCSSStyleSource.STYLE_SOURCE_LOCK.readLock().lock();
             try {
                 // Add primitive to dataset to avoid DataIntegrityProblemException when evaluating selectors
@@ -190,9 +193,9 @@ public final class MapPaintStyles {
                 MapCSSStyleSource.STYLE_SOURCE_LOCK.readLock().unlock();
             }
             if (styleList != null) {
-                for (ElemStyle style : styleList) {
-                    if (style instanceof NodeElemStyle) {
-                        MapImage mapImage = ((NodeElemStyle) style).mapImage;
+                for (StyleElement style : styleList) {
+                    if (style instanceof NodeElement) {
+                        MapImage mapImage = ((NodeElement) style).mapImage;
                         if (mapImage != null) {
                             if (includeDeprecatedIcon || mapImage.name == null || !"misc/deprecated.png".equals(mapImage.name)) {
                                 return new ImageIcon(mapImage.getImage(false));
diff --git a/src/org/openstreetmap/josm/gui/mappaint/MultiCascade.java b/src/org/openstreetmap/josm/gui/mappaint/MultiCascade.java
index 05da3bf..520c4d1 100644
--- a/src/org/openstreetmap/josm/gui/mappaint/MultiCascade.java
+++ b/src/org/openstreetmap/josm/gui/mappaint/MultiCascade.java
@@ -30,6 +30,8 @@ public class MultiCascade implements StyleKeys {
      * Return the cascade with the given name. If it doesn't exist, create
      * a new layer with that name and return it. The new layer will be
      * a clone of the "*" layer, if it exists.
+     * @param layer layer
+     * @return cascade
      */
     public Cascade getOrCreateCascade(String layer) {
         CheckParameterUtil.ensureParameterNotNull(layer);
@@ -51,9 +53,11 @@ public class MultiCascade implements StyleKeys {
     }
 
     /**
-     * Read-only version of getOrCreateCascade. For convenience, it returns an
+     * Read-only version of {@link #getOrCreateCascade}. For convenience, it returns an
      * empty cascade for non-existing layers. However this empty (read-only) cascade
      * is not added to this MultiCascade object.
+     * @param layer layer
+     * @return cascade
      */
     public Cascade getCascade(String layer) {
         if (layer == null) {
diff --git a/src/org/openstreetmap/josm/gui/mappaint/Range.java b/src/org/openstreetmap/josm/gui/mappaint/Range.java
index fc32160..0072674 100644
--- a/src/org/openstreetmap/josm/gui/mappaint/Range.java
+++ b/src/org/openstreetmap/josm/gui/mappaint/Range.java
@@ -54,6 +54,9 @@ public class Range {
      *                         (-----------------]
      *
      * result (----------------]
+     * @param x value
+     * @param other other range
+     * @return reduced range
      */
     public Range reduceAround(double x, Range other) {
         if (!contains(x))
diff --git a/src/org/openstreetmap/josm/gui/mappaint/StyleCache.java b/src/org/openstreetmap/josm/gui/mappaint/StyleCache.java
index 23b1716..eca138f 100644
--- a/src/org/openstreetmap/josm/gui/mappaint/StyleCache.java
+++ b/src/org/openstreetmap/josm/gui/mappaint/StyleCache.java
@@ -1,256 +1,50 @@
 // License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.gui.mappaint;
 
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Objects;
-
 import org.openstreetmap.josm.data.osm.Storage;
-import org.openstreetmap.josm.tools.Pair;
 
 /**
  * Caches styles for a single primitive.
- * Splits the range of possible scale values (0 < scale < +Infinity) into multiple
- * subranges, for each scale range it keeps a list of styles.
- * Immutable class, equals & hashCode is required (the same for StyleList, ElemStyle
- * and its subclasses).
  */
-public final class StyleCache {
-    /* list of boundaries for the scale ranges */
-    private final List<Double> bd;
-    /* styles for each scale range */
-    private final List<StyleList> data;
+public final class StyleCache extends DividedScale<StyleElementList> {
 
     // TODO: clean up the intern pool from time to time (after purge or layer removal)
     private static final Storage<StyleCache> internPool = new Storage<>();
 
     public static final StyleCache EMPTY_STYLECACHE = (new StyleCache()).intern();
 
-    private StyleCache() {
-        bd = new ArrayList<>();
-        bd.add(0.0);
-        bd.add(Double.POSITIVE_INFINITY);
-        data = new ArrayList<>();
-        data.add(null);
-    }
-
-    private StyleCache(StyleCache s) {
-        bd = new ArrayList<>(s.bd);
-        data = new ArrayList<>(s.data);
+    private StyleCache(StyleCache sc) {
+        super(sc);
     }
 
-    /**
-     * List of Styles, immutable
-     */
-    public static class StyleList implements Iterable<ElemStyle> {
-        private final List<ElemStyle> lst;
-
-        /**
-         * Constructs a new {@code StyleList}.
-         */
-        public StyleList() {
-            lst = new ArrayList<>();
-        }
-
-        public StyleList(ElemStyle... init) {
-            lst = new ArrayList<>(Arrays.asList(init));
-        }
-
-        public StyleList(Collection<ElemStyle> sl) {
-            lst = new ArrayList<>(sl);
-        }
-
-        public StyleList(StyleList sl, ElemStyle s) {
-            lst = new ArrayList<>(sl.lst);
-            lst.add(s);
-        }
-
-        @Override
-        public Iterator<ElemStyle> iterator() {
-            return lst.iterator();
-        }
-
-        public boolean isEmpty() {
-            return lst.isEmpty();
-        }
-
-        public int size() {
-            return lst.size();
-        }
-
-        @Override
-        public String toString() {
-            return lst.toString();
-        }
-
-        @Override
-        public boolean equals(Object obj) {
-            if (obj == null || getClass() != obj.getClass())
-                return false;
-            final StyleList other = (StyleList) obj;
-            return Objects.equals(lst, other.lst);
-        }
-
-        @Override
-        public int hashCode() {
-            return lst.hashCode();
-        }
-    }
-
-    /**
-     * looks up styles for a certain scale value
-     */
-    public StyleList get(double scale) {
-        if (scale <= 0)
-            throw new IllegalArgumentException("scale must be <= 0 but is "+scale);
-        for (int i = 0; i < data.size(); ++i) {
-            if (bd.get(i) < scale && scale <= bd.get(i+1)) {
-                return data.get(i);
-            }
-        }
-        throw new AssertionError();
-    }
-
-    /**
-     * looks up styles for a certain scale value and additionally returns
-     * the scale range for the returned styles
-     */
-    public Pair<StyleList, Range> getWithRange(double scale) {
-        if (scale <= 0)
-            throw new IllegalArgumentException("scale must be <= 0 but is "+scale);
-        for (int i = 0; i < data.size(); ++i) {
-            if (bd.get(i) < scale && scale <= bd.get(i+1)) {
-                return new Pair<>(data.get(i), new Range(bd.get(i), bd.get(i+1)));
-            }
-        }
-        throw new AssertionError();
-    }
-
-    public StyleCache put(StyleList sl, Range r) {
-        return put(sl, r.getLower(), r.getUpper());
-    }
-
-    /**
-     * add a new styles to the cache. this is only possible, if
-     * for this scale range, there is nothing in the cache yet.
-     */
-    public StyleCache put(StyleList sl, double lower, double upper) {
-        StyleCache s = new StyleCache(this);
-        s.putImpl(sl, lower, upper);
-        s.consistencyTest();
-        return s.intern();
-    }
-
-    // this exception type is for debugging #8997 and can later be replaced
-    // by AssertionError
-    public static class RangeViolatedError extends Error {
-        public RangeViolatedError() {
-        }
-
-        public RangeViolatedError(String message) {
-            super(message);
-        }
+    private StyleCache() {
+        super();
     }
 
     /**
-     * ASCII-art explanation:
+     * Add data object which is valid for the given range.
      *
-     *              data[i]
-     *  --|-------|---------|--
-     * bd[i-1]  bd[i]    bd[i+1]
+     * This is only possible, if there is no data for the given range yet.
      *
-     *         (--------]
-     *       lower     upper
+     * @param o data object
+     * @param r the valid range
+     * @return a new, updated, <code>DividedScale</code> object
      */
-    private void putImpl(StyleList sl, double lower, double upper) {
-        int i = 0;
-        while (bd.get(i) < lower) {
-            ++i;
-        }
-        if (bd.get(i) == lower) {
-            if (upper > bd.get(i+1))
-                throw new RangeViolatedError("the new range must be within a single subrange (1)");
-            if (data.get(i) != null)
-                throw new RangeViolatedError("the new range must be within a subrange that has no data");
-
-            if (bd.get(i+1) == upper) {
-                //  --|-------|--------|--
-                //   i-1      i       i+1
-                //            (--------]
-                data.set(i, sl);
-            } else {
-                //  --|-------|--------|--
-                //   i-1      i       i+1
-                //            (-----]
-                bd.add(i+1, upper);
-                data.add(i, sl);
-            }
-            return;
-        } else {
-            if (bd.get(i) < upper)
-                throw new RangeViolatedError("the new range must be within a single subrange (2)");
-            if (data.get(i-1) != null)
-                throw new AssertionError();
-
-            //  --|-------|--------|--
-            //   i-1      i       i+1
-            //       (--]   or
-            //       (----]
-            bd.add(i, lower);
-            data.add(i, sl);
-
-            //  --|--|----|--------|--
-            //   i-1 i   i+1      i+2
-            //       (--]
-            if (bd.get(i+1) > upper) {
-                bd.add(i+1, upper);
-                data.add(i+1, null);
-            }
-            return;
-        }
-    }
-
-    public void consistencyTest() {
-        if (bd.size() < 2) throw new AssertionError(bd);
-        if (data.isEmpty()) throw new AssertionError(data);
-        if (bd.size() != data.size() + 1) throw new AssertionError();
-        if (bd.get(0) != 0) throw new AssertionError();
-        if (bd.get(bd.size() - 1) != Double.POSITIVE_INFINITY) throw new AssertionError();
-        for (int i = 0; i < data.size() - 1; ++i) {
-            if (bd.get(i) >= bd.get(i + 1)) throw new AssertionError();
-        }
+    @Override
+    public StyleCache put(StyleElementList o, Range r) {
+        StyleCache s = new StyleCache(this);
+        s.putImpl(o, r.getLower(), r.getUpper());
+        s.consistencyTest();
+        s.intern();
+        return s;
     }
 
     /**
      * Like String.intern() (reduce memory consumption).
-     * StyleCache must not be changed after it has
-     * been added to the intern pool.
+     * StyleCache must not be changed after it has been added to the intern pool.
+     * @return style cache
      */
-    public StyleCache intern() {
+    private StyleCache intern() {
         return internPool.putUnique(this);
     }
-
-    @Override
-    public boolean equals(Object obj) {
-        if (obj == null || getClass() != obj.getClass())
-            return false;
-        final StyleCache other = (StyleCache) obj;
-        return bd.equals(other.bd) && data.equals(other.data);
-    }
-
-    @Override
-    public int hashCode() {
-        int hash = 7;
-        hash = 23 * hash + bd.hashCode();
-        hash = 23 * hash + data.hashCode();
-        return hash;
-    }
-
-    @Override
-    public String toString() {
-        return "SC{" + bd + ' ' + data + '}';
-    }
 }
diff --git a/src/org/openstreetmap/josm/gui/mappaint/StyleElementList.java b/src/org/openstreetmap/josm/gui/mappaint/StyleElementList.java
new file mode 100644
index 0000000..75cadee
--- /dev/null
+++ b/src/org/openstreetmap/josm/gui/mappaint/StyleElementList.java
@@ -0,0 +1,71 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.gui.mappaint;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Objects;
+
+import org.openstreetmap.josm.gui.mappaint.styleelement.StyleElement;
+
+/**
+ * List of {@link StyleElement}s, immutable.
+ */
+public class StyleElementList implements Iterable<StyleElement> {
+    private final List<StyleElement> lst;
+
+    /**
+     * Constructs a new {@code StyleList}.
+     */
+    public StyleElementList() {
+        lst = new ArrayList<>();
+    }
+
+    public StyleElementList(StyleElement... init) {
+        lst = new ArrayList<>(Arrays.asList(init));
+    }
+
+    public StyleElementList(Collection<StyleElement> sl) {
+        lst = new ArrayList<>(sl);
+    }
+
+    public StyleElementList(StyleElementList sl, StyleElement s) {
+        lst = new ArrayList<>(sl.lst);
+        lst.add(s);
+    }
+
+    @Override
+    public Iterator<StyleElement> iterator() {
+        return lst.iterator();
+    }
+
+    public boolean isEmpty() {
+        return lst.isEmpty();
+    }
+
+    public int size() {
+        return lst.size();
+    }
+
+    @Override
+    public String toString() {
+        return lst.toString();
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (obj == null || getClass() != obj.getClass()) {
+            return false;
+        }
+        final StyleElementList other = (StyleElementList) obj;
+        return Objects.equals(lst, other.lst);
+    }
+
+    @Override
+    public int hashCode() {
+        return lst.hashCode();
+    }
+
+}
diff --git a/src/org/openstreetmap/josm/gui/mappaint/mapcss/ExpressionFactory.java b/src/org/openstreetmap/josm/gui/mappaint/mapcss/ExpressionFactory.java
index 2c84b99..3a7693f 100644
--- a/src/org/openstreetmap/josm/gui/mappaint/mapcss/ExpressionFactory.java
+++ b/src/org/openstreetmap/josm/gui/mappaint/mapcss/ExpressionFactory.java
@@ -401,6 +401,7 @@ public final class ExpressionFactory {
          * Returns the value of the property {@code key} from layer {@code layer}.
          * @param env the environment
          * @param key the property key
+         * @param layer layer
          * @return the property value
          */
         public static Object prop(final Environment env, String key, String layer) {
@@ -421,6 +422,7 @@ public final class ExpressionFactory {
          * Determines whether property {@code key} is set on layer {@code layer}.
          * @param env the environment
          * @param key the property key
+         * @param layer layer
          * @return {@code true} if the property is set, {@code false} otherwise
          */
         public static Boolean is_prop_set(final Environment env, String key, String layer) {
@@ -675,6 +677,7 @@ public final class ExpressionFactory {
         /**
          * Obtains the JOSM'key {@link org.openstreetmap.josm.data.Preferences} string for key {@code key},
          * and defaults to {@code def} if that is null.
+         * @param env the environment
          * @param key Key in JOSM preference
          * @param def Default value
          * @return value for key, or default value if not found
@@ -1134,6 +1137,9 @@ public final class ExpressionFactory {
 
         /**
          * Constructs a new {@code ParameterFunction}.
+         * @param m method
+         * @param args arguments
+         * @param needsEnvironment whether function needs environment
          */
         public ParameterFunction(Method m, List<Expression> args, boolean needsEnvironment) {
             this.m = m;
@@ -1207,6 +1213,8 @@ public final class ExpressionFactory {
 
         /**
          * Constructs a new {@code ArrayFunction}.
+         * @param m method
+         * @param args arguments
          */
         public ArrayFunction(Method m, List<Expression> args) {
             this.m = m;
diff --git a/src/org/openstreetmap/josm/gui/mappaint/mapcss/MapCSSParser.jj b/src/org/openstreetmap/josm/gui/mappaint/mapcss/MapCSSParser.jj
index ac08857..65c4949 100644
--- a/src/org/openstreetmap/josm/gui/mappaint/mapcss/MapCSSParser.jj
+++ b/src/org/openstreetmap/josm/gui/mappaint/mapcss/MapCSSParser.jj
@@ -51,7 +51,6 @@ import org.openstreetmap.josm.tools.Utils;
  * line and column numbers in the error messages correct for the second pass.
  *
  */
-
 public class MapCSSParser {
     MapCSSStyleSource sheet;
     StringBuilder sb;
@@ -76,6 +75,9 @@ public class MapCSSParser {
     
     /**
      * Constructor which initializes the parser with a certain lexical state.
+     * @param in input
+     * @param encoding contents encoding
+     * @param initState initial state
      */
     public MapCSSParser(InputStream in, String encoding, LexicalState initState) {
         this(createTokenManager(in, encoding, initState));
@@ -94,6 +96,8 @@ public class MapCSSParser {
 
     /**
      * Constructor which initializes the parser with a certain lexical state.
+     * @param in input
+     * @param initState initial state
      */
     public MapCSSParser(Reader in, LexicalState initState) {
         this(createTokenManager(in, initState));
@@ -107,7 +111,7 @@ public class MapCSSParser {
 }
 PARSER_END(MapCSSParser)
 
-/*************
+/**
  * Token definitions
  *
  * Lexical states for the preprocessor: <PREPROCESSOR>, <PP_COMMENT>
@@ -152,7 +156,7 @@ TOKEN [IGNORE_CASE]:
 TOKEN:
 {
     < IDENT: ["a"-"z","A"-"Z","_"] ( ["a"-"z","A"-"Z","_","-","0"-"9"] )* >
-|   < UINT: ["1"-"9"] ( ["0"-"9"] )* >
+|   < UINT: ( ["0"-"9"] )+ >
 |   < STRING: "\"" ( [" ","!","#"-"[","]"-"~","\u0080"-"\uFFFF"] | "\\\"" | "\\\\" )*  "\"" >
 |   < #PREDEFINED: "\\" ["d","D","s","S","w","W","b","B","A","G","Z","z"] >
 |   < #REGEX_CHAR_WITHOUT_STAR: [" "-")","+"-".","0"-"[","]"-"~","\u0080"-"\uFFFF"] | "\\/" | "\\\\" | "\\[" | "\\]" | "\\+" | "\\." | "\\'" | "\\\"" |  "\\(" | "\\)" | "\\{" | "\\}" | "\\?" | "\\*" | "\\^" | "\\$" | "\\|" |<PREDEFINED> >
@@ -221,8 +225,7 @@ SKIP:
 }
 
 
-/*************
- *
+/*
  * Preprocessor parser definitions:
  *
  * <pre>
@@ -242,6 +245,9 @@ SKIP:
 
 /**
  * root method for the preprocessor.
+ * @param sheet MapCSS style source
+ * @return result string
+ * @throws ParseException in case of parsing error
  */
 String pp_root(MapCSSStyleSource sheet):
 {
@@ -259,6 +265,7 @@ String pp_root(MapCSSStyleSource sheet):
  * opening and closing curly brackets.
  *
  * @param write false if this content should be skipped (@pp_media condition is not fulfilled), true otherwise
+ * @throws ParseException in case of parsing error
  */
 void pp_black_box(boolean write):
 {
@@ -283,6 +290,7 @@ void pp_black_box(boolean write):
  *
  * @param ignore if the content of this rule should be ignored
  * (because we are already inside a @supports block that didn't pass)
+ * @throws ParseException in case of parsing error
  */
 void pp_supports(boolean ignore):
 {
@@ -301,6 +309,7 @@ void pp_supports(boolean ignore):
  *
  * Unlike other parsing rules, grabs trailing whitespace.
  * @return true, if the condition is fulfilled
+ * @throws ParseException in case of parsing error
  */
 boolean pp_supports_condition():
 {
@@ -328,6 +337,7 @@ boolean pp_supports_condition():
  * Parses something in parenthesis inside the condition of the @supports rule.
  *
  * @return true, if the condition is fulfilled
+ * @throws ParseException in case of parsing error
  */
 boolean pp_supports_condition_in_parens():
 {
@@ -349,6 +359,7 @@ boolean pp_supports_condition_in_parens():
  * The parsing rule {@link #literal()} from the main mapcss parser is reused here.
  *
  * @return true if the condition is fulfilled
+ * @throws ParseException in case of parsing error
  */
 boolean pp_supports_declaration_condition():
 {
@@ -410,6 +421,7 @@ boolean pp_media_query():
  * The parsing rule {@link #literal()} from the main mapcss parser is reused here.
  *
  * @return true if the condition is fulfilled
+ * @throws ParseException in case of parsing error
  */
 // deprecated
 boolean pp_media_expression():
@@ -442,8 +454,7 @@ void pp_w():
  ( pp_w1() )*
 }
 
-/*************
- *
+/*
  * Parser definition for the main MapCSS parser:
  *
  * <pre>
@@ -541,6 +552,7 @@ String regex() :
 
 /**
  * white-space
+ * @throws ParseException in case of parsing error
  */
 void s() :
 {
@@ -551,6 +563,7 @@ void s() :
 
 /**
  * mix of white-space and comments
+ * @throws ParseException in case of parsing error
  */
 void w() :
 {
@@ -561,6 +574,8 @@ void w() :
 
 /**
  * comma delimited list of floats (at least 2, all >= 0)
+ * @return list of floats
+ * @throws ParseException in case of parsing error 
  */
 List<Float> float_array() :
 {
@@ -580,6 +595,8 @@ List<Float> float_array() :
 
 /**
  * entry point for the main parser
+ * @param sheet MapCSS style source
+ * @throws ParseException in case of parsing error
  */
 void sheet(MapCSSStyleSource sheet):
 {
diff --git a/src/org/openstreetmap/josm/gui/mappaint/mapcss/MapCSSStyleSource.java b/src/org/openstreetmap/josm/gui/mappaint/mapcss/MapCSSStyleSource.java
index c9a443c..8ab4f52 100644
--- a/src/org/openstreetmap/josm/gui/mappaint/mapcss/MapCSSStyleSource.java
+++ b/src/org/openstreetmap/josm/gui/mappaint/mapcss/MapCSSStyleSource.java
@@ -37,7 +37,6 @@ import org.openstreetmap.josm.data.osm.Relation;
 import org.openstreetmap.josm.data.osm.Way;
 import org.openstreetmap.josm.gui.mappaint.Cascade;
 import org.openstreetmap.josm.gui.mappaint.Environment;
-import org.openstreetmap.josm.gui.mappaint.LineElemStyle;
 import org.openstreetmap.josm.gui.mappaint.MultiCascade;
 import org.openstreetmap.josm.gui.mappaint.Range;
 import org.openstreetmap.josm.gui.mappaint.StyleKeys;
@@ -55,6 +54,7 @@ import org.openstreetmap.josm.gui.mappaint.mapcss.Selector.OptimizedGeneralSelec
 import org.openstreetmap.josm.gui.mappaint.mapcss.parsergen.MapCSSParser;
 import org.openstreetmap.josm.gui.mappaint.mapcss.parsergen.ParseException;
 import org.openstreetmap.josm.gui.mappaint.mapcss.parsergen.TokenMgrError;
+import org.openstreetmap.josm.gui.mappaint.styleelement.LineElement;
 import org.openstreetmap.josm.gui.preferences.SourceEntry;
 import org.openstreetmap.josm.io.CachedFile;
 import org.openstreetmap.josm.tools.CheckParameterUtil;
@@ -112,7 +112,7 @@ public class MapCSSStyleSource extends StyleSource {
                 throw new RuntimeException(ex);
             }
         }
-        for (LineElemStyle.LineType lt : LineElemStyle.LineType.values()) {
+        for (LineElement.LineType lt : LineElement.LineType.values()) {
             SUPPORTED_KEYS.add(lt.prefix + StyleKeys.COLOR);
             SUPPORTED_KEYS.add(lt.prefix + StyleKeys.DASHES);
             SUPPORTED_KEYS.add(lt.prefix + StyleKeys.DASHES_BACKGROUND_COLOR);
diff --git a/src/org/openstreetmap/josm/gui/mappaint/mapcss/Selector.java b/src/org/openstreetmap/josm/gui/mappaint/mapcss/Selector.java
index 3e901e9..0b6f225 100644
--- a/src/org/openstreetmap/josm/gui/mappaint/mapcss/Selector.java
+++ b/src/org/openstreetmap/josm/gui/mappaint/mapcss/Selector.java
@@ -93,8 +93,9 @@ public interface Selector {
         public final ChildOrParentSelectorType type;
 
         /**
-         *
+         * Constructs a new {@code ChildOrParentSelector}.
          * @param a the first selector
+         * @param link link
          * @param b the second selector
          * @param type the selector type
          */
diff --git a/src/org/openstreetmap/josm/gui/mappaint/AreaElemStyle.java b/src/org/openstreetmap/josm/gui/mappaint/styleelement/AreaElement.java
similarity index 86%
rename from src/org/openstreetmap/josm/gui/mappaint/AreaElemStyle.java
rename to src/org/openstreetmap/josm/gui/mappaint/styleelement/AreaElement.java
index da569f5..0a16d62 100644
--- a/src/org/openstreetmap/josm/gui/mappaint/AreaElemStyle.java
+++ b/src/org/openstreetmap/josm/gui/mappaint/styleelement/AreaElement.java
@@ -1,5 +1,5 @@
 // License: GPL. For details, see LICENSE file.
-package org.openstreetmap.josm.gui.mappaint;
+package org.openstreetmap.josm.gui.mappaint.styleelement;
 
 import java.awt.Color;
 import java.util.Objects;
@@ -11,11 +11,14 @@ import org.openstreetmap.josm.data.osm.Way;
 import org.openstreetmap.josm.data.osm.visitor.paint.MapPaintSettings;
 import org.openstreetmap.josm.data.osm.visitor.paint.PaintColors;
 import org.openstreetmap.josm.data.osm.visitor.paint.StyledMapRenderer;
+import org.openstreetmap.josm.gui.mappaint.Cascade;
+import org.openstreetmap.josm.gui.mappaint.Environment;
+import org.openstreetmap.josm.gui.mappaint.Keyword;
 import org.openstreetmap.josm.gui.mappaint.MapPaintStyles.IconReference;
 import org.openstreetmap.josm.tools.CheckParameterUtil;
 import org.openstreetmap.josm.tools.Utils;
 
-public class AreaElemStyle extends ElemStyle {
+public class AreaElement extends StyleElement {
 
     /**
      * If fillImage == null, color is the fill-color, otherwise
@@ -23,11 +26,11 @@ public class AreaElemStyle extends ElemStyle {
      */
     public Color color;
     public MapImage fillImage;
-    public TextElement text;
+    public TextLabel text;
     public Float extent;
     public Float extentThreshold;
 
-    protected AreaElemStyle(Cascade c, Color color, MapImage fillImage, Float extent, Float extentThreshold, TextElement text) {
+    protected AreaElement(Cascade c, Color color, MapImage fillImage, Float extent, Float extentThreshold, TextLabel text) {
         super(c, 1f);
         CheckParameterUtil.ensureParameterNotNull(color);
         this.color = color;
@@ -37,7 +40,7 @@ public class AreaElemStyle extends ElemStyle {
         this.text = text;
     }
 
-    public static AreaElemStyle create(final Environment env) {
+    public static AreaElement create(final Environment env) {
         final Cascade c = env.mc.getCascade(env.layer);
         MapImage fillImage = null;
         Color color;
@@ -75,17 +78,17 @@ public class AreaElemStyle extends ElemStyle {
             }
         }
 
-        TextElement text = null;
+        TextLabel text = null;
         Keyword textPos = c.get(TEXT_POSITION, null, Keyword.class);
         if (textPos == null || "center".equals(textPos.val)) {
-            text = TextElement.create(env, PaintColors.AREA_TEXT.get(), true);
+            text = TextLabel.create(env, PaintColors.AREA_TEXT.get(), true);
         }
 
         Float extent = c.get(FILL_EXTENT, null, float.class);
         Float extentThreshold = c.get(FILL_EXTENT_THRESHOLD, null, float.class);
 
         if (color != null)
-            return new AreaElemStyle(c, color, fillImage, extent, extentThreshold, text);
+            return new AreaElement(c, color, fillImage, extent, extentThreshold, text);
         else
             return null;
     }
@@ -117,15 +120,15 @@ public class AreaElemStyle extends ElemStyle {
             return false;
         if (!super.equals(obj))
             return false;
-        AreaElemStyle other = (AreaElemStyle) obj;
+        AreaElement other = (AreaElement) obj;
         // we should get the same image object due to caching
         if (!Objects.equals(fillImage, other.fillImage))
             return false;
         if (!Objects.equals(color, other.color))
             return false;
-        if (extent != other.extent)
+        if (!Objects.equals(extent, other.extent))
             return false;
-        if (extentThreshold != other.extentThreshold)
+        if (!Objects.equals(extentThreshold, other.extentThreshold))
             return false;
         if (!Objects.equals(text, other.text))
             return false;
@@ -137,7 +140,7 @@ public class AreaElemStyle extends ElemStyle {
         int hash = 3;
         hash = 61 * hash + color.hashCode();
         hash = 61 * hash + (extent != null ? Float.floatToIntBits(extent) : 0);
-        hash = 61 * hash + (extentThreshold != null ? Float.floatToIntBits(extent) : 0);
+        hash = 61 * hash + (extentThreshold != null ? Float.floatToIntBits(extentThreshold) : 0);
         hash = 61 * hash + (fillImage != null ? fillImage.hashCode() : 0);
         hash = 61 * hash + (text != null ? text.hashCode() : 0);
         return hash;
diff --git a/src/org/openstreetmap/josm/gui/mappaint/BoxTextElemStyle.java b/src/org/openstreetmap/josm/gui/mappaint/styleelement/BoxTextElement.java
similarity index 86%
rename from src/org/openstreetmap/josm/gui/mappaint/BoxTextElemStyle.java
rename to src/org/openstreetmap/josm/gui/mappaint/styleelement/BoxTextElement.java
index 7e28631..2271161 100644
--- a/src/org/openstreetmap/josm/gui/mappaint/BoxTextElemStyle.java
+++ b/src/org/openstreetmap/josm/gui/mappaint/styleelement/BoxTextElement.java
@@ -1,5 +1,5 @@
 // License: GPL. For details, see LICENSE file.
-package org.openstreetmap.josm.gui.mappaint;
+package org.openstreetmap.josm.gui.mappaint.styleelement;
 
 import java.awt.Color;
 import java.awt.Rectangle;
@@ -9,12 +9,16 @@ import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.data.osm.visitor.paint.MapPaintSettings;
 import org.openstreetmap.josm.data.osm.visitor.paint.PaintColors;
 import org.openstreetmap.josm.data.osm.visitor.paint.StyledMapRenderer;
+import org.openstreetmap.josm.gui.mappaint.Cascade;
+import org.openstreetmap.josm.gui.mappaint.Environment;
+import org.openstreetmap.josm.gui.mappaint.Keyword;
+import org.openstreetmap.josm.gui.mappaint.MultiCascade;
 import org.openstreetmap.josm.tools.CheckParameterUtil;
 
 /**
  * Text style attached to a style with a bounding box, like an icon or a symbol.
  */
-public class BoxTextElemStyle extends ElemStyle {
+public class BoxTextElement extends StyleElement {
 
     public enum HorizontalTextAlignment { LEFT, CENTER, RIGHT }
 
@@ -84,7 +88,7 @@ public class BoxTextElemStyle extends ElemStyle {
 
     public static final Rectangle ZERO_BOX = new Rectangle(0, 0, 0, 0);
 
-    public TextElement text;
+    public TextLabel text;
     // Either boxProvider or box is not null. If boxProvider is different from
     // null, this means, that the box can still change in future, otherwise
     // it is fixed.
@@ -93,7 +97,7 @@ public class BoxTextElemStyle extends ElemStyle {
     public HorizontalTextAlignment hAlign;
     public VerticalTextAlignment vAlign;
 
-    public BoxTextElemStyle(Cascade c, TextElement text, BoxProvider boxProvider, Rectangle box,
+    public BoxTextElement(Cascade c, TextLabel text, BoxProvider boxProvider, Rectangle box,
             HorizontalTextAlignment hAlign, VerticalTextAlignment vAlign) {
         super(c, 5f);
         CheckParameterUtil.ensureParameterNotNull(text);
@@ -106,23 +110,23 @@ public class BoxTextElemStyle extends ElemStyle {
         this.vAlign = vAlign;
     }
 
-    public static BoxTextElemStyle create(Environment env, BoxProvider boxProvider) {
+    public static BoxTextElement create(Environment env, BoxProvider boxProvider) {
         return create(env, boxProvider, null);
     }
 
-    public static BoxTextElemStyle create(Environment env, Rectangle box) {
+    public static BoxTextElement create(Environment env, Rectangle box) {
         return create(env, null, box);
     }
 
-    public static BoxTextElemStyle create(Environment env, BoxProvider boxProvider, Rectangle box) {
+    public static BoxTextElement create(Environment env, BoxProvider boxProvider, Rectangle box) {
         initDefaultParameters();
         Cascade c = env.mc.getCascade(env.layer);
 
-        TextElement text = TextElement.create(env, DEFAULT_TEXT_COLOR, false);
+        TextLabel text = TextLabel.create(env, DEFAULT_TEXT_COLOR, false);
         if (text == null) return null;
         // Skip any primitives that don't have text to draw. (Styles are recreated for any tag change.)
         // The concrete text to render is not cached in this object, but computed for each
-        // repaint. This way, one BoxTextElemStyle object can be used by multiple primitives (to save memory).
+        // repaint. This way, one BoxTextElement object can be used by multiple primitives (to save memory).
         if (text.labelCompositionStrategy.compose(env.osm) == null) return null;
 
         HorizontalTextAlignment hAlign = HorizontalTextAlignment.RIGHT;
@@ -153,7 +157,7 @@ public class BoxTextElemStyle extends ElemStyle {
                 vAlign = VerticalTextAlignment.BELOW;
         }
 
-        return new BoxTextElemStyle(c, text, boxProvider, box, hAlign, vAlign);
+        return new BoxTextElement(c, text, boxProvider, box, hAlign, vAlign);
     }
 
     public Rectangle getBox() {
@@ -168,14 +172,14 @@ public class BoxTextElemStyle extends ElemStyle {
         return box;
     }
 
-    public static final BoxTextElemStyle SIMPLE_NODE_TEXT_ELEMSTYLE;
+    public static final BoxTextElement SIMPLE_NODE_TEXT_ELEMSTYLE;
     static {
         MultiCascade mc = new MultiCascade();
         Cascade c = mc.getOrCreateCascade("default");
         c.put(TEXT, Keyword.AUTO);
         Node n = new Node();
         n.put("name", "dummy");
-        SIMPLE_NODE_TEXT_ELEMSTYLE = create(new Environment(n, mc, "default", null), NodeElemStyle.SIMPLE_NODE_ELEMSTYLE.getBoxProvider());
+        SIMPLE_NODE_TEXT_ELEMSTYLE = create(new Environment(n, mc, "default", null), NodeElement.SIMPLE_NODE_ELEMSTYLE.getBoxProvider());
         if (SIMPLE_NODE_TEXT_ELEMSTYLE == null) throw new AssertionError();
     }
 
@@ -206,7 +210,7 @@ public class BoxTextElemStyle extends ElemStyle {
             return false;
         if (obj == null || getClass() != obj.getClass())
             return false;
-        final BoxTextElemStyle other = (BoxTextElemStyle) obj;
+        final BoxTextElement other = (BoxTextElement) obj;
         if (!text.equals(other.text)) return false;
         if (boxProvider != null) {
             if (!boxProvider.equals(other.boxProvider)) return false;
diff --git a/src/org/openstreetmap/josm/gui/mappaint/LabelCompositionStrategy.java b/src/org/openstreetmap/josm/gui/mappaint/styleelement/LabelCompositionStrategy.java
similarity index 99%
rename from src/org/openstreetmap/josm/gui/mappaint/LabelCompositionStrategy.java
rename to src/org/openstreetmap/josm/gui/mappaint/styleelement/LabelCompositionStrategy.java
index 84d8341..00a7bf3 100644
--- a/src/org/openstreetmap/josm/gui/mappaint/LabelCompositionStrategy.java
+++ b/src/org/openstreetmap/josm/gui/mappaint/styleelement/LabelCompositionStrategy.java
@@ -1,5 +1,5 @@
 // License: GPL. For details, see LICENSE file.
-package org.openstreetmap.josm.gui.mappaint;
+package org.openstreetmap.josm.gui.mappaint.styleelement;
 
 import java.util.ArrayList;
 import java.util.Arrays;
diff --git a/src/org/openstreetmap/josm/gui/mappaint/LineElemStyle.java b/src/org/openstreetmap/josm/gui/mappaint/styleelement/LineElement.java
similarity index 91%
rename from src/org/openstreetmap/josm/gui/mappaint/LineElemStyle.java
rename to src/org/openstreetmap/josm/gui/mappaint/styleelement/LineElement.java
index 11fea4a..d381c1e 100644
--- a/src/org/openstreetmap/josm/gui/mappaint/LineElemStyle.java
+++ b/src/org/openstreetmap/josm/gui/mappaint/styleelement/LineElement.java
@@ -1,5 +1,5 @@
 // License: GPL. For details, see LICENSE file.
-package org.openstreetmap.josm.gui.mappaint;
+package org.openstreetmap.josm.gui.mappaint.styleelement;
 
 import java.awt.BasicStroke;
 import java.awt.Color;
@@ -13,12 +13,16 @@ import org.openstreetmap.josm.data.osm.Way;
 import org.openstreetmap.josm.data.osm.visitor.paint.MapPaintSettings;
 import org.openstreetmap.josm.data.osm.visitor.paint.PaintColors;
 import org.openstreetmap.josm.data.osm.visitor.paint.StyledMapRenderer;
+import org.openstreetmap.josm.gui.mappaint.Cascade;
+import org.openstreetmap.josm.gui.mappaint.Environment;
+import org.openstreetmap.josm.gui.mappaint.Keyword;
+import org.openstreetmap.josm.gui.mappaint.MultiCascade;
 import org.openstreetmap.josm.gui.mappaint.mapcss.Instruction.RelativeFloat;
 import org.openstreetmap.josm.tools.Utils;
 
-public class LineElemStyle extends ElemStyle {
+public class LineElement extends StyleElement {
 
-    public static LineElemStyle createSimpleLineStyle(Color color, boolean isAreaEdge) {
+    public static LineElement createSimpleLineStyle(Color color, boolean isAreaEdge) {
         MultiCascade mc = new MultiCascade();
         Cascade c = mc.getOrCreateCascade("default");
         c.put(WIDTH, Keyword.DEFAULT);
@@ -30,7 +34,7 @@ public class LineElemStyle extends ElemStyle {
         return createLine(new Environment(null, mc, "default", null));
     }
 
-    public static final LineElemStyle UNTAGGED_WAY = createSimpleLineStyle(null, false);
+    public static final LineElement UNTAGGED_WAY = createSimpleLineStyle(null, false);
 
     private BasicStroke line;
     public Color color;
@@ -55,7 +59,7 @@ public class LineElemStyle extends ElemStyle {
         }
     }
 
-    protected LineElemStyle(Cascade c, float default_major_z_index, BasicStroke line, Color color, BasicStroke dashesLine,
+    protected LineElement(Cascade c, float default_major_z_index, BasicStroke line, Color color, BasicStroke dashesLine,
             Color dashesBackground, float offset, float realWidth) {
         super(c, default_major_z_index);
         this.line = line;
@@ -66,35 +70,35 @@ public class LineElemStyle extends ElemStyle {
         this.realWidth = realWidth;
     }
 
-    public static LineElemStyle createLine(Environment env) {
+    public static LineElement createLine(Environment env) {
         return createImpl(env, LineType.NORMAL);
     }
 
-    public static LineElemStyle createLeftCasing(Environment env) {
-        LineElemStyle leftCasing = createImpl(env, LineType.LEFT_CASING);
+    public static LineElement createLeftCasing(Environment env) {
+        LineElement leftCasing = createImpl(env, LineType.LEFT_CASING);
         if (leftCasing != null) {
             leftCasing.isModifier = true;
         }
         return leftCasing;
     }
 
-    public static LineElemStyle createRightCasing(Environment env) {
-        LineElemStyle rightCasing = createImpl(env, LineType.RIGHT_CASING);
+    public static LineElement createRightCasing(Environment env) {
+        LineElement rightCasing = createImpl(env, LineType.RIGHT_CASING);
         if (rightCasing != null) {
             rightCasing.isModifier = true;
         }
         return rightCasing;
     }
 
-    public static LineElemStyle createCasing(Environment env) {
-        LineElemStyle casing = createImpl(env, LineType.CASING);
+    public static LineElement createCasing(Environment env) {
+        LineElement casing = createImpl(env, LineType.CASING);
         if (casing != null) {
             casing.isModifier = true;
         }
         return casing;
     }
 
-    private static LineElemStyle createImpl(Environment env, LineType type) {
+    private static LineElement createImpl(Environment env, LineType type) {
         Cascade c = env.mc.getCascade(env.layer);
         Cascade c_def = env.mc.getCascade("default");
         Float width;
@@ -259,7 +263,7 @@ public class LineElemStyle extends ElemStyle {
             dashesLine = new BasicStroke(width, cap, join, miterlimit, dashes2, dashes2[0] + dashesOffset);
         }
 
-        return new LineElemStyle(c, type.defaultMajorZIndex, line, color, dashesLine, dashesBackground, offset, realWidth);
+        return new LineElement(c, type.defaultMajorZIndex, line, color, dashesLine, dashesBackground, offset, realWidth);
     }
 
     @Override
@@ -331,7 +335,7 @@ public class LineElemStyle extends ElemStyle {
             return false;
         if (!super.equals(obj))
             return false;
-        final LineElemStyle other = (LineElemStyle) obj;
+        final LineElement other = (LineElement) obj;
         return Objects.equals(line, other.line) &&
             Objects.equals(color, other.color) &&
             Objects.equals(dashesLine, other.dashesLine) &&
diff --git a/src/org/openstreetmap/josm/gui/mappaint/LineTextElemStyle.java b/src/org/openstreetmap/josm/gui/mappaint/styleelement/LineTextElement.java
similarity index 70%
rename from src/org/openstreetmap/josm/gui/mappaint/LineTextElemStyle.java
rename to src/org/openstreetmap/josm/gui/mappaint/styleelement/LineTextElement.java
index 99f0124..d454a57 100644
--- a/src/org/openstreetmap/josm/gui/mappaint/LineTextElemStyle.java
+++ b/src/org/openstreetmap/josm/gui/mappaint/styleelement/LineTextElement.java
@@ -1,5 +1,5 @@
 // License: GPL. For details, see LICENSE file.
-package org.openstreetmap.josm.gui.mappaint;
+package org.openstreetmap.josm.gui.mappaint.styleelement;
 
 import java.util.Objects;
 
@@ -8,27 +8,30 @@ import org.openstreetmap.josm.data.osm.Way;
 import org.openstreetmap.josm.data.osm.visitor.paint.MapPaintSettings;
 import org.openstreetmap.josm.data.osm.visitor.paint.PaintColors;
 import org.openstreetmap.josm.data.osm.visitor.paint.StyledMapRenderer;
+import org.openstreetmap.josm.gui.mappaint.Cascade;
+import org.openstreetmap.josm.gui.mappaint.Environment;
+import org.openstreetmap.josm.gui.mappaint.Keyword;
 
-public class LineTextElemStyle extends ElemStyle {
+public class LineTextElement extends StyleElement {
 
-    private final TextElement text;
+    private final TextLabel text;
 
-    protected LineTextElemStyle(Cascade c, TextElement text) {
+    protected LineTextElement(Cascade c, TextLabel text) {
         super(c, 4.9f);
         this.text = text;
     }
 
-    public static LineTextElemStyle create(final Environment env) {
+    public static LineTextElement create(final Environment env) {
         final Cascade c = env.mc.getCascade(env.layer);
 
         Keyword textPos = c.get(TEXT_POSITION, null, Keyword.class);
         if (textPos != null && !"line".equals(textPos.val))
             return null;
 
-        TextElement text = TextElement.create(env, PaintColors.TEXT.get(), false);
+        TextLabel text = TextLabel.create(env, PaintColors.TEXT.get(), false);
         if (text == null)
             return null;
-        return new LineTextElemStyle(c, text);
+        return new LineTextElement(c, text);
     }
 
     @Override
@@ -44,7 +47,7 @@ public class LineTextElemStyle extends ElemStyle {
             return false;
         if (!super.equals(obj))
             return false;
-        final LineTextElemStyle other = (LineTextElemStyle) obj;
+        final LineTextElement other = (LineTextElement) obj;
         return Objects.equals(text, other.text);
     }
 
diff --git a/src/org/openstreetmap/josm/gui/mappaint/MapImage.java b/src/org/openstreetmap/josm/gui/mappaint/styleelement/MapImage.java
similarity index 95%
rename from src/org/openstreetmap/josm/gui/mappaint/MapImage.java
rename to src/org/openstreetmap/josm/gui/mappaint/styleelement/MapImage.java
index 5e06a83..7d38f50 100644
--- a/src/org/openstreetmap/josm/gui/mappaint/MapImage.java
+++ b/src/org/openstreetmap/josm/gui/mappaint/styleelement/MapImage.java
@@ -1,5 +1,5 @@
 // License: GPL. For details, see LICENSE file.
-package org.openstreetmap.josm.gui.mappaint;
+package org.openstreetmap.josm.gui.mappaint.styleelement;
 
 import java.awt.Graphics;
 import java.awt.Image;
@@ -10,8 +10,10 @@ import java.util.Objects;
 import javax.swing.ImageIcon;
 
 import org.openstreetmap.josm.Main;
-import org.openstreetmap.josm.gui.mappaint.BoxTextElemStyle.BoxProvider;
-import org.openstreetmap.josm.gui.mappaint.BoxTextElemStyle.BoxProviderResult;
+import org.openstreetmap.josm.gui.mappaint.MapPaintStyles;
+import org.openstreetmap.josm.gui.mappaint.StyleSource;
+import org.openstreetmap.josm.gui.mappaint.styleelement.BoxTextElement.BoxProvider;
+import org.openstreetmap.josm.gui.mappaint.styleelement.BoxTextElement.BoxProviderResult;
 import org.openstreetmap.josm.gui.util.GuiHelper;
 import org.openstreetmap.josm.tools.ImageProvider;
 import org.openstreetmap.josm.tools.ImageProvider.ImageCallback;
diff --git a/src/org/openstreetmap/josm/gui/mappaint/NodeElemStyle.java b/src/org/openstreetmap/josm/gui/mappaint/styleelement/NodeElement.java
similarity index 92%
rename from src/org/openstreetmap/josm/gui/mappaint/NodeElemStyle.java
rename to src/org/openstreetmap/josm/gui/mappaint/styleelement/NodeElement.java
index d46d498..0204852 100644
--- a/src/org/openstreetmap/josm/gui/mappaint/NodeElemStyle.java
+++ b/src/org/openstreetmap/josm/gui/mappaint/styleelement/NodeElement.java
@@ -1,5 +1,5 @@
 // License: GPL. For details, see LICENSE file.
-package org.openstreetmap.josm.gui.mappaint;
+package org.openstreetmap.josm.gui.mappaint.styleelement;
 
 import java.awt.BasicStroke;
 import java.awt.Color;
@@ -13,17 +13,21 @@ import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.data.osm.Relation;
 import org.openstreetmap.josm.data.osm.visitor.paint.MapPaintSettings;
 import org.openstreetmap.josm.data.osm.visitor.paint.StyledMapRenderer;
-import org.openstreetmap.josm.gui.mappaint.BoxTextElemStyle.BoxProvider;
-import org.openstreetmap.josm.gui.mappaint.BoxTextElemStyle.SimpleBoxProvider;
+import org.openstreetmap.josm.gui.mappaint.Cascade;
+import org.openstreetmap.josm.gui.mappaint.Environment;
+import org.openstreetmap.josm.gui.mappaint.Keyword;
 import org.openstreetmap.josm.gui.mappaint.MapPaintStyles.IconReference;
-import org.openstreetmap.josm.gui.mappaint.StyleCache.StyleList;
+import org.openstreetmap.josm.gui.mappaint.MultiCascade;
+import org.openstreetmap.josm.gui.mappaint.StyleElementList;
+import org.openstreetmap.josm.gui.mappaint.styleelement.BoxTextElement.BoxProvider;
+import org.openstreetmap.josm.gui.mappaint.styleelement.BoxTextElement.SimpleBoxProvider;
 import org.openstreetmap.josm.gui.util.RotationAngle;
 import org.openstreetmap.josm.tools.Utils;
 
 /**
  * applies for Nodes and turn restriction relations
  */
-public class NodeElemStyle extends ElemStyle implements StyleKeys {
+public class NodeElement extends StyleElement {
     public final MapImage mapImage;
     public final RotationAngle mapImageAngle;
     public final Symbol symbol;
@@ -80,7 +84,7 @@ public class NodeElemStyle extends ElemStyle implements StyleKeys {
         }
     }
 
-    public static final NodeElemStyle SIMPLE_NODE_ELEMSTYLE;
+    public static final NodeElement SIMPLE_NODE_ELEMSTYLE;
     public static final BoxProvider SIMPLE_NODE_ELEMSTYLE_BOXPROVIDER;
     static {
         MultiCascade mc = new MultiCascade();
@@ -90,22 +94,22 @@ public class NodeElemStyle extends ElemStyle implements StyleKeys {
         SIMPLE_NODE_ELEMSTYLE_BOXPROVIDER = SIMPLE_NODE_ELEMSTYLE.getBoxProvider();
     }
 
-    public static final StyleList DEFAULT_NODE_STYLELIST = new StyleList(NodeElemStyle.SIMPLE_NODE_ELEMSTYLE);
-    public static final StyleList DEFAULT_NODE_STYLELIST_TEXT = new StyleList(NodeElemStyle.SIMPLE_NODE_ELEMSTYLE,
-            BoxTextElemStyle.SIMPLE_NODE_TEXT_ELEMSTYLE);
+    public static final StyleElementList DEFAULT_NODE_STYLELIST = new StyleElementList(NodeElement.SIMPLE_NODE_ELEMSTYLE);
+    public static final StyleElementList DEFAULT_NODE_STYLELIST_TEXT = new StyleElementList(NodeElement.SIMPLE_NODE_ELEMSTYLE,
+            BoxTextElement.SIMPLE_NODE_TEXT_ELEMSTYLE);
 
-    protected NodeElemStyle(Cascade c, MapImage mapImage, Symbol symbol, float default_major_z_index, RotationAngle rotationAngle) {
+    protected NodeElement(Cascade c, MapImage mapImage, Symbol symbol, float default_major_z_index, RotationAngle rotationAngle) {
         super(c, default_major_z_index);
         this.mapImage = mapImage;
         this.symbol = symbol;
         this.mapImageAngle = rotationAngle;
     }
 
-    public static NodeElemStyle create(Environment env) {
+    public static NodeElement create(Environment env) {
         return create(env, 4f, false);
     }
 
-    private static NodeElemStyle create(Environment env, float default_major_z_index, boolean allowDefault) {
+    private static NodeElement create(Environment env, float default_major_z_index, boolean allowDefault) {
         Cascade c = env.mc.getCascade(env.layer);
 
         MapImage mapImage = createIcon(env, ICON_KEYS);
@@ -139,7 +143,7 @@ public class NodeElemStyle extends ElemStyle implements StyleKeys {
         // have to allocate a node element style.
         if (!allowDefault && symbol == null && mapImage == null) return null;
 
-        return new NodeElemStyle(c, mapImage, symbol, default_major_z_index, rotationAngle);
+        return new NodeElement(c, mapImage, symbol, default_major_z_index, rotationAngle);
     }
 
     public static MapImage createIcon(final Environment env, final String[] keys) {
@@ -373,7 +377,7 @@ public class NodeElemStyle extends ElemStyle implements StyleKeys {
         if (!super.equals(obj))
             return false;
 
-        final NodeElemStyle other = (NodeElemStyle) obj;
+        final NodeElement other = (NodeElement) obj;
         // we should get the same image object due to caching
         if (!Objects.equals(mapImage, other.mapImage))
             return false;
diff --git a/src/org/openstreetmap/josm/gui/mappaint/RepeatImageElemStyle.java b/src/org/openstreetmap/josm/gui/mappaint/styleelement/RepeatImageElement.java
similarity index 81%
rename from src/org/openstreetmap/josm/gui/mappaint/RepeatImageElemStyle.java
rename to src/org/openstreetmap/josm/gui/mappaint/styleelement/RepeatImageElement.java
index 4732924..70a911c 100644
--- a/src/org/openstreetmap/josm/gui/mappaint/RepeatImageElemStyle.java
+++ b/src/org/openstreetmap/josm/gui/mappaint/styleelement/RepeatImageElement.java
@@ -1,13 +1,16 @@
 // License: GPL. For details, see LICENSE file.
-package org.openstreetmap.josm.gui.mappaint;
+package org.openstreetmap.josm.gui.mappaint.styleelement;
 
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.data.osm.Way;
 import org.openstreetmap.josm.data.osm.visitor.paint.MapPaintSettings;
 import org.openstreetmap.josm.data.osm.visitor.paint.StyledMapRenderer;
+import org.openstreetmap.josm.gui.mappaint.Cascade;
+import org.openstreetmap.josm.gui.mappaint.Environment;
+import org.openstreetmap.josm.gui.mappaint.Keyword;
 import org.openstreetmap.josm.tools.CheckParameterUtil;
 
-public class RepeatImageElemStyle extends ElemStyle implements StyleKeys {
+public class RepeatImageElement extends StyleElement {
 
     public enum LineImageAlignment { TOP, CENTER, BOTTOM }
 
@@ -17,7 +20,7 @@ public class RepeatImageElemStyle extends ElemStyle implements StyleKeys {
     public float phase;
     public LineImageAlignment align;
 
-    public RepeatImageElemStyle(Cascade c, MapImage pattern, float offset, float spacing, float phase, LineImageAlignment align) {
+    public RepeatImageElement(Cascade c, MapImage pattern, float offset, float spacing, float phase, LineImageAlignment align) {
         super(c, 2.9f);
         CheckParameterUtil.ensureParameterNotNull(pattern);
         CheckParameterUtil.ensureParameterNotNull(align);
@@ -28,8 +31,8 @@ public class RepeatImageElemStyle extends ElemStyle implements StyleKeys {
         this.align = align;
     }
 
-    public static RepeatImageElemStyle create(Environment env) {
-        MapImage pattern = NodeElemStyle.createIcon(env, REPEAT_IMAGE_KEYS);
+    public static RepeatImageElement create(Environment env) {
+        MapImage pattern = NodeElement.createIcon(env, REPEAT_IMAGE_KEYS);
         if (pattern == null)
             return null;
         Cascade c = env.mc.getCascade(env.layer);
@@ -45,7 +48,7 @@ public class RepeatImageElemStyle extends ElemStyle implements StyleKeys {
             align = LineImageAlignment.BOTTOM;
         }
 
-        return new RepeatImageElemStyle(c, pattern, offset, spacing, phase, align);
+        return new RepeatImageElement(c, pattern, offset, spacing, phase, align);
     }
 
     @Override
@@ -66,7 +69,7 @@ public class RepeatImageElemStyle extends ElemStyle implements StyleKeys {
             return false;
         if (!super.equals(obj))
             return false;
-        final RepeatImageElemStyle other = (RepeatImageElemStyle) obj;
+        final RepeatImageElement other = (RepeatImageElement) obj;
         if (!this.pattern.equals(other.pattern)) return false;
         if (this.offset != other.offset) return false;
         if (this.spacing != other.spacing) return false;
diff --git a/src/org/openstreetmap/josm/gui/mappaint/ElemStyle.java b/src/org/openstreetmap/josm/gui/mappaint/styleelement/StyleElement.java
similarity index 93%
rename from src/org/openstreetmap/josm/gui/mappaint/ElemStyle.java
rename to src/org/openstreetmap/josm/gui/mappaint/styleelement/StyleElement.java
index d12c101..03fd496 100644
--- a/src/org/openstreetmap/josm/gui/mappaint/ElemStyle.java
+++ b/src/org/openstreetmap/josm/gui/mappaint/styleelement/StyleElement.java
@@ -1,5 +1,5 @@
 // License: GPL. For details, see LICENSE file.
-package org.openstreetmap.josm.gui.mappaint;
+package org.openstreetmap.josm.gui.mappaint.styleelement;
 
 import java.awt.Font;
 import java.util.HashMap;
@@ -9,9 +9,12 @@ import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.data.osm.visitor.paint.MapPaintSettings;
 import org.openstreetmap.josm.data.osm.visitor.paint.StyledMapRenderer;
+import org.openstreetmap.josm.gui.mappaint.Cascade;
+import org.openstreetmap.josm.gui.mappaint.Keyword;
+import org.openstreetmap.josm.gui.mappaint.StyleKeys;
 import org.openstreetmap.josm.gui.mappaint.mapcss.Instruction.RelativeFloat;
 
-public abstract class ElemStyle implements StyleKeys {
+public abstract class StyleElement implements StyleKeys {
 
     protected static final int ICON_IMAGE_IDX = 0;
     protected static final int ICON_WIDTH_IDX = 1;
@@ -29,14 +32,14 @@ public abstract class ElemStyle implements StyleKeys {
     public boolean isModifier;  // false, if style can serve as main style for the
     // primitive; true, if it is a highlight or modifier
 
-    public ElemStyle(float major_z_index, float z_index, float object_z_index, boolean isModifier) {
+    public StyleElement(float major_z_index, float z_index, float object_z_index, boolean isModifier) {
         this.majorZIndex = major_z_index;
         this.zIndex = z_index;
         this.objectZIndex = object_z_index;
         this.isModifier = isModifier;
     }
 
-    protected ElemStyle(Cascade c, float default_major_z_index) {
+    protected StyleElement(Cascade c, float default_major_z_index) {
         majorZIndex = c.get(MAJOR_Z_INDEX, default_major_z_index, Float.class);
         zIndex = c.get(Z_INDEX, 0f, Float.class);
         objectZIndex = c.get(OBJECT_Z_INDEX, 0f, Float.class);
@@ -63,8 +66,8 @@ public abstract class ElemStyle implements StyleKeys {
      * Get a property value of type Width
      * @param c the cascade
      * @param key property key for the width value
-     * @param relativeTo reference width. Only needed, when relative width syntax
-     *              is used, e.g. "+4".
+     * @param relativeTo reference width. Only needed, when relative width syntax is used, e.g. "+4".
+     * @return width
      */
     protected static Float getWidth(Cascade c, String key, Float relativeTo) {
         Float width = c.get(key, null, Float.class, true);
@@ -207,9 +210,9 @@ public abstract class ElemStyle implements StyleKeys {
 
     @Override
     public boolean equals(Object o) {
-        if (!(o instanceof ElemStyle))
+        if (!(o instanceof StyleElement))
             return false;
-        ElemStyle s = (ElemStyle) o;
+        StyleElement s = (StyleElement) o;
         return isModifier == s.isModifier &&
                 majorZIndex == s.majorZIndex &&
                 zIndex == s.zIndex &&
diff --git a/src/org/openstreetmap/josm/gui/mappaint/TextElement.java b/src/org/openstreetmap/josm/gui/mappaint/styleelement/TextLabel.java
similarity index 85%
rename from src/org/openstreetmap/josm/gui/mappaint/TextElement.java
rename to src/org/openstreetmap/josm/gui/mappaint/styleelement/TextLabel.java
index 00dd1ea..59178ad 100644
--- a/src/org/openstreetmap/josm/gui/mappaint/TextElement.java
+++ b/src/org/openstreetmap/josm/gui/mappaint/styleelement/TextLabel.java
@@ -1,15 +1,19 @@
 // License: GPL. For details, see LICENSE file.
-package org.openstreetmap.josm.gui.mappaint;
+package org.openstreetmap.josm.gui.mappaint.styleelement;
 
 import java.awt.Color;
 import java.awt.Font;
 import java.util.Objects;
 
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
-import org.openstreetmap.josm.gui.mappaint.LabelCompositionStrategy.DeriveLabelFromNameTagsCompositionStrategy;
-import org.openstreetmap.josm.gui.mappaint.LabelCompositionStrategy.StaticLabelCompositionStrategy;
-import org.openstreetmap.josm.gui.mappaint.LabelCompositionStrategy.TagLookupCompositionStrategy;
+import org.openstreetmap.josm.gui.mappaint.Cascade;
+import org.openstreetmap.josm.gui.mappaint.Environment;
+import org.openstreetmap.josm.gui.mappaint.Keyword;
 import org.openstreetmap.josm.gui.mappaint.MapPaintStyles.TagKeyReference;
+import org.openstreetmap.josm.gui.mappaint.StyleKeys;
+import org.openstreetmap.josm.gui.mappaint.styleelement.LabelCompositionStrategy.DeriveLabelFromNameTagsCompositionStrategy;
+import org.openstreetmap.josm.gui.mappaint.styleelement.LabelCompositionStrategy.StaticLabelCompositionStrategy;
+import org.openstreetmap.josm.gui.mappaint.styleelement.LabelCompositionStrategy.TagLookupCompositionStrategy;
 import org.openstreetmap.josm.tools.CheckParameterUtil;
 import org.openstreetmap.josm.tools.Utils;
 
@@ -17,7 +21,7 @@ import org.openstreetmap.josm.tools.Utils;
  * Represents the rendering style for a textual label placed somewhere on the map.
  * @since 3880
  */
-public class TextElement implements StyleKeys {
+public class TextLabel implements StyleKeys {
     public static final LabelCompositionStrategy AUTO_LABEL_COMPOSITION_STRATEGY = new DeriveLabelFromNameTagsCompositionStrategy();
 
     /** the strategy for building the actual label value for a given a {@link OsmPrimitive}.
@@ -44,7 +48,7 @@ public class TextElement implements StyleKeys {
      * @param haloRadius halo radius
      * @param haloColor halo color
      */
-    public TextElement(LabelCompositionStrategy strategy, Font font, int xOffset, int yOffset, Color color, Float haloRadius, Color haloColor) {
+    public TextLabel(LabelCompositionStrategy strategy, Font font, int xOffset, int yOffset, Color color, Float haloRadius, Color haloColor) {
         CheckParameterUtil.ensureParameterNotNull(font);
         CheckParameterUtil.ensureParameterNotNull(color);
         labelCompositionStrategy = strategy;
@@ -61,7 +65,7 @@ public class TextElement implements StyleKeys {
      *
      * @param other the other element.
      */
-    public TextElement(TextElement other) {
+    public TextLabel(TextLabel other) {
         this.labelCompositionStrategy = other.labelCompositionStrategy;
         this.font = other.font;
         this.xOffset = other.xOffset;
@@ -75,7 +79,8 @@ public class TextElement implements StyleKeys {
      * Derives a suitable label composition strategy from the style properties in {@code c}.
      *
      * @param c the style properties
-     * @return the label composition strategy
+     * @param defaultAnnotate whether to return {@link #AUTO_LABEL_COMPOSITION_STRATEGY} if not strategy is found
+     * @return the label composition strategy, or {@code null}
      */
     protected static LabelCompositionStrategy buildLabelCompositionStrategy(Cascade c, boolean defaultAnnotate) {
         /*
@@ -114,7 +119,7 @@ public class TextElement implements StyleKeys {
      * properties for text rendering
      * @throws IllegalArgumentException if {@code defaultTextColor} is null
      */
-    public static TextElement create(Environment env, Color defaultTextColor, boolean defaultAnnotate) {
+    public static TextLabel create(Environment env, Color defaultTextColor, boolean defaultAnnotate) {
         CheckParameterUtil.ensureParameterNotNull(defaultTextColor);
         Cascade c = env.mc.getCascade(env.layer);
 
@@ -122,7 +127,7 @@ public class TextElement implements StyleKeys {
         if (strategy == null) return null;
         String s = strategy.compose(env.osm);
         if (s == null) return null;
-        Font font = ElemStyle.getFont(c, s);
+        Font font = StyleElement.getFont(c, s);
 
         float xOffset = 0;
         float yOffset = 0;
@@ -155,7 +160,7 @@ public class TextElement implements StyleKeys {
                     haloColor.getBlue(), Utils.color_float2int(haloAlpha));
         }
 
-        return new TextElement(strategy, font, (int) xOffset, -(int) yOffset, color, haloRadius, haloColor);
+        return new TextLabel(strategy, font, (int) xOffset, -(int) yOffset, color, haloRadius, haloColor);
     }
 
     /**
@@ -210,7 +215,7 @@ public class TextElement implements StyleKeys {
     public boolean equals(Object obj) {
         if (obj == null || getClass() != obj.getClass())
             return false;
-        final TextElement other = (TextElement) obj;
+        final TextLabel other = (TextLabel) obj;
         return Objects.equals(labelCompositionStrategy, other.labelCompositionStrategy) &&
         Objects.equals(font, other.font) &&
         xOffset == other.xOffset &&
diff --git a/src/org/openstreetmap/josm/gui/mappaint/xml/LinemodPrototype.java b/src/org/openstreetmap/josm/gui/mappaint/xml/LinemodPrototype.java
index f836216..d345c1d 100644
--- a/src/org/openstreetmap/josm/gui/mappaint/xml/LinemodPrototype.java
+++ b/src/org/openstreetmap/josm/gui/mappaint/xml/LinemodPrototype.java
@@ -30,7 +30,11 @@ public class LinemodPrototype extends LinePrototype implements Comparable<Linemo
         widthMode = WidthMode.ABSOLUTE;
     }
 
-    /** get width for overlays */
+    /**
+     * get width for overlays
+     * @param ref reference width
+     * @return width according to {@link #widthMode} with a minimal value of 1
+     */
     public float getWidth(float ref) {
         float res;
         if (widthMode == WidthMode.ABSOLUTE) {
diff --git a/src/org/openstreetmap/josm/gui/mappaint/xml/XmlStyleSource.java b/src/org/openstreetmap/josm/gui/mappaint/xml/XmlStyleSource.java
index 67ab002..f70444f 100644
--- a/src/org/openstreetmap/josm/gui/mappaint/xml/XmlStyleSource.java
+++ b/src/org/openstreetmap/josm/gui/mappaint/xml/XmlStyleSource.java
@@ -139,6 +139,7 @@ public class XmlStyleSource extends StyleSource implements StyleKeys {
      * @param candidate the new Prototype that could be used instead
      * @param scale ignored if null, otherwise checks if scale is within the range of candidate
      * @param mc side effect: update the valid region for the current MultiCascade
+     * @return {@code true} if {@code candidate} is better than the current match
      */
     private static boolean requiresUpdate(Prototype current, Prototype candidate, Double scale, MultiCascade mc) {
         if (current == null || candidate.priority >= current.priority) {
@@ -180,9 +181,13 @@ public class XmlStyleSource extends StyleSource implements StyleKeys {
     }
 
     /**
+     * @param primitive OSM primitive
      * @param closed The primitive is a closed way or we pretend it is closed.
      *  This is useful for multipolygon relations and outer ways of untagged
      *  multipolygon relations.
+     * @param p helper
+     * @param scale scale
+     * @param mc multi cascade
      */
     private void get(OsmPrimitive primitive, boolean closed, WayPrototypesRecord p, Double scale, MultiCascade mc) {
         String lineIdx = null;
diff --git a/src/org/openstreetmap/josm/gui/oauth/OAuthAuthorizationWizard.java b/src/org/openstreetmap/josm/gui/oauth/OAuthAuthorizationWizard.java
index fa48da6..2b44935 100644
--- a/src/org/openstreetmap/josm/gui/oauth/OAuthAuthorizationWizard.java
+++ b/src/org/openstreetmap/josm/gui/oauth/OAuthAuthorizationWizard.java
@@ -167,7 +167,7 @@ public class OAuthAuthorizationWizard extends JDialog {
         getContentPane().add(buildHeaderInfoPanel(), BorderLayout.NORTH);
 
         setTitle(tr("Get an Access Token for ''{0}''", apiUrl));
-        this.setMinimumSize(new Dimension(420, 400));
+        this.setMinimumSize(new Dimension(600, 420));
 
         pnlFullyAutomaticAuthorisationUI = new FullyAutomaticAuthorizationUI(apiUrl);
         pnlSemiAutomaticAuthorisationUI = new SemiAutomaticAuthorizationUI(apiUrl);
diff --git a/src/org/openstreetmap/josm/gui/oauth/OsmOAuthAuthorizationClient.java b/src/org/openstreetmap/josm/gui/oauth/OsmOAuthAuthorizationClient.java
index 74f26a2..9c90ae2 100644
--- a/src/org/openstreetmap/josm/gui/oauth/OsmOAuthAuthorizationClient.java
+++ b/src/org/openstreetmap/josm/gui/oauth/OsmOAuthAuthorizationClient.java
@@ -43,7 +43,7 @@ public class OsmOAuthAuthorizationClient {
     private final OAuthConsumer consumer;
     private final OAuthProvider provider;
     private boolean canceled;
-    private HttpClient.Response connection;
+    private HttpClient connection;
 
     private static class SessionId {
         private String id;
@@ -182,7 +182,7 @@ public class OsmOAuthAuthorizationClient {
     }
 
     protected String extractToken() {
-        try (BufferedReader r = connection.getContentReader()) {
+        try (BufferedReader r = connection.getResponse().getContentReader()) {
             String c;
             Pattern p = Pattern.compile(".*authenticity_token.*value=\"([^\"]+)\".*");
             while ((c = r.readLine()) != null) {
@@ -199,7 +199,7 @@ public class OsmOAuthAuthorizationClient {
     }
 
     protected SessionId extractOsmSession() {
-        List<String> setCookies = connection.getHeaderFields("Set-Cookie");
+        List<String> setCookies = connection.getResponse().getHeaderFields().get("Set-Cookie");
         if (setCookies == null)
             // no cookies set
             return null;
@@ -272,7 +272,7 @@ public class OsmOAuthAuthorizationClient {
     protected String buildOsmLogoutUrl() throws OsmOAuthAuthorizationException {
         try {
             URL autUrl = new URL(oauthProviderParameters.getAuthoriseUrl());
-            URL url = new URL("http", autUrl.getHost(), autUrl.getPort(), "/logout");
+            URL url = new URL(Main.pref.get("oauth.protocol", "https"), autUrl.getHost(), autUrl.getPort(), "/logout");
             return url.toString();
         } catch (MalformedURLException e) {
             throw new OsmOAuthAuthorizationException(e);
@@ -292,7 +292,8 @@ public class OsmOAuthAuthorizationClient {
             sb.append(buildOsmLoginUrl()).append("?cookie_test=true");
             URL url = new URL(sb.toString());
             synchronized (this) {
-                connection = HttpClient.create(url).connect();
+                connection = HttpClient.create(url);
+                connection.connect();
             }
             SessionId sessionId = extractOsmSession();
             if (sessionId == null)
@@ -321,8 +322,8 @@ public class OsmOAuthAuthorizationClient {
             URL url = new URL(getAuthoriseUrl(requestToken));
             synchronized (this) {
                 connection = HttpClient.create(url)
-                        .setHeader("Cookie", "_osm_session=" + sessionId.id + "; _osm_username=" + sessionId.userName)
-                        .connect();
+                        .setHeader("Cookie", "_osm_session=" + sessionId.id + "; _osm_username=" + sessionId.userName);
+                connection.connect();
             }
             sessionId.token = extractToken();
             if (sessionId.token == null)
@@ -356,14 +357,15 @@ public class OsmOAuthAuthorizationClient {
             client.setMaxRedirects(-1);
 
             synchronized (this) {
-                connection = client.connect();
+                connection = client;
+                connection.connect();
             }
 
             // after a successful login the OSM website sends a redirect to a follow up page. Everything
             // else, including a 200 OK, is a failed login. A 200 OK is replied if the login form with
             // an error page is sent to back to the user.
             //
-            int retCode = connection.getResponseCode();
+            int retCode = connection.getResponse().getResponseCode();
             if (retCode != HttpURLConnection.HTTP_MOVED_TEMP)
                 throw new OsmOAuthAuthorizationException(tr("Failed to authenticate user ''{0}'' with password ''***'' as OAuth user",
                         userName));
@@ -382,7 +384,8 @@ public class OsmOAuthAuthorizationClient {
         try {
             URL url = new URL(buildOsmLogoutUrl());
             synchronized (this) {
-                connection = HttpClient.create(url).connect();
+                connection = HttpClient.create(url).setMaxRedirects(-1);
+                connection.connect();
             }
         } catch (IOException e) {
             throw new OsmOAuthAuthorizationException(e);
@@ -431,10 +434,11 @@ public class OsmOAuthAuthorizationClient {
             client.setRequestBody(request.getBytes(StandardCharsets.UTF_8));
 
             synchronized (this) {
-                connection = client.connect();
+                connection = client;
+                connection.connect();
             }
 
-            int retCode = connection.getResponseCode();
+            int retCode = connection.getResponse().getResponseCode();
             if (retCode != HttpURLConnection.HTTP_OK)
                 throw new OsmOAuthAuthorizationException(tr("Failed to authorize OAuth request  ''{0}''", requestToken.getKey()));
         } catch (IOException e) {
diff --git a/src/org/openstreetmap/josm/gui/oauth/RetrieveAccessTokenTask.java b/src/org/openstreetmap/josm/gui/oauth/RetrieveAccessTokenTask.java
index 2fed39c..b43f80a 100644
--- a/src/org/openstreetmap/josm/gui/oauth/RetrieveAccessTokenTask.java
+++ b/src/org/openstreetmap/josm/gui/oauth/RetrieveAccessTokenTask.java
@@ -14,6 +14,7 @@ import org.openstreetmap.josm.data.oauth.OAuthToken;
 import org.openstreetmap.josm.gui.HelpAwareOptionPane;
 import org.openstreetmap.josm.gui.PleaseWaitRunnable;
 import org.openstreetmap.josm.gui.help.HelpUtil;
+import org.openstreetmap.josm.gui.util.GuiHelper;
 import org.openstreetmap.josm.io.OsmTransferCanceledException;
 import org.openstreetmap.josm.io.OsmTransferException;
 import org.openstreetmap.josm.tools.CheckParameterUtil;
@@ -86,9 +87,14 @@ public class RetrieveAccessTokenTask extends PleaseWaitRunnable {
             accessToken = client.getAccessToken(getProgressMonitor().createSubTaskMonitor(0, false));
         } catch (OsmTransferCanceledException e) {
             return;
-        } catch (OsmOAuthAuthorizationException e) {
+        } catch (final OsmOAuthAuthorizationException e) {
             Main.error(e);
-            alertRetrievingAccessTokenFailed(e);
+            GuiHelper.runInEDT(new Runnable() {
+                @Override
+                public void run() {
+                    alertRetrievingAccessTokenFailed(e);
+                }
+            });
             accessToken = null;
         } finally {
             synchronized (this) {
diff --git a/src/org/openstreetmap/josm/gui/oauth/SemiAutomaticAuthorizationUI.java b/src/org/openstreetmap/josm/gui/oauth/SemiAutomaticAuthorizationUI.java
index c5b300e..c8f3b74 100644
--- a/src/org/openstreetmap/josm/gui/oauth/SemiAutomaticAuthorizationUI.java
+++ b/src/org/openstreetmap/josm/gui/oauth/SemiAutomaticAuthorizationUI.java
@@ -19,12 +19,12 @@ import javax.swing.BorderFactory;
 import javax.swing.JCheckBox;
 import javax.swing.JLabel;
 import javax.swing.JPanel;
-import javax.swing.SwingUtilities;
 
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.data.oauth.OAuthToken;
 import org.openstreetmap.josm.gui.SideButton;
 import org.openstreetmap.josm.gui.preferences.server.OAuthAccessTokenHolder;
+import org.openstreetmap.josm.gui.util.GuiHelper;
 import org.openstreetmap.josm.gui.widgets.HtmlPanel;
 import org.openstreetmap.josm.gui.widgets.JMultilineLabel;
 import org.openstreetmap.josm.gui.widgets.JosmTextField;
@@ -402,7 +402,7 @@ public class SemiAutomaticAuthorizationUI extends AbstractAuthorizationUI {
                     if (task.isCanceled()) return;
                     if (task.getRequestToken() == null) return;
                     requestToken = task.getRequestToken();
-                    SwingUtilities.invokeLater(new Runnable() {
+                    GuiHelper.runInEDT(new Runnable() {
                         @Override
                         public void run() {
                             transitionToRetrieveAccessToken();
@@ -438,10 +438,10 @@ public class SemiAutomaticAuthorizationUI extends AbstractAuthorizationUI {
                 public void run() {
                     if (task.isCanceled()) return;
                     if (task.getAccessToken() == null) return;
-                    setAccessToken(task.getAccessToken());
-                    SwingUtilities.invokeLater(new Runnable() {
+                    GuiHelper.runInEDT(new Runnable() {
                         @Override
                         public void run() {
+                            setAccessToken(task.getAccessToken());
                             transitionToShowAccessToken();
                         }
                     });
diff --git a/src/org/openstreetmap/josm/gui/oauth/TestAccessTokenTask.java b/src/org/openstreetmap/josm/gui/oauth/TestAccessTokenTask.java
index f1e9af3..e9c791d 100644
--- a/src/org/openstreetmap/josm/gui/oauth/TestAccessTokenTask.java
+++ b/src/org/openstreetmap/josm/gui/oauth/TestAccessTokenTask.java
@@ -45,7 +45,7 @@ public class TestAccessTokenTask extends PleaseWaitRunnable {
     private boolean canceled;
     private final Component parent;
     private final String apiUrl;
-    private HttpClient.Response connection;
+    private HttpClient connection;
 
     /**
      * Create the task
@@ -106,20 +106,22 @@ public class TestAccessTokenTask extends PleaseWaitRunnable {
             final HttpClient client = HttpClient.create(url);
             sign(client);
             synchronized (this) {
-                connection = client.connect();
+                connection = client;
+                connection.connect();
             }
 
-            if (connection.getResponseCode() == HttpURLConnection.HTTP_UNAUTHORIZED)
+            if (connection.getResponse().getResponseCode() == HttpURLConnection.HTTP_UNAUTHORIZED)
                 throw new OsmApiException(HttpURLConnection.HTTP_UNAUTHORIZED,
                         tr("Retrieving user details with Access Token Key ''{0}'' was rejected.", token.getKey()), null);
 
-            if (connection.getResponseCode() == HttpURLConnection.HTTP_FORBIDDEN)
+            if (connection.getResponse().getResponseCode() == HttpURLConnection.HTTP_FORBIDDEN)
                 throw new OsmApiException(HttpURLConnection.HTTP_FORBIDDEN,
                         tr("Retrieving user details with Access Token Key ''{0}'' was forbidden.", token.getKey()), null);
 
-            if (connection.getResponseCode() != HttpURLConnection.HTTP_OK)
-                throw new OsmApiException(connection.getResponseCode(), connection.getHeaderField("Error"), null);
-            Document d = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(connection.getContent());
+            if (connection.getResponse().getResponseCode() != HttpURLConnection.HTTP_OK)
+                throw new OsmApiException(connection.getResponse().getResponseCode(),
+                        connection.getResponse().getHeaderField("Error"), null);
+            Document d = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(connection.getResponse().getContent());
             return OsmServerUserInfoReader.buildFromXML(d);
         } catch (SAXException | ParserConfigurationException e) {
             throw new XmlParsingException(e);
diff --git a/src/org/openstreetmap/josm/gui/preferences/PreferenceSetting.java b/src/org/openstreetmap/josm/gui/preferences/PreferenceSetting.java
index 1882808..8657c8e 100644
--- a/src/org/openstreetmap/josm/gui/preferences/PreferenceSetting.java
+++ b/src/org/openstreetmap/josm/gui/preferences/PreferenceSetting.java
@@ -9,6 +9,7 @@ public interface PreferenceSetting {
     /**
      * Add the GUI elements to the dialog. The elements should be initialized after
      * the current preferences.
+     * @param gui the preferences tab pane
      */
     void addGui(PreferenceTabbedPane gui);
 
diff --git a/src/org/openstreetmap/josm/gui/preferences/PreferenceTabbedPane.java b/src/org/openstreetmap/josm/gui/preferences/PreferenceTabbedPane.java
index ef5c2e3..3c559e4 100644
--- a/src/org/openstreetmap/josm/gui/preferences/PreferenceTabbedPane.java
+++ b/src/org/openstreetmap/josm/gui/preferences/PreferenceTabbedPane.java
@@ -51,6 +51,7 @@ import org.openstreetmap.josm.gui.preferences.plugin.PluginPreference;
 import org.openstreetmap.josm.gui.preferences.projection.ProjectionPreference;
 import org.openstreetmap.josm.gui.preferences.remotecontrol.RemoteControlPreference;
 import org.openstreetmap.josm.gui.preferences.server.AuthenticationPreference;
+import org.openstreetmap.josm.gui.preferences.server.OverpassServerPreference;
 import org.openstreetmap.josm.gui.preferences.server.ProxyPreference;
 import org.openstreetmap.josm.gui.preferences.server.ServerAccessPreference;
 import org.openstreetmap.josm.gui.preferences.shortcut.ShortcutPreference;
@@ -273,6 +274,7 @@ public final class PreferenceTabbedPane extends JTabbedPane implements MouseWhee
     /**
      * Construct a PreferencePanel for the preference settings. Layout is GridBagLayout
      * and a centered title label and the description are added.
+     * @param caller Preference settings, that display a top level tab
      * @return The created panel ready to add other controls.
      */
     public PreferencePanel createPreferenceTab(TabPreferenceSetting caller) {
@@ -282,12 +284,13 @@ public final class PreferenceTabbedPane extends JTabbedPane implements MouseWhee
     /**
      * Construct a PreferencePanel for the preference settings. Layout is GridBagLayout
      * and a centered title label and the description are added.
+     * @param caller Preference settings, that display a top level tab
      * @param inScrollPane if <code>true</code> the added tab will show scroll bars
      *        if the panel content is larger than the available space
      * @return The created panel ready to add other controls.
      */
     public PreferencePanel createPreferenceTab(TabPreferenceSetting caller, boolean inScrollPane) {
-        CheckParameterUtil.ensureParameterNotNull(caller);
+        CheckParameterUtil.ensureParameterNotNull(caller, "caller");
         PreferencePanel p = new PreferencePanel(caller);
 
         PreferenceTab tab = p;
@@ -558,6 +561,7 @@ public final class PreferenceTabbedPane extends JTabbedPane implements MouseWhee
         settingsFactories.add(new ServerAccessPreference.Factory());
         settingsFactories.add(new AuthenticationPreference.Factory());
         settingsFactories.add(new ProxyPreference.Factory());
+        settingsFactories.add(new OverpassServerPreference.Factory());
         settingsFactories.add(new MapPreference.Factory());
         settingsFactories.add(new ProjectionPreference.Factory());
         settingsFactories.add(new MapPaintPreference.Factory());
diff --git a/src/org/openstreetmap/josm/gui/preferences/SourceEditor.java b/src/org/openstreetmap/josm/gui/preferences/SourceEditor.java
index 814531e..063f1c7 100644
--- a/src/org/openstreetmap/josm/gui/preferences/SourceEditor.java
+++ b/src/org/openstreetmap/josm/gui/preferences/SourceEditor.java
@@ -415,17 +415,41 @@ public abstract class SourceEditor extends JPanel {
     public abstract boolean finish();
 
     /**
-     * Provide the GUI strings. (There are differences for MapPaint and Preset)
+     * Provide the GUI strings. (There are differences for MapPaint, Preset and TagChecker Rule)
+     * @param ident any {@link I18nString} value
+     * @return the translated string for {@code ident}
      */
     protected abstract String getStr(I18nString ident);
 
     /**
      * Identifiers for strings that need to be provided.
      */
-    public enum I18nString { AVAILABLE_SOURCES, ACTIVE_SOURCES, NEW_SOURCE_ENTRY_TOOLTIP, NEW_SOURCE_ENTRY,
-        REMOVE_SOURCE_TOOLTIP, EDIT_SOURCE_TOOLTIP, ACTIVATE_TOOLTIP, RELOAD_ALL_AVAILABLE,
-        LOADING_SOURCES_FROM, FAILED_TO_LOAD_SOURCES_FROM, FAILED_TO_LOAD_SOURCES_FROM_HELP_TOPIC,
-        ILLEGAL_FORMAT_OF_ENTRY }
+    public enum I18nString {
+        /** Available (styles|presets|rules) */
+        AVAILABLE_SOURCES,
+        /** Active (styles|presets|rules) */
+        ACTIVE_SOURCES,
+        /** Add a new (style|preset|rule) by entering filename or URL */
+        NEW_SOURCE_ENTRY_TOOLTIP,
+        /** New (style|preset|rule) entry */
+        NEW_SOURCE_ENTRY,
+        /** Remove the selected (styles|presets|rules) from the list of active (styles|presets|rules) */
+        REMOVE_SOURCE_TOOLTIP,
+        /** Edit the filename or URL for the selected active (style|preset|rule) */
+        EDIT_SOURCE_TOOLTIP,
+        /** Add the selected available (styles|presets|rules) to the list of active (styles|presets|rules) */
+        ACTIVATE_TOOLTIP,
+        /** Reloads the list of available (styles|presets|rules) */
+        RELOAD_ALL_AVAILABLE,
+        /** Loading (style|preset|rule) sources */
+        LOADING_SOURCES_FROM,
+        /** Failed to load the list of (style|preset|rule) sources */
+        FAILED_TO_LOAD_SOURCES_FROM,
+        /** /Preferences/(Styles|Presets|Rules)#FailedToLoad(Style|Preset|Rule)Sources */
+        FAILED_TO_LOAD_SOURCES_FROM_HELP_TOPIC,
+        /** Illegal format of entry in (style|preset|rule) list */
+        ILLEGAL_FORMAT_OF_ENTRY
+    }
 
     public boolean hasActiveSourcesChanged() {
         Collection<? extends SourceEntry> prev = getInitialSourcesList();
diff --git a/src/org/openstreetmap/josm/gui/preferences/SubPreferenceSetting.java b/src/org/openstreetmap/josm/gui/preferences/SubPreferenceSetting.java
index a17d4fe..38055c5 100644
--- a/src/org/openstreetmap/josm/gui/preferences/SubPreferenceSetting.java
+++ b/src/org/openstreetmap/josm/gui/preferences/SubPreferenceSetting.java
@@ -11,6 +11,7 @@ public interface SubPreferenceSetting extends PreferenceSetting {
 
     /**
      * Returns the preference setting (displayed in the specified preferences tab pane) that contains this preference setting.
+     * @param gui preferences tabbed pane
      * @return parent preference setting
      */
     TabPreferenceSetting getTabPreferenceSetting(final PreferenceTabbedPane gui);
diff --git a/src/org/openstreetmap/josm/gui/preferences/ToolbarPreferences.java b/src/org/openstreetmap/josm/gui/preferences/ToolbarPreferences.java
index 5fbd76f..948bac1 100644
--- a/src/org/openstreetmap/josm/gui/preferences/ToolbarPreferences.java
+++ b/src/org/openstreetmap/josm/gui/preferences/ToolbarPreferences.java
@@ -1017,6 +1017,7 @@ public class ToolbarPreferences implements PreferenceSettingFactory {
     }
 
     /**
+     * @param action Action to register
      * @return The parameter (for better chaining)
      */
     public Action register(Action action) {
@@ -1058,6 +1059,18 @@ public class ToolbarPreferences implements PreferenceSettingFactory {
                 Icon i = action.getDisplayIcon();
                 if (i != null) {
                     b.setIcon(i);
+                    Dimension s = b.getPreferredSize();
+                    /* make squared toolbar icons */
+                    if (s.width < s.height) {
+                        s.width = s.height;
+                        b.setMinimumSize(s);
+                        b.setMaximumSize(s);
+                        //b.setSize(s);
+                    } else if (s.height < s.width) {
+                        s.height = s.width;
+                        b.setMinimumSize(s);
+                        b.setMaximumSize(s);
+                    }
                 } else {
                     // hide action text if an icon is set later (necessary for delayed/background image loading)
                     action.getParametrizedAction().addPropertyChangeListener(new PropertyChangeListener() {
diff --git a/src/org/openstreetmap/josm/gui/preferences/advanced/ExportProfileAction.java b/src/org/openstreetmap/josm/gui/preferences/advanced/ExportProfileAction.java
index 29327f8..9959e96 100644
--- a/src/org/openstreetmap/josm/gui/preferences/advanced/ExportProfileAction.java
+++ b/src/org/openstreetmap/josm/gui/preferences/advanced/ExportProfileAction.java
@@ -33,6 +33,9 @@ public class ExportProfileAction extends AbstractAction {
 
     /**
      * Constructs a new {@code ExportProfileAction}.
+     * @param prefs preferences
+     * @param schemaKey filename prefix
+     * @param prefPattern preference key pattern used to determine which entries are exported
      */
     public ExportProfileAction(Preferences prefs, String schemaKey, String prefPattern) {
         super(tr("Save {0} profile", tr(schemaKey)));
@@ -66,7 +69,7 @@ public class ExportProfileAction extends AbstractAction {
         FileFilter filter = new FileFilter() {
             @Override
             public boolean accept(File f) {
-                return f.isDirectory() || Utils.hasExtension(f, "xml") && f.getName().toLowerCase(Locale.ENGLISH).startsWith(schemaKey);
+                return f.isDirectory() || (Utils.hasExtension(f, "xml") && f.getName().toLowerCase(Locale.ENGLISH).startsWith(schemaKey));
             }
 
             @Override
diff --git a/src/org/openstreetmap/josm/gui/preferences/advanced/ListEditor.java b/src/org/openstreetmap/josm/gui/preferences/advanced/ListEditor.java
index b068bd6..f6fcd4d 100644
--- a/src/org/openstreetmap/josm/gui/preferences/advanced/ListEditor.java
+++ b/src/org/openstreetmap/josm/gui/preferences/advanced/ListEditor.java
@@ -35,6 +35,8 @@ public class ListEditor extends ExtendedDialog {
     /**
      * Constructs a new {@code ListEditor}.
      * @param gui The parent component
+     * @param entry preference entry
+     * @param setting list setting
      */
     public ListEditor(final JComponent gui, PrefEntry entry, ListSetting setting) {
         super(gui, tr("Change list setting"), new String[] {tr("OK"), tr("Cancel")});
diff --git a/src/org/openstreetmap/josm/gui/preferences/advanced/ListListEditor.java b/src/org/openstreetmap/josm/gui/preferences/advanced/ListListEditor.java
index 9614025..123acfa 100644
--- a/src/org/openstreetmap/josm/gui/preferences/advanced/ListListEditor.java
+++ b/src/org/openstreetmap/josm/gui/preferences/advanced/ListListEditor.java
@@ -50,6 +50,8 @@ public class ListListEditor extends ExtendedDialog {
     /**
      * Constructs a new {@code ListListEditor}.
      * @param gui The parent component
+     * @param entry preference entry
+     * @param setting list of lists setting
      */
     public ListListEditor(final JComponent gui, PrefEntry entry, ListListSetting setting) {
         super(gui, tr("Change list of lists setting"), new String[] {tr("OK"), tr("Cancel")});
diff --git a/src/org/openstreetmap/josm/gui/preferences/advanced/StringEditor.java b/src/org/openstreetmap/josm/gui/preferences/advanced/StringEditor.java
index d47023b..443f83f 100644
--- a/src/org/openstreetmap/josm/gui/preferences/advanced/StringEditor.java
+++ b/src/org/openstreetmap/josm/gui/preferences/advanced/StringEditor.java
@@ -25,6 +25,8 @@ public class StringEditor extends ExtendedDialog {
     /**
      * Constructs a new {@code StringEditor}.
      * @param gui The parent component
+     * @param entry preference entry
+     * @param setting string setting
      */
     public StringEditor(final JComponent gui, PrefEntry entry, StringSetting setting) {
         super(gui, tr("Change string setting"), new String[] {tr("OK"), tr("Cancel")});
diff --git a/src/org/openstreetmap/josm/gui/preferences/imagery/ImageryPreference.java b/src/org/openstreetmap/josm/gui/preferences/imagery/ImageryPreference.java
index fcd9cb6..09082db 100644
--- a/src/org/openstreetmap/josm/gui/preferences/imagery/ImageryPreference.java
+++ b/src/org/openstreetmap/josm/gui/preferences/imagery/ImageryPreference.java
@@ -807,6 +807,7 @@ public final class ImageryPreference extends DefaultTabPreferenceSetting {
 
         /**
          * Constructs a new {@code OffsetBookmarksPanel}.
+         * @param gui the preferences tab pane
          */
         OffsetBookmarksPanel(final PreferenceTabbedPane gui) {
             super(new GridBagLayout());
diff --git a/src/org/openstreetmap/josm/gui/preferences/map/MapPaintPreference.java b/src/org/openstreetmap/josm/gui/preferences/map/MapPaintPreference.java
index b68c4b6..d40ed43 100644
--- a/src/org/openstreetmap/josm/gui/preferences/map/MapPaintPreference.java
+++ b/src/org/openstreetmap/josm/gui/preferences/map/MapPaintPreference.java
@@ -167,6 +167,12 @@ public class MapPaintPreference implements SubPreferenceSetting {
         }
     }
 
+    /**
+     * Returns title from a source entry.
+     * @param entry source entry
+     * @return title
+     * @see MapCSSStyleSource#title
+     */
     public static String getTitleFromSourceEntry(SourceEntry entry) {
         try {
             final MapCSSStyleSource css = new MapCSSStyleSource(entry);
@@ -232,6 +238,8 @@ public class MapPaintPreference implements SubPreferenceSetting {
          * If the selection of default styles changes in future releases, add
          * the new entries to the user-configured list. Remember the known URLs,
          * so an item that was deleted explicitly is not added again.
+         * @param list new defaults
+         * @return {@code true} if a change occurred
          */
         private boolean insertNewDefaults(List<SourceEntry> list) {
             boolean changed = false;
diff --git a/src/org/openstreetmap/josm/gui/preferences/projection/ListProjectionChoice.java b/src/org/openstreetmap/josm/gui/preferences/projection/ListProjectionChoice.java
index 412a295..688fe2a 100644
--- a/src/org/openstreetmap/josm/gui/preferences/projection/ListProjectionChoice.java
+++ b/src/org/openstreetmap/josm/gui/preferences/projection/ListProjectionChoice.java
@@ -52,11 +52,17 @@ public abstract class ListProjectionChoice extends AbstractProjectionChoice {
 
     /**
      * Convert 0-based index to preference value.
+     * @param idx 0-based index
+     * @return preference value
+     * @see #zoneToIndex
      */
     protected abstract String indexToZone(int idx);
 
     /**
      * Convert preference value to 0-based index.
+     * @param zone preference value
+     * @return 0-based index
+     * @see #indexToZone
      */
     protected abstract int zoneToIndex(String zone);
 
diff --git a/src/org/openstreetmap/josm/gui/preferences/projection/ProjectionChoice.java b/src/org/openstreetmap/josm/gui/preferences/projection/ProjectionChoice.java
index e0166ca..bfa71fa 100644
--- a/src/org/openstreetmap/josm/gui/preferences/projection/ProjectionChoice.java
+++ b/src/org/openstreetmap/josm/gui/preferences/projection/ProjectionChoice.java
@@ -57,6 +57,9 @@ public interface ProjectionChoice {
      *
      * Will be called when the preference dialog is dismissed or
      * when the listener from getPreferencePanel is invoked.
+     * @param panel projection preferences panel
+     * @return preferences as a list of strings; may be null to reset everything.
+     * @see #setPreferences
      */
     Collection<String> getPreferences(JPanel panel);
 
@@ -81,5 +84,6 @@ public interface ProjectionChoice {
      *
      * @return the name
      */
+    @Override
     String toString();
 }
diff --git a/src/org/openstreetmap/josm/gui/preferences/server/ApiUrlTestTask.java b/src/org/openstreetmap/josm/gui/preferences/server/ApiUrlTestTask.java
index 5f9004b..a295413 100644
--- a/src/org/openstreetmap/josm/gui/preferences/server/ApiUrlTestTask.java
+++ b/src/org/openstreetmap/josm/gui/preferences/server/ApiUrlTestTask.java
@@ -35,7 +35,7 @@ public class ApiUrlTestTask extends PleaseWaitRunnable {
     private boolean canceled;
     private boolean success;
     private final Component parent;
-    private HttpClient.Response connection;
+    private HttpClient connection;
 
     /**
      * Constructs a new {@code ApiUrlTestTask}.
@@ -176,16 +176,17 @@ public class ApiUrlTestTask extends PleaseWaitRunnable {
             }
 
             synchronized (this) {
-                connection = HttpClient.create(capabilitiesUrl).connect();
+                connection = HttpClient.create(capabilitiesUrl);
+                connection.connect();
             }
 
-            if (connection.getResponseCode() != HttpURLConnection.HTTP_OK) {
-                alertInvalidServerResult(connection.getResponseCode());
+            if (connection.getResponse().getResponseCode() != HttpURLConnection.HTTP_OK) {
+                alertInvalidServerResult(connection.getResponse().getResponseCode());
                 return;
             }
 
             try {
-                Capabilities.CapabilitiesParser.parse(new InputSource(connection.getContent()));
+                Capabilities.CapabilitiesParser.parse(new InputSource(connection.getResponse().getContent()));
             } catch (SAXException | ParserConfigurationException e) {
                 Main.warn(e.getMessage());
                 alertInvalidCapabilities();
diff --git a/src/org/openstreetmap/josm/gui/preferences/server/OverpassServerPreference.java b/src/org/openstreetmap/josm/gui/preferences/server/OverpassServerPreference.java
new file mode 100644
index 0000000..d457e71
--- /dev/null
+++ b/src/org/openstreetmap/josm/gui/preferences/server/OverpassServerPreference.java
@@ -0,0 +1,103 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.gui.preferences.server;
+
+import static org.openstreetmap.josm.tools.I18n.tr;
+
+import java.awt.GridBagLayout;
+import java.util.Arrays;
+
+import javax.swing.BorderFactory;
+import javax.swing.Box;
+import javax.swing.JCheckBox;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+
+import org.openstreetmap.josm.data.preferences.BooleanProperty;
+import org.openstreetmap.josm.data.preferences.CollectionProperty;
+import org.openstreetmap.josm.data.preferences.StringProperty;
+import org.openstreetmap.josm.gui.preferences.PreferenceSetting;
+import org.openstreetmap.josm.gui.preferences.PreferenceSettingFactory;
+import org.openstreetmap.josm.gui.preferences.PreferenceTabbedPane;
+import org.openstreetmap.josm.gui.preferences.SubPreferenceSetting;
+import org.openstreetmap.josm.gui.preferences.TabPreferenceSetting;
+import org.openstreetmap.josm.gui.widgets.HistoryComboBox;
+import org.openstreetmap.josm.tools.GBC;
+
+/**
+ * Preferences related to Overpass API servers.
+ *
+ * @since 9142
+ */
+public class OverpassServerPreference implements SubPreferenceSetting {
+
+    private static final StringProperty OVERPASS_SERVER = new StringProperty("download.overpass.server",
+            "http://overpass-api.de/api/");
+    private static final CollectionProperty OVERPASS_SERVER_HISTORY = new CollectionProperty("download.overpass.servers",
+            Arrays.asList("http://overpass-api.de/api/", "http://overpass.osm.rambler.ru/cgi/"));
+    private static final BooleanProperty FOR_MULTI_FETCH = new BooleanProperty("download.overpass.for-multi-fetch", false);
+
+    private HistoryComboBox overpassServer = new HistoryComboBox();
+    private final JCheckBox forMultiFetch = new JCheckBox(tr("Use Overpass server for object downloads"));
+
+    /**
+     * Factory used to create a new {@link OverpassServerPreference}.
+     */
+    public static class Factory implements PreferenceSettingFactory {
+        @Override
+        public PreferenceSetting createPreferenceSetting() {
+            return new OverpassServerPreference();
+        }
+    }
+
+    @Override
+    public TabPreferenceSetting getTabPreferenceSetting(PreferenceTabbedPane gui) {
+        return gui.getServerPreference();
+    }
+
+    @Override
+    public void addGui(PreferenceTabbedPane gui) {
+        final JPanel panel = new JPanel(new GridBagLayout());
+
+        panel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
+        panel.add(new JLabel(tr("Overpass server: ")), GBC.std().insets(5, 5, 5, 5));
+        panel.add(overpassServer, GBC.eop().fill(GBC.HORIZONTAL));
+        overpassServer.setPossibleItems(OVERPASS_SERVER_HISTORY.get());
+        overpassServer.setText(OVERPASS_SERVER.get());
+
+        panel.add(forMultiFetch, GBC.eop());
+        forMultiFetch.setSelected(useForMultiFetch());
+
+        panel.add(Box.createVerticalGlue(), GBC.eol().fill());
+
+        getTabPreferenceSetting(gui).addSubTab(this, tr("Overpass server"), panel);
+    }
+
+    @Override
+    public boolean ok() {
+        OVERPASS_SERVER.put(overpassServer.getText());
+        OVERPASS_SERVER_HISTORY.put(overpassServer.getHistory());
+        FOR_MULTI_FETCH.put(forMultiFetch.isSelected());
+        return false;
+    }
+
+    @Override
+    public boolean isExpert() {
+        return true;
+    }
+
+    /**
+     * Returns the URL of the currently selected Overpass server.
+     * @return the URL of the currently selected Overpass server.
+     */
+    public static String getOverpassServer() {
+        return OVERPASS_SERVER.get();
+    }
+
+    /**
+     * Returns true if objects should be fetched from an Overpass server instead of the OSM API.
+     * @return true if objects should be fetched from an Overpass server instead of the OSM API.
+     */
+    public static boolean useForMultiFetch() {
+        return FOR_MULTI_FETCH.get();
+    }
+}
diff --git a/src/org/openstreetmap/josm/gui/progress/PleaseWaitProgressMonitor.java b/src/org/openstreetmap/josm/gui/progress/PleaseWaitProgressMonitor.java
index e9bad44..7e46381 100644
--- a/src/org/openstreetmap/josm/gui/progress/PleaseWaitProgressMonitor.java
+++ b/src/org/openstreetmap/josm/gui/progress/PleaseWaitProgressMonitor.java
@@ -107,6 +107,7 @@ public class PleaseWaitProgressMonitor extends AbstractProgressMonitor {
 
     /**
      * Constructs a new {@code PleaseWaitProgressMonitor}.
+     * @param windowTitle window title
      */
     public PleaseWaitProgressMonitor(String windowTitle) {
         this(Main.parent);
@@ -115,6 +116,7 @@ public class PleaseWaitProgressMonitor extends AbstractProgressMonitor {
 
     /**
      * Constructs a new {@code PleaseWaitProgressMonitor}.
+     * @param dialogParent component to get parent frame from
      */
     public PleaseWaitProgressMonitor(Component dialogParent) {
         super(new CancelHandler());
@@ -128,6 +130,8 @@ public class PleaseWaitProgressMonitor extends AbstractProgressMonitor {
 
     /**
      * Constructs a new {@code PleaseWaitProgressMonitor}.
+     * @param dialogParent component to get parent frame from
+     * @param windowTitle window title
      */
     public PleaseWaitProgressMonitor(Component dialogParent, String windowTitle) {
         this(JOptionPane.getFrameForComponent(dialogParent));
diff --git a/src/org/openstreetmap/josm/gui/tagging/TagEditorModel.java b/src/org/openstreetmap/josm/gui/tagging/TagEditorModel.java
index 5f71092..ece907d 100644
--- a/src/org/openstreetmap/josm/gui/tagging/TagEditorModel.java
+++ b/src/org/openstreetmap/josm/gui/tagging/TagEditorModel.java
@@ -412,6 +412,7 @@ public class TagEditorModel extends AbstractTableModel {
 
     /**
      * applies the current state of the tag editor model to a map of tags
+     * @param keepEmpty {@code true} to keep empty tags
      *
      * @return the map of key/value pairs
      */
@@ -434,10 +435,19 @@ public class TagEditorModel extends AbstractTableModel {
         return result;
     }
 
+    /**
+     * Returns tags, without empty ones.
+     * @return not-empty tags
+     */
     public Map<String, String> getTags() {
         return getTags(false);
     }
 
+    /**
+     * Returns tags.
+     * @param keepEmpty {@code true} to keep empty tags
+     * @return tags
+     */
     public Map<String, String> getTags(boolean keepEmpty) {
         return applyToTags(keepEmpty);
     }
diff --git a/src/org/openstreetmap/josm/gui/tagging/TagEditorPanel.java b/src/org/openstreetmap/josm/gui/tagging/TagEditorPanel.java
index 3eef1d6..52a1cd0 100644
--- a/src/org/openstreetmap/josm/gui/tagging/TagEditorPanel.java
+++ b/src/org/openstreetmap/josm/gui/tagging/TagEditorPanel.java
@@ -58,6 +58,11 @@ public class TagEditorPanel extends JPanel {
         return pnl;
     }
 
+    /**
+     * Sets the next component to request focus after navigation (with tab or enter).
+     * @param nextFocusComponent next component to request focus after navigation (with tab or enter)
+     * @see TagTable#setNextFocusComponent
+     */
     public void setNextFocusComponent(Component nextFocusComponent) {
         tagTable.setNextFocusComponent(nextFocusComponent);
     }
@@ -90,6 +95,10 @@ public class TagEditorPanel extends JPanel {
         return pnl;
     }
 
+    /**
+     * Returns the paste action.
+     * @return the paste action
+     */
     public AbstractAction getPasteAction() {
         return tagTable.getPasteAction();
     }
@@ -140,16 +149,17 @@ public class TagEditorPanel extends JPanel {
     /**
      * Creates a new tag editor panel. The editor model is created
      * internally and can be retrieved with {@link #getModel()}.
+     * @param presetHandler tagging preset handler
      */
     public TagEditorPanel(TaggingPresetHandler presetHandler) {
         this(null, presetHandler, 0);
     }
 
     /**
-     * Creates a new tag editor panel with a supplied model. If
-     * {@code model} is null, a new model is created.
+     * Creates a new tag editor panel with a supplied model. If {@code model} is null, a new model is created.
      *
      * @param model the tag editor model
+     * @param presetHandler tagging preset handler
      * @param maxCharacters maximum number of characters allowed, 0 for unlimited
      */
     public TagEditorPanel(TagEditorModel model, TaggingPresetHandler presetHandler, final int maxCharacters) {
diff --git a/src/org/openstreetmap/josm/gui/tagging/TagTable.java b/src/org/openstreetmap/josm/gui/tagging/TagTable.java
index ae17dac..a12f656 100644
--- a/src/org/openstreetmap/josm/gui/tagging/TagTable.java
+++ b/src/org/openstreetmap/josm/gui/tagging/TagTable.java
@@ -297,8 +297,7 @@ public class TagTable extends JTable  {
                 getCellEditor().stopCellEditing();
             }
             final int rowIdx = model.getRowCount()-1;
-            String key = ((TagModel) model.getValueAt(rowIdx, 0)).getName();
-            if (!key.trim().isEmpty()) {
+            if (rowIdx < 0 || !((TagModel) model.getValueAt(rowIdx, 0)).getName().trim().isEmpty()) {
                 model.appendNewTag();
             }
             requestFocusInCell(model.getRowCount()-1, 0);
@@ -503,6 +502,10 @@ public class TagTable extends JTable  {
             return null;
     }
 
+    /**
+     * Sets the next component to request focus after navigation (with tab or enter).
+     * @param nextFocusComponent next component to request focus after navigation (with tab or enter)
+     */
     public void setNextFocusComponent(Component nextFocusComponent) {
         this.nextFocusComponent = nextFocusComponent;
     }
@@ -511,7 +514,7 @@ public class TagTable extends JTable  {
         return editor;
     }
 
-    public void  addOKAccelatorListener(KeyListener l) {
+    public void addOKAccelatorListener(KeyListener l) {
         addKeyListener(l);
         if (editor != null) {
             editor.getEditor().addKeyListener(l);
diff --git a/src/org/openstreetmap/josm/gui/tagging/ac/AutoCompletionItemPriority.java b/src/org/openstreetmap/josm/gui/tagging/ac/AutoCompletionItemPriority.java
index ab0549e..1976e0d 100644
--- a/src/org/openstreetmap/josm/gui/tagging/ac/AutoCompletionItemPriority.java
+++ b/src/org/openstreetmap/josm/gui/tagging/ac/AutoCompletionItemPriority.java
@@ -105,6 +105,7 @@ public class AutoCompletionItemPriority implements Comparable<AutoCompletionItem
     /**
      * Merges two priorities.
      * The resulting priority is always >= the original ones.
+     * @param other other priority
      * @return the merged priority
      */
     public AutoCompletionItemPriority mergeWith(AutoCompletionItemPriority other) {
diff --git a/src/org/openstreetmap/josm/gui/tagging/ac/AutoCompletionManager.java b/src/org/openstreetmap/josm/gui/tagging/ac/AutoCompletionManager.java
index f0a362f..1e63c8f 100644
--- a/src/org/openstreetmap/josm/gui/tagging/ac/AutoCompletionManager.java
+++ b/src/org/openstreetmap/josm/gui/tagging/ac/AutoCompletionManager.java
@@ -29,6 +29,7 @@ import org.openstreetmap.josm.data.osm.event.TagsChangedEvent;
 import org.openstreetmap.josm.data.osm.event.WayNodesChangedEvent;
 import org.openstreetmap.josm.gui.tagging.presets.TaggingPreset;
 import org.openstreetmap.josm.gui.tagging.presets.TaggingPresetItem;
+import org.openstreetmap.josm.gui.tagging.presets.TaggingPresets;
 import org.openstreetmap.josm.gui.tagging.presets.items.CheckGroup;
 import org.openstreetmap.josm.gui.tagging.presets.items.KeyedItem;
 import org.openstreetmap.josm.gui.tagging.presets.items.Roles;
@@ -334,7 +335,7 @@ public class AutoCompletionManager implements DataSetListener {
      */
     public void populateWithMemberRoles(AutoCompletionList list, Relation r) {
         CheckParameterUtil.ensureParameterNotNull(list, "list");
-        Collection<TaggingPreset> presets = r != null ? TaggingPreset.getMatchingPresets(null, r.getKeys(), false) : null;
+        Collection<TaggingPreset> presets = r != null ? TaggingPresets.getMatchingPresets(null, r.getKeys(), false) : null;
         if (r != null && presets != null && !presets.isEmpty()) {
             for (TaggingPreset tp : presets) {
                 if (tp.roles != null) {
diff --git a/src/org/openstreetmap/josm/gui/tagging/presets/TaggingPreset.java b/src/org/openstreetmap/josm/gui/tagging/presets/TaggingPreset.java
index cf180f2..f832b17 100644
--- a/src/org/openstreetmap/josm/gui/tagging/presets/TaggingPreset.java
+++ b/src/org/openstreetmap/josm/gui/tagging/presets/TaggingPreset.java
@@ -203,7 +203,9 @@ public class TaggingPreset extends AbstractAction implements MapView.LayerChange
 
     /**
      * Called from the XML parser to set the types this preset affects.
+     * @param types comma-separated primitive types ("node", "way", "relation" or "closedway")
      * @throws SAXException if any SAX error occurs
+     * @see TaggingPresetType#fromString
      */
     public void setType(String types) throws SAXException {
         this.types = TaggingPresetItem.getType(types);
@@ -293,6 +295,11 @@ public class TaggingPreset extends AbstractAction implements MapView.LayerChange
         return p;
     }
 
+    /**
+     * Determines whether a dialog can be shown for this preset, i.e., at least one tag can/must be set by the user.
+     *
+     * @return {@code true} if a dialog can be shown for this preset
+     */
     public boolean isShowable() {
         for (TaggingPresetItem i : data) {
             if (!(i instanceof Optional || i instanceof Space || i instanceof Key))
@@ -500,11 +507,26 @@ public class TaggingPreset extends AbstractAction implements MapView.LayerChange
         return t == null || types == null || types.containsAll(t);
     }
 
-    @Override
+    /**
+     * Determines whether this preset matches the given primitive, i.e.,
+     * whether the {@link #typeMatches(Collection) type matches} and the {@link TaggingPresetItem#matches(Map) tags match}.
+     *
+     * @param p the primitive
+     * @return {@code true} if this preset matches the primitive
+     */
+     @Override
     public boolean evaluate(OsmPrimitive p) {
         return matches(EnumSet.of(TaggingPresetType.forPrimitive(p)), p.getKeys(), false);
     }
 
+    /**
+     * Determines whether this preset matches the parameters.
+     *
+     * @param t the preset types to include, see {@link #typeMatches(Collection)}
+     * @param tags the tags to perform matching on, see {@link TaggingPresetItem#matches(Map)}
+     * @param onlyShowable whether the preset must be {@link #isShowable() showable}
+     * @return {@code true} if this preset matches the parameters.
+     */
     public boolean matches(Collection<TaggingPresetType> t, Map<String, String> tags, boolean onlyShowable) {
         if (onlyShowable && !isShowable())
             return false;
@@ -522,16 +544,6 @@ public class TaggingPreset extends AbstractAction implements MapView.LayerChange
         return atLeastOnePositiveMatch;
     }
 
-    public static Collection<TaggingPreset> getMatchingPresets(final Collection<TaggingPresetType> t,
-            final Map<String, String> tags, final boolean onlyShowable) {
-        return Utils.filter(TaggingPresets.getTaggingPresets(), new Predicate<TaggingPreset>() {
-            @Override
-            public boolean evaluate(TaggingPreset object) {
-                return object.matches(t, tags, onlyShowable);
-            }
-        });
-    }
-
     /**
      * Action that adds or removes the button on main toolbar
      */
diff --git a/src/org/openstreetmap/josm/gui/tagging/presets/TaggingPresetMenu.java b/src/org/openstreetmap/josm/gui/tagging/presets/TaggingPresetMenu.java
index 70a9dfb..8665fca 100644
--- a/src/org/openstreetmap/josm/gui/tagging/presets/TaggingPresetMenu.java
+++ b/src/org/openstreetmap/josm/gui/tagging/presets/TaggingPresetMenu.java
@@ -107,6 +107,7 @@ public class TaggingPresetMenu extends TaggingPreset {
 
     /**
      * Sorts the menu items using the translated item text
+     * @param menu menu to sort
      */
     public static void sortMenu(JMenu menu) {
         Component[] items = menu.getMenuComponents();
diff --git a/src/org/openstreetmap/josm/gui/tagging/presets/TaggingPresetSelector.java b/src/org/openstreetmap/josm/gui/tagging/presets/TaggingPresetSelector.java
index 2c5162c..88d8ff8 100644
--- a/src/org/openstreetmap/josm/gui/tagging/presets/TaggingPresetSelector.java
+++ b/src/org/openstreetmap/josm/gui/tagging/presets/TaggingPresetSelector.java
@@ -214,6 +214,8 @@ public class TaggingPresetSelector extends JPanel implements SelectionChangedLis
 
     /**
      * Constructs a new {@code TaggingPresetSelector}.
+     * @param displayOnlyApplicable if {@code true} display "Show only applicable to selection" checkbox
+     * @param displaySearchInTags if {@code true} display "Search in tags" checkbox
      */
     public TaggingPresetSelector(boolean displayOnlyApplicable, boolean displaySearchInTags) {
         super(new BorderLayout());
@@ -319,8 +321,10 @@ public class TaggingPresetSelector extends JPanel implements SelectionChangedLis
         popupMenu.add(new AbstractAction(tr("Add toolbar button")) {
             @Override
             public void actionPerformed(ActionEvent ae) {
-                String res = getSelectedPreset().getToolbarString();
-                Main.toolbar.addCustomButton(res, -1, false);
+                final TaggingPreset preset = lsResult.getSelectedValue();
+                if (preset != null) {
+                    Main.toolbar.addCustomButton(preset.getToolbarString(), -1, false);
+                }
             }
         });
         lsResult.addMouseListener(new PopupMenuLauncher(popupMenu));
@@ -351,9 +355,9 @@ public class TaggingPresetSelector extends JPanel implements SelectionChangedLis
         final List<PresetClassification> result = classifications.getMatchingPresets(
                 text, onlyApplicable, inTags, getTypesInSelection(), selected);
 
-        TaggingPreset oldPreset = getSelectedPreset();
+        final TaggingPreset oldPreset = lsResult.getSelectedValue();
         lsResultModel.setPresets(result);
-        TaggingPreset newPreset = getSelectedPreset();
+        final TaggingPreset newPreset = lsResult.getSelectedValue();
         if (!Objects.equals(oldPreset, newPreset)) {
             int[] indices = lsResult.getSelectedIndices();
             for (ListSelectionListener listener : listSelectionListeners) {
@@ -519,7 +523,7 @@ public class TaggingPresetSelector extends JPanel implements SelectionChangedLis
     }
 
     /**
-     * Determines, which preset is selected at the current moment
+     * Determines, which preset is selected at the moment. Updates {@link PresetClassification#favoriteIndex}!
      * @return selected preset (as action)
      */
     public synchronized TaggingPreset getSelectedPreset() {
diff --git a/src/org/openstreetmap/josm/gui/tagging/presets/TaggingPresets.java b/src/org/openstreetmap/josm/gui/tagging/presets/TaggingPresets.java
index ad71e92..fa84476 100644
--- a/src/org/openstreetmap/josm/gui/tagging/presets/TaggingPresets.java
+++ b/src/org/openstreetmap/josm/gui/tagging/presets/TaggingPresets.java
@@ -11,8 +11,11 @@ import javax.swing.JMenuItem;
 import javax.swing.JSeparator;
 
 import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.gui.MenuScroller;
 import org.openstreetmap.josm.gui.tagging.ac.AutoCompletionManager;
+import org.openstreetmap.josm.tools.Predicate;
+import org.openstreetmap.josm.tools.Utils;
 
 /**
  * Class holding Tagging Presets and allowing to manage them.
@@ -93,6 +96,43 @@ public final class TaggingPresets {
     }
 
     /**
+     * Replies a new collection of all presets matching the parameters.
+     *
+     * @param t the preset types to include
+     * @param tags the tags to perform matching on, see {@link TaggingPresetItem#matches(Map)}
+     * @param onlyShowable whether only {@link TaggingPreset#isShowable() showable} presets should be returned
+     * @return a new collection of all presets matching the parameters.
+     * @see TaggingPreset#matches(Collection, Map, boolean)
+     * @since 9266
+     */
+    public static Collection<TaggingPreset> getMatchingPresets(final Collection<TaggingPresetType> t,
+                                                               final Map<String, String> tags, final boolean onlyShowable) {
+        return Utils.filter(getTaggingPresets(), new Predicate<TaggingPreset>() {
+            @Override
+            public boolean evaluate(TaggingPreset object) {
+                return object.matches(t, tags, onlyShowable);
+            }
+        });
+    }
+
+    /**
+     * Replies a new collection of all presets matching the given preset.
+     *
+     * @param primitive the primitive
+     * @return a new collection of all presets matching the given preset.
+     * @see TaggingPreset#evaluate(OsmPrimitive)
+     * @since 9265
+     */
+    public static Collection<TaggingPreset> getMatchingPresets(final OsmPrimitive primitive) {
+        return Utils.filter(getTaggingPresets(), new Predicate<TaggingPreset>() {
+            @Override
+            public boolean evaluate(TaggingPreset object) {
+                return object.evaluate(primitive);
+            }
+        });
+    }
+
+    /**
      * Adds a list of tagging presets to the current list.
      * @param presets The tagging presets to add
      */
diff --git a/src/org/openstreetmap/josm/gui/tagging/presets/items/ComboMultiSelect.java b/src/org/openstreetmap/josm/gui/tagging/presets/items/ComboMultiSelect.java
index 104607f..c3e26f7 100644
--- a/src/org/openstreetmap/josm/gui/tagging/presets/items/ComboMultiSelect.java
+++ b/src/org/openstreetmap/josm/gui/tagging/presets/items/ComboMultiSelect.java
@@ -257,6 +257,7 @@ public abstract class ComboMultiSelect extends KeyedItem {
      * @param delimiter the delimiter, e.g. a comma. separates the entries and
      *      must be escaped within one entry
      * @param s the string
+     * @return splitted items
      */
     public static String[] splitEscaped(char delimiter, String s) {
         if (s == null)
diff --git a/src/org/openstreetmap/josm/gui/tagging/presets/items/Roles.java b/src/org/openstreetmap/josm/gui/tagging/presets/items/Roles.java
index 449f3d7..7618804 100644
--- a/src/org/openstreetmap/josm/gui/tagging/presets/items/Roles.java
+++ b/src/org/openstreetmap/josm/gui/tagging/presets/items/Roles.java
@@ -67,6 +67,9 @@ public class Roles extends TaggingPresetItem {
 
         /**
          * Return either argument, the highest possible value or the lowest allowed value
+         * @param c count
+         * @return the highest possible value or the lowest allowed value
+         * @see #required
          */
         public long getValidCount(long c) {
             if (count > 0 && !required)
diff --git a/src/org/openstreetmap/josm/gui/util/AdjustmentSynchronizer.java b/src/org/openstreetmap/josm/gui/util/AdjustmentSynchronizer.java
index bd0c73f..803c16c 100644
--- a/src/org/openstreetmap/josm/gui/util/AdjustmentSynchronizer.java
+++ b/src/org/openstreetmap/josm/gui/util/AdjustmentSynchronizer.java
@@ -71,9 +71,10 @@ public class AdjustmentSynchronizer implements AdjustmentListener {
     }
 
     /**
-     * Sets whether adjustable participates in adjustment synchronization or not
+     * Sets whether {@code adjustable} participates in adjustment synchronization or not
      *
      * @param adjustable the adjustable
+     * @param isParticipating {@code true} if {@code adjustable} participates in adjustment synchronization
      */
     protected void setParticipatingInSynchronizedScrolling(Adjustable adjustable, boolean isParticipating) {
         CheckParameterUtil.ensureParameterNotNull(adjustable, "adjustable");
diff --git a/src/org/openstreetmap/josm/gui/util/GuiHelper.java b/src/org/openstreetmap/josm/gui/util/GuiHelper.java
index bdceb54..333e531 100644
--- a/src/org/openstreetmap/josm/gui/util/GuiHelper.java
+++ b/src/org/openstreetmap/josm/gui/util/GuiHelper.java
@@ -61,6 +61,8 @@ public final class GuiHelper {
 
     /**
      * disable / enable a component and all its child components
+     * @param root component
+     * @param enabled enabled state
      */
     public static void setEnabledRec(Container root, boolean enabled) {
         root.setEnabled(enabled);
@@ -119,6 +121,7 @@ public final class GuiHelper {
      * Executes synchronously a callable in
      * <a href="http://docs.oracle.com/javase/tutorial/uiswing/concurrency/dispatch.html">Event Dispatch Thread</a>
      * and return a value.
+     * @param <V> the result type of method <tt>call</tt>
      * @param callable The callable to execute
      * @return The computed result
      * @since 7204
diff --git a/src/org/openstreetmap/josm/gui/util/KeyPressReleaseListener.java b/src/org/openstreetmap/josm/gui/util/KeyPressReleaseListener.java
index 833a1d0..bd141ee 100644
--- a/src/org/openstreetmap/josm/gui/util/KeyPressReleaseListener.java
+++ b/src/org/openstreetmap/josm/gui/util/KeyPressReleaseListener.java
@@ -4,18 +4,21 @@ package org.openstreetmap.josm.gui.util;
 import java.awt.event.KeyEvent;
 
 /**
- * Interface that is used to detect key pressing and releasing
+ * Interface that is used to detect key pressing and releasing.
+ * @since 7219
  */
 public interface KeyPressReleaseListener {
     /**
      * This is called when key press event is actually pressed
      * (no fake events while holding key)
+     * @param e key event
      */
     void doKeyPressed(KeyEvent e);
 
     /**
      * This is called when key press event is actually released
      * (no fake events while holding key)
+     * @param e key event
      */
     void doKeyReleased(KeyEvent e);
 }
diff --git a/src/org/openstreetmap/josm/gui/util/StayOpenCheckBoxMenuItem.java b/src/org/openstreetmap/josm/gui/util/StayOpenCheckBoxMenuItem.java
index 3dc8f95..80e5134 100644
--- a/src/org/openstreetmap/josm/gui/util/StayOpenCheckBoxMenuItem.java
+++ b/src/org/openstreetmap/josm/gui/util/StayOpenCheckBoxMenuItem.java
@@ -2,14 +2,12 @@
 package org.openstreetmap.josm.gui.util;
 
 import javax.swing.Action;
-import javax.swing.Icon;
 import javax.swing.JCheckBoxMenuItem;
 import javax.swing.MenuElement;
 import javax.swing.MenuSelectionManager;
 import javax.swing.event.ChangeEvent;
 import javax.swing.event.ChangeListener;
 
-
 /**
  * An extension of JCheckBoxMenuItem that doesn't close the menu when selected.
  *
@@ -32,55 +30,14 @@ public class StayOpenCheckBoxMenuItem extends JCheckBoxMenuItem {
   }
 
   /**
-   * @see JCheckBoxMenuItem#JCheckBoxMenuItem()
-   */
-  public StayOpenCheckBoxMenuItem() {
-    super();
-  }
-
-  /**
-   * @see JCheckBoxMenuItem#JCheckBoxMenuItem(Action)
+   * Contructs a new {@code StayOpenCheckBoxMenuItem} whose properties are taken from the Action supplied.
+   * @param a action
    */
   public StayOpenCheckBoxMenuItem(Action a) {
     super(a);
   }
 
   /**
-   * @see JCheckBoxMenuItem#JCheckBoxMenuItem(Icon)
-   */
-  public StayOpenCheckBoxMenuItem(Icon icon) {
-    super(icon);
-  }
-
-  /**
-   * @see JCheckBoxMenuItem#JCheckBoxMenuItem(String)
-   */
-  public StayOpenCheckBoxMenuItem(String text) {
-    super(text);
-  }
-
-  /**
-   * @see JCheckBoxMenuItem#JCheckBoxMenuItem(String, boolean)
-   */
-  public StayOpenCheckBoxMenuItem(String text, boolean selected) {
-    super(text, selected);
-  }
-
-  /**
-   * @see JCheckBoxMenuItem#JCheckBoxMenuItem(String, Icon)
-   */
-  public StayOpenCheckBoxMenuItem(String text, Icon icon) {
-    super(text, icon);
-  }
-
-  /**
-   * @see JCheckBoxMenuItem#JCheckBoxMenuItem(String, Icon, boolean)
-   */
-  public StayOpenCheckBoxMenuItem(String text, Icon icon, boolean selected) {
-    super(text, icon, selected);
-  }
-
-  /**
    * Overridden to reopen the menu.
    *
    * @param pressTime the time to "hold down" the button, in milliseconds
diff --git a/src/org/openstreetmap/josm/gui/util/StayOpenMenuItem.java b/src/org/openstreetmap/josm/gui/util/StayOpenMenuItem.java
deleted file mode 100644
index efc732c..0000000
--- a/src/org/openstreetmap/josm/gui/util/StayOpenMenuItem.java
+++ /dev/null
@@ -1,85 +0,0 @@
-// License: GPL. For details, see LICENSE file.
-package org.openstreetmap.josm.gui.util;
-
-import javax.swing.Action;
-import javax.swing.Icon;
-import javax.swing.JMenuItem;
-import javax.swing.MenuElement;
-import javax.swing.MenuSelectionManager;
-import javax.swing.event.ChangeEvent;
-import javax.swing.event.ChangeListener;
-
-/**
- * An extension of JMenuItem that doesn't close the menu when selected.
- *
- * @author Darryl https://tips4java.wordpress.com/2010/09/12/keeping-menus-open/
- */
-public class StayOpenMenuItem extends JMenuItem {
-
-  private static volatile MenuElement[] path;
-
-  {
-    getModel().addChangeListener(new ChangeListener() {
-
-      @Override
-      public void stateChanged(ChangeEvent e) {
-        if (getModel().isArmed() && isShowing()) {
-          path = MenuSelectionManager.defaultManager().getSelectedPath();
-        }
-      }
-    });
-  }
-
-  /**
-   * @see JMenuItem#JMenuItem()
-   */
-  public StayOpenMenuItem() {
-    super();
-  }
-
-  /**
-   * @see JMenuItem#JMenuItem(javax.swing.Action)
-   */
-  public StayOpenMenuItem(Action a) {
-    super(a);
-  }
-
-  /**
-   * @see JMenuItem#JMenuItem(javax.swing.Icon)
-   */
-  public StayOpenMenuItem(Icon icon) {
-    super(icon);
-  }
-
-  /**
-   * @see JMenuItem#JMenuItem(java.lang.String)
-   */
-  public StayOpenMenuItem(String text) {
-    super(text);
-  }
-
-  /**
-   * @see JMenuItem#JMenuItem(java.lang.String, javax.swing.Icon)
-   */
-  public StayOpenMenuItem(String text, Icon icon) {
-    super(text, icon);
-  }
-
-  /**
-   * @see JMenuItem#JMenuItem(java.lang.String, int)
-   */
-  public StayOpenMenuItem(String text, int mnemonic) {
-    super(text, mnemonic);
-  }
-
-  /**
-   * Overridden to reopen the menu.
-   *
-   * @param pressTime the time to "hold down" the button, in milliseconds
-   */
-  @Override
-  public void doClick(int pressTime) {
-    super.doClick(pressTime);
-    MenuSelectionManager.defaultManager().setSelectedPath(path);
-  }
-}
diff --git a/src/org/openstreetmap/josm/gui/util/StayOpenRadioButtonMenuItem.java b/src/org/openstreetmap/josm/gui/util/StayOpenRadioButtonMenuItem.java
deleted file mode 100644
index a42fa5b..0000000
--- a/src/org/openstreetmap/josm/gui/util/StayOpenRadioButtonMenuItem.java
+++ /dev/null
@@ -1,99 +0,0 @@
-// License: GPL. For details, see LICENSE file.
-package org.openstreetmap.josm.gui.util;
-
-import javax.swing.Action;
-import javax.swing.Icon;
-import javax.swing.JRadioButtonMenuItem;
-import javax.swing.MenuElement;
-import javax.swing.MenuSelectionManager;
-import javax.swing.event.ChangeEvent;
-import javax.swing.event.ChangeListener;
-
-/**
- * An extension of JRadioButtonMenuItem that doesn't close the menu when selected.
- *
- * @author Darryl https://tips4java.wordpress.com/2010/09/12/keeping-menus-open/
- */
-public class StayOpenRadioButtonMenuItem extends JRadioButtonMenuItem {
-
-  private static volatile MenuElement[] path;
-
-  {
-    getModel().addChangeListener(new ChangeListener() {
-
-      @Override
-      public void stateChanged(ChangeEvent e) {
-        if (getModel().isArmed() && isShowing()) {
-          path = MenuSelectionManager.defaultManager().getSelectedPath();
-        }
-      }
-    });
-  }
-
-  /**
-   * @see JRadioButtonMenuItem#JRadioButtonMenuItem()
-   */
-  public StayOpenRadioButtonMenuItem() {
-    super();
-  }
-
-  /**
-   * @see JRadioButtonMenuItem#JRadioButtonMenuItem(Action)
-   */
-  public StayOpenRadioButtonMenuItem(Action a) {
-    super(a);
-  }
-
-  /**
-   * @see JRadioButtonMenuItem#JRadioButtonMenuItem(Icon)
-   */
-  public StayOpenRadioButtonMenuItem(Icon icon) {
-    super(icon);
-  }
-
-  /**
-   * @see JRadioButtonMenuItem#JRadioButtonMenuItem(Icon, boolean)
-   */
-  public StayOpenRadioButtonMenuItem(Icon icon, boolean selected) {
-    super(icon, selected);
-  }
-
-  /**
-   * @see JRadioButtonMenuItem#JRadioButtonMenuItem(String)
-   */
-  public StayOpenRadioButtonMenuItem(String text) {
-    super(text);
-  }
-
-  /**
-   * @see JRadioButtonMenuItem#JRadioButtonMenuItem(String, boolean)
-   */
-  public StayOpenRadioButtonMenuItem(String text, boolean selected) {
-    super(text, selected);
-  }
-
-  /**
-   * @see JRadioButtonMenuItem#JRadioButtonMenuItem(String, Icon)
-   */
-  public StayOpenRadioButtonMenuItem(String text, Icon icon) {
-    super(text, icon);
-  }
-
-  /**
-   * @see JRadioButtonMenuItem#JRadioButtonMenuItem(String, Icon, boolean)
-   */
-  public StayOpenRadioButtonMenuItem(String text, Icon icon, boolean selected) {
-    super(text, icon, selected);
-  }
-
-  /**
-   * Overridden to reopen the menu.
-   *
-   * @param pressTime the time to "hold down" the button, in milliseconds
-   */
-  @Override
-  public void doClick(int pressTime) {
-    super.doClick(pressTime);
-    MenuSelectionManager.defaultManager().setSelectedPath(path);
-  }
-}
diff --git a/src/org/openstreetmap/josm/gui/util/TableHelper.java b/src/org/openstreetmap/josm/gui/util/TableHelper.java
index 5c04929..16d53e1 100644
--- a/src/org/openstreetmap/josm/gui/util/TableHelper.java
+++ b/src/org/openstreetmap/josm/gui/util/TableHelper.java
@@ -19,6 +19,9 @@ public final class TableHelper {
      * (originally from @class org.openstreetmap.josm.gui.preferences.SourceEditor)
      * adjust the preferred width of column col to the maximum preferred width of the cells
      * requires JTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
+     * @param tbl table
+     * @param col column index
+     * @param maxColumnWidth maximum column width
      */
     public static void adjustColumnWidth(JTable tbl, int col, int maxColumnWidth) {
         int maxwidth = 0;
diff --git a/src/org/openstreetmap/josm/gui/widgets/AbstractTextComponentValidator.java b/src/org/openstreetmap/josm/gui/widgets/AbstractTextComponentValidator.java
index 55af7a0..a120eab 100644
--- a/src/org/openstreetmap/josm/gui/widgets/AbstractTextComponentValidator.java
+++ b/src/org/openstreetmap/josm/gui/widgets/AbstractTextComponentValidator.java
@@ -91,11 +91,20 @@ public abstract class AbstractTextComponentValidator implements ActionListener,
     /**
      * Alternative constructor that allows to turn off the actionListener.
      * This can be useful if the enter key stroke needs to be forwarded to the default button in a dialog.
+     * @param tc text component
+     * @param addActionListener {@code true} to add the action listener
      */
     public AbstractTextComponentValidator(JTextComponent tc, boolean addActionListener) {
         this(tc, true, true, addActionListener);
     }
 
+    /**
+     * Constructs a new {@code AbstractTextComponentValidator}.
+     * @param tc text component
+     * @param addFocusListener {@code true} to add the focus listener
+     * @param addDocumentListener {@code true} to add the document listener
+     * @param addActionListener {@code true} to add the action listener
+     */
     public AbstractTextComponentValidator(JTextComponent tc, boolean addFocusListener, boolean addDocumentListener, boolean addActionListener) {
         CheckParameterUtil.ensureParameterNotNull(tc, "tc");
         this.tc = tc;
diff --git a/src/org/openstreetmap/josm/gui/widgets/MultiSplitLayout.java b/src/org/openstreetmap/josm/gui/widgets/MultiSplitLayout.java
index 28071a6..1d84f77 100644
--- a/src/org/openstreetmap/josm/gui/widgets/MultiSplitLayout.java
+++ b/src/org/openstreetmap/josm/gui/widgets/MultiSplitLayout.java
@@ -93,6 +93,7 @@ public class MultiSplitLayout implements LayoutManager {
      * Create a MultiSplitLayout with the specified model.
      *
      * #see setModel
+     * @param model model
      */
     public MultiSplitLayout(Node model) {
         this.model = model;
@@ -195,6 +196,7 @@ public class MultiSplitLayout implements LayoutManager {
      * If false then the Dividers define the bounds of the adjacent
      * Split and Leaf nodes.  Typically this property is set to false
      * after the (MultiSplitPane) user has dragged a Divider.
+     * @param floatingDividers boolean value
      *
      * @see #getFloatingDividers
      */
@@ -689,6 +691,11 @@ public class MultiSplitLayout implements LayoutManager {
     public static class InvalidLayoutException extends RuntimeException {
         private final transient Node node;
 
+        /**
+         * Constructs a new {@code InvalidLayoutException}.
+         * @param msg the detail message. The detail message is saved for later retrieval by the {@link #getMessage()} method.
+         * @param node node
+         */
         public InvalidLayoutException(String msg, Node node) {
             super(msg);
             this.node = node;
@@ -1233,37 +1240,27 @@ public class MultiSplitLayout implements LayoutManager {
     }
 
     /**
-     * A convenience method that converts a string to a
-     * MultiSplitLayout model (a tree of Nodes) using a
-     * a simple syntax.  Nodes are represented by
-     * parenthetical expressions whose first token
-     * is one of ROW/COLUMN/LEAF.  ROW and COLUMN specify
-     * horizontal and vertical Split nodes respectively,
-     * LEAF specifies a Leaf node.  A Leaf's name and
-     * weight can be specified with attributes,
+     * A convenience method that converts a string to a MultiSplitLayout model (a tree of Nodes) using a
+     * a simple syntax.  Nodes are represented by parenthetical expressions whose first token
+     * is one of ROW/COLUMN/LEAF.  ROW and COLUMN specify horizontal and vertical Split nodes respectively,
+     * LEAF specifies a Leaf node.  A Leaf's name and weight can be specified with attributes,
      * name=<i>myLeafName</i> weight=<i>myLeafWeight</i>.
-     * Similarly, a Split's weight can be specified with
-     * weight=<i>mySplitWeight</i>.
+     * Similarly, a Split's weight can be specified with weight=<i>mySplitWeight</i>.
      *
-     * <p> For example, the following expression generates
-     * a horizontal Split node with three children:
-     * the Leafs named left and right, and a Divider in
-     * between:
+     * <p> For example, the following expression generates a horizontal Split node with three children:
+     * the Leafs named left and right, and a Divider in between:
      * <pre>
      * (ROW (LEAF name=left) (LEAF name=right weight=1.0))
      * </pre>
      *
-     * <p> Dividers should not be included in the string,
-     * they're added automatcially as needed.  Because
-     * Leaf nodes often only need to specify a name, one
-     * can specify a Leaf by just providing the name.
+     * <p> Dividers should not be included in the string, they're added automatcially as needed.  Because
+     * Leaf nodes often only need to specify a name, one can specify a Leaf by just providing the name.
      * The previous example can be written like this:
      * <pre>
      * (ROW left (LEAF name=right weight=1.0))
      * </pre>
      *
-     * <p>Here's a more complex example.  One row with
-     * three elements, the first and last of which are columns
+     * <p>Here's a more complex example.  One row with three elements, the first and last of which are columns
      * with two leaves each:
      * <pre>
      * (ROW (COLUMN weight=0.5 left.top left.bottom)
@@ -1271,10 +1268,9 @@ public class MultiSplitLayout implements LayoutManager {
      *      (COLUMN weight=0.5 right.top right.bottom))
      * </pre>
      *
-     *
-     * <p> This syntax is not intended for archiving or
-     * configuration files .  It's just a convenience for
+     * <p> This syntax is not intended for archiving or configuration files .  It's just a convenience for
      * examples and tests.
+     * @param s model as string
      *
      * @return the Node root of a tree based on s.
      */
diff --git a/src/org/openstreetmap/josm/gui/widgets/NativeFileChooser.java b/src/org/openstreetmap/josm/gui/widgets/NativeFileChooser.java
index 4c02043..32b969a 100644
--- a/src/org/openstreetmap/josm/gui/widgets/NativeFileChooser.java
+++ b/src/org/openstreetmap/josm/gui/widgets/NativeFileChooser.java
@@ -32,7 +32,9 @@ public class NativeFileChooser extends AbstractFileChooser {
         fileDialog = new FileDialog((Frame) Main.parent);
         if (file != null) {
             fileDialog.setDirectory(file.getAbsolutePath());
-            fileDialog.setFile(file.toString());
+            if (file.isFile()) {
+                fileDialog.setFile(file.toString());
+            }
         }
     }
 
diff --git a/src/org/openstreetmap/josm/gui/widgets/TextContextualPopupMenu.java b/src/org/openstreetmap/josm/gui/widgets/TextContextualPopupMenu.java
index 00947f6..7a94a1f 100644
--- a/src/org/openstreetmap/josm/gui/widgets/TextContextualPopupMenu.java
+++ b/src/org/openstreetmap/josm/gui/widgets/TextContextualPopupMenu.java
@@ -80,6 +80,7 @@ public class TextContextualPopupMenu extends JPopupMenu {
      * Attaches this contextual menu to the given text component.
      * A menu can only be attached to a single component.
      * @param component The text component that will display the menu and handle its actions.
+     * @param undoRedo {@code true} if undo/redo must be supported
      * @return {@code this}
      * @see #detach()
      */
diff --git a/src/org/openstreetmap/josm/io/CachedFile.java b/src/org/openstreetmap/josm/io/CachedFile.java
index 7cb490a..bb5bf54 100644
--- a/src/org/openstreetmap/josm/io/CachedFile.java
+++ b/src/org/openstreetmap/josm/io/CachedFile.java
@@ -4,17 +4,16 @@ package org.openstreetmap.josm.io;
 import static org.openstreetmap.josm.tools.I18n.tr;
 
 import java.io.BufferedInputStream;
-import java.io.BufferedOutputStream;
 import java.io.File;
 import java.io.FileInputStream;
-import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
-import java.io.OutputStream;
 import java.net.HttpURLConnection;
 import java.net.MalformedURLException;
 import java.net.URL;
 import java.nio.charset.StandardCharsets;
+import java.nio.file.Files;
+import java.nio.file.StandardCopyOption;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Enumeration;
@@ -335,7 +334,7 @@ public class CachedFile {
                 if (localPath.size() == 2) {
                     File lfile = new File(localPath.get(1));
                     if (lfile.exists()) {
-                        lfile.delete();
+                        Utils.deleteFile(lfile);
                     }
                 }
                 Main.pref.putCollection(prefKey, null);
@@ -428,16 +427,8 @@ public class CachedFile {
                         Arrays.asList(Long.toString(System.currentTimeMillis()), localPathEntry.get(1)));
                 return localFile;
             }
-            try (
-                InputStream bis = new BufferedInputStream(con.getContent());
-                OutputStream fos = new FileOutputStream(destDirFile);
-                OutputStream bos = new BufferedOutputStream(fos)
-            ) {
-                byte[] buffer = new byte[4096];
-                int length;
-                while ((length = bis.read(buffer)) > -1) {
-                    bos.write(buffer, 0, length);
-                }
+            try (InputStream bis = new BufferedInputStream(con.getContent())) {
+                Files.copy(bis, destDirFile.toPath(), StandardCopyOption.REPLACE_EXISTING);
             }
             localFile = new File(destDir, localPath);
             if (Main.platform.rename(destDirFile, localFile)) {
diff --git a/src/org/openstreetmap/josm/io/FileImporter.java b/src/org/openstreetmap/josm/io/FileImporter.java
index 115e541..44c7e52 100644
--- a/src/org/openstreetmap/josm/io/FileImporter.java
+++ b/src/org/openstreetmap/josm/io/FileImporter.java
@@ -18,6 +18,10 @@ import org.openstreetmap.josm.gui.layer.Layer;
 import org.openstreetmap.josm.gui.progress.ProgressMonitor;
 import org.openstreetmap.josm.gui.util.GuiHelper;
 
+/**
+ * Abstract file importer.
+ * @since 1637
+ */
 public abstract class FileImporter implements Comparable<FileImporter>, LayerChangeListener {
 
     /**
@@ -76,7 +80,9 @@ public abstract class FileImporter implements Comparable<FileImporter>, LayerCha
     }
 
     /**
-     * Wrapper to give meaningful output if things go wrong.
+     * Wrapper to {@link #importData(File, ProgressMonitor)} to give meaningful output if things go wrong.
+     * @param f data file to import
+     * @param progressMonitor progress monitor
      * @return true if data import was successful
      */
     public boolean importDataHandleExceptions(File f, ProgressMonitor progressMonitor) {
@@ -120,6 +126,12 @@ public abstract class FileImporter implements Comparable<FileImporter>, LayerCha
         });
     }
 
+    /**
+     * Wrapper to {@link #importData(List, ProgressMonitor)} to give meaningful output if things go wrong.
+     * @param files data files to import
+     * @param progressMonitor progress monitor
+     * @return true if data import was successful
+     */
     public boolean importDataHandleExceptions(List<File> files, ProgressMonitor progressMonitor) {
         try {
             Main.info("Open "+files.size()+" files");
diff --git a/src/org/openstreetmap/josm/io/GpxExporter.java b/src/org/openstreetmap/josm/io/GpxExporter.java
index b49bc8b..3da86ff 100644
--- a/src/org/openstreetmap/josm/io/GpxExporter.java
+++ b/src/org/openstreetmap/josm/io/GpxExporter.java
@@ -247,6 +247,18 @@ public class GpxExporter extends FileExporter implements GpxConstants {
 
     /**
      * Add all those listeners to handle the enable state of the fields.
+     * @param data GPX data
+     * @param author Author checkbox
+     * @param authorName Author name textfield
+     * @param email E-mail textfield
+     * @param copyright Copyright textfield
+     * @param predefined Predefined button
+     * @param copyrightYear Copyright year textfield
+     * @param nameLabel Name label
+     * @param emailLabel E-mail label
+     * @param copyrightLabel Copyright label
+     * @param copyrightYearLabel Copyright year label
+     * @param warning Warning label
      */
     private static void addDependencies(
             final GpxData data,
diff --git a/src/org/openstreetmap/josm/io/GpxReader.java b/src/org/openstreetmap/josm/io/GpxReader.java
index 2d3f6c6..73372e2 100644
--- a/src/org/openstreetmap/josm/io/GpxReader.java
+++ b/src/org/openstreetmap/josm/io/GpxReader.java
@@ -498,6 +498,7 @@ public class GpxReader implements GpxConstants {
 
         /**
          * convert url/urlname to link element (GPX 1.0 -> GPX 1.1).
+         * @param attr attributes
          */
         private void convertUrlToLink(Map<String, Object> attr) {
             String url = (String) attr.get("url");
@@ -508,7 +509,7 @@ public class GpxReader implements GpxConstants {
                 }
                 GpxLink link = new GpxLink(url);
                 link.text = urlname;
-                @SuppressWarnings({ "unchecked", "rawtypes" })
+                @SuppressWarnings("unchecked")
                 Collection<GpxLink> links = (Collection<GpxLink>) attr.get(META_LINKS);
                 links.add(link);
             }
@@ -530,7 +531,6 @@ public class GpxReader implements GpxConstants {
      * @param source the source input stream
      * @throws IOException if an IO error occurs, e.g. the input stream is closed.
      */
-    @SuppressWarnings("resource")
     public GpxReader(InputStream source) throws IOException {
         Reader utf8stream = UTFInputStreamReader.create(source);
         Reader filtered = new InvalidXmlCharacterFilter(utf8stream);
diff --git a/src/org/openstreetmap/josm/io/GpxWriter.java b/src/org/openstreetmap/josm/io/GpxWriter.java
index 34376d7..9a04d09 100644
--- a/src/org/openstreetmap/josm/io/GpxWriter.java
+++ b/src/org/openstreetmap/josm/io/GpxWriter.java
@@ -247,6 +247,8 @@ public class GpxWriter extends XmlWriter implements GpxConstants {
     /**
      * if content not null, open tag, write encoded content, and close tag
      * else do nothing.
+     * @param tag GPX tag
+     * @param content content
      */
     private void simpleTag(String tag, String content) {
         if (content != null && !content.isEmpty()) {
@@ -259,6 +261,7 @@ public class GpxWriter extends XmlWriter implements GpxConstants {
 
     /**
      * output link
+     * @param link link
      */
     private void gpxLink(GpxLink link) {
         if (link != null) {
@@ -271,6 +274,8 @@ public class GpxWriter extends XmlWriter implements GpxConstants {
 
     /**
      * output a point
+     * @param pnt waypoint
+     * @param mode {@code WAY_POINT} for {@code wpt}, {@code ROUTE_POINT} for {@code rtept}, {@code TRACK_POINT} for {@code trkpt}
      */
     private void wayPoint(WayPoint pnt, int mode) {
         String type;
diff --git a/src/org/openstreetmap/josm/io/MultiFetchOverpassObjectReader.java b/src/org/openstreetmap/josm/io/MultiFetchOverpassObjectReader.java
new file mode 100644
index 0000000..af4477c
--- /dev/null
+++ b/src/org/openstreetmap/josm/io/MultiFetchOverpassObjectReader.java
@@ -0,0 +1,40 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.io;
+
+import org.openstreetmap.josm.data.osm.OsmPrimitiveType;
+import org.openstreetmap.josm.gui.preferences.server.OverpassServerPreference;
+import org.openstreetmap.josm.tools.Utils;
+
+import java.util.Set;
+
+/**
+ * Retrieves a set of {@link org.openstreetmap.josm.data.osm.OsmPrimitive}s from an Overpass API server.
+ *
+ * @since 9241
+ */
+class MultiFetchOverpassObjectReader extends MultiFetchServerObjectReader {
+
+    @Override
+    protected String buildRequestString(final OsmPrimitiveType type, Set<Long> idPackage) {
+        final Utils.Function<Long, Object> toOverpassExpression = new Utils.Function<Long, Object>() {
+            @Override
+            public Object apply(Long x) {
+                return type.getAPIName() + "(" + x + ");>;";
+            }
+        };
+        final String query = "(" + Utils.join("", Utils.transform(idPackage, toOverpassExpression)) + ");out meta;";
+        return "interpreter?data=" + Utils.encodeUrl(query);
+    }
+
+    @Override
+    protected String getBaseUrl() {
+        return OverpassServerPreference.getOverpassServer();
+    }
+
+    @Override
+    protected boolean recursesDown() {
+        // see https://wiki.openstreetmap.org/wiki/Overpass_API/Overpass_QL#Recurse_down_.28.3E.29 for documentation
+        // accomplished using >; in the query string above
+        return true;
+    }
+}
diff --git a/src/org/openstreetmap/josm/io/MultiFetchServerObjectReader.java b/src/org/openstreetmap/josm/io/MultiFetchServerObjectReader.java
index 8c42818..2b930a1 100644
--- a/src/org/openstreetmap/josm/io/MultiFetchServerObjectReader.java
+++ b/src/org/openstreetmap/josm/io/MultiFetchServerObjectReader.java
@@ -9,6 +9,7 @@ import java.io.InputStream;
 import java.net.HttpURLConnection;
 import java.util.ArrayList;
 import java.util.Collection;
+import java.util.Collections;
 import java.util.HashSet;
 import java.util.Iterator;
 import java.util.LinkedHashSet;
@@ -17,8 +18,8 @@ import java.util.Set;
 import java.util.concurrent.Callable;
 import java.util.concurrent.CompletionService;
 import java.util.concurrent.ExecutionException;
-import java.util.concurrent.Executor;
 import java.util.concurrent.ExecutorCompletionService;
+import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
 import java.util.concurrent.Future;
 
@@ -33,6 +34,7 @@ import org.openstreetmap.josm.data.osm.Relation;
 import org.openstreetmap.josm.data.osm.RelationMember;
 import org.openstreetmap.josm.data.osm.SimplePrimitiveId;
 import org.openstreetmap.josm.data.osm.Way;
+import org.openstreetmap.josm.gui.preferences.server.OverpassServerPreference;
 import org.openstreetmap.josm.gui.progress.NullProgressMonitor;
 import org.openstreetmap.josm.gui.progress.ProgressMonitor;
 import org.openstreetmap.josm.tools.Utils;
@@ -73,7 +75,7 @@ public class MultiFetchServerObjectReader extends OsmServerReader {
     /**
      * Constructs a {@code MultiFetchServerObjectReader}.
      */
-    public MultiFetchServerObjectReader() {
+    protected MultiFetchServerObjectReader() {
         nodes = new LinkedHashSet<>();
         ways = new LinkedHashSet<>();
         relations = new LinkedHashSet<>();
@@ -82,6 +84,33 @@ public class MultiFetchServerObjectReader extends OsmServerReader {
     }
 
     /**
+     * Creates a new instance of {@link MultiFetchServerObjectReader} or {@link MultiFetchOverpassObjectReader}
+     * depending on the {@link OverpassServerPreference#useForMultiFetch preference}.
+     *
+     * @return a new instance
+     * @since 9241
+     */
+    public static MultiFetchServerObjectReader create() {
+        return create(OverpassServerPreference.useForMultiFetch());
+    }
+
+    /**
+     * Creates a new instance of {@link MultiFetchServerObjectReader} or {@link MultiFetchOverpassObjectReader}
+     * depending on the {@code fromMirror} parameter.
+     *
+     * @param fromMirror {@code false} for {@link MultiFetchServerObjectReader}, {@code true} for {@link MultiFetchOverpassObjectReader}
+     * @return a new instance
+     * @since 9241
+     */
+    static MultiFetchServerObjectReader create(final boolean fromMirror) {
+        if (fromMirror) {
+            return new MultiFetchOverpassObjectReader();
+        } else {
+            return new MultiFetchServerObjectReader();
+        }
+    }
+
+    /**
      * Remembers an {@link OsmPrimitive}'s id. The id will
      * later be fetched as part of a Multi Get request.
      *
@@ -141,7 +170,7 @@ public class MultiFetchServerObjectReader extends OsmServerReader {
     public MultiFetchServerObjectReader appendWay(Way way) {
         if (way == null) return this;
         if (way.isNew()) return this;
-        for (Node node: way.getNodes()) {
+        for (Node node: !recursesDown() ? way.getNodes() : Collections.<Node>emptyList()) {
             if (!node.isNew()) {
                 remember(node.getPrimitiveId());
             }
@@ -160,7 +189,7 @@ public class MultiFetchServerObjectReader extends OsmServerReader {
         if (relation == null) return this;
         if (relation.isNew()) return this;
         remember(relation.getPrimitiveId());
-        for (RelationMember member : relation.getMembers()) {
+        for (RelationMember member : !recursesDown() ? relation.getMembers() : Collections.<RelationMember>emptyList()) {
             if (OsmPrimitiveType.from(member.getMember()).equals(OsmPrimitiveType.RELATION)) {
                 // avoid infinite recursion in case of cyclic dependencies in relations
                 //
@@ -239,35 +268,13 @@ public class MultiFetchServerObjectReader extends OsmServerReader {
      * @param idPackage  the package of ids
      * @return the request string
      */
-    protected static String buildRequestString(OsmPrimitiveType type, Set<Long> idPackage) {
-        StringBuilder sb = new StringBuilder();
-        sb.append(type.getAPIName()).append("s?")
-        .append(type.getAPIName()).append("s=");
-
-        Iterator<Long> it = idPackage.iterator();
-        for (int i = 0; i < idPackage.size(); i++) {
-            sb.append(it.next());
-            if (i < idPackage.size()-1) {
-                sb.append(',');
-            }
-        }
-        return sb.toString();
+    protected String buildRequestString(final OsmPrimitiveType type, Set<Long> idPackage) {
+        return type.getAPIName() + "s?" + type.getAPIName() + "s=" + Utils.join(",", idPackage);
     }
 
-    /**
-     * builds the Multi Get request string for a single id and a given {@link OsmPrimitiveType}.
-     *
-     * @param type The primitive type. Must be one of {@link OsmPrimitiveType#NODE NODE}, {@link OsmPrimitiveType#WAY WAY},
-     * {@link OsmPrimitiveType#RELATION RELATION}
-     * @param id the id
-     * @return the request string
-     */
-    protected static String buildRequestString(OsmPrimitiveType type, long id) {
-        StringBuilder sb = new StringBuilder();
-        sb.append(type.getAPIName()).append("s?")
-        .append(type.getAPIName()).append("s=")
-        .append(id);
-        return sb.toString();
+    @Override
+    protected String getBaseUrl() {
+        return super.getBaseUrl();
     }
 
     protected void rememberNodesOfIncompleteWaysToLoad(DataSet from) {
@@ -298,11 +305,12 @@ public class MultiFetchServerObjectReader extends OsmServerReader {
      * @param ids the set of ids
      * @param type The primitive type. Must be one of {@link OsmPrimitiveType#NODE NODE}, {@link OsmPrimitiveType#WAY WAY},
      * {@link OsmPrimitiveType#RELATION RELATION}
+     * @param progressMonitor progress monitor
      * @throws OsmTransferException if an error occurs while communicating with the API server
      */
     protected void fetchPrimitives(Set<Long> ids, OsmPrimitiveType type, ProgressMonitor progressMonitor) throws OsmTransferException {
         String msg = "";
-        String baseUrl = OsmApi.getOsmApi().getBaseUrl();
+        final String baseUrl = getBaseUrl();
         switch (type) {
             case NODE:     msg = tr("Fetching a package of nodes from ''{0}''",     baseUrl); break;
             case WAY:      msg = tr("Fetching a package of ways from ''{0}''",      baseUrl); break;
@@ -316,7 +324,8 @@ public class MultiFetchServerObjectReader extends OsmServerReader {
         // we will run up to MAX_DOWNLOAD_THREADS concurrent fetchers.
         int threadsNumber = Main.pref.getInteger("osm.download.threads", OsmApi.MAX_DOWNLOAD_THREADS);
         threadsNumber = Math.min(Math.max(threadsNumber, 1), OsmApi.MAX_DOWNLOAD_THREADS);
-        Executor exec = Executors.newFixedThreadPool(threadsNumber, Utils.newThreadFactory(getClass() + "-%d", Thread.NORM_PRIORITY));
+        final ExecutorService exec = Executors.newFixedThreadPool(
+                threadsNumber, Utils.newThreadFactory(getClass() + "-%d", Thread.NORM_PRIORITY));
         CompletionService<FetchResult> ecs = new ExecutorCompletionService<>(exec);
         List<Future<FetchResult>> jobs = new ArrayList<>();
         while (!toFetch.isEmpty()) {
@@ -338,7 +347,8 @@ public class MultiFetchServerObjectReader extends OsmServerReader {
                 Main.error(e);
             }
         }
-        // Cancel requests if the user choosed to
+        exec.shutdown();
+        // Cancel requests if the user chose to
         if (isCanceled()) {
             for (Future<FetchResult> job : jobs) {
                 job.cancel(true);
@@ -395,6 +405,15 @@ public class MultiFetchServerObjectReader extends OsmServerReader {
     }
 
     /**
+     * Whether this reader fetches nodes when loading ways, or members when loading relations.
+     *
+     * @return {@code true} if the reader recurses down
+     */
+    protected boolean recursesDown() {
+        return false;
+    }
+
+    /**
      * The class holding the results given by {@link Fetcher}.
      * It is only a wrapper of the resulting {@link DataSet} and the collection of {@link PrimitiveId} that could not have been loaded.
      */
@@ -427,7 +446,7 @@ public class MultiFetchServerObjectReader extends OsmServerReader {
      * The inheritance of {@link OsmServerReader} is only explained by the need to have a distinct OSM connection by {@code Fetcher} instance.
      * @see FetchResult
      */
-    protected static class Fetcher extends OsmServerReader implements Callable<FetchResult> {
+    protected class Fetcher extends OsmServerReader implements Callable<FetchResult> {
 
         private final Set<Long> pkg;
         private final OsmPrimitiveType type;
@@ -477,6 +496,11 @@ public class MultiFetchServerObjectReader extends OsmServerReader {
             }
         }
 
+        @Override
+        protected String getBaseUrl() {
+            return MultiFetchServerObjectReader.this.getBaseUrl();
+        }
+
         /**
          * invokes a Multi Get for a set of ids and a given {@link OsmPrimitiveType}.
          * The retrieved primitives are merged to {@link #outputDataSet}.
@@ -484,6 +508,7 @@ public class MultiFetchServerObjectReader extends OsmServerReader {
          * @param type The primitive type. Must be one of {@link OsmPrimitiveType#NODE NODE}, {@link OsmPrimitiveType#WAY WAY},
          * {@link OsmPrimitiveType#RELATION RELATION}
          * @param pkg the package of ids
+         * @param progressMonitor progress monitor
          * @return the {@link FetchResult} of this operation
          * @throws OsmTransferException if an error occurs while communicating with the API server
          */
@@ -512,11 +537,12 @@ public class MultiFetchServerObjectReader extends OsmServerReader {
          * @param type The primitive type. Must be one of {@link OsmPrimitiveType#NODE NODE}, {@link OsmPrimitiveType#WAY WAY},
          * {@link OsmPrimitiveType#RELATION RELATION}
          * @param id the id
+         * @param progressMonitor progress monitor
          * @return the {@link DataSet} resulting of this operation
          * @throws OsmTransferException if an error occurs while communicating with the API server
          */
         protected DataSet singleGetId(OsmPrimitiveType type, long id, ProgressMonitor progressMonitor) throws OsmTransferException {
-            String request = buildRequestString(type, id);
+            String request = buildRequestString(type, Collections.singleton(id));
             DataSet result = null;
             try (InputStream in = getInputStream(request, NullProgressMonitor.INSTANCE)) {
                 if (in == null) return null;
@@ -543,6 +569,7 @@ public class MultiFetchServerObjectReader extends OsmServerReader {
          * @param type The primitive type. Must be one of {@link OsmPrimitiveType#NODE NODE}, {@link OsmPrimitiveType#WAY WAY},
          * {@link OsmPrimitiveType#RELATION RELATION}
          * @param pkg the set of ids
+         * @param progressMonitor progress monitor
          * @return the {@link FetchResult} of this operation
          * @throws OsmTransferException if an error occurs while communicating with the API server
          */
diff --git a/src/org/openstreetmap/josm/io/OsmApi.java b/src/org/openstreetmap/josm/io/OsmApi.java
index 68980a8..be950e9 100644
--- a/src/org/openstreetmap/josm/io/OsmApi.java
+++ b/src/org/openstreetmap/josm/io/OsmApi.java
@@ -617,6 +617,7 @@ public class OsmApi extends OsmConnection {
             try {
                 url = new URL(new URL(getBaseUrl()), urlSuffix);
                 final HttpClient client = HttpClient.create(url, requestMethod).keepAlive(false);
+                activeConnection = client;
                 if (fastFail) {
                     client.setConnectTimeout(1000);
                     client.setReadTimeout(1000);
@@ -639,9 +640,9 @@ public class OsmApi extends OsmConnection {
                     client.setRequestBody((requestBody != null ? requestBody : "").getBytes(StandardCharsets.UTF_8));
                 }
 
-                activeConnection = client.connect();
-                Main.info(activeConnection.getResponseMessage());
-                int retCode = activeConnection.getResponseCode();
+                final HttpClient.Response response = client.connect();
+                Main.info(response.getResponseMessage());
+                int retCode = response.getResponseCode();
 
                 if (retCode >= 500) {
                     if (retries-- > 0) {
@@ -651,12 +652,12 @@ public class OsmApi extends OsmConnection {
                     }
                 }
 
-                final String responseBody = activeConnection.fetchContent();
+                final String responseBody = response.fetchContent();
 
                 String errorHeader = null;
                 // Look for a detailed error message from the server
-                if (activeConnection.getHeaderField("Error") != null) {
-                    errorHeader = activeConnection.getHeaderField("Error");
+                if (response.getHeaderField("Error") != null) {
+                    errorHeader = response.getHeaderField("Error");
                     Main.error("Error header: " + errorHeader);
                 } else if (retCode != HttpURLConnection.HTTP_OK && responseBody.length() > 0) {
                     Main.error("Error body: " + responseBody);
diff --git a/src/org/openstreetmap/josm/io/OsmConnection.java b/src/org/openstreetmap/josm/io/OsmConnection.java
index b453c15..7d690a9 100644
--- a/src/org/openstreetmap/josm/io/OsmConnection.java
+++ b/src/org/openstreetmap/josm/io/OsmConnection.java
@@ -30,7 +30,7 @@ import oauth.signpost.exception.OAuthException;
  */
 public class OsmConnection {
     protected boolean cancel;
-    protected HttpClient.Response activeConnection;
+    protected HttpClient activeConnection;
     protected OAuthParameters oauthParameters;
 
     /**
diff --git a/src/org/openstreetmap/josm/io/OsmExporter.java b/src/org/openstreetmap/josm/io/OsmExporter.java
index 7b03f61..95d8ad3 100644
--- a/src/org/openstreetmap/josm/io/OsmExporter.java
+++ b/src/org/openstreetmap/josm/io/OsmExporter.java
@@ -92,7 +92,7 @@ public class OsmExporter extends FileExporter {
             doSave(file, layer);
             if (noBackup || !Main.pref.getBoolean("save.keepbackup", false)) {
                 if (tmpFile != null) {
-                    tmpFile.delete();
+                    Utils.deleteFile(tmpFile);
                 }
             }
             layer.onPostSaveToFile();
diff --git a/src/org/openstreetmap/josm/io/OsmReader.java b/src/org/openstreetmap/josm/io/OsmReader.java
index 1d7f3c3..c360b35 100644
--- a/src/org/openstreetmap/josm/io/OsmReader.java
+++ b/src/org/openstreetmap/josm/io/OsmReader.java
@@ -56,7 +56,10 @@ public class OsmReader extends AbstractReader {
     /** Used by plugins to register themselves as data postprocessors. */
     private static volatile List<OsmServerReadPostprocessor> postprocessors;
 
-    /** register a new postprocessor */
+    /** Register a new postprocessor.
+     * @param pp postprocessor
+     * @see #deregisterPostprocessor
+     */
     public static void registerPostprocessor(OsmServerReadPostprocessor pp) {
         if (postprocessors == null) {
             postprocessors = new ArrayList<>();
@@ -64,7 +67,11 @@ public class OsmReader extends AbstractReader {
         postprocessors.add(pp);
     }
 
-    /** deregister a postprocessor previously registered with registerPostprocessor */
+    /**
+     * Deregister a postprocessor previously registered with {@link #registerPostprocessor}.
+     * @param pp postprocessor
+     * @see #registerPostprocessor
+     */
     public static void deregisterPostprocessor(OsmServerReadPostprocessor pp) {
         if (postprocessors != null) {
             postprocessors.remove(pp);
@@ -376,8 +383,12 @@ public class OsmReader extends AbstractReader {
     }
 
     protected void parseUnknown(boolean printWarning) throws XMLStreamException {
-        if (printWarning) {
-            Main.info(tr("Undefined element ''{0}'' found in input stream. Skipping.", parser.getLocalName()));
+        final String element = parser.getLocalName();
+        if (printWarning && ("note".equals(element) || "meta".equals(element))) {
+            // we know that Overpass API returns those elements
+            Main.debug(tr("Undefined element ''{0}'' found in input stream. Skipping.", element));
+        } else if (printWarning) {
+            Main.info(tr("Undefined element ''{0}'' found in input stream. Skipping.", element));
         }
         while (true) {
             int event = parser.next();
@@ -398,6 +409,7 @@ public class OsmReader extends AbstractReader {
      *
      * This is basically the same code as parseUnknown(), except for the warnings, which
      * are displayed for inner elements and not at top level.
+     * @param printWarning if {@code true}, a warning message will be printed if an unknown element is met
      * @throws XMLStreamException if there is an error processing the underlying XML source
      */
     private void jumpToEnd(boolean printWarning) throws XMLStreamException {
@@ -431,6 +443,7 @@ public class OsmReader extends AbstractReader {
 
     /**
      * Read out the common attributes and put them into current OsmPrimitive.
+     * @param current primitive to update
      * @throws XMLStreamException if there is an error processing the underlying XML source
      */
     private void readCommon(PrimitiveData current) throws XMLStreamException {
diff --git a/src/org/openstreetmap/josm/io/OsmServerBackreferenceReader.java b/src/org/openstreetmap/josm/io/OsmServerBackreferenceReader.java
index 077d87a..7b91216 100644
--- a/src/org/openstreetmap/josm/io/OsmServerBackreferenceReader.java
+++ b/src/org/openstreetmap/josm/io/OsmServerBackreferenceReader.java
@@ -147,6 +147,7 @@ public class OsmServerBackreferenceReader extends OsmServerReader {
     /**
      * Reads referring ways from the API server and replies them in a {@link DataSet}
      *
+     * @param progressMonitor progress monitor
      * @return the data set
      * @throws OsmTransferException if any error occurs during dialog with OSM API
      */
diff --git a/src/org/openstreetmap/josm/io/OsmServerHistoryReader.java b/src/org/openstreetmap/josm/io/OsmServerHistoryReader.java
index 0ae542e..a29c94f 100644
--- a/src/org/openstreetmap/josm/io/OsmServerHistoryReader.java
+++ b/src/org/openstreetmap/josm/io/OsmServerHistoryReader.java
@@ -49,6 +49,7 @@ public class OsmServerHistoryReader extends OsmServerReader {
 
     /**
      * Fetches the history from the OSM API and parses it
+     * @param progressMonitor progress monitor
      *
      * @return the data set with the parsed history data
      * @throws OsmTransferException if an exception occurs
diff --git a/src/org/openstreetmap/josm/io/OsmServerReader.java b/src/org/openstreetmap/josm/io/OsmServerReader.java
index 4fcfcd1..a63970d 100644
--- a/src/org/openstreetmap/josm/io/OsmServerReader.java
+++ b/src/org/openstreetmap/josm/io/OsmServerReader.java
@@ -122,15 +122,18 @@ public abstract class OsmServerReader extends OsmConnection {
             }
 
             final HttpClient client = HttpClient.create(url);
+            activeConnection = client;
             client.setReasonForRequest(reason);
+            adaptRequest(client);
             if (doAuthenticate) {
                 addAuth(client);
             }
             if (cancel)
                 throw new OsmTransferCanceledException("Operation canceled");
 
+            final HttpClient.Response response;
             try {
-                activeConnection = client.connect(progressMonitor);
+                response = client.connect(progressMonitor);
             } catch (Exception e) {
                 Main.error(e);
                 OsmTransferException ote = new OsmTransferException(
@@ -139,25 +142,25 @@ public abstract class OsmServerReader extends OsmConnection {
                 throw ote;
             }
             try {
-                if (activeConnection.getResponseCode() == HttpURLConnection.HTTP_UNAUTHORIZED)
+                if (response.getResponseCode() == HttpURLConnection.HTTP_UNAUTHORIZED)
                     throw new OsmApiException(HttpURLConnection.HTTP_UNAUTHORIZED, null, null);
 
-                if (activeConnection.getResponseCode() == HttpURLConnection.HTTP_PROXY_AUTH)
+                if (response.getResponseCode() == HttpURLConnection.HTTP_PROXY_AUTH)
                     throw new OsmTransferCanceledException("Proxy Authentication Required");
 
-                if (activeConnection.getResponseCode() != HttpURLConnection.HTTP_OK) {
-                    String errorHeader = activeConnection.getHeaderField("Error");
+                if (response.getResponseCode() != HttpURLConnection.HTTP_OK) {
+                    String errorHeader = response.getHeaderField("Error");
                     String errorBody;
                     try {
-                        errorBody = activeConnection.fetchContent();
+                        errorBody = response.fetchContent();
                     } catch (Exception e) {
                         errorBody = tr("Reading error text failed.");
                     }
-                    throw new OsmApiException(activeConnection.getResponseCode(), errorHeader, errorBody, url.toString());
+                    throw new OsmApiException(response.getResponseCode(), errorHeader, errorBody, url.toString());
                 }
 
-                activeConnection.uncompressAccordingToContentDisposition(uncompressAccordingToContentDisposition);
-                return activeConnection.getContent();
+                response.uncompressAccordingToContentDisposition(uncompressAccordingToContentDisposition);
+                return response.getContent();
             } catch (OsmTransferException e) {
                 throw e;
             } catch (Exception e) {
@@ -169,6 +172,14 @@ public abstract class OsmServerReader extends OsmConnection {
     }
 
     /**
+     * Allows subclasses to modify the request.
+     * @param request the prepared request
+     * @since 9308
+     */
+    protected void adaptRequest(HttpClient request) {
+    }
+
+    /**
      * Download OSM files from somewhere
      * @param progressMonitor The progress monitor
      * @return The corresponding dataset
diff --git a/src/org/openstreetmap/josm/io/OsmServerWriter.java b/src/org/openstreetmap/josm/io/OsmServerWriter.java
index afcd351..3aa9394 100644
--- a/src/org/openstreetmap/josm/io/OsmServerWriter.java
+++ b/src/org/openstreetmap/josm/io/OsmServerWriter.java
@@ -255,6 +255,7 @@ public class OsmServerWriter {
 
     /**
      * Calls all registered upload postprocessors.
+     * @param pm progress monitor
      */
     public void executePostprocessors(ProgressMonitor pm) {
         if (postprocessors != null) {
diff --git a/src/org/openstreetmap/josm/io/OsmWriter.java b/src/org/openstreetmap/josm/io/OsmWriter.java
index 44cb8c8..a42a6d9 100644
--- a/src/org/openstreetmap/josm/io/OsmWriter.java
+++ b/src/org/openstreetmap/josm/io/OsmWriter.java
@@ -14,6 +14,7 @@ import java.util.Map.Entry;
 import org.openstreetmap.josm.data.DataSource;
 import org.openstreetmap.josm.data.coor.CoordinateFormat;
 import org.openstreetmap.josm.data.coor.LatLon;
+import org.openstreetmap.josm.data.osm.AbstractPrimitive;
 import org.openstreetmap.josm.data.osm.Changeset;
 import org.openstreetmap.josm.data.osm.DataSet;
 import org.openstreetmap.josm.data.osm.INode;
@@ -45,7 +46,11 @@ public class OsmWriter extends XmlWriter implements PrimitiveVisitor {
     private Changeset changeset;
 
     /**
-     * Do not call this directly. Use OsmWriterFactory instead.
+     * Constructs a new {@code OsmWriter}.
+     * Do not call this directly. Use {@link OsmWriterFactory} instead.
+     * @param out print writer
+     * @param osmConform if {@code true}, prevents modification attributes to be written to the common part
+     * @param version OSM API version (0.6)
      */
     protected OsmWriter(PrintWriter out, boolean osmConform, String version) {
         super(out);
@@ -88,9 +93,18 @@ public class OsmWriter extends XmlWriter implements PrimitiveVisitor {
         out.println("</osm>");
     }
 
-    protected static final Comparator<OsmPrimitive> byIdComparator = new Comparator<OsmPrimitive>() {
-        @Override public int compare(OsmPrimitive o1, OsmPrimitive o2) {
-            return o1.getUniqueId() < o2.getUniqueId() ? -1 : (o1.getUniqueId() == o2.getUniqueId() ? 0 : 1);
+    /**
+     * Sorts {@code -1} → {@code -infinity}, then {@code +1} → {@code +infinity}
+     */
+    protected static final Comparator<AbstractPrimitive> byIdComparator = new Comparator<AbstractPrimitive>() {
+        @Override public int compare(AbstractPrimitive o1, AbstractPrimitive o2) {
+            final long i1 = o1.getUniqueId();
+            final long i2 = o2.getUniqueId();
+            if (i1 < 0 && i2 < 0) {
+                return Long.compare(i2, i1);
+            } else {
+                return Long.compare(i1, i2);
+            }
         }
     };
 
@@ -278,6 +292,8 @@ public class OsmWriter extends XmlWriter implements PrimitiveVisitor {
     /**
      * Add the common part as the form of the tag as well as the XML attributes
      * id, action, user, and visible.
+     * @param osm osm primitive
+     * @param tagname XML tag matching osm primitive (node, way, relation)
      */
     protected void addCommon(IPrimitive osm, String tagname) {
         out.print("  <"+tagname);
diff --git a/src/org/openstreetmap/josm/io/OverpassDownloadReader.java b/src/org/openstreetmap/josm/io/OverpassDownloadReader.java
index 7c9505e..be43043 100644
--- a/src/org/openstreetmap/josm/io/OverpassDownloadReader.java
+++ b/src/org/openstreetmap/josm/io/OverpassDownloadReader.java
@@ -4,6 +4,8 @@ package org.openstreetmap.josm.io;
 import static org.openstreetmap.josm.tools.I18n.tr;
 
 import java.io.InputStream;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 
 import javax.xml.stream.XMLStreamConstants;
 import javax.xml.stream.XMLStreamException;
@@ -12,6 +14,7 @@ import org.openstreetmap.josm.data.Bounds;
 import org.openstreetmap.josm.data.DataSource;
 import org.openstreetmap.josm.data.osm.DataSet;
 import org.openstreetmap.josm.gui.progress.ProgressMonitor;
+import org.openstreetmap.josm.tools.HttpClient;
 import org.openstreetmap.josm.tools.Utils;
 
 /**
@@ -104,6 +107,20 @@ public class OverpassDownloadReader extends BoundingBoxDownloader {
     }
 
     @Override
+    protected void adaptRequest(HttpClient request) {
+        // see https://wiki.openstreetmap.org/wiki/Overpass_API/Overpass_QL#timeout
+        final Matcher timeoutMatcher = Pattern.compile("\\[timeout:(\\d+)\\]").matcher(overpassQuery);
+        final int timeout;
+        if (timeoutMatcher.find()) {
+            timeout = 1000 * Integer.parseInt(timeoutMatcher.group(1));
+        } else {
+            timeout = 180_000;
+        }
+        request.setConnectTimeout(timeout);
+        request.setReadTimeout(timeout);
+    }
+
+    @Override
     protected String getTaskName() {
         return tr("Contacting Server...");
     }
diff --git a/src/org/openstreetmap/josm/io/StreamProgressUpdater.java b/src/org/openstreetmap/josm/io/StreamProgressUpdater.java
index 2765a17..c4aae37 100644
--- a/src/org/openstreetmap/josm/io/StreamProgressUpdater.java
+++ b/src/org/openstreetmap/josm/io/StreamProgressUpdater.java
@@ -1,8 +1,11 @@
 // License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.io;
 
+import java.util.Locale;
+
 import org.openstreetmap.josm.gui.progress.NullProgressMonitor;
 import org.openstreetmap.josm.gui.progress.ProgressMonitor;
+import org.openstreetmap.josm.tools.Utils;
 
 final class StreamProgressUpdater {
 
@@ -44,7 +47,7 @@ final class StreamProgressUpdater {
             if (size > 0) {
                 progressMonitor.setTicks(soFar);
             }
-            progressMonitor.setExtraText(soFar / 1024 + " KB");
+            progressMonitor.setExtraText(Utils.getSizeString(soFar, Locale.getDefault()));
         }
     }
 
diff --git a/src/org/openstreetmap/josm/io/UTFInputStreamReader.java b/src/org/openstreetmap/josm/io/UTFInputStreamReader.java
index 87b45dd..ac6f07f 100644
--- a/src/org/openstreetmap/josm/io/UTFInputStreamReader.java
+++ b/src/org/openstreetmap/josm/io/UTFInputStreamReader.java
@@ -14,6 +14,7 @@ public final class UTFInputStreamReader extends InputStreamReader {
 
     /**
      * Creates a new {@link InputStreamReader} from the {@link InputStream} with UTF-8 as default encoding.
+     * @param input input stream
      * @return A reader with the correct encoding. Starts to read after the BOM.
      * @throws IOException if any I/O error occurs
      * @see #create(java.io.InputStream, String)
@@ -24,6 +25,7 @@ public final class UTFInputStreamReader extends InputStreamReader {
 
     /**
      * Creates a new {@link InputStreamReader} from the {@link InputStream}.
+     * @param input input stream
      * @param defaultEncoding Used, when no BOM was recognized. Can be null.
      * @return A reader with the correct encoding. Starts to read after the BOM.
      * @throws IOException if any I/O error occurs
diff --git a/src/org/openstreetmap/josm/io/XmlWriter.java b/src/org/openstreetmap/josm/io/XmlWriter.java
index 1ac2ffe..60ec77f 100644
--- a/src/org/openstreetmap/josm/io/XmlWriter.java
+++ b/src/org/openstreetmap/josm/io/XmlWriter.java
@@ -16,6 +16,10 @@ public class XmlWriter implements Closeable {
 
     protected final PrintWriter out;
 
+    /**
+     * Constructs a new {@code XmlWriter}.
+     * @param out print writer
+     */
     public XmlWriter(PrintWriter out) {
         this.out = out;
     }
@@ -29,6 +33,13 @@ public class XmlWriter implements Closeable {
         }
     }
 
+    /**
+     * Encode the given string in XML1.0 format.
+     * Optimized to fast pass strings that don't need encoding (normal case).
+     *
+     * @param unencoded the unencoded input string
+     * @return XML1.0 string
+     */
     public static String encode(String unencoded) {
         return encode(unencoded, false);
     }
diff --git a/src/org/openstreetmap/josm/io/auth/DefaultAuthenticator.java b/src/org/openstreetmap/josm/io/auth/DefaultAuthenticator.java
index cc75cd7..2f15caf 100644
--- a/src/org/openstreetmap/josm/io/auth/DefaultAuthenticator.java
+++ b/src/org/openstreetmap/josm/io/auth/DefaultAuthenticator.java
@@ -5,6 +5,7 @@ import java.net.Authenticator;
 import java.net.PasswordAuthentication;
 import java.util.EnumMap;
 import java.util.Map;
+import java.util.Objects;
 
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.io.OsmApi;
@@ -46,7 +47,9 @@ public final class DefaultAuthenticator extends Authenticator {
         if (!enabled)
             return null;
         try {
-            if (getRequestorType().equals(Authenticator.RequestorType.SERVER) && OsmApi.isUsingOAuth()) {
+            if (OsmApi.isUsingOAuth()
+                    && Objects.equals(OsmApi.getOsmApi().getHost(), getRequestingHost())
+                    && RequestorType.SERVER.equals(getRequestorType())) {
                 // if we are working with OAuth we don't prompt for a password
                 return null;
             }
diff --git a/src/org/openstreetmap/josm/io/remotecontrol/AddTagsDialog.java b/src/org/openstreetmap/josm/io/remotecontrol/AddTagsDialog.java
index cae6796..86601d0 100644
--- a/src/org/openstreetmap/josm/io/remotecontrol/AddTagsDialog.java
+++ b/src/org/openstreetmap/josm/io/remotecontrol/AddTagsDialog.java
@@ -118,6 +118,9 @@ public class AddTagsDialog extends ExtendedDialog {
 
     /**
      * Constructs a new {@code AddTagsDialog}.
+     * @param tags tags to add
+     * @param senderName String for skipping confirmations. Use empty string for always confirmed adding.
+     * @param primitives OSM objects that will be modified
      */
     public AddTagsDialog(String[][] tags, String senderName, Collection<? extends OsmPrimitive> primitives) {
         super(Main.parent, tr("Add tags to selected objects"), new String[] {tr("Add selected tags"), tr("Add all tags"), tr("Cancel")},
@@ -259,6 +262,9 @@ public class AddTagsDialog extends ExtendedDialog {
     /**
      * parse addtags parameters Example URL (part):
      * addtags=wikipedia:de%3DResidenzschloss Dresden|name:en%3DDresden Castle
+     * @param args request arguments
+     * @param sender is a string for skipping confirmations. Use empty string for always confirmed adding.
+     * @param primitives OSM objects that will be modified
      */
     public static void addTags(final Map<String, String> args, final String sender, final Collection<? extends OsmPrimitive> primitives) {
         if (args.containsKey("addtags")) {
diff --git a/src/org/openstreetmap/josm/io/remotecontrol/RequestProcessor.java b/src/org/openstreetmap/josm/io/remotecontrol/RequestProcessor.java
index 9d7ec2a..5103ba3 100644
--- a/src/org/openstreetmap/josm/io/remotecontrol/RequestProcessor.java
+++ b/src/org/openstreetmap/josm/io/remotecontrol/RequestProcessor.java
@@ -300,6 +300,8 @@ public class RequestProcessor extends Thread {
      *
      * @param out
      *            The writer where the error is written
+     * @param help
+     *            Optional HTML help content to display, can be null
      * @throws IOException
      *             If the error can not be written
      */
@@ -322,6 +324,8 @@ public class RequestProcessor extends Thread {
      *
      * @param out
      *            The writer where the error is written
+     * @param help
+     *            Optional HTML help content to display, can be null
      * @throws IOException
      *             If the error can not be written
      */
diff --git a/src/org/openstreetmap/josm/io/remotecontrol/handler/AddWayHandler.java b/src/org/openstreetmap/josm/io/remotecontrol/handler/AddWayHandler.java
index 257db73..f10558d 100644
--- a/src/org/openstreetmap/josm/io/remotecontrol/handler/AddWayHandler.java
+++ b/src/org/openstreetmap/josm/io/remotecontrol/handler/AddWayHandler.java
@@ -121,10 +121,11 @@ public class AddWayHandler extends RequestHandler {
     /**
      * Find the node with almost the same coords in dataset or in already added nodes
      * @param ll coordinates
+     * @param commands list of commands that will be modified if needed
      * @return node with almost the same coords
      * @since 5845
      */
-    Node findOrCreateNode(LatLon ll,  List<Command> commands) {
+    Node findOrCreateNode(LatLon ll, List<Command> commands) {
         Node nd = null;
 
         if (Main.isDisplayingMapView()) {
diff --git a/src/org/openstreetmap/josm/io/session/SessionReader.java b/src/org/openstreetmap/josm/io/session/SessionReader.java
index dbfe945..1136479 100644
--- a/src/org/openstreetmap/josm/io/session/SessionReader.java
+++ b/src/org/openstreetmap/josm/io/session/SessionReader.java
@@ -144,6 +144,7 @@ public class SessionReader {
         /**
          * Add a task, e.g. a message dialog, that should
          * be executed in EDT after all layers have been added.
+         * @param task task to run in EDT
          */
         public void addPostLayersTask(Runnable task) {
             postLoadTasks.add(task);
diff --git a/src/org/openstreetmap/josm/io/session/SessionWriter.java b/src/org/openstreetmap/josm/io/session/SessionWriter.java
index a4422b5..1137386 100644
--- a/src/org/openstreetmap/josm/io/session/SessionWriter.java
+++ b/src/org/openstreetmap/josm/io/session/SessionWriter.java
@@ -64,6 +64,8 @@ public class SessionWriter {
      * Register a session layer exporter.
      *
      * The exporter class must have a one-argument constructor with layerClass as formal parameter type.
+     * @param layerClass layer class
+     * @param exporter exporter for this layer class
      */
     public static void registerSessionLayerExporter(Class<? extends Layer> layerClass, Class<? extends SessionLayerExporter> exporter) {
         sessionLayerExporters.put(layerClass, exporter);
@@ -94,6 +96,7 @@ public class SessionWriter {
      * @param layers The ordered list of layers to save
      * @param active The index of active layer in {@code layers} (starts at 0). Ignored if set to -1
      * @param exporters The exporters to use to save layers
+     * @param dependencies layer dependencies
      * @param zip {@code true} if a joz archive has to be created, {@code false otherwise}
      * @since 6271
      */
diff --git a/src/org/openstreetmap/josm/plugins/Plugin.java b/src/org/openstreetmap/josm/plugins/Plugin.java
index 2f09ab3..11e14f2 100644
--- a/src/org/openstreetmap/josm/plugins/Plugin.java
+++ b/src/org/openstreetmap/josm/plugins/Plugin.java
@@ -3,11 +3,12 @@ package org.openstreetmap.josm.plugins;
 
 import java.io.File;
 import java.io.FileNotFoundException;
-import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
 import java.net.URL;
 import java.net.URLClassLoader;
+import java.nio.file.Files;
+import java.nio.file.StandardCopyOption;
 import java.security.AccessController;
 import java.security.PrivilegedAction;
 import java.util.List;
@@ -100,11 +101,14 @@ public abstract class Plugin implements MapFrameListener {
     /**
      * Called in the download dialog to give the plugin a chance to modify the list
      * of bounding box selectors.
+     * @param list list of bounding box selectors
      */
     public void addDownloadSelection(List<DownloadSelection> list) {}
 
     /**
      * Copies the resource 'from' to the file in the plugin directory named 'to'.
+     * @param from source file
+     * @param to target file
      * @throws FileNotFoundException if the file exists but is a directory rather than a regular file,
      * does not exist but cannot be created, or cannot be opened for any other reason
      * @throws IOException if any other I/O error occurs
@@ -115,17 +119,11 @@ public abstract class Plugin implements MapFrameListener {
         if (!pluginDir.exists()) {
             pluginDir.mkdirs();
         }
-        try (
-            FileOutputStream out = new FileOutputStream(new File(pluginDirName, to));
-            InputStream in = getClass().getResourceAsStream(from)
-        ) {
+        try (InputStream in = getClass().getResourceAsStream(from)) {
             if (in == null) {
                 throw new IOException("Resource not found: "+from);
             }
-            byte[] buffer = new byte[8192];
-            for (int len = in.read(buffer); len > 0; len = in.read(buffer)) {
-                out.write(buffer, 0, len);
-            }
+            Files.copy(in, new File(pluginDirName, to).toPath(), StandardCopyOption.REPLACE_EXISTING);
         }
     }
 
@@ -148,6 +146,7 @@ public abstract class Plugin implements MapFrameListener {
         File pluginJar = new File(pluginDir, info.name + ".jar");
         final URL pluginJarUrl = Utils.fileToURL(pluginJar);
         return AccessController.doPrivileged(new PrivilegedAction<ClassLoader>() {
+              @Override
               public ClassLoader run() {
                   return new URLClassLoader(new URL[] {pluginJarUrl}, Main.class.getClassLoader());
               }
diff --git a/src/org/openstreetmap/josm/plugins/PluginDownloadTask.java b/src/org/openstreetmap/josm/plugins/PluginDownloadTask.java
index 3dfe19a..68b3b13 100644
--- a/src/org/openstreetmap/josm/plugins/PluginDownloadTask.java
+++ b/src/org/openstreetmap/josm/plugins/PluginDownloadTask.java
@@ -5,12 +5,12 @@ import static org.openstreetmap.josm.tools.I18n.tr;
 
 import java.awt.Component;
 import java.io.File;
-import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
-import java.io.OutputStream;
 import java.net.MalformedURLException;
 import java.net.URL;
+import java.nio.file.Files;
+import java.nio.file.StandardCopyOption;
 import java.util.Collection;
 import java.util.LinkedList;
 
@@ -43,7 +43,7 @@ public class PluginDownloadTask extends PleaseWaitRunnable {
     private final Collection<PluginInformation> failed = new LinkedList<>();
     private final Collection<PluginInformation> downloaded = new LinkedList<>();
     private boolean canceled;
-    private HttpClient.Response downloadConnection;
+    private HttpClient downloadConnection;
 
     /**
      * Creates the download task
@@ -123,17 +123,11 @@ public class PluginDownloadTask extends PleaseWaitRunnable {
             URL url = new URL(pi.downloadlink);
             synchronized (this) {
                 downloadConnection = HttpClient.create(url)
-                        .setAccept(PLUGIN_MIME_TYPES)
-                        .connect();
+                        .setAccept(PLUGIN_MIME_TYPES);
+                downloadConnection.connect();
             }
-            try (
-                InputStream in = downloadConnection.getContent();
-                OutputStream out = new FileOutputStream(file)
-            ) {
-                byte[] buffer = new byte[8192];
-                for (int read = in.read(buffer); read != -1; read = in.read(buffer)) {
-                    out.write(buffer, 0, read);
-                }
+            try (InputStream in = downloadConnection.getResponse().getContent()) {
+                Files.copy(in, file.toPath(), StandardCopyOption.REPLACE_EXISTING);
             }
         } catch (MalformedURLException e) {
             String msg = tr("Cannot download plugin ''{0}''. Its download link ''{1}'' is not a valid URL. Skipping download.",
diff --git a/src/org/openstreetmap/josm/plugins/ReadRemotePluginInformationTask.java b/src/org/openstreetmap/josm/plugins/ReadRemotePluginInformationTask.java
index 4baf4a4..9dc04e0 100644
--- a/src/org/openstreetmap/josm/plugins/ReadRemotePluginInformationTask.java
+++ b/src/org/openstreetmap/josm/plugins/ReadRemotePluginInformationTask.java
@@ -50,7 +50,7 @@ public class ReadRemotePluginInformationTask extends PleaseWaitRunnable {
 
     private Collection<String> sites;
     private boolean canceled;
-    private HttpClient.Response connection;
+    private HttpClient connection;
     private List<PluginInformation> availablePlugins;
     private boolean displayErrMsg;
 
@@ -156,9 +156,10 @@ public class ReadRemotePluginInformationTask extends PleaseWaitRunnable {
             monitor.indeterminateSubTask(tr("Downloading plugin list from ''{0}''", printsite));
 
             URL url = new URL(site);
-            connection = HttpClient.create(url).useCache(false).connect();
-            content = connection.fetchContent();
-            if (connection.getResponseCode() != 200) {
+            connection = HttpClient.create(url).useCache(false);
+            final HttpClient.Response response = connection.connect();
+            content = response.fetchContent();
+            if (response.getResponseCode() != 200) {
                 throw new IOException(tr("Unsuccessful HTTP request"));
             }
             return content;
@@ -325,7 +326,7 @@ public class ReadRemotePluginInformationTask extends PleaseWaitRunnable {
         }
         // remove old stuff or whole update process is broken
         for (File file: siteCacheFiles) {
-            file.delete();
+            Utils.deleteFile(file);
         }
     }
 
diff --git a/src/org/openstreetmap/josm/tools/CheckParameterUtil.java b/src/org/openstreetmap/josm/tools/CheckParameterUtil.java
index edd345c..923c1ce 100644
--- a/src/org/openstreetmap/josm/tools/CheckParameterUtil.java
+++ b/src/org/openstreetmap/josm/tools/CheckParameterUtil.java
@@ -97,6 +97,7 @@ public final class CheckParameterUtil {
     /**
      * Ensures that the condition {@code condition} holds.
      * @param condition The condition to check
+     * @param message error message
      * @throws IllegalArgumentException if the condition does not hold
      */
     public static void ensureThat(boolean condition, String message) {
diff --git a/src/org/openstreetmap/josm/tools/CopyList.java b/src/org/openstreetmap/josm/tools/CopyList.java
index 9ee70e6..fa30f74 100644
--- a/src/org/openstreetmap/josm/tools/CopyList.java
+++ b/src/org/openstreetmap/josm/tools/CopyList.java
@@ -15,6 +15,7 @@ import java.util.RandomAccess;
  * an ArrayList.
  *
  * @author nenik
+ * @param <E> the type of elements in this list
  */
 public final class CopyList<E> extends AbstractList<E> implements RandomAccess, Cloneable {
     private E[] array;
@@ -23,13 +24,17 @@ public final class CopyList<E> extends AbstractList<E> implements RandomAccess,
 
     /**
      * Create a List over given array.
-     * @param array The initial List content. The array is never modified
-     * by the {@code CopyList}.
+     * @param array The initial List content. The array is never modified by the {@code CopyList}.
      */
     public CopyList(E[] array) {
         this(array, array.length);
     }
 
+    /**
+     * Create a List over given array and size.
+     * @param array The initial List content. The array is never modified by the {@code CopyList}.
+     * @param size number of items
+     */
     public CopyList(E[] array, int size) {
         this.array = array;
         this.size = size;
diff --git a/src/org/openstreetmap/josm/tools/Diff.java b/src/org/openstreetmap/josm/tools/Diff.java
index 22f771e..3cdeef9 100644
--- a/src/org/openstreetmap/josm/tools/Diff.java
+++ b/src/org/openstreetmap/josm/tools/Diff.java
@@ -151,6 +151,11 @@ public class Diff {
      * the value of bdiag at that diagonal is "wrong",
      * the worst this can do is cause suboptimal diff output.
      * It cannot cause incorrect diff output.
+     * @param xoff xoff
+     * @param xlim xlim
+     * @param yoff yoff
+     * @param ylim ylim
+     * @return midpoint of the shortest edit script
      */
     private int diag(int xoff, int xlim, int yoff, int ylim) {
         final int[] fd = fdiag; // Give the compiler a chance.
@@ -163,8 +168,7 @@ public class Diff {
         final int bmid = xlim - ylim;   // Center diagonal of bottom-up search.
         int fmin = fmid, fmax = fmid;   // Limits of top-down search.
         int bmin = bmid, bmax = bmid;   // Limits of bottom-up search.
-        /* True if southeast corner is on an odd
-                     diagonal with respect to the northwest. */
+        // True if southeast corner is on an odd diagonal with respect to the northwest.
         final boolean odd = (fmid - bmid & 1) != 0;
 
         fd[fdiagoff + fmid] = xoff;
@@ -314,17 +318,22 @@ public class Diff {
         }
     }
 
-    /** Compare in detail contiguous subsequences of the two files
-     which are known, as a whole, to match each other.
-
-     The results are recorded in the vectors filevec[N].changed_flag, by
-     storing a 1 in the element for each line that is an insertion or deletion.
-
-     The subsequence of file 0 is [XOFF, XLIM) and likewise for file 1.
-
-     Note that XLIM, YLIM are exclusive bounds.
-     All line numbers are origin-0 and discarded lines are not counted.  */
-
+    /**
+     * Compare in detail contiguous subsequences of the two files
+     * which are known, as a whole, to match each other.
+     *
+     * The results are recorded in the vectors filevec[N].changed_flag, by
+     * storing a 1 in the element for each line that is an insertion or deletion.
+     *
+     * The subsequence of file 0 is [XOFF, XLIM) and likewise for file 1.
+     *
+     * Note that XLIM, YLIM are exclusive bounds.
+     * All line numbers are origin-0 and discarded lines are not counted.
+     * @param xoff xoff
+     * @param xlim xlim
+     * @param yoff yoff
+     * @param ylim ylim
+     */
     private void compareseq(int xoff, int xlim, int yoff, int ylim) {
         /* Slide down the bottom initial diagonal. */
         while (xoff < xlim && yoff < ylim && xvec[xoff] == yvec[yoff]) {
@@ -378,8 +387,8 @@ public class Diff {
 
     private boolean inhibit;
 
-    /** Adjust inserts/deletes of blank lines to join changes
-        as much as possible.
+    /**
+     * Adjust inserts/deletes of blank lines to join changes as much as possible.
      */
     private void shift_boundaries() {
         if (inhibit)
@@ -388,14 +397,17 @@ public class Diff {
         filevec[1].shift_boundaries(filevec[0]);
     }
 
+    /**
+     * Script builder.
+     */
     public interface ScriptBuilder {
-        /** Scan the tables of which lines are inserted and deleted,
-            producing an edit script.
-            @param changed0 true for lines in first file which do not match 2nd
-            @param len0 number of lines in first file
-            @param changed1 true for lines in 2nd file which do not match 1st
-            @param len1 number of lines in 2nd file
-            @return a linked list of changes - or null
+        /**
+         * Scan the tables of which lines are inserted and deleted, producing an edit script.
+         * @param changed0 true for lines in first file which do not match 2nd
+         * @param len0 number of lines in first file
+         * @param changed1 true for lines in 2nd file which do not match 1st
+         * @param len1 number of lines in 2nd file
+         * @return a linked list of changes - or null
          */
         Change build_script(
                 boolean[] changed0, int len0,
@@ -471,64 +483,60 @@ public class Diff {
         }
     }
 
-    /** Standard ScriptBuilders. */
-    public static final ScriptBuilder
-    forwardScript = new ForwardScript(),
-    reverseScript = new ReverseScript();
+    /** Standard Forward ScriptBuilder. */
+    public static final ScriptBuilder forwardScript = new ForwardScript();
+    /** Standard Reverse ScriptBuilder. */
+    public static final ScriptBuilder reverseScript = new ReverseScript();
 
-    /** Report the differences of two files. DEPTH is the current directory depth. */
+    /**
+     * Report the differences of two files. DEPTH is the current directory depth.
+     * @param reverse if {@code true} use {@link #reverseScript} else use {@link #forwardScript}
+     * @return the differences of two files
+     */
     public final Change diff_2(final boolean reverse) {
         return diff(reverse ? reverseScript : forwardScript);
     }
 
-    /** Get the results of comparison as an edit script.  The script
-     is described by a list of changes.  The standard ScriptBuilder
-     implementations provide for forward and reverse edit scripts.
-     Alternate implementations could, for instance, list common elements
-     instead of differences.
-     @param bld an object to build the script from change flags
-     @return the head of a list of changes
+    /**
+     * Get the results of comparison as an edit script.  The script
+     * is described by a list of changes.  The standard ScriptBuilder
+     * implementations provide for forward and reverse edit scripts.
+     * Alternate implementations could, for instance, list common elements
+     * instead of differences.
+     * @param bld an object to build the script from change flags
+     * @return the head of a list of changes
      */
     public Change diff(final ScriptBuilder bld) {
 
-        /* Some lines are obviously insertions or deletions
-       because they don't match anything.  Detect them now,
-       and avoid even thinking about them in the main comparison algorithm.  */
-
+        // Some lines are obviously insertions or deletions because they don't match anything.
+        // Detect them now, and avoid even thinking about them in the main comparison algorithm.
         discard_confusing_lines();
 
-        /* Now do the main comparison algorithm, considering just the
-       undiscarded lines.  */
-
+        // Now do the main comparison algorithm, considering just the undiscarded lines.
         xvec = filevec[0].undiscarded;
         yvec = filevec[1].undiscarded;
 
-        int diags =
-            filevec[0].nondiscardedLines + filevec[1].nondiscardedLines + 3;
+        int diags = filevec[0].nondiscardedLines + filevec[1].nondiscardedLines + 3;
         fdiag = new int[diags];
         fdiagoff = filevec[1].nondiscardedLines + 1;
         bdiag = new int[diags];
         bdiagoff = filevec[1].nondiscardedLines + 1;
 
         compareseq(0, filevec[0].nondiscardedLines,
-                0, filevec[1].nondiscardedLines);
+                   0, filevec[1].nondiscardedLines);
         fdiag = null;
         bdiag = null;
 
-        /* Modify the results slightly to make them prettier
-       in cases where that can validly be done.  */
-
+        // Modify the results slightly to make them prettier in cases where that can validly be done.
         shift_boundaries();
 
-        /* Get the results of comparison in the form of a chain
-       of `struct change's -- an edit script.  */
+        // Get the results of comparison in the form of a chain of `struct change's -- an edit script.
         return bld.build_script(
                 filevec[0].changedFlag,
                 filevec[0].bufferedLines,
                 filevec[1].changedFlag,
                 filevec[1].bufferedLines
         );
-
     }
 
     /** The result of comparison is an "edit script": a chain of change objects.
@@ -554,13 +562,20 @@ public class Diff {
         /** Line number of 1st inserted line.  */
         public final int line1;
 
-        /** Cons an additional entry onto the front of an edit script OLD.
-       LINE0 and LINE1 are the first affected lines in the two files (origin 0).
-       DELETED is the number of lines deleted here from file 0.
-       INSERTED is the number of lines inserted here in file 1.
-
-       If DELETED is 0 then LINE0 is the number of the line before
-       which the insertion was done; vice versa for INSERTED and LINE1.  */
+        /**
+         * Cons an additional entry onto the front of an edit script OLD.
+         * LINE0 and LINE1 are the first affected lines in the two files (origin 0).
+         * DELETED is the number of lines deleted here from file 0.
+         * INSERTED is the number of lines inserted here in file 1.
+         *
+         * If DELETED is 0 then LINE0 is the number of the line before
+         * which the insertion was done; vice versa for INSERTED and LINE1.
+         * @param line0 first affected lines in the two files (origin 0)
+         * @param line1 first affected lines in the two files (origin 0)
+         * @param deleted the number of lines deleted here from file 0
+         * @param inserted the number of lines inserted here in file 1
+         * @param old edit script
+         */
         public Change(int line0, int line1, int deleted, int inserted, Change old) {
             this.line0 = line0;
             this.line1 = line1;
@@ -572,6 +587,7 @@ public class Diff {
         /**
          * Returns the number of insertions and deletions of this change as well as
          * (recursively) the changes linked via {@link #link}.
+         * @return recursive number of insertions and deletions
          */
         public int getTotalNumberOfChanges() {
             return inserted + deleted + (link != null ? link.getTotalNumberOfChanges() : 0);
@@ -584,22 +600,21 @@ public class Diff {
         }
     }
 
-    /** Data on one input file being compared.
+    /**
+     * Data on one input file being compared.
      */
     class FileData {
 
         /** Allocate changed array for the results of comparison.  */
         void clear() {
-            /* Allocate a flag for each line of each file, saying whether that line
-               is an insertion or deletion.
-               Allocate an extra element, always zero, at each end of each vector.
-             */
+            // Allocate a flag for each line of each file, saying whether that line is an insertion or deletion.
+            // Allocate an extra element, always zero, at each end of each vector.
             changedFlag = new boolean[bufferedLines + 2];
         }
 
-        /** Return equiv_count[I] as the number of lines in this file
-         that fall in equivalence class I.
-         @return the array of equivalence class counts.
+        /**
+         * Return equiv_count[I] as the number of lines in this file that fall in equivalence class I.
+         * @return the array of equivalence class counts.
          */
         int[] equivCount() {
             int[] equiv_count = new int[equivMax];
@@ -609,30 +624,29 @@ public class Diff {
             return equiv_count;
         }
 
-        /** Discard lines that have no matches in another file.
-
-       A line which is discarded will not be considered by the actual
-       comparison algorithm; it will be as if that line were not in the file.
-       The file's `realindexes' table maps virtual line numbers
-       (which don't count the discarded lines) into real line numbers;
-       this is how the actual comparison algorithm produces results
-       that are comprehensible when the discarded lines are counted.
-<p>
-       When we discard a line, we also mark it as a deletion or insertion
-       so that it will be printed in the output.
-      @param f the other file
+        /**
+         * Discard lines that have no matches in another file.
+         *
+         * A line which is discarded will not be considered by the actual comparison algorithm;
+         * it will be as if that line were not in the file.
+         * The file's `realindexes' table maps virtual line numbers
+         * (which don't count the discarded lines) into real line numbers;
+         * this is how the actual comparison algorithm produces results
+         * that are comprehensible when the discarded lines are counted.
+         * <p>
+         * When we discard a line, we also mark it as a deletion or insertion so that it will be printed in the output.
+         * @param f the other file
          */
         void discard_confusing_lines(FileData f) {
             clear();
-            /* Set up table of which lines are going to be discarded. */
+            // Set up table of which lines are going to be discarded.
             final byte[] discarded = discardable(f.equivCount());
 
-            /* Don't really discard the provisional lines except when they occur
-       in a run of discardables, with nonprovisionals at the beginning
-       and end.  */
+            // Don't really discard the provisional lines except when they occur in a run of discardables,
+            // with nonprovisionals at the beginning and end.
             filterDiscards(discarded);
 
-            /* Actually discard the lines. */
+            // Actually discard the lines.
             discard(discarded);
         }
 
@@ -673,8 +687,8 @@ public class Diff {
 
         /**
          * Don't really discard the provisional lines except when they occur
-         * in a run of discardables, with nonprovisionals at the beginning
-         * and end.
+         * in a run of discardables, with nonprovisionals at the beginning and end.
+         * @param discards discards
          */
         private void filterDiscards(final byte[] discards) {
             final int end = bufferedLines;
diff --git a/src/org/openstreetmap/josm/tools/GBC.java b/src/org/openstreetmap/josm/tools/GBC.java
index 1b86396..7dd8553 100644
--- a/src/org/openstreetmap/josm/tools/GBC.java
+++ b/src/org/openstreetmap/josm/tools/GBC.java
@@ -123,6 +123,8 @@ public final class GBC extends GridBagConstraints {
 
     /**
      * Sets the constraint's {@code gridx}, {@code gridy}.
+     * @param gridx cell containing the leading edge of the component's display area
+     * @param gridy cell at the top of the component's display area
      * @return This constraint for chaining.
      * @see #gridx
      * @see #gridy
@@ -135,6 +137,8 @@ public final class GBC extends GridBagConstraints {
 
     /**
      * Sets the constraint's {@code gridwidth}, {@code gridheight}.
+     * @param gridwidth number of cells in a row for the component's display area
+     * @param gridheight number of cells in a column for the component's display area
      * @return This constraint for chaining.
      * @see #gridwidth
      * @see #gridheight
@@ -147,6 +151,7 @@ public final class GBC extends GridBagConstraints {
 
     /**
      * Sets the constraint's {@code gridwidth}.
+     * @param gridwidth number of cells in a row for the component's display area
      * @return This constraint for chaining.
      * @see #gridwidth
      */
@@ -159,6 +164,8 @@ public final class GBC extends GridBagConstraints {
      * Create a standard constraint with the {@code gridx}, {@code gridy} set.
      *
      * Is equivalent to {@code std().grid(gridx, gridy)}
+     * @param gridx cell containing the leading edge of the component's display area
+     * @param gridy cell at the top of the component's display area
      * @return A standard constraint.
      * @see #std()
      * @see #grid(int, int)
@@ -168,5 +175,4 @@ public final class GBC extends GridBagConstraints {
     public static GBC std(int gridx, int gridy) {
         return std().grid(gridx, gridy);
     }
-
 }
diff --git a/src/org/openstreetmap/josm/tools/Geometry.java b/src/org/openstreetmap/josm/tools/Geometry.java
index fe4271f..0f62e1b 100644
--- a/src/org/openstreetmap/josm/tools/Geometry.java
+++ b/src/org/openstreetmap/josm/tools/Geometry.java
@@ -257,7 +257,11 @@ public final class Geometry {
     }
 
     /**
-     * Finds the intersection of two line segments
+     * Finds the intersection of two line segments.
+     * @param p1 the coordinates of the start point of the first specified line segment
+     * @param p2 the coordinates of the end point of the first specified line segment
+     * @param p3 the coordinates of the start point of the second specified line segment
+     * @param p4 the coordinates of the end point of the second specified line segment
      * @return EastNorth null if no intersection was found, the EastNorth coordinates of the intersection otherwise
      */
     public static EastNorth getSegmentSegmentIntersection(EastNorth p1, EastNorth p2, EastNorth p3, EastNorth p4) {
diff --git a/src/org/openstreetmap/josm/tools/HttpClient.java b/src/org/openstreetmap/josm/tools/HttpClient.java
index c9008e6..1d7e7d1 100644
--- a/src/org/openstreetmap/josm/tools/HttpClient.java
+++ b/src/org/openstreetmap/josm/tools/HttpClient.java
@@ -12,6 +12,7 @@ import java.net.HttpRetryException;
 import java.net.HttpURLConnection;
 import java.net.URL;
 import java.util.List;
+import java.util.Locale;
 import java.util.Map;
 import java.util.Scanner;
 import java.util.TreeMap;
@@ -40,11 +41,12 @@ public final class HttpClient {
     private int readTimeout = Main.pref.getInteger("socket.timeout.read", 30) * 1000;
     private byte[] requestBody;
     private long ifModifiedSince;
-    private long contentLength;
     private final Map<String, String> headers = new TreeMap<>(String.CASE_INSENSITIVE_ORDER);
     private int maxRedirects = Main.pref.getInteger("socket.maxredirects", 5);
     private boolean useCache;
     private String reasonForRequest;
+    private transient HttpURLConnection connection; // to allow disconnecting before `response` is set
+    private transient Response response;
 
     private HttpClient(URL url, String requestMethod) {
         this.url = url;
@@ -73,17 +75,15 @@ public final class HttpClient {
             progressMonitor = NullProgressMonitor.INSTANCE;
         }
         final HttpURLConnection connection = (HttpURLConnection) url.openConnection();
+        this.connection = connection;
         connection.setRequestMethod(requestMethod);
         connection.setRequestProperty("User-Agent", Version.getInstance().getFullAgentString());
         connection.setConnectTimeout(connectTimeout);
         connection.setReadTimeout(readTimeout);
-        connection.setInstanceFollowRedirects(maxRedirects > 0);
+        connection.setInstanceFollowRedirects(false); // we do that ourselves
         if (ifModifiedSince > 0) {
             connection.setIfModifiedSince(ifModifiedSince);
         }
-        if (contentLength > 0) {
-            connection.setFixedLengthStreamingMode(contentLength);
-        }
         connection.setUseCaches(useCache);
         if (!useCache) {
             connection.setRequestProperty("Cache-Control", "no-cache");
@@ -98,8 +98,8 @@ public final class HttpClient {
         progressMonitor.indeterminateSubTask(null);
 
         if ("PUT".equals(requestMethod) || "POST".equals(requestMethod) || "DELETE".equals(requestMethod)) {
-            Main.info("{0} {1} ({2} kB) ...", requestMethod, url, requestBody.length / 1024);
-            headers.put("Content-Length", String.valueOf(requestBody.length));
+            Main.info("{0} {1} ({2}) ...", requestMethod, url, Utils.getSizeString(requestBody.length, Locale.getDefault()));
+            connection.setFixedLengthStreamingMode(requestBody.length);
             connection.setDoOutput(true);
             try (OutputStream out = new BufferedOutputStream(
                     new ProgressOutputStream(connection.getOutputStream(), requestBody.length, progressMonitor))) {
@@ -115,7 +115,9 @@ public final class HttpClient {
                 Main.info("{0} {1}{2} -> {3}{4}",
                         requestMethod, url, hasReason ? " (" + reasonForRequest + ")" : "",
                         connection.getResponseCode(),
-                        connection.getContentLengthLong() > 0 ? " (" + connection.getContentLengthLong() / 1024 + "KB)" : ""
+                        connection.getContentLengthLong() > 0
+                                ? " (" + Utils.getSizeString(connection.getContentLengthLong(), Locale.getDefault()) + ")"
+                                : ""
                 );
                 if (Main.isDebugEnabled()) {
                     Main.debug("RESPONSE: " + connection.getHeaderFields());
@@ -135,7 +137,7 @@ public final class HttpClient {
                             " Can''t redirect. Aborting.", connection.getResponseCode());
                     throw new IOException(msg);
                 } else if (maxRedirects > 0) {
-                    url = new URL(redirectLocation);
+                    url = new URL(url, redirectLocation);
                     maxRedirects--;
                     Main.info(tr("Download redirected to ''{0}''", redirectLocation));
                     return connect();
@@ -144,7 +146,7 @@ public final class HttpClient {
                     throw new IOException(msg);
                 }
             }
-            Response response = new Response(connection, progressMonitor);
+            response = new Response(connection, progressMonitor);
             successfulConnection = true;
             return response;
         } finally {
@@ -155,6 +157,17 @@ public final class HttpClient {
     }
 
     /**
+     * Returns the HTTP response which is set only after calling {@link #connect()}.
+     * Calling this method again, returns the identical object (unless another {@link #connect()} is performed).
+     *
+     * @return the HTTP response
+     * @since 9309
+     */
+    public Response getResponse() {
+        return response;
+    }
+
+    /**
      * A wrapper for the HTTP response.
      */
     public static final class Response {
@@ -309,6 +322,7 @@ public final class HttpClient {
         /**
          * Returns the {@code Content-Encoding} header.
          * @return {@code Content-Encoding} HTTP header
+         * @see HttpURLConnection#getContentEncoding()
          */
         public String getContentEncoding() {
             return connection.getContentEncoding();
@@ -323,8 +337,29 @@ public final class HttpClient {
         }
 
         /**
+         * Returns the {@code Expire} header.
+         * @return {@code Expire} HTTP header
+         * @see HttpURLConnection#getExpiration()
+         * @since 9232
+         */
+        public long getExpiration() {
+            return connection.getExpiration();
+        }
+
+        /**
+         * Returns the {@code Last-Modified} header.
+         * @return {@code Last-Modified} HTTP header
+         * @see HttpURLConnection#getLastModified()
+         * @since 9232
+         */
+        public long getLastModified() {
+            return connection.getLastModified();
+        }
+
+        /**
          * Returns the {@code Content-Length} header.
          * @return {@code Content-Length} HTTP header
+         * @see HttpURLConnection#getContentLengthLong()
          */
         public long getContentLength() {
             return connection.getContentLengthLong();
@@ -342,31 +377,20 @@ public final class HttpClient {
         }
 
         /**
-         * Returns the list of Strings that represents the named header field values.
-         * @param name the name of a header field
-         * @return unmodifiable List of Strings that represents the corresponding field values
+         * Returns an unmodifiable Map mapping header keys to a List of header values.
+         * @return unmodifiable Map mapping header keys to a List of header values
          * @see HttpURLConnection#getHeaderFields()
-         * @since 9172
+         * @since 9232
          */
-        public List<String> getHeaderFields(String name) {
-            return connection.getHeaderFields().get(name);
+        public Map<String, List<String>> getHeaderFields() {
+            return connection.getHeaderFields();
         }
 
         /**
          * @see HttpURLConnection#disconnect()
          */
         public void disconnect() {
-            // TODO is this block necessary for disconnecting?
-            // Fix upload aborts - see #263
-            connection.setConnectTimeout(100);
-            connection.setReadTimeout(100);
-            try {
-                Thread.sleep(100);
-            } catch (InterruptedException ex) {
-                Main.warn("InterruptedException in " + getClass().getSimpleName() + " during cancel");
-            }
-
-            connection.disconnect();
+            HttpClient.disconnect(connection);
         }
     }
 
@@ -436,7 +460,7 @@ public final class HttpClient {
 
     /**
      * Sets whether not to set header {@code Connection=close}
-     * <p/>
+     * <p>
      * This might fix #7640, see
      * <a href='https://web.archive.org/web/20140118201501/http://www.tikalk.com/java/forums/httpurlconnection-disable-keep-alive'>here</a>.
      *
@@ -488,9 +512,10 @@ public final class HttpClient {
      * @return {@code this}
      * @see HttpURLConnection#setFixedLengthStreamingMode(long)
      * @since 9178
+     * @deprecated Submitting data via POST, PUT, DELETE automatically sets this property on the connection
      */
+    @Deprecated
     public HttpClient setFixedLengthStreamingMode(long contentLength) {
-        this.contentLength = contentLength;
         return this;
     }
 
@@ -586,4 +611,24 @@ public final class HttpClient {
                 return false;
         }
     }
+
+    /**
+     * @see HttpURLConnection#disconnect()
+     * @since 9309
+     */
+    public void disconnect() {
+        HttpClient.disconnect(connection);
+    }
+
+    private static void disconnect(final HttpURLConnection connection) {
+        // Fix upload aborts - see #263
+        connection.setConnectTimeout(100);
+        connection.setReadTimeout(100);
+        try {
+            Thread.sleep(100);
+        } catch (InterruptedException ex) {
+            Main.warn("InterruptedException in " + HttpClient.class + " during cancel");
+        }
+        connection.disconnect();
+    }
 }
diff --git a/src/org/openstreetmap/josm/tools/ImageProvider.java b/src/org/openstreetmap/josm/tools/ImageProvider.java
index 51ee4bb..15989fe 100644
--- a/src/org/openstreetmap/josm/tools/ImageProvider.java
+++ b/src/org/openstreetmap/josm/tools/ImageProvider.java
@@ -58,12 +58,13 @@ import javax.xml.bind.DatatypeConverter;
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.data.osm.OsmPrimitiveType;
-import org.openstreetmap.josm.gui.mappaint.ElemStyle;
-import org.openstreetmap.josm.gui.mappaint.MapImage;
 import org.openstreetmap.josm.gui.mappaint.MapPaintStyles;
-import org.openstreetmap.josm.gui.mappaint.NodeElemStyle;
 import org.openstreetmap.josm.gui.mappaint.Range;
-import org.openstreetmap.josm.gui.mappaint.StyleCache.StyleList;
+import org.openstreetmap.josm.gui.mappaint.StyleElementList;
+import org.openstreetmap.josm.gui.mappaint.styleelement.MapImage;
+import org.openstreetmap.josm.gui.mappaint.styleelement.StyleElement;
+import org.openstreetmap.josm.gui.tagging.presets.TaggingPreset;
+import org.openstreetmap.josm.gui.tagging.presets.TaggingPresets;
 import org.openstreetmap.josm.io.CachedFile;
 import org.openstreetmap.josm.plugins.PluginHandler;
 import org.w3c.dom.Element;
@@ -79,6 +80,7 @@ import org.xml.sax.helpers.XMLReaderFactory;
 
 import com.kitfox.svg.SVGDiagram;
 import com.kitfox.svg.SVGUniverse;
+import org.openstreetmap.josm.gui.mappaint.styleelement.NodeElement;
 
 /**
  * Helper class to support the application with images.
@@ -149,7 +151,15 @@ public class ImageProvider {
         /** Layer list icon size
          * @since 8323
          */
-        LAYER
+        LAYER,
+        /** Toolbar button icon size
+         * @since 9253
+         */
+        TOOLBAR,
+        /** Side button maximum height
+         * @since 9253
+         */
+        SIDEBUTTON
     }
 
     /**
@@ -347,6 +357,8 @@ public class ImageProvider {
         switch(size) {
         case MAPMAX: sizeval = Main.pref.getInteger("iconsize.mapmax", 48); break;
         case MAP: sizeval = Main.pref.getInteger("iconsize.mapmax", 16); break;
+        case SIDEBUTTON: sizeval = Main.pref.getInteger("iconsize.sidebutton", 20); break;
+        case TOOLBAR: /* TOOLBAR is LARGELICON - only provided in case of future changes */
         case POPUPMENU: /* POPUPMENU is LARGELICON - only provided in case of future changes */
         case LARGEICON: sizeval = Main.pref.getInteger("iconsize.largeicon", 24); break;
         case MENU: /* MENU is SMALLICON - only provided in case of future changes */
@@ -1286,10 +1298,10 @@ public class ImageProvider {
     public static ImageIcon getPadded(OsmPrimitive primitive, Rectangle iconSize) {
         // Check if the current styles have special icon for tagged nodes.
         if (primitive instanceof org.openstreetmap.josm.data.osm.Node) {
-            Pair<StyleList, Range> nodeStyles = MapPaintStyles.getStyles().generateStyles(primitive, 100, false);
-            for (ElemStyle style : nodeStyles.a) {
-                if (style instanceof NodeElemStyle) {
-                    NodeElemStyle nodeStyle = (NodeElemStyle) style;
+            Pair<StyleElementList, Range> nodeStyles = MapPaintStyles.getStyles().generateStyles(primitive, 100, false);
+            for (StyleElement style : nodeStyles.a) {
+                if (style instanceof NodeElement) {
+                    NodeElement nodeStyle = (NodeElement) style;
                     MapImage icon = nodeStyle.mapImage;
                     if (icon != null) {
                         int backgroundWidth = iconSize.height;
@@ -1324,6 +1336,15 @@ public class ImageProvider {
             }
         }
 
+        // Check if the presets have icons for nodes/relations.
+        if (!OsmPrimitiveType.WAY.equals(primitive.getType())) {
+            for (final TaggingPreset preset : TaggingPresets.getMatchingPresets(primitive)) {
+                if (preset.getIcon() != null) {
+                    return preset.getIcon();
+                }
+            }
+        }
+
         // Use generic default icon.
         return ImageProvider.get(primitive.getDisplayType());
     }
diff --git a/src/org/openstreetmap/josm/tools/ImageResource.java b/src/org/openstreetmap/josm/tools/ImageResource.java
index a212db7..7613f33 100644
--- a/src/org/openstreetmap/josm/tools/ImageResource.java
+++ b/src/org/openstreetmap/josm/tools/ImageResource.java
@@ -159,6 +159,8 @@ public class ImageResource {
             throw new IllegalArgumentException(maxSize+" is invalid");
         float realWidth;
         float realHeight;
+        int maxWidth = maxSize.width;
+        int maxHeight = maxSize.height;
         if (svg != null) {
             realWidth = svg.getWidth();
             realHeight = svg.getHeight();
@@ -167,15 +169,12 @@ public class ImageResource {
             ImageIcon icon = new ImageIcon(baseImage);
             realWidth = icon.getIconWidth();
             realHeight = icon.getIconHeight();
-        }
-        int maxWidth = maxSize.width;
-        int maxHeight = maxSize.height;
-
-        if (realWidth <= maxWidth) {
-            maxWidth = -1;
-        }
-        if (realHeight <= maxHeight) {
-            maxHeight = -1;
+            if (realWidth <= maxWidth) {
+                maxWidth = -1;
+            }
+            if (realHeight <= maxHeight) {
+                maxHeight = -1;
+            }
         }
 
         if (maxWidth == -1 && maxHeight == -1)
diff --git a/src/org/openstreetmap/josm/tools/OsmUrlToBounds.java b/src/org/openstreetmap/josm/tools/OsmUrlToBounds.java
index 174545a..d0d9812 100644
--- a/src/org/openstreetmap/josm/tools/OsmUrlToBounds.java
+++ b/src/org/openstreetmap/josm/tools/OsmUrlToBounds.java
@@ -11,6 +11,7 @@ import java.util.Map;
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.data.Bounds;
 import org.openstreetmap.josm.data.coor.LatLon;
+import org.openstreetmap.josm.data.projection.Ellipsoid;
 
 public final class OsmUrlToBounds {
     private static final String SHORTLINK_PREFIX = "http://osm.org/go/";
@@ -187,9 +188,6 @@ public final class OsmUrlToBounds {
                 zoom - 8 - (zoomOffset % 3) - 2);
     }
 
-    /** radius of the earth */
-    public static final double R = 6378137.0;
-
     public static Bounds positionToBounds(final double lat, final double lon, final int zoom) {
         int tileSizeInPixels = 256;
         int height;
@@ -206,20 +204,22 @@ public final class OsmUrlToBounds {
             height = 480;
             width = 640;
         }
-        double scale = (1 << zoom) * tileSizeInPixels / (2 * Math.PI * R);
+        double scale = (1 << zoom) * tileSizeInPixels / (2 * Math.PI * Ellipsoid.WGS84.a);
         double deltaX = width / 2.0 / scale;
         double deltaY = height / 2.0 / scale;
-        double x = Math.toRadians(lon) * R;
+        double x = Math.toRadians(lon) * Ellipsoid.WGS84.a;
         double y = mercatorY(lat);
-        return new Bounds(invMercatorY(y - deltaY), Math.toDegrees(x - deltaX) / R, invMercatorY(y + deltaY), Math.toDegrees(x + deltaX) / R);
+        return new Bounds(
+                invMercatorY(y - deltaY), Math.toDegrees(x - deltaX) / Ellipsoid.WGS84.a,
+                invMercatorY(y + deltaY), Math.toDegrees(x + deltaX) / Ellipsoid.WGS84.a);
     }
 
     public static double mercatorY(double lat) {
-        return Math.log(Math.tan(Math.PI/4 + Math.toRadians(lat)/2)) * R;
+        return Math.log(Math.tan(Math.PI/4 + Math.toRadians(lat)/2)) * Ellipsoid.WGS84.a;
     }
 
     public static double invMercatorY(double north) {
-        return Math.toDegrees(Math.atan(Math.sinh(north / R)));
+        return Math.toDegrees(Math.atan(Math.sinh(north / Ellipsoid.WGS84.a)));
     }
 
     public static Pair<Double, Double> getTileOfLatLon(double lat, double lon, double zoom) {
diff --git a/src/org/openstreetmap/josm/tools/Pair.java b/src/org/openstreetmap/josm/tools/Pair.java
index 17758a2..3b28daa 100644
--- a/src/org/openstreetmap/josm/tools/Pair.java
+++ b/src/org/openstreetmap/josm/tools/Pair.java
@@ -68,6 +68,8 @@ public final class Pair<A, B> {
 
     /**
      * Convenient constructor method
+     * @param <U> type of first item
+     * @param <V> type of second item
      * @param u The first item
      * @param v The second item
      * @return The newly created Pair(u,v)
diff --git a/src/org/openstreetmap/josm/tools/PlatformHookOsx.java b/src/org/openstreetmap/josm/tools/PlatformHookOsx.java
index b0d9c92..837e524 100644
--- a/src/org/openstreetmap/josm/tools/PlatformHookOsx.java
+++ b/src/org/openstreetmap/josm/tools/PlatformHookOsx.java
@@ -1,6 +1,7 @@
 // License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.tools;
 
+import static org.openstreetmap.josm.tools.I18n.marktr;
 import static org.openstreetmap.josm.tools.I18n.tr;
 
 import java.awt.Image;
@@ -365,9 +366,7 @@ public class PlatformHookOsx extends PlatformHookUnixoid implements PlatformHook
                         Main.pref.getPreferencesDirectory().mkdirs();
                         Main.info("Copying old preferences file to new location");
                         Utils.copyFile(oldPref, newPref);
-                        if (!oldPref.delete()) {
-                            Main.warn("Unable to delete old preferences file: "+oldPref.getPath());
-                        }
+                        Utils.deleteFile(oldPref, marktr("Unable to delete old preferences file {0}"));
                     } catch (IOException e) {
                         Main.error(e);
                         error = true;
diff --git a/src/org/openstreetmap/josm/tools/PlatformHookWindows.java b/src/org/openstreetmap/josm/tools/PlatformHookWindows.java
index b599be8..3b5f6df 100644
--- a/src/org/openstreetmap/josm/tools/PlatformHookWindows.java
+++ b/src/org/openstreetmap/josm/tools/PlatformHookWindows.java
@@ -189,7 +189,7 @@ public class PlatformHookWindows extends PlatformHookUnixoid implements Platform
     @Override
     public boolean rename(File from, File to) {
         if (to.exists())
-            to.delete();
+            Utils.deleteFile(to);
         return from.renameTo(to);
     }
 
diff --git a/src/org/openstreetmap/josm/tools/Predicates.java b/src/org/openstreetmap/josm/tools/Predicates.java
index b01df0d..3dc899b 100644
--- a/src/org/openstreetmap/josm/tools/Predicates.java
+++ b/src/org/openstreetmap/josm/tools/Predicates.java
@@ -17,6 +17,7 @@ public final class Predicates {
 
     /**
      * Returns the negation of {@code predicate}.
+     * @param <T> type of items
      * @param predicate the predicate to negate
      * @return the negation of {@code predicate}
      */
@@ -31,6 +32,7 @@ public final class Predicates {
 
     /**
      * Returns a {@link Predicate} executing {@link Objects#equals}.
+     * @param <T> type of items
      * @param ref the reference object
      * @return a {@link Predicate} executing {@link Objects#equals}
      */
@@ -116,6 +118,7 @@ public final class Predicates {
 
     /**
      * Returns a {@link Predicate} executing {@link Collection#contains(Object)}.
+     * @param <T> type of items
      * @param target collection
      * @return a {@link Predicate} executing {@link Collection#contains(Object)}
      */
@@ -130,6 +133,7 @@ public final class Predicates {
 
     /**
      * Returns a {@link Predicate} testing whether objects are {@code null}.
+     * @param <T> type of items
      * @return a {@link Predicate} testing whether objects are {@code null}
      */
     public static <T> Predicate<T> isNull() {
diff --git a/src/org/openstreetmap/josm/tools/Shortcut.java b/src/org/openstreetmap/josm/tools/Shortcut.java
index 26ac062..840be39 100644
--- a/src/org/openstreetmap/josm/tools/Shortcut.java
+++ b/src/org/openstreetmap/josm/tools/Shortcut.java
@@ -122,21 +122,27 @@ public final class Shortcut {
     }
 
     /**
-     * FOR PREF PANE ONLY
+     * FOR PREF PANE ONLY.<p>
+     * Sets the modifiers that are used.
+     * @param assignedModifier assigned modifier
      */
     public void setAssignedModifier(int assignedModifier) {
         this.assignedModifier = assignedModifier;
     }
 
     /**
-     * FOR PREF PANE ONLY
+     * FOR PREF PANE ONLY.<p>
+     * Sets the key that actually is used.
+     * @param assignedKey assigned key
      */
     public void setAssignedKey(int assignedKey) {
         this.assignedKey = assignedKey;
     }
 
     /**
-     * FOR PREF PANE ONLY
+     * FOR PREF PANE ONLY.<p>
+     * Sets whether the user has changed this shortcut.
+     * @param assignedUser {@code true} if the user has changed this shortcut
      */
     public void setAssignedUser(boolean assignedUser) {
         this.reset = (this.assignedUser || reset) && !assignedUser;
@@ -201,6 +207,7 @@ public final class Shortcut {
 
     /**
      * use this to set a menu's mnemonic
+     * @param menu menu
      */
     public void setMnemonic(JMenu menu) {
         if (assignedModifier == getGroupModifier(MNEMONIC) && getKeyStroke() != null && KeyEvent.getKeyText(assignedKey).length() == 1) {
@@ -210,6 +217,7 @@ public final class Shortcut {
 
     /**
      * use this to set a buttons's mnemonic
+     * @param button button
      */
     public void setMnemonic(AbstractButton button) {
         if (assignedModifier == getGroupModifier(MNEMONIC)  && getKeyStroke() != null && KeyEvent.getKeyText(assignedKey).length() == 1) {
@@ -219,6 +227,7 @@ public final class Shortcut {
 
     /**
      * Sets the mnemonic key on a text component.
+     * @param component component
      */
     public void setFocusAccelerator(JTextComponent component) {
         if (assignedModifier == getGroupModifier(MNEMONIC)  && getKeyStroke() != null && KeyEvent.getKeyText(assignedKey).length() == 1) {
@@ -228,6 +237,7 @@ public final class Shortcut {
 
     /**
      * use this to set a actions's accelerator
+     * @param action action
      */
     public void setAccelerator(AbstractAction action) {
         if (getKeyStroke() != null) {
diff --git a/src/org/openstreetmap/josm/tools/Utils.java b/src/org/openstreetmap/josm/tools/Utils.java
index d25e50d..70858b7 100644
--- a/src/org/openstreetmap/josm/tools/Utils.java
+++ b/src/org/openstreetmap/josm/tools/Utils.java
@@ -1,6 +1,7 @@
 // License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.tools;
 
+import static org.openstreetmap.josm.tools.I18n.marktr;
 import static org.openstreetmap.josm.tools.I18n.tr;
 import static org.openstreetmap.josm.tools.I18n.trn;
 
@@ -22,7 +23,6 @@ import java.io.File;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.InputStreamReader;
-import java.io.OutputStream;
 import java.io.UnsupportedEncodingException;
 import java.net.HttpURLConnection;
 import java.net.MalformedURLException;
@@ -76,6 +76,7 @@ import org.xml.sax.helpers.DefaultHandler;
  */
 public final class Utils {
 
+    /** Pattern matching white spaces */
     public static final Pattern WHITE_SPACES_PATTERN = Pattern.compile("\\s+");
 
     private Utils() {
@@ -93,6 +94,7 @@ public final class Utils {
 
     /**
      * Tests whether {@code predicate} applies to at least one element from {@code collection}.
+     * @param <T> type of items
      * @param collection the collection
      * @param predicate the predicate
      * @return {@code true} if {@code predicate} applies to at least one element from {@code collection}
@@ -107,6 +109,7 @@ public final class Utils {
 
     /**
      * Tests whether {@code predicate} applies to all elements from {@code collection}.
+     * @param <T> type of items
      * @param collection the collection
      * @param predicate the predicate
      * @return {@code true} if {@code predicate} applies to all elements from {@code collection}
@@ -147,6 +150,7 @@ public final class Utils {
 
     /**
      * Returns the first element from {@code items} which is non-null, or null if all elements are null.
+     * @param <T> type of items
      * @param items the items to look for
      * @return first non-null item if there is one
      */
@@ -163,6 +167,8 @@ public final class Utils {
     /**
      * Filter a collection by (sub)class.
      * This is an efficient read-only implementation.
+     * @param <S> Super type of items
+     * @param <T> type of items
      * @param collection the collection
      * @param klass the (sub)class
      * @return a read-only filtered collection
@@ -310,6 +316,7 @@ public final class Utils {
     /**
      * convert float range 0 <= x <= 1 to integer range 0..255
      * when dealing with colors and color alpha value
+     * @param val float value between 0 and 1
      * @return null if val is null, the corresponding int if val is in the
      *         range 0...1. If val is outside that range, return 255
      */
@@ -335,12 +342,18 @@ public final class Utils {
         return ((float) val) / 255f;
     }
 
+    /**
+     * Returns the complementary color of {@code clr}.
+     * @param clr the color to complement
+     * @return the complementary color of {@code clr}
+     */
     public static Color complement(Color clr) {
         return new Color(255 - clr.getRed(), 255 - clr.getGreen(), 255 - clr.getBlue(), clr.getAlpha());
     }
 
     /**
      * Copies the given array. Unlike {@link Arrays#copyOf}, this method is null-safe.
+     * @param <T> type of items
      * @param array The array to copy
      * @return A copy of the original array, or {@code null} if {@code array} is null
      * @since 6221
@@ -421,24 +434,6 @@ public final class Utils {
     }
 
     /**
-     * Copy data from source stream to output stream.
-     * @param source source stream
-     * @param destination target stream
-     * @return number of bytes copied
-     * @throws IOException if any I/O error occurs
-     */
-    public static int copyStream(InputStream source, OutputStream destination) throws IOException {
-        int count = 0;
-        byte[] b = new byte[512];
-        int read;
-        while ((read = source.read(b)) != -1) {
-            count += read;
-            destination.write(b, 0, read);
-        }
-        return count;
-    }
-
-    /**
      * Deletes a directory recursively.
      * @param path The directory to delete
      * @return  <code>true</code> if and only if the file or directory is
@@ -451,8 +446,8 @@ public final class Utils {
                 for (File file : files) {
                     if (file.isDirectory()) {
                         deleteDirectory(file);
-                    } else if (!file.delete()) {
-                        Main.warn("Unable to delete file: "+file.getPath());
+                    } else {
+                        deleteFile(file);
                     }
                 }
             }
@@ -461,6 +456,33 @@ public final class Utils {
     }
 
     /**
+     * Deletes a file and log a default warning if the deletion fails.
+     * @param file file to delete
+     * and must contain a single parameter <code>{0}</code> for the file path
+     * @return {@code true} if and only if the file is successfully deleted; {@code false} otherwise
+     * @since 9296
+     */
+    public static boolean deleteFile(File file) {
+        return deleteFile(file, marktr("Unable to delete file {0}"));
+    }
+
+    /**
+     * Deletes a file and log a configurable warning if the deletion fails.
+     * @param file file to delete
+     * @param warnMsg warning message. It will be translated with {@code tr()}
+     * and must contain a single parameter <code>{0}</code> for the file path
+     * @return {@code true} if and only if the file is successfully deleted; {@code false} otherwise
+     * @since 9296
+     */
+    public static boolean deleteFile(File file, String warnMsg) {
+        boolean result = file.delete();
+        if (!result) {
+            Main.warn(tr(warnMsg, file.getPath()));
+        }
+        return result;
+    }
+
+    /**
      * <p>Utility method for closing a {@link java.io.Closeable} object.</p>
      *
      * @param c the closeable object. May be null.
@@ -649,6 +671,7 @@ public final class Utils {
 
     /**
      * Topological sort.
+     * @param <T> type of items
      *
      * @param dependencies contains mappings (key -> value). In the final list of sorted objects, the key will come
      * after the value. (In other words, the key depends on the value(s).)
@@ -1131,6 +1154,33 @@ public final class Utils {
     }
 
     /**
+     * Returns a human readable representation (B, kB, MB, ...) for the given number of byes.
+     * @param bytes the number of bytes
+     * @param locale the locale used for formatting
+     * @return a human readable representation
+     * @since 9274
+     */
+    public static String getSizeString(long bytes, Locale locale) {
+        if (bytes < 0) {
+            throw new IllegalArgumentException("bytes must be >= 0");
+        }
+        final String[] units = {"B", "kB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB"};
+        int unitIndex = 0;
+        double value = bytes;
+        while (value >= 1024 && unitIndex < units.length) {
+            value /= 1024;
+            unitIndex++;
+        }
+        if (value > 100 || unitIndex == 0) {
+            return String.format(locale, "%.0f %s", value, units[unitIndex]);
+        } else if (value > 10) {
+            return String.format(locale, "%.1f %s", value, units[unitIndex]);
+        } else {
+            return String.format(locale, "%.2f %s", value, units[unitIndex]);
+        }
+    }
+
+    /**
      * Returns a human readable representation of a list of positions.
      * <p>
      * For instance, {@code [1,5,2,6,7} yields "1-2,5-7
@@ -1217,6 +1267,7 @@ public final class Utils {
 
     /**
      * Adds the given item at the end of a new copy of given array.
+     * @param <T> type of items
      * @param array The source array
      * @param item The item to add
      * @return An extended copy of {@code array} containing {@code item} as additional last element
diff --git a/styles/standard/elemstyles.mapcss b/styles/standard/elemstyles.mapcss
index d75cb1d..818f8c2 100644
--- a/styles/standard/elemstyles.mapcss
+++ b/styles/standard/elemstyles.mapcss
@@ -9,7 +9,7 @@ Documentation of MapCSS format:
 */
 
 meta {
-    icon: "dialogs/mappaint/josm_small.png";
+    icon: "logo.svg";
 }
 
 canvas {
@@ -320,7 +320,8 @@ node[building=garages] {
     set icon_z17;
     text: auto;
 }
-node[entrance=yes] {
+node[entrance=yes],
+node[entrance=staircase] {
     icon-image: "misc/entrance-yes.png";
     set icon_z17;
     text: auto;
@@ -645,11 +646,6 @@ way[highway=steps] {
     color: foot#00ff00;
     dashes: 2,2;
 }
-node[highway=steps] {
-    icon-image: "transport/steps.png";
-    set icon_z17;
-    text: auto;
-}
 way[highway=bus_guideway] {
     width: 1;
     color: rail#404040;
@@ -855,7 +851,7 @@ area[highway=emergency_access_point] {
     fill-color: emergency_access_point#c0c0c0;
 }
 node[highway=emergency_access_point] {
-    icon-image: "service/emergency_access_point.png";
+    icon-image: "service/emergency_access_point.svg";
     set icon_z17;
     text: auto;
 }
@@ -2740,7 +2736,6 @@ area[amenity=hospital],
 area[amenity=clinic],
 area[amenity=nursing_home],
 area[amenity=social_facility],
-area[amenity=nursery],
 area[amenity=baby_hatch],
 area[amenity=doctors],
 area[amenity=dentist],
@@ -2748,40 +2743,67 @@ area[amenity=veterinary] {
     fill-color: health#eeeeee;
 }
 node[amenity=pharmacy] {
-    icon-image: "health/pharmacy.png";
+    icon-image: "health/pharmacy.svg";
+    set icon_z17;
+    text: auto;
+}
+node[amenity=hospital] {
+    icon-image: "health/hospital.svg";
     set icon_z17;
     text: auto;
 }
-node[amenity=hospital],
 node[amenity=clinic] {
-    icon-image: "health/hospital.png";
+    icon-image: "health/clinic.svg";
     set icon_z17;
     text: auto;
 }
-node[amenity=nursing_home],
-node[amenity=social_facility],
-node[amenity=nursery] {
-    icon-image: "misc/no_icon.png";
+node[amenity=nursing_home] {
+    icon-image: "social_facility/nursing_home.svg";
+    set icon_z17;
+    text: auto;
+}
+node[amenity=social_facility][social_facility=group_home] {
+    icon-image: "social_facility/group_home.svg";
+    set icon_z17;
+    text: auto;
+}
+node[amenity=social_facility][social_facility=assisted_living] {
+    icon-image: "social_facility/assisted_living.svg";
+    set icon_z17;
+    text: auto;
+}
+node[amenity=social_facility][social_facility=outreach] {
+    icon-image: "social_facility/outreach.svg";
+    set icon_z17;
+    text: auto;
+}
+node[amenity=social_facility][social_facility=shelter] {
+    icon-image: "social_facility/shelter.svg";
+    set icon_z17;
+    text: auto;
+}
+node[amenity=social_facility][social_facility=food_bank] {
+    icon-image: "social_facility/food_bank.svg";
     set icon_z17;
     text: auto;
 }
 node[amenity=baby_hatch] {
-    icon-image: "health/baby_hatch.png";
+    icon-image: "health/baby_hatch.svg";
     set icon_z17;
     text: auto;
 }
 node[amenity=doctors] {
-    icon-image: "health/doctor.png";
+    icon-image: "health/doctors.svg";
     set icon_z17;
     text: auto;
 }
 node[amenity=dentist] {
-    icon-image: "health/dentist.png";
+    icon-image: "health/dentist.svg";
     set icon_z17;
     text: auto;
 }
 node[amenity=veterinary] {
-    icon-image: "health/veterinary.png";
+    icon-image: "health/veterinary.svg";
     set icon_z17;
     text: auto;
 }
@@ -3005,9 +3027,10 @@ area[tourism=guest_house],
 area[tourism=hostel],
 area[tourism=chalet],
 area[tourism=alpine_hut],
+area[tourism=wilderness_hut],
 area[tourism=camp_site],
 area[tourism=caravan_site] {
-    fill-color: hotel#e1a0a2;
+    fill-color: hotel#feced0;
 }
 node[tourism=hotel] {
     icon-image: "accommodation/hotel.svg";
@@ -3448,12 +3471,12 @@ node[railway=subway_entrance] {
     text: auto;
 }
 node[railway=crossing] {
-    icon-image: "vehicle/crossing.png";
+    icon-image: "transport/railway/crossing.svg";
     set icon_z17;
     text: auto;
 }
 node[railway=level_crossing] {
-    icon-image: "presets/level_crossing.png";
+    icon-image: "transport/railway/level_crossing.svg";
     icon-width: 16;
     set icon_z17;
     text: auto;
@@ -3524,12 +3547,12 @@ area[railway=turntable] {
     fill-color: rail#404040;
 }
 node[railway=turntable] {
-    icon-image: "transport/turntable.png";
+    icon-image: "transport/railway/turntable.svg";
     set icon_z17;
     text: auto;
 }
 node[railway=buffer_stop] {
-    icon-image: "transport/buffer_stop.png";
+    icon-image: "transport/railway/buffer_stop.svg";
     set icon_z17;
     text: auto;
 }
@@ -3546,18 +3569,18 @@ way[railway=funicular] {
     dashes: 9,9;
 }
 node[railway=switch] {
-    icon-image: "presets/railway_switch.svg";
+    icon-image: "transport/railway/switch.svg";
     icon-width: 16;
     set icon_z17;
     text: auto;
 }
 node[railway=signal] {
-    icon-image: "vehicle/railway_signal.svg";
+    icon-image: "transport/railway/signal.svg";
     set icon_z17;
     text: auto;
 }
 node[railway=milestone] {
-    icon-image: "vehicle/milestone.svg";
+    icon-image: "transport/railway/milestone.svg";
     set icon_z17;
     text: auto;
 }
@@ -4950,7 +4973,7 @@ area[setting("partial_fill")] {
     fill-extent: 15;
 }
 
-/* Turn partial fill off and us plain fill, when the partial fill covers about
+/* Turn partial fill off and use plain fill, when the partial fill covers about
    100% of the area. This reduces artifacts (typically for incomplete multipolygons).
    Switching between full and partial fill while drawing an area might be irritating,
    so only do this at low zoom. */
@@ -4959,7 +4982,7 @@ area|z-13[setting("partial_fill")] {
 }
 
 /* Larger extent for closed areas.
-   Turn partial fill off, when it covers more than about 50% of the area. This is avoids
+   Turn partial fill off, when it covers more than about 50% of the area. This avoids
    areas with small unfilled patches in the center. */
 area[setting("partial_fill")]:closed2 {
     fill-extent: 25;
diff --git a/test/data/regress/12255/G0016941.JPG b/test/data/regress/12255/G0016941.JPG
new file mode 100644
index 0000000..c0cf63f
Binary files /dev/null and b/test/data/regress/12255/G0016941.JPG differ
diff --git a/test/functional/org/openstreetmap/josm/data/osm/TaginfoIntegrationTest.java b/test/functional/org/openstreetmap/josm/data/osm/TaginfoIntegrationTest.java
new file mode 100644
index 0000000..0ef92f5
--- /dev/null
+++ b/test/functional/org/openstreetmap/josm/data/osm/TaginfoIntegrationTest.java
@@ -0,0 +1,85 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.data.osm;
+
+import static org.junit.Assert.assertTrue;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.json.Json;
+import javax.json.JsonObject;
+import javax.json.JsonReader;
+import javax.json.JsonValue;
+
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.openstreetmap.josm.JOSMFixture;
+import org.openstreetmap.josm.data.validation.tests.MapCSSTagChecker;
+import org.openstreetmap.josm.data.validation.tests.TagChecker;
+import org.openstreetmap.josm.gui.mappaint.mapcss.parsergen.ParseException;
+import org.openstreetmap.josm.gui.tagging.presets.TaggingPresets;
+import org.openstreetmap.josm.tools.HttpClient;
+import org.xml.sax.SAXException;
+
+/**
+ * Various tests with Taginfo.
+ */
+public class TaginfoIntegrationTest {
+
+    /**
+     * Setup test.
+     */
+    @BeforeClass
+    public static void setUp() {
+        JOSMFixture.createFunctionalTestFixture().init();
+    }
+
+    /**
+     * Checks that popular tags are known (i.e included in internal presets, or deprecated, or explicitely ignored)
+     * @throws SAXException if any XML parsing error occurs
+     * @throws IOException if any I/O error occurs
+     * @throws ParseException if any MapCSS parsing error occurs
+     */
+    @Test
+    public void checkPopularTags() throws SAXException, IOException, ParseException {
+        TaggingPresets.readFromPreferences();
+        new TagChecker().initialize();
+        MapCSSTagChecker mapCssTagChecker = new MapCSSTagChecker();
+        mapCssTagChecker.addMapCSS("resource://data/validator/deprecated.mapcss");
+
+        List<String> errors = new ArrayList<>();
+        try (InputStream in = HttpClient.create(new URL("https://taginfo.openstreetmap.org/api/4/tags/popular")).connect().getContent();
+             JsonReader reader = Json.createReader(in)) {
+            for (JsonValue item : reader.readObject().getJsonArray("data")) {
+                JsonObject obj = (JsonObject) item;
+                // Only consider tags with wiki pages
+                if (obj.getInt("in_wiki") == 1) {
+                    String key = obj.getString("key");
+                    String value = obj.getString("value");
+                    System.out.print("Checking "+key+"="+value+" ... ");
+                    boolean ok = true;
+                    // Check if tag is in internal presets
+                    if (!TagChecker.isTagInPresets(key, value)) {
+                        // If not, check if we have either a deprecated mapcss test for it
+                        Node n = new Node();
+                        n.put(key, value);
+                        if (mapCssTagChecker.getErrorsForPrimitive(n, false).isEmpty()) {
+                            // Or a legacy tagchecker ignore rule
+                            if (!TagChecker.isTagIgnored(key, value)) {
+                                ok = !errors.add(key +"="+ value + " - " + obj.getInt("count_all"));
+                            }
+                        }
+                    }
+                    System.out.println(ok ? "OK" : "KO");
+                }
+            }
+        }
+        for (String error : errors) {
+            System.err.println(error);
+        }
+        assertTrue(errors.toString(), errors.isEmpty());
+    }
+}
diff --git a/test/functional/org/openstreetmap/josm/tools/HttpClientTest.java b/test/functional/org/openstreetmap/josm/tools/HttpClientTest.java
new file mode 100644
index 0000000..4bd54aa
--- /dev/null
+++ b/test/functional/org/openstreetmap/josm/tools/HttpClientTest.java
@@ -0,0 +1,140 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.tools;
+
+import static org.hamcrest.CoreMatchers.containsString;
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.CoreMatchers.nullValue;
+import static org.junit.Assert.assertThat;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URL;
+import java.nio.charset.StandardCharsets;
+import java.util.Collections;
+
+import javax.json.JsonObject;
+import javax.json.JsonReader;
+import javax.json.spi.JsonProvider;
+
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.openstreetmap.josm.JOSMFixture;
+import org.openstreetmap.josm.data.Version;
+
+/**
+ * Tests the {@link HttpClient} using the webservice <a href="https://httpbin.org/">https://httpbin.org/</a>.
+ */
+public class HttpClientTest {
+
+    @BeforeClass
+    public static void setUpBeforeClass() {
+        JOSMFixture.createFunctionalTestFixture().init();
+    }
+
+    @Test
+    public void testConstructorGetterSetter() throws Exception {
+        final HttpClient client = HttpClient.create(new URL("https://httpbin.org/"));
+        assertThat(client.getURL(), is(new URL("https://httpbin.org/")));
+        assertThat(client.getRequestMethod(), is("GET"));
+        assertThat(client.getRequestHeader("Accept"), nullValue());
+        client.setAccept("text/html");
+        assertThat(client.getRequestHeader("Accept"), is("text/html"));
+        assertThat(client.getRequestHeader("ACCEPT"), is("text/html"));
+        client.setHeaders(Collections.singletonMap("foo", "bar"));
+        assertThat(client.getRequestHeader("foo"), is("bar"));
+        client.setHeaders(Collections.singletonMap("foo", "baz"));
+        assertThat(client.getRequestHeader("foo"), is("baz"));
+        client.setHeaders(Collections.singletonMap("foo", (String) null));
+        assertThat(client.getRequestHeader("foo"), nullValue());
+    }
+
+    @Test
+    public void testGet() throws Exception {
+        final HttpClient.Response response = HttpClient.create(new URL("https://httpbin.org/get?foo=bar")).connect();
+        assertThat(response.getRequestMethod(), is("GET"));
+        assertThat(response.getResponseCode(), is(200));
+        assertThat(response.getResponseMessage(), is("OK"));
+        assertThat(response.getContentType(), is("application/json"));
+        assertThat(response.getHeaderField("Content-Type"), is("application/json"));
+        assertThat(response.getHeaderField("Content-TYPE"), is("application/json"));
+        assertThat(response.getHeaderFields().get("Content-Type"), is(Collections.singletonList("application/json")));
+        assertThat(response.getHeaderFields().get("Content-TYPE"), nullValue());
+        try (final InputStream in = response.getContent();
+             final JsonReader json = JsonProvider.provider().createReader(in)) {
+            final JsonObject root = json.readObject();
+            assertThat(root.getJsonObject("args").getString("foo"), is("bar"));
+            assertThat(root.getString("url"), is("https://httpbin.org/get?foo=bar"));
+        }
+    }
+
+    @Test
+    public void testUserAgent() throws Exception {
+        try (final InputStream in = HttpClient.create(new URL("https://httpbin.org/user-agent")).connect().getContent();
+             final JsonReader json = JsonProvider.provider().createReader(in)) {
+            assertThat(json.readObject().getString("user-agent"), is(Version.getInstance().getFullAgentString()));
+        }
+    }
+
+    @Test
+    public void testFetchUtf8Content() throws Exception {
+        final HttpClient.Response response = HttpClient.create(new URL("https://httpbin.org/encoding/utf8")).connect();
+        assertThat(response.getResponseCode(), is(200));
+        final String content = response.fetchContent();
+        assertThat(content, containsString("UTF-8 encoded sample plain-text file"));
+        assertThat(content, containsString("\u2200x\u2208\u211d:"));
+    }
+
+    @Test
+    public void testPost() throws Exception {
+        final String text = "Hello World!\nGeetings from JOSM, the Java OpenStreetMap Editor";
+        final HttpClient.Response response = HttpClient.create(new URL("https://httpbin.org/post"), "POST")
+                .setHeader("Content-Type", "text/plain")
+                .setRequestBody(text.getBytes(StandardCharsets.UTF_8))
+                .connect();
+        assertThat(response.getResponseCode(), is(200));
+        try (final InputStream in = response.getContent();
+             final JsonReader json = JsonProvider.provider().createReader(in)) {
+            assertThat(json.readObject().getString("data"), is(text));
+        }
+    }
+
+    @Test
+    public void testRelativeRedirects() throws Exception {
+        final HttpClient.Response response = HttpClient.create(new URL("https://httpbin.org/relative-redirect/5")).connect();
+        assertThat(response.getResponseCode(), is(200));
+        assertThat(response.getContentLength() > 100, is(true));
+    }
+
+    @Test
+    public void testAbsoluteRedirects() throws Exception {
+        final HttpClient.Response response = HttpClient.create(new URL("https://httpbin.org/absolute-redirect/5")).connect();
+        assertThat(response.getResponseCode(), is(200));
+        assertThat(response.getContentLength() > 100, is(true));
+    }
+
+    @Test(expected = IOException.class)
+    public void testTooMuchRedirects() throws Exception {
+        HttpClient.create(new URL("https://httpbin.org/redirect/5")).setMaxRedirects(4).connect();
+    }
+
+    @Test
+    public void test418() throws Exception {
+        // https://tools.ietf.org/html/rfc2324
+        final HttpClient.Response response = HttpClient.create(new URL("https://httpbin.org/status/418")).connect();
+        assertThat(response.getResponseCode(), is(418));
+        assertThat(response.getResponseMessage(), is("I'M A TEAPOT"));
+        final String content = response.fetchContent();
+        assertThat(content, containsString("-=[ teapot ]=-"));
+    }
+
+    @Test
+    public void testRequestInTime() throws Exception {
+        final HttpClient.Response response = HttpClient.create(new URL("https://httpbin.org/delay/3")).setReadTimeout(3500).connect();
+        assertThat(response.getResponseCode(), is(200));
+    }
+
+    @Test(expected = IOException.class)
+    public void testTakesTooLong() throws Exception {
+        HttpClient.create(new URL("https://httpbin.org/delay/3")).setReadTimeout(2500).connect();
+    }
+}
diff --git a/test/unit/org/CustomMatchers.java b/test/unit/org/CustomMatchers.java
index 2cc656c..de4f469 100644
--- a/test/unit/org/CustomMatchers.java
+++ b/test/unit/org/CustomMatchers.java
@@ -25,6 +25,7 @@ public final class CustomMatchers {
 
     /**
      * Matcher for a predicate.
+     * @param <T> type of elements
      * @param predicate the predicate
      * @return matcher for a predicate
      */
diff --git a/test/unit/org/openstreetmap/josm/TestUtils.java b/test/unit/org/openstreetmap/josm/TestUtils.java
index b2e1484..2a620b6 100644
--- a/test/unit/org/openstreetmap/josm/TestUtils.java
+++ b/test/unit/org/openstreetmap/josm/TestUtils.java
@@ -49,6 +49,7 @@ public final class TestUtils {
 
     /**
      * Checks that the given Comparator respects its contract on the given table.
+     * @param <T> type of elements
      * @param comparator The comparator to test
      * @param array The array sorted for test purpose
      */
diff --git a/test/unit/org/openstreetmap/josm/command/conflict/DeletedStateConflictResolveCommandTest.java b/test/unit/org/openstreetmap/josm/command/conflict/DeletedStateConflictResolveCommandTest.java
new file mode 100644
index 0000000..3d2e6e0
--- /dev/null
+++ b/test/unit/org/openstreetmap/josm/command/conflict/DeletedStateConflictResolveCommandTest.java
@@ -0,0 +1,42 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.command.conflict;
+
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.openstreetmap.josm.JOSMFixture;
+import org.openstreetmap.josm.data.conflict.Conflict;
+import org.openstreetmap.josm.data.osm.DataSet;
+import org.openstreetmap.josm.data.osm.Node;
+import org.openstreetmap.josm.data.osm.Way;
+import org.openstreetmap.josm.gui.layer.OsmDataLayer;
+
+import nl.jqno.equalsverifier.EqualsVerifier;
+import nl.jqno.equalsverifier.Warning;
+
+/**
+ * Unit tests of {@link DeletedStateConflictResolveCommand} class.
+ */
+public class DeletedStateConflictResolveCommandTest {
+
+    /**
+     * Setup test.
+     */
+    @BeforeClass
+    public static void setUpBeforeClass() {
+        JOSMFixture.createUnitTestFixture().init(false);
+    }
+
+    /**
+     * Unit test of methods {@link DeletedStateConflictResolveCommand#equals} and {@link DeletedStateConflictResolveCommand#hashCode}.
+     */
+    @Test
+    public void equalsContract() {
+        EqualsVerifier.forClass(DeletedStateConflictResolveCommand.class).usingGetClass()
+            .withPrefabValues(Conflict.class,
+                    new Conflict<>(new Node(), new Node()), new Conflict<>(new Way(), new Way()))
+            .withPrefabValues(OsmDataLayer.class,
+                    new OsmDataLayer(new DataSet(), "1", null), new OsmDataLayer(new DataSet(), "2", null))
+            .suppress(Warning.NONFINAL_FIELDS)
+            .verify();
+    }
+}
diff --git a/test/unit/org/openstreetmap/josm/command/conflict/ModifiedConflictResolveCommandTest.java b/test/unit/org/openstreetmap/josm/command/conflict/ModifiedConflictResolveCommandTest.java
new file mode 100644
index 0000000..c10f0c7
--- /dev/null
+++ b/test/unit/org/openstreetmap/josm/command/conflict/ModifiedConflictResolveCommandTest.java
@@ -0,0 +1,42 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.command.conflict;
+
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.openstreetmap.josm.JOSMFixture;
+import org.openstreetmap.josm.data.conflict.Conflict;
+import org.openstreetmap.josm.data.osm.DataSet;
+import org.openstreetmap.josm.data.osm.Node;
+import org.openstreetmap.josm.data.osm.Way;
+import org.openstreetmap.josm.gui.layer.OsmDataLayer;
+
+import nl.jqno.equalsverifier.EqualsVerifier;
+import nl.jqno.equalsverifier.Warning;
+
+/**
+ * Unit tests of {@link ModifiedConflictResolveCommand} class.
+ */
+public class ModifiedConflictResolveCommandTest {
+
+    /**
+     * Setup test.
+     */
+    @BeforeClass
+    public static void setUpBeforeClass() {
+        JOSMFixture.createUnitTestFixture().init(false);
+    }
+
+    /**
+     * Unit test of methods {@link ModifiedConflictResolveCommand#equals} and {@link ModifiedConflictResolveCommand#hashCode}.
+     */
+    @Test
+    public void equalsContract() {
+        EqualsVerifier.forClass(ModifiedConflictResolveCommand.class).usingGetClass()
+            .withPrefabValues(Conflict.class,
+                    new Conflict<>(new Node(), new Node()), new Conflict<>(new Way(), new Way()))
+            .withPrefabValues(OsmDataLayer.class,
+                    new OsmDataLayer(new DataSet(), "1", null), new OsmDataLayer(new DataSet(), "2", null))
+            .suppress(Warning.NONFINAL_FIELDS)
+            .verify();
+    }
+}
diff --git a/test/unit/org/openstreetmap/josm/command/conflict/RelationMemberConflictResolverCommandTest.java b/test/unit/org/openstreetmap/josm/command/conflict/RelationMemberConflictResolverCommandTest.java
new file mode 100644
index 0000000..21126d4
--- /dev/null
+++ b/test/unit/org/openstreetmap/josm/command/conflict/RelationMemberConflictResolverCommandTest.java
@@ -0,0 +1,44 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.command.conflict;
+
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.openstreetmap.josm.JOSMFixture;
+import org.openstreetmap.josm.data.conflict.Conflict;
+import org.openstreetmap.josm.data.osm.DataSet;
+import org.openstreetmap.josm.data.osm.Node;
+import org.openstreetmap.josm.data.osm.Relation;
+import org.openstreetmap.josm.gui.layer.OsmDataLayer;
+
+import nl.jqno.equalsverifier.EqualsVerifier;
+import nl.jqno.equalsverifier.Warning;
+
+/**
+ * Unit tests of {@link RelationMemberConflictResolverCommand} class.
+ */
+public class RelationMemberConflictResolverCommandTest {
+
+    /**
+     * Setup test.
+     */
+    @BeforeClass
+    public static void setUpBeforeClass() {
+        JOSMFixture.createUnitTestFixture().init(false);
+    }
+
+    /**
+     * Unit test of methods {@link RelationMemberConflictResolverCommand#equals} and {@link RelationMemberConflictResolverCommand#hashCode}.
+     */
+    @Test
+    public void equalsContract() {
+        EqualsVerifier.forClass(RelationMemberConflictResolverCommand.class).usingGetClass()
+            .withPrefabValues(Relation.class,
+                    new Relation(1), new Relation(2))
+            .withPrefabValues(Conflict.class,
+                    new Conflict<>(new Node(), new Node()), new Conflict<>(new Relation(), new Relation()))
+            .withPrefabValues(OsmDataLayer.class,
+                    new OsmDataLayer(new DataSet(), "1", null), new OsmDataLayer(new DataSet(), "2", null))
+            .suppress(Warning.NONFINAL_FIELDS)
+            .verify();
+    }
+}
diff --git a/test/unit/org/openstreetmap/josm/command/conflict/TagConflictResolveCommandTest.java b/test/unit/org/openstreetmap/josm/command/conflict/TagConflictResolveCommandTest.java
new file mode 100644
index 0000000..4200367
--- /dev/null
+++ b/test/unit/org/openstreetmap/josm/command/conflict/TagConflictResolveCommandTest.java
@@ -0,0 +1,42 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.command.conflict;
+
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.openstreetmap.josm.JOSMFixture;
+import org.openstreetmap.josm.data.conflict.Conflict;
+import org.openstreetmap.josm.data.osm.DataSet;
+import org.openstreetmap.josm.data.osm.Node;
+import org.openstreetmap.josm.data.osm.Way;
+import org.openstreetmap.josm.gui.layer.OsmDataLayer;
+
+import nl.jqno.equalsverifier.EqualsVerifier;
+import nl.jqno.equalsverifier.Warning;
+
+/**
+ * Unit tests of {@link TagConflictResolveCommand} class.
+ */
+public class TagConflictResolveCommandTest {
+
+    /**
+     * Setup test.
+     */
+    @BeforeClass
+    public static void setUpBeforeClass() {
+        JOSMFixture.createUnitTestFixture().init(false);
+    }
+
+    /**
+     * Unit test of methods {@link TagConflictResolveCommand#equals} and {@link TagConflictResolveCommand#hashCode}.
+     */
+    @Test
+    public void equalsContract() {
+        EqualsVerifier.forClass(TagConflictResolveCommand.class).usingGetClass()
+            .withPrefabValues(Conflict.class,
+                    new Conflict<>(new Node(), new Node()), new Conflict<>(new Way(), new Way()))
+            .withPrefabValues(OsmDataLayer.class,
+                    new OsmDataLayer(new DataSet(), "1", null), new OsmDataLayer(new DataSet(), "2", null))
+            .suppress(Warning.NONFINAL_FIELDS)
+            .verify();
+    }
+}
diff --git a/test/unit/org/openstreetmap/josm/command/conflict/VersionConflictResolveCommandTest.java b/test/unit/org/openstreetmap/josm/command/conflict/VersionConflictResolveCommandTest.java
new file mode 100644
index 0000000..7e7e9ab
--- /dev/null
+++ b/test/unit/org/openstreetmap/josm/command/conflict/VersionConflictResolveCommandTest.java
@@ -0,0 +1,42 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.command.conflict;
+
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.openstreetmap.josm.JOSMFixture;
+import org.openstreetmap.josm.data.conflict.Conflict;
+import org.openstreetmap.josm.data.osm.DataSet;
+import org.openstreetmap.josm.data.osm.Node;
+import org.openstreetmap.josm.data.osm.Way;
+import org.openstreetmap.josm.gui.layer.OsmDataLayer;
+
+import nl.jqno.equalsverifier.EqualsVerifier;
+import nl.jqno.equalsverifier.Warning;
+
+/**
+ * Unit tests of {@link VersionConflictResolveCommand} class.
+ */
+public class VersionConflictResolveCommandTest {
+
+    /**
+     * Setup test.
+     */
+    @BeforeClass
+    public static void setUpBeforeClass() {
+        JOSMFixture.createUnitTestFixture().init(false);
+    }
+
+    /**
+     * Unit test of methods {@link VersionConflictResolveCommand#equals} and {@link VersionConflictResolveCommand#hashCode}.
+     */
+    @Test
+    public void equalsContract() {
+        EqualsVerifier.forClass(VersionConflictResolveCommand.class).usingGetClass()
+            .withPrefabValues(Conflict.class,
+                    new Conflict<>(new Node(), new Node()), new Conflict<>(new Way(), new Way()))
+            .withPrefabValues(OsmDataLayer.class,
+                    new OsmDataLayer(new DataSet(), "1", null), new OsmDataLayer(new DataSet(), "2", null))
+            .suppress(Warning.NONFINAL_FIELDS)
+            .verify();
+    }
+}
diff --git a/test/unit/org/openstreetmap/josm/command/conflict/WayNodesConflictResolverCommandTest.java b/test/unit/org/openstreetmap/josm/command/conflict/WayNodesConflictResolverCommandTest.java
new file mode 100644
index 0000000..1195415
--- /dev/null
+++ b/test/unit/org/openstreetmap/josm/command/conflict/WayNodesConflictResolverCommandTest.java
@@ -0,0 +1,42 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.command.conflict;
+
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.openstreetmap.josm.JOSMFixture;
+import org.openstreetmap.josm.data.conflict.Conflict;
+import org.openstreetmap.josm.data.osm.DataSet;
+import org.openstreetmap.josm.data.osm.Node;
+import org.openstreetmap.josm.data.osm.Way;
+import org.openstreetmap.josm.gui.layer.OsmDataLayer;
+
+import nl.jqno.equalsverifier.EqualsVerifier;
+import nl.jqno.equalsverifier.Warning;
+
+/**
+ * Unit tests of {@link WayNodesConflictResolverCommand} class.
+ */
+public class WayNodesConflictResolverCommandTest {
+
+    /**
+     * Setup test.
+     */
+    @BeforeClass
+    public static void setUpBeforeClass() {
+        JOSMFixture.createUnitTestFixture().init(false);
+    }
+
+    /**
+     * Unit test of methods {@link WayNodesConflictResolverCommand#equals} and {@link WayNodesConflictResolverCommand#hashCode}.
+     */
+    @Test
+    public void equalsContract() {
+        EqualsVerifier.forClass(WayNodesConflictResolverCommand.class).usingGetClass()
+            .withPrefabValues(Conflict.class,
+                    new Conflict<>(new Node(), new Node()), new Conflict<>(new Way(), new Way()))
+            .withPrefabValues(OsmDataLayer.class,
+                    new OsmDataLayer(new DataSet(), "1", null), new OsmDataLayer(new DataSet(), "2", null))
+            .suppress(Warning.NONFINAL_FIELDS)
+            .verify();
+    }
+}
diff --git a/test/unit/org/openstreetmap/josm/data/validation/tests/TagCheckerTest.java b/test/unit/org/openstreetmap/josm/data/validation/tests/TagCheckerTest.java
index c40af50..2cdfe59 100644
--- a/test/unit/org/openstreetmap/josm/data/validation/tests/TagCheckerTest.java
+++ b/test/unit/org/openstreetmap/josm/data/validation/tests/TagCheckerTest.java
@@ -39,32 +39,48 @@ public class TagCheckerTest {
         return checker.getErrors();
     }
 
+    /**
+     * Check for mispelled key.
+     * @throws IOException if any I/O error occurs
+     */
     @Test
-    public void testInvalidKey() throws Exception {
+    public void testInvalidKey() throws IOException {
         final List<TestError> errors = test(OsmUtils.createPrimitive("node Name=Main"));
         assertEquals(1, errors.size());
         assertEquals("Misspelled property key", errors.get(0).getMessage());
         assertEquals("Key 'Name' looks like 'name'.", errors.get(0).getDescription());
     }
 
+    /**
+     * Check for mispelled key.
+     * @throws IOException if any I/O error occurs
+     */
     @Test
-    public void testMisspelledKey() throws Exception {
+    public void testMisspelledKey() throws IOException {
         final List<TestError> errors = test(OsmUtils.createPrimitive("node landuse;=forest"));
         assertEquals(1, errors.size());
         assertEquals("Misspelled property key", errors.get(0).getMessage());
         assertEquals("Key 'landuse;' looks like 'landuse'.", errors.get(0).getDescription());
     }
 
+    /**
+     * Check for unknown key.
+     * @throws IOException if any I/O error occurs
+     */
     @Test
-    public void testTranslatedNameKey() throws Exception {
+    public void testTranslatedNameKey() throws IOException {
         final List<TestError> errors = test(OsmUtils.createPrimitive("node namez=Baz"));
         assertEquals(1, errors.size());
         assertEquals("Presets do not contain property key", errors.get(0).getMessage());
         assertEquals("Key 'namez' not in presets.", errors.get(0).getDescription());
     }
 
+    /**
+     * Check for mispelled value.
+     * @throws IOException if any I/O error occurs
+     */
     @Test
-    public void testMisspelledTag() throws Exception {
+    public void testMisspelledTag() throws IOException {
         final List<TestError> errors = test(OsmUtils.createPrimitive("node landuse=forrest"));
         assertEquals(1, errors.size());
         assertEquals("Presets do not contain property value", errors.get(0).getMessage());
diff --git a/test/unit/org/openstreetmap/josm/gui/conflict/tags/RelationMemberConflictResolverModelTest.java b/test/unit/org/openstreetmap/josm/gui/conflict/tags/RelationMemberConflictResolverModelTest.java
index c03bf4f..82f269a 100644
--- a/test/unit/org/openstreetmap/josm/gui/conflict/tags/RelationMemberConflictResolverModelTest.java
+++ b/test/unit/org/openstreetmap/josm/gui/conflict/tags/RelationMemberConflictResolverModelTest.java
@@ -19,6 +19,9 @@ import org.openstreetmap.josm.data.osm.Relation;
 import org.openstreetmap.josm.data.osm.RelationMember;
 import org.openstreetmap.josm.data.osm.Way;
 
+/**
+ * Unit tests of {@link RelationMemberConflictResolverModel} class.
+ */
 public class RelationMemberConflictResolverModelTest {
 
     /**
diff --git a/test/unit/org/openstreetmap/josm/gui/layer/geoimage/ImageEntryTest.java b/test/unit/org/openstreetmap/josm/gui/layer/geoimage/ImageEntryTest.java
new file mode 100644
index 0000000..8421b26
--- /dev/null
+++ b/test/unit/org/openstreetmap/josm/gui/layer/geoimage/ImageEntryTest.java
@@ -0,0 +1,31 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.gui.layer.geoimage;
+
+import static org.junit.Assert.assertNotNull;
+
+import java.io.File;
+import java.io.IOException;
+
+import org.junit.Test;
+import org.openstreetmap.josm.TestUtils;
+import org.openstreetmap.josm.io.IllegalDataException;
+import org.xml.sax.SAXException;
+
+/**
+ * Unit tests of {@link ImageEntry} class.
+ */
+public class ImageEntryTest {
+
+    /**
+     * Non-regression test for ticket <a href="https://josm.openstreetmap.de/ticket/12255">#12255</a>.
+     * @throws IllegalDataException if an error was found while parsing the data from the source
+     * @throws IOException if any I/O error occurs
+     * @throws SAXException if any XML error occurs
+     */
+    @Test
+    public void testTicket12255() throws IllegalDataException, IOException, SAXException {
+        ImageEntry e = new ImageEntry(new File(TestUtils.getRegressionDataFile(12255, "G0016941.JPG")));
+        e.extractExif();
+        assertNotNull(e.getExifTime());
+    }
+}
diff --git a/test/unit/org/openstreetmap/josm/gui/mappaint/LabelCompositionStrategyTest.groovy b/test/unit/org/openstreetmap/josm/gui/mappaint/LabelCompositionStrategyTest.groovy
index 9d6e330..c72db6f 100644
--- a/test/unit/org/openstreetmap/josm/gui/mappaint/LabelCompositionStrategyTest.groovy
+++ b/test/unit/org/openstreetmap/josm/gui/mappaint/LabelCompositionStrategyTest.groovy
@@ -2,14 +2,14 @@
 package org.openstreetmap.josm.gui.mappaint
 
 import org.junit.*
-import org.openstreetmap.josm.JOSMFixture;
-import org.openstreetmap.josm.gui.mappaint.LabelCompositionStrategy.DeriveLabelFromNameTagsCompositionStrategy 
-import org.openstreetmap.josm.gui.mappaint.LabelCompositionStrategy.StaticLabelCompositionStrategy;
-import org.openstreetmap.josm.gui.mappaint.LabelCompositionStrategy.TagLookupCompositionStrategy 
-import org.openstreetmap.josm.data.osm.Node;
+import org.openstreetmap.josm.JOSMFixture
+import org.openstreetmap.josm.data.osm.Node
+import org.openstreetmap.josm.gui.mappaint.styleelement.LabelCompositionStrategy.DeriveLabelFromNameTagsCompositionStrategy
+import org.openstreetmap.josm.gui.mappaint.styleelement.LabelCompositionStrategy.StaticLabelCompositionStrategy
+import org.openstreetmap.josm.gui.mappaint.styleelement.LabelCompositionStrategy.TagLookupCompositionStrategy
 
 class LabelCompositionStrategyTest {
-    
+
     @BeforeClass
     public static void createJOSMFixture(){
         JOSMFixture.createUnitTestFixture().init()
@@ -18,50 +18,50 @@ class LabelCompositionStrategyTest {
     @Test
     public void createStaticLabelCompositionStrategy() {
         def n = new Node()
-        
+
         def strat = new StaticLabelCompositionStrategy(null)
         assert strat.compose(n) == null
-        
+
         strat = new StaticLabelCompositionStrategy("a label")
-        assert strat.compose(n) == "a label"        
+        assert strat.compose(n) == "a label"
     }
-    
+
     @Test
     public void createTagLookupCompositionStrategy() {
         def n = new Node()
         n.put("my-tag", "my-value")
-        
+
         def strat = new TagLookupCompositionStrategy(null)
         assert strat.compose(n) == null
-        
+
         strat = new TagLookupCompositionStrategy("name")
         assert strat.compose(n) == null
-        
+
         strat = new TagLookupCompositionStrategy("my-tag")
         assert strat.compose(n) == "my-value"
     }
-    
+
     @Test
     public void createDeriveLabelFromNameTagsCompositionStrategy() {
-        def n 
+        def n
         def strat
-        
+
         strat = new DeriveLabelFromNameTagsCompositionStrategy()
         strat.setNameTags(null)
         assert strat.getNameTags() == []
-        
+
         strat = new DeriveLabelFromNameTagsCompositionStrategy()
         strat.setNameTags(["name", "brand"])
         assert strat.getNameTags() == ["name", "brand"]
-        
+
         n = new Node()
-        n.put("brand", "my brand")        
+        n.put("brand", "my brand")
         assert strat.compose(n) == "my brand"
-        
+
         n = new Node()
         n.put("name", "my name")
         n.put("brand", "my brand")
-        assert strat.compose(n) == "my name"        
+        assert strat.compose(n) == "my name"
     }
 }
 
diff --git a/test/unit/org/openstreetmap/josm/gui/mappaint/MapCSSWithExtendedTextDirectivesTest.groovy b/test/unit/org/openstreetmap/josm/gui/mappaint/MapCSSWithExtendedTextDirectivesTest.groovy
index e15d407..f00021c 100644
--- a/test/unit/org/openstreetmap/josm/gui/mappaint/MapCSSWithExtendedTextDirectivesTest.groovy
+++ b/test/unit/org/openstreetmap/josm/gui/mappaint/MapCSSWithExtendedTextDirectivesTest.groovy
@@ -5,9 +5,10 @@ import java.awt.Color
 import org.junit.*
 import org.openstreetmap.josm.JOSMFixture
 import org.openstreetmap.josm.data.osm.Node
-import org.openstreetmap.josm.gui.mappaint.LabelCompositionStrategy.DeriveLabelFromNameTagsCompositionStrategy
-import org.openstreetmap.josm.gui.mappaint.LabelCompositionStrategy.TagLookupCompositionStrategy
 import org.openstreetmap.josm.gui.mappaint.MapPaintStyles.TagKeyReference
+import org.openstreetmap.josm.gui.mappaint.styleelement.TextLabel
+import org.openstreetmap.josm.gui.mappaint.styleelement.LabelCompositionStrategy.DeriveLabelFromNameTagsCompositionStrategy
+import org.openstreetmap.josm.gui.mappaint.styleelement.LabelCompositionStrategy.TagLookupCompositionStrategy
 
 class MapCSSWithExtendedTextDirectivesTest {
 
@@ -25,7 +26,7 @@ class MapCSSWithExtendedTextDirectivesTest {
         osm.put("ref", "A456");
         Environment env = new Environment(osm, mc, "default", null)
 
-        TextElement te = TextElement.create(env, Color.WHITE, false /* no default annotate */)
+        TextLabel te = TextLabel.create(env, Color.WHITE, false /* no default annotate */)
         assert te.labelCompositionStrategy != null
         assert te.labelCompositionStrategy instanceof DeriveLabelFromNameTagsCompositionStrategy
     }
@@ -39,7 +40,7 @@ class MapCSSWithExtendedTextDirectivesTest {
         osm.put("my_name", "foobar");
         Environment env = new Environment(osm, mc, "default", null)
 
-        TextElement te = TextElement.create(env, Color.WHITE, false /* no default annotate */)
+        TextLabel te = TextLabel.create(env, Color.WHITE, false /* no default annotate */)
         assert te.labelCompositionStrategy != null
         assert te.labelCompositionStrategy instanceof TagLookupCompositionStrategy
         assert te.labelCompositionStrategy.getDefaultLabelTag() == "my_name"
@@ -51,7 +52,7 @@ class MapCSSWithExtendedTextDirectivesTest {
         Node osm = new Node()
         Environment env = new Environment(osm, mc, "default", null)
 
-        TextElement te = TextElement.create(env, Color.WHITE, false /* no default annotate */)
+        TextLabel te = TextLabel.create(env, Color.WHITE, false /* no default annotate */)
         assert te == null
     }
 }
diff --git a/test/unit/org/openstreetmap/josm/gui/mappaint/mapcss/KeyValueConditionTest.groovy b/test/unit/org/openstreetmap/josm/gui/mappaint/mapcss/KeyValueConditionTest.groovy
index 9c6cb8b..6727aa7 100644
--- a/test/unit/org/openstreetmap/josm/gui/mappaint/mapcss/KeyValueConditionTest.groovy
+++ b/test/unit/org/openstreetmap/josm/gui/mappaint/mapcss/KeyValueConditionTest.groovy
@@ -100,4 +100,20 @@ class KeyValueConditionTest {
         assert selNeg.matches(new Environment(OsmUtils.createPrimitive("way foo=bar source=baz")))
         assert selNeg.matches(new Environment(OsmUtils.createPrimitive("way foo=bar src=1,2")))
     }
+
+    @Test
+    public void testValueFive() throws Exception {
+        // ticket #5985
+        def sel = new MapCSSParser(new StringReader("*[width=5]")).selector()
+        assert sel.matches(new Environment(OsmUtils.createPrimitive("way highway=track width=5")))
+        assert !sel.matches(new Environment(OsmUtils.createPrimitive("way highway=track width=2")))
+    }
+
+    @Test
+    public void testValueZero() throws Exception {
+        // ticket #12267
+        def sel = new MapCSSParser(new StringReader("*[frequency=0]")).selector()
+        assert sel.matches(new Environment(OsmUtils.createPrimitive("way railway=rail frequency=0")))
+        assert !sel.matches(new Environment(OsmUtils.createPrimitive("way railway=rail frequency=50")))
+    }
 }
diff --git a/test/unit/org/openstreetmap/josm/gui/preferences/ToolbarPreferencesTest.java b/test/unit/org/openstreetmap/josm/gui/preferences/ToolbarPreferencesTest.java
index ac68a6a..676f6d6 100644
--- a/test/unit/org/openstreetmap/josm/gui/preferences/ToolbarPreferencesTest.java
+++ b/test/unit/org/openstreetmap/josm/gui/preferences/ToolbarPreferencesTest.java
@@ -29,9 +29,12 @@ public class ToolbarPreferencesTest {
             putValue("toolbar", "action");
         }
 
+        @Override
         public void actionPerformed(ActionEvent e, Map<String, Object> parameters) {
+            // Do nothing
         }
 
+        @Override
         public List<ActionParameter<?>> getActionParameters() {
             List<ActionParameter<?>> result = new ArrayList<>();
             result.add(new StringActionParameter("param1"));
@@ -39,8 +42,9 @@ public class ToolbarPreferencesTest {
             return result;
         }
 
+        @Override
         public void actionPerformed(ActionEvent e) {
-
+            // Do nothing
         }
     }
 
diff --git a/test/unit/org/openstreetmap/josm/gui/util/RotationAngleTest.java b/test/unit/org/openstreetmap/josm/gui/util/RotationAngleTest.java
index 7269107..19ed9f0 100644
--- a/test/unit/org/openstreetmap/josm/gui/util/RotationAngleTest.java
+++ b/test/unit/org/openstreetmap/josm/gui/util/RotationAngleTest.java
@@ -12,6 +12,9 @@ public class RotationAngleTest {
 
     private static final double EPSILON = 1e-11;
 
+    /**
+     * Unit test of method {@link RotationAngle#buildStaticRotation} - nominal cases.
+     */
     @Test
     public void testParseCardinal() {
         assertEquals(Math.PI, RotationAngle.buildStaticRotation("south").getRotationAngle(null), EPSILON);
@@ -19,11 +22,17 @@ public class RotationAngleTest {
         assertEquals(Math.toRadians(315), RotationAngle.buildStaticRotation("northwest").getRotationAngle(null), EPSILON);
     }
 
+    /**
+     * Unit test of method {@link RotationAngle#buildStaticRotation} - wrong parameter.
+     */
     @Test(expected = IllegalArgumentException.class)
     public void testParseFail() {
         RotationAngle.buildStaticRotation("bad");
     }
 
+    /**
+     * Unit test of method {@link RotationAngle#buildStaticRotation} - null handling.
+     */
     @Test(expected = NullPointerException.class)
     public void testParseNull() {
         RotationAngle.buildStaticRotation(null);
diff --git a/test/unit/org/openstreetmap/josm/io/NmeaReaderTest.java b/test/unit/org/openstreetmap/josm/io/NmeaReaderTest.java
new file mode 100644
index 0000000..85842ba
--- /dev/null
+++ b/test/unit/org/openstreetmap/josm/io/NmeaReaderTest.java
@@ -0,0 +1,21 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.io;
+
+import org.junit.Test;
+import org.openstreetmap.josm.io.NmeaReader.NMEA_TYPE;
+
+import nl.jqno.equalsverifier.EqualsVerifier;
+
+/**
+ * Unit tests of {@link NmeaReader} class.
+ */
+public class NmeaReaderTest {
+
+    /**
+     * Unit test of methods {@link NMEA_TYPE#equals} and {@link NMEA_TYPE#hashCode}.
+     */
+    @Test
+    public void equalsContract() {
+        EqualsVerifier.forClass(NMEA_TYPE.class).verify();
+    }
+}
diff --git a/test/unit/org/openstreetmap/josm/io/OsmWriterTest.java b/test/unit/org/openstreetmap/josm/io/OsmWriterTest.java
new file mode 100644
index 0000000..d35e871
--- /dev/null
+++ b/test/unit/org/openstreetmap/josm/io/OsmWriterTest.java
@@ -0,0 +1,38 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.io;
+
+import static org.junit.Assert.assertEquals;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
+import org.junit.Test;
+import org.openstreetmap.josm.data.osm.NodeData;
+import org.openstreetmap.josm.tools.Utils;
+
+public class OsmWriterTest {
+
+    @Test
+    public void testByIdComparator() throws Exception {
+
+        final List<NodeData> ids = new ArrayList<>();
+        for (Long id : Arrays.asList(12L, Long.MIN_VALUE, 65L, -12L, 2L, 0L, -3L, -20L, Long.MAX_VALUE)) {
+            final NodeData n = new NodeData();
+            n.setId(id);
+            ids.add(n);
+        }
+
+        Collections.sort(ids, OsmWriter.byIdComparator);
+
+        final String idsAsString = Utils.transform(ids, new Utils.Function<NodeData, Object>() {
+            @Override
+            public Object apply(NodeData x) {
+                return x.getUniqueId();
+            }
+        }).toString();
+
+        assertEquals("[-3, -12, -20, -9223372036854775808, 0, 2, 12, 65, 9223372036854775807]", idsAsString);
+    }
+}
diff --git a/test/unit/org/openstreetmap/josm/io/session/SessionWriterTest.java b/test/unit/org/openstreetmap/josm/io/session/SessionWriterTest.java
index e2a79e4..33e3dd1 100644
--- a/test/unit/org/openstreetmap/josm/io/session/SessionWriterTest.java
+++ b/test/unit/org/openstreetmap/josm/io/session/SessionWriterTest.java
@@ -27,6 +27,7 @@ import org.openstreetmap.josm.gui.layer.TMSLayer;
 import org.openstreetmap.josm.gui.layer.markerlayer.MarkerLayer;
 import org.openstreetmap.josm.gui.preferences.projection.ProjectionPreference;
 import org.openstreetmap.josm.tools.MultiMap;
+import org.openstreetmap.josm.tools.Utils;
 
 /**
  * Unit tests for Session writing.
@@ -107,7 +108,7 @@ public class SessionWriterTest {
             fail(e.getMessage());
         } finally {
             if (file.exists()) {
-                file.delete();
+                Utils.deleteFile(file);
             }
         }
     }
diff --git a/test/unit/org/openstreetmap/josm/tools/ColorScaleTest.java b/test/unit/org/openstreetmap/josm/tools/ColorScaleTest.java
new file mode 100644
index 0000000..9403490
--- /dev/null
+++ b/test/unit/org/openstreetmap/josm/tools/ColorScaleTest.java
@@ -0,0 +1,36 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.tools;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNull;
+
+import java.awt.Color;
+
+import org.junit.Test;
+
+/**
+ * Unit tests for class {@link ColorScale}.
+ */
+public class ColorScaleTest {
+
+    /**
+     * Test method for {@link ColorScale#createHSBScale(int)}.
+     */
+    @Test
+    public void testHSBScale() {
+        final ColorScale scale = ColorScale.createHSBScale(256);
+        assertEquals(new Color(255, 0, 0), scale.getColor(0));
+        assertEquals(new Color(0, 255, 143), scale.getColor(128));
+        assertEquals(new Color(255, 0, 229), scale.getColor(255));
+
+        assertEquals(new Color(255, 0, 0), scale.getColor(-1000));
+        assertEquals(new Color(255, 0, 229), scale.getColor(1000));
+
+        assertNull(scale.getColor(Double.NaN));
+        assertNull(scale.getColor(null));
+        scale.setNoDataColor(new Color(12, 34, 56));
+        assertEquals(new Color(12, 34, 56), scale.getNoDataColor());
+        assertEquals(new Color(12, 34, 56), scale.getColor(Double.NaN));
+        assertEquals(new Color(12, 34, 56), scale.getColor(null));
+    }
+}
diff --git a/test/unit/org/openstreetmap/josm/tools/ImageProviderTest.java b/test/unit/org/openstreetmap/josm/tools/ImageProviderTest.java
index f683991..5d626f3 100644
--- a/test/unit/org/openstreetmap/josm/tools/ImageProviderTest.java
+++ b/test/unit/org/openstreetmap/josm/tools/ImageProviderTest.java
@@ -51,8 +51,11 @@ public class ImageProviderTest {
         assertNotNull(img);
     }
 
+    /**
+     * Test fetching an image using {@code wiki://} protocol.
+     */
     @Test
-    public void testWikiProtocol() throws Exception {
+    public void testWikiProtocol() {
         // https://commons.wikimedia.org/wiki/File:OpenJDK_logo.svg
         assertNotNull(ImageProvider.get("wiki://OpenJDK_logo.svg"));
     }
diff --git a/test/unit/org/openstreetmap/josm/tools/UtilsTest.java b/test/unit/org/openstreetmap/josm/tools/UtilsTest.java
index 7641abf..5efcd1f 100644
--- a/test/unit/org/openstreetmap/josm/tools/UtilsTest.java
+++ b/test/unit/org/openstreetmap/josm/tools/UtilsTest.java
@@ -7,6 +7,7 @@ import java.io.BufferedReader;
 import java.io.IOException;
 import java.net.URL;
 import java.util.Arrays;
+import java.util.Locale;
 
 import org.junit.Assert;
 import org.junit.Test;
@@ -162,4 +163,26 @@ public class UtilsTest {
         assertEquals("1\n2\n3", Utils.restrictStringLines("1\n2\n3", 3));
         assertEquals("1\n2\n3", Utils.restrictStringLines("1\n2\n3", 4));
     }
+
+    /**
+     * Test of {@link Utils#getSizeString} method.
+     */
+    @Test
+    public void testSizeString() throws Exception {
+        assertEquals("0 B", Utils.getSizeString(0, Locale.ENGLISH));
+        assertEquals("123 B", Utils.getSizeString(123, Locale.ENGLISH));
+        assertEquals("1023 B", Utils.getSizeString(1023, Locale.ENGLISH));
+        assertEquals("1.00 kB", Utils.getSizeString(1024, Locale.ENGLISH));
+        assertEquals("11.7 kB", Utils.getSizeString(12024, Locale.ENGLISH));
+        assertEquals("8.00 EB", Utils.getSizeString(Long.MAX_VALUE, Locale.ENGLISH));
+    }
+
+    /**
+     * Test of {@link Utils#getSizeString} method.
+     */
+    @Test(expected = IllegalArgumentException.class)
+    public void testSizeStringNegative() throws Exception {
+        Utils.getSizeString(-1, Locale.ENGLISH);
+    }
+
 }
diff --git a/tools/checkstyle/josm_checks.xml b/tools/checkstyle/josm_checks.xml
index c2ae031..5157427 100644
--- a/tools/checkstyle/josm_checks.xml
+++ b/tools/checkstyle/josm_checks.xml
@@ -112,6 +112,6 @@ JOSM Checkstyle rules
     <property name="lineSeparator" value="lf"/>
   </module>
   <module name="SuppressionFilter">
-    <property name="file" value="${basedir}/tools/checkstyle/josm_filters.xml"/>
+    <property name="file" value="${basedir}/tools/checkstyle/josm_filters.xml" default="tools/checkstyle/josm_filters.xml"/>
   </module>
 </module>
diff --git a/tools/checkstyle/josm_filters.xml b/tools/checkstyle/josm_filters.xml
index ded4750..f71ce83 100644
--- a/tools/checkstyle/josm_filters.xml
+++ b/tools/checkstyle/josm_filters.xml
@@ -3,20 +3,20 @@
      "-//Puppy Crawl//DTD Suppressions 1.0//EN"
      "http://www.puppycrawl.com/dtds/suppressions_1_0.dtd">
 <suppressions>
-  <suppress checks="HeaderCheck" files="Ellipsoid.java" />
-  <suppress checks="HeaderCheck" files="NTV2GridShift.java" />
-  <suppress checks="HeaderCheck" files="NTV2GridShiftFile.java" />
-  <suppress checks="HeaderCheck" files="NTV2SubGrid.java" />
-  <suppress checks="HeaderCheck" files="NTV2Util.java" />
-  <suppress checks="HeaderCheck" files="DomainValidator.java" />
-  <suppress checks="HeaderCheck" files="EmailValidator.java" />
-  <suppress checks="HeaderCheck" files="InetAddressValidator.java" />
-  <suppress checks="HeaderCheck" files="RegexValidator.java" />
-  <suppress checks="HeaderCheck" files="UrlValidator.java" />
-  <suppress checks="HeaderCheck" files="Entities.java" />
-  <suppress checks="HeaderCheck" files="FileDrop.java" />
-  <suppress checks="HeaderCheck" files="MenuScroller.java" />
-  <suppress checks="HeaderCheck" files="MultiSplitLayout.java" />
-  <suppress checks="HeaderCheck" files="MultiSplitPane.java" />
-  <suppress checks="HeaderCheck" files="DNSName.java" />
-</suppressions>
\ No newline at end of file
+  <suppress checks="HeaderCheck" files="Ellipsoid\.java" />
+  <suppress checks="HeaderCheck" files="NTV2GridShift\.java" />
+  <suppress checks="HeaderCheck" files="NTV2GridShiftFile\.java" />
+  <suppress checks="HeaderCheck" files="NTV2SubGrid\.java" />
+  <suppress checks="HeaderCheck" files="NTV2Util\.java" />
+  <suppress checks="HeaderCheck" files="DomainValidator\.java" />
+  <suppress checks="HeaderCheck" files="EmailValidator\.java" />
+  <suppress checks="HeaderCheck" files="InetAddressValidator\.java" />
+  <suppress checks="HeaderCheck" files="RegexValidator\.java" />
+  <suppress checks="HeaderCheck" files="UrlValidator\.java" />
+  <suppress checks="HeaderCheck" files="Entities\.java" />
+  <suppress checks="HeaderCheck" files="FileDrop\.java" />
+  <suppress checks="HeaderCheck" files="MenuScroller\.java" />
+  <suppress checks="HeaderCheck" files="MultiSplitLayout\.java" />
+  <suppress checks="HeaderCheck" files="MultiSplitPane\.java" />
+  <suppress checks="HeaderCheck" files="DNSName\.java" />
+</suppressions>

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