[josm] 01/01: Imported Upstream version 0.0.svn8339+dfsg1

Sebastiaan Couwenberg sebastic at moszumanska.debian.org
Mon Jun 1 22:15:57 UTC 2015


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

sebastic pushed a commit to annotated tag upstream/0.0.svn8339+dfsg1
in repository josm.

commit 7c8bf9ac9a787b421710030a975b82c5f3234409
Author: Bas Couwenberg <sebastic at xs4all.nl>
Date:   Tue May 12 09:06:08 2015 +0200

    Imported Upstream version 0.0.svn8339+dfsg1
---
 .classpath                                         |    6 +-
 REVISION                                           |   11 +-
 data/defaultpresets.xml                            |  244 ++++-
 data/tagging-preset.xsd                            |    1 +
 data/validator/combinations.mapcss                 |    2 +-
 {data/validator => data_nodist}/tagchecker.cfg     |    0
 data_nodist/trans/ast.lang                         |  Bin 0 -> 9399 bytes
 data_nodist/trans/bg.lang                          |  Bin 0 -> 2806 bytes
 data_nodist/trans/ca-valencia.lang                 |  Bin 0 -> 8323 bytes
 data_nodist/trans/ca.lang                          |  Bin 0 -> 9737 bytes
 data_nodist/trans/cs.lang                          |  Bin 0 -> 9742 bytes
 data_nodist/trans/da.lang                          |  Bin 0 -> 5205 bytes
 data_nodist/trans/de.lang                          |  Bin 0 -> 9781 bytes
 data_nodist/trans/el.lang                          |  Bin 0 -> 1395 bytes
 data_nodist/trans/en.lang                          |  Bin 0 -> 8247 bytes
 data_nodist/trans/en_AU.lang                       |  Bin 0 -> 1671 bytes
 data_nodist/trans/en_GB.lang                       |  Bin 0 -> 2259 bytes
 data_nodist/trans/es.lang                          |  Bin 0 -> 10692 bytes
 data_nodist/trans/et.lang                          |  Bin 0 -> 1428 bytes
 data_nodist/trans/fi.lang                          |  Bin 0 -> 2605 bytes
 data_nodist/trans/fr.lang                          |  Bin 0 -> 9453 bytes
 data_nodist/trans/gl.lang                          |  Bin 0 -> 3230 bytes
 data_nodist/trans/hu.lang                          |  Bin 0 -> 10662 bytes
 data_nodist/trans/id.lang                          |  Bin 0 -> 7149 bytes
 data_nodist/trans/it.lang                          |  Bin 0 -> 10263 bytes
 data_nodist/trans/ja.lang                          |  Bin 0 -> 11523 bytes
 data_nodist/trans/km.lang                          |  Bin 0 -> 17419 bytes
 data_nodist/trans/lt.lang                          |  Bin 0 -> 708 bytes
 data_nodist/trans/nl.lang                          |  Bin 0 -> 9085 bytes
 data_nodist/trans/pl.lang                          |  Bin 0 -> 2855 bytes
 data_nodist/trans/pt.lang                          |  Bin 0 -> 12660 bytes
 data_nodist/trans/pt_BR.lang                       |  Bin 0 -> 8869 bytes
 data_nodist/trans/ru.lang                          |  Bin 0 -> 15654 bytes
 data_nodist/trans/sk.lang                          |  Bin 0 -> 9163 bytes
 data_nodist/trans/sv.lang                          |  Bin 0 -> 1332 bytes
 data_nodist/trans/uk.lang                          |  Bin 0 -> 16154 bytes
 data_nodist/trans/zh_CN.lang                       |  Bin 0 -> 5411 bytes
 data_nodist/trans/zh_TW.lang                       |  Bin 0 -> 4866 bytes
 eclipse/JOSM (Java 7).launch                       |   21 +
 eclipse/JOSM (Java 8).launch                       |   21 +
 i18n/.tx/config                                    |    6 +-
 i18n/build.xml                                     |   97 +-
 i18n/convcss.pl                                    |   14 +
 i18n/convmaps.pl                                   |    2 +-
 i18n/convpreset.pl                                 |    7 +-
 i18n/convstyle.pl                                  |    1 +
 i18n/convvalidator.pl                              |   40 -
 i18n/convwiki.pl                                   |   53 +
 i18n/i18n.pl                                       |  116 ++-
 i18n/po/af.po                                      |  145 ++-
 i18n/po/am.po                                      |  145 ++-
 i18n/po/ar.po                                      |  145 ++-
 i18n/po/ast.po                                     |  156 ++-
 i18n/po/az.po                                      |  145 ++-
 i18n/po/be.po                                      |  145 ++-
 i18n/po/bg.po                                      |  167 ++-
 i18n/po/bn.po                                      |  145 ++-
 i18n/po/br.po                                      |  145 ++-
 i18n/po/bs.po                                      |  145 ++-
 i18n/po/ca.po                                      |  162 ++-
 i18n/po/ca at valencia.po                             |  151 ++-
 i18n/po/cs.po                                      |  176 +++-
 i18n/po/cy.po                                      |  145 ++-
 i18n/po/da.po                                      |  490 ++++++---
 i18n/po/de.po                                      |  188 +++-
 i18n/po/de_DE.po                                   |  145 ++-
 i18n/po/el.po                                      |  145 ++-
 i18n/po/en_AU.po                                   |  147 ++-
 i18n/po/en_CA.po                                   |  145 ++-
 i18n/po/en_GB.po                                   |  328 ++++--
 i18n/po/eo.po                                      |  145 ++-
 i18n/po/es.po                                      |  174 +++-
 i18n/po/et.po                                      |  145 ++-
 i18n/po/eu.po                                      |  145 ++-
 i18n/po/fa.po                                      |  145 ++-
 i18n/po/fi.po                                      |  153 ++-
 i18n/po/fil.po                                     |  145 ++-
 i18n/po/fo.po                                      |  145 ++-
 i18n/po/fr.po                                      |  376 ++++---
 i18n/po/gl.po                                      |  147 ++-
 i18n/po/he.po                                      |  145 ++-
 i18n/po/hi.po                                      |  145 ++-
 i18n/po/hr.po                                      |  145 ++-
 i18n/po/ht.po                                      |  145 ++-
 i18n/po/hu.po                                      |  311 ++++--
 i18n/po/hy.po                                      |  145 ++-
 i18n/po/ia.po                                      |  145 ++-
 i18n/po/id.po                                      |  149 ++-
 i18n/po/is.po                                      |  145 ++-
 i18n/po/it.po                                      |  159 ++-
 i18n/po/ja.po                                      |  174 +++-
 i18n/po/ka.po                                      |  145 ++-
 i18n/po/km.po                                      |  159 ++-
 i18n/po/ko.po                                      |  145 ++-
 i18n/po/ky.po                                      |  145 ++-
 i18n/po/lo.po                                      |  145 ++-
 i18n/po/lt.po                                      | 1088 +++++++++++++-------
 i18n/po/lv.po                                      |  145 ++-
 i18n/po/mk.po                                      |  145 ++-
 i18n/po/ms.po                                      |  145 ++-
 i18n/po/nb.po                                      |  145 ++-
 i18n/po/nds.po                                     |  145 ++-
 i18n/po/nl.po                                      |  279 +++--
 i18n/po/nn.po                                      |  145 ++-
 i18n/po/oc.po                                      |  145 ++-
 i18n/po/pa.po                                      |  145 ++-
 i18n/po/pl.po                                      |  153 ++-
 i18n/po/pt.po                                      |  160 ++-
 i18n/po/pt_BR.po                                   |  160 ++-
 i18n/po/rm.po                                      |  145 ++-
 i18n/po/ro.po                                      |  145 ++-
 i18n/po/ru.po                                      |  187 +++-
 i18n/po/sk.po                                      |  196 +++-
 i18n/po/sl.po                                      |  145 ++-
 i18n/po/sq.po                                      |  145 ++-
 i18n/po/sr.po                                      |  145 ++-
 i18n/po/sv.po                                      |  145 ++-
 i18n/po/ta.po                                      |  145 ++-
 i18n/po/te.po                                      |  145 ++-
 i18n/po/th.po                                      |  145 ++-
 i18n/po/tr.po                                      |  145 ++-
 i18n/po/ug.po                                      |  145 ++-
 i18n/po/uk.po                                      |  184 +++-
 i18n/po/ur.po                                      |  145 ++-
 i18n/po/vi.po                                      |  145 ++-
 i18n/po/zh_CN.po                                   |  145 ++-
 i18n/po/zh_TW.po                                   |  185 +++-
 images/presets/storage_tank.png                    |  Bin 0 -> 705 bytes
 linux/latest/DEBIAN/control                        |    2 +-
 linux/latest/usr/bin/josm-latest                   |   22 +-
 linux/latest/usr/share/doc/josm-latest/copyright   |    2 +-
 linux/tested/DEBIAN/control                        |    2 +-
 linux/tested/usr/bin/josm                          |   22 +-
 linux/tested/usr/share/doc/josm/copyright          |    2 +-
 .../taginfoextract.groovy                          |    8 +-
 src/org/openstreetmap/josm/Main.java               |    2 +-
 .../josm/actions/AddImageryLayerAction.java        |    3 +-
 .../josm/actions/AlignInCircleAction.java          |   21 +-
 .../josm/actions/AlignInLineAction.java            |    2 +-
 .../josm/actions/AutoScaleAction.java              |    6 +-
 .../josm/actions/ChangesetManagerToggleAction.java |    2 +-
 .../josm/actions/CloseChangesetAction.java         |    2 +-
 .../josm/actions/CombineWayAction.java             |    9 +-
 .../josm/actions/CreateCircleAction.java           |   96 +-
 .../josm/actions/DownloadReferrersAction.java      |   25 +-
 .../josm/actions/ExtensionFileFilter.java          |    4 +-
 .../josm/actions/FullscreenToggleAction.java       |    2 +-
 .../josm/actions/GpxExportAction.java              |    4 +-
 .../josm/actions/ImageryAdjustAction.java          |    2 +-
 .../josm/actions/JoinAreasAction.java              |    6 +-
 .../josm/actions/JoinNodeWayAction.java            |    6 +-
 src/org/openstreetmap/josm/actions/JosmAction.java |   43 +-
 .../josm/actions/MapRectifierWMSmenuAction.java    |    2 +-
 .../josm/actions/MergeNodesAction.java             |    6 +-
 .../openstreetmap/josm/actions/OpenFileAction.java |    2 +-
 .../josm/actions/OpenLocationAction.java           |    2 +-
 .../josm/actions/OrthogonalizeAction.java          |   14 +-
 .../josm/actions/PasteTagsAction.java              |    4 +-
 .../openstreetmap/josm/actions/PurgeAction.java    |   14 +-
 .../josm/actions/RenameLayerAction.java            |    6 +-
 .../josm/actions/SearchNotesDownloadAction.java    |   10 +-
 .../josm/actions/SelectByInternalPointAction.java  |    3 +-
 .../actions/SelectNonBranchingWaySequences.java    |    6 +-
 .../josm/actions/SessionSaveAsAction.java          |    6 +-
 .../josm/actions/SimplifyWayAction.java            |    3 +-
 .../openstreetmap/josm/actions/ToggleAction.java   |    2 +-
 .../ToggleUploadDiscouragedLayerAction.java        |    4 +-
 .../openstreetmap/josm/actions/UnGlueAction.java   |   28 +-
 .../josm/actions/UnJoinNodeWayAction.java          |  107 +-
 .../josm/actions/UpdateSelectionAction.java        |   10 +-
 .../openstreetmap/josm/actions/UploadAction.java   |    3 +-
 .../josm/actions/UploadNotesAction.java            |    2 +-
 .../josm/actions/UploadSelectionAction.java        |   17 +-
 .../openstreetmap/josm/actions/ValidateAction.java |    2 +-
 .../actions/downloadtasks/DownloadNotesTask.java   |    2 +-
 .../downloadtasks/DownloadNotesUrlIdTask.java      |    8 +-
 .../downloadtasks/DownloadOsmChangeTask.java       |   10 +-
 .../downloadtasks/DownloadOsmCompressedTask.java   |   10 +-
 .../downloadtasks/DownloadReferrersTask.java       |   29 +-
 .../actions/downloadtasks/DownloadTaskList.java    |    6 +-
 .../actions/downloadtasks/PostDownloadHandler.java |    3 +-
 .../josm/actions/mapmode/AddNoteAction.java        |    2 +-
 .../josm/actions/mapmode/DeleteAction.java         |   12 +-
 .../josm/actions/mapmode/DrawAction.java           |   61 +-
 .../josm/actions/mapmode/ExtrudeAction.java        |   31 +-
 .../actions/mapmode/ImproveWayAccuracyAction.java  |   26 +-
 .../josm/actions/mapmode/ParallelWayAction.java    |   34 +-
 .../josm/actions/mapmode/ParallelWays.java         |    9 +-
 .../josm/actions/mapmode/PlayHeadDragMode.java     |    2 +-
 .../josm/actions/mapmode/SelectAction.java         |   16 +-
 .../josm/actions/mapmode/ZoomAction.java           |    5 +-
 .../actions/relation/AbstractRelationAction.java   |    8 +-
 .../DownloadSelectedIncompleteMembersAction.java   |    2 +-
 .../josm/actions/relation/SelectMembersAction.java |    7 +-
 .../josm/actions/search/SearchAction.java          |    9 +-
 .../josm/actions/upload/DiscardTagsHook.java       |    4 +-
 .../josm/actions/upload/FixDataHook.java           |   14 +-
 .../josm/actions/upload/UploadNotesTask.java       |    4 +-
 .../josm/command/ChangePropertyCommand.java        |    5 +-
 src/org/openstreetmap/josm/command/Command.java    |   37 +-
 .../openstreetmap/josm/command/DeleteCommand.java  |   26 +-
 .../openstreetmap/josm/command/MoveCommand.java    |    8 +-
 .../openstreetmap/josm/command/PurgeCommand.java   |    2 +-
 .../openstreetmap/josm/command/RotateCommand.java  |    2 +-
 .../openstreetmap/josm/command/ScaleCommand.java   |    5 +-
 .../josm/command/TransformNodesCommand.java        |    4 +-
 .../josm/corrector/CorrectionTableModel.java       |    2 +-
 src/org/openstreetmap/josm/data/APIDataSet.java    |    8 +-
 src/org/openstreetmap/josm/data/AutosaveTask.java  |   15 +-
 src/org/openstreetmap/josm/data/Bounds.java        |   12 +-
 .../josm/data/CustomConfigurator.java              |   19 +-
 src/org/openstreetmap/josm/data/Preferences.java   |   27 +-
 .../josm/data/cache/CacheEntryAttributes.java      |   17 +-
 .../josm/data/cache/JCSCacheManager.java           |    9 +-
 .../josm/data/cache/JCSCachedTileLoaderJob.java    |   85 +-
 .../josm/data/conflict/ConflictCollection.java     |   17 +-
 .../openstreetmap/josm/data/coor/CachedLatLon.java |    2 +-
 .../openstreetmap/josm/data/coor/EastNorth.java    |    2 +
 src/org/openstreetmap/josm/data/coor/LatLon.java   |    2 +
 .../openstreetmap/josm/data/gpx/Extensions.java    |    2 +
 .../josm/data/imagery/OffsetBookmark.java          |    2 +-
 src/org/openstreetmap/josm/data/imagery/Shape.java |    4 +-
 .../josm/data/imagery/TMSCachedTileLoader.java     |    4 +-
 .../josm/data/imagery/TMSCachedTileLoaderJob.java  |  176 +++-
 .../openstreetmap/josm/data/imagery/WmsCache.java  |   38 +-
 .../josm/data/oauth/OAuthParameters.java           |    6 +-
 .../openstreetmap/josm/data/oauth/OAuthToken.java  |    4 +-
 .../josm/data/osm/AbstractPrimitive.java           |   54 +-
 .../josm/data/osm/ChangesetCache.java              |    3 +-
 .../josm/data/osm/ChangesetDataSet.java            |   14 +-
 src/org/openstreetmap/josm/data/osm/DataSet.java   |    6 +-
 .../openstreetmap/josm/data/osm/DataSetMerger.java |   20 +-
 .../openstreetmap/josm/data/osm/FilterMatcher.java |    6 +-
 src/org/openstreetmap/josm/data/osm/Node.java      |   10 +-
 .../josm/data/osm/NodePositionComparator.java      |    6 +-
 src/org/openstreetmap/josm/data/osm/NoteData.java  |    3 +-
 .../openstreetmap/josm/data/osm/OsmPrimitive.java  |   36 +-
 .../josm/data/osm/OsmPrimitiveComparator.java      |    6 +-
 src/org/openstreetmap/josm/data/osm/OsmUtils.java  |    6 +-
 .../josm/data/osm/PrimitiveDeepCopy.java           |    2 +-
 .../openstreetmap/josm/data/osm/QuadBuckets.java   |   41 +-
 src/org/openstreetmap/josm/data/osm/Relation.java  |    6 +-
 .../josm/data/osm/RelationMember.java              |    2 +-
 .../josm/data/osm/SimplePrimitiveId.java           |    5 +-
 src/org/openstreetmap/josm/data/osm/Storage.java   |   12 +-
 .../openstreetmap/josm/data/osm/TagCollection.java |   26 +-
 .../openstreetmap/josm/data/osm/TigerUtils.java    |    2 +-
 src/org/openstreetmap/josm/data/osm/Way.java       |   42 +-
 .../josm/data/osm/event/DatasetEventManager.java   |    4 +-
 .../josm/data/osm/event/SelectionEventManager.java |    2 +-
 .../josm/data/osm/history/History.java             |    3 +-
 .../josm/data/osm/history/HistoryDataSet.java      |   13 +-
 .../josm/data/osm/history/HistoryNode.java         |    4 +-
 .../josm/data/osm/history/HistoryOsmPrimitive.java |    4 +-
 .../josm/data/osm/history/HistoryRelation.java     |   12 +-
 .../josm/data/osm/history/HistoryWay.java          |    8 +-
 .../osm/visitor/MergeSourceBuildingVisitor.java    |    5 +-
 .../osm/visitor/paint/AbstractMapRenderer.java     |    6 +-
 .../data/osm/visitor/paint/MapPaintSettings.java   |    2 +-
 .../data/osm/visitor/paint/MapRendererFactory.java |   24 +-
 .../data/osm/visitor/paint/StyledMapRenderer.java  |   16 +-
 .../osm/visitor/paint/WireframeMapRenderer.java    |    6 +-
 .../josm/data/projection/datum/NTV2GridShift.java  |    6 +-
 .../data/projection/datum/NTV2GridShiftFile.java   |   60 +-
 .../josm/data/projection/datum/NTV2SubGrid.java    |  103 +-
 .../josm/data/validation/OsmValidator.java         |    2 +
 .../josm/data/validation/PaintVisitor.java         |   18 +-
 .../data/validation/routines/DomainValidator.java  |    2 +-
 .../data/validation/tests/ConditionalKeys.java     |    8 +-
 .../josm/data/validation/tests/DuplicateNode.java  |    2 +-
 .../data/validation/tests/DuplicateRelation.java   |    4 +-
 .../josm/data/validation/tests/DuplicateWay.java   |    4 +-
 .../josm/data/validation/tests/Highways.java       |   15 +-
 .../josm/data/validation/tests/Lanes.java          |    2 +-
 .../josm/data/validation/tests/LongSegment.java    |   53 +
 .../data/validation/tests/MapCSSTagChecker.java    |   15 +-
 .../data/validation/tests/MultipolygonTest.java    |    2 +-
 .../josm/data/validation/tests/NameMismatch.java   |    3 +-
 .../data/validation/tests/OpeningHourTest.java     |    7 +-
 .../data/validation/tests/RelationChecker.java     |    7 +-
 .../data/validation/tests/SelfIntersectingWay.java |    6 +-
 .../data/validation/tests/SimilarNamedWays.java    |    2 +-
 .../josm/data/validation/tests/TagChecker.java     |   10 +-
 .../data/validation/tests/UnconnectedWays.java     |    6 +-
 .../util/AggregatePrimitivesVisitor.java           |    2 +-
 .../josm/data/validation/util/ValUtil.java         |    4 +-
 src/org/openstreetmap/josm/gui/ExtendedDialog.java |   12 +-
 src/org/openstreetmap/josm/gui/FileDrop.java       |    4 +-
 .../openstreetmap/josm/gui/IconToggleButton.java   |    2 +-
 src/org/openstreetmap/josm/gui/ImageryMenu.java    |    8 +-
 .../josm/gui/JosmUserIdentityManager.java          |   14 +-
 .../openstreetmap/josm/gui/MainApplication.java    |   78 +-
 src/org/openstreetmap/josm/gui/MainMenu.java       |    4 +-
 src/org/openstreetmap/josm/gui/MapFrame.java       |   20 +-
 src/org/openstreetmap/josm/gui/MapSlider.java      |    2 +-
 src/org/openstreetmap/josm/gui/MapStatus.java      |   52 +-
 src/org/openstreetmap/josm/gui/MapView.java        |   40 +-
 src/org/openstreetmap/josm/gui/MenuScroller.java   |    6 +-
 .../josm/gui/NavigatableComponent.java             |   16 +-
 .../openstreetmap/josm/gui/PleaseWaitDialog.java   |    2 +-
 .../openstreetmap/josm/gui/PleaseWaitRunnable.java |    4 +-
 src/org/openstreetmap/josm/gui/ScrollViewport.java |    2 +-
 src/org/openstreetmap/josm/gui/SideButton.java     |    2 +-
 src/org/openstreetmap/josm/gui/SplashScreen.java   |    2 +-
 .../DeleteFromRelationConfirmationDialog.java      |    6 +-
 .../openstreetmap/josm/gui/bbox/SizeButton.java    |    2 +-
 .../josm/gui/bbox/SlippyMapBBoxChooser.java        |   12 +-
 .../josm/gui/bbox/SlippyMapControler.java          |    5 +-
 .../openstreetmap/josm/gui/bbox/SourceButton.java  |    4 +-
 .../josm/gui/bbox/TileSelectionBBoxChooser.java    |   18 +-
 .../josm/gui/conflict/pair/ComparePairType.java    |    2 +-
 .../josm/gui/conflict/pair/ConflictResolver.java   |    8 +-
 .../josm/gui/conflict/pair/ListMergeModel.java     |   30 +-
 .../josm/gui/conflict/pair/ListMerger.java         |    4 +-
 .../josm/gui/conflict/pair/PairTable.java          |    4 +-
 .../conflict/pair/nodes/NodeListMergeModel.java    |    6 +-
 .../pair/nodes/NodeListTableCellRenderer.java      |    2 +-
 .../pair/properties/PropertiesMergeModel.java      |    6 +-
 .../conflict/pair/properties/PropertiesMerger.java |    2 +-
 .../relation/RelationMemberListMergeModel.java     |    6 +-
 .../relation/RelationMemberTableCellRenderer.java  |    2 +-
 .../josm/gui/conflict/pair/tags/TagMergeItem.java  |   17 +-
 .../josm/gui/conflict/pair/tags/TagMergeModel.java |    7 +-
 .../josm/gui/conflict/pair/tags/TagMerger.java     |    2 +-
 .../tags/CombinePrimitiveResolverDialog.java       |    4 +-
 .../tags/MultiValueResolutionDecision.java         |   32 +-
 .../tags/PasteTagsConflictResolverDialog.java      |   26 +-
 .../tags/RelationMemberConflictDecision.java       |    2 +-
 .../tags/RelationMemberConflictDecisionEditor.java |    2 +-
 .../RelationMemberConflictResolverColumnModel.java |    4 +-
 .../tags/RelationMemberConflictResolverModel.java  |    4 +-
 .../conflict/tags/TagConflictResolverModel.java    |   10 +-
 .../gui/dialogs/CommandListMutableTreeNode.java    |    2 +-
 .../josm/gui/dialogs/CommandStackDialog.java       |    6 +-
 .../josm/gui/dialogs/ConflictDialog.java           |    6 +-
 .../josm/gui/dialogs/DialogsPanel.java             |    4 +-
 .../josm/gui/dialogs/FilterDialog.java             |    2 +-
 .../josm/gui/dialogs/FilterTableModel.java         |    4 +-
 .../josm/gui/dialogs/InspectPrimitiveDialog.java   |   10 +-
 .../josm/gui/dialogs/LatLonDialog.java             |    3 +-
 .../josm/gui/dialogs/LayerListDialog.java          |  119 ++-
 .../josm/gui/dialogs/LayerListPopup.java           |    2 +-
 .../josm/gui/dialogs/MapPaintDialog.java           |   17 +-
 .../josm/gui/dialogs/NotesDialog.java              |    9 +-
 .../josm/gui/dialogs/OsmIdSelectionDialog.java     |    2 +-
 .../josm/gui/dialogs/RelationListDialog.java       |   12 +-
 .../josm/gui/dialogs/SelectionListDialog.java      |   10 +-
 .../josm/gui/dialogs/ToggleDialog.java             |    4 +-
 .../josm/gui/dialogs/UserListDialog.java           |   28 +-
 .../josm/gui/dialogs/ValidatorDialog.java          |    9 +-
 .../changeset/ChangesetCacheManagerModel.java      |    4 +-
 .../changeset/ChangesetContentDownloadTask.java    |   16 +-
 .../dialogs/changeset/ChangesetContentPanel.java   |    4 +-
 .../changeset/ChangesetContentTableModel.java      |    2 +-
 .../dialogs/changeset/ChangesetDetailPanel.java    |    2 +-
 .../changeset/ChangesetDiscussionPanel.java        |    2 +-
 .../changeset/ChangesetDiscussionTableModel.java   |    2 +-
 .../changeset/ChangesetHeaderDownloadTask.java     |   13 +-
 .../gui/dialogs/changeset/ChangesetListModel.java  |    4 +-
 .../query/AdvancedChangesetQueryPanel.java         |   25 +-
 .../changeset/query/BasicChangesetQueryPanel.java  |    4 +-
 .../changeset/query/ChangesetQueryTask.java        |   12 +-
 .../gui/dialogs/properties/PropertiesDialog.java   |   38 +-
 .../josm/gui/dialogs/properties/TagEditHelper.java |   32 +-
 .../gui/dialogs/relation/ChildRelationBrowser.java |   14 +-
 .../gui/dialogs/relation/DownloadRelationTask.java |    6 +-
 .../dialogs/relation/GenericRelationEditor.java    |    3 +-
 .../gui/dialogs/relation/MemberRoleCellEditor.java |    4 +-
 .../josm/gui/dialogs/relation/MemberTable.java     |   10 +-
 .../relation/MemberTableLinkedCellRenderer.java    |   12 +-
 .../gui/dialogs/relation/MemberTableModel.java     |   20 +-
 .../relation/ParentRelationLoadingTask.java        |    6 +-
 .../relation/ReferringRelationsBrowser.java        |    2 +-
 .../relation/ReferringRelationsBrowserModel.java   |    4 +-
 .../dialogs/relation/RelationDialogManager.java    |   20 +-
 .../josm/gui/dialogs/relation/RelationEditor.java  |   11 +-
 .../gui/dialogs/relation/SelectionTableModel.java  |    8 +-
 .../gui/dialogs/relation/sort/RelationNodeMap.java |    8 +-
 .../gui/dialogs/relation/sort/RelationSorter.java  |    2 +-
 .../relation/sort/WayConnectionTypeCalculator.java |    7 +-
 .../gui/dialogs/validator/ValidatorTreePanel.java  |    4 +-
 .../josm/gui/download/BookmarkList.java            |    8 +-
 .../josm/gui/download/DownloadDialog.java          |    4 +-
 .../josm/gui/download/PlaceSelection.java          |   13 +-
 .../openstreetmap/josm/gui/help/HelpBrowser.java   |    8 +-
 .../josm/gui/help/HelpBrowserHistory.java          |    2 +-
 .../josm/gui/help/HelpContentReader.java           |   10 +-
 .../josm/gui/history/CoordinateInfoViewer.java     |    8 +-
 .../josm/gui/history/DiffTableModel.java           |    4 +-
 .../josm/gui/history/HistoryBrowser.java           |    2 +-
 .../gui/history/HistoryBrowserDialogManager.java   |   23 +-
 .../josm/gui/history/HistoryBrowserModel.java      |   31 +-
 .../josm/gui/history/HistoryLoadTask.java          |   16 +-
 .../josm/gui/history/HistoryViewerPanel.java       |   22 +-
 .../josm/gui/history/NodeListViewer.java           |   20 +-
 .../RelationMemberListTableCellRenderer.java       |    2 +-
 .../josm/gui/history/TwoColumnDiff.java            |    6 +-
 .../josm/gui/history/VersionInfoPanel.java         |   33 +-
 .../josm/gui/history/VersionTable.java             |   12 +-
 .../josm/gui/io/ActionFlagsTableCell.java          |    4 +-
 .../josm/gui/io/BasicUploadSettingsPanel.java      |   12 +-
 .../josm/gui/io/ChangesetManagementPanel.java      |    4 +-
 .../josm/gui/io/CredentialDialog.java              |    4 +-
 .../josm/gui/io/DownloadPrimitivesTask.java        |    8 +-
 .../io/DownloadPrimitivesWithReferrersTask.java    |    2 +-
 .../josm/gui/io/LayerNameAndFilePathTableCell.java |    2 +-
 .../josm/gui/io/OpenChangesetComboBoxModel.java    |    4 +-
 .../josm/gui/io/RecentlyOpenedFilesMenu.java       |    2 +-
 .../openstreetmap/josm/gui/io/SaveLayerInfo.java   |    2 +-
 .../openstreetmap/josm/gui/io/SaveLayerTask.java   |    2 +-
 .../josm/gui/io/SaveLayersDialog.java              |   12 +-
 .../openstreetmap/josm/gui/io/SaveLayersModel.java |    2 +-
 .../josm/gui/io/TagSettingsPanel.java              |   10 +-
 .../josm/gui/io/UpdatePrimitivesTask.java          |    4 +-
 .../openstreetmap/josm/gui/io/UploadDialog.java    |   18 +-
 .../openstreetmap/josm/gui/io/UploadLayerTask.java |    6 +-
 .../josm/gui/io/UploadParameterSummaryPanel.java   |    6 +-
 .../josm/gui/io/UploadPrimitivesTask.java          |   10 +-
 .../josm/gui/io/UploadSelectionDialog.java         |    2 +-
 .../josm/gui/io/UploadStrategySelectionPanel.java  |   13 +-
 .../josm/gui/io/UploadedObjectsSummaryPanel.java   |    2 +-
 .../josm/gui/layer/CustomizeColor.java             |    2 +-
 .../openstreetmap/josm/gui/layer/ImageryLayer.java |    2 +-
 .../josm/gui/layer/JumpToMarkerActions.java        |    6 +-
 src/org/openstreetmap/josm/gui/layer/Layer.java    |    6 +-
 .../openstreetmap/josm/gui/layer/OsmDataLayer.java |   42 +-
 src/org/openstreetmap/josm/gui/layer/TMSLayer.java |   37 +-
 src/org/openstreetmap/josm/gui/layer/WMSLayer.java |   18 +-
 .../gui/layer/geoimage/CorrelateGpxWithImages.java |   72 +-
 .../josm/gui/layer/geoimage/GeoImageLayer.java     |   18 +-
 .../josm/gui/layer/geoimage/ImageDisplay.java      |    8 +-
 .../josm/gui/layer/geoimage/ImageViewerDialog.java |    4 +-
 .../gui/layer/geoimage/ShowThumbnailAction.java    |    3 +-
 .../josm/gui/layer/geoimage/ThumbsLoader.java      |   10 +-
 .../gui/layer/gpx/ChooseTrackVisibilityAction.java |   13 +-
 .../gui/layer/gpx/ConvertToDataLayerAction.java    |    2 +-
 .../josm/gui/layer/gpx/CustomizeDrawingAction.java |    2 +-
 .../josm/gui/layer/gpx/DateFilterPanel.java        |   52 +-
 .../gui/layer/gpx/DownloadAlongTrackAction.java    |    8 +-
 .../gui/layer/gpx/DownloadWmsAlongTrackAction.java |    2 +-
 .../josm/gui/layer/gpx/GpxDrawHelper.java          |    8 +-
 .../josm/gui/layer/gpx/ImportAudioAction.java      |    2 +-
 .../josm/gui/layer/gpx/ImportImagesAction.java     |    4 +-
 .../layer/gpx/MarkersFromNamedPointsAction.java    |    2 +-
 .../josm/gui/layer/markerlayer/MarkerLayer.java    |    2 +-
 .../josm/gui/mappaint/AreaElemStyle.java           |    2 +-
 .../openstreetmap/josm/gui/mappaint/Cascade.java   |    9 +-
 .../josm/gui/mappaint/Environment.java             |    2 +-
 .../gui/mappaint/LabelCompositionStrategy.java     |    2 +-
 .../openstreetmap/josm/gui/mappaint/MapImage.java  |   12 +-
 .../josm/gui/mappaint/MapPaintMenu.java            |    4 +-
 .../josm/gui/mappaint/StyleCache.java              |    4 +-
 .../josm/gui/mappaint/StyleSource.java             |   10 +
 .../josm/gui/mappaint/TextElement.java             |    4 +-
 .../josm/gui/mappaint/mapcss/Condition.java        |    7 +-
 .../gui/mappaint/mapcss/ExpressionFactory.java     |   20 +-
 .../gui/mappaint/mapcss/LiteralExpression.java     |    3 +-
 .../josm/gui/mappaint/mapcss/MapCSSParser.jj       |   14 +
 .../gui/mappaint/mapcss/MapCSSStyleSource.java     |  242 ++++-
 .../josm/gui/mappaint/mapcss/Selector.java         |    4 +-
 .../josm/gui/mappaint/xml/XmlStyleSource.java      |    2 +-
 .../gui/mappaint/xml/XmlStyleSourceHandler.java    |   18 +-
 .../josm/gui/oauth/AbstractAuthorizationUI.java    |   10 +-
 .../gui/oauth/AdvancedOAuthPropertiesPanel.java    |   14 +-
 .../gui/oauth/FullyAutomaticAuthorizationUI.java   |    4 +-
 .../josm/gui/oauth/ManualAuthorizationUI.java      |   10 +-
 .../josm/gui/oauth/OAuthAuthorizationWizard.java   |    8 +-
 .../gui/oauth/OsmOAuthAuthorizationClient.java     |   36 +-
 .../josm/gui/oauth/RetrieveAccessTokenTask.java    |    4 +-
 .../josm/gui/oauth/RetrieveRequestTokenTask.java   |    2 +-
 .../gui/oauth/SemiAutomaticAuthorizationUI.java    |    4 +-
 .../josm/gui/preferences/PreferenceTabbedPane.java |   14 +-
 .../josm/gui/preferences/SourceEditor.java         |   22 +-
 .../josm/gui/preferences/ToolbarPreferences.java   |   16 +-
 .../preferences/advanced/AdvancedPreference.java   |   56 +-
 .../preferences/advanced/ExportProfileAction.java  |    2 +-
 .../josm/gui/preferences/advanced/ListEditor.java  |    4 +-
 .../gui/preferences/advanced/ListListEditor.java   |   14 +-
 .../gui/preferences/advanced/MapListEditor.java    |   16 +-
 .../gui/preferences/advanced/PreferencesTable.java |    2 +-
 .../gui/preferences/advanced/StringEditor.java     |    4 +-
 .../gui/preferences/display/GPXSettingsPanel.java  |    2 +-
 .../gui/preferences/display/LafPreference.java     |    2 +-
 .../preferences/display/LanguagePreference.java    |    2 +-
 .../gui/preferences/imagery/AddImageryPanel.java   |    2 +-
 .../gui/preferences/imagery/AddTMSLayerPanel.java  |    2 +-
 .../gui/preferences/imagery/AddWMSLayerPanel.java  |    4 +-
 .../gui/preferences/imagery/ImageryPreference.java |   13 +-
 .../gui/preferences/imagery/TMSSettingsPanel.java  |   15 +-
 .../gui/preferences/map/MapPaintPreference.java    |   53 -
 .../gui/preferences/plugin/PluginListPanel.java    |    4 +-
 .../gui/preferences/plugin/PluginPreference.java   |    2 +-
 .../plugin/PluginUpdatePolicyPanel.java            |    6 +-
 .../projection/CodeProjectionChoice.java           |   18 +-
 .../projection/ListProjectionChoice.java           |    2 +-
 .../gui/preferences/server/ApiUrlTestTask.java     |    4 +-
 .../server/AuthenticationPreference.java           |    2 +-
 .../preferences/server/OAuthAccessTokenHolder.java |   10 +-
 .../preferences/server/OsmApiUrlInputPanel.java    |    6 +-
 .../preferences/server/ProxyPreferencesPanel.java  |    2 +-
 .../josm/gui/preferences/shortcut/PrefJPanel.java  |    4 +-
 .../josm/gui/progress/AbstractProgressMonitor.java |   20 +-
 .../progress/SwingRenderingProgressMonitor.java    |    3 +-
 .../josm/gui/tagging/TagCellEditor.java            |    5 +-
 .../josm/gui/tagging/TagEditorModel.java           |   16 +-
 .../josm/gui/tagging/TagEditorPanel.java           |    8 +-
 .../openstreetmap/josm/gui/tagging/TagTable.java   |    4 +-
 .../josm/gui/tagging/TaggingPreset.java            |   17 +-
 .../josm/gui/tagging/TaggingPresetItems.java       |   27 +-
 .../josm/gui/tagging/TaggingPresetReader.java      |    2 +-
 .../TaggingPresetSearchPrimitiveDialog.java        |    3 +-
 .../josm/gui/tagging/TaggingPresetSelector.java    |   23 +-
 .../josm/gui/tagging/TaggingPresets.java           |    3 +-
 .../gui/tagging/ac/AutoCompletingTextField.java    |    2 +-
 .../josm/gui/tagging/ac/AutoCompletionList.java    |   14 +-
 .../gui/tagging/ac/AutoCompletionListItem.java     |    2 +-
 .../josm/gui/util/AdjustmentSynchronizer.java      |    8 +-
 .../josm/gui/util/AdvancedKeyPressDetector.java    |    5 +-
 src/org/openstreetmap/josm/gui/util/GuiHelper.java |   15 +-
 .../josm/gui/util/HighlightHelper.java             |    2 +-
 .../openstreetmap/josm/gui/util/RotationAngle.java |    4 +-
 .../josm/gui/widgets/AbstractFileChooser.java      |    9 +-
 .../josm/gui/widgets/AbstractIdTextField.java      |    6 +-
 .../widgets/AbstractTextComponentValidator.java    |    8 +-
 .../josm/gui/widgets/ComboBoxHistory.java          |    2 +-
 .../josm/gui/widgets/DateEditorWithSlider.java     |    2 +-
 .../DisableShortcutsOnFocusGainedTextField.java    |    6 +-
 .../josm/gui/widgets/JosmEditorPane.java           |   10 +-
 .../josm/gui/widgets/JosmTextArea.java             |    6 +-
 .../josm/gui/widgets/JosmTextField.java            |    4 +-
 .../josm/gui/widgets/MultiSplitLayout.java         |    2 +-
 .../josm/gui/widgets/MultiSplitPane.java           |   10 +-
 .../josm/gui/widgets/OsmPrimitivesTable.java       |   12 +-
 .../josm/gui/widgets/QuadStateCheckBox.java        |    2 +-
 .../josm/gui/widgets/TextContextualPopupMenu.java  |    4 +-
 src/org/openstreetmap/josm/io/AbstractParser.java  |   20 +-
 src/org/openstreetmap/josm/io/AbstractReader.java  |   22 +-
 .../josm/io/BoundingBoxDownloader.java             |    4 +-
 .../openstreetmap/josm/io/CacheCustomContent.java  |   42 +-
 src/org/openstreetmap/josm/io/CacheFiles.java      |   43 +-
 src/org/openstreetmap/josm/io/Capabilities.java    |   14 +-
 src/org/openstreetmap/josm/io/ChangesetQuery.java  |   42 +-
 .../openstreetmap/josm/io/DiffResultProcessor.java |    4 +-
 src/org/openstreetmap/josm/io/GpxReader.java       |    6 +-
 .../josm/io/MultiFetchServerObjectReader.java      |    4 +-
 src/org/openstreetmap/josm/io/NoteReader.java      |    8 +-
 src/org/openstreetmap/josm/io/OsmApi.java          |   41 +-
 .../openstreetmap/josm/io/OsmChangeBuilder.java    |   15 +-
 src/org/openstreetmap/josm/io/OsmChangeReader.java |    4 +-
 .../josm/io/OsmChangesetContentParser.java         |   13 +-
 .../openstreetmap/josm/io/OsmChangesetParser.java  |    6 +-
 src/org/openstreetmap/josm/io/OsmConnection.java   |    6 +-
 src/org/openstreetmap/josm/io/OsmExporter.java     |    4 +-
 .../openstreetmap/josm/io/OsmHistoryReader.java    |    9 +-
 src/org/openstreetmap/josm/io/OsmReader.java       |    4 +-
 .../josm/io/OsmServerBackreferenceReader.java      |   24 +-
 .../josm/io/OsmServerChangesetReader.java          |   14 +-
 .../josm/io/OsmServerHistoryReader.java            |    6 +-
 .../josm/io/OsmServerObjectReader.java             |   22 +-
 src/org/openstreetmap/josm/io/OsmServerReader.java |   10 +-
 src/org/openstreetmap/josm/io/OsmServerWriter.java |   16 +-
 .../josm/io/auth/CredentialsAgent.java             |   10 +-
 .../io/auth/JosmPreferencesCredentialAgent.java    |    4 +-
 .../josm/io/imagery/ImageryReader.java             |   23 +-
 .../josm/io/imagery/WMSException.java              |    2 +-
 .../openstreetmap/josm/io/imagery/WMSImagery.java  |    2 +-
 .../josm/io/remotecontrol/AddTagsDialog.java       |   29 +-
 .../josm/io/remotecontrol/DNSName.java             |    2 +-
 .../josm/io/remotecontrol/RemoteControl.java       |   32 +-
 .../io/remotecontrol/RemoteControlHttpServer.java  |   59 +-
 .../io/remotecontrol/RemoteControlHttpsServer.java |  143 +--
 .../io/remotecontrol/handler/AddWayHandler.java    |   12 +-
 .../remotecontrol/handler/LoadAndZoomHandler.java  |    2 +-
 .../io/remotecontrol/handler/LoadDataHandler.java  |   12 +-
 .../remotecontrol/handler/LoadObjectHandler.java   |   14 +-
 .../io/remotecontrol/handler/RequestHandler.java   |   44 +-
 .../josm/io/session/SessionReader.java             |    6 +-
 .../josm/plugins/PluginDownloadTask.java           |   10 +-
 .../josm/plugins/PluginException.java              |    2 +-
 .../openstreetmap/josm/plugins/PluginHandler.java  |   11 +-
 .../josm/plugins/PluginInformation.java            |    4 +-
 .../josm/plugins/PluginListParser.java             |    2 +-
 .../plugins/ReadRemotePluginInformationTask.java   |    5 +-
 .../josm/tools/AlphanumComparator.java             |    5 +-
 .../josm/tools/BugReportExceptionHandler.java      |    2 +-
 .../josm/tools/CheckParameterUtil.java             |    4 +-
 .../openstreetmap/josm/tools/CompositeList.java    |    2 +-
 src/org/openstreetmap/josm/tools/CopyList.java     |    6 +-
 src/org/openstreetmap/josm/tools/Diff.java         |   10 +-
 src/org/openstreetmap/josm/tools/FontsManager.java |    6 +-
 src/org/openstreetmap/josm/tools/Geometry.java     |   22 +-
 src/org/openstreetmap/josm/tools/I18n.java         |   33 +-
 src/org/openstreetmap/josm/tools/ImageOverlay.java |    6 +-
 .../openstreetmap/josm/tools/ImageProvider.java    |  152 +--
 src/org/openstreetmap/josm/tools/LanguageInfo.java |   77 +-
 src/org/openstreetmap/josm/tools/MultiMap.java     |    4 +-
 .../josm/tools/MultikeyActionsHandler.java         |    4 +-
 src/org/openstreetmap/josm/tools/OpenBrowser.java  |    4 +-
 .../openstreetmap/josm/tools/OsmUrlToBounds.java   |   12 +-
 src/org/openstreetmap/josm/tools/Pair.java         |   11 +-
 .../josm/tools/PlatformHookWindows.java            |    5 +-
 src/org/openstreetmap/josm/tools/Shortcut.java     |    2 +-
 .../josm/tools/SubclassFilteredCollection.java     |    2 +-
 .../openstreetmap/josm/tools/TextTagParser.java    |   12 +-
 src/org/openstreetmap/josm/tools/Utils.java        |  103 +-
 .../openstreetmap/josm/tools/WindowGeometry.java   |    2 +-
 .../openstreetmap/josm/tools/XmlObjectParser.java  |   17 +-
 .../openstreetmap/josm/tools/date/DateUtils.java   |    1 +
 .../template_engine/ContextSwitchTemplate.java     |    2 +-
 .../josm/tools/template_engine/ParseError.java     |    2 +-
 styles/standard/elemstyles.mapcss                  |   13 +-
 .../josm/actions/CreateCircleActionTest.java       |  185 ++++
 .../josm/actions/UnJoinNodeWayActionTest.java      |   87 ++
 .../validation/tests/MapCSSTagCheckerTest.java     |    9 +
 .../josm/io/session/SessionWriterTest.java         |    2 +-
 .../josm/tools/date/DateUtilsTest.java             |   20 +
 616 files changed, 14771 insertions(+), 6197 deletions(-)

diff --git a/.classpath b/.classpath
index cb621a3..6bc17e9 100644
--- a/.classpath
+++ b/.classpath
@@ -4,7 +4,11 @@
 	<classpathentry kind="src" path="test/unit"/>
 	<classpathentry kind="src" path="test/functional"/>
 	<classpathentry kind="src" path="test/performance"/>
-	<classpathentry excluding="build/|data_nodist/|dist/|linux/|macosx/|nb/|src/|test/|test/build/|test/functional/|test/performance/|test/unit/|tools/|utils/|windows/" kind="src" path=""/>
+	<classpathentry kind="src" output="bin2/data" path="data"/>
+	<classpathentry kind="src" output="bin2/images" path="images"/>
+	<classpathentry kind="src" output="bin2/styles" path="styles"/>
+	<classpathentry kind="src" output="bin2/resources" path="resources"/>
+	<classpathentry kind="src" output="bin2/scripts" path="scripts"/>
 	<classpathentry kind="con" path="org.eclipse.jdt.junit.JUNIT_CONTAINER/4"/>
 	<classpathentry kind="lib" path="test/lib/fest/fest-assert-1.0.jar"/>
 	<classpathentry kind="lib" path="test/lib/fest/fest-reflect-1.1.jar"/>
diff --git a/REVISION b/REVISION
index 9011700..8b41789 100644
--- a/REVISION
+++ b/REVISION
@@ -1,18 +1,19 @@
-<?xml version="1.0"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <info>
 <entry
    kind="dir"
    path="trunk"
-   revision="8279">
+   revision="8339">
 <url>http://josm.openstreetmap.de/svn/trunk</url>
+<relative-url>^/trunk</relative-url>
 <repository>
 <root>http://josm.openstreetmap.de/svn</root>
 <uuid>0c6e7542-c601-0410-84e7-c038aed88b3b</uuid>
 </repository>
 <commit
-   revision="8279">
-<author>Klumbumbus</author>
-<date>2015-04-26T20:42:34.594552Z</date>
+   revision="8339">
+<author>stoecker</author>
+<date>2015-05-07T15:30:43.580086Z</date>
 </commit>
 </entry>
 </info>
diff --git a/data/defaultpresets.xml b/data/defaultpresets.xml
index 9b279fc..6207d93 100644
--- a/data/defaultpresets.xml
+++ b/data/defaultpresets.xml
@@ -412,6 +412,7 @@
                   ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:highway=trunk"
                   ko.href="http://wiki.openstreetmap.org/wiki/Ko:Tag:highway=trunk"
                   pl.href="http://wiki.openstreetmap.org/wiki/Pl:Tag:highway=trunk"
+                  pt.href="http://wiki.openstreetmap.org/wiki/Pt:Tag:highway=trunk"
                   pt_BR.href="http://wiki.openstreetmap.org/wiki/Pt-br:Tag:highway=trunk"
                   ru.href="http://wiki.openstreetmap.org/wiki/RU:Tag:highway=trunk"
                   uk.href="http://wiki.openstreetmap.org/wiki/Uk:Tag:highway=trunk" />
@@ -436,7 +437,8 @@
             <preset_link preset_name="Road Restrictions" />
         </item> <!-- Trunk -->
         <item name="Trunk Link" icon="presets/trunk.png" type="way" preset_name_label="true">
-            <link href="http://wiki.openstreetmap.org/wiki/Link_(highway)" />
+            <link href="http://wiki.openstreetmap.org/wiki/Link_(highway)"
+                  ja.href="http://wiki.openstreetmap.org/wiki/JA:Highway_link" />
             <space />
             <key key="highway" value="trunk_link" />
             <text key="ref" text="Reference" />
@@ -467,7 +469,8 @@
                   pt.href="http://wiki.openstreetmap.org/wiki/Pt:Tag:highway=primary"
                   pt_BR.href="http://wiki.openstreetmap.org/wiki/Pt-br:Tag:highway=primary"
                   ru.href="http://wiki.openstreetmap.org/wiki/RU:Tag:highway=primary"
-                  uk.href="http://wiki.openstreetmap.org/wiki/Uk:Tag:highway=primary" />
+                  uk.href="http://wiki.openstreetmap.org/wiki/Uk:Tag:highway=primary"
+                  vi.href="http://wiki.openstreetmap.org/wiki/Vi:Tag:highway=primary" />
             <space />
             <key key="highway" value="primary" />
             <text key="ref" text="Reference" />
@@ -506,7 +509,8 @@
                   pt.href="http://wiki.openstreetmap.org/wiki/Pt:Tag:highway=secondary"
                   pt_BR.href="http://wiki.openstreetmap.org/wiki/Pt-br:Tag:highway=secondary"
                   ru.href="http://wiki.openstreetmap.org/wiki/RU:Tag:highway=secondary"
-                  uk.href="http://wiki.openstreetmap.org/wiki/Uk:Tag:highway=secondary" />
+                  uk.href="http://wiki.openstreetmap.org/wiki/Uk:Tag:highway=secondary"
+                  vi.href="http://wiki.openstreetmap.org/wiki/Vi:Tag:highway=secondary" />
             <space />
             <key key="highway" value="secondary" />
             <text key="ref" text="Reference" />
@@ -541,9 +545,11 @@
                   it.href="http://wiki.openstreetmap.org/wiki/IT:Tag:highway=tertiary"
                   ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:highway=tertiary"
                   pl.href="http://wiki.openstreetmap.org/wiki/Pl:Tag:highway=tertiary"
+                  pt.href="http://wiki.openstreetmap.org/wiki/Pt:Tag:highway=tertiary"
                   pt_BR.href="http://wiki.openstreetmap.org/wiki/Pt-br:Tag:highway=tertiary"
                   ru.href="http://wiki.openstreetmap.org/wiki/RU:Tag:highway=tertiary"
-                  uk.href="http://wiki.openstreetmap.org/wiki/Uk:Tag:highway=tertiary" />
+                  uk.href="http://wiki.openstreetmap.org/wiki/Uk:Tag:highway=tertiary"
+                  vi.href="http://wiki.openstreetmap.org/wiki/Vi:Tag:highway=tertiary" />
             <space />
             <key key="highway" value="tertiary" />
             <text key="ref" text="Reference" />
@@ -576,6 +582,7 @@
                   fr.href="http://wiki.openstreetmap.org/wiki/FR:Tag:highway=unclassified"
                   ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:highway=unclassified"
                   pl.href="http://wiki.openstreetmap.org/wiki/Pl:Tag:highway=unclassified"
+                  pt.href="http://wiki.openstreetmap.org/wiki/Pt:Tag:highway=unclassified"
                   pt_BR.href="http://wiki.openstreetmap.org/wiki/Pt-br:Tag:highway=unclassified"
                   ru.href="http://wiki.openstreetmap.org/wiki/RU:Tag:highway=unclassified"
                   uk.href="http://wiki.openstreetmap.org/wiki/Uk:Tag:highway=unclassified" />
@@ -597,9 +604,11 @@
                   it.href="http://wiki.openstreetmap.org/wiki/IT:Tag:highway=residential"
                   ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:highway=residential"
                   pl.href="http://wiki.openstreetmap.org/wiki/Pl:Tag:highway=residential"
+                  pt.href="http://wiki.openstreetmap.org/wiki/Pt:Tag:highway=residential"
                   pt_BR.href="http://wiki.openstreetmap.org/wiki/Pt-br:Tag:highway=residential"
                   ru.href="http://wiki.openstreetmap.org/wiki/RU:Tag:highway=residential"
-                  uk.href="http://wiki.openstreetmap.org/wiki/Uk:Tag:highway=residential" />
+                  uk.href="http://wiki.openstreetmap.org/wiki/Uk:Tag:highway=residential"
+                  vi.href="http://wiki.openstreetmap.org/wiki/Vi:Tag:highway=residential" />
             <space />
             <key key="highway" value="residential" />
             <text key="name" text="Name" />
@@ -687,7 +696,8 @@
                   pl.href="http://wiki.openstreetmap.org/wiki/Pl:Tag:highway=service"
                   pt_BR.href="http://wiki.openstreetmap.org/wiki/Pt-br:Tag:highway=service"
                   ru.href="http://wiki.openstreetmap.org/wiki/RU:Tag:highway=service"
-                  uk.href="http://wiki.openstreetmap.org/wiki/Uk:Tag:highway=service" />
+                  uk.href="http://wiki.openstreetmap.org/wiki/Uk:Tag:highway=service"
+                  vi.href="http://wiki.openstreetmap.org/wiki/Vi:Tag:highway=service" />
             <space />
             <key key="highway" value="service" />
             <combo key="service" text="Service way type" values="alley,driveway,parking_aisle,drive-through" />
@@ -865,6 +875,7 @@
                   id.href="http://wiki.openstreetmap.org/wiki/Id:Tag:highway=track"
                   it.href="http://wiki.openstreetmap.org/wiki/IT:Tag:highway=track"
                   ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:highway=track"
+                  ko.href="http://wiki.openstreetmap.org/wiki/Ko:Tag:highway=track"
                   pl.href="http://wiki.openstreetmap.org/wiki/Pl:Tag:highway=track"
                   pt_BR.href="http://wiki.openstreetmap.org/wiki/Pt-br:Tag:highway=track"
                   ru.href="http://wiki.openstreetmap.org/wiki/RU:Tag:highway=track"
@@ -1197,6 +1208,7 @@
                   fi.href="http://wiki.openstreetmap.org/wiki/Fi:Key:traffic_calming"
                   fr.href="http://wiki.openstreetmap.org/wiki/FR:Key:traffic_calming"
                   it.href="http://wiki.openstreetmap.org/wiki/IT:Key:traffic_calming"
+                  ja.href="http://wiki.openstreetmap.org/wiki/JA:Key:traffic_calming"
                   pl.href="http://wiki.openstreetmap.org/wiki/Pl:Key:traffic_calming"
                   pt_BR.href="http://wiki.openstreetmap.org/wiki/Pt-br:Key:traffic_calming"
                   ru.href="http://wiki.openstreetmap.org/wiki/RU:Key:traffic_calming" />
@@ -1222,7 +1234,8 @@
         </item> <!-- Turning Circle -->
         <item name="Turning Loop" icon="styles/standard/vehicle/turning_loop.png" type="node" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:highway=turning_loop"
-                  de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:highway=turning_loop" />
+                  de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:highway=turning_loop"
+                  es.href="http://wiki.openstreetmap.org/wiki/ES:Tag:highway=turning_loop" />
             <key key="highway" value="turning_loop" />
         </item> <!-- Turning Loop -->
         <item name="City Limit" icon="presets/citylimit.png" type="node" preset_name_label="true">
@@ -1268,6 +1281,7 @@
             <link href="http://wiki.openstreetmap.org/wiki/Tag:highway=elevator"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:highway=elevator"
                   fr.href="http://wiki.openstreetmap.org/wiki/FR:Tag:highway=elevator"
+                  ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:highway=elevator"
                   ru.href="http://wiki.openstreetmap.org/wiki/RU:Tag:highway=elevator" />
             <key key="highway" value="elevator" />
         </item> <!-- Elevator -->
@@ -1352,6 +1366,7 @@
             <link href="http://wiki.openstreetmap.org/wiki/Key:barrier"
                   cs.href="http://wiki.openstreetmap.org/wiki/Cs:Key:barrier"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Key:barrier"
+                  es.href="http://wiki.openstreetmap.org/wiki/ES:Key:barrier"
                   fr.href="http://wiki.openstreetmap.org/wiki/FR:Key:barrier"
                   hu.href="http://wiki.openstreetmap.org/wiki/Hu:Key:barrier"
                   it.href="http://wiki.openstreetmap.org/wiki/IT:Key:barrier"
@@ -1419,6 +1434,7 @@
         </item> <!-- Fence -->
         <item name="Guard Rail" type="way,closedway" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:barrier=guard_rail"
+                  ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:barrier=guard_rail"
                   pl.href="http://wiki.openstreetmap.org/wiki/Pl:Tag:barrier=guard_rail" />
             <key key="barrier" value="guard_rail" />
             <reference ref="optional_height" />
@@ -1437,6 +1453,7 @@
         </item> <!-- Wall -->
         <item name="City Wall" icon="presets/city_wall.png" type="way,closedway" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:barrier=city_wall"
+                  de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:barrier=city_wall"
                   fr.href="http://wiki.openstreetmap.org/wiki/FR:Tag:barrier=city_wall"
                   pl.href="http://wiki.openstreetmap.org/wiki/Pl:Tag:barrier=city_wall"
                   pt_BR.href="http://wiki.openstreetmap.org/wiki/Pt-br:Tag:barrier=city_wall"
@@ -1459,6 +1476,7 @@
         <item name="Ditch" name_context="Barrier" type="way,closedway" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:barrier=ditch"
                   it.href="http://wiki.openstreetmap.org/wiki/IT:Tag:barrier=ditch"
+                  ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:barrier=ditch"
                   pl.href="http://wiki.openstreetmap.org/wiki/Pl:Tag:barrier=ditch"
                   pt_BR.href="http://wiki.openstreetmap.org/wiki/Pt-br:Tag:barrier=ditch"
                   ru.href="http://wiki.openstreetmap.org/wiki/RU:Tag:barrier=ditch" />
@@ -1693,6 +1711,7 @@
         <item name="Drain" icon="presets/waterway.png" type="way" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:waterway=drain"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:waterway=drain"
+                  fr.href="http://wiki.openstreetmap.org/wiki/FR:Tag:waterway=drain"
                   ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:waterway=drain"
                   pl.href="http://wiki.openstreetmap.org/wiki/Pl:Tag:waterway=drain"
                   pt_BR.href="http://wiki.openstreetmap.org/wiki/Pt-br:Tag:waterway=drain"
@@ -1706,6 +1725,7 @@
         <item name="Ditch" icon="presets/waterway.png" type="way" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:waterway=ditch"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:waterway=ditch"
+                  fr.href="http://wiki.openstreetmap.org/wiki/FR:Tag:waterway=ditch"
                   ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:waterway=ditch"
                   pl.href="http://wiki.openstreetmap.org/wiki/Pl:Tag:waterway=ditch"
                   pt_BR.href="http://wiki.openstreetmap.org/wiki/Pt-br:Tag:waterway=ditch" />
@@ -1774,6 +1794,7 @@
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:natural=spring"
                   fr.href="http://wiki.openstreetmap.org/wiki/FR:Tag:natural=spring"
                   it.href="http://wiki.openstreetmap.org/wiki/IT:Tag:natural=spring"
+                  ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:natural=spring"
                   pt_BR.href="http://wiki.openstreetmap.org/wiki/Pt-br:Tag:natural=spring"
                   ru.href="http://wiki.openstreetmap.org/wiki/RU:Tag:natural=spring" />
             <label text="A point where groundwater naturally flows to the surface of the earth from underground." />
@@ -1783,7 +1804,9 @@
             <check key="drinking_water" text="Drinking Water" />
         </item> <!-- Spring -->
         <item name="Waterfall" icon="presets/waterfall.png" type="node,way" preset_name_label="true">
-            <link href="http://wiki.openstreetmap.org/wiki/Tag:waterway=waterfall" />
+            <link href="http://wiki.openstreetmap.org/wiki/Tag:waterway=waterfall"
+                  de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:waterway=waterfall"
+                  fr.href="http://wiki.openstreetmap.org/wiki/FR:Tag:waterway=waterfall" />
             <space />
             <key key="waterway" value="waterfall" />
             <reference ref="name_wikipedia" />
@@ -2084,6 +2107,7 @@
         </item> <!-- Slipway -->
         <item name="Boatyard" icon="presets/boatyard.png" type="node,closedway" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:waterway=boatyard"
+                  de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:waterway=boatyard"
                   fr.href="http://wiki.openstreetmap.org/wiki/FR:Tag:waterway=boatyard"
                   pl.href="http://wiki.openstreetmap.org/wiki/Pl:Tag:waterway=boatyard"
                   pt_BR.href="http://wiki.openstreetmap.org/wiki/Pt-br:Tag:waterway=boatyard"
@@ -2177,6 +2201,7 @@
         <item name="Tram" icon="presets/tram.png" 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"
                   ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:railway=tram"
                   pt_BR.href="http://wiki.openstreetmap.org/wiki/Pt-br:Tag:railway=tram"
                   ru.href="http://wiki.openstreetmap.org/wiki/RU:Tag:railway=tram"
@@ -2190,7 +2215,8 @@
             <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"
-                  pt_BR.href="http://wiki.openstreetmap.org/wiki/Pt-br:Tag:highway=bus_guideway" />
+                  pt_BR.href="http://wiki.openstreetmap.org/wiki/Pt-br:Tag:highway=bus_guideway"
+                  ru.href="http://wiki.openstreetmap.org/wiki/RU:Tag:highway=bus_guideway" />
             <key key="highway" value="bus_guideway" />
             <optional>
                 <text key="name" text="Name" />
@@ -2215,7 +2241,8 @@
             <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"
-                  pl.href="http://wiki.openstreetmap.org/wiki/Pl:Tag:railway=abandoned" />
+                  pl.href="http://wiki.openstreetmap.org/wiki/Pl:Tag:railway=abandoned"
+                  ru.href="http://wiki.openstreetmap.org/wiki/RU:Tag:railway=abandoned" />
             <key key="railway" value="abandoned" />
             <optional>
                 <reference ref="railway_service" />
@@ -2265,7 +2292,8 @@
             <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"
-                  pt_BR.href="http://wiki.openstreetmap.org/wiki/Pt-br:Tag:railway=turntable" />
+                  pt_BR.href="http://wiki.openstreetmap.org/wiki/Pt-br:Tag:railway=turntable"
+                  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">
@@ -2459,6 +2487,7 @@
                   pl.href="http://wiki.openstreetmap.org/wiki/Pl:Tag:amenity=fuel"
                   pt_BR.href="http://wiki.openstreetmap.org/wiki/Pt-br:Tag:amenity=fuel"
                   ru.href="http://wiki.openstreetmap.org/wiki/RU:Tag:amenity=fuel"
+                  uk.href="http://wiki.openstreetmap.org/wiki/Uk:Tag:amenity=fuel"
                   zh_TW.href="http://wiki.openstreetmap.org/wiki/Zh-hant:Tag:amenity=fuel" />
             <space />
             <key key="amenity" value="fuel" />
@@ -2602,7 +2631,8 @@
         <item name="Parking" icon="styles/standard/vehicle/parking/motorbike.png" type="node,closedway" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:amenity=motorcycle_parking"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:amenity=motorcycle_parking"
-                  fr.href="http://wiki.openstreetmap.org/wiki/FR:Tag:amenity=motorcycle_parking" />
+                  fr.href="http://wiki.openstreetmap.org/wiki/FR:Tag:amenity=motorcycle_parking"
+                  ru.href="http://wiki.openstreetmap.org/wiki/RU:Tag:amenity=motorcycle_parking" />
             <space />
             <key key="amenity" value="motorcycle_parking" />
             <reference ref="parking_name_type_ref" />
@@ -2699,7 +2729,9 @@
         </item> <!-- Rental -->
         <item name="Public Bicycle Repair Station" icon="styles/standard/vehicle/bicycle_repair_station.svg" type="node,closedway" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:amenity=bicycle_repair_station"
-                  de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:amenity=bicycle_repair_station" />
+                  de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:amenity=bicycle_repair_station"
+                  ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:amenity=bicycle_repair_station"
+                  ru.href="http://wiki.openstreetmap.org/wiki/RU:Tag:amenity=bicycle_repair_station" />
             <space />
             <key key="amenity" value="bicycle_repair_station" />
             <optional>
@@ -2930,6 +2962,7 @@
         <item name="Tram Stop" icon="presets/tram.png" type="node" preset_name_label="true">
            <link href="http://wiki.openstreetmap.org/wiki/Tag:railway=tram_stop"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:railway=tram_stop"
+                  ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:railway=tram_stop"
                   pt_BR.href="http://wiki.openstreetmap.org/wiki/Pt-br:Tag:railway=tram_stop" />
             <key key="railway" value="tram_stop" />
             <optional>
@@ -2939,6 +2972,7 @@
         <item name="Railway Platform" icon="presets/platform_rail.png" type="way,closedway" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:railway=platform"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:railway=platform"
+                  ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:railway=platform"
                   pt_BR.href="http://wiki.openstreetmap.org/wiki/Pt-br:Tag:railway=platform" />
             <space />
             <key key="railway" value="platform" />
@@ -3063,7 +3097,8 @@
             <key key="aeroway" value="apron" />
         </item> <!-- Apron -->
         <item name="Plane Parking Position" icon="styles/standard/transport/airport/parking_position.png" type="node,way" preset_name_label="true">
-            <link href="http://wiki.openstreetmap.org/wiki/Tag:aeroway=parking_position" />
+            <link href="http://wiki.openstreetmap.org/wiki/Tag:aeroway=parking_position"
+                  pt.href="http://wiki.openstreetmap.org/wiki/Pt:Tag:aeroway=parking_position" />
             <key key="aeroway" value="parking_position" />
             <text key="ref" text="Reference" />
         </item> <!-- Plane Parking Position -->
@@ -3071,7 +3106,8 @@
             <link href="http://wiki.openstreetmap.org/wiki/Tag:aeroway=hangar"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:aeroway=hangar"
                   pl.href="http://wiki.openstreetmap.org/wiki/Pl:Tag:aeroway=hangar"
-                  pt.href="http://wiki.openstreetmap.org/wiki/Pt:Tag:aeroway=hangar" />
+                  pt.href="http://wiki.openstreetmap.org/wiki/Pt:Tag:aeroway=hangar"
+                  ru.href="http://wiki.openstreetmap.org/wiki/RU:Tag:aeroway=hangar" />
             <key key="aeroway" value="hangar" />
             <combo key="building" text="Building" values="hangar,yes" values_context="building" default="hangar" values_searchable="true" />
         </item> <!-- Hangar -->
@@ -3137,6 +3173,7 @@
             <link href="http://wiki.openstreetmap.org/wiki/Tag:tourism=motel"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:tourism=motel"
                   es.href="http://wiki.openstreetmap.org/wiki/ES:Tag:tourism=motel"
+                  fr.href="http://wiki.openstreetmap.org/wiki/FR:Tag:tourism=motel"
                   pl.href="http://wiki.openstreetmap.org/wiki/Pl:Tag:tourism=motel"
                   pt_BR.href="http://wiki.openstreetmap.org/wiki/Pt-br:Tag:tourism=motel"
                   ru.href="http://wiki.openstreetmap.org/wiki/RU:Tag:tourism=motel" />
@@ -3153,6 +3190,7 @@
         <item name="Guest House/Bed & Breakfast" icon="styles/standard/accommodation/guest_house.png" type="node,closedway" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:tourism=guest_house"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:tourism=guest_house"
+                  fr.href="http://wiki.openstreetmap.org/wiki/FR:Tag:tourism=guest_house"
                   pl.href="http://wiki.openstreetmap.org/wiki/Pl:Tag:tourism=guest_house"
                   pt_BR.href="http://wiki.openstreetmap.org/wiki/Pt-br:Tag:tourism=guest_house"
                   ru.href="http://wiki.openstreetmap.org/wiki/RU:Tag:tourism=guest_house" />
@@ -3169,6 +3207,7 @@
         <item name="Chalet" icon="styles/standard/accommodation/chalet.png" type="node,closedway" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:tourism=chalet"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:tourism=chalet"
+                  fr.href="http://wiki.openstreetmap.org/wiki/FR:Tag:tourism=chalet"
                   nl.href="http://wiki.openstreetmap.org/wiki/NL:Tag:tourism=chalet"
                   pl.href="http://wiki.openstreetmap.org/wiki/Pl:Tag:tourism=chalet"
                   pt_BR.href="http://wiki.openstreetmap.org/wiki/Pt-br:Tag:tourism=chalet"
@@ -3221,6 +3260,7 @@
         <item name="Caravan Site/RV Park" icon="styles/standard/accommodation/camping/caravan.png" type="node,closedway" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:tourism=caravan_site"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:tourism=caravan_site"
+                  ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:tourism=caravan_site"
                   pl.href="http://wiki.openstreetmap.org/wiki/Pl:Tag:tourism=caravan_site"
                   pt_BR.href="http://wiki.openstreetmap.org/wiki/Pt-br:Tag:tourism=caravan_site" />
             <space />
@@ -3266,6 +3306,7 @@
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:amenity=restaurant"
                   es.href="http://wiki.openstreetmap.org/wiki/ES:Tag:amenity=restaurant"
                   fr.href="http://wiki.openstreetmap.org/wiki/FR:Tag:amenity=restaurant"
+                  it.href="http://wiki.openstreetmap.org/wiki/IT:Tag:amenity=restaurant"
                   ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:amenity=restaurant"
                   pt_BR.href="http://wiki.openstreetmap.org/wiki/Pt-br:Tag:amenity=restaurant"
                   ru.href="http://wiki.openstreetmap.org/wiki/RU:Tag:amenity=restaurant" />
@@ -3285,6 +3326,7 @@
         <item name="Fast Food" icon="presets/fastfood.png" type="node,closedway" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:amenity=fast_food"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:amenity=fast_food"
+                  it.href="http://wiki.openstreetmap.org/wiki/IT:Tag:amenity=fast_food"
                   ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:amenity=fast_food"
                   pt_BR.href="http://wiki.openstreetmap.org/wiki/Pt-br:Tag:amenity=fast_food"
                   ru.href="http://wiki.openstreetmap.org/wiki/RU:Tag:amenity=fast_food" />
@@ -3319,6 +3361,7 @@
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:amenity=cafe"
                   et.href="http://wiki.openstreetmap.org/wiki/Et:Tag:amenity=cafe"
                   fr.href="http://wiki.openstreetmap.org/wiki/FR:Tag:amenity=cafe"
+                  it.href="http://wiki.openstreetmap.org/wiki/IT:Tag:amenity=cafe"
                   ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:amenity=cafe"
                   nl.href="http://wiki.openstreetmap.org/wiki/NL:Tag:amenity=cafe"
                   pt_BR.href="http://wiki.openstreetmap.org/wiki/Pt-br:Tag:amenity=cafe"
@@ -3338,6 +3381,7 @@
         <item name="Pub" icon="presets/pub.png" type="node,closedway" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:amenity=pub"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:amenity=pub"
+                  it.href="http://wiki.openstreetmap.org/wiki/IT:Tag:amenity=pub"
                   ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:amenity=pub"
                   pt_BR.href="http://wiki.openstreetmap.org/wiki/Pt-br:Tag:amenity=pub"
                   ru.href="http://wiki.openstreetmap.org/wiki/RU:Tag:amenity=pub" />
@@ -3423,6 +3467,7 @@
     <group name="Tourism" icon="presets/sightseeing.png">
         <item name="Attraction" icon="presets/sightseeing.png" type="node,closedway" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:tourism=attraction"
+                  fr.href="http://wiki.openstreetmap.org/wiki/FR:Tag:tourism=attraction"
                   pt_BR.href="http://wiki.openstreetmap.org/wiki/Pt-br:Tag:tourism=attraction"
                   ru.href="http://wiki.openstreetmap.org/wiki/RU:Tag:tourism=attraction" />
             <space />
@@ -3501,6 +3546,7 @@
         </item> <!-- Information Board -->
         <item name="Guidepost" icon="presets/guidepost.png" type="node" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:information=guidepost"
+                  de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:information=guidepost"
                   ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:information=guidepost"
                   pl.href="http://wiki.openstreetmap.org/wiki/Pl:Tag:information=guidepost"
                   ru.href="http://wiki.openstreetmap.org/wiki/RU:Tag:information=guidepost" />
@@ -3595,6 +3641,7 @@
             <link href="http://wiki.openstreetmap.org/wiki/Tag:tourism=zoo"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:tourism=zoo"
                   fi.href="http://wiki.openstreetmap.org/wiki/Fi:Tag:tourism=zoo"
+                  fr.href="http://wiki.openstreetmap.org/wiki/FR:Tag:tourism=zoo"
                   pl.href="http://wiki.openstreetmap.org/wiki/Pl:Tag:tourism=zoo"
                   pt_BR.href="http://wiki.openstreetmap.org/wiki/Pt-br:Tag:tourism=zoo" />
             <space />
@@ -3624,6 +3671,8 @@
         </item> <!-- Dog Park -->
         <item name="Amusement/Theme Park" icon="presets/theme_park.png" type="node,closedway" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:tourism=theme_park"
+                  de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:tourism=theme_park"
+                  fr.href="http://wiki.openstreetmap.org/wiki/FR:Tag:tourism=theme_park"
                   pl.href="http://wiki.openstreetmap.org/wiki/Pl:Tag:tourism=theme_park"
                   pt_BR.href="http://wiki.openstreetmap.org/wiki/Pt-br:Tag:tourism=theme_park"
                   ru.href="http://wiki.openstreetmap.org/wiki/RU:Tag:tourism=theme_park" />
@@ -3713,7 +3762,8 @@
             <check key="fireplace" text="Fireplace" />
         </item> <!-- Picnic Site -->
         <item name="Picnic Table" icon="styles/standard/leisure/picnic.png" type="node" preset_name_label="true">
-            <link href="http://wiki.openstreetmap.org/wiki/Tag:leisure=picnic_table" />
+            <link href="http://wiki.openstreetmap.org/wiki/Tag:leisure=picnic_table"
+                  de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:leisure=picnic_table" />
             <space />
             <key key="leisure" value="picnic_table" />
             <check key="covered" text="Covered" />
@@ -3733,6 +3783,7 @@
         <item name="Firepit" icon="styles/standard/leisure/firepit.svg" type="node,closedway" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:leisure=firepit"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:leisure=firepit"
+                  ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:leisure=firepit"
                   pl.href="http://wiki.openstreetmap.org/wiki/Pl:Tag:leisure=firepit"
                   ru.href="http://wiki.openstreetmap.org/wiki/RU:Tag:leisure=firepit" />
             <space />
@@ -4012,6 +4063,7 @@
     <group name="Public Building" icon="presets/townhall.png">
         <item name="Public Building" icon="styles/standard/service.png" type="node,closedway,relation" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:amenity=public_building"
+                  es.href="http://wiki.openstreetmap.org/wiki/ES:Tag:amenity=public_building"
                   ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:amenity=public_building"
                   pt_BR.href="http://wiki.openstreetmap.org/wiki/Pt-br:Tag:amenity=public_building"
                   ru.href="http://wiki.openstreetmap.org/wiki/RU:Tag:amenity=public_building" />
@@ -4036,6 +4088,7 @@
         <item name="Community Centre" icon="presets/community_centre.png" type="node,closedway" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:amenity=community_centre"
                   da.href="http://wiki.openstreetmap.org/wiki/Da:Tag:amenity=community_centre"
+                  de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:amenity=community_centre"
                   fr.href="http://wiki.openstreetmap.org/wiki/FR:Tag:amenity=community_centre"
                   ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:amenity=community_centre"
                   pt_BR.href="http://wiki.openstreetmap.org/wiki/Pt-br:Tag:amenity=community_centre"
@@ -4229,6 +4282,9 @@
         </item> <!-- Clinic -->
         <item name="Doctor's Office" icon="styles/standard/health/doctor.png" 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"
+                  fr.href="http://wiki.openstreetmap.org/wiki/FR:Tag:amenity=doctors"
                   ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:amenity=doctors"
                   pl.href="http://wiki.openstreetmap.org/wiki/Pl:Tag:amenity=doctors"
                   pt_BR.href="http://wiki.openstreetmap.org/wiki/Pt-br:Tag:amenity=doctors"
@@ -4240,6 +4296,8 @@
         </item> <!-- Doctor's Office -->
         <item name="Dentist" icon="styles/standard/health/dentist.png" 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"
                   ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:amenity=dentist"
                   pt_BR.href="http://wiki.openstreetmap.org/wiki/Pt-br:Tag:amenity=dentist"
                   ru.href="http://wiki.openstreetmap.org/wiki/RU:Tag:amenity=dentist" />
@@ -4300,7 +4358,8 @@
                   ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:amenity=baby_hatch"
                   nl.href="http://wiki.openstreetmap.org/wiki/NL:Tag:amenity=baby_hatch"
                   pl.href="http://wiki.openstreetmap.org/wiki/Pl:Tag:amenity=baby_hatch"
-                  pt_BR.href="http://wiki.openstreetmap.org/wiki/Pt-br:Tag:amenity=baby_hatch" />
+                  pt_BR.href="http://wiki.openstreetmap.org/wiki/Pt-br:Tag:amenity=baby_hatch"
+                  ru.href="http://wiki.openstreetmap.org/wiki/RU:Tag:amenity=baby_hatch" />
             <space />
             <key key="amenity" value="baby_hatch" />
             <reference ref="name_operator_oh_wheelchair" />
@@ -4364,6 +4423,7 @@
         </item> <!-- Toilets/Restrooms -->
         <item name="Shower" icon="styles/standard/service/shower.svg" type="node,closedway" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:amenity=shower"
+                  de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:amenity=shower"
                   ru.href="http://wiki.openstreetmap.org/wiki/RU:Tag:amenity=shower" />
             <space />
             <key key="amenity" value="shower" />
@@ -4505,11 +4565,15 @@
             <key key="amenity" value="waste_disposal" />
         </item> <!-- Waste Disposal/Dumpster -->
         <item name="Sanitary Dump Station" icon="styles/standard/service/recycling/sanitary_dump_station.svg" type="node,closedway" preset_name_label="true">
-            <link href="http://wiki.openstreetmap.org/wiki/Tag:amenity=sanitary_dump_station" />
+            <link href="http://wiki.openstreetmap.org/wiki/Toilet_Holding_Tank_Disposal"
+                  de.href="http://wiki.openstreetmap.org/wiki/DE:Toilet_Holding_Tank_Disposal"
+                  fr.href="http://wiki.openstreetmap.org/wiki/FR:Toilet_Holding_Tank_Disposal"
+                  ru.href="http://wiki.openstreetmap.org/wiki/RU:Toilet_Holding_Tank_Disposal" />
             <space />
             <key key="amenity" value="sanitary_dump_station" />
-            <check key="sanitary_dump_station:suction" text="Suction pumpout" />
-            <check key="sanitary_dump_station:gravity" text="Gravity dump station" />
+            <check key="sanitary_dump_station:pump-out" text="Suction pumpout" />
+            <check key="sanitary_dump_station:round_drain" text="Gravity drain for hose" />
+            <check key="sanitary_dump_station:basin" text="Casette or Elsan Disposal" />
             <combo key="access" text="Access" values="yes,public,customers,no" />
             <reference ref="fee" />
             <text key="operator" text="Operator" />
@@ -4697,7 +4761,8 @@
             <link href="http://wiki.openstreetmap.org/wiki/Tag:leisure=miniature_golf"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:leisure=miniature_golf"
                   ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:leisure=miniature_golf"
-                  pt_BR.href="http://wiki.openstreetmap.org/wiki/Pt-br:Tag:leisure=miniature_golf" />
+                  pt_BR.href="http://wiki.openstreetmap.org/wiki/Pt-br:Tag:leisure=miniature_golf"
+                  ru.href="http://wiki.openstreetmap.org/wiki/RU:Tag:leisure=miniature_golf" />
             <space />
             <key key="leisure" value="miniature_golf" />
             <reference ref="name_oh_wheelchair" />
@@ -4705,7 +4770,8 @@
     </group> <!-- Sport Facilities -->
     <group name="Sport" icon="presets/rowing.png">
         <item name="Multi" icon="styles/standard/sport/multi.png" type="node,closedway" preset_name_label="true">
-            <link href="http://wiki.openstreetmap.org/wiki/Tag:sport=multi" />
+            <link href="http://wiki.openstreetmap.org/wiki/Tag:sport=multi"
+                  de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:sport=multi" />
             <space />
             <key key="sport" value="multi" />
             <text key="name" text="Name" />
@@ -4745,6 +4811,7 @@
         <item name="Climbing" icon="styles/standard/sport/climbing.png" type="node,way,closedway" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:sport=climbing"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:sport=climbing"
+                  fr.href="http://wiki.openstreetmap.org/wiki/FR:Tag:sport=climbing"
                   pl.href="http://wiki.openstreetmap.org/wiki/Pl:Tag:sport=climbing" />
             <space />
             <key key="sport" value="climbing" />
@@ -4810,6 +4877,7 @@
         </item> <!-- Skateboard -->
         <item name="Swimming" icon="styles/standard/sport/pool.png" type="node,closedway" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:sport=swimming"
+                  de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:sport=swimming"
                   uk.href="http://wiki.openstreetmap.org/wiki/Uk:Tag:sport=swimming" />
             <space />
             <key key="sport" value="swimming" />
@@ -5100,6 +5168,7 @@
             <link href="http://wiki.openstreetmap.org/wiki/Key:building"
                   cs.href="http://wiki.openstreetmap.org/wiki/Cs:Key:building"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Key:building"
+                  es.href="http://wiki.openstreetmap.org/wiki/ES:Key:building"
                   fr.href="http://wiki.openstreetmap.org/wiki/FR:Key:building"
                   hu.href="http://wiki.openstreetmap.org/wiki/Hu:Key:building"
                   it.href="http://wiki.openstreetmap.org/wiki/IT:Key:building"
@@ -5111,7 +5180,7 @@
                   ru.href="http://wiki.openstreetmap.org/wiki/RU:Key:building"
                   uk.href="http://wiki.openstreetmap.org/wiki/Uk:Key:building" />
             <space />
-            <combo key="building" text="Building" values="yes,roof,garage,garages,industrial,school,hangar,commercial,barn,farm_auxiliary,transportation,greenhouse,office,university,hospital,warehouse,retail,shed,cowshed,construction" values_context="building" default="yes" match="keyvalue!" values_searchable="true" />
+            <combo key="building" text="Building" values="yes,roof,garage,garages,industrial,school,hangar,commercial,barn,farm_auxiliary,transportation,greenhouse,office,university,hospital,warehouse,retail,shed,storage_tank,cowshed,construction" values_context="building" default="yes" match="keyvalue!" values_searchable="true" />
             <text key="name" text="Name" />
             <combo key="building:levels" text="Levels" values="1,2,3,4,5,6,7,8,9,10,11" text_context="building" />
             <text key="height" text="Height (meters)" />
@@ -5137,7 +5206,13 @@
             <text key="height" text="Height (meters)" />
         </item> <!-- Residential Building -->
             <item name="Building part" icon="styles/standard/misc/landmark/building.png" type="closedway,relation" preset_name_label="true">
-            <link href="http://wiki.openstreetmap.org/wiki/Key:building:part" />
+            <link href="http://wiki.openstreetmap.org/wiki/Key:building:part"
+                  de.href="http://wiki.openstreetmap.org/wiki/DE:Key:building:part"
+                  fr.href="http://wiki.openstreetmap.org/wiki/FR:Key:building:part"
+                  ja.href="http://wiki.openstreetmap.org/wiki/JA:Key:building:part"
+                  pl.href="http://wiki.openstreetmap.org/wiki/Pl:Key:building:part"
+                  ru.href="http://wiki.openstreetmap.org/wiki/RU:Key:building:part"
+                  zh_CN.href="http://wiki.openstreetmap.org/wiki/Zh-hans:Key:building:part" />
             <space />
             <combo key="building:part" text="Building part" values="yes,roof,garage,garages,industrial,school,hangar,commercial,barn,farm_auxiliary,transportation,greenhouse,office,university,hospital,warehouse,retail,shed,cowshed,construction" values_context="building" default="yes" match="keyvalue!" values_searchable="true" />
             <text key="name" text="Name" />
@@ -5182,6 +5257,7 @@
         </item> <!-- Tower -->
         <item name="Flagpole" icon="presets/flag.png" type="node" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:man_made=flagpole"
+                  de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:man_made=flagpole"
                   ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:man_made=flagpole"
                   pt_BR.href="http://wiki.openstreetmap.org/wiki/Pt-br:Tag:man_made=flagpole" />
             <key key="man_made" value="flagpole" />
@@ -5212,7 +5288,8 @@
                   fr.href="http://wiki.openstreetmap.org/wiki/FR:Tag:man_made=windmill"
                   nl.href="http://wiki.openstreetmap.org/wiki/NL:Tag:man_made=windmill"
                   pl.href="http://wiki.openstreetmap.org/wiki/Pl:Tag:man_made=windmill"
-                  pt_BR.href="http://wiki.openstreetmap.org/wiki/Pt-br:Tag:man_made=windmill" />
+                  pt_BR.href="http://wiki.openstreetmap.org/wiki/Pt-br:Tag:man_made=windmill"
+                  ru.href="http://wiki.openstreetmap.org/wiki/RU:Tag:man_made=windmill" />
             <space />
             <key key="man_made" value="windmill" />
             <text key="name" text="Name" />
@@ -5224,6 +5301,16 @@
             <key key="man_made" value="gasometer" />
             <text key="name" text="Name" />
         </item> <!-- Gasometer -->
+        <item name="Storage Tank" icon="presets/storage_tank.png" type="node,closedway">
+            <link href="http://wiki.openstreetmap.org/wiki/Tag:man_made=storage_tank"
+                  de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:man_made=storage_tank"
+                  ru.href="http://wiki.openstreetmap.org/wiki/RU:Tag:man_made=storage_tank" />
+            <key key="man_made" value="storage_tank" />
+            <combo key="building" text="Building" values="storage_tank" values_context="building" />
+            <combo key="content"  text="Content" values="fuel,manure,oil,sewage,silage,slurry,water,wine" values_context="content" />
+            <text key="operator" text="Operator" />
+            <text key="height" text="Height (meters)" length="7" />
+        </item> <!-- Storage Tank -->
         <item name="Bunker Silo" icon="styles/standard/bunker_silo.svg" type="node,closedway" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:man_made=bunker_silo"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:man_made=bunker_silo" />
@@ -5290,6 +5377,7 @@
             <link href="http://wiki.openstreetmap.org/wiki/Tag:man_made=embankment"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:man_made=embankment"
                   pl.href="http://wiki.openstreetmap.org/wiki/Pl:Tag:man_made=embankment"
+                  ru.href="http://wiki.openstreetmap.org/wiki/RU:Tag:man_made=embankment"
                   uk.href="http://wiki.openstreetmap.org/wiki/Uk:Tag:man_made=embankment" />
             <space />
             <key key="man_made" value="embankment" />
@@ -5333,7 +5421,8 @@
                   fi.href="http://wiki.openstreetmap.org/wiki/Fi:Tag:man_made=watermill"
                   fr.href="http://wiki.openstreetmap.org/wiki/FR:Tag:man_made=watermill"
                   pl.href="http://wiki.openstreetmap.org/wiki/Pl:Tag:man_made=watermill"
-                  pt_BR.href="http://wiki.openstreetmap.org/wiki/Pt-br:Tag:man_made=watermill" />
+                  pt_BR.href="http://wiki.openstreetmap.org/wiki/Pt-br:Tag:man_made=watermill"
+                  ru.href="http://wiki.openstreetmap.org/wiki/RU:Tag:man_made=watermill" />
             <space />
             <key key="man_made" value="watermill" />
             <text key="name" text="Name" />
@@ -5500,7 +5589,8 @@
             <combo key="bridge:support" text="Type" values="pier,abutment,lift_pier,pivot_pier" match="key" />
         </item> <!-- Bridge Support -->
         <item name="Bridge outline" icon="presets/bridge.png" type="closedway" preset_name_label="true">
-            <link href="http://wiki.openstreetmap.org/wiki/Tag:man_made=bridge" />
+            <link href="http://wiki.openstreetmap.org/wiki/Tag:man_made=bridge"
+                  ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:man_made=bridge" />
             <space />
             <key key="man_made" value="bridge" />
             <optional>
@@ -5918,6 +6008,7 @@
             <link href="http://wiki.openstreetmap.org/wiki/Tag:historic=castle"
                   cs.href="http://wiki.openstreetmap.org/wiki/Cs:Tag:historic=castle"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:historic=castle"
+                  fr.href="http://wiki.openstreetmap.org/wiki/FR:Tag:historic=castle"
                   pt_BR.href="http://wiki.openstreetmap.org/wiki/Pt-br:Tag:historic=castle"
                   ru.href="http://wiki.openstreetmap.org/wiki/RU:Tag:historic=castle" />
             <space />
@@ -5928,6 +6019,7 @@
         <item name="Ruins" icon="presets/ruins.png" type="node,closedway" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:historic=ruins"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:historic=ruins"
+                  fr.href="http://wiki.openstreetmap.org/wiki/FR:Tag:historic=ruins"
                   pl.href="http://wiki.openstreetmap.org/wiki/Pl:Tag:historic=ruins"
                   pt_BR.href="http://wiki.openstreetmap.org/wiki/Pt-br:Tag:historic=ruins"
                   ru.href="http://wiki.openstreetmap.org/wiki/RU:Tag:historic=ruins" />
@@ -5938,6 +6030,7 @@
         <item name="Archaeological Site" icon="styles/standard/sightseeing/archaeological.png" type="node,closedway" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:historic=archaeological_site"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:historic=archaeological_site"
+                  fr.href="http://wiki.openstreetmap.org/wiki/FR:Tag:historic=archaeological_site"
                   it.href="http://wiki.openstreetmap.org/wiki/IT:Tag:historic=archaeological_site"
                   ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:historic=archaeological_site"
                   pt_BR.href="http://wiki.openstreetmap.org/wiki/Pt-br:Tag:historic=archaeological_site"
@@ -6005,6 +6098,7 @@
         <item name="Wayside Cross" icon="presets/wayside_cross.png" type="node,closedway" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:historic=wayside_cross"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:historic=wayside_cross"
+                  fr.href="http://wiki.openstreetmap.org/wiki/FR:Tag:historic=wayside_cross"
                   pt_BR.href="http://wiki.openstreetmap.org/wiki/Pt-br:Tag:historic=wayside_cross"
                   ru.href="http://wiki.openstreetmap.org/wiki/RU:Tag:historic=wayside_cross" />
             <space />
@@ -6018,6 +6112,7 @@
         <item name="Wayside Shrine" icon="presets/wayside_shrine.png" type="node,closedway" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:historic=wayside_shrine"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:historic=wayside_shrine"
+                  fr.href="http://wiki.openstreetmap.org/wiki/FR:Tag:historic=wayside_shrine"
                   it.href="http://wiki.openstreetmap.org/wiki/IT:Tag:historic=wayside_shrine"
                   ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:historic=wayside_shrine"
                   pl.href="http://wiki.openstreetmap.org/wiki/Pl:Tag:historic=wayside_shrine"
@@ -6036,6 +6131,7 @@
         <item name="Boundary Stone" icon="styles/standard/historic/boundary_stone.png" type="node,closedway" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:historic=boundary_stone"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:historic=boundary_stone"
+                  fr.href="http://wiki.openstreetmap.org/wiki/FR:Tag:historic=boundary_stone"
                   ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:historic=boundary_stone"
                   pt_BR.href="http://wiki.openstreetmap.org/wiki/Pt-br:Tag:historic=boundary_stone"
                   ru.href="http://wiki.openstreetmap.org/wiki/RU:Tag:historic=boundary_stone" />
@@ -6051,6 +6147,7 @@
             <link href="http://wiki.openstreetmap.org/wiki/Tag:shop=supermarket"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:shop=supermarket"
                   fr.href="http://wiki.openstreetmap.org/wiki/FR:Tag:shop=supermarket"
+                  it.href="http://wiki.openstreetmap.org/wiki/IT:Tag:shop=supermarket"
                   ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:shop=supermarket"
                   pl.href="http://wiki.openstreetmap.org/wiki/Pl:Tag:shop=supermarket"
                   pt_BR.href="http://wiki.openstreetmap.org/wiki/Pt-br:Tag:shop=supermarket"
@@ -6064,6 +6161,7 @@
             <link href="http://wiki.openstreetmap.org/wiki/Tag:shop=convenience"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:shop=convenience"
                   fr.href="http://wiki.openstreetmap.org/wiki/FR:Tag:shop=convenience"
+                  it.href="http://wiki.openstreetmap.org/wiki/IT:Tag:shop=convenience"
                   ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:shop=convenience"
                   pl.href="http://wiki.openstreetmap.org/wiki/Pl:Tag:shop=convenience"
                   pt_BR.href="http://wiki.openstreetmap.org/wiki/Pt-br:Tag:shop=convenience"
@@ -6094,6 +6192,7 @@
                   es.href="http://wiki.openstreetmap.org/wiki/ES:Tag:shop=bakery"
                   fi.href="http://wiki.openstreetmap.org/wiki/Fi:Tag:shop=bakery"
                   fr.href="http://wiki.openstreetmap.org/wiki/FR:Tag:shop=bakery"
+                  it.href="http://wiki.openstreetmap.org/wiki/IT:Tag:shop=bakery"
                   ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:shop=bakery"
                   pl.href="http://wiki.openstreetmap.org/wiki/Pl:Tag:shop=bakery"
                   pt_BR.href="http://wiki.openstreetmap.org/wiki/Pt-br:Tag:shop=bakery"
@@ -6119,7 +6218,9 @@
         </item> <!-- Butcher -->
         <item name="Seafood" icon="presets/seafood.png" type="node,closedway" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:shop=seafood"
+                  de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:shop=seafood"
                   es.href="http://wiki.openstreetmap.org/wiki/ES:Tag:shop=seafood"
+                  it.href="http://wiki.openstreetmap.org/wiki/IT:Tag:shop=seafood"
                   pt_BR.href="http://wiki.openstreetmap.org/wiki/Pt-br:Tag:shop=seafood"
                   ru.href="http://wiki.openstreetmap.org/wiki/RU:Tag:shop=seafood" />
             <space />
@@ -6131,6 +6232,7 @@
             <link href="http://wiki.openstreetmap.org/wiki/Tag:shop=deli"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:shop=deli"
                   fr.href="http://wiki.openstreetmap.org/wiki/FR:Tag:shop=deli"
+                  it.href="http://wiki.openstreetmap.org/wiki/IT:Tag:shop=deli"
                   ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:shop=deli"
                   pt_BR.href="http://wiki.openstreetmap.org/wiki/Pt-br:Tag:shop=deli"
                   ru.href="http://wiki.openstreetmap.org/wiki/RU:Tag:shop=deli" />
@@ -6156,6 +6258,8 @@
         </item> <!-- Candy Store -->
         <item name="Tea" icon="styles/standard/shop/groceries/tea.svg" type="node,closedway" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:shop=tea"
+                  de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:shop=tea"
+                  it.href="http://wiki.openstreetmap.org/wiki/IT:Tag:shop=tea"
                   pl.href="http://wiki.openstreetmap.org/wiki/Pl:Tag:shop=tea" />
             <space />
             <key key="shop" value="tea" />
@@ -6163,7 +6267,9 @@
             <reference ref="link_contact_address_payment" />
         </item> <!-- Tea -->
         <item name="Coffee" icon="styles/standard/shop/groceries/coffee.svg" type="node,closedway" preset_name_label="true">
-            <link href="http://wiki.openstreetmap.org/wiki/Tag:shop=coffee" />
+            <link href="http://wiki.openstreetmap.org/wiki/Tag:shop=coffee"
+                  de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:shop=coffee"
+                  it.href="http://wiki.openstreetmap.org/wiki/IT:Tag:shop=coffee" />
             <space />
             <key key="shop" value="coffee" />
             <reference ref="name_oh_wheelchair" />
@@ -6204,6 +6310,7 @@
             <link href="http://wiki.openstreetmap.org/wiki/Tag:shop=farm"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:shop=farm"
                   fr.href="http://wiki.openstreetmap.org/wiki/FR:Tag:shop=farm"
+                  it.href="http://wiki.openstreetmap.org/wiki/IT:Tag:shop=farm"
                   pt_BR.href="http://wiki.openstreetmap.org/wiki/Pt-br:Tag:shop=farm"
                   ru.href="http://wiki.openstreetmap.org/wiki/RU:Tag:shop=farm" />
             <space />
@@ -6223,7 +6330,8 @@
             <combo text="Organic/Bio" key="organic" values="only,yes,no" match="key" />
         </item> <!-- Organic -->
         <item name="Fair Trade" type="node,closedway" preset_name_label="true">
-            <link href="http://wiki.openstreetmap.org/wiki/Key:fair_trade" />
+            <link href="http://wiki.openstreetmap.org/wiki/Key:fair_trade"
+                  de.href="http://wiki.openstreetmap.org/wiki/DE:Key:fair_trade" />
             <space />
             <combo text="Fair Trade" key="fair_trade" values="no,yes,only" match="key" />
         </item> <!-- Fair Trade -->
@@ -6232,6 +6340,7 @@
             <link href="http://wiki.openstreetmap.org/wiki/Tag:shop=alcohol"
                   es.href="http://wiki.openstreetmap.org/wiki/ES:Tag:shop=alcohol"
                   fr.href="http://wiki.openstreetmap.org/wiki/FR:Tag:shop=alcohol"
+                  it.href="http://wiki.openstreetmap.org/wiki/IT:Tag:shop=alcohol"
                   ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:shop=alcohol"
                   pt_BR.href="http://wiki.openstreetmap.org/wiki/Pt-br:Tag:shop=alcohol"
                   ru.href="http://wiki.openstreetmap.org/wiki/RU:Tag:shop=alcohol" />
@@ -6244,6 +6353,7 @@
             <link href="http://wiki.openstreetmap.org/wiki/Tag:shop=beverages"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:shop=beverages"
                   fr.href="http://wiki.openstreetmap.org/wiki/FR:Tag:shop=beverages"
+                  it.href="http://wiki.openstreetmap.org/wiki/IT:Tag:shop=beverages"
                   pt_BR.href="http://wiki.openstreetmap.org/wiki/Pt-br:Tag:shop=beverages"
                   ru.href="http://wiki.openstreetmap.org/wiki/RU:Tag:shop=beverages" />
             <space />
@@ -6253,7 +6363,8 @@
         </item> <!-- Beverages -->
         <item name="Wine" icon="styles/standard/shop/wine.svg" type="node,closedway" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:shop=wine"
-                  de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:shop=wine" />
+                  de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:shop=wine"
+                  it.href="http://wiki.openstreetmap.org/wiki/IT:Tag:shop=wine" />
             <space />
             <key key="shop" value="wine" />
             <reference ref="name_oh_wheelchair" />
@@ -6497,6 +6608,7 @@
     <group name="Home decoration" icon="styles/standard/shop/interior_decoration.svg">
         <item name="Furniture" icon="styles/standard/shop/furniture.png" type="node,closedway" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:shop=furniture"
+                  de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:shop=furniture"
                   ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:shop=furniture"
                   pl.href="http://wiki.openstreetmap.org/wiki/Pl:Tag:shop=furniture"
                   pt_BR.href="http://wiki.openstreetmap.org/wiki/Pt-br:Tag:shop=furniture"
@@ -6663,6 +6775,8 @@
         <item name="Chemist" icon="styles/standard/shop/chemist.png" type="node,closedway" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:shop=chemist"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:shop=chemist"
+                  fr.href="http://wiki.openstreetmap.org/wiki/FR:Tag:shop=chemist"
+                  it.href="http://wiki.openstreetmap.org/wiki/IT:Tag:shop=chemist"
                   ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:shop=chemist"
                   pt_BR.href="http://wiki.openstreetmap.org/wiki/Pt-br:Tag:shop=chemist"
                   ru.href="http://wiki.openstreetmap.org/wiki/RU:Tag:shop=chemist" />
@@ -6708,6 +6822,7 @@
         </item> <!-- Tattoo -->
         <item name="Optician" icon="styles/standard/shop/optician.png" type="node,closedway" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:shop=optician"
+                  de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:shop=optician"
                   pt_BR.href="http://wiki.openstreetmap.org/wiki/Pt-br:Tag:shop=optician"
                   ru.href="http://wiki.openstreetmap.org/wiki/RU:Tag:shop=optician" />
             <space />
@@ -6725,7 +6840,9 @@
             <reference ref="link_contact_address_payment" />
         </item> <!-- Hearing Aids -->
         <item name="Medical Supply" icon="styles/standard/shop/medical_supply.svg" type="node,closedway" preset_name_label="true">
-            <link href="http://wiki.openstreetmap.org/wiki/Tag:shop=medical_supply" />
+            <link href="http://wiki.openstreetmap.org/wiki/Tag:shop=medical_supply"
+                  de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:shop=medical_supply"
+                  fr.href="http://wiki.openstreetmap.org/wiki/FR:Tag:shop=medical_supply" />
             <space />
             <key key="shop" value="medical_supply" />
             <reference ref="name_operator_oh_wheelchair" />
@@ -6734,6 +6851,7 @@
         </item> <!-- Medical Supply -->
         <item name="Jewellery" icon="styles/standard/shop/jewelry.png" type="node,closedway" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:shop=jewelry"
+                  de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:shop=jewelry"
                   pt.href="http://wiki.openstreetmap.org/wiki/Pt:Tag:shop=jewelry"
                   pt_BR.href="http://wiki.openstreetmap.org/wiki/Pt-br:Tag:shop=jewelry"
                   ru.href="http://wiki.openstreetmap.org/wiki/RU:Tag:shop=jewelry" />
@@ -6744,6 +6862,7 @@
         </item> <!-- Jewellery -->
         <item name="Gift/Souvenir" icon="presets/present.svg" type="node,closedway" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:shop=gift"
+                  de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:shop=gift"
                   fr.href="http://wiki.openstreetmap.org/wiki/FR:Tag:shop=gift"
                   ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:shop=gift"
                   ko.href="http://wiki.openstreetmap.org/wiki/Ko:Tag:shop=gift"
@@ -6870,7 +6989,8 @@
             <reference ref="link_contact_address_payment" />
         </item> <!-- Variety Store -->
         <item name="Bookmaker" icon="presets/lottery.svg" type="node,closedway" preset_name_label="true">
-            <link href="http://wiki.openstreetmap.org/wiki/Tag:shop=bookmaker" />
+            <link href="http://wiki.openstreetmap.org/wiki/Tag:shop=bookmaker"
+                  de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:shop=bookmaker" />
             <space />
             <key key="shop" value="bookmaker" />
             <reference ref="name_operator_oh_wheelchair" />
@@ -6896,6 +7016,7 @@
         </item> <!-- Bag -->
         <item name="Pet" icon="styles/standard/shop/pet.svg" type="node,closedway" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:shop=pet"
+                  de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:shop=pet"
                   es.href="http://wiki.openstreetmap.org/wiki/ES:Tag:shop=pet"
                   ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:shop=pet"
                   pt_BR.href="http://wiki.openstreetmap.org/wiki/Pt-br:Tag:shop=pet"
@@ -6933,7 +7054,11 @@
         <preset_link preset_name="Payment Methods" />
     </item> <!-- Vending Machine -->
     <item name="Payment Methods" icon="styles/standard/money/dollar.svg" type="node,way,closedway,relation" preset_name_label="true">
-        <link href="http://wiki.openstreetmap.org/wiki/Key:payment" />
+        <link href="http://wiki.openstreetmap.org/wiki/Key:payment"
+                  de.href="http://wiki.openstreetmap.org/wiki/DE:Key:payment"
+                  es.href="http://wiki.openstreetmap.org/wiki/ES:Key:payment"
+                  fr.href="http://wiki.openstreetmap.org/wiki/FR:Key:payment"
+                  ru.href="http://wiki.openstreetmap.org/wiki/RU:Key:payment" />
         <space />
         <combo key="payment:cash" text="Cash" values="yes,no" />
         <checkgroup columns="4">
@@ -7004,7 +7129,8 @@
         </item> <!-- Administrative -->
         <item name="Political" icon="presets/boundaries.png" type="closedway,relation" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:boundary=political"
-                  pt_BR.href="http://wiki.openstreetmap.org/wiki/Pt-br:Tag:boundary=political" />
+                  pt_BR.href="http://wiki.openstreetmap.org/wiki/Pt-br:Tag:boundary=political"
+                  uk.href="http://wiki.openstreetmap.org/wiki/Uk:Tag:boundary=political" />
             <space />
             <key key="boundary" value="political" />
             <combo key="political_division" text="Division" values="canton,linguistic_community,ward" />
@@ -7012,6 +7138,7 @@
         </item> <!-- Political -->
         <item name="Postal Code" icon="presets/boundaries.png" type="way,closedway,relation" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:boundary=postal_code"
+                  de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:boundary=postal_code"
                   ru.href="http://wiki.openstreetmap.org/wiki/RU:Tag:boundary=postal_code" />
             <space />
             <key key="boundary" value="postal_code" />
@@ -7044,7 +7171,9 @@
             </optional>
         </item> <!-- Protected Area -->
         <item name="Maritime" icon="presets/boundaries.png" type="way,closedway,relation" preset_name_label="true">
-            <link href="http://wiki.openstreetmap.org/wiki/Tag:boundary=maritime" />
+            <link href="http://wiki.openstreetmap.org/wiki/Tag:boundary=maritime"
+                  no.href="http://wiki.openstreetmap.org/wiki/No:Tag:boundary=maritime"
+                  pt_BR.href="http://wiki.openstreetmap.org/wiki/Pt-br:Tag:boundary=maritime" />
             <space />
             <key key="boundary" value="maritime" />
             <combo key="border_type" text="Border type" values="baseline,territorial,contiguous,eez" />
@@ -7115,6 +7244,7 @@
                   da.href="http://wiki.openstreetmap.org/wiki/Da:Tag:place=town"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:place=town"
                   fr.href="http://wiki.openstreetmap.org/wiki/FR:Tag:place=town"
+                  ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:place=town"
                   pl.href="http://wiki.openstreetmap.org/wiki/Pl:Tag:place=town"
                   pt_BR.href="http://wiki.openstreetmap.org/wiki/Pt-br:Tag:place=town"
                   ru.href="http://wiki.openstreetmap.org/wiki/RU:Tag:place=town" />
@@ -7130,6 +7260,7 @@
                   es.href="http://wiki.openstreetmap.org/wiki/ES:Tag:place=village"
                   fr.href="http://wiki.openstreetmap.org/wiki/FR:Tag:place=village"
                   it.href="http://wiki.openstreetmap.org/wiki/IT:Tag:place=village"
+                  ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:place=village"
                   pl.href="http://wiki.openstreetmap.org/wiki/Pl:Tag:place=village"
                   pt_BR.href="http://wiki.openstreetmap.org/wiki/Pt-br:Tag:place=village"
                   ru.href="http://wiki.openstreetmap.org/wiki/RU:Tag:place=village" />
@@ -7143,6 +7274,7 @@
                   da.href="http://wiki.openstreetmap.org/wiki/Da:Tag:place=hamlet"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:place=hamlet"
                   fr.href="http://wiki.openstreetmap.org/wiki/FR:Tag:place=hamlet"
+                  ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:place=hamlet"
                   pl.href="http://wiki.openstreetmap.org/wiki/Pl:Tag:place=hamlet"
                   pt_BR.href="http://wiki.openstreetmap.org/wiki/Pt-br:Tag:place=hamlet"
                   ru.href="http://wiki.openstreetmap.org/wiki/RU:Tag:place=hamlet" />
@@ -7167,6 +7299,7 @@
         <item name="Suburb" icon="styles/standard/place/settlement/suburb.png" type="node,closedway" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:place=suburb"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:place=suburb"
+                  fr.href="http://wiki.openstreetmap.org/wiki/FR:Tag:place=suburb"
                   ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:place=suburb"
                   pl.href="http://wiki.openstreetmap.org/wiki/Pl:Tag:place=suburb"
                   pt_BR.href="http://wiki.openstreetmap.org/wiki/Pt-br:Tag:place=suburb"
@@ -7232,6 +7365,7 @@
             <link href="http://wiki.openstreetmap.org/wiki/Tag:natural=saddle"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:natural=saddle"
                   es.href="http://wiki.openstreetmap.org/wiki/ES:Tag:natural=saddle"
+                  ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:natural=saddle"
                   ru.href="http://wiki.openstreetmap.org/wiki/RU:Tag:natural=saddle" />
             <label text="A saddle point between mountains or hills." />
             <space/>
@@ -7244,7 +7378,8 @@
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:natural=glacier"
                   es.href="http://wiki.openstreetmap.org/wiki/ES:Tag:natural=glacier"
                   fr.href="http://wiki.openstreetmap.org/wiki/FR:Tag:natural=glacier"
-                  pt_BR.href="http://wiki.openstreetmap.org/wiki/Pt-br:Tag:natural=glacier" />
+                  pt_BR.href="http://wiki.openstreetmap.org/wiki/Pt-br:Tag:natural=glacier"
+                  ru.href="http://wiki.openstreetmap.org/wiki/RU:Tag:natural=glacier" />
             <label text="A persistent body of dense ice that is constantly moving under its own weight." />
             <space />
             <key key="natural" value="glacier" />
@@ -7271,6 +7406,7 @@
             <link href="http://wiki.openstreetmap.org/wiki/Tag:natural=ridge"
                   cs.href="http://wiki.openstreetmap.org/wiki/Cs:Tag:natural=ridge"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:natural=ridge"
+                  ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:natural=ridge"
                   pl.href="http://wiki.openstreetmap.org/wiki/Pl:Tag:natural=ridge"
                   ru.href="http://wiki.openstreetmap.org/wiki/RU:Tag:natural=ridge" />
             <label text="A mountain or hill ridge." />
@@ -7280,7 +7416,8 @@
             <text key="ele" text="Elevation" />
         </item> <!-- Ridge -->
         <item name="Valley" icon="presets/valley.svg" type="way,relation" preset_name_label="true">
-            <link href="http://wiki.openstreetmap.org/wiki/Tag:natural=valley" />
+            <link href="http://wiki.openstreetmap.org/wiki/Tag:natural=valley"
+                  ru.href="http://wiki.openstreetmap.org/wiki/RU:Tag:natural=valley" />
             <label text="A low area between hills." />
             <space />
             <key key="natural" value="valley" />
@@ -7292,7 +7429,8 @@
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:natural=cave_entrance"
                   es.href="http://wiki.openstreetmap.org/wiki/ES:Tag:natural=cave_entrance"
                   pl.href="http://wiki.openstreetmap.org/wiki/Pl:Tag:natural=cave_entrance"
-                  pt_BR.href="http://wiki.openstreetmap.org/wiki/Pt-br:Tag:natural=cave_entrance" />
+                  pt_BR.href="http://wiki.openstreetmap.org/wiki/Pt-br:Tag:natural=cave_entrance"
+                  ru.href="http://wiki.openstreetmap.org/wiki/RU:Tag:natural=cave_entrance" />
             <label text="The entrance to a cave." />
             <space />
             <key key="natural" value="cave_entrance" />
@@ -7372,7 +7510,8 @@
                   ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:natural=wood"
                   pl.href="http://wiki.openstreetmap.org/wiki/Pl:Tag:natural=wood"
                   pt_BR.href="http://wiki.openstreetmap.org/wiki/Pt-br:Tag:natural=wood"
-                  ru.href="http://wiki.openstreetmap.org/wiki/RU:Tag:natural=wood" />
+                  ru.href="http://wiki.openstreetmap.org/wiki/RU:Tag:natural=wood"
+                  uk.href="http://wiki.openstreetmap.org/wiki/Uk:Tag:natural=wood" />
             <label text="Woodland where timber production does not dominate use." />
             <space />
             <key key="natural" value="wood" />
@@ -7394,7 +7533,13 @@
             <reference ref="leaf" />
         </item> <!-- Forest -->
         <item name="Cutline" icon="styles/standard/misc/landmark/cutline.svg" type="way" preset_name_label="true">
-            <link href="http://wiki.openstreetmap.org/wiki/Tag:man_made=cutline" />
+            <link href="http://wiki.openstreetmap.org/wiki/Tag:man_made=cutline"
+                  de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:man_made=cutline"
+                  fr.href="http://wiki.openstreetmap.org/wiki/FR:Tag:man_made=cutline"
+                  ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:man_made=cutline"
+                  pl.href="http://wiki.openstreetmap.org/wiki/Pl:Tag:man_made=cutline"
+                  pt_BR.href="http://wiki.openstreetmap.org/wiki/Pt-br:Tag:man_made=cutline"
+                  ru.href="http://wiki.openstreetmap.org/wiki/RU:Tag:man_made=cutline" />
             <space />
             <key key="man_made" value="cutline" />
             <combo key="cutline" text="Type" values="border,firebreak,hunting,loggingmachine,pipeline,piste,section" values_context="cutline" />
@@ -7429,10 +7574,12 @@
         <item name="Scree" icon="presets/empty.png" type="closedway,relation" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:natural=scree"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:natural=scree"
+                  fr.href="http://wiki.openstreetmap.org/wiki/FR:Tag:natural=scree"
                   it.href="http://wiki.openstreetmap.org/wiki/IT:Tag:natural=scree"
                   ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:natural=scree"
                   pl.href="http://wiki.openstreetmap.org/wiki/Pl:Tag:natural=scree"
-                  pt_BR.href="http://wiki.openstreetmap.org/wiki/Pt-br:Tag:natural=scree" />
+                  pt_BR.href="http://wiki.openstreetmap.org/wiki/Pt-br:Tag:natural=scree"
+                  ru.href="http://wiki.openstreetmap.org/wiki/RU:Tag:natural=scree" />
             <label text="An accumulation of loose rocks." />
             <space />
             <key key="natural" value="scree" />
@@ -7491,7 +7638,10 @@
         <item name="Bare Rock" icon="presets/empty.png" type="closedway,relation" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:natural=bare_rock"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:natural=bare_rock"
+                  fr.href="http://wiki.openstreetmap.org/wiki/FR:Tag:natural=bare_rock"
+                  ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:natural=bare_rock"
                   pl.href="http://wiki.openstreetmap.org/wiki/Pl:Tag:natural=bare_rock"
+                  ru.href="http://wiki.openstreetmap.org/wiki/RU:Tag:natural=bare_rock"
                   uk.href="http://wiki.openstreetmap.org/wiki/Uk:Tag:natural=bare_rock" />
             <label text="For areas of solid visible rock that is sparsely vegetated or not vegetated at all." />
             <space />
@@ -7499,7 +7649,9 @@
             <text key="name" text="Name" />
         </item> <!-- Bare Rock -->
         <item name="Rock" icon="styles/standard/misc/rock.svg" type="node,closedway" preset_name_label="true">
-            <link href="http://wiki.openstreetmap.org/wiki/Tag:natural=rock" />
+            <link href="http://wiki.openstreetmap.org/wiki/Tag:natural=rock"
+                  cs.href="http://wiki.openstreetmap.org/wiki/Cs:Tag:natural=rock"
+                  es.href="http://wiki.openstreetmap.org/wiki/ES:Tag:natural=rock" />
             <label text="A notable rock or group of rocks, with at least one of them firmly attached to the underlying bedrock." />
             <space />
             <key key="natural" value="rock" />
@@ -7581,6 +7733,7 @@
         </item> <!-- Vineyard -->
         <item name="Greenhouse Horticulture" icon="presets/greenhouse_horticulture.png" type="closedway" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:landuse=greenhouse_horticulture"
+                  de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:landuse=greenhouse_horticulture"
                   ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:landuse=greenhouse_horticulture"
                   pl.href="http://wiki.openstreetmap.org/wiki/Pl:Tag:landuse=greenhouse_horticulture"
                   pt_BR.href="http://wiki.openstreetmap.org/wiki/Pt-br:Tag:landuse=greenhouse_horticulture"
@@ -7691,7 +7844,6 @@
             <link href="http://wiki.openstreetmap.org/wiki/Tag:landuse=residential"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:landuse=residential"
                   fr.href="http://wiki.openstreetmap.org/wiki/FR:Tag:landuse=residential"
-                  ht.href="http://wiki.openstreetmap.org/wiki/Ht:Tag:landuse=residential"
                   ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:landuse=residential"
                   pl.href="http://wiki.openstreetmap.org/wiki/Pl:Tag:landuse=residential"
                   pt_BR.href="http://wiki.openstreetmap.org/wiki/Pt-br:Tag:landuse=residential"
@@ -8127,6 +8279,7 @@
                   es.href="http://wiki.openstreetmap.org/wiki/ES:Relation:enforcement"
                   fr.href="http://wiki.openstreetmap.org/wiki/FR:Relation:enforcement"
                   it.href="http://wiki.openstreetmap.org/wiki/IT:Relation:enforcement"
+                  ja.href="http://wiki.openstreetmap.org/wiki/JA:Relation:enforcement"
                   pl.href="http://wiki.openstreetmap.org/wiki/Pl:Relation:enforcement"
                   ru.href="http://wiki.openstreetmap.org/wiki/RU:Relation:enforcement" />
             <space />
@@ -8194,7 +8347,8 @@
                   ja.href="http://wiki.openstreetmap.org/wiki/JA:Hiking"
                   pl.href="http://wiki.openstreetmap.org/wiki/Pl:Hiking"
                   ro.href="http://wiki.openstreetmap.org/wiki/Ro:Hiking"
-                  ru.href="http://wiki.openstreetmap.org/wiki/RU:Hiking" />
+                  ru.href="http://wiki.openstreetmap.org/wiki/RU:Hiking"
+                  vi.href="http://wiki.openstreetmap.org/wiki/Vi:Hiking" />
                 <space/>
                 <key key="type" value="route"/>
                 <key key="route" value="hiking"/>
@@ -8211,6 +8365,7 @@
             </item> <!-- Hiking Route -->
             <item name="Piste Route" icon="presets/path.png" type="relation" preset_name_label="true">
                 <link href="http://wiki.openstreetmap.org/wiki/Tag:route=piste"
+                  de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:route=piste"
                   fr.href="http://wiki.openstreetmap.org/wiki/FR:Tag:route=piste" />
                 <space/>
                 <key key="type" value="route"/>
@@ -8294,6 +8449,7 @@
             </item> <!-- Railway Route -->
             <item name="Road Route" icon="presets/path.png" type="relation" preset_name_label="true">
                 <link href="http://wiki.openstreetmap.org/wiki/Tag:route=road"
+                  de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:route=road"
                   ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:route=road"
                   pt_BR.href="http://wiki.openstreetmap.org/wiki/Pt-br:Tag:route=road" />
                 <space/>
diff --git a/data/tagging-preset.xsd b/data/tagging-preset.xsd
index 90a8b20..e8b7ca6 100644
--- a/data/tagging-preset.xsd
+++ b/data/tagging-preset.xsd
@@ -27,6 +27,7 @@
 				<attribute name="shortdescription" type="string" />
 				<attribute name="description" type="string" />
 				<attribute name="link" type="string" />
+				<attribute name="baselanguage" type="string" />
 
 				<anyAttribute processContents="skip" />
 			</extension>
diff --git a/data/validator/combinations.mapcss b/data/validator/combinations.mapcss
index 58809d7..f8aa685 100644
--- a/data/validator/combinations.mapcss
+++ b/data/validator/combinations.mapcss
@@ -240,7 +240,7 @@ way[highway][natural],
 }
 
 /* see #9593, #11183 */
-*[sport][!building][tourism != hotel][highway != raceway][leisure !~ /^(sports_centre|stadium|track|pitch|golf_course|water_park|swimming_pool|recreation_ground)$/][natural !~ /^(beach|bare_rock|peak)$/][amenity !~ /^(pub|restaurant|swimming_pool)$/][landuse !~ /^(recreation_ground|piste|farm|farmland)$/][barrier !~ /^(wall|retaining_wall)$/][!"piste:type"] {
+*[sport][!building][!club][tourism != hotel][highway != raceway][leisure !~ /^(sports_centre|stadium|track|pitch|golf_course|water_park|swimming_pool|recreation_ground)$/][natural !~ /^(beach|bare_rock|peak)$/][amenity !~ /^(pub|restaurant|swimming_pool)$/][landuse !~ /^(recreation_ground|piste|farm|farmland)$/][barrier !~ /^(wall|retaining_wall)$/][!"piste:type"] {
     throwWarning: tr("sport without physical feature");
     assertMatch: "node sport=tennis";
     assertNoMatch: "node sport=tennis leisure=pitch";
diff --git a/data/validator/tagchecker.cfg b/data_nodist/tagchecker.cfg
similarity index 100%
rename from data/validator/tagchecker.cfg
rename to data_nodist/tagchecker.cfg
diff --git a/data_nodist/trans/ast.lang b/data_nodist/trans/ast.lang
new file mode 100644
index 0000000..6656851
Binary files /dev/null and b/data_nodist/trans/ast.lang differ
diff --git a/data_nodist/trans/bg.lang b/data_nodist/trans/bg.lang
new file mode 100644
index 0000000..354c9cc
Binary files /dev/null and b/data_nodist/trans/bg.lang differ
diff --git a/data_nodist/trans/ca-valencia.lang b/data_nodist/trans/ca-valencia.lang
new file mode 100644
index 0000000..c60c7b7
Binary files /dev/null and b/data_nodist/trans/ca-valencia.lang differ
diff --git a/data_nodist/trans/ca.lang b/data_nodist/trans/ca.lang
new file mode 100644
index 0000000..60224a5
Binary files /dev/null and b/data_nodist/trans/ca.lang differ
diff --git a/data_nodist/trans/cs.lang b/data_nodist/trans/cs.lang
new file mode 100644
index 0000000..4c4efeb
Binary files /dev/null and b/data_nodist/trans/cs.lang differ
diff --git a/data_nodist/trans/da.lang b/data_nodist/trans/da.lang
new file mode 100644
index 0000000..4972a21
Binary files /dev/null and b/data_nodist/trans/da.lang differ
diff --git a/data_nodist/trans/de.lang b/data_nodist/trans/de.lang
new file mode 100644
index 0000000..322a150
Binary files /dev/null and b/data_nodist/trans/de.lang differ
diff --git a/data_nodist/trans/el.lang b/data_nodist/trans/el.lang
new file mode 100644
index 0000000..05e495b
Binary files /dev/null and b/data_nodist/trans/el.lang differ
diff --git a/data_nodist/trans/en.lang b/data_nodist/trans/en.lang
new file mode 100644
index 0000000..b84d8b5
Binary files /dev/null and b/data_nodist/trans/en.lang differ
diff --git a/data_nodist/trans/en_AU.lang b/data_nodist/trans/en_AU.lang
new file mode 100644
index 0000000..6728487
Binary files /dev/null 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
new file mode 100644
index 0000000..59d354f
Binary files /dev/null and b/data_nodist/trans/en_GB.lang differ
diff --git a/data_nodist/trans/es.lang b/data_nodist/trans/es.lang
new file mode 100644
index 0000000..b5d560a
Binary files /dev/null and b/data_nodist/trans/es.lang differ
diff --git a/data_nodist/trans/et.lang b/data_nodist/trans/et.lang
new file mode 100644
index 0000000..2b5d761
Binary files /dev/null and b/data_nodist/trans/et.lang differ
diff --git a/data_nodist/trans/fi.lang b/data_nodist/trans/fi.lang
new file mode 100644
index 0000000..674e5b5
Binary files /dev/null and b/data_nodist/trans/fi.lang differ
diff --git a/data_nodist/trans/fr.lang b/data_nodist/trans/fr.lang
new file mode 100644
index 0000000..9925c14
Binary files /dev/null and b/data_nodist/trans/fr.lang differ
diff --git a/data_nodist/trans/gl.lang b/data_nodist/trans/gl.lang
new file mode 100644
index 0000000..cdb7f61
Binary files /dev/null and b/data_nodist/trans/gl.lang differ
diff --git a/data_nodist/trans/hu.lang b/data_nodist/trans/hu.lang
new file mode 100644
index 0000000..522b295
Binary files /dev/null and b/data_nodist/trans/hu.lang differ
diff --git a/data_nodist/trans/id.lang b/data_nodist/trans/id.lang
new file mode 100644
index 0000000..c0003af
Binary files /dev/null and b/data_nodist/trans/id.lang differ
diff --git a/data_nodist/trans/it.lang b/data_nodist/trans/it.lang
new file mode 100644
index 0000000..e7cde95
Binary files /dev/null and b/data_nodist/trans/it.lang differ
diff --git a/data_nodist/trans/ja.lang b/data_nodist/trans/ja.lang
new file mode 100644
index 0000000..d112cfe
Binary files /dev/null and b/data_nodist/trans/ja.lang differ
diff --git a/data_nodist/trans/km.lang b/data_nodist/trans/km.lang
new file mode 100644
index 0000000..92f16bf
Binary files /dev/null and b/data_nodist/trans/km.lang differ
diff --git a/data_nodist/trans/lt.lang b/data_nodist/trans/lt.lang
new file mode 100644
index 0000000..b824b44
Binary files /dev/null and b/data_nodist/trans/lt.lang differ
diff --git a/data_nodist/trans/nl.lang b/data_nodist/trans/nl.lang
new file mode 100644
index 0000000..7d2e59d
Binary files /dev/null and b/data_nodist/trans/nl.lang differ
diff --git a/data_nodist/trans/pl.lang b/data_nodist/trans/pl.lang
new file mode 100644
index 0000000..01c49a8
Binary files /dev/null and b/data_nodist/trans/pl.lang differ
diff --git a/data_nodist/trans/pt.lang b/data_nodist/trans/pt.lang
new file mode 100644
index 0000000..cfc47fc
Binary files /dev/null and b/data_nodist/trans/pt.lang differ
diff --git a/data_nodist/trans/pt_BR.lang b/data_nodist/trans/pt_BR.lang
new file mode 100644
index 0000000..c576704
Binary files /dev/null and b/data_nodist/trans/pt_BR.lang differ
diff --git a/data_nodist/trans/ru.lang b/data_nodist/trans/ru.lang
new file mode 100644
index 0000000..878e2bf
Binary files /dev/null and b/data_nodist/trans/ru.lang differ
diff --git a/data_nodist/trans/sk.lang b/data_nodist/trans/sk.lang
new file mode 100644
index 0000000..3f030de
Binary files /dev/null and b/data_nodist/trans/sk.lang differ
diff --git a/data_nodist/trans/sv.lang b/data_nodist/trans/sv.lang
new file mode 100644
index 0000000..b9d0f41
Binary files /dev/null and b/data_nodist/trans/sv.lang differ
diff --git a/data_nodist/trans/uk.lang b/data_nodist/trans/uk.lang
new file mode 100644
index 0000000..a9a88fb
Binary files /dev/null and b/data_nodist/trans/uk.lang differ
diff --git a/data_nodist/trans/zh_CN.lang b/data_nodist/trans/zh_CN.lang
new file mode 100644
index 0000000..3abe436
Binary files /dev/null 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
new file mode 100644
index 0000000..8eb984e
Binary files /dev/null and b/data_nodist/trans/zh_TW.lang differ
diff --git a/eclipse/JOSM (Java 7).launch b/eclipse/JOSM (Java 7).launch
new file mode 100644
index 0000000..c2ed6b0
--- /dev/null
+++ b/eclipse/JOSM (Java 7).launch	
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<launchConfiguration type="org.eclipse.jdt.launching.localJavaApplication">
+<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
+<listEntry value="/JOSM/src/JOSM.java"/>
+</listAttribute>
+<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
+<listEntry value="1"/>
+</listAttribute>
+<stringAttribute key="org.eclipse.debug.core.source_locator_id" value="org.eclipse.jdt.launching.sourceLocator.JavaSourceLookupDirector"/>
+<stringAttribute key="org.eclipse.debug.core.source_locator_memento" value="<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<sourceLookupDirector>
<sourceContainers duplicates="false">
<container memento="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;javaProject name=&quot;JOSM&quo [...]
+<listAttribute key="org.eclipse.jdt.launching.CLASSPATH">
+<listEntry value="<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<runtimeClasspathEntry containerPath="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7" path="1" type="4"/>
"/>
+<listEntry value="<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<runtimeClasspathEntry id="org.eclipse.jdt.launching.classpathentry.defaultClasspath">
<memento exportedEntriesOnly="false" project="JOSM"/>
</runtimeClasspathEntry>
"/>
+<listEntry value="<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<runtimeClasspathEntry internalArchive="/JOSM/bin2" path="3" type="2"/>
"/>
+</listAttribute>
+<booleanAttribute key="org.eclipse.jdt.launching.DEFAULT_CLASSPATH" value="false"/>
+<stringAttribute key="org.eclipse.jdt.launching.JRE_CONTAINER" value="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/>
+<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="JOSM"/>
+<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="--debug"/>
+<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="JOSM"/>
+</launchConfiguration>
diff --git a/eclipse/JOSM (Java 8).launch b/eclipse/JOSM (Java 8).launch
new file mode 100644
index 0000000..82aaf9c
--- /dev/null
+++ b/eclipse/JOSM (Java 8).launch	
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<launchConfiguration type="org.eclipse.jdt.launching.localJavaApplication">
+<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
+<listEntry value="/JOSM/src/JOSM.java"/>
+</listAttribute>
+<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
+<listEntry value="1"/>
+</listAttribute>
+<stringAttribute key="org.eclipse.debug.core.source_locator_id" value="org.eclipse.jdt.launching.sourceLocator.JavaSourceLookupDirector"/>
+<stringAttribute key="org.eclipse.debug.core.source_locator_memento" value="<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<sourceLookupDirector>
<sourceContainers duplicates="false">
<container memento="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;javaProject name=&quot;JOSM&quo [...]
+<listAttribute key="org.eclipse.jdt.launching.CLASSPATH">
+<listEntry value="<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<runtimeClasspathEntry containerPath="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8" path="1" type="4"/>
"/>
+<listEntry value="<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<runtimeClasspathEntry id="org.eclipse.jdt.launching.classpathentry.defaultClasspath">
<memento exportedEntriesOnly="false" project="JOSM"/>
</runtimeClasspathEntry>
"/>
+<listEntry value="<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<runtimeClasspathEntry internalArchive="/JOSM/bin2" path="3" type="2"/>
"/>
+</listAttribute>
+<booleanAttribute key="org.eclipse.jdt.launching.DEFAULT_CLASSPATH" value="false"/>
+<stringAttribute key="org.eclipse.jdt.launching.JRE_CONTAINER" value="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
+<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="JOSM"/>
+<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="--debug"/>
+<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="JOSM"/>
+</launchConfiguration>
diff --git a/i18n/.tx/config b/i18n/.tx/config
index d7146be..3695b70 100644
--- a/i18n/.tx/config
+++ b/i18n/.tx/config
@@ -2,19 +2,19 @@
 host = https://www.transifex.com
 
 [josm.core]
-file_filter = po/<lang>.po
+file_filter = po/<lang>/core.po
 source_file = po/core.pot
 source_lang = en
 type = PO
 
 [josm.data]
-file_filter = po/<lang>.po
+file_filter = po/<lang>/data.po
 source_file = po/data.pot
 source_lang = en
 type = PO
 
 [josm.plugins]
-file_filter = po/<lang>.po
+file_filter = po/<lang>/plugins.po
 source_file = po/plugins.pot
 source_lang = en
 type = PO
diff --git a/i18n/build.xml b/i18n/build.xml
index a839c2f..07cfed1 100644
--- a/i18n/build.xml
+++ b/i18n/build.xml
@@ -3,21 +3,20 @@
     <!-- compilation properties -->
     <property name="josm.build.dir" value="../core"/>
     <property name="josm.presets" value="${josm.build.dir}/data/defaultpresets.xml"/>
-    <!--<property name="josm.style" value="${josm.build.dir}/styles/standard/elemstyles.xml"/>-->
     <property name="plugin.dir" value="../plugins"/>
-    <!--<property name="validator.tagfile" value="${josm.build.dir}/data/validator/tagchecker.cfg"/>-->
     <property name="maps.srcfile" value="http://josm.openstreetmap.de/maps"/>
+    <property name="wiki.srcfile" value="http://josm.openstreetmap.de/josmfile?mode=en"/>
     <property name="surveyor.srcfile" value="${plugin.dir}/surveyor/resources/surveyor.xml"/>
     <property name="i18n.build.dir" value="build"/>
     <property name="i18n.install.dir" value="${josm.build.dir}/data"/>
+    <property name="i18n_data.install.dir" value="${josm.build.dir}/data_nodist/trans"/>
     <property name="po.build.dir" value="${i18n.build.dir}"/>
     <property name="ant.build.javac.target" value="1.5"/>
     <property name="gettexttasks.jar" value="lib/gettext-ant-tasks-0.9.7.jar"/>
     <property name="antcontrib.jar" value="lib/ant-contrib-1.0b3.jar"/>
     <target name="init" description="Loads the Ant gettext and contrib tasks">
         <taskdef name="gettext-extract" classname="org.xnap.commons.ant.gettext.GettextExtractKeysTask" classpath="${gettexttasks.jar}"/>
-        <taskdef name="gettext-merge" classname="org.xnap.commons.ant.gettext.GettextMergeKeysTask" classpath="${gettexttasks.jar}"/>
-        <taskdef name="gettext-dist" classname="org.xnap.commons.ant.gettext.GettextDistTask" classpath="${gettexttasks.jar}"/>
+        <!-- for the <foreach> possibility -->
         <taskdef resource="net/sf/antcontrib/antcontrib.properties" classpath="${antcontrib.jar}"/>
     </target>
     <target name="builddir">
@@ -27,12 +26,6 @@
         <exec executable="perl" failonerror="true" output="${i18n.build.dir}/trans_presets.java">
             <arg line="convpreset.pl ${josm.presets}"/>
         </exec>
-        <!--<exec executable="perl" output="${i18n.build.dir}/trans_style.java">
-            <arg line="convstyle.pl ${josm.style}"/>
-        </exec>-->
-        <!--<exec executable="perl" failonerror="true" output="${i18n.build.dir}/trans_validator.java">
-            <arg line="convvalidator.pl ${validator.tagfile}"/>
-        </exec>-->
         <exec executable="perl" failonerror="true" output="${i18n.build.dir}/trans_maps.java">
             <arg line="convmaps.pl ${maps.srcfile}"/>
         </exec>
@@ -42,6 +35,9 @@
         <exec executable="perl" failonerror="true" output="${i18n.build.dir}/trans_plugins.java">
             <arg line="convplugins.pl ${plugin.dir}/*/build.xml"/>
         </exec>
+        <exec executable="perl" failonerror="true">
+            <arg line="convwiki.pl ${wiki.srcfile} ${i18n.build.dir}/josmfiles ${i18n.build.dir}/josmfiles.zip"/>
+        </exec>
         <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">
@@ -49,72 +45,82 @@
             <fileset dir="${josm.build.dir}/src" includes="**/*.java"/>
             <fileset dir="${i18n.build.dir}" includes="specialmessages.java"/>
             <fileset dir="${i18n.build.dir}" includes="trans_*.java"/>
+            <!-- <fileset dir="${i18n.build.dir}/josmfiles" includes="trans_*.*"/> disable for now -->
             <fileset dir="${josm.build.dir}/data/validator" includes="*.mapcss"/>
             <fileset dir="${josm.build.dir}/styles/standard" includes="*.mapcss"/>
             <fileset dir="${plugin.dir}" includes="**/*.java"/>
         </gettext-extract>
     </target>
-    <target name="po/core.pot" description="Extracts message keys from the JOSM core source code" depends="builddir,init">
+    <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">
             <fileset dir="${josm.build.dir}/src" includes="**/*.java"/>
             <fileset dir="${i18n.build.dir}" includes="specialmessages.java"/>
+            <fileset dir="${i18n.build.dir}" includes="trans_presets.java"/>
+            <!-- maps should be in data instead, but that requires language file loading support in trac python code -->
+            <fileset dir="${i18n.build.dir}" includes="trans_maps.java"/>
+            <fileset dir="${josm.build.dir}/data/validator" includes="*.mapcss"/>
+            <fileset dir="${josm.build.dir}/styles/standard" includes="*.mapcss"/>
         </gettext-extract>
     </target>
-    <target name="${i18n.build.dir}/core.2.pot" depends="builddir,po/core.pot" description="Duplicates core.pot for de-duplication in data.pot and plugins.pot">
-        <copy file="po/core.pot" tofile="${i18n.build.dir}/core.2.pot"/>
-    </target>
-    <target name="po/data.pot" description="Extracts message keys from data files, e.g., presets, imagery (minus core strings)" depends="trans_.java,po/core.pot,${i18n.build.dir}/core.2.pot,init">
+    <target name="po/data.pot" description="Extracts message keys from data files, e.g., presets, imagery (minus core strings)" depends="trans_.java,po/core.pot,init">
         <gettext-extract keysFile="data.raw.pot" poDirectory="${i18n.build.dir}" keywords="-k -ktrc:1c,2 -kmarktrc:1c,2 -ktr -kmarktr -ktrn:1,2 -ktrnc:1c,2,3">
-            <fileset dir="${i18n.build.dir}" includes="trans_*.java"/>
-            <fileset dir="${josm.build.dir}/data/validator" includes="*.mapcss"/>
-            <fileset dir="${josm.build.dir}/styles/standard" includes="*.mapcss"/>
+            <fileset dir="${i18n.build.dir}" includes="trans_plugins.java"/>
+            <!-- <fileset dir="${i18n.build.dir}/josmfiles" includes="trans_*.*"/> -->
         </gettext-extract>
+        <copy todir="${po.build.dir}">
+            <fileset dir="po" includes="core.pot"/>
+        </copy>
         <exec executable="msgcomm" failonerror="true" output="po/data.pot">
-            <arg line="--unique po/core.pot ${i18n.build.dir}/core.2.pot ${i18n.build.dir}/data.raw.pot"/>
+            <arg line="--unique po/core.pot ${po.build.dir}/core.pot ${i18n.build.dir}/data.raw.pot"/>
         </exec>
+        <delete file="${po.build.dir}/core.pot"/>
+        <delete file="${po.build.dir}/data.raw.pot"/>
     </target>
-    <target name="po/plugins.pot" description="Extracts message keys from the plugins source code (minus core strings)" depends="po/core.pot,${i18n.build.dir}/core.2.pot,init">
+    <target name="po/plugins.pot" description="Extracts message keys from the plugins source code (minus core and data strings)" depends="trans_.java,po/core.pot,po/data.pot,init">
         <gettext-extract keysFile="plugins.raw.pot" poDirectory="${i18n.build.dir}" keywords="-k -ktrc:1c,2 -kmarktrc:1c,2 -ktr -kmarktr -ktrn:1,2 -ktrnc:1c,2,3">
             <fileset dir="${plugin.dir}" includes="**/*.java"/>
+            <fileset dir="${i18n.build.dir}" includes="trans_surveyor.java"/>
         </gettext-extract>
+        <copy todir="${po.build.dir}">
+            <fileset dir="po" includes="core.pot"/>
+            <fileset dir="po" includes="data.pot"/>
+        </copy>
         <exec executable="msgcomm" failonerror="true" output="po/plugins.pot">
-            <arg line="--unique po/core.pot ${i18n.build.dir}/core.2.pot ${i18n.build.dir}/plugins.raw.pot"/>
+            <arg line="--unique po/core.pot ${po.build.dir}/core.pot po/data.pot ${po.build.dir}/data.pot ${i18n.build.dir}/plugins.raw.pot"/>
         </exec>
+        <delete file="${po.build.dir}/core.pot"/>
+        <delete file="${po.build.dir}/data.pot"/>
+        <delete file="${po.build.dir}/plugins.raw.pot"/>
     </target>
-    <target name="build" depends="po/josm.pot,init">
-        <gettext-merge keysFile="josm.pot" poDirectory="po"/>
+    <target name="build" depends="pot,allpot">
         <antcall target="coretrans"/>
+        <antcall target="datatrans"/>
         <foreach param="path" target="plugintrans">
             <path>
                 <dirset dir="${plugin.dir}" includes="*" excludes="00_*" />
             </path>
         </foreach>
     </target>
-    <target name="singleplugintrans" depends="po/josm.pot,init">
+    <target name="singleplugintrans" depends="init">
         <antcall target="plugintrans">
             <param name="path" value="${plugin}"/>
         </antcall>
     </target>
-    <target name="buildcore" depends="po/josm.pot,init">
+    <target name="buildcore" depends="po/core.pot,po/data.pot">
         <antcall target="coretrans"/>
+        <antcall target="datatrans"/>
     </target>
     <target name="coretrans">
-        <mkdir dir="${po.build.dir}/core"/>
-        <gettext-extract keysFile="josm.pot" poDirectory="${po.build.dir}/core" 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"/>
-            <fileset dir="${josm.build.dir}/data/validator" includes="*.mapcss"/>
-        </gettext-extract>
-        <copy todir="${po.build.dir}/core">
-            <fileset dir="po"/>
-        </copy>
-        <gettext-merge keysFile="josm.pot" poDirectory="${po.build.dir}/core"/>
         <exec executable="perl" failonerror="true">
-            <arg line="i18n.pl ${i18n.install.dir}/ ${po.build.dir}/core/*.po"/>
+            <arg line="i18n.pl --potfile=po/core.pot --basedir=${i18n.install.dir}/ po/*.po"/>
+        </exec>
+    </target>
+    <target name="datatrans">
+        <exec executable="perl" failonerror="true">
+            <arg line="i18n.pl --potfile=po/data.pot --basedir=${i18n_data.install.dir}/ po/*.po"/>
         </exec>
     </target>
-    <target name="plugintrans" depends="init">
+    <target name="plugintrans">
         <basename file="${path}" property="dir"/>
         <mkdir dir="${po.build.dir}/plugin_${dir}"/>
         <exec executable="perl" failonerror="true" output="${po.build.dir}/plugin_${dir}/trans_plugin.java">
@@ -123,20 +129,17 @@
         <gettext-extract keysFile="josm.pot" poDirectory="${po.build.dir}/plugin_${dir}" keywords="-k -ktrc:1c,2 -kmarktrc:1c,2 -ktr -kmarktr -ktrn:1,2 -ktrnc:1c,2,3">
             <fileset dir="${plugin.dir}/${dir}" includes="**/*.java"/>
             <fileset dir="${po.build.dir}/plugin_${dir}" includes="trans_*.java"/>
+            <fileset dir="${i18n.build.dir}" includes="trans_${dir}.java"/>
         </gettext-extract>
         <if>
             <available file="${po.build.dir}/plugin_${dir}/josm.pot"/>
             <then>
-                <copy todir="${po.build.dir}/plugin_${dir}">
-                    <fileset dir="po"/>
-                </copy>
-                <gettext-merge keysFile="josm.pot" poDirectory="${po.build.dir}/plugin_${dir}"/>
                 <exec executable="perl" failonerror="true">
-                    <arg line="i18n.pl ${plugin.dir}/${dir}/data/ ${po.build.dir}/plugin_${dir}/*.po"/>
+                    <arg line="i18n.pl --potfile=${po.build.dir}/plugin_${dir}/josm.pot --basedir=${plugin.dir}/${dir}/data/ po/*.po"/>
                 </exec>
             </then>
         </if>
-        <delete dir="${po.build.dir}/plugin_${dir}"/>
+        <delete dir="${po.build.dir}/plugin_${dir}ss"/>
     </target>
     <target name="clean">
         <delete dir="${i18n.build.dir}"/>
@@ -148,14 +151,14 @@
             <fileset dir="po" includes="*.po" defaultexcludes="false"/>
         </delete>
     </target>
-    <target name="test">
+    <target name="test" depends="pot">
         <mkdir dir="${i18n.build.dir}/test"/>
         <exec executable="perl" failonerror="true">
-            <arg line="i18n.pl ${i18n.build.dir}/test/ po/*.po"/>
+            <arg line="i18n.pl --potfile=po/josm.pot --basedir=${i18n.build.dir}/test/ po/*.po"/>
         </exec>
     </target>
     <target name="pot" depends="po/josm.pot" />
-    <target name="transifex" depends="po/core.pot,po/plugins.pot,po/data.pot" />
+    <target name="allpot" depends="po/core.pot,po/data.pot,po/plugins.pot" />
     <target name="update">
         <exec executable="perl" failonerror="true">
             <arg line="launchpad.pl bzronly"/>
diff --git a/i18n/convcss.pl b/i18n/convcss.pl
new file mode 100644
index 0000000..ffbcb30
--- /dev/null
+++ b/i18n/convcss.pl
@@ -0,0 +1,14 @@
+#! /usr/bin/perl -w
+
+# Written by Dirk Stöcker <openstreetmap at dstoecker.de>
+# Public domain, no rights reserved.
+
+use strict;
+
+my $skipmore = 0;
+while(my $line = <>)
+{
+  $skipmore = 1 if $line =~ /meta\[lang/;
+  $line =~ s/((?:title|description): +)(.*)(;)/$1tr($2)$3/ if !$skipmore;
+  print $line;
+}
diff --git a/i18n/convmaps.pl b/i18n/convmaps.pl
index ed86fb3..6eeb6df 100644
--- a/i18n/convmaps.pl
+++ b/i18n/convmaps.pl
@@ -5,7 +5,7 @@
 
 use strict;
 use LWP::Simple;
-use encoding 'utf8';
+use open qw/:std :encoding(utf8)/;
 
 my $item;
 my $comment = 0;
diff --git a/i18n/convpreset.pl b/i18n/convpreset.pl
index 4c86335..4eba572 100644
--- a/i18n/convpreset.pl
+++ b/i18n/convpreset.pl
@@ -139,7 +139,7 @@ while(my $line = <>)
     print "/* item $item $type $n */" . ($tctx ? " trc($tctx, $n);" : " tr($n);");
     # display_values / values
     my $sp = ($line =~ /delimiter="(.*?)"/) ? $1 : ($type eq "combo" ? ",":";");
-    my $vals = ($line =~ /display_values="(.*?)"/) ? $1 : ($line =~ /values="(.*?)"/) ? $1 : undef;
+    my $vals = ($line =~ / display_values="(.*?)"/) ? $1 : ($line =~ /values="(.*?)"/) ? $1 : undef;
     if($vals)
     {
       my @combo_values = split "\Q$sp\E" ,$vals;
@@ -183,7 +183,7 @@ while(my $line = <>)
     $item = "";
     print "\n";
   }
-  elsif($line =~ /<\/combo/)
+  elsif($line =~ /<\/(combo|multiselect)/)
   {
     $combo_n = "";
     print "\n";
@@ -211,7 +211,8 @@ while(my $line = <>)
      || $line =~ /<preset_link/
      || $comment)
   {
-    print "// $line\n";
+    $line =~ s/[ \t]+((?:short)?description) *= *"([^"]+)/*\/ \/* $1 *\/ tr("$2"); \/*/g;
+    print "/* $line */\n";
   }
   else
   {
diff --git a/i18n/convstyle.pl b/i18n/convstyle.pl
index 0a4dddd..24d2459 100644
--- a/i18n/convstyle.pl
+++ b/i18n/convstyle.pl
@@ -64,6 +64,7 @@ while(my $line = <>)
   }
   else
   {
+    $line =~ s/[ \t]+((?:short)?description) *= *"([^"]+)/*\/ \/* $1 *\/ tr("$2"); \/*/g;
     print "/* $line */\n";
   }
 }
diff --git a/i18n/convvalidator.pl b/i18n/convvalidator.pl
deleted file mode 100644
index d230bc0..0000000
--- a/i18n/convvalidator.pl
+++ /dev/null
@@ -1,40 +0,0 @@
-#! /usr/bin/perl -w
-
-# Written by Dirk Stöcker <openstreetmap at dstoecker.de>
-# Public domain, no rights reserved.
-
-use strict;
-
-my $item;
-my $comment = 0;
-
-# This is a simple conversion and in no way a complete XML parser
-# but it works with a default Perl installation
-
-# Print a header to write valid Java code.  No line break,
-# so that the input and output line numbers will match.
-print "class trans_validator { void tr(String s){} void f() {";
-
-while(my $line = <>)
-{
-  chomp($line);
-  print "tr(\"\"); ";
-  if($line =~ /^#(.*)$/)
-  {
-    print "/* $1 */\n";
-  }
-  elsif($line =~ /^$/)
-  {
-    print "\n";
-  }
-  elsif($line =~ /(.*) *# *(.*) *$/)
-  {
-    print "/* $1 */ tr(\"$2\");\n";
-  }
-  else
-  {
-    print "/* $line */\n";
-  }
-}
-
-print "}}\n";
diff --git a/i18n/convwiki.pl b/i18n/convwiki.pl
new file mode 100644
index 0000000..e05ba16
--- /dev/null
+++ b/i18n/convwiki.pl
@@ -0,0 +1,53 @@
+#! /usr/bin/perl -w
+
+# Written by Dirk Stöcker <openstreetmap at dstoecker.de>
+# Public domain, no rights reserved.
+
+use strict;
+use LWP::Simple;
+use open qw/:std :encoding(utf8)/;
+
+my $filename;
+my $dir = $ARGV[1] || "build/josmfiles";
+if($ARGV[0] && $ARGV[0] =~ /^http:\/\//)
+{
+  $filename = $ARGV[2] || "build/josmfiles.zip";
+  my $content = get($ARGV[0]);
+  die "Couldn't get $ARGV[0]" unless defined $content;
+  open FILE,">:raw",$filename or die "Could not open $filename";
+  print FILE $content;
+  close FILE
+}
+else
+{
+  $filename = $ARGV[0];
+}
+system "rm -rf $dir/";
+print "Extracting to $dir\n";
+mkdir $dir;
+system "unzip -q -d $dir $filename";
+foreach my $name (glob "$dir/*")
+{
+  if($name =~ /^(.*?)([^\/]+-preset\.xml)$/)
+  {
+    system "mv $name $name.orig";
+    my ($path, $xmlname) = ($1, $2);
+    my $res = `xmllint --format --schema ../core/data/tagging-preset.xsd $name.orig --encode utf-8 --output $name 2>&1`;
+    print $res if $res !~ /\.orig validates/;
+    system "perl convpreset.pl $name >${path}trans_$xmlname";
+    unlink "$name.orig";
+  }
+  elsif($name =~ /^(.*?)([^\/]+-style\.xml$)/)
+  {
+    system "perl convstyle.pl $name >${1}trans_$2";
+  }
+  elsif($name =~ /^(.*?)([^\/]+\.mapcss)$/)
+  {
+    system "perl convcss.pl $name >${1}trans_$2";
+  }
+  else
+  {
+    die "Unknown file type $name.";
+  }
+  unlink $name;
+}
diff --git a/i18n/i18n.pl b/i18n/i18n.pl
index 1612f1b..20c22eb 100755
--- a/i18n/i18n.pl
+++ b/i18n/i18n.pl
@@ -1,12 +1,12 @@
 #! /usr/bin/perl -w
 
 use utf8;
+use strict;
 use open qw/:std :encoding(utf8)/;
 use Term::ReadKey;
 use Encode;
 
 my $waswarn = 0;
-my $maxcount = 0;
 my $lang_pattern = '([a-z]{2}_[A-Z]{2}|[a-z]{2,3}|[a-z]{2}\@[a-z]+)';
 my $lang_pattern_file = '([a-z]{2}_[A-Z]{2}|[a-z]{2,3}|[a-z]{2}-[a-z]+)';
 
@@ -19,17 +19,55 @@ sub getdate
   1900+$t[5],$t[4]+1,$t[3],$t[2],$t[1]);
 }
 
-sub loadfiles($@)
+sub loadpot($)
+{
+  my ($file) = @_;
+  my %all = ();
+  my %keys = ();
+  die "Could not open file $file." if(!open FILE,"<:utf8",$file);
+  my %postate = (last => "", type => "");
+  my $linenum = 0;
+  print "Reading file $file\n";
+  while(<FILE>)
+  {
+    ++$linenum;
+    my $fn = "$file:$linenum";
+    chomp;
+    if($_ =~ /^#/ || !$_)
+    {
+      checkpo(\%postate, \%all, "pot", "line $linenum in $file", \%keys, 1, undef);
+      $postate{fuzzy} = 1 if ($_ =~ /fuzzy/);
+    }
+    elsif($_ =~ /^"(.*)"$/) {$postate{last} .= $1;}
+    elsif($_ =~ /^(msg.+) "(.*)"$/)
+    {
+      my ($n, $d) = ($1, $2);
+      my $new = !${postate}{fuzzy} && (($n eq "msgid" && $postate{type} ne "msgctxt") || ($n eq "msgctxt"));
+      checkpo(\%postate, \%all, "pot", "line $linenum in $file", \%keys, $new, undef);
+      $postate{last} = $d;
+      $postate{type} = $n;
+      $postate{src} = $fn if $new;
+    }
+    else
+    {
+      die "Strange line $linenum in $file: $_.";
+    }
+  }
+  checkpo(\%postate, \%all, "pot", "line $linenum in $file", \%keys, 1, undef);
+  close(FILE);
+  return \%all;
+}
+
+sub loadfiles($$@)
 {
   my $desc;
-  my $all;
-  my ($lang, at files) = @_;
+  my %all = ();
+  my %keys = ();
+  my ($lang,$use, at files) = @_;
   foreach my $file (@files)
   {
     die "Could not open file $file." if(!open FILE,"<:utf8",$file);
-    my $linenum = 0;
 
-    my $cnt = -1; # don't count translators info
     if($file =~ /\/$lang_pattern\.po$/)
     {
       my $l = $1;
@@ -44,16 +82,15 @@ sub loadfiles($@)
         chomp;
         if($_ =~ /^#/ || !$_)
         {
-          checkpo(\%postate, \%all, $l, "line $linenum in $file", $keys, 1);
+          checkpo(\%postate, \%all, $l, "line $linenum in $file", \%keys, 1, $use);
           $postate{fuzzy} = 1 if ($_ =~ /fuzzy/);
         }
         elsif($_ =~ /^"(.*)"$/) {$postate{last} .= $1;}
         elsif($_ =~ /^(msg.+) "(.*)"$/)
         {
           my ($n, $d) = ($1, $2);
-          ++$cnt if $n eq "msgid";
           my $new = !${postate}{fuzzy} && (($n eq "msgid" && $postate{type} ne "msgctxt") || ($n eq "msgctxt"));
-          checkpo(\%postate, \%all, $l, "line $linenum in $file", $keys, $new);
+          checkpo(\%postate, \%all, $l, "line $linenum in $file", \%keys, $new, $use);
           $postate{last} = $d;
           $postate{type} = $n;
           $postate{src} = $fn if $new;
@@ -63,13 +100,12 @@ sub loadfiles($@)
           die "Strange line $linenum in $file: $_.";
         }
       }
-      checkpo(\%postate, \%all, $l, "line $linenum in $file", $keys, 1);
+      checkpo(\%postate, \%all, $l, "line $linenum in $file", \%keys, 1, $use);
     }
     else
     {
       die "File format not supported for file $file.";
     }
-    $maxcount = $cnt if $cnt > $maxcount;
     close(FILE);
   }
   return %all;
@@ -78,7 +114,7 @@ sub loadfiles($@)
 my $alwayspo = 0;
 my $alwaysup = 0;
 my $noask = 0;
-my $conflicts;
+my %conflicts;
 sub copystring($$$$$$$)
 {
   my ($data, $en, $l, $str, $txt, $context, $ispo) = @_;
@@ -98,7 +134,6 @@ sub copystring($$$$$$$)
     }
     else
     {
-
       my $f = $data->{$en}{_file} || "";
       $f = ($f ? "$f;".$data->{$en}{"_src.$l"} : $data->{$en}{"_src.$l"}) if $data->{$en}{"_src.$l"};
       my $isotherpo = ($f =~ /\.po\:/);
@@ -153,9 +188,19 @@ sub copystring($$$$$$$)
   }
 }
 
-sub checkpo($$$$$$)
+# Check a current state for new data
+#
+# @param postate Pointer to current status hash
+# @param data    Pointer to final data array
+# @param l       current language
+# @param txt     output text in case of error, usually file and line number
+# @param keys    pointer to hash for info keys extracted from the first msgid "" entry
+# @param new     whether a data set is finish or not yet complete
+# @param use     hash to strings to use or undef for all strings
+#
+sub checkpo($$$$$$$)
 {
-  my ($postate, $data, $l, $txt, $keys, $new) = @_;
+  my ($postate, $data, $l, $txt, $keys, $new, $use) = @_;
 
   if($postate->{type} eq "msgid") {$postate->{msgid} = $postate->{last};}
   elsif($postate->{type} eq "msgid_plural") {$postate->{msgid_1} = $postate->{last};}
@@ -166,13 +211,18 @@ sub checkpo($$$$$$)
 
   if($new)
   {
-    if((!$postate->{fuzzy}) && $postate->{msgstr} && $postate->{msgid})
+    my $en = $postate->{context} ?  "___$postate->{context}___$postate->{msgid}" : $postate->{msgid};
+    if((!$postate->{fuzzy}) && ($l eq "pot" || $postate->{msgstr}) && $postate->{msgid}
+    && (!$use || $use->{$en}))
     {
       copystring($data, $postate->{msgid}, $l, $postate->{msgstr},$txt,$postate->{context}, 1);
-      for($i = 1; exists($postate->{"msgstr_$i"}); ++$i)
-      { copystring($data, $postate->{msgid}, "$l.$i", $postate->{"msgstr_$i"},$txt,$postate->{context}, 1); }
-      if($postate->{msgid_1})
-      { copystring($data, $postate->{msgid}, "en.1", $postate->{msgid_1},$txt,$postate->{context}, 1); }
+      if(!$use || $use->{$en}{"en.1"})
+      {
+        for(my $i = 1; exists($postate->{"msgstr_$i"}); ++$i)
+        { copystring($data, $postate->{msgid}, "$l.$i", $postate->{"msgstr_$i"},$txt,$postate->{context}, 1); }
+        if($postate->{msgid_1})
+        { copystring($data, $postate->{msgid}, "en.1", $postate->{msgid_1},$txt,$postate->{context}, 1); }
+      }
       copystring($data, $postate->{msgid}, "_src.$l", $postate->{src},$txt,$postate->{context}, 1);
     }
     elsif($postate->{msgstr} && !$postate->{msgid})
@@ -258,6 +308,7 @@ sub createlang($@)
     my $len = length($file);
     $maxlen = $len if $len > $maxlen;
   }
+  my $maxcount = keys(%{$data});
   foreach my $file (@files)
   {
     my $la;
@@ -305,7 +356,7 @@ sub createlang($@)
       for($num = 1; exists($data->{$en}{"$la.$num"}); ++$num)
       { }
       my $val;
-      $eq = 0;
+      my $eq = 0;
       if($la eq "en")
       {
         ++$cnt;
@@ -356,10 +407,28 @@ sub main
 {
   my %lang;
   my @po;
-  my $basename = shift @ARGV;
+  my $potfile;
+  my $basename = "./";
+  foreach my $arg (@ARGV)
+  {
+    next if $arg !~ /^--/;
+    if($arg =~ /^--basedir=(.+)$/)
+    {
+      $basename = $1;
+    }
+    elsif($arg =~ /^--potfile=(.+)$/)
+    {
+      $potfile = $1;
+    }
+    else
+    {
+      die "Unknown argument $arg.";
+    }
+  }
   $basename .= "/" if !($basename =~ /[\/\\:]$/);
   foreach my $arg (@ARGV)
   {
+    next if $arg =~ /^--/;
     foreach my $f (glob $arg)
     {
       if($f =~ /\*/) { printf "Skipping $f\n"; }
@@ -367,7 +436,8 @@ sub main
       else { die "unknown file extension."; }
     }
   }
-  my %data = loadfiles(\%lang, at po);
+  my %data = loadfiles(\%lang,$potfile ? loadpot($potfile) : undef, @po);
+
   my @clang;
   foreach my $la (sort keys %lang)
   {
diff --git a/i18n/po/af.po b/i18n/po/af.po
index 2194938..92eb0cf 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-04-27 03:33+0200\n"
+"POT-Creation-Date: 2015-05-12 03:33+0200\n"
 "PO-Revision-Date: 2011-10-13 02:39+0000\n"
 "Last-Translator: Grant Slater <Unknown>\n"
 "Language-Team: Afrikaans <af at li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Launchpad-Export-Date: 2015-04-27 04:30+0000\n"
-"X-Generator: Launchpad (build 17430)\n"
+"X-Launchpad-Export-Date: 2015-05-12 04:30+0000\n"
+"X-Generator: Launchpad (build 17487)\n"
 "Language: af\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -1468,6 +1468,9 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Some irrelevant nodes have been removed from the selection"
+msgstr ""
+
 msgid "Undo"
 msgstr ""
 
@@ -3065,6 +3068,11 @@ msgstr ""
 msgid "Failed to persist preferences to ''{0}''"
 msgstr ""
 
+msgid ""
+"Try enabling IPv6 network, prefering IPv6 over IPv4 (only works on early "
+"startup)."
+msgstr ""
+
 msgid " (at line {0}, column {1})"
 msgstr ""
 
@@ -3693,6 +3701,15 @@ msgstr ""
 msgid "Number of lane dependent values inconsistent in backward direction"
 msgstr ""
 
+msgid "Long segments"
+msgstr ""
+
+msgid "This tests for long way segments, which are usually errors."
+msgstr ""
+
+msgid "Very long segment of {0} kilometers"
+msgstr ""
+
 msgid "Tag checker (MapCSS based)"
 msgstr ""
 
@@ -4522,6 +4539,18 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
+msgid ""
+"Detected useable IPv6 network, prefering IPv6 over IPv4 after next restart."
+msgstr ""
+
+msgid "Detected useable IPv6 network, prefering IPv6 over IPv4."
+msgstr ""
+
+msgid ""
+"Detected no useable IPv6 network, prefering IPv4 over IPv6 after next "
+"restart."
+msgstr ""
+
 msgid "Unsaved osm data"
 msgstr ""
 
@@ -6200,14 +6229,6 @@ msgstr ""
 msgid "Only launching info browsers for the first {0} of {1} selected users"
 msgstr ""
 
-msgid ""
-"<html>Failed to create an URL because the encoding ''{0}''<br>was missing on "
-"this system.</html>"
-msgstr ""
-
-msgid "Missing encoding"
-msgstr ""
-
 msgid "Author"
 msgstr ""
 
@@ -10662,6 +10683,9 @@ msgstr ""
 msgid "Maximum concurrent downloads: "
 msgstr ""
 
+msgid "Maximum concurrent downloads per host: "
+msgstr ""
+
 msgid "Maximum elements in disk cache: "
 msgstr ""
 
@@ -10764,9 +10788,6 @@ msgstr ""
 msgid "Warning: illegal format of entry in style list ''{0}''. Got ''{1}''"
 msgstr ""
 
-msgid "JOSM default (XML; old version)"
-msgstr ""
-
 msgid "JOSM default (MapCSS)"
 msgstr ""
 
@@ -12228,9 +12249,6 @@ msgstr ""
 msgid "Error parsing note response from server"
 msgstr ""
 
-msgid "Error encoding string: {0}"
-msgstr ""
-
 msgid "(Code={0})"
 msgstr ""
 
@@ -12588,25 +12606,25 @@ msgstr ""
 msgid "Read protocol version"
 msgstr ""
 
-msgid "Cannot start remotecontrol server on port {0}: {1}"
+msgid "Cannot start IPv4 remotecontrol server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Accepting connections on {0}:{1}"
+msgid "Cannot start IPv6 remotecontrol server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Server stopped."
+msgid "RemoteControl::Accepting remote connections on {0}:{1}"
 msgstr ""
 
-msgid "Cannot start remotecontrol https server on port {0}: {1}"
+msgid "RemoteControl::Server {0}:{1} stopped."
 msgstr ""
 
-msgid "Unable to initialize Remote Control HTTPS Server"
+msgid "Cannot start IPv4 remotecontrol https server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Accepting secure connections on {0}:{1}"
+msgid "Cannot start IPv6 remotecontrol https server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Server (https) stopped."
+msgid "RemoteControl::Accepting secure remote connections on {0}:{1}"
 msgstr ""
 
 msgid "Remote Control has been asked to create a new node."
@@ -14274,9 +14292,6 @@ msgstr ""
 msgid "Metropole Ruhr: Luftbilder (10 cm)"
 msgstr ""
 
-msgid "SN Luftbilder, Straßennetz, Administrative Grenzen"
-msgstr ""
-
 msgid "Drone Imagery (Haiti)"
 msgstr ""
 
@@ -15137,6 +15152,11 @@ msgid ""
 "bounding box"
 msgstr ""
 
+msgid ""
+"Recommends categories/tags on newly created OSM entities by analysing "
+"spatial entities into training features and using SVM classification"
+msgstr ""
+
 msgid "Import/export OSM data in PBF format"
 msgstr ""
 
@@ -18837,7 +18857,10 @@ msgstr ""
 msgid "Suction pumpout"
 msgstr ""
 
-msgid "Gravity dump station"
+msgid "Gravity drain for hose"
+msgstr ""
+
+msgid "Casette or Elsan Disposal"
 msgstr ""
 
 msgid "Operation times"
@@ -19341,6 +19364,10 @@ msgid "shed"
 msgstr ""
 
 msgctxt "building"
+msgid "storage_tank"
+msgstr ""
+
+msgctxt "building"
 msgid "cowshed"
 msgstr ""
 
@@ -19453,6 +19480,41 @@ msgstr ""
 msgid "Gasometer"
 msgstr ""
 
+msgid "Storage Tank"
+msgstr ""
+
+msgctxt "content"
+msgid "fuel"
+msgstr ""
+
+msgctxt "content"
+msgid "manure"
+msgstr ""
+
+msgctxt "content"
+msgid "oil"
+msgstr ""
+
+msgctxt "content"
+msgid "sewage"
+msgstr ""
+
+msgctxt "content"
+msgid "silage"
+msgstr ""
+
+msgctxt "content"
+msgid "slurry"
+msgstr ""
+
+msgctxt "content"
+msgid "water"
+msgstr ""
+
+msgctxt "content"
+msgid "wine"
+msgstr ""
+
 msgid "Bunker Silo"
 msgstr ""
 
@@ -22904,6 +22966,33 @@ msgstr ""
 msgid "Could not read NanoLog file:"
 msgstr ""
 
+msgid "OSM Recommendation"
+msgstr ""
+
+msgid "Recommend categories to your newly created instances."
+msgstr ""
+
+msgid "Training process configuration"
+msgstr ""
+
+msgid "Model Settings"
+msgstr ""
+
+msgid "Select objects or create new objects and get recommendation."
+msgstr ""
+
+msgid "Add Recommendation"
+msgstr ""
+
+msgid "Add a recommended key/value pair to your object"
+msgstr ""
+
+msgid "Train a Model"
+msgstr ""
+
+msgid "Start the training engine!"
+msgstr ""
+
 msgid "Edit opening hours"
 msgstr ""
 
diff --git a/i18n/po/am.po b/i18n/po/am.po
index 073a350..25d7e61 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-04-27 03:33+0200\n"
+"POT-Creation-Date: 2015-05-12 03:33+0200\n"
 "PO-Revision-Date: 2010-03-30 12:09+0000\n"
 "Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
 "Language-Team: Amharic <am at li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n > 1;\n"
-"X-Launchpad-Export-Date: 2015-04-27 04:31+0000\n"
-"X-Generator: Launchpad (build 17430)\n"
+"X-Launchpad-Export-Date: 2015-05-12 04:31+0000\n"
+"X-Generator: Launchpad (build 17487)\n"
 "Language: am\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -1468,6 +1468,9 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Some irrelevant nodes have been removed from the selection"
+msgstr ""
+
 msgid "Undo"
 msgstr ""
 
@@ -3065,6 +3068,11 @@ msgstr ""
 msgid "Failed to persist preferences to ''{0}''"
 msgstr ""
 
+msgid ""
+"Try enabling IPv6 network, prefering IPv6 over IPv4 (only works on early "
+"startup)."
+msgstr ""
+
 msgid " (at line {0}, column {1})"
 msgstr ""
 
@@ -3693,6 +3701,15 @@ msgstr ""
 msgid "Number of lane dependent values inconsistent in backward direction"
 msgstr ""
 
+msgid "Long segments"
+msgstr ""
+
+msgid "This tests for long way segments, which are usually errors."
+msgstr ""
+
+msgid "Very long segment of {0} kilometers"
+msgstr ""
+
 msgid "Tag checker (MapCSS based)"
 msgstr ""
 
@@ -4522,6 +4539,18 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
+msgid ""
+"Detected useable IPv6 network, prefering IPv6 over IPv4 after next restart."
+msgstr ""
+
+msgid "Detected useable IPv6 network, prefering IPv6 over IPv4."
+msgstr ""
+
+msgid ""
+"Detected no useable IPv6 network, prefering IPv4 over IPv6 after next "
+"restart."
+msgstr ""
+
 msgid "Unsaved osm data"
 msgstr ""
 
@@ -6200,14 +6229,6 @@ msgstr ""
 msgid "Only launching info browsers for the first {0} of {1} selected users"
 msgstr ""
 
-msgid ""
-"<html>Failed to create an URL because the encoding ''{0}''<br>was missing on "
-"this system.</html>"
-msgstr ""
-
-msgid "Missing encoding"
-msgstr ""
-
 msgid "Author"
 msgstr ""
 
@@ -10662,6 +10683,9 @@ msgstr ""
 msgid "Maximum concurrent downloads: "
 msgstr ""
 
+msgid "Maximum concurrent downloads per host: "
+msgstr ""
+
 msgid "Maximum elements in disk cache: "
 msgstr ""
 
@@ -10764,9 +10788,6 @@ msgstr ""
 msgid "Warning: illegal format of entry in style list ''{0}''. Got ''{1}''"
 msgstr ""
 
-msgid "JOSM default (XML; old version)"
-msgstr ""
-
 msgid "JOSM default (MapCSS)"
 msgstr ""
 
@@ -12228,9 +12249,6 @@ msgstr ""
 msgid "Error parsing note response from server"
 msgstr ""
 
-msgid "Error encoding string: {0}"
-msgstr ""
-
 msgid "(Code={0})"
 msgstr ""
 
@@ -12588,25 +12606,25 @@ msgstr ""
 msgid "Read protocol version"
 msgstr ""
 
-msgid "Cannot start remotecontrol server on port {0}: {1}"
+msgid "Cannot start IPv4 remotecontrol server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Accepting connections on {0}:{1}"
+msgid "Cannot start IPv6 remotecontrol server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Server stopped."
+msgid "RemoteControl::Accepting remote connections on {0}:{1}"
 msgstr ""
 
-msgid "Cannot start remotecontrol https server on port {0}: {1}"
+msgid "RemoteControl::Server {0}:{1} stopped."
 msgstr ""
 
-msgid "Unable to initialize Remote Control HTTPS Server"
+msgid "Cannot start IPv4 remotecontrol https server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Accepting secure connections on {0}:{1}"
+msgid "Cannot start IPv6 remotecontrol https server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Server (https) stopped."
+msgid "RemoteControl::Accepting secure remote connections on {0}:{1}"
 msgstr ""
 
 msgid "Remote Control has been asked to create a new node."
@@ -14274,9 +14292,6 @@ msgstr ""
 msgid "Metropole Ruhr: Luftbilder (10 cm)"
 msgstr ""
 
-msgid "SN Luftbilder, Straßennetz, Administrative Grenzen"
-msgstr ""
-
 msgid "Drone Imagery (Haiti)"
 msgstr ""
 
@@ -15137,6 +15152,11 @@ msgid ""
 "bounding box"
 msgstr ""
 
+msgid ""
+"Recommends categories/tags on newly created OSM entities by analysing "
+"spatial entities into training features and using SVM classification"
+msgstr ""
+
 msgid "Import/export OSM data in PBF format"
 msgstr ""
 
@@ -18837,7 +18857,10 @@ msgstr ""
 msgid "Suction pumpout"
 msgstr ""
 
-msgid "Gravity dump station"
+msgid "Gravity drain for hose"
+msgstr ""
+
+msgid "Casette or Elsan Disposal"
 msgstr ""
 
 msgid "Operation times"
@@ -19341,6 +19364,10 @@ msgid "shed"
 msgstr ""
 
 msgctxt "building"
+msgid "storage_tank"
+msgstr ""
+
+msgctxt "building"
 msgid "cowshed"
 msgstr ""
 
@@ -19453,6 +19480,41 @@ msgstr ""
 msgid "Gasometer"
 msgstr ""
 
+msgid "Storage Tank"
+msgstr ""
+
+msgctxt "content"
+msgid "fuel"
+msgstr ""
+
+msgctxt "content"
+msgid "manure"
+msgstr ""
+
+msgctxt "content"
+msgid "oil"
+msgstr ""
+
+msgctxt "content"
+msgid "sewage"
+msgstr ""
+
+msgctxt "content"
+msgid "silage"
+msgstr ""
+
+msgctxt "content"
+msgid "slurry"
+msgstr ""
+
+msgctxt "content"
+msgid "water"
+msgstr ""
+
+msgctxt "content"
+msgid "wine"
+msgstr ""
+
 msgid "Bunker Silo"
 msgstr ""
 
@@ -22904,6 +22966,33 @@ msgstr ""
 msgid "Could not read NanoLog file:"
 msgstr ""
 
+msgid "OSM Recommendation"
+msgstr ""
+
+msgid "Recommend categories to your newly created instances."
+msgstr ""
+
+msgid "Training process configuration"
+msgstr ""
+
+msgid "Model Settings"
+msgstr ""
+
+msgid "Select objects or create new objects and get recommendation."
+msgstr ""
+
+msgid "Add Recommendation"
+msgstr ""
+
+msgid "Add a recommended key/value pair to your object"
+msgstr ""
+
+msgid "Train a Model"
+msgstr ""
+
+msgid "Start the training engine!"
+msgstr ""
+
 msgid "Edit opening hours"
 msgstr ""
 
diff --git a/i18n/po/ar.po b/i18n/po/ar.po
index 0e0010a..76d9bd1 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-04-27 03:33+0200\n"
+"POT-Creation-Date: 2015-05-12 03:33+0200\n"
 "PO-Revision-Date: 2013-03-30 14:17+0000\n"
 "Last-Translator: Chdoula <chdoula at gmail.com>\n"
 "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-04-27 04:32+0000\n"
-"X-Generator: Launchpad (build 17430)\n"
+"X-Launchpad-Export-Date: 2015-05-12 04:32+0000\n"
+"X-Generator: Launchpad (build 17487)\n"
 "Language: ar\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -1474,6 +1474,9 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Some irrelevant nodes have been removed from the selection"
+msgstr ""
+
 msgid "Undo"
 msgstr "تَراجَع"
 
@@ -3072,6 +3075,11 @@ msgstr "الطبقة: {0}"
 msgid "Failed to persist preferences to ''{0}''"
 msgstr ""
 
+msgid ""
+"Try enabling IPv6 network, prefering IPv6 over IPv4 (only works on early "
+"startup)."
+msgstr ""
+
 msgid " (at line {0}, column {1})"
 msgstr ""
 
@@ -3712,6 +3720,15 @@ msgstr ""
 msgid "Number of lane dependent values inconsistent in backward direction"
 msgstr ""
 
+msgid "Long segments"
+msgstr ""
+
+msgid "This tests for long way segments, which are usually errors."
+msgstr ""
+
+msgid "Very long segment of {0} kilometers"
+msgstr ""
+
 msgid "Tag checker (MapCSS based)"
 msgstr ""
 
@@ -4545,6 +4562,18 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
+msgid ""
+"Detected useable IPv6 network, prefering IPv6 over IPv4 after next restart."
+msgstr ""
+
+msgid "Detected useable IPv6 network, prefering IPv6 over IPv4."
+msgstr ""
+
+msgid ""
+"Detected no useable IPv6 network, prefering IPv4 over IPv6 after next "
+"restart."
+msgstr ""
+
 msgid "Unsaved osm data"
 msgstr ""
 
@@ -6227,14 +6256,6 @@ msgstr ""
 msgid "Only launching info browsers for the first {0} of {1} selected users"
 msgstr ""
 
-msgid ""
-"<html>Failed to create an URL because the encoding ''{0}''<br>was missing on "
-"this system.</html>"
-msgstr ""
-
-msgid "Missing encoding"
-msgstr ""
-
 msgid "Author"
 msgstr "المؤلف"
 
@@ -10696,6 +10717,9 @@ msgstr ""
 msgid "Maximum concurrent downloads: "
 msgstr ""
 
+msgid "Maximum concurrent downloads per host: "
+msgstr ""
+
 msgid "Maximum elements in disk cache: "
 msgstr ""
 
@@ -10798,9 +10822,6 @@ msgstr ""
 msgid "Warning: illegal format of entry in style list ''{0}''. Got ''{1}''"
 msgstr ""
 
-msgid "JOSM default (XML; old version)"
-msgstr ""
-
 msgid "JOSM default (MapCSS)"
 msgstr ""
 
@@ -12268,9 +12289,6 @@ msgstr ""
 msgid "Error parsing note response from server"
 msgstr ""
 
-msgid "Error encoding string: {0}"
-msgstr ""
-
 msgid "(Code={0})"
 msgstr ""
 
@@ -12628,25 +12646,25 @@ msgstr ""
 msgid "Read protocol version"
 msgstr ""
 
-msgid "Cannot start remotecontrol server on port {0}: {1}"
+msgid "Cannot start IPv4 remotecontrol server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Accepting connections on {0}:{1}"
+msgid "Cannot start IPv6 remotecontrol server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Server stopped."
+msgid "RemoteControl::Accepting remote connections on {0}:{1}"
 msgstr ""
 
-msgid "Cannot start remotecontrol https server on port {0}: {1}"
+msgid "RemoteControl::Server {0}:{1} stopped."
 msgstr ""
 
-msgid "Unable to initialize Remote Control HTTPS Server"
+msgid "Cannot start IPv4 remotecontrol https server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Accepting secure connections on {0}:{1}"
+msgid "Cannot start IPv6 remotecontrol https server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Server (https) stopped."
+msgid "RemoteControl::Accepting secure remote connections on {0}:{1}"
 msgstr ""
 
 msgid "Remote Control has been asked to create a new node."
@@ -14314,9 +14332,6 @@ msgstr ""
 msgid "Metropole Ruhr: Luftbilder (10 cm)"
 msgstr ""
 
-msgid "SN Luftbilder, Straßennetz, Administrative Grenzen"
-msgstr ""
-
 msgid "Drone Imagery (Haiti)"
 msgstr ""
 
@@ -15177,6 +15192,11 @@ msgid ""
 "bounding box"
 msgstr ""
 
+msgid ""
+"Recommends categories/tags on newly created OSM entities by analysing "
+"spatial entities into training features and using SVM classification"
+msgstr ""
+
 msgid "Import/export OSM data in PBF format"
 msgstr ""
 
@@ -18877,7 +18897,10 @@ msgstr ""
 msgid "Suction pumpout"
 msgstr ""
 
-msgid "Gravity dump station"
+msgid "Gravity drain for hose"
+msgstr ""
+
+msgid "Casette or Elsan Disposal"
 msgstr ""
 
 msgid "Operation times"
@@ -19381,6 +19404,10 @@ msgid "shed"
 msgstr ""
 
 msgctxt "building"
+msgid "storage_tank"
+msgstr ""
+
+msgctxt "building"
 msgid "cowshed"
 msgstr ""
 
@@ -19493,6 +19520,41 @@ msgstr "طاحونة هوائية"
 msgid "Gasometer"
 msgstr "خزان محروقات"
 
+msgid "Storage Tank"
+msgstr ""
+
+msgctxt "content"
+msgid "fuel"
+msgstr ""
+
+msgctxt "content"
+msgid "manure"
+msgstr ""
+
+msgctxt "content"
+msgid "oil"
+msgstr ""
+
+msgctxt "content"
+msgid "sewage"
+msgstr ""
+
+msgctxt "content"
+msgid "silage"
+msgstr ""
+
+msgctxt "content"
+msgid "slurry"
+msgstr ""
+
+msgctxt "content"
+msgid "water"
+msgstr ""
+
+msgctxt "content"
+msgid "wine"
+msgstr ""
+
 msgid "Bunker Silo"
 msgstr ""
 
@@ -22944,6 +23006,33 @@ msgstr ""
 msgid "Could not read NanoLog file:"
 msgstr ""
 
+msgid "OSM Recommendation"
+msgstr ""
+
+msgid "Recommend categories to your newly created instances."
+msgstr ""
+
+msgid "Training process configuration"
+msgstr ""
+
+msgid "Model Settings"
+msgstr ""
+
+msgid "Select objects or create new objects and get recommendation."
+msgstr ""
+
+msgid "Add Recommendation"
+msgstr ""
+
+msgid "Add a recommended key/value pair to your object"
+msgstr ""
+
+msgid "Train a Model"
+msgstr ""
+
+msgid "Start the training engine!"
+msgstr ""
+
 msgid "Edit opening hours"
 msgstr ""
 
diff --git a/i18n/po/ast.po b/i18n/po/ast.po
index 9b44919..d26b471 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-04-27 03:33+0200\n"
+"POT-Creation-Date: 2015-05-12 03:33+0200\n"
 "PO-Revision-Date: 2015-03-26 12:59+0000\n"
 "Last-Translator: Dirk Stöcker <launchpad at dstoecker.de>\n"
 "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-04-27 04:33+0000\n"
-"X-Generator: Launchpad (build 17430)\n"
+"X-Launchpad-Export-Date: 2015-05-12 04:33+0000\n"
+"X-Generator: Launchpad (build 17487)\n"
 "Language: ast\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -1593,6 +1593,9 @@ msgstr[0] "El camín afectáu sumiría dempués de desconectar el nodo escoyíu.
 msgstr[1] ""
 "El camín afectáu sumiría dempués de desconectar los nodos escoyíos."
 
+msgid "Some irrelevant nodes have been removed from the selection"
+msgstr ""
+
 msgid "Undo"
 msgstr "Desfacer"
 
@@ -3342,6 +3345,11 @@ msgstr "Capa: {0}"
 msgid "Failed to persist preferences to ''{0}''"
 msgstr "Nun se pudieron caltener les preferencies pa ''{0}''"
 
+msgid ""
+"Try enabling IPv6 network, prefering IPv6 over IPv4 (only works on early "
+"startup)."
+msgstr ""
+
 msgid " (at line {0}, column {1})"
 msgstr " (a la llínea {0}, columna {1})"
 
@@ -4019,6 +4027,15 @@ msgid "Number of lane dependent values inconsistent in backward direction"
 msgstr ""
 "Númberu de valores dependientes del carril inconsistentes nel sen inversu"
 
+msgid "Long segments"
+msgstr ""
+
+msgid "This tests for long way segments, which are usually errors."
+msgstr ""
+
+msgid "Very long segment of {0} kilometers"
+msgstr ""
+
 msgid "Tag checker (MapCSS based)"
 msgstr "Verificador d''etiquetes (basáu''n MapCSS)"
 
@@ -4907,6 +4924,18 @@ msgstr[1] ""
 "JOSM ta executándose en mou ensin conexón. Estos recursos non van tar "
 "disponibles: {0}"
 
+msgid ""
+"Detected useable IPv6 network, prefering IPv6 over IPv4 after next restart."
+msgstr ""
+
+msgid "Detected useable IPv6 network, prefering IPv6 over IPv4."
+msgstr ""
+
+msgid ""
+"Detected no useable IPv6 network, prefering IPv4 over IPv6 after next "
+"restart."
+msgstr ""
+
 msgid "Unsaved osm data"
 msgstr "Datos OSM ensin grabar"
 
@@ -6751,16 +6780,6 @@ msgstr ""
 "Namá llanzar navegadores d´información pa los primeros {0} de {1} usuarios "
 "escoyíos"
 
-msgid ""
-"<html>Failed to create an URL because the encoding ''{0}''<br>was missing on "
-"this system.</html>"
-msgstr ""
-"<html>Non pudo crease una URL por cuenta de que la codificación "
-"''{0}''<br>nun s´atopó nel sistema.</html>"
-
-msgid "Missing encoding"
-msgstr "Falta codificación"
-
 msgid "Author"
 msgstr "Autor"
 
@@ -11787,6 +11806,9 @@ msgstr "Directoriu del caxé de teseles: "
 msgid "Maximum concurrent downloads: "
 msgstr ""
 
+msgid "Maximum concurrent downloads per host: "
+msgstr ""
+
 msgid "Maximum elements in disk cache: "
 msgstr ""
 
@@ -11904,9 +11926,6 @@ msgstr ""
 "Alvertencia: formatu illegal d''entrada na llista d''estilu ''{0}''. "
 "Llogróse ''{1}''"
 
-msgid "JOSM default (XML; old version)"
-msgstr "JOSM por defectu (XML; versión antigua)"
-
 msgid "JOSM default (MapCSS)"
 msgstr "JOSM por defectu (MapCSS)"
 
@@ -13543,9 +13562,6 @@ msgstr ""
 msgid "Error parsing note response from server"
 msgstr ""
 
-msgid "Error encoding string: {0}"
-msgstr ""
-
 msgid "(Code={0})"
 msgstr "(Códigu={0})"
 
@@ -13940,27 +13956,26 @@ msgstr "Crear nuevos oxetos"
 msgid "Read protocol version"
 msgstr "Lleer la versión del protocolu"
 
-msgid "Cannot start remotecontrol server on port {0}: {1}"
+msgid "Cannot start IPv4 remotecontrol server on port {0}: {1}"
 msgstr ""
-"Non puede empecipiase el servidor de control remotu nel puertu {0}: {1}"
 
-msgid "RemoteControl::Accepting connections on {0}:{1}"
+msgid "Cannot start IPv6 remotecontrol server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Server stopped."
-msgstr "ControlRemoto::El servidor foi deteníu"
+msgid "RemoteControl::Accepting remote connections on {0}:{1}"
+msgstr ""
 
-msgid "Cannot start remotecontrol https server on port {0}: {1}"
-msgstr "Non puede empecipiase el servidor https nel puertu {0}: {1}"
+msgid "RemoteControl::Server {0}:{1} stopped."
+msgstr ""
 
-msgid "Unable to initialize Remote Control HTTPS Server"
-msgstr "Nun se puede anicializar Control Remotu sobre Servidor HTTPS"
+msgid "Cannot start IPv4 remotecontrol https server on port {0}: {1}"
+msgstr ""
 
-msgid "RemoteControl::Accepting secure connections on {0}:{1}"
+msgid "Cannot start IPv6 remotecontrol https server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Server (https) stopped."
-msgstr "ControlRemotu:::Detúvose el servidor (https)."
+msgid "RemoteControl::Accepting secure remote connections on {0}:{1}"
+msgstr ""
 
 msgid "Remote Control has been asked to create a new node."
 msgstr "El Control Remotu recibió una solicitú pa crear un nodo nuevu."
@@ -15893,9 +15908,6 @@ msgstr "NRW-Atlas: Topographische Karte 1:10000"
 msgid "Metropole Ruhr: Luftbilder (10 cm)"
 msgstr ""
 
-msgid "SN Luftbilder, Straßennetz, Administrative Grenzen"
-msgstr ""
-
 msgid "Drone Imagery (Haiti)"
 msgstr "Drone Imagery (Haiti)"
 
@@ -16834,6 +16846,11 @@ msgid ""
 msgstr ""
 "Traer erros de OSM Inspector y visualizalos nos cantos actuales de JOSM"
 
+msgid ""
+"Recommends categories/tags on newly created OSM entities by analysing "
+"spatial entities into training features and using SVM classification"
+msgstr ""
+
 msgid "Import/export OSM data in PBF format"
 msgstr "Importar/esportar datos OSM en formatu PBF"
 
@@ -20612,7 +20629,10 @@ msgstr ""
 msgid "Suction pumpout"
 msgstr ""
 
-msgid "Gravity dump station"
+msgid "Gravity drain for hose"
+msgstr ""
+
+msgid "Casette or Elsan Disposal"
 msgstr ""
 
 msgid "Operation times"
@@ -21116,6 +21136,10 @@ msgid "shed"
 msgstr "caseta"
 
 msgctxt "building"
+msgid "storage_tank"
+msgstr ""
+
+msgctxt "building"
 msgid "cowshed"
 msgstr ""
 
@@ -21228,6 +21252,41 @@ msgstr "Molín de vientu"
 msgid "Gasometer"
 msgstr "Gasómetru"
 
+msgid "Storage Tank"
+msgstr ""
+
+msgctxt "content"
+msgid "fuel"
+msgstr ""
+
+msgctxt "content"
+msgid "manure"
+msgstr ""
+
+msgctxt "content"
+msgid "oil"
+msgstr ""
+
+msgctxt "content"
+msgid "sewage"
+msgstr ""
+
+msgctxt "content"
+msgid "silage"
+msgstr ""
+
+msgctxt "content"
+msgid "slurry"
+msgstr ""
+
+msgctxt "content"
+msgid "water"
+msgstr ""
+
+msgctxt "content"
+msgid "wine"
+msgstr ""
+
 msgid "Bunker Silo"
 msgstr ""
 
@@ -24746,6 +24805,33 @@ msgstr "Abrir l''arquivu NanoLog..."
 msgid "Could not read NanoLog file:"
 msgstr "Non pudo lleese l''arquivu NanoLog:"
 
+msgid "OSM Recommendation"
+msgstr ""
+
+msgid "Recommend categories to your newly created instances."
+msgstr ""
+
+msgid "Training process configuration"
+msgstr ""
+
+msgid "Model Settings"
+msgstr ""
+
+msgid "Select objects or create new objects and get recommendation."
+msgstr ""
+
+msgid "Add Recommendation"
+msgstr ""
+
+msgid "Add a recommended key/value pair to your object"
+msgstr ""
+
+msgid "Train a Model"
+msgstr ""
+
+msgid "Start the training engine!"
+msgstr ""
+
 msgid "Edit opening hours"
 msgstr "Horarios d''apertura"
 
diff --git a/i18n/po/az.po b/i18n/po/az.po
index d0f0931..8e4c89a 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-04-27 03:33+0200\n"
+"POT-Creation-Date: 2015-05-12 03:33+0200\n"
 "PO-Revision-Date: 2013-01-12 17:56+0000\n"
 "Last-Translator: iAZISS <iss-sash at mail.ru>\n"
 "Language-Team: Azerbaijani <az at li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Launchpad-Export-Date: 2015-04-27 04:33+0000\n"
-"X-Generator: Launchpad (build 17430)\n"
+"X-Launchpad-Export-Date: 2015-05-12 04:33+0000\n"
+"X-Generator: Launchpad (build 17487)\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
 msgstr ""
@@ -1467,6 +1467,9 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Some irrelevant nodes have been removed from the selection"
+msgstr ""
+
 msgid "Undo"
 msgstr ""
 
@@ -3064,6 +3067,11 @@ msgstr ""
 msgid "Failed to persist preferences to ''{0}''"
 msgstr ""
 
+msgid ""
+"Try enabling IPv6 network, prefering IPv6 over IPv4 (only works on early "
+"startup)."
+msgstr ""
+
 msgid " (at line {0}, column {1})"
 msgstr ""
 
@@ -3692,6 +3700,15 @@ msgstr ""
 msgid "Number of lane dependent values inconsistent in backward direction"
 msgstr ""
 
+msgid "Long segments"
+msgstr ""
+
+msgid "This tests for long way segments, which are usually errors."
+msgstr ""
+
+msgid "Very long segment of {0} kilometers"
+msgstr ""
+
 msgid "Tag checker (MapCSS based)"
 msgstr ""
 
@@ -4521,6 +4538,18 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
+msgid ""
+"Detected useable IPv6 network, prefering IPv6 over IPv4 after next restart."
+msgstr ""
+
+msgid "Detected useable IPv6 network, prefering IPv6 over IPv4."
+msgstr ""
+
+msgid ""
+"Detected no useable IPv6 network, prefering IPv4 over IPv6 after next "
+"restart."
+msgstr ""
+
 msgid "Unsaved osm data"
 msgstr ""
 
@@ -6199,14 +6228,6 @@ msgstr ""
 msgid "Only launching info browsers for the first {0} of {1} selected users"
 msgstr ""
 
-msgid ""
-"<html>Failed to create an URL because the encoding ''{0}''<br>was missing on "
-"this system.</html>"
-msgstr ""
-
-msgid "Missing encoding"
-msgstr ""
-
 msgid "Author"
 msgstr ""
 
@@ -10661,6 +10682,9 @@ msgstr ""
 msgid "Maximum concurrent downloads: "
 msgstr ""
 
+msgid "Maximum concurrent downloads per host: "
+msgstr ""
+
 msgid "Maximum elements in disk cache: "
 msgstr ""
 
@@ -10763,9 +10787,6 @@ msgstr ""
 msgid "Warning: illegal format of entry in style list ''{0}''. Got ''{1}''"
 msgstr ""
 
-msgid "JOSM default (XML; old version)"
-msgstr ""
-
 msgid "JOSM default (MapCSS)"
 msgstr ""
 
@@ -12227,9 +12248,6 @@ msgstr ""
 msgid "Error parsing note response from server"
 msgstr ""
 
-msgid "Error encoding string: {0}"
-msgstr ""
-
 msgid "(Code={0})"
 msgstr ""
 
@@ -12587,25 +12605,25 @@ msgstr ""
 msgid "Read protocol version"
 msgstr ""
 
-msgid "Cannot start remotecontrol server on port {0}: {1}"
+msgid "Cannot start IPv4 remotecontrol server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Accepting connections on {0}:{1}"
+msgid "Cannot start IPv6 remotecontrol server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Server stopped."
+msgid "RemoteControl::Accepting remote connections on {0}:{1}"
 msgstr ""
 
-msgid "Cannot start remotecontrol https server on port {0}: {1}"
+msgid "RemoteControl::Server {0}:{1} stopped."
 msgstr ""
 
-msgid "Unable to initialize Remote Control HTTPS Server"
+msgid "Cannot start IPv4 remotecontrol https server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Accepting secure connections on {0}:{1}"
+msgid "Cannot start IPv6 remotecontrol https server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Server (https) stopped."
+msgid "RemoteControl::Accepting secure remote connections on {0}:{1}"
 msgstr ""
 
 msgid "Remote Control has been asked to create a new node."
@@ -14273,9 +14291,6 @@ msgstr ""
 msgid "Metropole Ruhr: Luftbilder (10 cm)"
 msgstr ""
 
-msgid "SN Luftbilder, Straßennetz, Administrative Grenzen"
-msgstr ""
-
 msgid "Drone Imagery (Haiti)"
 msgstr ""
 
@@ -15136,6 +15151,11 @@ msgid ""
 "bounding box"
 msgstr ""
 
+msgid ""
+"Recommends categories/tags on newly created OSM entities by analysing "
+"spatial entities into training features and using SVM classification"
+msgstr ""
+
 msgid "Import/export OSM data in PBF format"
 msgstr ""
 
@@ -18836,7 +18856,10 @@ msgstr ""
 msgid "Suction pumpout"
 msgstr ""
 
-msgid "Gravity dump station"
+msgid "Gravity drain for hose"
+msgstr ""
+
+msgid "Casette or Elsan Disposal"
 msgstr ""
 
 msgid "Operation times"
@@ -19340,6 +19363,10 @@ msgid "shed"
 msgstr ""
 
 msgctxt "building"
+msgid "storage_tank"
+msgstr ""
+
+msgctxt "building"
 msgid "cowshed"
 msgstr ""
 
@@ -19452,6 +19479,41 @@ msgstr ""
 msgid "Gasometer"
 msgstr ""
 
+msgid "Storage Tank"
+msgstr ""
+
+msgctxt "content"
+msgid "fuel"
+msgstr ""
+
+msgctxt "content"
+msgid "manure"
+msgstr ""
+
+msgctxt "content"
+msgid "oil"
+msgstr ""
+
+msgctxt "content"
+msgid "sewage"
+msgstr ""
+
+msgctxt "content"
+msgid "silage"
+msgstr ""
+
+msgctxt "content"
+msgid "slurry"
+msgstr ""
+
+msgctxt "content"
+msgid "water"
+msgstr ""
+
+msgctxt "content"
+msgid "wine"
+msgstr ""
+
 msgid "Bunker Silo"
 msgstr ""
 
@@ -22903,6 +22965,33 @@ msgstr ""
 msgid "Could not read NanoLog file:"
 msgstr ""
 
+msgid "OSM Recommendation"
+msgstr ""
+
+msgid "Recommend categories to your newly created instances."
+msgstr ""
+
+msgid "Training process configuration"
+msgstr ""
+
+msgid "Model Settings"
+msgstr ""
+
+msgid "Select objects or create new objects and get recommendation."
+msgstr ""
+
+msgid "Add Recommendation"
+msgstr ""
+
+msgid "Add a recommended key/value pair to your object"
+msgstr ""
+
+msgid "Train a Model"
+msgstr ""
+
+msgid "Start the training engine!"
+msgstr ""
+
 msgid "Edit opening hours"
 msgstr ""
 
diff --git a/i18n/po/be.po b/i18n/po/be.po
index 96b5519..db8aaed 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-04-27 03:33+0200\n"
+"POT-Creation-Date: 2015-05-12 03:33+0200\n"
 "PO-Revision-Date: 2013-07-08 12:07+0000\n"
 "Last-Translator: Andrew West <2thewest at gmail.com>\n"
 "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-04-27 04:34+0000\n"
-"X-Generator: Launchpad (build 17430)\n"
+"X-Launchpad-Export-Date: 2015-05-12 04:34+0000\n"
+"X-Generator: Launchpad (build 17487)\n"
 "Language: be\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -1566,6 +1566,9 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Some irrelevant nodes have been removed from the selection"
+msgstr ""
+
 msgid "Undo"
 msgstr "Вярнуць"
 
@@ -3219,6 +3222,11 @@ msgstr "Слой: {0}"
 msgid "Failed to persist preferences to ''{0}''"
 msgstr ""
 
+msgid ""
+"Try enabling IPv6 network, prefering IPv6 over IPv4 (only works on early "
+"startup)."
+msgstr ""
+
 msgid " (at line {0}, column {1})"
 msgstr ""
 
@@ -3847,6 +3855,15 @@ msgstr ""
 msgid "Number of lane dependent values inconsistent in backward direction"
 msgstr ""
 
+msgid "Long segments"
+msgstr ""
+
+msgid "This tests for long way segments, which are usually errors."
+msgstr ""
+
+msgid "Very long segment of {0} kilometers"
+msgstr ""
+
 msgid "Tag checker (MapCSS based)"
 msgstr ""
 
@@ -4677,6 +4694,18 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
+msgid ""
+"Detected useable IPv6 network, prefering IPv6 over IPv4 after next restart."
+msgstr ""
+
+msgid "Detected useable IPv6 network, prefering IPv6 over IPv4."
+msgstr ""
+
+msgid ""
+"Detected no useable IPv6 network, prefering IPv4 over IPv6 after next "
+"restart."
+msgstr ""
+
 msgid "Unsaved osm data"
 msgstr ""
 
@@ -6355,14 +6384,6 @@ msgstr ""
 msgid "Only launching info browsers for the first {0} of {1} selected users"
 msgstr ""
 
-msgid ""
-"<html>Failed to create an URL because the encoding ''{0}''<br>was missing on "
-"this system.</html>"
-msgstr ""
-
-msgid "Missing encoding"
-msgstr ""
-
 msgid "Author"
 msgstr ""
 
@@ -10826,6 +10847,9 @@ msgstr ""
 msgid "Maximum concurrent downloads: "
 msgstr ""
 
+msgid "Maximum concurrent downloads per host: "
+msgstr ""
+
 msgid "Maximum elements in disk cache: "
 msgstr ""
 
@@ -10928,9 +10952,6 @@ msgstr ""
 msgid "Warning: illegal format of entry in style list ''{0}''. Got ''{1}''"
 msgstr ""
 
-msgid "JOSM default (XML; old version)"
-msgstr ""
-
 msgid "JOSM default (MapCSS)"
 msgstr ""
 
@@ -12392,9 +12413,6 @@ msgstr ""
 msgid "Error parsing note response from server"
 msgstr ""
 
-msgid "Error encoding string: {0}"
-msgstr ""
-
 msgid "(Code={0})"
 msgstr ""
 
@@ -12752,25 +12770,25 @@ msgstr ""
 msgid "Read protocol version"
 msgstr ""
 
-msgid "Cannot start remotecontrol server on port {0}: {1}"
+msgid "Cannot start IPv4 remotecontrol server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Accepting connections on {0}:{1}"
+msgid "Cannot start IPv6 remotecontrol server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Server stopped."
+msgid "RemoteControl::Accepting remote connections on {0}:{1}"
 msgstr ""
 
-msgid "Cannot start remotecontrol https server on port {0}: {1}"
+msgid "RemoteControl::Server {0}:{1} stopped."
 msgstr ""
 
-msgid "Unable to initialize Remote Control HTTPS Server"
+msgid "Cannot start IPv4 remotecontrol https server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Accepting secure connections on {0}:{1}"
+msgid "Cannot start IPv6 remotecontrol https server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Server (https) stopped."
+msgid "RemoteControl::Accepting secure remote connections on {0}:{1}"
 msgstr ""
 
 msgid "Remote Control has been asked to create a new node."
@@ -14438,9 +14456,6 @@ msgstr ""
 msgid "Metropole Ruhr: Luftbilder (10 cm)"
 msgstr ""
 
-msgid "SN Luftbilder, Straßennetz, Administrative Grenzen"
-msgstr ""
-
 msgid "Drone Imagery (Haiti)"
 msgstr ""
 
@@ -15301,6 +15316,11 @@ msgid ""
 "bounding box"
 msgstr ""
 
+msgid ""
+"Recommends categories/tags on newly created OSM entities by analysing "
+"spatial entities into training features and using SVM classification"
+msgstr ""
+
 msgid "Import/export OSM data in PBF format"
 msgstr ""
 
@@ -19001,7 +19021,10 @@ msgstr ""
 msgid "Suction pumpout"
 msgstr ""
 
-msgid "Gravity dump station"
+msgid "Gravity drain for hose"
+msgstr ""
+
+msgid "Casette or Elsan Disposal"
 msgstr ""
 
 msgid "Operation times"
@@ -19505,6 +19528,10 @@ msgid "shed"
 msgstr ""
 
 msgctxt "building"
+msgid "storage_tank"
+msgstr ""
+
+msgctxt "building"
 msgid "cowshed"
 msgstr ""
 
@@ -19617,6 +19644,41 @@ msgstr ""
 msgid "Gasometer"
 msgstr ""
 
+msgid "Storage Tank"
+msgstr ""
+
+msgctxt "content"
+msgid "fuel"
+msgstr ""
+
+msgctxt "content"
+msgid "manure"
+msgstr ""
+
+msgctxt "content"
+msgid "oil"
+msgstr ""
+
+msgctxt "content"
+msgid "sewage"
+msgstr ""
+
+msgctxt "content"
+msgid "silage"
+msgstr ""
+
+msgctxt "content"
+msgid "slurry"
+msgstr ""
+
+msgctxt "content"
+msgid "water"
+msgstr ""
+
+msgctxt "content"
+msgid "wine"
+msgstr ""
+
 msgid "Bunker Silo"
 msgstr ""
 
@@ -23068,6 +23130,33 @@ msgstr ""
 msgid "Could not read NanoLog file:"
 msgstr ""
 
+msgid "OSM Recommendation"
+msgstr ""
+
+msgid "Recommend categories to your newly created instances."
+msgstr ""
+
+msgid "Training process configuration"
+msgstr ""
+
+msgid "Model Settings"
+msgstr ""
+
+msgid "Select objects or create new objects and get recommendation."
+msgstr ""
+
+msgid "Add Recommendation"
+msgstr ""
+
+msgid "Add a recommended key/value pair to your object"
+msgstr ""
+
+msgid "Train a Model"
+msgstr ""
+
+msgid "Start the training engine!"
+msgstr ""
+
 msgid "Edit opening hours"
 msgstr ""
 
diff --git a/i18n/po/bg.po b/i18n/po/bg.po
index eaa5907..aa403e5 100644
--- a/i18n/po/bg.po
+++ b/i18n/po/bg.po
@@ -7,16 +7,16 @@ msgid ""
 msgstr ""
 "Project-Id-Version: josm\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-04-27 03:33+0200\n"
-"PO-Revision-Date: 2015-02-21 01:31+0000\n"
+"POT-Creation-Date: 2015-05-12 03:33+0200\n"
+"PO-Revision-Date: 2015-05-10 19:13+0000\n"
 "Last-Translator: pl <Unknown>\n"
 "Language-Team: Bulgarian <bg at li.org>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Launchpad-Export-Date: 2015-04-27 04:36+0000\n"
-"X-Generator: Launchpad (build 17430)\n"
+"X-Launchpad-Export-Date: 2015-05-12 04:36+0000\n"
+"X-Generator: Launchpad (build 17487)\n"
 "Language: bg\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -1016,7 +1016,7 @@ msgid "Download Data"
 msgstr "Сваляне на данни"
 
 msgid "Which tasks to perform?"
-msgstr ""
+msgstr "Кои действия да се изпълнят?"
 
 msgid "Ok"
 msgstr "ОК"
@@ -1552,6 +1552,9 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Some irrelevant nodes have been removed from the selection"
+msgstr ""
+
 msgid "Undo"
 msgstr "Отмяна"
 
@@ -1665,7 +1668,7 @@ msgid "Validation"
 msgstr "Проверка"
 
 msgid "Performs the data validation"
-msgstr "Изпълнение на проверка на данните"
+msgstr "Изпълнява проверка на данните"
 
 msgid "Validating"
 msgstr "Проверка"
@@ -3204,6 +3207,11 @@ msgstr "Слой: {0}"
 msgid "Failed to persist preferences to ''{0}''"
 msgstr ""
 
+msgid ""
+"Try enabling IPv6 network, prefering IPv6 over IPv4 (only works on early "
+"startup)."
+msgstr ""
+
 msgid " (at line {0}, column {1})"
 msgstr " (на ред {0}, колона {1})"
 
@@ -3720,7 +3728,7 @@ msgid "Mixed type duplicated nodes"
 msgstr ""
 
 msgid "Highway duplicated nodes"
-msgstr "Дублирани точки в магистрала"
+msgstr "Дублирани точки в път"
 
 msgid "Railway duplicated nodes"
 msgstr "Дублирани точки в железен път"
@@ -3787,7 +3795,7 @@ msgid "Highways"
 msgstr "Пътища"
 
 msgid "Performs semantic checks on highways."
-msgstr ""
+msgstr "Изпълнява проверка на таговете на пътищата"
 
 msgid "Incorrect roundabout (highway: {0} instead of {1})"
 msgstr ""
@@ -3837,6 +3845,15 @@ msgstr ""
 msgid "Number of lane dependent values inconsistent in backward direction"
 msgstr ""
 
+msgid "Long segments"
+msgstr ""
+
+msgid "This tests for long way segments, which are usually errors."
+msgstr ""
+
+msgid "Very long segment of {0} kilometers"
+msgstr ""
+
 msgid "Tag checker (MapCSS based)"
 msgstr ""
 
@@ -4300,7 +4317,7 @@ msgid "This test checks if a way has an endpoint very near to another way."
 msgstr "Този тест проверява дали път има крайна точка близо до друг път."
 
 msgid "Way end node near other highway"
-msgstr "Края на път близо до друг път/магистрала"
+msgstr "Краят на път е близо до друг път"
 
 msgid "Way end node near other way"
 msgstr "Края на път близо до друг път/линия"
@@ -4678,6 +4695,18 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
+msgid ""
+"Detected useable IPv6 network, prefering IPv6 over IPv4 after next restart."
+msgstr ""
+
+msgid "Detected useable IPv6 network, prefering IPv6 over IPv4."
+msgstr ""
+
+msgid ""
+"Detected no useable IPv6 network, prefering IPv4 over IPv6 after next "
+"restart."
+msgstr ""
+
 msgid "Unsaved osm data"
 msgstr ""
 
@@ -6360,14 +6389,6 @@ msgstr ""
 msgid "Only launching info browsers for the first {0} of {1} selected users"
 msgstr ""
 
-msgid ""
-"<html>Failed to create an URL because the encoding ''{0}''<br>was missing on "
-"this system.</html>"
-msgstr ""
-
-msgid "Missing encoding"
-msgstr "Липсваща кодировка"
-
 msgid "Author"
 msgstr "Автор"
 
@@ -8268,13 +8289,13 @@ msgid "Delete layers without saving. Unsaved changes are lost."
 msgstr ""
 
 msgid "Perform actions before exiting"
-msgstr ""
+msgstr "Изпълняване на действия преди затваряне"
 
 msgid "Exit JOSM with saving. Unsaved changes are uploaded and/or saved."
 msgstr ""
 
 msgid "Perform actions before deleting"
-msgstr ""
+msgstr "Изпълняване на действия преди изтриване"
 
 msgid "Save/Upload layers before deleting. Unsaved changes are not lost."
 msgstr ""
@@ -10476,7 +10497,7 @@ msgid ""
 msgstr ""
 
 msgid "Options that affect drawing performance"
-msgstr ""
+msgstr "Настройки, които влияят на производителността"
 
 msgid "Segment drawing options"
 msgstr ""
@@ -10918,6 +10939,9 @@ msgstr ""
 msgid "Maximum concurrent downloads: "
 msgstr ""
 
+msgid "Maximum concurrent downloads per host: "
+msgstr ""
+
 msgid "Maximum elements in disk cache: "
 msgstr ""
 
@@ -11020,9 +11044,6 @@ msgstr ""
 msgid "Warning: illegal format of entry in style list ''{0}''. Got ''{1}''"
 msgstr ""
 
-msgid "JOSM default (XML; old version)"
-msgstr ""
-
 msgid "JOSM default (MapCSS)"
 msgstr ""
 
@@ -12493,9 +12514,6 @@ msgstr ""
 msgid "Error parsing note response from server"
 msgstr ""
 
-msgid "Error encoding string: {0}"
-msgstr ""
-
 msgid "(Code={0})"
 msgstr "(код={0})"
 
@@ -12856,25 +12874,25 @@ msgstr ""
 msgid "Read protocol version"
 msgstr ""
 
-msgid "Cannot start remotecontrol server on port {0}: {1}"
+msgid "Cannot start IPv4 remotecontrol server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Accepting connections on {0}:{1}"
+msgid "Cannot start IPv6 remotecontrol server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Server stopped."
+msgid "RemoteControl::Accepting remote connections on {0}:{1}"
 msgstr ""
 
-msgid "Cannot start remotecontrol https server on port {0}: {1}"
+msgid "RemoteControl::Server {0}:{1} stopped."
 msgstr ""
 
-msgid "Unable to initialize Remote Control HTTPS Server"
+msgid "Cannot start IPv4 remotecontrol https server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Accepting secure connections on {0}:{1}"
+msgid "Cannot start IPv6 remotecontrol https server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Server (https) stopped."
+msgid "RemoteControl::Accepting secure remote connections on {0}:{1}"
 msgstr ""
 
 msgid "Remote Control has been asked to create a new node."
@@ -14563,9 +14581,6 @@ msgstr "NRW-Atlas: Topographische Karte 1:10000"
 msgid "Metropole Ruhr: Luftbilder (10 cm)"
 msgstr "Metropole Ruhr: Luftbilder (10 cm)"
 
-msgid "SN Luftbilder, Straßennetz, Administrative Grenzen"
-msgstr ""
-
 msgid "Drone Imagery (Haiti)"
 msgstr "Drone Imagery (Haiti)"
 
@@ -15439,6 +15454,11 @@ msgid ""
 "bounding box"
 msgstr ""
 
+msgid ""
+"Recommends categories/tags on newly created OSM entities by analysing "
+"spatial entities into training features and using SVM classification"
+msgstr ""
+
 msgid "Import/export OSM data in PBF format"
 msgstr ""
 
@@ -16483,7 +16503,7 @@ msgid "Streets"
 msgstr "Автомобилни"
 
 msgid "Motorway"
-msgstr "Автомагистрала"
+msgstr "Магистрала"
 
 msgid "Motorway Link"
 msgstr "Автомагистрална връзка"
@@ -16602,7 +16622,7 @@ msgstr "Пътен ремонт"
 
 msgctxt "Highway"
 msgid "motorway"
-msgstr "Автомагистрала"
+msgstr "магистрала"
 
 msgctxt "Highway"
 msgid "motorway_link"
@@ -19147,7 +19167,10 @@ msgstr ""
 msgid "Suction pumpout"
 msgstr ""
 
-msgid "Gravity dump station"
+msgid "Gravity drain for hose"
+msgstr ""
+
+msgid "Casette or Elsan Disposal"
 msgstr ""
 
 msgid "Operation times"
@@ -19651,6 +19674,10 @@ msgid "shed"
 msgstr "навес"
 
 msgctxt "building"
+msgid "storage_tank"
+msgstr ""
+
+msgctxt "building"
 msgid "cowshed"
 msgstr "краварник"
 
@@ -19763,6 +19790,41 @@ msgstr "Мелница"
 msgid "Gasometer"
 msgstr "Газохранилище"
 
+msgid "Storage Tank"
+msgstr ""
+
+msgctxt "content"
+msgid "fuel"
+msgstr ""
+
+msgctxt "content"
+msgid "manure"
+msgstr ""
+
+msgctxt "content"
+msgid "oil"
+msgstr ""
+
+msgctxt "content"
+msgid "sewage"
+msgstr ""
+
+msgctxt "content"
+msgid "silage"
+msgstr ""
+
+msgctxt "content"
+msgid "slurry"
+msgstr ""
+
+msgctxt "content"
+msgid "water"
+msgstr ""
+
+msgctxt "content"
+msgid "wine"
+msgstr ""
+
 msgid "Bunker Silo"
 msgstr ""
 
@@ -23218,6 +23280,33 @@ msgstr ""
 msgid "Could not read NanoLog file:"
 msgstr ""
 
+msgid "OSM Recommendation"
+msgstr ""
+
+msgid "Recommend categories to your newly created instances."
+msgstr ""
+
+msgid "Training process configuration"
+msgstr ""
+
+msgid "Model Settings"
+msgstr ""
+
+msgid "Select objects or create new objects and get recommendation."
+msgstr ""
+
+msgid "Add Recommendation"
+msgstr ""
+
+msgid "Add a recommended key/value pair to your object"
+msgstr ""
+
+msgid "Train a Model"
+msgstr ""
+
+msgid "Start the training engine!"
+msgstr ""
+
 msgid "Edit opening hours"
 msgstr ""
 
diff --git a/i18n/po/bn.po b/i18n/po/bn.po
index 1032e98..6ee1441 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-04-27 03:33+0200\n"
+"POT-Creation-Date: 2015-05-12 03:33+0200\n"
 "PO-Revision-Date: 2015-04-03 09:24+0000\n"
 "Last-Translator: Md Alamgir <alamgircu at hotmail.com>\n"
 "Language-Team: Bengali <bn at li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Launchpad-Export-Date: 2015-04-27 04:35+0000\n"
-"X-Generator: Launchpad (build 17430)\n"
+"X-Launchpad-Export-Date: 2015-05-12 04:35+0000\n"
+"X-Generator: Launchpad (build 17487)\n"
 "Language: bn\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -1471,6 +1471,9 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Some irrelevant nodes have been removed from the selection"
+msgstr ""
+
 msgid "Undo"
 msgstr ""
 
@@ -3068,6 +3071,11 @@ msgstr ""
 msgid "Failed to persist preferences to ''{0}''"
 msgstr ""
 
+msgid ""
+"Try enabling IPv6 network, prefering IPv6 over IPv4 (only works on early "
+"startup)."
+msgstr ""
+
 msgid " (at line {0}, column {1})"
 msgstr ""
 
@@ -3696,6 +3704,15 @@ msgstr ""
 msgid "Number of lane dependent values inconsistent in backward direction"
 msgstr ""
 
+msgid "Long segments"
+msgstr ""
+
+msgid "This tests for long way segments, which are usually errors."
+msgstr ""
+
+msgid "Very long segment of {0} kilometers"
+msgstr ""
+
 msgid "Tag checker (MapCSS based)"
 msgstr ""
 
@@ -4525,6 +4542,18 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
+msgid ""
+"Detected useable IPv6 network, prefering IPv6 over IPv4 after next restart."
+msgstr ""
+
+msgid "Detected useable IPv6 network, prefering IPv6 over IPv4."
+msgstr ""
+
+msgid ""
+"Detected no useable IPv6 network, prefering IPv4 over IPv6 after next "
+"restart."
+msgstr ""
+
 msgid "Unsaved osm data"
 msgstr ""
 
@@ -6203,14 +6232,6 @@ msgstr ""
 msgid "Only launching info browsers for the first {0} of {1} selected users"
 msgstr ""
 
-msgid ""
-"<html>Failed to create an URL because the encoding ''{0}''<br>was missing on "
-"this system.</html>"
-msgstr ""
-
-msgid "Missing encoding"
-msgstr ""
-
 msgid "Author"
 msgstr ""
 
@@ -10665,6 +10686,9 @@ msgstr ""
 msgid "Maximum concurrent downloads: "
 msgstr ""
 
+msgid "Maximum concurrent downloads per host: "
+msgstr ""
+
 msgid "Maximum elements in disk cache: "
 msgstr ""
 
@@ -10767,9 +10791,6 @@ msgstr ""
 msgid "Warning: illegal format of entry in style list ''{0}''. Got ''{1}''"
 msgstr ""
 
-msgid "JOSM default (XML; old version)"
-msgstr ""
-
 msgid "JOSM default (MapCSS)"
 msgstr ""
 
@@ -12231,9 +12252,6 @@ msgstr ""
 msgid "Error parsing note response from server"
 msgstr ""
 
-msgid "Error encoding string: {0}"
-msgstr ""
-
 msgid "(Code={0})"
 msgstr ""
 
@@ -12591,25 +12609,25 @@ msgstr ""
 msgid "Read protocol version"
 msgstr ""
 
-msgid "Cannot start remotecontrol server on port {0}: {1}"
+msgid "Cannot start IPv4 remotecontrol server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Accepting connections on {0}:{1}"
+msgid "Cannot start IPv6 remotecontrol server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Server stopped."
+msgid "RemoteControl::Accepting remote connections on {0}:{1}"
 msgstr ""
 
-msgid "Cannot start remotecontrol https server on port {0}: {1}"
+msgid "RemoteControl::Server {0}:{1} stopped."
 msgstr ""
 
-msgid "Unable to initialize Remote Control HTTPS Server"
+msgid "Cannot start IPv4 remotecontrol https server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Accepting secure connections on {0}:{1}"
+msgid "Cannot start IPv6 remotecontrol https server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Server (https) stopped."
+msgid "RemoteControl::Accepting secure remote connections on {0}:{1}"
 msgstr ""
 
 msgid "Remote Control has been asked to create a new node."
@@ -14277,9 +14295,6 @@ msgstr ""
 msgid "Metropole Ruhr: Luftbilder (10 cm)"
 msgstr ""
 
-msgid "SN Luftbilder, Straßennetz, Administrative Grenzen"
-msgstr ""
-
 msgid "Drone Imagery (Haiti)"
 msgstr ""
 
@@ -15140,6 +15155,11 @@ msgid ""
 "bounding box"
 msgstr ""
 
+msgid ""
+"Recommends categories/tags on newly created OSM entities by analysing "
+"spatial entities into training features and using SVM classification"
+msgstr ""
+
 msgid "Import/export OSM data in PBF format"
 msgstr ""
 
@@ -18840,7 +18860,10 @@ msgstr ""
 msgid "Suction pumpout"
 msgstr ""
 
-msgid "Gravity dump station"
+msgid "Gravity drain for hose"
+msgstr ""
+
+msgid "Casette or Elsan Disposal"
 msgstr ""
 
 msgid "Operation times"
@@ -19344,6 +19367,10 @@ msgid "shed"
 msgstr ""
 
 msgctxt "building"
+msgid "storage_tank"
+msgstr ""
+
+msgctxt "building"
 msgid "cowshed"
 msgstr ""
 
@@ -19456,6 +19483,41 @@ msgstr ""
 msgid "Gasometer"
 msgstr ""
 
+msgid "Storage Tank"
+msgstr ""
+
+msgctxt "content"
+msgid "fuel"
+msgstr ""
+
+msgctxt "content"
+msgid "manure"
+msgstr ""
+
+msgctxt "content"
+msgid "oil"
+msgstr ""
+
+msgctxt "content"
+msgid "sewage"
+msgstr ""
+
+msgctxt "content"
+msgid "silage"
+msgstr ""
+
+msgctxt "content"
+msgid "slurry"
+msgstr ""
+
+msgctxt "content"
+msgid "water"
+msgstr ""
+
+msgctxt "content"
+msgid "wine"
+msgstr ""
+
 msgid "Bunker Silo"
 msgstr ""
 
@@ -22907,6 +22969,33 @@ msgstr ""
 msgid "Could not read NanoLog file:"
 msgstr ""
 
+msgid "OSM Recommendation"
+msgstr ""
+
+msgid "Recommend categories to your newly created instances."
+msgstr ""
+
+msgid "Training process configuration"
+msgstr ""
+
+msgid "Model Settings"
+msgstr ""
+
+msgid "Select objects or create new objects and get recommendation."
+msgstr ""
+
+msgid "Add Recommendation"
+msgstr ""
+
+msgid "Add a recommended key/value pair to your object"
+msgstr ""
+
+msgid "Train a Model"
+msgstr ""
+
+msgid "Start the training engine!"
+msgstr ""
+
 msgid "Edit opening hours"
 msgstr ""
 
diff --git a/i18n/po/br.po b/i18n/po/br.po
index 2a6b05a..ddb746f 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-04-27 03:33+0200\n"
+"POT-Creation-Date: 2015-05-12 03:33+0200\n"
 "PO-Revision-Date: 2011-10-17 12:11+0000\n"
 "Last-Translator: Fulup <Unknown>\n"
 "Language-Team: Breton <br at li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n > 1;\n"
-"X-Launchpad-Export-Date: 2015-04-27 04:36+0000\n"
-"X-Generator: Launchpad (build 17430)\n"
+"X-Launchpad-Export-Date: 2015-05-12 04:36+0000\n"
+"X-Generator: Launchpad (build 17487)\n"
 "Language: br\n"
 
 msgid "License"
@@ -1468,6 +1468,9 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Some irrelevant nodes have been removed from the selection"
+msgstr ""
+
 msgid "Undo"
 msgstr ""
 
@@ -3065,6 +3068,11 @@ msgstr ""
 msgid "Failed to persist preferences to ''{0}''"
 msgstr ""
 
+msgid ""
+"Try enabling IPv6 network, prefering IPv6 over IPv4 (only works on early "
+"startup)."
+msgstr ""
+
 msgid " (at line {0}, column {1})"
 msgstr ""
 
@@ -3693,6 +3701,15 @@ msgstr ""
 msgid "Number of lane dependent values inconsistent in backward direction"
 msgstr ""
 
+msgid "Long segments"
+msgstr ""
+
+msgid "This tests for long way segments, which are usually errors."
+msgstr ""
+
+msgid "Very long segment of {0} kilometers"
+msgstr ""
+
 msgid "Tag checker (MapCSS based)"
 msgstr ""
 
@@ -4522,6 +4539,18 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
+msgid ""
+"Detected useable IPv6 network, prefering IPv6 over IPv4 after next restart."
+msgstr ""
+
+msgid "Detected useable IPv6 network, prefering IPv6 over IPv4."
+msgstr ""
+
+msgid ""
+"Detected no useable IPv6 network, prefering IPv4 over IPv6 after next "
+"restart."
+msgstr ""
+
 msgid "Unsaved osm data"
 msgstr ""
 
@@ -6200,14 +6229,6 @@ msgstr ""
 msgid "Only launching info browsers for the first {0} of {1} selected users"
 msgstr ""
 
-msgid ""
-"<html>Failed to create an URL because the encoding ''{0}''<br>was missing on "
-"this system.</html>"
-msgstr ""
-
-msgid "Missing encoding"
-msgstr ""
-
 msgid "Author"
 msgstr ""
 
@@ -10662,6 +10683,9 @@ msgstr ""
 msgid "Maximum concurrent downloads: "
 msgstr ""
 
+msgid "Maximum concurrent downloads per host: "
+msgstr ""
+
 msgid "Maximum elements in disk cache: "
 msgstr ""
 
@@ -10764,9 +10788,6 @@ msgstr ""
 msgid "Warning: illegal format of entry in style list ''{0}''. Got ''{1}''"
 msgstr ""
 
-msgid "JOSM default (XML; old version)"
-msgstr ""
-
 msgid "JOSM default (MapCSS)"
 msgstr ""
 
@@ -12228,9 +12249,6 @@ msgstr ""
 msgid "Error parsing note response from server"
 msgstr ""
 
-msgid "Error encoding string: {0}"
-msgstr ""
-
 msgid "(Code={0})"
 msgstr ""
 
@@ -12588,25 +12606,25 @@ msgstr ""
 msgid "Read protocol version"
 msgstr ""
 
-msgid "Cannot start remotecontrol server on port {0}: {1}"
+msgid "Cannot start IPv4 remotecontrol server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Accepting connections on {0}:{1}"
+msgid "Cannot start IPv6 remotecontrol server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Server stopped."
+msgid "RemoteControl::Accepting remote connections on {0}:{1}"
 msgstr ""
 
-msgid "Cannot start remotecontrol https server on port {0}: {1}"
+msgid "RemoteControl::Server {0}:{1} stopped."
 msgstr ""
 
-msgid "Unable to initialize Remote Control HTTPS Server"
+msgid "Cannot start IPv4 remotecontrol https server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Accepting secure connections on {0}:{1}"
+msgid "Cannot start IPv6 remotecontrol https server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Server (https) stopped."
+msgid "RemoteControl::Accepting secure remote connections on {0}:{1}"
 msgstr ""
 
 msgid "Remote Control has been asked to create a new node."
@@ -14274,9 +14292,6 @@ msgstr ""
 msgid "Metropole Ruhr: Luftbilder (10 cm)"
 msgstr ""
 
-msgid "SN Luftbilder, Straßennetz, Administrative Grenzen"
-msgstr ""
-
 msgid "Drone Imagery (Haiti)"
 msgstr ""
 
@@ -15137,6 +15152,11 @@ msgid ""
 "bounding box"
 msgstr ""
 
+msgid ""
+"Recommends categories/tags on newly created OSM entities by analysing "
+"spatial entities into training features and using SVM classification"
+msgstr ""
+
 msgid "Import/export OSM data in PBF format"
 msgstr ""
 
@@ -18837,7 +18857,10 @@ msgstr ""
 msgid "Suction pumpout"
 msgstr ""
 
-msgid "Gravity dump station"
+msgid "Gravity drain for hose"
+msgstr ""
+
+msgid "Casette or Elsan Disposal"
 msgstr ""
 
 msgid "Operation times"
@@ -19341,6 +19364,10 @@ msgid "shed"
 msgstr ""
 
 msgctxt "building"
+msgid "storage_tank"
+msgstr ""
+
+msgctxt "building"
 msgid "cowshed"
 msgstr ""
 
@@ -19453,6 +19480,41 @@ msgstr ""
 msgid "Gasometer"
 msgstr ""
 
+msgid "Storage Tank"
+msgstr ""
+
+msgctxt "content"
+msgid "fuel"
+msgstr ""
+
+msgctxt "content"
+msgid "manure"
+msgstr ""
+
+msgctxt "content"
+msgid "oil"
+msgstr ""
+
+msgctxt "content"
+msgid "sewage"
+msgstr ""
+
+msgctxt "content"
+msgid "silage"
+msgstr ""
+
+msgctxt "content"
+msgid "slurry"
+msgstr ""
+
+msgctxt "content"
+msgid "water"
+msgstr ""
+
+msgctxt "content"
+msgid "wine"
+msgstr ""
+
 msgid "Bunker Silo"
 msgstr ""
 
@@ -22904,6 +22966,33 @@ msgstr ""
 msgid "Could not read NanoLog file:"
 msgstr ""
 
+msgid "OSM Recommendation"
+msgstr ""
+
+msgid "Recommend categories to your newly created instances."
+msgstr ""
+
+msgid "Training process configuration"
+msgstr ""
+
+msgid "Model Settings"
+msgstr ""
+
+msgid "Select objects or create new objects and get recommendation."
+msgstr ""
+
+msgid "Add Recommendation"
+msgstr ""
+
+msgid "Add a recommended key/value pair to your object"
+msgstr ""
+
+msgid "Train a Model"
+msgstr ""
+
+msgid "Start the training engine!"
+msgstr ""
+
 msgid "Edit opening hours"
 msgstr ""
 
diff --git a/i18n/po/bs.po b/i18n/po/bs.po
index d5ff8b2..9590a5e 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-04-27 03:33+0200\n"
+"POT-Creation-Date: 2015-05-12 03:33+0200\n"
 "PO-Revision-Date: 2012-11-03 23:07+0000\n"
 "Last-Translator: Alen Mahovic <eyeofthestorm at windowslive.com>\n"
 "Language-Team: Bosnian <bs at li.org>\n"
@@ -16,8 +16,8 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
 "n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
-"X-Launchpad-Export-Date: 2015-04-27 04:35+0000\n"
-"X-Generator: Launchpad (build 17430)\n"
+"X-Launchpad-Export-Date: 2015-05-12 04:35+0000\n"
+"X-Generator: Launchpad (build 17487)\n"
 "Language: bs\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -1471,6 +1471,9 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Some irrelevant nodes have been removed from the selection"
+msgstr ""
+
 msgid "Undo"
 msgstr ""
 
@@ -3068,6 +3071,11 @@ msgstr ""
 msgid "Failed to persist preferences to ''{0}''"
 msgstr ""
 
+msgid ""
+"Try enabling IPv6 network, prefering IPv6 over IPv4 (only works on early "
+"startup)."
+msgstr ""
+
 msgid " (at line {0}, column {1})"
 msgstr ""
 
@@ -3696,6 +3704,15 @@ msgstr ""
 msgid "Number of lane dependent values inconsistent in backward direction"
 msgstr ""
 
+msgid "Long segments"
+msgstr ""
+
+msgid "This tests for long way segments, which are usually errors."
+msgstr ""
+
+msgid "Very long segment of {0} kilometers"
+msgstr ""
+
 msgid "Tag checker (MapCSS based)"
 msgstr ""
 
@@ -4525,6 +4542,18 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
+msgid ""
+"Detected useable IPv6 network, prefering IPv6 over IPv4 after next restart."
+msgstr ""
+
+msgid "Detected useable IPv6 network, prefering IPv6 over IPv4."
+msgstr ""
+
+msgid ""
+"Detected no useable IPv6 network, prefering IPv4 over IPv6 after next "
+"restart."
+msgstr ""
+
 msgid "Unsaved osm data"
 msgstr ""
 
@@ -6203,14 +6232,6 @@ msgstr ""
 msgid "Only launching info browsers for the first {0} of {1} selected users"
 msgstr ""
 
-msgid ""
-"<html>Failed to create an URL because the encoding ''{0}''<br>was missing on "
-"this system.</html>"
-msgstr ""
-
-msgid "Missing encoding"
-msgstr ""
-
 msgid "Author"
 msgstr ""
 
@@ -10665,6 +10686,9 @@ msgstr ""
 msgid "Maximum concurrent downloads: "
 msgstr ""
 
+msgid "Maximum concurrent downloads per host: "
+msgstr ""
+
 msgid "Maximum elements in disk cache: "
 msgstr ""
 
@@ -10767,9 +10791,6 @@ msgstr ""
 msgid "Warning: illegal format of entry in style list ''{0}''. Got ''{1}''"
 msgstr ""
 
-msgid "JOSM default (XML; old version)"
-msgstr ""
-
 msgid "JOSM default (MapCSS)"
 msgstr ""
 
@@ -12231,9 +12252,6 @@ msgstr ""
 msgid "Error parsing note response from server"
 msgstr ""
 
-msgid "Error encoding string: {0}"
-msgstr ""
-
 msgid "(Code={0})"
 msgstr ""
 
@@ -12591,25 +12609,25 @@ msgstr ""
 msgid "Read protocol version"
 msgstr ""
 
-msgid "Cannot start remotecontrol server on port {0}: {1}"
+msgid "Cannot start IPv4 remotecontrol server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Accepting connections on {0}:{1}"
+msgid "Cannot start IPv6 remotecontrol server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Server stopped."
+msgid "RemoteControl::Accepting remote connections on {0}:{1}"
 msgstr ""
 
-msgid "Cannot start remotecontrol https server on port {0}: {1}"
+msgid "RemoteControl::Server {0}:{1} stopped."
 msgstr ""
 
-msgid "Unable to initialize Remote Control HTTPS Server"
+msgid "Cannot start IPv4 remotecontrol https server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Accepting secure connections on {0}:{1}"
+msgid "Cannot start IPv6 remotecontrol https server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Server (https) stopped."
+msgid "RemoteControl::Accepting secure remote connections on {0}:{1}"
 msgstr ""
 
 msgid "Remote Control has been asked to create a new node."
@@ -14277,9 +14295,6 @@ msgstr ""
 msgid "Metropole Ruhr: Luftbilder (10 cm)"
 msgstr ""
 
-msgid "SN Luftbilder, Straßennetz, Administrative Grenzen"
-msgstr ""
-
 msgid "Drone Imagery (Haiti)"
 msgstr ""
 
@@ -15140,6 +15155,11 @@ msgid ""
 "bounding box"
 msgstr ""
 
+msgid ""
+"Recommends categories/tags on newly created OSM entities by analysing "
+"spatial entities into training features and using SVM classification"
+msgstr ""
+
 msgid "Import/export OSM data in PBF format"
 msgstr ""
 
@@ -18840,7 +18860,10 @@ msgstr ""
 msgid "Suction pumpout"
 msgstr ""
 
-msgid "Gravity dump station"
+msgid "Gravity drain for hose"
+msgstr ""
+
+msgid "Casette or Elsan Disposal"
 msgstr ""
 
 msgid "Operation times"
@@ -19344,6 +19367,10 @@ msgid "shed"
 msgstr ""
 
 msgctxt "building"
+msgid "storage_tank"
+msgstr ""
+
+msgctxt "building"
 msgid "cowshed"
 msgstr ""
 
@@ -19456,6 +19483,41 @@ msgstr ""
 msgid "Gasometer"
 msgstr ""
 
+msgid "Storage Tank"
+msgstr ""
+
+msgctxt "content"
+msgid "fuel"
+msgstr ""
+
+msgctxt "content"
+msgid "manure"
+msgstr ""
+
+msgctxt "content"
+msgid "oil"
+msgstr ""
+
+msgctxt "content"
+msgid "sewage"
+msgstr ""
+
+msgctxt "content"
+msgid "silage"
+msgstr ""
+
+msgctxt "content"
+msgid "slurry"
+msgstr ""
+
+msgctxt "content"
+msgid "water"
+msgstr ""
+
+msgctxt "content"
+msgid "wine"
+msgstr ""
+
 msgid "Bunker Silo"
 msgstr ""
 
@@ -22907,6 +22969,33 @@ msgstr ""
 msgid "Could not read NanoLog file:"
 msgstr ""
 
+msgid "OSM Recommendation"
+msgstr ""
+
+msgid "Recommend categories to your newly created instances."
+msgstr ""
+
+msgid "Training process configuration"
+msgstr ""
+
+msgid "Model Settings"
+msgstr ""
+
+msgid "Select objects or create new objects and get recommendation."
+msgstr ""
+
+msgid "Add Recommendation"
+msgstr ""
+
+msgid "Add a recommended key/value pair to your object"
+msgstr ""
+
+msgid "Train a Model"
+msgstr ""
+
+msgid "Start the training engine!"
+msgstr ""
+
 msgid "Edit opening hours"
 msgstr ""
 
diff --git a/i18n/po/ca.po b/i18n/po/ca.po
index 7ce53a3..4844796 100644
--- a/i18n/po/ca.po
+++ b/i18n/po/ca.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: josm\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-04-27 03:33+0200\n"
+"POT-Creation-Date: 2015-05-12 03:33+0200\n"
 "PO-Revision-Date: 2015-04-18 21:18+0000\n"
 "Last-Translator: Dirk Stöcker <launchpad at dstoecker.de>\n"
 "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-04-27 04:36+0000\n"
-"X-Generator: Launchpad (build 17430)\n"
+"X-Launchpad-Export-Date: 2015-05-12 04:37+0000\n"
+"X-Generator: Launchpad (build 17487)\n"
 "Language: ca\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -1605,6 +1605,9 @@ msgstr[0] ""
 msgstr[1] ""
 "La via afectada despareixeria un cop es desconnectin els nodes seleccionats."
 
+msgid "Some irrelevant nodes have been removed from the selection"
+msgstr ""
+
 msgid "Undo"
 msgstr "Desfés"
 
@@ -3364,6 +3367,11 @@ msgstr "Capa: {0}"
 msgid "Failed to persist preferences to ''{0}''"
 msgstr "Ha fallat la persistència de les preferències sobre \"{0}\""
 
+msgid ""
+"Try enabling IPv6 network, prefering IPv6 over IPv4 (only works on early "
+"startup)."
+msgstr ""
+
 msgid " (at line {0}, column {1})"
 msgstr " (a la línia {0}, columna {1})"
 
@@ -4054,6 +4062,15 @@ msgstr ""
 "El nombre de valors dependents del carril és inconsistent en sentit "
 "\"endarrere\""
 
+msgid "Long segments"
+msgstr ""
+
+msgid "This tests for long way segments, which are usually errors."
+msgstr ""
+
+msgid "Very long segment of {0} kilometers"
+msgstr ""
+
 msgid "Tag checker (MapCSS based)"
 msgstr "Verificador d''etiquetes (basat en CSS Map)"
 
@@ -4940,6 +4957,18 @@ msgstr[0] ""
 msgstr[1] ""
 "JOSM funciona en mode fora de línia. Aquests recursos no està disponible: {0}"
 
+msgid ""
+"Detected useable IPv6 network, prefering IPv6 over IPv4 after next restart."
+msgstr ""
+
+msgid "Detected useable IPv6 network, prefering IPv6 over IPv4."
+msgstr ""
+
+msgid ""
+"Detected no useable IPv6 network, prefering IPv4 over IPv6 after next "
+"restart."
+msgstr ""
+
 msgid "Unsaved osm data"
 msgstr "Dades de l''OSM no enregistrades"
 
@@ -6793,16 +6822,6 @@ msgstr ""
 "Només es mostrarà informació al navegador per {0} dels {1} usuaris "
 "seleccionats"
 
-msgid ""
-"<html>Failed to create an URL because the encoding ''{0}''<br>was missing on "
-"this system.</html>"
-msgstr ""
-"<html>Ha fallat la creació d''una URL perquè la codificació ''{0}''<br>no "
-"està disponible en aquest sistema</html>"
-
-msgid "Missing encoding"
-msgstr "Codificació mancant"
-
 msgid "Author"
 msgstr "Autor"
 
@@ -11841,6 +11860,9 @@ msgstr "Directori de la memòria cau de tessel·les: "
 msgid "Maximum concurrent downloads: "
 msgstr "Nombre màxim de descàrregues concurrents: "
 
+msgid "Maximum concurrent downloads per host: "
+msgstr ""
+
 msgid "Maximum elements in disk cache: "
 msgstr "Nombre màxim d''lements a la memòria cau de disc: "
 
@@ -11956,9 +11978,6 @@ msgstr ""
 "Avís: format incorrecte d''una entrada a la llista d''estils ''{0}''. Hi ha "
 "''{1}''"
 
-msgid "JOSM default (XML; old version)"
-msgstr "JOSM predeterminat (XML; versió antiga)"
-
 msgid "JOSM default (MapCSS)"
 msgstr "JOSM predeterminat (MapCSS)"
 
@@ -13605,9 +13624,6 @@ msgstr "Ha fallat la pujada de la nota."
 msgid "Error parsing note response from server"
 msgstr "Error al servidor en processar la resposta de la nota."
 
-msgid "Error encoding string: {0}"
-msgstr "Error en codificar la cadena de text: {0}"
-
 msgid "(Code={0})"
 msgstr "(Codi={0})"
 
@@ -14007,27 +14023,26 @@ msgstr "Crear nous objectes"
 msgid "Read protocol version"
 msgstr "Llegir la versió del protocol"
 
-msgid "Cannot start remotecontrol server on port {0}: {1}"
-msgstr "No es possible iniciar el servidor de control remot al port {0}: {1}"
+msgid "Cannot start IPv4 remotecontrol server on port {0}: {1}"
+msgstr ""
 
-msgid "RemoteControl::Accepting connections on {0}:{1}"
-msgstr "ControlRemot::Acceptant connexions a {0}:{1}"
+msgid "Cannot start IPv6 remotecontrol server on port {0}: {1}"
+msgstr ""
 
-msgid "RemoteControl::Server stopped."
-msgstr "Control remot::Servidor aturat."
+msgid "RemoteControl::Accepting remote connections on {0}:{1}"
+msgstr ""
 
-msgid "Cannot start remotecontrol https server on port {0}: {1}"
+msgid "RemoteControl::Server {0}:{1} stopped."
 msgstr ""
-"No es pot iniciar el control remot al servidor https al port {0}: {1}"
 
-msgid "Unable to initialize Remote Control HTTPS Server"
-msgstr "No es pot iniciar el control remot del servidor HTTPS"
+msgid "Cannot start IPv4 remotecontrol https server on port {0}: {1}"
+msgstr ""
 
-msgid "RemoteControl::Accepting secure connections on {0}:{1}"
-msgstr "ControlRemot::Acceptant connexions segures a {0}:{1}"
+msgid "Cannot start IPv6 remotecontrol https server on port {0}: {1}"
+msgstr ""
 
-msgid "RemoteControl::Server (https) stopped."
-msgstr "Control Remot::Servidor (https) aturat."
+msgid "RemoteControl::Accepting secure remote connections on {0}:{1}"
+msgstr ""
 
 msgid "Remote Control has been asked to create a new node."
 msgstr "El control remot ha demanat de crear un nou node"
@@ -15975,9 +15990,6 @@ msgstr "NRW-Atlas: Topographische Karte 1:10000"
 msgid "Metropole Ruhr: Luftbilder (10 cm)"
 msgstr "Metròpoli del Ruhr: imatgeria aèria (10 cm)"
 
-msgid "SN Luftbilder, Straßennetz, Administrative Grenzen"
-msgstr "Imatges aèries SN, xarxa de carreteres, fronteres administratives"
-
 msgid "Drone Imagery (Haiti)"
 msgstr "Imatgeria de drones (Haiti)"
 
@@ -16913,6 +16925,11 @@ msgid ""
 msgstr ""
 "Pren errors de l''OSM Inspector i els mostra al requadre del mapa actual."
 
+msgid ""
+"Recommends categories/tags on newly created OSM entities by analysing "
+"spatial entities into training features and using SVM classification"
+msgstr ""
+
 msgid "Import/export OSM data in PBF format"
 msgstr "Importa/exporta dades OSM en format PBF"
 
@@ -20701,8 +20718,11 @@ msgstr "Estació sanitària de buidat"
 msgid "Suction pumpout"
 msgstr "Buidat per succió"
 
-msgid "Gravity dump station"
-msgstr "Estació de buidat per gravetat"
+msgid "Gravity drain for hose"
+msgstr ""
+
+msgid "Casette or Elsan Disposal"
+msgstr ""
 
 msgid "Operation times"
 msgstr "Horari de funcionament"
@@ -21205,6 +21225,10 @@ msgid "shed"
 msgstr "cobert"
 
 msgctxt "building"
+msgid "storage_tank"
+msgstr ""
+
+msgctxt "building"
 msgid "cowshed"
 msgstr "estable"
 
@@ -21317,6 +21341,41 @@ msgstr "Molí de vent"
 msgid "Gasometer"
 msgstr "Gasòmetre"
 
+msgid "Storage Tank"
+msgstr ""
+
+msgctxt "content"
+msgid "fuel"
+msgstr ""
+
+msgctxt "content"
+msgid "manure"
+msgstr ""
+
+msgctxt "content"
+msgid "oil"
+msgstr ""
+
+msgctxt "content"
+msgid "sewage"
+msgstr ""
+
+msgctxt "content"
+msgid "silage"
+msgstr ""
+
+msgctxt "content"
+msgid "slurry"
+msgstr ""
+
+msgctxt "content"
+msgid "water"
+msgstr ""
+
+msgctxt "content"
+msgid "wine"
+msgstr ""
+
 msgid "Bunker Silo"
 msgstr "Sitja oberta"
 
@@ -24843,6 +24902,33 @@ msgstr "Obre el fitxer NanoLog..."
 msgid "Could not read NanoLog file:"
 msgstr "No és possible la lectura del fitxer NanoLog:"
 
+msgid "OSM Recommendation"
+msgstr ""
+
+msgid "Recommend categories to your newly created instances."
+msgstr ""
+
+msgid "Training process configuration"
+msgstr ""
+
+msgid "Model Settings"
+msgstr ""
+
+msgid "Select objects or create new objects and get recommendation."
+msgstr ""
+
+msgid "Add Recommendation"
+msgstr ""
+
+msgid "Add a recommended key/value pair to your object"
+msgstr ""
+
+msgid "Train a Model"
+msgstr ""
+
+msgid "Start the training engine!"
+msgstr ""
+
 msgid "Edit opening hours"
 msgstr "Edita les hores d''obertura"
 
diff --git a/i18n/po/ca at valencia.po b/i18n/po/ca at valencia.po
index f7eda16..3bac0ad 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-04-27 03:33+0200\n"
+"POT-Creation-Date: 2015-05-12 03:33+0200\n"
 "PO-Revision-Date: 2015-04-25 18:52+0000\n"
 "Last-Translator: Dirk Stöcker <launchpad at dstoecker.de>\n"
 "Language-Team: el_libre - - www.catmidia.cat\n"
@@ -15,8 +15,8 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Launchpad-Export-Date: 2015-04-27 05:05+0000\n"
-"X-Generator: Launchpad (build 17430)\n"
+"X-Launchpad-Export-Date: 2015-05-12 05:05+0000\n"
+"X-Generator: Launchpad (build 17487)\n"
 "Language: ca at valencia\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -1595,6 +1595,9 @@ msgstr[0] ""
 msgstr[1] ""
 "La via afectada despareixeria un cop es desconnecten els nodes seleccionats."
 
+msgid "Some irrelevant nodes have been removed from the selection"
+msgstr ""
+
 msgid "Undo"
 msgstr "Desfés"
 
@@ -3339,6 +3342,11 @@ msgstr "Capa: {0}"
 msgid "Failed to persist preferences to ''{0}''"
 msgstr "Ha fallat la persistència de les preferències sobre \"{0}\""
 
+msgid ""
+"Try enabling IPv6 network, prefering IPv6 over IPv4 (only works on early "
+"startup)."
+msgstr ""
+
 msgid " (at line {0}, column {1})"
 msgstr " (a la línia {0}, columna {1})"
 
@@ -4016,6 +4024,15 @@ msgstr ""
 msgid "Number of lane dependent values inconsistent in backward direction"
 msgstr ""
 
+msgid "Long segments"
+msgstr ""
+
+msgid "This tests for long way segments, which are usually errors."
+msgstr ""
+
+msgid "Very long segment of {0} kilometers"
+msgstr ""
+
 msgid "Tag checker (MapCSS based)"
 msgstr ""
 
@@ -4874,6 +4891,18 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
+msgid ""
+"Detected useable IPv6 network, prefering IPv6 over IPv4 after next restart."
+msgstr ""
+
+msgid "Detected useable IPv6 network, prefering IPv6 over IPv4."
+msgstr ""
+
+msgid ""
+"Detected no useable IPv6 network, prefering IPv4 over IPv6 after next "
+"restart."
+msgstr ""
+
 msgid "Unsaved osm data"
 msgstr "Dades d''osm no enregistrades"
 
@@ -6658,16 +6687,6 @@ msgstr ""
 "Només es mostrarà informació al navegador per {0} dels {1} usuaris "
 "seleccionats"
 
-msgid ""
-"<html>Failed to create an URL because the encoding ''{0}''<br>was missing on "
-"this system.</html>"
-msgstr ""
-"<html>Ha fallat la creació d''una URL perquè la codificació ''{0}''<br>no "
-"està disponible en este sistema</html>"
-
-msgid "Missing encoding"
-msgstr "Codificació mancant"
-
 msgid "Author"
 msgstr "Autor"
 
@@ -11710,6 +11729,9 @@ msgstr "Directori de la memòria cau de tessel·les: "
 msgid "Maximum concurrent downloads: "
 msgstr ""
 
+msgid "Maximum concurrent downloads per host: "
+msgstr ""
+
 msgid "Maximum elements in disk cache: "
 msgstr ""
 
@@ -11825,9 +11847,6 @@ msgstr ""
 "Avís: format incorrecte d''una entrada a la llista d''estils ''{0}''. Hi ha "
 "''{1}''"
 
-msgid "JOSM default (XML; old version)"
-msgstr ""
-
 msgid "JOSM default (MapCSS)"
 msgstr ""
 
@@ -13460,9 +13479,6 @@ msgstr ""
 msgid "Error parsing note response from server"
 msgstr ""
 
-msgid "Error encoding string: {0}"
-msgstr ""
-
 msgid "(Code={0})"
 msgstr "(Codi={0})"
 
@@ -13861,25 +13877,25 @@ msgstr "Crear nous objectes"
 msgid "Read protocol version"
 msgstr "Llegir la versió del protocol"
 
-msgid "Cannot start remotecontrol server on port {0}: {1}"
-msgstr "No es possible iniciar el servidor de control remot al port {0}: {1}"
+msgid "Cannot start IPv4 remotecontrol server on port {0}: {1}"
+msgstr ""
 
-msgid "RemoteControl::Accepting connections on {0}:{1}"
+msgid "Cannot start IPv6 remotecontrol server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Server stopped."
-msgstr "Control remot::Servidor parat."
+msgid "RemoteControl::Accepting remote connections on {0}:{1}"
+msgstr ""
 
-msgid "Cannot start remotecontrol https server on port {0}: {1}"
+msgid "RemoteControl::Server {0}:{1} stopped."
 msgstr ""
 
-msgid "Unable to initialize Remote Control HTTPS Server"
+msgid "Cannot start IPv4 remotecontrol https server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Accepting secure connections on {0}:{1}"
+msgid "Cannot start IPv6 remotecontrol https server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Server (https) stopped."
+msgid "RemoteControl::Accepting secure remote connections on {0}:{1}"
 msgstr ""
 
 msgid "Remote Control has been asked to create a new node."
@@ -15806,9 +15822,6 @@ msgstr ""
 msgid "Metropole Ruhr: Luftbilder (10 cm)"
 msgstr ""
 
-msgid "SN Luftbilder, Straßennetz, Administrative Grenzen"
-msgstr ""
-
 msgid "Drone Imagery (Haiti)"
 msgstr ""
 
@@ -16734,6 +16747,11 @@ msgid ""
 msgstr ""
 "Pren errors d''Osm Inspector i els mostra al requadre del mapa actual."
 
+msgid ""
+"Recommends categories/tags on newly created OSM entities by analysing "
+"spatial entities into training features and using SVM classification"
+msgstr ""
+
 msgid "Import/export OSM data in PBF format"
 msgstr ""
 
@@ -20486,7 +20504,10 @@ msgstr ""
 msgid "Suction pumpout"
 msgstr ""
 
-msgid "Gravity dump station"
+msgid "Gravity drain for hose"
+msgstr ""
+
+msgid "Casette or Elsan Disposal"
 msgstr ""
 
 msgid "Operation times"
@@ -20990,6 +21011,10 @@ msgid "shed"
 msgstr "cobert"
 
 msgctxt "building"
+msgid "storage_tank"
+msgstr ""
+
+msgctxt "building"
 msgid "cowshed"
 msgstr ""
 
@@ -21102,6 +21127,41 @@ msgstr "Molí de vent"
 msgid "Gasometer"
 msgstr "Gasòmetre"
 
+msgid "Storage Tank"
+msgstr ""
+
+msgctxt "content"
+msgid "fuel"
+msgstr ""
+
+msgctxt "content"
+msgid "manure"
+msgstr ""
+
+msgctxt "content"
+msgid "oil"
+msgstr ""
+
+msgctxt "content"
+msgid "sewage"
+msgstr ""
+
+msgctxt "content"
+msgid "silage"
+msgstr ""
+
+msgctxt "content"
+msgid "slurry"
+msgstr ""
+
+msgctxt "content"
+msgid "water"
+msgstr ""
+
+msgctxt "content"
+msgid "wine"
+msgstr ""
+
 msgid "Bunker Silo"
 msgstr ""
 
@@ -24582,6 +24642,33 @@ msgstr "Obri el fitxer NanoLog..."
 msgid "Could not read NanoLog file:"
 msgstr ""
 
+msgid "OSM Recommendation"
+msgstr ""
+
+msgid "Recommend categories to your newly created instances."
+msgstr ""
+
+msgid "Training process configuration"
+msgstr ""
+
+msgid "Model Settings"
+msgstr ""
+
+msgid "Select objects or create new objects and get recommendation."
+msgstr ""
+
+msgid "Add Recommendation"
+msgstr ""
+
+msgid "Add a recommended key/value pair to your object"
+msgstr ""
+
+msgid "Train a Model"
+msgstr ""
+
+msgid "Start the training engine!"
+msgstr ""
+
 msgid "Edit opening hours"
 msgstr "Edita les hores d''obertura"
 
diff --git a/i18n/po/cs.po b/i18n/po/cs.po
index 9c3344a..e74dd72 100644
--- a/i18n/po/cs.po
+++ b/i18n/po/cs.po
@@ -7,16 +7,16 @@ msgid ""
 msgstr ""
 "Project-Id-Version: josm\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-04-27 03:33+0200\n"
-"PO-Revision-Date: 2015-04-24 14:19+0000\n"
+"POT-Creation-Date: 2015-05-12 03:33+0200\n"
+"PO-Revision-Date: 2015-05-06 10:25+0000\n"
 "Last-Translator: Dalibor Jelínek <launchpad.net at dalibor.cz>\n"
 "Language-Team: Czech <cs at li.org>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
-"X-Launchpad-Export-Date: 2015-04-27 04:37+0000\n"
-"X-Generator: Launchpad (build 17430)\n"
+"X-Launchpad-Export-Date: 2015-05-12 04:37+0000\n"
+"X-Generator: Launchpad (build 17487)\n"
 "Language: cs\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -1602,6 +1602,9 @@ msgstr[0] "Dotčená cesta by po odpojení uzlu přestala existovat."
 msgstr[1] "Dotčená cesta by po odpojení uzlů přestala existovat."
 msgstr[2] "Dotčená cesta by po odpojení uzlů přestala existovat."
 
+msgid "Some irrelevant nodes have been removed from the selection"
+msgstr "Z výběru byly odstraněny některé irelevantní uzly"
+
 msgid "Undo"
 msgstr "Zpět"
 
@@ -3375,6 +3378,13 @@ msgstr "Vrstva: {0}"
 msgid "Failed to persist preferences to ''{0}''"
 msgstr "Nelze uložit předvolby do \"{0}\""
 
+msgid ""
+"Try enabling IPv6 network, prefering IPv6 over IPv4 (only works on early "
+"startup)."
+msgstr ""
+"Zkuste povolit síť IPv6, upřednostňujíc IPv6 před IPv4 (funguje pouze při "
+"brzkém spuštění)"
+
 msgid " (at line {0}, column {1})"
 msgstr " (na řádku {0}, sloupec {1})"
 
@@ -4037,6 +4047,15 @@ msgstr "Počet hodnot závislých na jízdním pruhu neodpovídá ve směru vpř
 msgid "Number of lane dependent values inconsistent in backward direction"
 msgstr "Počet hodnot závislých na jízdním pruhu neodpovídá ve směru vzad"
 
+msgid "Long segments"
+msgstr "Dlouhé segmenty"
+
+msgid "This tests for long way segments, which are usually errors."
+msgstr ""
+
+msgid "Very long segment of {0} kilometers"
+msgstr "Velmi dlouhý segment - {0} kilometrů"
+
 msgid "Tag checker (MapCSS based)"
 msgstr "Kontrola značek (založená na MapCSS)"
 
@@ -4911,6 +4930,22 @@ msgstr[0] "JOSM běží v offline módu. Tento zdroj nebude dostupný: {0}"
 msgstr[1] "JOSM běží v offline módu. Tyto zdroje nebudou dostupné: {0}"
 msgstr[2] "JOSM běží v offline módu. Tyto zdroje nebudou dostupné: {0}"
 
+msgid ""
+"Detected useable IPv6 network, prefering IPv6 over IPv4 after next restart."
+msgstr ""
+"Zjištěna použitelná síť IPv6, upřednostňuji IPv6 před IPv4 po dalším "
+"restartu."
+
+msgid "Detected useable IPv6 network, prefering IPv6 over IPv4."
+msgstr "Zjištěna použitelná síť IPv6, upřednostňuji IPv6 před IPv4"
+
+msgid ""
+"Detected no useable IPv6 network, prefering IPv4 over IPv6 after next "
+"restart."
+msgstr ""
+"Nezjištěna použitelná síť IPv6, upřednostňuji IPv4 před IPv6 po dalším "
+"restartu."
+
 msgid "Unsaved osm data"
 msgstr "Neuložená OSM data"
 
@@ -6751,16 +6786,6 @@ msgstr ""
 "Zobrazuji prohlížeče informací pouze pro prvních {0} z {1} vybraných "
 "uživatelů"
 
-msgid ""
-"<html>Failed to create an URL because the encoding ''{0}''<br>was missing on "
-"this system.</html>"
-msgstr ""
-"<html>Nepodařilo se vytvořit URL, protože na tomto systému není k dispozici "
-"kódování ''{0}''.</html>"
-
-msgid "Missing encoding"
-msgstr "Chybějící kódování"
-
 msgid "Author"
 msgstr "Autor"
 
@@ -11717,6 +11742,9 @@ msgstr "Adresář keše dlaždic: "
 msgid "Maximum concurrent downloads: "
 msgstr "Maximum současných stahování: "
 
+msgid "Maximum concurrent downloads per host: "
+msgstr "Maximální počet současných stahování od hostitele: "
+
 msgid "Maximum elements in disk cache: "
 msgstr "Maximum prvků v diskové keši: "
 
@@ -11829,9 +11857,6 @@ msgid "Warning: illegal format of entry in style list ''{0}''. Got ''{1}''"
 msgstr ""
 "Varování: neplatný formát položky v seznamu stylů ''{0}''. Nalezeno ''{1}''"
 
-msgid "JOSM default (XML; old version)"
-msgstr "JOSM výchozí nastavení (XML; stará verze)"
-
 msgid "JOSM default (MapCSS)"
 msgstr "JOSM výchozí nastavení (MapCSS)"
 
@@ -13432,9 +13457,6 @@ msgstr "Nahrání poznámky se nezdařilo"
 msgid "Error parsing note response from server"
 msgstr "Chyba ve zpracování odpovědi serveru"
 
-msgid "Error encoding string: {0}"
-msgstr "Řetězec se zakódovanou chybou: {0}"
-
 msgid "(Code={0})"
 msgstr "(Kód={0})"
 
@@ -13822,26 +13844,26 @@ msgstr "Vytvářet nové objekty"
 msgid "Read protocol version"
 msgstr "Číst verzi protokolu"
 
-msgid "Cannot start remotecontrol server on port {0}: {1}"
-msgstr "Nemůžu spustit server vzdáleného ovládání na portu {0}: {1}"
+msgid "Cannot start IPv4 remotecontrol server on port {0}: {1}"
+msgstr ""
 
-msgid "RemoteControl::Accepting connections on {0}:{1}"
-msgstr "RemoteControl::Přijímá spojení na {0}:{1}"
+msgid "Cannot start IPv6 remotecontrol server on port {0}: {1}"
+msgstr ""
 
-msgid "RemoteControl::Server stopped."
-msgstr "Vzdálené ovládání::Server zastaven."
+msgid "RemoteControl::Accepting remote connections on {0}:{1}"
+msgstr ""
 
-msgid "Cannot start remotecontrol https server on port {0}: {1}"
-msgstr "Nemohu spustit server https vzdáleného ovládání na portu {0}: {1}"
+msgid "RemoteControl::Server {0}:{1} stopped."
+msgstr ""
 
-msgid "Unable to initialize Remote Control HTTPS Server"
-msgstr "Nelze inicializovat server Vzdáleného ovládání HTTPS"
+msgid "Cannot start IPv4 remotecontrol https server on port {0}: {1}"
+msgstr ""
 
-msgid "RemoteControl::Accepting secure connections on {0}:{1}"
-msgstr "RemoteControl::Přijímá zabezpečená spojení na {0}:{1}"
+msgid "Cannot start IPv6 remotecontrol https server on port {0}: {1}"
+msgstr ""
 
-msgid "RemoteControl::Server (https) stopped."
-msgstr "Vzdálené ovládání::Server (https) zastaven."
+msgid "RemoteControl::Accepting secure remote connections on {0}:{1}"
+msgstr ""
 
 msgid "Remote Control has been asked to create a new node."
 msgstr "Vzdálené ovládání bylo požádáno o vytvoření nového uzlu."
@@ -15794,9 +15816,6 @@ msgstr "NRW-Atlas: Topographische Karte 1:10000"
 msgid "Metropole Ruhr: Luftbilder (10 cm)"
 msgstr "Metropole Ruhr: Luftbilder (10 cm)"
 
-msgid "SN Luftbilder, Straßennetz, Administrative Grenzen"
-msgstr "SN Luftbilder, Straßennetz, Administrative Grenzen"
-
 msgid "Drone Imagery (Haiti)"
 msgstr "Drone Imagery (Haiti)"
 
@@ -16725,6 +16744,13 @@ msgstr ""
 "Přivést chyby z Osm Inspectoru a zobrazit je na aktuálním ohraničujícím "
 "rámečku JOSM"
 
+msgid ""
+"Recommends categories/tags on newly created OSM entities by analysing "
+"spatial entities into training features and using SVM classification"
+msgstr ""
+"Doporučuje kategorie/značky na nově vytvořených prvcích OSM analýzou "
+"prostorových dat za použití SVM klasifikace."
+
 msgid "Import/export OSM data in PBF format"
 msgstr "Import/export OSM dat ve formátu PBF"
 
@@ -20496,8 +20522,11 @@ msgstr "Výpusť odpadních vod"
 msgid "Suction pumpout"
 msgstr "Odsávání pumpou"
 
-msgid "Gravity dump station"
-msgstr "Gravitační výpusť"
+msgid "Gravity drain for hose"
+msgstr "Gravitační odtok pro hadici"
+
+msgid "Casette or Elsan Disposal"
+msgstr "Likvidace kazetová nebo Elsan"
 
 msgid "Operation times"
 msgstr "Doba provozu"
@@ -21000,6 +21029,10 @@ msgid "shed"
 msgstr "kůlna"
 
 msgctxt "building"
+msgid "storage_tank"
+msgstr "uskladňovací_nádrž"
+
+msgctxt "building"
 msgid "cowshed"
 msgstr "kravín"
 
@@ -21112,6 +21145,41 @@ msgstr "Větrný mlýn"
 msgid "Gasometer"
 msgstr "Plynojem"
 
+msgid "Storage Tank"
+msgstr "Uskladňovací nádrž"
+
+msgctxt "content"
+msgid "fuel"
+msgstr "palivo"
+
+msgctxt "content"
+msgid "manure"
+msgstr "hnůj"
+
+msgctxt "content"
+msgid "oil"
+msgstr "ropa"
+
+msgctxt "content"
+msgid "sewage"
+msgstr "splašky"
+
+msgctxt "content"
+msgid "silage"
+msgstr "siláž"
+
+msgctxt "content"
+msgid "slurry"
+msgstr "močůvka"
+
+msgctxt "content"
+msgid "water"
+msgstr "voda"
+
+msgctxt "content"
+msgid "wine"
+msgstr "víno"
+
 msgid "Bunker Silo"
 msgstr "silážní jáma"
 
@@ -24629,6 +24697,33 @@ msgstr "Otevřít soubor NanoLog..."
 msgid "Could not read NanoLog file:"
 msgstr "Čtení souboru NanoLog se nezdařilo:"
 
+msgid "OSM Recommendation"
+msgstr "Doporučení OSM"
+
+msgid "Recommend categories to your newly created instances."
+msgstr "Doporučené kategorie pro nově vytvořené instance"
+
+msgid "Training process configuration"
+msgstr "Nastavení tréninkového procesu"
+
+msgid "Model Settings"
+msgstr "Nastavení modelu"
+
+msgid "Select objects or create new objects and get recommendation."
+msgstr "Zvolte objekty nebo vytvořte nové a získejte doporučení"
+
+msgid "Add Recommendation"
+msgstr "Přidat doporučené"
+
+msgid "Add a recommended key/value pair to your object"
+msgstr "Přidá k vašemu objektu doporučený pár klíč/hodnota"
+
+msgid "Train a Model"
+msgstr "Trénovat model"
+
+msgid "Start the training engine!"
+msgstr "Spustit trénink!"
+
 msgid "Edit opening hours"
 msgstr "Upravit otevírací dobu"
 
@@ -31740,6 +31835,3 @@ msgstr "Vyjet"
 
 msgid "Drive a race car on this layer"
 msgstr "Řídit závodní speciál na této vrstvě"
-
-#~ msgid "Note comment background"
-#~ msgstr "Pozadí komentáře poznámky"
diff --git a/i18n/po/cy.po b/i18n/po/cy.po
index 7d3a84d..cf8699e 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-04-27 03:33+0200\n"
+"POT-Creation-Date: 2015-05-12 03:33+0200\n"
 "PO-Revision-Date: 2009-07-17 21:45+0000\n"
 "Last-Translator: iggy23 <Unknown>\n"
 "Language-Team: Welsh <cy at li.org>\n"
@@ -16,8 +16,8 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=4; plural=n==1 ? 0 : n==2 ? 1 : (n != 8 && n != 11) ? "
 "2 : 3;\n"
-"X-Launchpad-Export-Date: 2015-04-27 05:01+0000\n"
-"X-Generator: Launchpad (build 17430)\n"
+"X-Launchpad-Export-Date: 2015-05-12 05:01+0000\n"
+"X-Generator: Launchpad (build 17487)\n"
 "Language: cy\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -1469,6 +1469,9 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Some irrelevant nodes have been removed from the selection"
+msgstr ""
+
 msgid "Undo"
 msgstr ""
 
@@ -3066,6 +3069,11 @@ msgstr ""
 msgid "Failed to persist preferences to ''{0}''"
 msgstr ""
 
+msgid ""
+"Try enabling IPv6 network, prefering IPv6 over IPv4 (only works on early "
+"startup)."
+msgstr ""
+
 msgid " (at line {0}, column {1})"
 msgstr ""
 
@@ -3694,6 +3702,15 @@ msgstr ""
 msgid "Number of lane dependent values inconsistent in backward direction"
 msgstr ""
 
+msgid "Long segments"
+msgstr ""
+
+msgid "This tests for long way segments, which are usually errors."
+msgstr ""
+
+msgid "Very long segment of {0} kilometers"
+msgstr ""
+
 msgid "Tag checker (MapCSS based)"
 msgstr ""
 
@@ -4523,6 +4540,18 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
+msgid ""
+"Detected useable IPv6 network, prefering IPv6 over IPv4 after next restart."
+msgstr ""
+
+msgid "Detected useable IPv6 network, prefering IPv6 over IPv4."
+msgstr ""
+
+msgid ""
+"Detected no useable IPv6 network, prefering IPv4 over IPv6 after next "
+"restart."
+msgstr ""
+
 msgid "Unsaved osm data"
 msgstr ""
 
@@ -6201,14 +6230,6 @@ msgstr ""
 msgid "Only launching info browsers for the first {0} of {1} selected users"
 msgstr ""
 
-msgid ""
-"<html>Failed to create an URL because the encoding ''{0}''<br>was missing on "
-"this system.</html>"
-msgstr ""
-
-msgid "Missing encoding"
-msgstr ""
-
 msgid "Author"
 msgstr ""
 
@@ -10663,6 +10684,9 @@ msgstr ""
 msgid "Maximum concurrent downloads: "
 msgstr ""
 
+msgid "Maximum concurrent downloads per host: "
+msgstr ""
+
 msgid "Maximum elements in disk cache: "
 msgstr ""
 
@@ -10765,9 +10789,6 @@ msgstr ""
 msgid "Warning: illegal format of entry in style list ''{0}''. Got ''{1}''"
 msgstr ""
 
-msgid "JOSM default (XML; old version)"
-msgstr ""
-
 msgid "JOSM default (MapCSS)"
 msgstr ""
 
@@ -12229,9 +12250,6 @@ msgstr ""
 msgid "Error parsing note response from server"
 msgstr ""
 
-msgid "Error encoding string: {0}"
-msgstr ""
-
 msgid "(Code={0})"
 msgstr ""
 
@@ -12589,25 +12607,25 @@ msgstr ""
 msgid "Read protocol version"
 msgstr ""
 
-msgid "Cannot start remotecontrol server on port {0}: {1}"
+msgid "Cannot start IPv4 remotecontrol server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Accepting connections on {0}:{1}"
+msgid "Cannot start IPv6 remotecontrol server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Server stopped."
+msgid "RemoteControl::Accepting remote connections on {0}:{1}"
 msgstr ""
 
-msgid "Cannot start remotecontrol https server on port {0}: {1}"
+msgid "RemoteControl::Server {0}:{1} stopped."
 msgstr ""
 
-msgid "Unable to initialize Remote Control HTTPS Server"
+msgid "Cannot start IPv4 remotecontrol https server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Accepting secure connections on {0}:{1}"
+msgid "Cannot start IPv6 remotecontrol https server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Server (https) stopped."
+msgid "RemoteControl::Accepting secure remote connections on {0}:{1}"
 msgstr ""
 
 msgid "Remote Control has been asked to create a new node."
@@ -14275,9 +14293,6 @@ msgstr ""
 msgid "Metropole Ruhr: Luftbilder (10 cm)"
 msgstr ""
 
-msgid "SN Luftbilder, Straßennetz, Administrative Grenzen"
-msgstr ""
-
 msgid "Drone Imagery (Haiti)"
 msgstr ""
 
@@ -15138,6 +15153,11 @@ msgid ""
 "bounding box"
 msgstr ""
 
+msgid ""
+"Recommends categories/tags on newly created OSM entities by analysing "
+"spatial entities into training features and using SVM classification"
+msgstr ""
+
 msgid "Import/export OSM data in PBF format"
 msgstr ""
 
@@ -18838,7 +18858,10 @@ msgstr ""
 msgid "Suction pumpout"
 msgstr ""
 
-msgid "Gravity dump station"
+msgid "Gravity drain for hose"
+msgstr ""
+
+msgid "Casette or Elsan Disposal"
 msgstr ""
 
 msgid "Operation times"
@@ -19342,6 +19365,10 @@ msgid "shed"
 msgstr ""
 
 msgctxt "building"
+msgid "storage_tank"
+msgstr ""
+
+msgctxt "building"
 msgid "cowshed"
 msgstr ""
 
@@ -19454,6 +19481,41 @@ msgstr ""
 msgid "Gasometer"
 msgstr ""
 
+msgid "Storage Tank"
+msgstr ""
+
+msgctxt "content"
+msgid "fuel"
+msgstr ""
+
+msgctxt "content"
+msgid "manure"
+msgstr ""
+
+msgctxt "content"
+msgid "oil"
+msgstr ""
+
+msgctxt "content"
+msgid "sewage"
+msgstr ""
+
+msgctxt "content"
+msgid "silage"
+msgstr ""
+
+msgctxt "content"
+msgid "slurry"
+msgstr ""
+
+msgctxt "content"
+msgid "water"
+msgstr ""
+
+msgctxt "content"
+msgid "wine"
+msgstr ""
+
 msgid "Bunker Silo"
 msgstr ""
 
@@ -22905,6 +22967,33 @@ msgstr ""
 msgid "Could not read NanoLog file:"
 msgstr ""
 
+msgid "OSM Recommendation"
+msgstr ""
+
+msgid "Recommend categories to your newly created instances."
+msgstr ""
+
+msgid "Training process configuration"
+msgstr ""
+
+msgid "Model Settings"
+msgstr ""
+
+msgid "Select objects or create new objects and get recommendation."
+msgstr ""
+
+msgid "Add Recommendation"
+msgstr ""
+
+msgid "Add a recommended key/value pair to your object"
+msgstr ""
+
+msgid "Train a Model"
+msgstr ""
+
+msgid "Start the training engine!"
+msgstr ""
+
 msgid "Edit opening hours"
 msgstr ""
 
diff --git a/i18n/po/da.po b/i18n/po/da.po
index 2d0586f..6c58ada 100644
--- a/i18n/po/da.po
+++ b/i18n/po/da.po
@@ -8,16 +8,16 @@ msgid ""
 msgstr ""
 "Project-Id-Version: josm\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-04-27 03:33+0200\n"
-"PO-Revision-Date: 2015-04-26 22:06+0000\n"
+"POT-Creation-Date: 2015-05-12 03:33+0200\n"
+"PO-Revision-Date: 2015-05-11 21:20+0000\n"
 "Last-Translator: Jørn <joern.map at gmail.com>\n"
 "Language-Team: Dansk <kde-i18n-doc at kde.org>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Launchpad-Export-Date: 2015-04-27 04:37+0000\n"
-"X-Generator: Launchpad (build 17430)\n"
+"X-Launchpad-Export-Date: 2015-05-12 04:37+0000\n"
+"X-Generator: Launchpad (build 17487)\n"
 "Language: da_DK\n"
 "X-Poedit-SourceCharset: utf-8\n"
 
@@ -585,7 +585,7 @@ msgid "New offset"
 msgstr "Ny forskydning"
 
 msgid "Adjust the position of this imagery layer"
-msgstr "Justér positionen af dette billedlag"
+msgstr "Juster positionen af dette billedlag"
 
 msgid "Adjust imagery offset"
 msgstr "Juster forskydningen for billedlaget"
@@ -742,7 +742,7 @@ msgid "Join Node to Way"
 msgstr "Føj punkt til vej"
 
 msgid "Include a node into the nearest way segments"
-msgstr "Inkludér et punkt i de nærmeste vej-sekmenter"
+msgstr "Inkluderer et punkt i de nærmeste vej-segmenter"
 
 msgid "Move Node onto Way"
 msgstr "Flyt punkt til vej"
@@ -1592,6 +1592,9 @@ msgstr[0] ""
 msgstr[1] ""
 "Den påvirkede vej ville forsvinde efter frakobling af valgte punkter."
 
+msgid "Some irrelevant nodes have been removed from the selection"
+msgstr "Nogle irrelevante punkter er blevet fjernet fra markeringen"
+
 msgid "Undo"
 msgstr "Fortryd"
 
@@ -3325,6 +3328,13 @@ msgstr "Lag: {0}"
 msgid "Failed to persist preferences to ''{0}''"
 msgstr "Kunne ikke gemme indstillinger i ''{0}''"
 
+msgid ""
+"Try enabling IPv6 network, prefering IPv6 over IPv4 (only works on early "
+"startup)."
+msgstr ""
+"Prøv at aktivere IPv6-netværk, foretrækker IPv6 fremfor IPv4 (virker kun ved "
+"tidlig opstart)."
+
 msgid " (at line {0}, column {1})"
 msgstr " (ved linje {0}, kolonne {1})"
 
@@ -3992,6 +4002,15 @@ msgstr "Antal lane afhængige værdier inkonsekvent i fremadgående retning"
 msgid "Number of lane dependent values inconsistent in backward direction"
 msgstr "Antal lane afhængige værdier inkonsekvent i baglæns retning"
 
+msgid "Long segments"
+msgstr "Lange segmenter"
+
+msgid "This tests for long way segments, which are usually errors."
+msgstr "Tester for lange vej segmenter, der normalt er fejl."
+
+msgid "Very long segment of {0} kilometers"
+msgstr "Meget langt segment på {0} kilometer"
+
 msgid "Tag checker (MapCSS based)"
 msgstr "Tag kontrol (MapCSS baseret)"
 
@@ -4087,7 +4106,7 @@ msgstr ""
 "\"name:*\" attributter, f.eks Italia - Italien - Italy."
 
 msgid "Missing name:*={0}. Add tag with correct language key."
-msgstr ""
+msgstr "Manglende name:*={0}. Tilføj tag med korrekt sprog nøgle."
 
 msgid "A name is missing, even though name:* exists."
 msgstr "Et navn mangler, selvom name:* eksisterer."
@@ -4179,6 +4198,7 @@ msgstr "Kontrollerer for fejl i relationer"
 msgid ""
 "Route scheme is unspecified. Add {0} ({1}=public_transport; {2}=legacy)"
 msgstr ""
+"Ruteskema er uspecificeret. Tilføj {0} ({1}=offentlig transport; {2}=gammel)"
 
 msgid "Relation type is unknown"
 msgstr "Relationstypen er ukendt"
@@ -4187,11 +4207,12 @@ msgid "Relation is empty"
 msgstr "Relationen er tom"
 
 msgid "Role member does not match expression {0} in template {1}"
-msgstr ""
+msgstr "Rolle medlem matcher ikke udtryk {0} i skabelon {1}"
 
 msgid ""
 "Role member type {0} does not match accepted list of {1} in template {2}"
 msgstr ""
+"Rolle medlem type {0} matcher ikke accepteret liste af {1} i skabelon {2}"
 
 msgid "<empty>"
 msgstr "<tom>"
@@ -4200,7 +4221,7 @@ msgid "Role {0} unknown in templates {1}"
 msgstr "Rolle {0} ukendt i skabeloner {1}"
 
 msgid "Empty role type found when expecting one of {0}"
-msgstr ""
+msgstr "Tom rolletype fundet, men forventede en af {0}"
 
 msgid "Role {0} missing"
 msgstr "Rolle {0} mangler"
@@ -4853,6 +4874,22 @@ msgstr[0] ""
 msgstr[1] ""
 "JOSM er i offline tilstand. Disse ressourcer vil ikke være tilgængelige: {0}"
 
+msgid ""
+"Detected useable IPv6 network, prefering IPv6 over IPv4 after next restart."
+msgstr ""
+"Fandt brugbart IPv6-netværk, foretrækker IPv6 fremfor IPv4 efter næste "
+"genstart."
+
+msgid "Detected useable IPv6 network, prefering IPv6 over IPv4."
+msgstr "Fandt brugbart IPv6-netværk, foretrækker IPv6 fremfor IPv4."
+
+msgid ""
+"Detected no useable IPv6 network, prefering IPv4 over IPv6 after next "
+"restart."
+msgstr ""
+"Fandt intet brugbart IPv6-netværk, foretrækker IPv4 fremfor IPv6 efter næste "
+"genstart."
+
 msgid "Unsaved osm data"
 msgstr "Ugemt OSM-data"
 
@@ -6497,10 +6534,10 @@ msgid "No"
 msgstr "Nej"
 
 msgid "Style settings"
-msgstr ""
+msgstr "Stil indstillinger"
 
 msgid "Customize the style"
-msgstr ""
+msgstr "Tilpas stil"
 
 msgid "List of notes"
 msgstr "Liste over noter"
@@ -6672,16 +6709,6 @@ msgstr "starter en browser med information om brugeren"
 msgid "Only launching info browsers for the first {0} of {1} selected users"
 msgstr "Starter kun info-browsere for de første {0} af {1} valgte brugere"
 
-msgid ""
-"<html>Failed to create an URL because the encoding ''{0}''<br>was missing on "
-"this system.</html>"
-msgstr ""
-"<html>Kunne ikke oprette en URL fordi kodningen \"{0}\"<br>manglede på dette "
-"system.</html>"
-
-msgid "Missing encoding"
-msgstr "Manglende kodning"
-
 msgid "Author"
 msgstr "Forfatter"
 
@@ -11138,6 +11165,8 @@ msgid ""
 "Display keys which have been deemed uninteresting to the point that they can "
 "be silently removed."
 msgstr ""
+"Vis nøgler, der er anses for uinteressante på en sådan måde, at de kan "
+"fjernes uden besked."
 
 msgid "Options that affect drawing performance"
 msgstr "Indstillinger der påvirker tegne-ydelsen"
@@ -11589,6 +11618,9 @@ msgstr "Tern-cache mappe: "
 msgid "Maximum concurrent downloads: "
 msgstr "Højest antal samtidige downloads: "
 
+msgid "Maximum concurrent downloads per host: "
+msgstr "Højest antal samtidige downloads per host: "
+
 msgid "Maximum elements in disk cache: "
 msgstr "Højest antal elementer i disk cache: "
 
@@ -11700,9 +11732,6 @@ msgstr ""
 msgid "Warning: illegal format of entry in style list ''{0}''. Got ''{1}''"
 msgstr "Advarsel: Ulovligt format for linje i stilliste ''{0}''. Fik ''{1}''"
 
-msgid "JOSM default (XML; old version)"
-msgstr "JOSM standard (XML; gammel version)"
-
 msgid "JOSM default (MapCSS)"
 msgstr "JOSM standard (MapCSS)"
 
@@ -12716,10 +12745,10 @@ msgid "Preset group {0}"
 msgstr "Prædefinitionsgruppe {0}"
 
 msgid "Reference {0} is being used before it was defined"
-msgstr ""
+msgstr "Henvisning {0} bliver brugt før den blev defineret"
 
 msgid "Roles cannot appear more than once"
-msgstr "Roller kan ikke optræde mere end én gang"
+msgstr "Roller kan ikke optræde mere end en gang"
 
 msgid "Preset role element without parent"
 msgstr "Prædefineret rolleelement uden forælder"
@@ -12963,7 +12992,7 @@ msgid "Unsupported parameter ''{0}'' in changeset query string"
 msgstr "Ikke understøttet parameter ''{0}'' i rettesætsforespørgselsstreng"
 
 msgid "Unexpected format for port number in preference ''{0}''. Got ''{1}''."
-msgstr ""
+msgstr "Uventet format for portnummer i indstilling ''{0}''. Fik ''{1}''."
 
 msgid "The proxy will not be used."
 msgstr "Proxy vil ikke blive brugt."
@@ -12975,14 +13004,17 @@ msgid ""
 "Unexpected value for preference ''{0}'' found. Got ''{1}''. Will use no "
 "proxy."
 msgstr ""
+"Uventet værdi for indstilling ''{0}'' fundet. Fik ''{1}''. Vil ikke bruge "
+"proxy."
 
 msgid ""
 "Unexpected parameters for HTTP proxy. Got host ''{0}'' and port ''{1}''."
-msgstr ""
+msgstr "Uventede parametre for HTTP-proxy. Fik host ''{0}'' og port ''{1}''."
 
 msgid ""
 "Unexpected parameters for SOCKS proxy. Got host ''{0}'' and port ''{1}''."
 msgstr ""
+"Uventede parametre for SOCKS-proxy. Fik host ''{0}'' og port ''{1}''."
 
 msgid ""
 "Connection to proxy ''{0}'' for URI ''{1}'' failed. Exception was: {2}"
@@ -12993,6 +13025,9 @@ msgid ""
 "property ''java.net.useSystemProxies'' was missing at startup time.  Will "
 "not use a proxy."
 msgstr ""
+"JVM er ikke konfigureret til proxy-opslag fra systemindstillingerne. "
+"Egenskaben ''java.net.useSystemProxies'' manglede ved starttidspunkt. Vil "
+"ikke bruge en proxy."
 
 msgid "Parsing response from server..."
 msgstr "Fortolker svar fra server..."
@@ -13029,7 +13064,7 @@ msgstr ""
 "spor."
 
 msgid "GPS track description"
-msgstr "beskrivelse af gps-spor"
+msgstr "Beskrivelse af gps-spor"
 
 msgid "Add author information"
 msgstr "Angiv forfatter"
@@ -13110,7 +13145,7 @@ msgid "No image files found."
 msgstr "Ingen billedfiler fundet."
 
 msgid "get number of unread messages"
-msgstr ""
+msgstr "få antallet af ulæste beskeder"
 
 msgid "You have {0} unread message."
 msgid_plural "You have {0} unread messages."
@@ -13121,10 +13156,10 @@ msgid "Click here to see your inbox."
 msgstr "Klik her for at se din indbakke."
 
 msgid "Message notifier"
-msgstr ""
+msgstr "Besked meddelse"
 
 msgid "{0} not available (offline mode)"
-msgstr ""
+msgstr "{0} er ikke tilgængelig (offline-tilstand)"
 
 msgid ""
 "No primitive with id {0} in local dataset. Cannot infer primitive type."
@@ -13187,10 +13222,10 @@ msgid "Zero coordinates: {0}"
 msgstr "Nul-koordinater: {0}"
 
 msgid "NMEA import success:"
-msgstr ""
+msgstr "NMEA import succes:"
 
 msgid "NMEA import failure!"
-msgstr "Fejl ved NMEAimport!"
+msgstr "Fejl ved NMEA import!"
 
 msgid "Note Files"
 msgstr "Notefiler"
@@ -13199,13 +13234,13 @@ msgid "OSM API"
 msgstr "OSM API"
 
 msgid "JOSM website"
-msgstr ""
+msgstr "JOSM websted"
 
 msgid "Unable to access ''{0}'': {1} not available (offline mode)"
-msgstr ""
+msgstr "Kan ikke få adgang ''{0}'': {1} ikke tilgængelig (offline tilstand)"
 
 msgid "Unable to initialize OSM API."
-msgstr ""
+msgstr "Kan ikke initialisere OSM API."
 
 msgid "This version of JOSM is incompatible with the configured server."
 msgstr ""
@@ -13280,9 +13315,6 @@ msgstr "Upload af note fejlede"
 msgid "Error parsing note response from server"
 msgstr "Fejl under fortolkning af notesvar fra serveren"
 
-msgid "Error encoding string: {0}"
-msgstr "Fejlkodningsstreng: {0}"
-
 msgid "(Code={0})"
 msgstr "(Kode={0})"
 
@@ -13294,11 +13326,12 @@ msgstr "OSM serverfiler bzip2-komprimeret"
 
 msgid "Prolog of OsmChange document already written. Please write only once."
 msgstr ""
-"Indledning til OsmChange dokumentet er allerede skrevet. Skriv venligst kun "
-"en gang."
+"Indledning til OsmChange dokumentet er allerede skrevet. Skriv den kun en "
+"gang."
 
 msgid "Prolog of OsmChange document not written yet. Please write first."
 msgstr ""
+"Indledning til OsmChange dokument ikke skrevet endnu. Skriv den først."
 
 msgid "OsmChange File"
 msgstr "OsmChange fil"
@@ -13319,6 +13352,8 @@ msgid ""
 "Unsupported start element ''{0}'' in changeset content at position "
 "({1},{2}). Skipping."
 msgstr ""
+"Ikke understøttet startelement ''{0}'' i rettesæt indhold i position ({1}, "
+"{2}). Springer over."
 
 msgid ""
 "Illegal document structure. Found node, way, or relation outside of "
@@ -13331,6 +13366,8 @@ msgid ""
 "Unsupported end element ''{0}'' in changeset content at position ({1},{2}). "
 "Skipping."
 msgstr ""
+"Ikke understøttet slutelement ''{0}'' i rettesæt indhold i position ({1}, "
+"{2}). Springer over."
 
 msgid "Parsing changeset content ..."
 msgstr "Fortolker indhold af rettesæt ..."
@@ -13359,7 +13396,7 @@ msgstr ""
 "Kunne ikke signere en HTTP forbindelse med en OAuth Bekræftelses header"
 
 msgid "Unexpected value for preference ''{0}''. Got ''{1}''."
-msgstr ""
+msgstr "Uventet værdi for indstilling ''{0}''. Fik ''{1}''."
 
 msgid "<html>An error occurred while saving.<br>Error is:<br>{0}</html>"
 msgstr ""
@@ -13440,7 +13477,7 @@ msgid "Undefined element ''{0}'' found in input stream. Skipping."
 msgstr "Udefineret element \"{0}\" fundet i inputstrømmen. Springer over."
 
 msgid "Illegal object with ID=0."
-msgstr "Ugyldigt objekt med id=0"
+msgstr "Ugyldigt objekt med ID=0"
 
 msgid ""
 "Illegal value for attribute ''version'' on OSM primitive with ID {0}. Got "
@@ -13452,6 +13489,8 @@ msgid ""
 "Normalizing value of attribute ''version'' of element {0} to {2}, API "
 "version is ''{3}''. Got {1}."
 msgstr ""
+"Normaliser værdi for attribut ''version'' af elementet {0} til {2}, API "
+"version er ''{3}''. Fik {1}."
 
 msgid "Unknown or unsupported API version. Got {0}."
 msgstr "Ukendt eller ikke understøttet API version. Fik {0}."
@@ -13476,7 +13515,7 @@ msgid "Illegal long value for attribute ''{0}''. Got ''{1}''."
 msgstr "Ulovlig long værdi af attribut ''{0}''. Fik ''{1}''."
 
 msgid "{0} bytes have been read"
-msgstr ""
+msgstr "{0} bytes er blevet læst"
 
 msgid "Prepare OSM data..."
 msgstr "Forbereder OSM-data..."
@@ -13584,7 +13623,7 @@ msgid "Unexpected id 0 for osm primitive found"
 msgstr "Uventet id 0 fundet for osm primitiv"
 
 msgid "OSM Server Files zip compressed"
-msgstr ""
+msgstr "OSM serverfiler zip-komprimeret"
 
 msgid "WMS Files (*.wms)"
 msgstr "WMS Filer (*.wms)"
@@ -13661,26 +13700,26 @@ msgstr "Opret nye objekter"
 msgid "Read protocol version"
 msgstr "Læse protokolversionen"
 
-msgid "Cannot start remotecontrol server on port {0}: {1}"
-msgstr "Kan ikke starte fjernstyringsserver på port {0}: {1}"
+msgid "Cannot start IPv4 remotecontrol server on port {0}: {1}"
+msgstr "Kan ikke starte IPv4 fjernstyringsserver på port {0}: {1}"
 
-msgid "RemoteControl::Accepting connections on {0}:{1}"
-msgstr "Fjernstyring::Accepter forbindelser på {0}:{1}"
+msgid "Cannot start IPv6 remotecontrol server on port {0}: {1}"
+msgstr "Kan ikke starte IPv6 fjernstyringsserver på port {0}: {1}"
 
-msgid "RemoteControl::Server stopped."
-msgstr "Fjernstyring::Server stoppet."
+msgid "RemoteControl::Accepting remote connections on {0}:{1}"
+msgstr "Fjernstyring::Accepterer fjernforbindelser på {0}:{1}"
 
-msgid "Cannot start remotecontrol https server on port {0}: {1}"
-msgstr "Kan ikke starte https-fjernstyringsserver på port {0}: {1}"
+msgid "RemoteControl::Server {0}:{1} stopped."
+msgstr "Fjernstyring::Server {0}:{1} stoppet."
 
-msgid "Unable to initialize Remote Control HTTPS Server"
-msgstr "Kan ikke initialisere https-fjernstyringsserver"
+msgid "Cannot start IPv4 remotecontrol https server on port {0}: {1}"
+msgstr "Kan ikke starte IPv4 fjernstyrings https server på port {0}:{1}"
 
-msgid "RemoteControl::Accepting secure connections on {0}:{1}"
-msgstr "Fjernstyring::Accepter sikre forbindelser på {0}:{1}"
+msgid "Cannot start IPv6 remotecontrol https server on port {0}: {1}"
+msgstr "Kan ikke starte IPv6 fjernstyrings https server på port {0}:{1}"
 
-msgid "RemoteControl::Server (https) stopped."
-msgstr "Fjernstyring::Server (https) stoppet."
+msgid "RemoteControl::Accepting secure remote connections on {0}:{1}"
+msgstr "Fjernstyring::Accepterer sikre fjernforbindelser på {0}:{1}"
 
 msgid "Remote Control has been asked to create a new node."
 msgstr "Fjernstyring er blevet spurgt om at oprette et nyt punkt."
@@ -13711,7 +13750,7 @@ msgid ""
 "Remote Control has been asked to load an imagery layer from the following "
 "URL:"
 msgstr ""
-"Fjernbetjeningen er blevet bedt om at hente et billedlag fra følgende URL:"
+"Fjernstyringen er blevet bedt om at hente et billedlag fra følgende URL:"
 
 msgid "Remote imagery"
 msgstr "Fjernstyring billedlag"
@@ -13808,6 +13847,7 @@ msgstr ""
 msgid ""
 "Version ''{0}'' of meta data for marker layer is not supported. Expected: 0.1"
 msgstr ""
+"Version ''{0}'' af metadata for markørlag understøttes ikke. Forventede: 0.1"
 
 msgid "Layer contains unsaved data - save to file."
 msgstr "Laget indeholder ej-gemte data - gem til fil."
@@ -14164,7 +14204,7 @@ msgstr ""
 "udvidelsen."
 
 msgid "Plugin information"
-msgstr "Information om udvidelser"
+msgstr "Udvidelsesinformation"
 
 msgid "no description available"
 msgstr "Ingen beskrivelse er tilgængelig"
@@ -14189,10 +14229,10 @@ msgid "Invalid plugin description ''{0}'' in plugin {1}"
 msgstr "Ugyldig udvidelsesbeskrivelse \"{0}\" i udvidelsen {1}"
 
 msgid "Invalid plugin main version ''{0}'' in plugin {1}"
-msgstr ""
+msgstr "Ugyldig udvidelseshovedversion ''{0}'' i udvidelse {1}"
 
 msgid "Missing plugin main version in plugin {0}"
-msgstr ""
+msgstr "Manglende udvidelseshovedversion i udvidelse {0}"
 
 msgid "More info..."
 msgstr "Yderligere info..."
@@ -14218,7 +14258,7 @@ msgstr "Behandler filen \"{0}\""
 
 msgid "Failed to scan file ''{0}'' for plugin information. Skipping."
 msgstr ""
-"Kunne ikke scanne fil ''{0}'' for udvidelse oplysninger. Springer over."
+"Kunne ikke scanne fil ''{0}'' for udvidelsesoplysninger. Springer over."
 
 msgid "Processing plugin files..."
 msgstr "Behandler udvidelsesfiler..."
@@ -14230,18 +14270,20 @@ msgid "Downloading plugin list from ''{0}''"
 msgstr "Downloader udvidelsesliste fra \"{0}\""
 
 msgid "Plugin list download error"
-msgstr ""
+msgstr "Udvidelsesliste download fejl"
 
 msgid "JOSM failed to download plugin list:"
-msgstr ""
+msgstr "JOSM kunne ikke download udvidelsesliste:"
 
 msgid "Details:"
-msgstr ""
+msgstr "Detaljer:"
 
 msgid ""
 "Failed to create plugin directory ''{0}''. Cannot cache plugin list from "
 "plugin site ''{1}''."
 msgstr ""
+"Kunne ikke oprette udvidelsesmappe ''{0}''. Kan ikke cache udvidelsesliste "
+"fra udvidelsesstedet ''{1}''."
 
 msgid "Writing plugin list to local cache ''{0}''"
 msgstr "Skriver udvidelsesliste til lokal cache \"{0}\""
@@ -14253,6 +14295,8 @@ msgid ""
 "Failed to parse plugin list document from site ''{0}''. Skipping site. "
 "Exception was: {1}"
 msgstr ""
+"Kunne ikke fortolke udvidelseslistedokument fra webstedet ''{0}''. Springer "
+"over webstedet. Undtagelsen var: {1}"
 
 msgid "Processing plugin list from site ''{0}''"
 msgstr "Behandler udvidelseslisten fra webstedet \"{0}\""
@@ -14614,11 +14658,17 @@ msgid ""
 "security reasons. This is most likely because you are running<br>in an "
 "applet and because you did not load your applet from ''{1}''."
 msgstr ""
+"<html>Kunne ikke åbne en forbindelse til den eksterne "
+"server<br>''{0}''<br>af sikkerhedsmæssige årsager. Dette er mest "
+"sandsynligt, fordi du kører<br>i en applet, og fordi du ikke indlæse din "
+"applet fra ''{1}''."
 
 msgid ""
 "<html>Failed to open a connection to the remote server<br>''{0}''.<br>Please "
 "check your internet connection."
 msgstr ""
+"<html>Kunne ikke åbne en forbindelse til den eksterne "
+"server<br>''{0}''.<br>Kontroller din internetforbindelse."
 
 msgid ""
 "<html>Failed to upload data to or download data from<br>''{0}''<br>due to a "
@@ -14632,9 +14682,11 @@ msgid ""
 "<html>Failed to download data. Its format is either unsupported, ill-formed, "
 "and/or inconsistent.<br><br>Details (untranslated): {0}</html>"
 msgstr ""
+"<html>Kunne ikke download data. Dens format er enten ikke understøttet, "
+"dårligt dannet, og/eller inkonsekvent.<br>Detaljer (uoversatte): {0}</html>"
 
 msgid "<html>Failed to download data.<br><br>Details: {0}</html>"
-msgstr ""
+msgstr "<html>Kunne ikke download data.<br><br>Detaljer: {0}</html>"
 
 msgid ""
 "<html>The OSM server<br>''{0}''<br>reported an internal server "
@@ -14674,6 +14726,9 @@ msgid ""
 "name ''{1}'' could not be resolved. <br>Please check the API URL in your "
 "preferences and your internet connection."
 msgstr ""
+"<html>Kunne ikke åbne en forbindelse til den eksterne "
+"server<br>''{0}''.<br>Host navn ''{1}'' kunne ikke findes. <br>Kontroller "
+"API URL i dine indstillinger og din internetforbindelse."
 
 msgid ""
 "<html>The server reports that an object is deleted.<br><strong>Uploading "
@@ -14701,11 +14756,13 @@ msgid "Failed to locate image ''{0}''"
 msgstr "Kunne ikke finde billedet \"{0}\""
 
 msgid "Failed to handle zip file ''{0}''. Exception was: {1}"
-msgstr ""
+msgstr "Kunne ikke håndtere zip-fil ''{0}''. Handlingen var: {1}"
 
 msgid ""
 "Failed to access directory ''{0}'' for security reasons. Exception was: {1}"
 msgstr ""
+"Kunne ikke få adgang til mappen ''{0}'' af sikkerhedsmæssige årsager. "
+"Handlingen var: {1}"
 
 msgid "{0}... [please type its number]"
 msgstr "{0}... [indtast venligst dens nummer]"
@@ -14771,21 +14828,26 @@ msgid ""
 "A previous version of JOSM has installed a custom certificate in order to "
 "provide HTTPS support for Remote Control:"
 msgstr ""
+"En tidligere version af JOSM har installeret et brugerdefineret certifikat "
+"for at give HTTPS understøttelse ved fjernstyring:"
 
 msgid ""
 "It appears it could be an important <b>security risk</b>.<br><br>You are now "
 "going to be prompted by Windows to remove this insecure certificate.<br>For "
 "your own safety, <b>please click Yes</b> in next dialog."
 msgstr ""
+"Det ser det kunne være en vigtig <b>sikkerhedsrisiko</b>.<br><br>Du vil nu "
+"af Windows blive bedt om at fjerne dette usikre certifikat.<br>For din egen "
+"sikkerhed, <b>klik på Ja</b> i næste dialogboks."
 
 msgid "Removing insecure certificate from {0} keystore: {1}"
-msgstr ""
+msgstr "Fjerner usikker certifikat fra {0} nøglelager: {1}"
 
 msgid "Unable to remove insecure certificate from keystore: {0}"
-msgstr ""
+msgstr "Kan ikke fjerne usikker certifikat fra nøglelager: {0}"
 
 msgid "JOSM localhost certificate found in {0} keystore: {1}"
-msgstr ""
+msgstr "JOSM localhost certifikat fundet i {0} nøglelager: {1}"
 
 msgid ""
 "Remote Control is configured to provide HTTPS support.<br>This requires to "
@@ -14795,15 +14857,22 @@ msgid ""
 "next dialog.<br><br>If unsure, you can also click No then disable HTTPS "
 "support in Remote Control preferences."
 msgstr ""
+"Fjernstyring er konfigureret til at yde HTTPS understøttelse.<br>Dette "
+"kræver at der tilføjes et brugerdefineret certifikat genereret af JOSM til "
+"Windows Root CA lager.<br>Du vil nu blive bedt om af Windows at bekræfte "
+"denne handling.<br>For at aktivere ordentlig HTTPS understøttelse, <b>skal "
+"du klikke på Ja</b> i næste dialogboks.<br>Hvis du er usikker, kan du også "
+"klikke på Nej og derefter deaktivere HTTPS understøttelse i fjernstyrings "
+"indstillinger."
 
 msgid "HTTPS support in Remote Control"
-msgstr ""
+msgstr "HTTPS understøttelse ved fjernstyring"
 
 msgid "Adding JOSM localhost certificate to {0} keystore"
-msgstr ""
+msgstr "Tilføjer JOSM localhost certifikat til {0} nøglelager"
 
 msgid "Silent shortcut conflict: ''{0}'' moved by ''{1}'' to ''{2}''."
-msgstr ""
+msgstr "Tavs genvejskonflikt: ''{0}'' flyttet fra ''{1}'' til ''{2}''."
 
 msgid "There was {0} tag found in the buffer, it is suspicious!"
 msgid_plural "There were {0} tags found in the buffer, it is suspicious!"
@@ -14856,23 +14925,29 @@ msgid ""
 "Preference with key ''{0}'' does not include ''{1}''. Cannot restore window "
 "geometry from preferences."
 msgstr ""
+"Indstilling med nøgle ''{0}'' omfatter ikke ''{1}''. Kan ikke genskabe "
+"vinduesgeometri ud fra indstillinger."
 
 msgid ""
 "Preference with key ''{0}'' does not provide an int value for ''{1}''. Got "
 "{2}. Cannot restore window geometry from preferences."
 msgstr ""
 "Indstilling med nøgle ''{0}'' giver ikke en heltalsværdi for ''{1}''. Fik "
-"{2}. Kan ikke genskabe vinduesgeometri udfra indstillinger."
+"{2}. Kan ikke genskabe vinduesgeometri ud fra indstillinger."
 
 msgid ""
 "Failed to parse field ''{1}'' in preference with key ''{0}''. Exception was: "
 "{2}. Cannot restore window geometry from preferences."
 msgstr ""
+"Kunne ikke parse feltet ''{1}'' i indstilling med nøgle ''{0}''. Handlingen "
+"var: {2}. Kan ikke genskabe vinduesgeometri ud fra indstillinger."
 
 msgid ""
 "Preference with key ''{0}'' does not exist. Cannot restore window geometry "
 "from preferences."
 msgstr ""
+"Indstilling med nøgle ''{0}'' findes ikke. Kan ikke genskabe vinduesgeometri "
+"ud fra indstillinger."
 
 msgid "Ignoring malformed geometry: {0}"
 msgstr "Ignorerer misdannet geometri: {0}"
@@ -14884,21 +14959,29 @@ msgid ""
 "Error in search expression on position {0} - right side of or(|) expression "
 "must return set of primitives"
 msgstr ""
+"Fejl i søgeudtryk på position {0} - højre side af eller(|) udtryk skal "
+"returnere sæt af primitiver"
 
 msgid ""
 "Error in search expression on position {0} - left side of or(|) expression "
 "must return set of primitives"
 msgstr ""
+"Fejl i søgeudtryk på position {0} - venstre side af eller(|) udtryk skal "
+"returnere sæt af primitiver"
 
 msgid ""
 "Error in search expression on position {0} - not(-) cannot be used in this "
 "context"
 msgstr ""
+"Fejl i søgeudtryk på position {0} - ikke(-), kan ikke anvendes i denne "
+"sammenhæng"
 
 msgid ""
 "Error in search expression on position {0} - expression must return "
 "different then current primitive"
 msgstr ""
+"Fejl i søgeudtryk på position {0} - udtryk skal returnere forskellig fra "
+"nuværende primitive"
 
 msgid "Unexpected token ({0}) on position {1}"
 msgstr "Uventet udtryk ({0}) i position {1}"
@@ -15001,7 +15084,7 @@ msgstr "netværk"
 
 msgctxt "Relation type"
 msgid "public_transport"
-msgstr "offentlig_transport"
+msgstr "offentlig transport"
 
 msgctxt "Relation type"
 msgid "restriction"
@@ -15013,7 +15096,7 @@ msgstr "rute"
 
 msgctxt "Relation type"
 msgid "route_master"
-msgstr ""
+msgstr "rute master"
 
 msgctxt "Relation type"
 msgid "site"
@@ -15558,9 +15641,6 @@ msgstr "NRW-Atlas: Topographische Karte 1:10000"
 msgid "Metropole Ruhr: Luftbilder (10 cm)"
 msgstr "Metropole Ruhr: Luftbilder (10 cm)"
 
-msgid "SN Luftbilder, Straßennetz, Administrative Grenzen"
-msgstr "SN Luftbilder, Straßennetz, Administrative Grenzen"
-
 msgid "Drone Imagery (Haiti)"
 msgstr "Drone Imagery (Haiti)"
 
@@ -16186,17 +16266,25 @@ msgid ""
 "Group common Address Interpolation inputs in a single dialog, as well as an "
 "option to automatically generate individual house number nodes from a Way."
 msgstr ""
+"Saml fælles adresse interpolation inputs i en enkelt dialog, såvel som en "
+"mulighed for automatisk at generere individuelle hus nummer punkter fra en "
+"vej."
 
 msgid ""
 "Makes a pair of selected way segments parallel by rotating one of them "
 "around a chosen pivot."
 msgstr ""
+"Gør et par udvalgte vej segmenter parallelle ved at dreje en af dem omkring "
+"et valgt omdrejningspunkt."
 
 msgid ""
 "Allows selection of areas in an layer and automatic creation of a way as "
 "polygon. Built to ease mapping of building from background layers. Optimized "
 "for basemap.at."
 msgstr ""
+"Tillader udvælgelse af områder i et lag og automatisk oprettelse af en vej "
+"som polygon. Lavet for at lette kortlægning af bygninger fra baggrunds lag. "
+"Optimeret til basemap.at."
 
 msgid "Tools for drawing buildings."
 msgstr "Værktøj til at tegne bygninger."
@@ -16209,6 +16297,8 @@ msgid ""
 "Overlays the canvec tile grid on the map and prints URL''s to the .zip "
 "files. Future goals: allow auto-downloading and loading of canvec .osm files"
 msgstr ""
+"Dækker canvec tern gitter på kortet og printer URL''er til .zip filerne. "
+"Fremtidige mål: tillade auto-download og læsning af canvec .osm filer"
 
 msgid ""
 "Allows the user to create different color schemes and to switch between "
@@ -16216,19 +16306,27 @@ msgid ""
 "white background with matching colors for better visibility in bright "
 "sunlight. See dialog in display preferences."
 msgstr ""
+"Tillader brugeren at oprette forskellige farveskemaer, og at skifte mellem "
+"dem. Bare ændre farverne og skab et nyt skema. Bruges til at skifte til en "
+"hvid baggrund med matchende farver for bedre synlighed i skarpt sollys. Se "
+"dialogen i skærmindstillinger."
 
 msgid ""
 "Imports proprietary CSV files of the Columbus/Visiontac V-900 GPS logger "
 "into a GPX layer."
 msgstr ""
+"Import af proprietære CSV-filer fra Columbus/Visiontac V-900 GPS logger ind "
+"i et GPX-lag."
 
 msgid ""
 "Implements a command line and enables to create your commands. See link for "
 "standard commands (arc, circle etc.)"
 msgstr ""
+"Implementerer en kommandolinje og gør det muligt at oprette dine egne "
+"kommandoer. Se link til standard kommandoer (bue, cirkel osv.)"
 
 msgid "(Warning: Experimental!) Tool for conflating (merging) data."
-msgstr ""
+msgstr "(Advarsel: Experimental!) Værktøj til at sammenblande (flette) data."
 
 msgid "Create a grid of ways."
 msgstr "Opret et net af veje."
@@ -16243,6 +16341,8 @@ msgid ""
 "Allows to import various file formats into JOSM directly. Currently "
 "supported: TangoGPS, Garmin Trainings Center TCX."
 msgstr ""
+"Gør det muligt at importere forskellige filformater i JOSM direkte. "
+"Understøttet i øjeblikket: TangoGPS, Garmin Trainings Center TCX."
 
 msgid "Download your GPX tracks from openstreetmap.org"
 msgstr "Download dine GPX spor fra openstreetmap.org"
@@ -16277,11 +16377,13 @@ msgid "Fast drawing ways by mouse"
 msgstr "Hurtig tegning af veje med musen"
 
 msgid "Finds and fixes invalid street addresses in a comfortable way."
-msgstr "Finder og fikser ugyldige gade-adresse på en nem måde."
+msgstr "Finder og retter ugyldige adresser på en nem måde."
 
 msgid ""
 "Talk with users editing the map nearby, be notified when someone comes close."
 msgstr ""
+"Tal med brugere der rediger kortet i nærheden, få besked når nogen kommer "
+"tæt på."
 
 msgid ""
 "Provides parts of the GeoTools library for other JOSM plugins. Not meant to "
@@ -16299,12 +16401,14 @@ msgstr ""
 msgid ""
 "Analyse a set of GPS points to obtain its centre and direction of spread."
 msgstr ""
+"Analysere et sæt af GPS punkter for at finde dets centrum og retning af "
+"spredning."
 
 msgid "Allows to filter out unnecessary GPS tracks"
 msgstr "Giver mulighed for at filtrere unødvendige GPS spor fra"
 
 msgid "Visualizes routing information as a routing graph."
-msgstr ""
+msgstr "Visualiserer ruteinformation som en rutegraf."
 
 msgid "Simple tool to tag house numbers."
 msgstr "Simpelt værktøj til at tagge husnumre."
@@ -16450,6 +16554,11 @@ msgstr ""
 "Henter fejl fra Osm Inspector og viser dem i den aktuelle JOSM omkrandsende "
 "boks"
 
+msgid ""
+"Recommends categories/tags on newly created OSM entities by analysing "
+"spatial entities into training features and using SVM classification"
+msgstr ""
+
 msgid "Import/export OSM data in PBF format"
 msgstr "Import/export OSM data i PBF format"
 
@@ -16552,6 +16661,8 @@ msgid ""
 "Launch browser to a Web resource about a selected object having known tags, "
 "such as Wikipedia"
 msgstr ""
+"Start browser med en web ressource ud fra et valgt objekt der har kendte "
+"tags, såsom Wikipedia"
 
 msgid "Provides a dialog for editing tags in a tabular grid."
 msgstr "Stiller en dialog til redigering af tags i tabelform til rådighed"
@@ -17741,7 +17852,7 @@ msgid "All vehicles"
 msgstr "Alle køretøjer"
 
 msgid "use_sidepath"
-msgstr ""
+msgstr "brug cykelsti"
 
 msgid "Motor vehicles"
 msgstr "Motorkøretøjer"
@@ -18270,7 +18381,7 @@ msgid "split_rail"
 msgstr "zigzag hegn"
 
 msgid "wire"
-msgstr ""
+msgstr "kabel"
 
 msgid "Guard Rail"
 msgstr "Autoværn"
@@ -18418,28 +18529,28 @@ msgid "Covered Reservoir"
 msgstr "Overdækket reservoir"
 
 msgid "A body of standing water, such as a lake or pond."
-msgstr ""
+msgstr "Stillestående vand, såsom en sø eller dam."
 
 msgid "Water Body"
-msgstr ""
+msgstr "Vandområde"
 
 msgid "canal"
 msgstr "kanal"
 
 msgid "lake"
-msgstr ""
+msgstr "sø"
 
 msgid "lagoon"
-msgstr ""
+msgstr "lagune"
 
 msgid "oxbow"
-msgstr ""
+msgstr "hesteskoformet sø"
 
 msgid "pond"
-msgstr ""
+msgstr "dam"
 
 msgid "reservoir"
-msgstr ""
+msgstr "reservoir"
 
 msgid "river"
 msgstr "flod"
@@ -18557,7 +18668,7 @@ msgid "Marina"
 msgstr "Lystbådehavn"
 
 msgid "Dump Station"
-msgstr ""
+msgstr "Tømmested"
 
 msgid "public"
 msgstr "offentlig"
@@ -18590,22 +18701,22 @@ msgid "Rail"
 msgstr "Spor"
 
 msgid "main"
-msgstr ""
+msgstr "hovedspor"
 
 msgid "branch"
-msgstr "gren"
+msgstr "sidespor"
 
 msgid "industrial"
-msgstr "industri"
+msgstr "industrispor"
 
 msgid "military"
-msgstr "militær"
+msgstr "militærspor"
 
 msgid "tourism"
-msgstr "turisme"
+msgstr "turismespor"
 
 msgid "freight"
-msgstr "fragt"
+msgstr "fragtspor"
 
 msgid "Narrow Gauge Rail"
 msgstr "Smalsporet bane"
@@ -19074,7 +19185,7 @@ msgid "Public Bicycle Repair Station"
 msgstr "Offentlig cykelreparationssted"
 
 msgid "Chain tool"
-msgstr ""
+msgstr "Kædeværktøj"
 
 msgid "Public Transport"
 msgstr "Offentlig transport"
@@ -19169,7 +19280,7 @@ msgid "platform (entry only)"
 msgstr "platform (kun indgang)"
 
 msgid "Route Master"
-msgstr ""
+msgstr "Rute master"
 
 msgid "route variant/direction (at least 2)"
 msgstr "rute variant/retning (mindst 2)"
@@ -20199,8 +20310,11 @@ msgstr "Toilet tømmested"
 msgid "Suction pumpout"
 msgstr "Udsugningspumpe"
 
-msgid "Gravity dump station"
-msgstr "Tyngdekraft tømmested"
+msgid "Gravity drain for hose"
+msgstr ""
+
+msgid "Casette or Elsan Disposal"
+msgstr ""
 
 msgid "Operation times"
 msgstr "Betjeningstider"
@@ -20703,6 +20817,10 @@ msgid "shed"
 msgstr "skur"
 
 msgctxt "building"
+msgid "storage_tank"
+msgstr "lagertank"
+
+msgctxt "building"
 msgid "cowshed"
 msgstr "kostald"
 
@@ -20815,6 +20933,41 @@ msgstr "Vindmølle (gammeldags)"
 msgid "Gasometer"
 msgstr "Gasbeholder"
 
+msgid "Storage Tank"
+msgstr "Lagertank"
+
+msgctxt "content"
+msgid "fuel"
+msgstr "brændstof"
+
+msgctxt "content"
+msgid "manure"
+msgstr "gødning"
+
+msgctxt "content"
+msgid "oil"
+msgstr "olie"
+
+msgctxt "content"
+msgid "sewage"
+msgstr "spildevand"
+
+msgctxt "content"
+msgid "silage"
+msgstr "ensilage"
+
+msgctxt "content"
+msgid "slurry"
+msgstr "gylle"
+
+msgctxt "content"
+msgid "water"
+msgstr "vand"
+
+msgctxt "content"
+msgid "wine"
+msgstr "vin"
+
 msgid "Bunker Silo"
 msgstr "Plansilo"
 
@@ -24303,6 +24456,33 @@ msgstr "Åben NanoLog fil..."
 msgid "Could not read NanoLog file:"
 msgstr "Kunne ikke læse NanoLog fil:"
 
+msgid "OSM Recommendation"
+msgstr ""
+
+msgid "Recommend categories to your newly created instances."
+msgstr ""
+
+msgid "Training process configuration"
+msgstr ""
+
+msgid "Model Settings"
+msgstr ""
+
+msgid "Select objects or create new objects and get recommendation."
+msgstr ""
+
+msgid "Add Recommendation"
+msgstr ""
+
+msgid "Add a recommended key/value pair to your object"
+msgstr ""
+
+msgid "Train a Model"
+msgstr ""
+
+msgid "Start the training engine!"
+msgstr ""
+
 msgid "Edit opening hours"
 msgstr "Rediger åbningstider"
 
@@ -24831,7 +25011,7 @@ msgid "Tolerance Angle"
 msgstr ""
 
 msgid "Plugin Settings"
-msgstr ""
+msgstr "Udvidelsesindstillinger"
 
 msgid "Show Address Dialog after mapping an area"
 msgstr ""
@@ -29379,7 +29559,7 @@ msgid "Tracer2Server hasn''t found anything."
 msgstr ""
 
 msgid "Tracer2Server has detected an error."
-msgstr ""
+msgstr "Tracer2Server har fundet en fejl."
 
 msgid "GPG"
 msgstr "GPG"
@@ -29511,7 +29691,7 @@ msgstr ""
 "{0}"
 
 msgid "Sorry, there are no Signatures for the selected Attribute."
-msgstr "Beklager, der er ikke nogen signaturer for den valgte attribut."
+msgstr "Beklager, der er ingen signaturer for den valgte attribut."
 
 msgid ""
 "Selected key value pair was:\n"
@@ -29519,7 +29699,7 @@ msgid ""
 msgstr ""
 
 msgid "Sorry, there are no Signatures for the selected Segment."
-msgstr "Beklager, der er ikke nogen signaturer for det valgte sekment."
+msgstr "Beklager, der er ingen signaturer for det valgte segment."
 
 msgid "Selected WaySegment was:"
 msgstr ""
@@ -29764,10 +29944,10 @@ msgid "Move the selected relation members up by one position"
 msgstr "Flyt de valgte relationsmedlemmer en position op"
 
 msgid "Edit basic attributes of a turn restriction"
-msgstr "Ret basale attributter i en svingbegrænsning"
+msgstr "Rediger basale attributter i en svingbegrænsning"
 
 msgid "Edit the raw tags and members of this turn restriction"
-msgstr "Ret de rå tags og medlemmer i denne svingbegrænsning"
+msgstr "Rediger de rå tags og medlemmer i denne svingbegrænsning"
 
 msgid "Errors/Warnings"
 msgstr "Fejl/Advarsler"
@@ -29779,10 +29959,10 @@ msgid "Create a new turn restriction in layer ''{0}''"
 msgstr "Opret en ny svingbegrænsning i lag ''{0}''"
 
 msgid "Edit a new turn restriction in layer ''{0}''"
-msgstr "Ret en ny svingbegrænsning i lag ''{0}''"
+msgstr "Rediger en ny svingbegrænsning i lag ''{0}''"
 
 msgid "Edit turn restriction ''{0}'' in layer ''{1}''"
-msgstr "Ret svingbegrænsning ''{0}'' i lag ''{1}''"
+msgstr "Rediger svingbegrænsning ''{0}'' i lag ''{1}''"
 
 msgid ""
 "There is still an unresolved error or warning identified for this turn "
@@ -29959,10 +30139,10 @@ msgid "Mopeds"
 msgstr "Knallerter"
 
 msgid "Use standard exceptions"
-msgstr "Brug standard handlinger"
+msgstr "Brug standard undtagelser"
 
 msgid "Use non-standard exceptions"
-msgstr "Brug ikke-standard handlinger"
+msgstr "Brug ikke standard undtagelser"
 
 msgid "Remove the currently selected vias"
 msgstr "Fjern de aktuelt valgte vias"
@@ -30057,9 +30237,13 @@ msgid ""
 "restriction. If enabled, one can edit them in the Basic editor too. If "
 "disabled, editing of via-objects is possible in the Advanced Editor only."
 msgstr ""
+"Den basale editor kan eventuelt vise listen over via-objekter til en "
+"svingbegrænsning. Hvis aktiveret, kan man rediger dem i den basale editor "
+"også. Hvis deaktiveret, redigering af via-objekter er kun mulig i den "
+"avanceret editor."
 
 msgid "Display and edit list of via-objects in the Basic Editor"
-msgstr ""
+msgstr "Vis og rediger liste af via-objekter i den basale editor"
 
 msgid "Road signs - Set A"
 msgstr "Vejskilte - Sæt A"
@@ -30068,12 +30252,14 @@ msgid "Road signs - Set B"
 msgstr "Vejskilte - Sæt B"
 
 msgid "Please select the set of road sign icons to be used in the plugin."
-msgstr "Vælg det sæt af vejskilte ikoner, der skal bruges i udvidelse."
+msgstr "Vælg det sæt af vejskilte ikoner, der skal bruges i udvidelsen."
 
 msgid ""
 "Warning: the preference with key ''{0}'' has an unsupported value ''{1}''. "
 "Assuming the default value ''set-a''."
 msgstr ""
+"Advarsel: indstillingen med nøgle ''{0}'' har en ikke understøttet værdi "
+"''{1}''. Bruger standardværdien ''sæt-a''."
 
 msgid ""
 "This turn restriction uses the way <span class=\"object-name\">{0}</span> "
@@ -30081,6 +30267,10 @@ msgid ""
 "turn restriction, the way with role <tt>from</tt> should be different from "
 "the way with role <tt>to</tt>, though."
 msgstr ""
+"Denne svingbegrænsning bruger vejen <span class= \"objekt-"
+"navn\">{0}</span>med rollen <tt>fra</tt> <strong>og</strong> med rollen "
+"<tt>til</tt >. Men i en svingbegrænsning skal vejen med rollen <tt>fra</tt> "
+"være forskellig fra vejen med rollen <tt>til</tt>."
 
 msgid "Delete ''from''"
 msgstr "Slet ''fra''"
@@ -30100,15 +30290,20 @@ msgstr "Ret i editor"
 msgid ""
 "Go to Basic Editor and manually choose members with roles ''from'' and ''to''"
 msgstr ""
+"Gå til basal editor og vælg medlemmer med rollerne ''fra'' and ''til'' "
+"manuelt"
 
 msgid ""
 "This turn restriction uses a non-standard restriction type <tt>{0}</tt> for "
 "the tag key <tt>restriction</tt>. It is recommended to use standard values "
 "only. Please select one in the Basic editor."
 msgstr ""
+"Denne svingbegrænsning bruger en ikke standard begrænsningstype <tt>{0}</tt> "
+"til tag nøglen <tt>begrænsning</tt>. Det anbefales kun at bruge "
+"standardværdier. Vælg en i den basale editor."
 
 msgid "Go to Basic Editor and manually choose a turn restriction type"
-msgstr ""
+msgstr "Gå til basal editor og vælg svingbegrænsningstype manuelt"
 
 msgid ""
 "The <strong>from</strong>-way <span class=\"object-name\">{0}</span> and the "
@@ -30117,31 +30312,39 @@ msgid ""
 "<strong>via</strong>-object.<br> It is recommended to set it as unique "
 "<strong>via</strong>-object."
 msgstr ""
+"<strong>fra</strong>-vejen <span class=\"objekt-navn\">{0}</span> og "
+"<strong>til</strong>-vejen <span class = \"objekt-navn\"> {1}</span> skærer "
+"hinanden i punkt <span class=\"objekt-navn\">{2}</span> men dette punkt er "
+"ikke et <strong>via</strong> -objekt.<br>Det er anbefales at sætte det som "
+"unik <strong>via</strong>-objekt."
 
 msgid "Set via-Object"
-msgstr ""
+msgstr "Sæt via-objekt"
 
 msgid ""
 "Replaces the currently configured via-objects with the node at the "
 "intersection"
 msgstr ""
+"Erstatter aktuelt konfigureret via-objekter med punktet i skæringspunktet"
 
 msgid "Go to Basic Editor and manually fix the list of via-objects"
-msgstr ""
+msgstr "Gå til basal editor og ret listen af via-objekter manuelt."
 
 msgid ""
 "A turn restriction must declare the type of restriction. Please select a "
 "type in the Basic Editor."
 msgstr ""
+"En svingbegrænsning skal erklære typen af begrænsning. Vælg en type i den "
+"basale editor."
 
 msgid "A way with role <tt>from</tt> is required in a turn restriction."
-msgstr ""
+msgstr "En vej med rollen <tt>fra</tt> er krævet i en svingbegrænsning."
 
 msgid "A way with role <tt>to</tt> is required in a turn restriction."
-msgstr ""
+msgstr "En vej med rollen <tt>til</tt> er krævet i en svingbegrænsning."
 
 msgid "Please go to the Basic editor and manually choose a way."
-msgstr ""
+msgstr "Gå til den basale editor og vælg en vej manuelt."
 
 msgid "Add in editor"
 msgstr "Tilføj i editor"
@@ -30156,44 +30359,55 @@ msgid ""
 "The two ways participating in the turn restriction <strong>aren''t "
 "connected.</strong>"
 msgstr ""
+"De to veje der er med i svingbegrænsningen <strong>er ikke "
+"forbundet.</strong>"
 
 msgid ""
 "Make sure you add one or more via objects (nodes or ways) to the turn "
 "restriction."
 msgstr ""
+"Sørg for at tilføje en eller flere via-objekter (punkter eller veje) til "
+"svingbegrænsningen."
 
 msgid "Go to the Advanced Editor and add via objects"
-msgstr ""
+msgstr "Gå til den avanceret editor og tilføj via-objekter"
 
 msgid ""
 "A turn restriction requires exactly one way with role <tt>from</tt>. This "
 "turn restriction has {0} ways in this role. Please remove {1} of them."
 msgstr ""
+"En svingbegrænsning kræver præcis en vej med rollen <tt>fra</tt>. Denne "
+"svingbegrænsning har {0} veje i denne rolle. Fjern {1} af dem."
 
 msgid ""
 "A turn restriction requires exactly one way with role <tt>to</tt>. This turn "
 "restriction has {0} ways in this role. Please remove {1} of them."
 msgstr ""
+"En svingbegrænsning kræver præcis en vej med rollen <tt>til</tt>. Denne "
+"svingbegrænsning har {0} veje i denne rolle. Fjern {1} af dem."
 
 msgid "Go to the Advanced Editor and remove the members"
-msgstr ""
+msgstr "Gå til den avanceret editor og fjern medlemmerne"
 
 msgid ""
 "The tag <tt>except</tt> has the non-standard value <tt>{0}</tt>. It is "
 "recommended to use standard values for <tt>except</tt> only."
 msgstr ""
+"Tag <tt>undtagen</tt> har en ikke standard værdi <tt>{0}</tt>. Det anbefales "
+"kun at bruge standard værdier for <tt>undtagen</tt>."
 
 msgid "Go to Basic Editor and select standard vehicle type based exceptions"
 msgstr ""
+"Gå til basal editor og vælg standard køretøjstype baserede undtagelser"
 
 msgid "The required tag <tt>{0}={1}</tt> is missing."
-msgstr ""
+msgstr "Det krævet tag <tt>{0}={1}</tt> mangler."
 
 msgid "Add missing tag"
-msgstr ""
+msgstr "Tilføj manglende tag"
 
 msgid "Add the missing tag {0}={1}"
-msgstr ""
+msgstr "Tilføj det manglende tag {0}={1}"
 
 msgid ""
 "The way <span class=\"object-name\">{0}</span> with role <tt>from</tt> and "
@@ -30201,12 +30415,19 @@ msgid ""
 "intersect at node <span class=\"object-name\">{2}</span>. <p> Both ways "
 "should be split at the intersecting node."
 msgstr ""
+"Vejen <span class=\"objekt-navn\">{0}</span> med rollen <tt>fra</tt> og "
+"vejen <span class=\"objekt-navn\">{1}</span> med rollen <tt>til</tt> skærer "
+"hinanden i punkt <span class=\"objekt-navn\">{2}</span>. <p> Begge veje bør "
+"opdeles ved det krydsende punkt."
 
 msgid ""
 "The way <span class=\"object-name\">{0}</span> with role <tt>{1}</tt> should "
 "be split at node <span class=\"object-name\">{2}</span> where it connects to "
 "way <span class=\"object-name\">{3}</span>."
 msgstr ""
+"Vejen <span class=\"objekt-navn\">{0}</span> med rollen <tt>{1}</tt> bør "
+"opdeles ved punkt <span class=\"objekt-navn\">{2}</span>, hvor den forbinder "
+"til vejen <span class=\"objekt-navn\">{3}</span>."
 
 msgid "Split now"
 msgstr "Opdel nu"
@@ -30218,20 +30439,24 @@ msgid ""
 "This turn restriction uses the node <span class=\"object-name\">{0}</span> "
 "as member with role <tt>{1}</tt>."
 msgstr ""
+"Denne svingbegrænsning bruger punktet <span class=\"objekt-navn\">{0}</span> "
+"som medlem med rollen <tt>{1}</tt>."
 
 msgid ""
 "This turn restriction uses the relation <span class=\"object-"
 "name\">{0}</span> as member with role <tt>{1}</tt>."
 msgstr ""
+"Denne svingbegrænsning bruger relationen <span class=\"objekt-"
+"navn\">{0}</span> som medlem med rollen <tt>{1}</tt>."
 
 msgid "A way is required instead."
-msgstr ""
+msgstr "En vej er krævet i stedet."
 
 msgid "Delete the member from the turn restriction"
-msgstr ""
+msgstr "Slet medlemmet fra svingbegrænsningen"
 
 msgid "Change to the Basic Editor and select a way"
-msgstr ""
+msgstr "Skift til den basale editor og vælg en vej"
 
 msgid "Undelete object..."
 msgstr ""
@@ -30988,6 +31213,3 @@ msgstr "Kør afsted"
 
 msgid "Drive a race car on this layer"
 msgstr "Kør en racerbil på dette lag"
-
-#~ msgid "Note comment background"
-#~ msgstr "Note kommentar baggrund"
diff --git a/i18n/po/de.po b/i18n/po/de.po
index fe8b501..2027bf3 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-04-27 03:33+0200\n"
-"PO-Revision-Date: 2015-04-24 11:33+0000\n"
-"Last-Translator: Ettore Atalan <atalanttore at googlemail.com>\n"
+"POT-Creation-Date: 2015-05-12 03:33+0200\n"
+"PO-Revision-Date: 2015-05-08 08:58+0000\n"
+"Last-Translator: Dirk Stöcker <launchpad at dstoecker.de>\n"
 "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-04-27 04:41+0000\n"
-"X-Generator: Launchpad (build 17430)\n"
+"X-Launchpad-Export-Date: 2015-05-12 04:41+0000\n"
+"X-Generator: Launchpad (build 17487)\n"
 "Language: de\n"
 "X-Poedit-SearchPath-0: .\n"
 "X-Poedit-Basepath: /home/simon/src/josm.all/i18n\n"
@@ -1629,6 +1629,9 @@ msgstr[0] ""
 msgstr[1] ""
 "Die betroffene Linie würde nach dem Abtrennen der Punkte verschwinden."
 
+msgid "Some irrelevant nodes have been removed from the selection"
+msgstr "Einige unbedeutende Knotenpunkte wurden aus der Auswahl entfernt"
+
 msgid "Undo"
 msgstr "Rückgängig"
 
@@ -3405,6 +3408,13 @@ msgstr "Ebene: {0}"
 msgid "Failed to persist preferences to ''{0}''"
 msgstr "Fehler beim Speichern der Voreinstellungen in ''{0}''"
 
+msgid ""
+"Try enabling IPv6 network, prefering IPv6 over IPv4 (only works on early "
+"startup)."
+msgstr ""
+"Versuche IPv6-Netzwerk zu aktivieren und IPv6 vor IPv4 zu bevorzugen "
+"(funktioniert nur direkt nach dem Programmstart)."
+
 msgid " (at line {0}, column {1})"
 msgstr " (Zeile {0}, Spalte {1})"
 
@@ -4097,6 +4107,16 @@ msgstr "Anzahl der spurabhängigen Werte in Forwärtsrichtung inkonsistent"
 msgid "Number of lane dependent values inconsistent in backward direction"
 msgstr "Anzahl der spurabhängigen Werte in Rückwärtsrichtung inkonsistent"
 
+msgid "Long segments"
+msgstr "Lange Segmente"
+
+msgid "This tests for long way segments, which are usually errors."
+msgstr ""
+"Tested auf lange Linienabschnitte, welche i.d.R. einen Fahler darstellen."
+
+msgid "Very long segment of {0} kilometers"
+msgstr "Sehr lange Segmente mit {0} Kilometer"
+
 msgid "Tag checker (MapCSS based)"
 msgstr "Eigenschaftsprüfer (basierend auf MapCSS)"
 
@@ -4984,6 +5004,22 @@ msgstr[1] ""
 "JOSM läuft im Offline-Modus. Diese Ressourcen werden nicht verfügbar sein: "
 "{0}"
 
+msgid ""
+"Detected useable IPv6 network, prefering IPv6 over IPv4 after next restart."
+msgstr ""
+"Nutzbares IPv6-Netzwerk erkannt, bevorzuge nach dem nächsten Neustart IPv6 "
+"vor IPv4."
+
+msgid "Detected useable IPv6 network, prefering IPv6 over IPv4."
+msgstr "Nutzbares IPv6-Netzwerk erkannt, bevorzuge IPv6 vor IPv4."
+
+msgid ""
+"Detected no useable IPv6 network, prefering IPv4 over IPv6 after next "
+"restart."
+msgstr ""
+"Kein nutzbares IPv6-Netzwerk erkannt, bevorzuge nach dem nächsten Neustart "
+"Pv4 vor IPv4."
+
 msgid "Unsaved osm data"
 msgstr "Nicht gespeicherte osm-Daten"
 
@@ -6828,16 +6864,6 @@ msgstr ""
 "Die Informationsseiten werden nur für die ersten {0} der {1} ausgewählten "
 "Nutzer im Browser geöffnet"
 
-msgid ""
-"<html>Failed to create an URL because the encoding ''{0}''<br>was missing on "
-"this system.</html>"
-msgstr ""
-"<html>URL konnte nicht erzeugt werden, weil die Zeichenkodierung "
-"''{0}''<br>auf diesem Computer nicht vorhanden ist.</html>"
-
-msgid "Missing encoding"
-msgstr "Fehlende Kodierung"
-
 msgid "Author"
 msgstr "Autor"
 
@@ -10911,7 +10937,7 @@ msgid "Would you like to restart now?"
 msgstr "Möchten Sie jetzt neu starten?"
 
 msgid "Icon paths:"
-msgstr "Icon-Verzeichnisse"
+msgstr "Bild-Verzeichnisse"
 
 msgid "Short Description:"
 msgstr "Kurzbeschreibung:"
@@ -11898,6 +11924,9 @@ msgstr "Kachel-Zwischenspeicher-Verzeichnis "
 msgid "Maximum concurrent downloads: "
 msgstr "Maximale gleichzeitge Herunterladevorgänge: "
 
+msgid "Maximum concurrent downloads per host: "
+msgstr "Maximale Anzahl gleichzeitiger Zugriffe je Server: "
+
 msgid "Maximum elements in disk cache: "
 msgstr "Maximale Einträge im Festplattencache: "
 
@@ -12015,9 +12044,6 @@ msgstr ""
 "Warnung: Unzulässiges Format für einen Eintrag in der Stil-Liste ''{0}''. "
 "Der Eintrag ist ''{1}''"
 
-msgid "JOSM default (XML; old version)"
-msgstr "JOSM Standard (XML; old version)"
-
 msgid "JOSM default (MapCSS)"
 msgstr "JOSM Standard (MapCSS)"
 
@@ -13672,9 +13698,6 @@ msgstr "Hochladen von Hinweisen fehlgeschlagen"
 msgid "Error parsing note response from server"
 msgstr "Fehler beim Parsen der Hinweisrückmeldung vom Server"
 
-msgid "Error encoding string: {0}"
-msgstr "Fehlerkodierungszeichenkette: {0}"
-
 msgid "(Code={0})"
 msgstr "(Kode={0})"
 
@@ -14078,29 +14101,32 @@ msgstr "Neue Objekte erstellen"
 msgid "Read protocol version"
 msgstr "Protokollversion lesen"
 
-msgid "Cannot start remotecontrol server on port {0}: {1}"
+msgid "Cannot start IPv4 remotecontrol server on port {0}: {1}"
 msgstr ""
-"Der Fernsteuerungsserver auf Port {0} konnte nicht gestartet werden: {1}"
+"Fernsteuerungsserver für IPv4 auf Port {0} kann nicht gestartet werden: {1}"
 
-msgid "RemoteControl::Accepting connections on {0}:{1}"
-msgstr "RemoteControl::Eingehende Verbindungen auf {0}:{1} werden akzeptiert"
+msgid "Cannot start IPv6 remotecontrol server on port {0}: {1}"
+msgstr ""
+"Fernsteuerungsserver für IPv6 auf Port {0} kann nicht gestartet werden: {1}"
 
-msgid "RemoteControl::Server stopped."
-msgstr "RemoteControl::Server angehalten."
+msgid "RemoteControl::Accepting remote connections on {0}:{1}"
+msgstr "Fernsteuerung::Akzeptiere Verbindungen auf {0}:{1}"
 
-msgid "Cannot start remotecontrol https server on port {0}: {1}"
-msgstr ""
-"Fernsteuerung über HTTPS auf Port {0} konnte nicht gestartet werden: {1}"
+msgid "RemoteControl::Server {0}:{1} stopped."
+msgstr "Fernsteuerung::Server {0}:{1} gestoppt."
 
-msgid "Unable to initialize Remote Control HTTPS Server"
-msgstr "Fernsteuerungs HTTPS Server konnte nicht intialisiert werden"
+msgid "Cannot start IPv4 remotecontrol https server on port {0}: {1}"
+msgstr ""
+"HTTPS-Fernsteuerungsserver für IPv4 auf Port {0} kann nicht gestartet "
+"werden: {1}"
 
-msgid "RemoteControl::Accepting secure connections on {0}:{1}"
+msgid "Cannot start IPv6 remotecontrol https server on port {0}: {1}"
 msgstr ""
-"RemoteControl::Eingehende sichere Verbindungen auf {0}:{1} werden akzeptiert"
+"HTTPS-Fernsteuerungsserver für IPv6 auf Port {0} kann nicht gestartet "
+"werden: {1}"
 
-msgid "RemoteControl::Server (https) stopped."
-msgstr "Fernsteuerung: Server (HTTPS) gestoppt."
+msgid "RemoteControl::Accepting secure remote connections on {0}:{1}"
+msgstr "Fernsteuerung::Akzeptiere gesicherte Verbindungen auf {0}:{1}"
 
 msgid "Remote Control has been asked to create a new node."
 msgstr "Die Fernsteuerung soll einen neuen Punkt erstellen."
@@ -16054,9 +16080,6 @@ msgstr "NRW-Atlas: Topographische Karte 1:10000"
 msgid "Metropole Ruhr: Luftbilder (10 cm)"
 msgstr "Metropole Ruhr: Luftbilder (10 cm)"
 
-msgid "SN Luftbilder, Straßennetz, Administrative Grenzen"
-msgstr "SN Luftbilder, Straßennetz, Administrative Grenzen"
-
 msgid "Drone Imagery (Haiti)"
 msgstr "Dronenbilder (Haiti)"
 
@@ -16992,6 +17015,14 @@ msgid ""
 msgstr ""
 "Fehler vom OSM-Inspector laden und im aktuellen JOSM-Arbeitsgebiet anzeigen"
 
+msgid ""
+"Recommends categories/tags on newly created OSM entities by analysing "
+"spatial entities into training features and using SVM classification"
+msgstr ""
+"Empfiehlt durch die Analyse von räumlichen Einheiten in Trainingseinheiten "
+"unter Nutzung von der SVM-Klassifikation Kategorieren und Merkmale für neu "
+"erstellte OSM-Objekte"
+
 msgid "Import/export OSM data in PBF format"
 msgstr "OSM-Daten im PBF-Format importieren/exportieren"
 
@@ -20776,8 +20807,11 @@ msgstr "Sanitärentsorgungsstation"
 msgid "Suction pumpout"
 msgstr "Absaugpumpe"
 
-msgid "Gravity dump station"
-msgstr "Schwerkraftentsorgungsstation"
+msgid "Gravity drain for hose"
+msgstr "Schwerkraftentwässerung für Schlauch"
+
+msgid "Casette or Elsan Disposal"
+msgstr "Kassetten- oder Elsan-Entsorgung"
 
 msgid "Operation times"
 msgstr "Betriebszeit"
@@ -21280,6 +21314,10 @@ msgid "shed"
 msgstr "Unterstand"
 
 msgctxt "building"
+msgid "storage_tank"
+msgstr "Speichertank"
+
+msgctxt "building"
 msgid "cowshed"
 msgstr "Kuhstall"
 
@@ -21392,6 +21430,41 @@ msgstr "Windmühle"
 msgid "Gasometer"
 msgstr "Gasometer"
 
+msgid "Storage Tank"
+msgstr "Speichertank"
+
+msgctxt "content"
+msgid "fuel"
+msgstr "Treibstoff"
+
+msgctxt "content"
+msgid "manure"
+msgstr "Dung"
+
+msgctxt "content"
+msgid "oil"
+msgstr "Öl"
+
+msgctxt "content"
+msgid "sewage"
+msgstr "Abwasser"
+
+msgctxt "content"
+msgid "silage"
+msgstr "Silage"
+
+msgctxt "content"
+msgid "slurry"
+msgstr "Jauche"
+
+msgctxt "content"
+msgid "water"
+msgstr "Wasser"
+
+msgctxt "content"
+msgid "wine"
+msgstr "Wein"
+
 msgid "Bunker Silo"
 msgstr "Fahrsilo"
 
@@ -24924,6 +24997,34 @@ msgstr "NanoLog-Datei öffnen …"
 msgid "Could not read NanoLog file:"
 msgstr "NanoLog-Datei konnte nicht gelesen werden:"
 
+msgid "OSM Recommendation"
+msgstr "OSM-Empfehlung"
+
+msgid "Recommend categories to your newly created instances."
+msgstr "Empfohlene Kategorien für die neu erstellten Objekte"
+
+msgid "Training process configuration"
+msgstr "Trainingsprozeßeinstellungen"
+
+msgid "Model Settings"
+msgstr "Modell-Einstellungen"
+
+msgid "Select objects or create new objects and get recommendation."
+msgstr ""
+"Objekte auswählen oder neue Objekte erstellen und Empfehlung erhalten"
+
+msgid "Add Recommendation"
+msgstr "Empfehlung hinzufügen"
+
+msgid "Add a recommended key/value pair to your object"
+msgstr "Ein zu empfehlendes Merkmalspaar zum Objekt hinzufügen"
+
+msgid "Train a Model"
+msgstr "EIn Modell trainieren"
+
+msgid "Start the training engine!"
+msgstr "Trainingsprozeß starten!"
+
 msgid "Edit opening hours"
 msgstr "Öffnungszeiten ändern"
 
@@ -32132,6 +32233,3 @@ msgstr "Losfahren"
 
 msgid "Drive a race car on this layer"
 msgstr "Ein Rennauto auf dieser Ebene fahren"
-
-#~ msgid "Note comment background"
-#~ msgstr "Hinweiskommentarhintergrund"
diff --git a/i18n/po/de_DE.po b/i18n/po/de_DE.po
index 201f7b0..0517a8d 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-04-27 03:33+0200\n"
+"POT-Creation-Date: 2015-05-12 03:33+0200\n"
 "PO-Revision-Date: 2011-07-10 12:32+0000\n"
 "Last-Translator: ralekuja <Unknown>\n"
 "Language-Team: German (Germany) <de_DE at li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Launchpad-Export-Date: 2015-04-27 05:04+0000\n"
-"X-Generator: Launchpad (build 17430)\n"
+"X-Launchpad-Export-Date: 2015-05-12 05:04+0000\n"
+"X-Generator: Launchpad (build 17487)\n"
 "Language: \n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -1477,6 +1477,9 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Some irrelevant nodes have been removed from the selection"
+msgstr ""
+
 msgid "Undo"
 msgstr ""
 
@@ -3074,6 +3077,11 @@ msgstr ""
 msgid "Failed to persist preferences to ''{0}''"
 msgstr ""
 
+msgid ""
+"Try enabling IPv6 network, prefering IPv6 over IPv4 (only works on early "
+"startup)."
+msgstr ""
+
 msgid " (at line {0}, column {1})"
 msgstr ""
 
@@ -3702,6 +3710,15 @@ msgstr ""
 msgid "Number of lane dependent values inconsistent in backward direction"
 msgstr ""
 
+msgid "Long segments"
+msgstr ""
+
+msgid "This tests for long way segments, which are usually errors."
+msgstr ""
+
+msgid "Very long segment of {0} kilometers"
+msgstr ""
+
 msgid "Tag checker (MapCSS based)"
 msgstr ""
 
@@ -4531,6 +4548,18 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
+msgid ""
+"Detected useable IPv6 network, prefering IPv6 over IPv4 after next restart."
+msgstr ""
+
+msgid "Detected useable IPv6 network, prefering IPv6 over IPv4."
+msgstr ""
+
+msgid ""
+"Detected no useable IPv6 network, prefering IPv4 over IPv6 after next "
+"restart."
+msgstr ""
+
 msgid "Unsaved osm data"
 msgstr ""
 
@@ -6209,14 +6238,6 @@ msgstr ""
 msgid "Only launching info browsers for the first {0} of {1} selected users"
 msgstr ""
 
-msgid ""
-"<html>Failed to create an URL because the encoding ''{0}''<br>was missing on "
-"this system.</html>"
-msgstr ""
-
-msgid "Missing encoding"
-msgstr ""
-
 msgid "Author"
 msgstr ""
 
@@ -10671,6 +10692,9 @@ msgstr ""
 msgid "Maximum concurrent downloads: "
 msgstr ""
 
+msgid "Maximum concurrent downloads per host: "
+msgstr ""
+
 msgid "Maximum elements in disk cache: "
 msgstr ""
 
@@ -10773,9 +10797,6 @@ msgstr ""
 msgid "Warning: illegal format of entry in style list ''{0}''. Got ''{1}''"
 msgstr ""
 
-msgid "JOSM default (XML; old version)"
-msgstr ""
-
 msgid "JOSM default (MapCSS)"
 msgstr ""
 
@@ -12237,9 +12258,6 @@ msgstr ""
 msgid "Error parsing note response from server"
 msgstr ""
 
-msgid "Error encoding string: {0}"
-msgstr ""
-
 msgid "(Code={0})"
 msgstr ""
 
@@ -12597,25 +12615,25 @@ msgstr ""
 msgid "Read protocol version"
 msgstr ""
 
-msgid "Cannot start remotecontrol server on port {0}: {1}"
+msgid "Cannot start IPv4 remotecontrol server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Accepting connections on {0}:{1}"
+msgid "Cannot start IPv6 remotecontrol server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Server stopped."
+msgid "RemoteControl::Accepting remote connections on {0}:{1}"
 msgstr ""
 
-msgid "Cannot start remotecontrol https server on port {0}: {1}"
+msgid "RemoteControl::Server {0}:{1} stopped."
 msgstr ""
 
-msgid "Unable to initialize Remote Control HTTPS Server"
+msgid "Cannot start IPv4 remotecontrol https server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Accepting secure connections on {0}:{1}"
+msgid "Cannot start IPv6 remotecontrol https server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Server (https) stopped."
+msgid "RemoteControl::Accepting secure remote connections on {0}:{1}"
 msgstr ""
 
 msgid "Remote Control has been asked to create a new node."
@@ -14286,9 +14304,6 @@ msgstr ""
 msgid "Metropole Ruhr: Luftbilder (10 cm)"
 msgstr ""
 
-msgid "SN Luftbilder, Straßennetz, Administrative Grenzen"
-msgstr ""
-
 msgid "Drone Imagery (Haiti)"
 msgstr ""
 
@@ -15149,6 +15164,11 @@ msgid ""
 "bounding box"
 msgstr ""
 
+msgid ""
+"Recommends categories/tags on newly created OSM entities by analysing "
+"spatial entities into training features and using SVM classification"
+msgstr ""
+
 msgid "Import/export OSM data in PBF format"
 msgstr ""
 
@@ -18849,7 +18869,10 @@ msgstr ""
 msgid "Suction pumpout"
 msgstr ""
 
-msgid "Gravity dump station"
+msgid "Gravity drain for hose"
+msgstr ""
+
+msgid "Casette or Elsan Disposal"
 msgstr ""
 
 msgid "Operation times"
@@ -19353,6 +19376,10 @@ msgid "shed"
 msgstr ""
 
 msgctxt "building"
+msgid "storage_tank"
+msgstr ""
+
+msgctxt "building"
 msgid "cowshed"
 msgstr ""
 
@@ -19465,6 +19492,41 @@ msgstr ""
 msgid "Gasometer"
 msgstr ""
 
+msgid "Storage Tank"
+msgstr ""
+
+msgctxt "content"
+msgid "fuel"
+msgstr ""
+
+msgctxt "content"
+msgid "manure"
+msgstr ""
+
+msgctxt "content"
+msgid "oil"
+msgstr ""
+
+msgctxt "content"
+msgid "sewage"
+msgstr ""
+
+msgctxt "content"
+msgid "silage"
+msgstr ""
+
+msgctxt "content"
+msgid "slurry"
+msgstr ""
+
+msgctxt "content"
+msgid "water"
+msgstr ""
+
+msgctxt "content"
+msgid "wine"
+msgstr ""
+
 msgid "Bunker Silo"
 msgstr ""
 
@@ -22916,6 +22978,33 @@ msgstr ""
 msgid "Could not read NanoLog file:"
 msgstr ""
 
+msgid "OSM Recommendation"
+msgstr ""
+
+msgid "Recommend categories to your newly created instances."
+msgstr ""
+
+msgid "Training process configuration"
+msgstr ""
+
+msgid "Model Settings"
+msgstr ""
+
+msgid "Select objects or create new objects and get recommendation."
+msgstr ""
+
+msgid "Add Recommendation"
+msgstr ""
+
+msgid "Add a recommended key/value pair to your object"
+msgstr ""
+
+msgid "Train a Model"
+msgstr ""
+
+msgid "Start the training engine!"
+msgstr ""
+
 msgid "Edit opening hours"
 msgstr ""
 
diff --git a/i18n/po/el.po b/i18n/po/el.po
index bf2c0db..cc85a6a 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-04-27 03:33+0200\n"
+"POT-Creation-Date: 2015-05-12 03:33+0200\n"
 "PO-Revision-Date: 2015-04-14 19:43+0000\n"
 "Last-Translator: aitolos <Unknown>\n"
 "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-04-27 04:42+0000\n"
-"X-Generator: Launchpad (build 17430)\n"
+"X-Launchpad-Export-Date: 2015-05-12 04:42+0000\n"
+"X-Generator: Launchpad (build 17487)\n"
 "Language: el\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -1588,6 +1588,9 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Some irrelevant nodes have been removed from the selection"
+msgstr ""
+
 msgid "Undo"
 msgstr "Αναίρεση"
 
@@ -3247,6 +3250,11 @@ msgstr "Επίπεδο: {0}"
 msgid "Failed to persist preferences to ''{0}''"
 msgstr ""
 
+msgid ""
+"Try enabling IPv6 network, prefering IPv6 over IPv4 (only works on early "
+"startup)."
+msgstr ""
+
 msgid " (at line {0}, column {1})"
 msgstr " (στη γραμμή {0}, στήλη {1})"
 
@@ -3882,6 +3890,15 @@ msgstr ""
 msgid "Number of lane dependent values inconsistent in backward direction"
 msgstr ""
 
+msgid "Long segments"
+msgstr ""
+
+msgid "This tests for long way segments, which are usually errors."
+msgstr ""
+
+msgid "Very long segment of {0} kilometers"
+msgstr ""
+
 msgid "Tag checker (MapCSS based)"
 msgstr ""
 
@@ -4735,6 +4752,18 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
+msgid ""
+"Detected useable IPv6 network, prefering IPv6 over IPv4 after next restart."
+msgstr ""
+
+msgid "Detected useable IPv6 network, prefering IPv6 over IPv4."
+msgstr ""
+
+msgid ""
+"Detected no useable IPv6 network, prefering IPv4 over IPv6 after next "
+"restart."
+msgstr ""
+
 msgid "Unsaved osm data"
 msgstr "Μη αποθηκευμένα δεδομένα osm"
 
@@ -6442,14 +6471,6 @@ msgstr ""
 msgid "Only launching info browsers for the first {0} of {1} selected users"
 msgstr ""
 
-msgid ""
-"<html>Failed to create an URL because the encoding ''{0}''<br>was missing on "
-"this system.</html>"
-msgstr ""
-
-msgid "Missing encoding"
-msgstr ""
-
 msgid "Author"
 msgstr "Συγγραφέας"
 
@@ -11003,6 +11024,9 @@ msgstr ""
 msgid "Maximum concurrent downloads: "
 msgstr ""
 
+msgid "Maximum concurrent downloads per host: "
+msgstr ""
+
 msgid "Maximum elements in disk cache: "
 msgstr ""
 
@@ -11110,9 +11134,6 @@ msgstr ""
 msgid "Warning: illegal format of entry in style list ''{0}''. Got ''{1}''"
 msgstr ""
 
-msgid "JOSM default (XML; old version)"
-msgstr ""
-
 msgid "JOSM default (MapCSS)"
 msgstr ""
 
@@ -12593,9 +12614,6 @@ msgstr ""
 msgid "Error parsing note response from server"
 msgstr ""
 
-msgid "Error encoding string: {0}"
-msgstr ""
-
 msgid "(Code={0})"
 msgstr ""
 
@@ -12955,25 +12973,25 @@ msgstr ""
 msgid "Read protocol version"
 msgstr ""
 
-msgid "Cannot start remotecontrol server on port {0}: {1}"
+msgid "Cannot start IPv4 remotecontrol server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Accepting connections on {0}:{1}"
+msgid "Cannot start IPv6 remotecontrol server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Server stopped."
+msgid "RemoteControl::Accepting remote connections on {0}:{1}"
 msgstr ""
 
-msgid "Cannot start remotecontrol https server on port {0}: {1}"
+msgid "RemoteControl::Server {0}:{1} stopped."
 msgstr ""
 
-msgid "Unable to initialize Remote Control HTTPS Server"
+msgid "Cannot start IPv4 remotecontrol https server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Accepting secure connections on {0}:{1}"
+msgid "Cannot start IPv6 remotecontrol https server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Server (https) stopped."
+msgid "RemoteControl::Accepting secure remote connections on {0}:{1}"
 msgstr ""
 
 msgid "Remote Control has been asked to create a new node."
@@ -14670,9 +14688,6 @@ msgstr ""
 msgid "Metropole Ruhr: Luftbilder (10 cm)"
 msgstr ""
 
-msgid "SN Luftbilder, Straßennetz, Administrative Grenzen"
-msgstr ""
-
 msgid "Drone Imagery (Haiti)"
 msgstr ""
 
@@ -15533,6 +15548,11 @@ msgid ""
 "bounding box"
 msgstr ""
 
+msgid ""
+"Recommends categories/tags on newly created OSM entities by analysing "
+"spatial entities into training features and using SVM classification"
+msgstr ""
+
 msgid "Import/export OSM data in PBF format"
 msgstr ""
 
@@ -19236,7 +19256,10 @@ msgstr ""
 msgid "Suction pumpout"
 msgstr ""
 
-msgid "Gravity dump station"
+msgid "Gravity drain for hose"
+msgstr ""
+
+msgid "Casette or Elsan Disposal"
 msgstr ""
 
 msgid "Operation times"
@@ -19740,6 +19763,10 @@ msgid "shed"
 msgstr ""
 
 msgctxt "building"
+msgid "storage_tank"
+msgstr ""
+
+msgctxt "building"
 msgid "cowshed"
 msgstr ""
 
@@ -19852,6 +19879,41 @@ msgstr "Ανεμόμυλος"
 msgid "Gasometer"
 msgstr "Μετρητής Αερίου"
 
+msgid "Storage Tank"
+msgstr ""
+
+msgctxt "content"
+msgid "fuel"
+msgstr ""
+
+msgctxt "content"
+msgid "manure"
+msgstr ""
+
+msgctxt "content"
+msgid "oil"
+msgstr ""
+
+msgctxt "content"
+msgid "sewage"
+msgstr ""
+
+msgctxt "content"
+msgid "silage"
+msgstr ""
+
+msgctxt "content"
+msgid "slurry"
+msgstr ""
+
+msgctxt "content"
+msgid "water"
+msgstr ""
+
+msgctxt "content"
+msgid "wine"
+msgstr ""
+
 msgid "Bunker Silo"
 msgstr ""
 
@@ -23305,6 +23367,33 @@ msgstr ""
 msgid "Could not read NanoLog file:"
 msgstr ""
 
+msgid "OSM Recommendation"
+msgstr ""
+
+msgid "Recommend categories to your newly created instances."
+msgstr ""
+
+msgid "Training process configuration"
+msgstr ""
+
+msgid "Model Settings"
+msgstr ""
+
+msgid "Select objects or create new objects and get recommendation."
+msgstr ""
+
+msgid "Add Recommendation"
+msgstr ""
+
+msgid "Add a recommended key/value pair to your object"
+msgstr ""
+
+msgid "Train a Model"
+msgstr ""
+
+msgid "Start the training engine!"
+msgstr ""
+
 msgid "Edit opening hours"
 msgstr ""
 
diff --git a/i18n/po/en_AU.po b/i18n/po/en_AU.po
index 013b333..b2e7e8c 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-04-27 03:33+0200\n"
+"POT-Creation-Date: 2015-05-12 03:33+0200\n"
 "PO-Revision-Date: 2013-03-30 14:03+0000\n"
 "Last-Translator: Dirk Stöcker <launchpad at dstoecker.de>\n"
 "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-04-27 05:03+0000\n"
-"X-Generator: Launchpad (build 17430)\n"
+"X-Launchpad-Export-Date: 2015-05-12 05:03+0000\n"
+"X-Generator: Launchpad (build 17487)\n"
 "Language: \n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -1505,6 +1505,9 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Some irrelevant nodes have been removed from the selection"
+msgstr ""
+
 msgid "Undo"
 msgstr "Undo"
 
@@ -3135,6 +3138,11 @@ msgstr "Layer: {0}"
 msgid "Failed to persist preferences to ''{0}''"
 msgstr ""
 
+msgid ""
+"Try enabling IPv6 network, prefering IPv6 over IPv4 (only works on early "
+"startup)."
+msgstr ""
+
 msgid " (at line {0}, column {1})"
 msgstr ""
 
@@ -3776,6 +3784,15 @@ msgstr ""
 msgid "Number of lane dependent values inconsistent in backward direction"
 msgstr ""
 
+msgid "Long segments"
+msgstr ""
+
+msgid "This tests for long way segments, which are usually errors."
+msgstr ""
+
+msgid "Very long segment of {0} kilometers"
+msgstr ""
+
 msgid "Tag checker (MapCSS based)"
 msgstr ""
 
@@ -4618,6 +4635,18 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
+msgid ""
+"Detected useable IPv6 network, prefering IPv6 over IPv4 after next restart."
+msgstr ""
+
+msgid "Detected useable IPv6 network, prefering IPv6 over IPv4."
+msgstr ""
+
+msgid ""
+"Detected no useable IPv6 network, prefering IPv4 over IPv6 after next "
+"restart."
+msgstr ""
+
 msgid "Unsaved osm data"
 msgstr ""
 
@@ -6338,16 +6367,6 @@ msgstr "Launches a browser with information about the user"
 msgid "Only launching info browsers for the first {0} of {1} selected users"
 msgstr ""
 
-msgid ""
-"<html>Failed to create an URL because the encoding ''{0}''<br>was missing on "
-"this system.</html>"
-msgstr ""
-"<html>Failed to create an URL because the encoding ''{0}''<br>was missing on "
-"this system.</html>"
-
-msgid "Missing encoding"
-msgstr "Missing encoding"
-
 msgid "Author"
 msgstr "Author"
 
@@ -11087,6 +11106,9 @@ msgstr ""
 msgid "Maximum concurrent downloads: "
 msgstr ""
 
+msgid "Maximum concurrent downloads per host: "
+msgstr ""
+
 msgid "Maximum elements in disk cache: "
 msgstr ""
 
@@ -11191,9 +11213,6 @@ msgstr ""
 msgid "Warning: illegal format of entry in style list ''{0}''. Got ''{1}''"
 msgstr "Warning: illegal format of entry in style list ''{0}''. Got ''{1}''"
 
-msgid "JOSM default (XML; old version)"
-msgstr ""
-
 msgid "JOSM default (MapCSS)"
 msgstr ""
 
@@ -12718,9 +12737,6 @@ msgstr ""
 msgid "Error parsing note response from server"
 msgstr ""
 
-msgid "Error encoding string: {0}"
-msgstr ""
-
 msgid "(Code={0})"
 msgstr "(Code={0})"
 
@@ -13094,25 +13110,25 @@ msgstr ""
 msgid "Read protocol version"
 msgstr ""
 
-msgid "Cannot start remotecontrol server on port {0}: {1}"
+msgid "Cannot start IPv4 remotecontrol server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Accepting connections on {0}:{1}"
+msgid "Cannot start IPv6 remotecontrol server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Server stopped."
+msgid "RemoteControl::Accepting remote connections on {0}:{1}"
 msgstr ""
 
-msgid "Cannot start remotecontrol https server on port {0}: {1}"
+msgid "RemoteControl::Server {0}:{1} stopped."
 msgstr ""
 
-msgid "Unable to initialize Remote Control HTTPS Server"
+msgid "Cannot start IPv4 remotecontrol https server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Accepting secure connections on {0}:{1}"
+msgid "Cannot start IPv6 remotecontrol https server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Server (https) stopped."
+msgid "RemoteControl::Accepting secure remote connections on {0}:{1}"
 msgstr ""
 
 msgid "Remote Control has been asked to create a new node."
@@ -14872,9 +14888,6 @@ msgstr ""
 msgid "Metropole Ruhr: Luftbilder (10 cm)"
 msgstr ""
 
-msgid "SN Luftbilder, Straßennetz, Administrative Grenzen"
-msgstr ""
-
 msgid "Drone Imagery (Haiti)"
 msgstr ""
 
@@ -15752,6 +15765,11 @@ msgid ""
 "bounding box"
 msgstr ""
 
+msgid ""
+"Recommends categories/tags on newly created OSM entities by analysing "
+"spatial entities into training features and using SVM classification"
+msgstr ""
+
 msgid "Import/export OSM data in PBF format"
 msgstr ""
 
@@ -19468,7 +19486,10 @@ msgstr ""
 msgid "Suction pumpout"
 msgstr ""
 
-msgid "Gravity dump station"
+msgid "Gravity drain for hose"
+msgstr ""
+
+msgid "Casette or Elsan Disposal"
 msgstr ""
 
 msgid "Operation times"
@@ -19972,6 +19993,10 @@ msgid "shed"
 msgstr ""
 
 msgctxt "building"
+msgid "storage_tank"
+msgstr ""
+
+msgctxt "building"
 msgid "cowshed"
 msgstr ""
 
@@ -20084,6 +20109,41 @@ msgstr "Windmill"
 msgid "Gasometer"
 msgstr "Gasometer"
 
+msgid "Storage Tank"
+msgstr ""
+
+msgctxt "content"
+msgid "fuel"
+msgstr ""
+
+msgctxt "content"
+msgid "manure"
+msgstr ""
+
+msgctxt "content"
+msgid "oil"
+msgstr ""
+
+msgctxt "content"
+msgid "sewage"
+msgstr ""
+
+msgctxt "content"
+msgid "silage"
+msgstr ""
+
+msgctxt "content"
+msgid "slurry"
+msgstr ""
+
+msgctxt "content"
+msgid "water"
+msgstr ""
+
+msgctxt "content"
+msgid "wine"
+msgstr ""
+
 msgid "Bunker Silo"
 msgstr ""
 
@@ -23539,6 +23599,33 @@ msgstr ""
 msgid "Could not read NanoLog file:"
 msgstr ""
 
+msgid "OSM Recommendation"
+msgstr ""
+
+msgid "Recommend categories to your newly created instances."
+msgstr ""
+
+msgid "Training process configuration"
+msgstr ""
+
+msgid "Model Settings"
+msgstr ""
+
+msgid "Select objects or create new objects and get recommendation."
+msgstr ""
+
+msgid "Add Recommendation"
+msgstr ""
+
+msgid "Add a recommended key/value pair to your object"
+msgstr ""
+
+msgid "Train a Model"
+msgstr ""
+
+msgid "Start the training engine!"
+msgstr ""
+
 msgid "Edit opening hours"
 msgstr ""
 
diff --git a/i18n/po/en_CA.po b/i18n/po/en_CA.po
index b1c3249..fa68c5f 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-04-27 03:33+0200\n"
+"POT-Creation-Date: 2015-05-12 03:33+0200\n"
 "PO-Revision-Date: 2010-09-24 17:25+0000\n"
 "Last-Translator: Johann Beda <Unknown>\n"
 "Language-Team: English (Canada) <en_CA at li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Launchpad-Export-Date: 2015-04-27 05:04+0000\n"
-"X-Generator: Launchpad (build 17430)\n"
+"X-Launchpad-Export-Date: 2015-05-12 05:04+0000\n"
+"X-Generator: Launchpad (build 17487)\n"
 "Language: \n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -1474,6 +1474,9 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Some irrelevant nodes have been removed from the selection"
+msgstr ""
+
 msgid "Undo"
 msgstr ""
 
@@ -3071,6 +3074,11 @@ msgstr ""
 msgid "Failed to persist preferences to ''{0}''"
 msgstr ""
 
+msgid ""
+"Try enabling IPv6 network, prefering IPv6 over IPv4 (only works on early "
+"startup)."
+msgstr ""
+
 msgid " (at line {0}, column {1})"
 msgstr ""
 
@@ -3699,6 +3707,15 @@ msgstr ""
 msgid "Number of lane dependent values inconsistent in backward direction"
 msgstr ""
 
+msgid "Long segments"
+msgstr ""
+
+msgid "This tests for long way segments, which are usually errors."
+msgstr ""
+
+msgid "Very long segment of {0} kilometers"
+msgstr ""
+
 msgid "Tag checker (MapCSS based)"
 msgstr ""
 
@@ -4528,6 +4545,18 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
+msgid ""
+"Detected useable IPv6 network, prefering IPv6 over IPv4 after next restart."
+msgstr ""
+
+msgid "Detected useable IPv6 network, prefering IPv6 over IPv4."
+msgstr ""
+
+msgid ""
+"Detected no useable IPv6 network, prefering IPv4 over IPv6 after next "
+"restart."
+msgstr ""
+
 msgid "Unsaved osm data"
 msgstr ""
 
@@ -6206,14 +6235,6 @@ msgstr ""
 msgid "Only launching info browsers for the first {0} of {1} selected users"
 msgstr ""
 
-msgid ""
-"<html>Failed to create an URL because the encoding ''{0}''<br>was missing on "
-"this system.</html>"
-msgstr ""
-
-msgid "Missing encoding"
-msgstr ""
-
 msgid "Author"
 msgstr ""
 
@@ -10668,6 +10689,9 @@ msgstr ""
 msgid "Maximum concurrent downloads: "
 msgstr ""
 
+msgid "Maximum concurrent downloads per host: "
+msgstr ""
+
 msgid "Maximum elements in disk cache: "
 msgstr ""
 
@@ -10770,9 +10794,6 @@ msgstr ""
 msgid "Warning: illegal format of entry in style list ''{0}''. Got ''{1}''"
 msgstr ""
 
-msgid "JOSM default (XML; old version)"
-msgstr ""
-
 msgid "JOSM default (MapCSS)"
 msgstr ""
 
@@ -12234,9 +12255,6 @@ msgstr ""
 msgid "Error parsing note response from server"
 msgstr ""
 
-msgid "Error encoding string: {0}"
-msgstr ""
-
 msgid "(Code={0})"
 msgstr ""
 
@@ -12594,25 +12612,25 @@ msgstr ""
 msgid "Read protocol version"
 msgstr ""
 
-msgid "Cannot start remotecontrol server on port {0}: {1}"
+msgid "Cannot start IPv4 remotecontrol server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Accepting connections on {0}:{1}"
+msgid "Cannot start IPv6 remotecontrol server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Server stopped."
+msgid "RemoteControl::Accepting remote connections on {0}:{1}"
 msgstr ""
 
-msgid "Cannot start remotecontrol https server on port {0}: {1}"
+msgid "RemoteControl::Server {0}:{1} stopped."
 msgstr ""
 
-msgid "Unable to initialize Remote Control HTTPS Server"
+msgid "Cannot start IPv4 remotecontrol https server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Accepting secure connections on {0}:{1}"
+msgid "Cannot start IPv6 remotecontrol https server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Server (https) stopped."
+msgid "RemoteControl::Accepting secure remote connections on {0}:{1}"
 msgstr ""
 
 msgid "Remote Control has been asked to create a new node."
@@ -14280,9 +14298,6 @@ msgstr ""
 msgid "Metropole Ruhr: Luftbilder (10 cm)"
 msgstr ""
 
-msgid "SN Luftbilder, Straßennetz, Administrative Grenzen"
-msgstr ""
-
 msgid "Drone Imagery (Haiti)"
 msgstr ""
 
@@ -15143,6 +15158,11 @@ msgid ""
 "bounding box"
 msgstr ""
 
+msgid ""
+"Recommends categories/tags on newly created OSM entities by analysing "
+"spatial entities into training features and using SVM classification"
+msgstr ""
+
 msgid "Import/export OSM data in PBF format"
 msgstr ""
 
@@ -18843,7 +18863,10 @@ msgstr ""
 msgid "Suction pumpout"
 msgstr ""
 
-msgid "Gravity dump station"
+msgid "Gravity drain for hose"
+msgstr ""
+
+msgid "Casette or Elsan Disposal"
 msgstr ""
 
 msgid "Operation times"
@@ -19347,6 +19370,10 @@ msgid "shed"
 msgstr ""
 
 msgctxt "building"
+msgid "storage_tank"
+msgstr ""
+
+msgctxt "building"
 msgid "cowshed"
 msgstr ""
 
@@ -19459,6 +19486,41 @@ msgstr ""
 msgid "Gasometer"
 msgstr ""
 
+msgid "Storage Tank"
+msgstr ""
+
+msgctxt "content"
+msgid "fuel"
+msgstr ""
+
+msgctxt "content"
+msgid "manure"
+msgstr ""
+
+msgctxt "content"
+msgid "oil"
+msgstr ""
+
+msgctxt "content"
+msgid "sewage"
+msgstr ""
+
+msgctxt "content"
+msgid "silage"
+msgstr ""
+
+msgctxt "content"
+msgid "slurry"
+msgstr ""
+
+msgctxt "content"
+msgid "water"
+msgstr ""
+
+msgctxt "content"
+msgid "wine"
+msgstr ""
+
 msgid "Bunker Silo"
 msgstr ""
 
@@ -22910,6 +22972,33 @@ msgstr ""
 msgid "Could not read NanoLog file:"
 msgstr ""
 
+msgid "OSM Recommendation"
+msgstr ""
+
+msgid "Recommend categories to your newly created instances."
+msgstr ""
+
+msgid "Training process configuration"
+msgstr ""
+
+msgid "Model Settings"
+msgstr ""
+
+msgid "Select objects or create new objects and get recommendation."
+msgstr ""
+
+msgid "Add Recommendation"
+msgstr ""
+
+msgid "Add a recommended key/value pair to your object"
+msgstr ""
+
+msgid "Train a Model"
+msgstr ""
+
+msgid "Start the training engine!"
+msgstr ""
+
 msgid "Edit opening hours"
 msgstr ""
 
diff --git a/i18n/po/en_GB.po b/i18n/po/en_GB.po
index f4b6d7a..b7fa59b 100644
--- a/i18n/po/en_GB.po
+++ b/i18n/po/en_GB.po
@@ -10,16 +10,16 @@ msgid ""
 msgstr ""
 "Project-Id-Version: JOSM\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-04-27 03:33+0200\n"
-"PO-Revision-Date: 2015-04-20 11:30+0000\n"
-"Last-Translator: Andi Chandler <Unknown>\n"
+"POT-Creation-Date: 2015-05-12 03:33+0200\n"
+"PO-Revision-Date: 2015-04-30 11:10+0000\n"
+"Last-Translator: Dee-earlsoft <Unknown>\n"
 "Language-Team: German <josm-dev at openstreetmap.org>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Launchpad-Export-Date: 2015-04-27 05:02+0000\n"
-"X-Generator: Launchpad (build 17430)\n"
+"X-Launchpad-Export-Date: 2015-05-12 05:02+0000\n"
+"X-Generator: Launchpad (build 17487)\n"
 "Language: de\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -475,6 +475,9 @@ msgid ""
 "* One no self-crossing way with at most two of its nodes;\n"
 "* Three nodes."
 msgstr ""
+"Please select :\n"
+"* One no self-crossing way with at most two of its nodes;\n"
+"* Three nodes."
 
 msgid "Download from OSM..."
 msgstr "Download from OSM..."
@@ -1583,6 +1586,9 @@ msgstr[0] ""
 msgstr[1] ""
 "The affected way would disappear after disconnecting the selected nodes."
 
+msgid "Some irrelevant nodes have been removed from the selection"
+msgstr "Some irrelevant nodes have been removed from the selection"
+
 msgid "Undo"
 msgstr "Undo"
 
@@ -2613,6 +2619,7 @@ msgstr ""
 msgid ""
 "nodes with at least 3 referring ways, or relations containing at least 3 ways"
 msgstr ""
+"nodes with at least 3 referring ways, or relations containing at least 3 ways"
 
 msgid "objects having 5 to 10 tags"
 msgstr "objects having 5 to 10 tags"
@@ -2624,7 +2631,7 @@ msgid "closed ways with an area of 100 m²"
 msgstr "closed ways with an area of 100 m²"
 
 msgid "ways with a length of 200 m or more"
-msgstr ""
+msgstr "ways with a length of 200 m or more"
 
 msgid "state"
 msgstr "state"
@@ -3301,6 +3308,11 @@ msgstr "Layer: {0}"
 msgid "Failed to persist preferences to ''{0}''"
 msgstr "Failed to persist preferences to ''{0}''"
 
+msgid ""
+"Try enabling IPv6 network, prefering IPv6 over IPv4 (only works on early "
+"startup)."
+msgstr ""
+
 msgid " (at line {0}, column {1})"
 msgstr " (at line {0}, column {1})"
 
@@ -3959,6 +3971,15 @@ msgstr "Number of lane dependent values inconsistent in forward direction"
 msgid "Number of lane dependent values inconsistent in backward direction"
 msgstr "Number of lane dependent values inconsistent in backward direction"
 
+msgid "Long segments"
+msgstr ""
+
+msgid "This tests for long way segments, which are usually errors."
+msgstr ""
+
+msgid "Very long segment of {0} kilometers"
+msgstr ""
+
 msgid "Tag checker (MapCSS based)"
 msgstr "Tag checker (MapCSS based)"
 
@@ -4058,7 +4079,7 @@ msgstr ""
 "e.g., Italia - Italien - Italy."
 
 msgid "Missing name:*={0}. Add tag with correct language key."
-msgstr ""
+msgstr "Missing name:*={0}. Add tag with correct language key."
 
 msgid "A name is missing, even though name:* exists."
 msgstr "A name is missing, even though name:* exists."
@@ -4709,7 +4730,7 @@ msgid "Print debugging messages to console"
 msgstr "Print debugging messages to console"
 
 msgid "Skip loading plugins"
-msgstr ""
+msgstr "Skip loading plugins"
 
 msgid "Disable access to the given resource(s), separated by comma"
 msgstr "Disable access to the given resource(s), separated by comma"
@@ -4780,7 +4801,7 @@ msgid "Printing debugging messages to console"
 msgstr "Printing debugging messages to console"
 
 msgid "Plugin loading skipped"
-msgstr ""
+msgstr "Plugin loading skipped"
 
 msgid "Enabled detailed debug level (trace)"
 msgstr "Enabled detailed debug level (trace)"
@@ -4822,6 +4843,18 @@ msgstr[0] ""
 msgstr[1] ""
 "JOSM is running in offline mode. These resources will not be available: {0}"
 
+msgid ""
+"Detected useable IPv6 network, prefering IPv6 over IPv4 after next restart."
+msgstr ""
+
+msgid "Detected useable IPv6 network, prefering IPv6 over IPv4."
+msgstr ""
+
+msgid ""
+"Detected no useable IPv6 network, prefering IPv4 over IPv6 after next "
+"restart."
+msgstr ""
+
 msgid "Unsaved osm data"
 msgstr "Unsaved osm data"
 
@@ -6622,16 +6655,6 @@ msgstr "Launches a browser with information about the user"
 msgid "Only launching info browsers for the first {0} of {1} selected users"
 msgstr "Only launching info browsers for the first {0} of {1} selected users"
 
-msgid ""
-"<html>Failed to create an URL because the encoding ''{0}''<br>was missing on "
-"this system.</html>"
-msgstr ""
-"<html>Failed to create an URL because the encoding ''{0}''<br>was missing on "
-"this system.</html>"
-
-msgid "Missing encoding"
-msgstr "Missing encoding"
-
 msgid "Author"
 msgstr "Author"
 
@@ -7250,7 +7273,7 @@ msgid "<different>"
 msgstr "<different>"
 
 msgid "Objects: {2} / Tags: {0} / Memberships: {1}"
-msgstr ""
+msgstr "Objects: {2} / Tags: {0} / Memberships: {1}"
 
 msgid "Tags: {0} / Memberships: {1}"
 msgstr "Tags: {0} / Memberships: {1}"
@@ -7385,14 +7408,15 @@ msgid "Remember last used tags after a restart"
 msgstr "Remember last used tags after a restart"
 
 msgid "<code>Ctrl-1</code> to apply first suggestion"
-msgstr ""
+msgstr "<code>Ctrl-1</code> to apply first suggestion"
 
 msgid "<code>Shift-Enter</code> to add without closing the dialog"
-msgstr ""
+msgstr "<code>Shift-Enter</code> to add without closing the dialog"
 
 msgid ""
 "<code>Shift-Ctrl-1</code> to add first suggestion without closing the dialog"
 msgstr ""
+"<code>Shift-Ctrl-1</code> to add first suggestion without closing the dialog"
 
 msgid "Please enter the number of recently added tags to display"
 msgstr "Please enter the number of recently added tags to display"
@@ -8192,13 +8216,13 @@ msgid "Changeset source"
 msgstr "Changeset source"
 
 msgid "Imagery used"
-msgstr ""
+msgstr "Imagery used"
 
 msgid "<b>Source</b>:"
 msgstr "<b>Source</b>:"
 
 msgid "<b>Imagery</b>:"
-msgstr ""
+msgstr "<b>Imagery</b>:"
 
 msgid ""
 "<html>Version <strong>{0}</strong> currently edited in layer ''{1}''</html>"
@@ -8211,7 +8235,7 @@ msgstr ""
 "<html>Version <strong>{0}</strong> created on <strong>{1}</strong></html>"
 
 msgid "Changeset"
-msgstr ""
+msgstr "Changeset"
 
 msgid "Changeset info"
 msgstr "Changeset info"
@@ -9363,7 +9387,7 @@ msgid "Best zoom: {0}"
 msgstr "Best zoom: {0}"
 
 msgid "Cache stats: {0}"
-msgstr ""
+msgstr "Cache stats: {0}"
 
 msgid "TMS layer ({0}), downloading in zoom {1}"
 msgstr "TMS layer ({0}), downloading in zoom {1}"
@@ -11518,10 +11542,13 @@ msgid "Tile cache directory: "
 msgstr "Tile cache directory: "
 
 msgid "Maximum concurrent downloads: "
+msgstr "Maximum concurrent downloads: "
+
+msgid "Maximum concurrent downloads per host: "
 msgstr ""
 
 msgid "Maximum elements in disk cache: "
-msgstr ""
+msgstr "Maximum elements in disk cache: "
 
 msgid ""
 "That layer does not support any of JOSM''s projections,\n"
@@ -11631,9 +11658,6 @@ msgstr ""
 msgid "Warning: illegal format of entry in style list ''{0}''. Got ''{1}''"
 msgstr "Warning: illegal format of entry in style list ''{0}''. Got ''{1}''"
 
-msgid "JOSM default (XML; old version)"
-msgstr "JOSM default (XML; old version)"
-
 msgid "JOSM default (MapCSS)"
 msgstr "JOSM default (MapCSS)"
 
@@ -12217,12 +12241,14 @@ msgid "Check interval (minutes):"
 msgstr "Check interval (minutes):"
 
 msgid "Max age for closed notes (days):"
-msgstr ""
+msgstr "Max age for closed notes (days):"
 
 msgid ""
 "Specifies the number of days a note needs to be closed to no longer be "
 "downloaded"
 msgstr ""
+"Specifies the number of days a note needs to be closed to no longer be "
+"downloaded"
 
 msgid "Failed to retrieve OAuth Access Token from credential manager"
 msgstr "Failed to retrieve OAuth Access Token from credential manager"
@@ -13217,9 +13243,6 @@ msgstr "Note upload failed"
 msgid "Error parsing note response from server"
 msgstr "Error parsing note response from server"
 
-msgid "Error encoding string: {0}"
-msgstr "Error encoding string: {0}"
-
 msgid "(Code={0})"
 msgstr "(Code={0})"
 
@@ -13601,26 +13624,26 @@ msgstr "Create new objects"
 msgid "Read protocol version"
 msgstr "Read protocol version"
 
-msgid "Cannot start remotecontrol server on port {0}: {1}"
-msgstr "Cannot start remotecontrol server on port {0}: {1}"
+msgid "Cannot start IPv4 remotecontrol server on port {0}: {1}"
+msgstr ""
 
-msgid "RemoteControl::Accepting connections on {0}:{1}"
-msgstr "RemoteControl::Accepting connections on {0}:{1}"
+msgid "Cannot start IPv6 remotecontrol server on port {0}: {1}"
+msgstr ""
 
-msgid "RemoteControl::Server stopped."
-msgstr "RemoteControl::Server stopped."
+msgid "RemoteControl::Accepting remote connections on {0}:{1}"
+msgstr ""
 
-msgid "Cannot start remotecontrol https server on port {0}: {1}"
-msgstr "Cannot start remotecontrol https server on port {0}: {1}"
+msgid "RemoteControl::Server {0}:{1} stopped."
+msgstr ""
 
-msgid "Unable to initialize Remote Control HTTPS Server"
-msgstr "Unable to initialise Remote Control HTTPS Server"
+msgid "Cannot start IPv4 remotecontrol https server on port {0}: {1}"
+msgstr ""
 
-msgid "RemoteControl::Accepting secure connections on {0}:{1}"
-msgstr "RemoteControl::Accepting secure connections on {0}:{1}"
+msgid "Cannot start IPv6 remotecontrol https server on port {0}: {1}"
+msgstr ""
 
-msgid "RemoteControl::Server (https) stopped."
-msgstr "RemoteControl::Server (https) stopped."
+msgid "RemoteControl::Accepting secure remote connections on {0}:{1}"
+msgstr ""
 
 msgid "Remote Control has been asked to create a new node."
 msgstr "Remote Control has been asked to create a new node."
@@ -15531,9 +15554,6 @@ msgstr "NRW-Atlas: Topographische Karte 1:10000"
 msgid "Metropole Ruhr: Luftbilder (10 cm)"
 msgstr "Metropole Ruhr: Luftbilder (10 cm)"
 
-msgid "SN Luftbilder, Straßennetz, Administrative Grenzen"
-msgstr ""
-
 msgid "Drone Imagery (Haiti)"
 msgstr "Drone Imagery (Haiti)"
 
@@ -16231,6 +16251,8 @@ msgid ""
 "Allows to import various file formats into JOSM directly. Currently "
 "supported: TangoGPS, Garmin Trainings Center TCX."
 msgstr ""
+"Allows to import various file formats into JOSM directly. Currently "
+"supported: TangoGPS, Garmin Trainings Center TCX."
 
 msgid "Download your GPX tracks from openstreetmap.org"
 msgstr "Download your GPX tracks from openstreetmap.org"
@@ -16348,6 +16370,8 @@ msgid ""
 "Provides Java Native Access (JNA) library. Not meant to be installed "
 "directly by users, but rather as a dependency for other plugins."
 msgstr ""
+"Provides Java Native Access (JNA) library. Not meant to be installed "
+"directly by users, but rather as a dependency for other plugins."
 
 msgid ""
 "Provides Java Topology Suite (JTS) library and related utilities. Not meant "
@@ -16390,7 +16414,7 @@ msgstr ""
 "plugin."
 
 msgid "Enables user to work with pictures hosted at mapillary.com"
-msgstr ""
+msgstr "Enables user to work with pictures hosted at mapillary.com"
 
 msgid ""
 "Provide a measurement dialog and a layer to measure length and angle of "
@@ -16453,8 +16477,15 @@ msgstr ""
 "Bring in errors from Osm Inspector and display it on the current JOSM "
 "bounding box"
 
-msgid "Import/export OSM data in PBF format"
+msgid ""
+"Recommends categories/tags on newly created OSM entities by analysing "
+"spatial entities into training features and using SVM classification"
 msgstr ""
+"Recommends categories/tags on newly created OSM entities by analysing "
+"spatial entities into training features and using SVM classification"
+
+msgid "Import/export OSM data in PBF format"
+msgstr "Import/export OSM data in PBF format"
 
 msgid "Import PDF file and convert to ways."
 msgstr "Import PDF file and convert to ways."
@@ -16512,6 +16543,10 @@ msgid ""
 "properties window. Available country presets: Belgium, Germany, Poland, "
 "Slovakia, Spain."
 msgstr ""
+"Plugin for tagging of objects based on a selection of road signs. The dialog "
+"can be opened by clicking a small icon in the upper right corner of the "
+"properties window. Available country presets: Belgium, Germany, Poland, "
+"Slovakia, Spain."
 
 msgid ""
 "Renders routes (bus, hiking trails, bicycle routes, ..). Route types must be "
@@ -16527,10 +16562,10 @@ msgid "Loads data from SDS"
 msgstr "Loads data from SDS"
 
 msgid "Imagery Layer for Sea Charts"
-msgstr ""
+msgstr "Imagery Layer for Sea Charts"
 
 msgid "Edit features for Sea Charts"
-msgstr ""
+msgstr "Edit features for Sea Charts"
 
 msgid ""
 "Simplify area by removing nodes on very obtuse angles. This can be "
@@ -16703,55 +16738,55 @@ msgid "sett"
 msgstr ""
 
 msgid "Smoothness"
-msgstr ""
+msgstr "Smoothness"
 
 msgid "excellent"
-msgstr ""
+msgstr "excellent"
 
 msgid "Thin Rollers: rollerblade, skateboard"
-msgstr ""
+msgstr "Thin Rollers: rollerblade, skateboard"
 
 msgid "good"
-msgstr ""
+msgstr "good"
 
 msgid "Thin Wheels: racing bike"
-msgstr ""
+msgstr "Thin Wheels: racing bike"
 
 msgid "intermediate"
-msgstr ""
+msgstr "intermediate"
 
 msgid "Wheels: city bike, wheelchair, scooter"
-msgstr ""
+msgstr "Wheels: city bike, wheelchair, scooter"
 
 msgid "bad"
-msgstr ""
+msgstr "bad"
 
 msgid "Robust Wheels: trekking bike, car, rickshaw"
-msgstr ""
+msgstr "Robust Wheels: trekking bike, car, rickshaw"
 
 msgid "very_bad"
-msgstr ""
+msgstr "very_bad"
 
 msgid "High Clearance: light duty off-road vehicle"
-msgstr ""
+msgstr "High Clearance: light duty off-road vehicle"
 
 msgid "horrible"
-msgstr ""
+msgstr "horrible"
 
 msgid "Off-Road: heavy duty off-road vehicle"
-msgstr ""
+msgstr "Off-Road: heavy duty off-road vehicle"
 
 msgid "very_horrible"
-msgstr ""
+msgstr "very_horrible"
 
 msgid "Specialized off-road: tractor, ATV"
-msgstr ""
+msgstr "Specialised off-road: tractor, ATV"
 
 msgid "impassable"
-msgstr ""
+msgstr "impassable"
 
 msgid "No wheeled vehicle"
-msgstr ""
+msgstr "No wheeled vehicle"
 
 msgctxt "riding"
 msgid "pitch"
@@ -16824,23 +16859,23 @@ msgid "Width (meters)"
 msgstr "Width (metres)"
 
 msgid "Sidewalk"
-msgstr ""
+msgstr "Sidewalk"
 
 msgctxt "sidewalk"
 msgid "both"
-msgstr ""
+msgstr "both"
 
 msgctxt "sidewalk"
 msgid "left"
-msgstr ""
+msgstr "left"
 
 msgctxt "sidewalk"
 msgid "right"
-msgstr ""
+msgstr "right"
 
 msgctxt "sidewalk"
 msgid "no"
-msgstr ""
+msgstr "no"
 
 msgid "Service type"
 msgstr "Service type"
@@ -17139,7 +17174,7 @@ msgstr "rugby_union"
 
 msgctxt "sport"
 msgid "running"
-msgstr ""
+msgstr "running"
 
 msgctxt "sport"
 msgid "shooting"
@@ -17183,19 +17218,19 @@ msgstr ""
 
 msgctxt "parking"
 msgid "multi-storey"
-msgstr ""
+msgstr "multi-storey"
 
 msgctxt "parking"
 msgid "surface"
-msgstr ""
+msgstr "surface"
 
 msgctxt "parking"
 msgid "underground"
-msgstr ""
+msgstr "underground"
 
 msgctxt "parking"
 msgid "rooftop"
-msgstr ""
+msgstr "rooftop"
 
 msgid "Reference number"
 msgstr "Reference number"
@@ -17276,13 +17311,13 @@ msgid "deciduous"
 msgstr "deciduous"
 
 msgid "Plants that are leafless for a certain period during the year."
-msgstr ""
+msgstr "Plants that are leafless for a certain period during the year."
 
 msgid "evergreen"
 msgstr "evergreen"
 
 msgid "Plants that are never entirely without green foliage."
-msgstr ""
+msgstr "Plants that are never entirely without green foliage."
 
 msgid "semi_deciduous"
 msgstr "semi_deciduous"
@@ -17291,6 +17326,8 @@ msgid ""
 "Plants that lose their foliage for a very short period, when old leaves fall "
 "off and new foliage growth is starting."
 msgstr ""
+"Plants that lose their foliage for a very short period, when old leaves fall "
+"off and new foliage growth is starting."
 
 msgid "semi_evergreen"
 msgstr "semi_evergreen"
@@ -17299,9 +17336,11 @@ msgid ""
 "Plants that lose most, but not all, of their foliage for a fraction of the "
 "year."
 msgstr ""
+"Plants that lose most, but not all, of their foliage for a fraction of the "
+"year."
 
 msgid "Habitat with evergreen and deciduous vegetation."
-msgstr ""
+msgstr "Habitat with evergreen and deciduous vegetation."
 
 msgid "bahai"
 msgstr "bahai"
@@ -17358,7 +17397,7 @@ msgid "evangelical"
 msgstr "evangelical"
 
 msgid "greek_catholic"
-msgstr ""
+msgstr "greek_catholic"
 
 msgid "jehovahs_witness"
 msgstr "jehovahs_witness"
@@ -17373,7 +17412,7 @@ msgid "mormon"
 msgstr "mormon"
 
 msgid "old_catholic"
-msgstr ""
+msgstr "old_catholic"
 
 msgid "orthodox"
 msgstr "orthodox"
@@ -17391,7 +17430,7 @@ msgid "quaker"
 msgstr "quaker"
 
 msgid "roman_catholic"
-msgstr ""
+msgstr "roman_catholic"
 
 msgid "shia"
 msgstr "shia"
@@ -17501,25 +17540,25 @@ msgid "Is the water body intermittent (disappears seasonally)?"
 msgstr "Is the water body intermittent (disappears seasonally)?"
 
 msgid "culvert"
-msgstr ""
+msgstr "culvert"
 
 msgid "Water access rules:"
-msgstr ""
+msgstr "Water access rules:"
 
 msgid "Ship"
-msgstr ""
+msgstr "Ship"
 
 msgid "designated"
 msgstr "designated"
 
 msgid "Boat"
-msgstr ""
+msgstr "Boat"
 
 msgid "Motorboat"
-msgstr ""
+msgstr "Motorboat"
 
 msgid "Canoe"
-msgstr ""
+msgstr "Canoe"
 
 msgid "Streets"
 msgstr "Streets"
@@ -17629,12 +17668,14 @@ msgid "Parking Aisle"
 msgstr "Parking Aisle"
 
 msgid "Escape"
-msgstr ""
+msgstr "Escape"
 
 msgid ""
 "Emergency lane beside long descending slopes for trucks and other vehicles "
 "to stop safely after brake failure."
 msgstr ""
+"Emergency lane beside long descending slopes for trucks and other vehicles "
+"to stop safely after brake failure."
 
 msgid "Road (Unknown Type)"
 msgstr "Road (Unknown Type)"
@@ -17644,43 +17685,43 @@ msgstr "Construction"
 
 msgctxt "Highway"
 msgid "motorway"
-msgstr ""
+msgstr "motorway"
 
 msgctxt "Highway"
 msgid "motorway_link"
-msgstr ""
+msgstr "motorway_link"
 
 msgctxt "Highway"
 msgid "trunk"
-msgstr ""
+msgstr "trunk"
 
 msgctxt "Highway"
 msgid "trunk_link"
-msgstr ""
+msgstr "trunk_link"
 
 msgctxt "Highway"
 msgid "primary"
-msgstr ""
+msgstr "primary"
 
 msgctxt "Highway"
 msgid "primary_link"
-msgstr ""
+msgstr "primary_link"
 
 msgctxt "Highway"
 msgid "secondary"
-msgstr ""
+msgstr "secondary"
 
 msgctxt "Highway"
 msgid "secondary_link"
-msgstr ""
+msgstr "secondary_link"
 
 msgctxt "Highway"
 msgid "tertiary"
-msgstr ""
+msgstr "tertiary"
 
 msgctxt "Highway"
 msgid "tertiary_link"
-msgstr ""
+msgstr "tertiary_link"
 
 msgctxt "Highway"
 msgid "bus_guideway"
@@ -17688,15 +17729,15 @@ msgstr ""
 
 msgctxt "Highway"
 msgid "bridleway"
-msgstr ""
+msgstr "bridleway"
 
 msgctxt "Highway"
 msgid "living_street"
-msgstr ""
+msgstr "living_street"
 
 msgctxt "Highway"
 msgid "pedestrian"
-msgstr ""
+msgstr "pedestrian"
 
 msgctxt "Highway"
 msgid "track"
@@ -20207,7 +20248,10 @@ msgstr ""
 msgid "Suction pumpout"
 msgstr ""
 
-msgid "Gravity dump station"
+msgid "Gravity drain for hose"
+msgstr ""
+
+msgid "Casette or Elsan Disposal"
 msgstr ""
 
 msgid "Operation times"
@@ -20711,6 +20755,10 @@ msgid "shed"
 msgstr ""
 
 msgctxt "building"
+msgid "storage_tank"
+msgstr ""
+
+msgctxt "building"
 msgid "cowshed"
 msgstr ""
 
@@ -20823,6 +20871,41 @@ msgstr "Windmill"
 msgid "Gasometer"
 msgstr "Gasometer"
 
+msgid "Storage Tank"
+msgstr ""
+
+msgctxt "content"
+msgid "fuel"
+msgstr ""
+
+msgctxt "content"
+msgid "manure"
+msgstr ""
+
+msgctxt "content"
+msgid "oil"
+msgstr ""
+
+msgctxt "content"
+msgid "sewage"
+msgstr ""
+
+msgctxt "content"
+msgid "silage"
+msgstr ""
+
+msgctxt "content"
+msgid "slurry"
+msgstr ""
+
+msgctxt "content"
+msgid "water"
+msgstr ""
+
+msgctxt "content"
+msgid "wine"
+msgstr ""
+
 msgid "Bunker Silo"
 msgstr ""
 
@@ -24302,6 +24385,33 @@ msgstr "Open NanoLog file..."
 msgid "Could not read NanoLog file:"
 msgstr "Could not read NanoLog file:"
 
+msgid "OSM Recommendation"
+msgstr ""
+
+msgid "Recommend categories to your newly created instances."
+msgstr ""
+
+msgid "Training process configuration"
+msgstr ""
+
+msgid "Model Settings"
+msgstr ""
+
+msgid "Select objects or create new objects and get recommendation."
+msgstr ""
+
+msgid "Add Recommendation"
+msgstr ""
+
+msgid "Add a recommended key/value pair to your object"
+msgstr ""
+
+msgid "Train a Model"
+msgstr ""
+
+msgid "Start the training engine!"
+msgstr ""
+
 msgid "Edit opening hours"
 msgstr "Edit opening hours"
 
diff --git a/i18n/po/eo.po b/i18n/po/eo.po
index eb2d9a4..e069e5d 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-04-27 03:33+0200\n"
+"POT-Creation-Date: 2015-05-12 03:33+0200\n"
 "PO-Revision-Date: 2012-10-03 21:33+0000\n"
 "Last-Translator: Michael Moroni <michael.moroni at openmailbox.org>\n"
 "Language-Team: Esperanto <eo at li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Launchpad-Export-Date: 2015-04-27 04:38+0000\n"
-"X-Generator: Launchpad (build 17430)\n"
+"X-Launchpad-Export-Date: 2015-05-12 04:38+0000\n"
+"X-Generator: Launchpad (build 17487)\n"
 "Language: eo\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -1470,6 +1470,9 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Some irrelevant nodes have been removed from the selection"
+msgstr ""
+
 msgid "Undo"
 msgstr ""
 
@@ -3067,6 +3070,11 @@ msgstr ""
 msgid "Failed to persist preferences to ''{0}''"
 msgstr ""
 
+msgid ""
+"Try enabling IPv6 network, prefering IPv6 over IPv4 (only works on early "
+"startup)."
+msgstr ""
+
 msgid " (at line {0}, column {1})"
 msgstr ""
 
@@ -3695,6 +3703,15 @@ msgstr ""
 msgid "Number of lane dependent values inconsistent in backward direction"
 msgstr ""
 
+msgid "Long segments"
+msgstr ""
+
+msgid "This tests for long way segments, which are usually errors."
+msgstr ""
+
+msgid "Very long segment of {0} kilometers"
+msgstr ""
+
 msgid "Tag checker (MapCSS based)"
 msgstr ""
 
@@ -4524,6 +4541,18 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
+msgid ""
+"Detected useable IPv6 network, prefering IPv6 over IPv4 after next restart."
+msgstr ""
+
+msgid "Detected useable IPv6 network, prefering IPv6 over IPv4."
+msgstr ""
+
+msgid ""
+"Detected no useable IPv6 network, prefering IPv4 over IPv6 after next "
+"restart."
+msgstr ""
+
 msgid "Unsaved osm data"
 msgstr ""
 
@@ -6202,14 +6231,6 @@ msgstr ""
 msgid "Only launching info browsers for the first {0} of {1} selected users"
 msgstr ""
 
-msgid ""
-"<html>Failed to create an URL because the encoding ''{0}''<br>was missing on "
-"this system.</html>"
-msgstr ""
-
-msgid "Missing encoding"
-msgstr ""
-
 msgid "Author"
 msgstr ""
 
@@ -10664,6 +10685,9 @@ msgstr ""
 msgid "Maximum concurrent downloads: "
 msgstr ""
 
+msgid "Maximum concurrent downloads per host: "
+msgstr ""
+
 msgid "Maximum elements in disk cache: "
 msgstr ""
 
@@ -10766,9 +10790,6 @@ msgstr ""
 msgid "Warning: illegal format of entry in style list ''{0}''. Got ''{1}''"
 msgstr ""
 
-msgid "JOSM default (XML; old version)"
-msgstr ""
-
 msgid "JOSM default (MapCSS)"
 msgstr ""
 
@@ -12234,9 +12255,6 @@ msgstr ""
 msgid "Error parsing note response from server"
 msgstr ""
 
-msgid "Error encoding string: {0}"
-msgstr ""
-
 msgid "(Code={0})"
 msgstr ""
 
@@ -12594,25 +12612,25 @@ msgstr ""
 msgid "Read protocol version"
 msgstr ""
 
-msgid "Cannot start remotecontrol server on port {0}: {1}"
+msgid "Cannot start IPv4 remotecontrol server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Accepting connections on {0}:{1}"
+msgid "Cannot start IPv6 remotecontrol server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Server stopped."
+msgid "RemoteControl::Accepting remote connections on {0}:{1}"
 msgstr ""
 
-msgid "Cannot start remotecontrol https server on port {0}: {1}"
+msgid "RemoteControl::Server {0}:{1} stopped."
 msgstr ""
 
-msgid "Unable to initialize Remote Control HTTPS Server"
+msgid "Cannot start IPv4 remotecontrol https server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Accepting secure connections on {0}:{1}"
+msgid "Cannot start IPv6 remotecontrol https server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Server (https) stopped."
+msgid "RemoteControl::Accepting secure remote connections on {0}:{1}"
 msgstr ""
 
 msgid "Remote Control has been asked to create a new node."
@@ -14280,9 +14298,6 @@ msgstr ""
 msgid "Metropole Ruhr: Luftbilder (10 cm)"
 msgstr ""
 
-msgid "SN Luftbilder, Straßennetz, Administrative Grenzen"
-msgstr ""
-
 msgid "Drone Imagery (Haiti)"
 msgstr ""
 
@@ -15143,6 +15158,11 @@ msgid ""
 "bounding box"
 msgstr ""
 
+msgid ""
+"Recommends categories/tags on newly created OSM entities by analysing "
+"spatial entities into training features and using SVM classification"
+msgstr ""
+
 msgid "Import/export OSM data in PBF format"
 msgstr ""
 
@@ -18843,7 +18863,10 @@ msgstr ""
 msgid "Suction pumpout"
 msgstr ""
 
-msgid "Gravity dump station"
+msgid "Gravity drain for hose"
+msgstr ""
+
+msgid "Casette or Elsan Disposal"
 msgstr ""
 
 msgid "Operation times"
@@ -19347,6 +19370,10 @@ msgid "shed"
 msgstr ""
 
 msgctxt "building"
+msgid "storage_tank"
+msgstr ""
+
+msgctxt "building"
 msgid "cowshed"
 msgstr ""
 
@@ -19459,6 +19486,41 @@ msgstr ""
 msgid "Gasometer"
 msgstr ""
 
+msgid "Storage Tank"
+msgstr ""
+
+msgctxt "content"
+msgid "fuel"
+msgstr ""
+
+msgctxt "content"
+msgid "manure"
+msgstr ""
+
+msgctxt "content"
+msgid "oil"
+msgstr ""
+
+msgctxt "content"
+msgid "sewage"
+msgstr ""
+
+msgctxt "content"
+msgid "silage"
+msgstr ""
+
+msgctxt "content"
+msgid "slurry"
+msgstr ""
+
+msgctxt "content"
+msgid "water"
+msgstr ""
+
+msgctxt "content"
+msgid "wine"
+msgstr ""
+
 msgid "Bunker Silo"
 msgstr ""
 
@@ -22910,6 +22972,33 @@ msgstr ""
 msgid "Could not read NanoLog file:"
 msgstr ""
 
+msgid "OSM Recommendation"
+msgstr ""
+
+msgid "Recommend categories to your newly created instances."
+msgstr ""
+
+msgid "Training process configuration"
+msgstr ""
+
+msgid "Model Settings"
+msgstr ""
+
+msgid "Select objects or create new objects and get recommendation."
+msgstr ""
+
+msgid "Add Recommendation"
+msgstr ""
+
+msgid "Add a recommended key/value pair to your object"
+msgstr ""
+
+msgid "Train a Model"
+msgstr ""
+
+msgid "Start the training engine!"
+msgstr ""
+
 msgid "Edit opening hours"
 msgstr ""
 
diff --git a/i18n/po/es.po b/i18n/po/es.po
index f8dd054..deb0b09 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-04-27 03:33+0200\n"
-"PO-Revision-Date: 2015-04-26 10:10+0000\n"
-"Last-Translator: Adolfo Jayme <fitoschido at gmail.com>\n"
+"POT-Creation-Date: 2015-05-12 03:33+0200\n"
+"PO-Revision-Date: 2015-05-03 09:34+0000\n"
+"Last-Translator: Emilio Gomez Fernandez <Unknown>\n"
 "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-04-27 04:57+0000\n"
-"X-Generator: Launchpad (build 17430)\n"
+"X-Launchpad-Export-Date: 2015-05-12 04:57+0000\n"
+"X-Generator: Launchpad (build 17487)\n"
 "Language: es\n"
 "X-Language: es_ES\n"
 "X-Source-Language: C\n"
@@ -1614,6 +1614,9 @@ msgstr[1] ""
 "El camino afectado desaparecería después de desconectar los nodos "
 "seleccionados."
 
+msgid "Some irrelevant nodes have been removed from the selection"
+msgstr ""
+
 msgid "Undo"
 msgstr "Deshacer"
 
@@ -1880,7 +1883,7 @@ msgstr "Notas"
 
 msgid "{0} note has been downloaded."
 msgid_plural "{0} notes have been downloaded."
-msgstr[0] "{0} nota ha sido descargada."
+msgstr[0] "{0} la nota ha sido descargada."
 msgstr[1] "{0} notas han sido descargadas."
 
 msgid ""
@@ -2661,7 +2664,8 @@ msgstr "propiedades"
 msgid ""
 "ways with at least 20 nodes, or relations containing at least 20 nodes"
 msgstr ""
-"vías con al menos 20 nodos, o relaciones que contienen al menos 20 nodos"
+"los caminos contienen al menos 20 nodos, o las relaciones contienen al menos "
+"20 nodos"
 
 msgid ""
 "nodes with at least 3 referring ways, or relations containing at least 3 ways"
@@ -3380,6 +3384,11 @@ msgstr "Capa: {0}"
 msgid "Failed to persist preferences to ''{0}''"
 msgstr "No se ha podido conservar las preferencias para ''{0}''"
 
+msgid ""
+"Try enabling IPv6 network, prefering IPv6 over IPv4 (only works on early "
+"startup)."
+msgstr ""
+
 msgid " (at line {0}, column {1})"
 msgstr " (a la línea {0}, columna {1})"
 
@@ -4066,6 +4075,15 @@ msgstr ""
 "Número de valores dependientes del carril inconsistentes en el sentido "
 "inverso"
 
+msgid "Long segments"
+msgstr ""
+
+msgid "This tests for long way segments, which are usually errors."
+msgstr ""
+
+msgid "Very long segment of {0} kilometers"
+msgstr ""
+
 msgid "Tag checker (MapCSS based)"
 msgstr "Verificador de etiquetas (basado en MapCSS)"
 
@@ -4956,6 +4974,18 @@ msgstr[1] ""
 "JOSM se está ejecutando en modo sin conexión. Estos recursos no estarán "
 "disponibles: {0}"
 
+msgid ""
+"Detected useable IPv6 network, prefering IPv6 over IPv4 after next restart."
+msgstr ""
+
+msgid "Detected useable IPv6 network, prefering IPv6 over IPv4."
+msgstr ""
+
+msgid ""
+"Detected no useable IPv6 network, prefering IPv4 over IPv6 after next "
+"restart."
+msgstr ""
+
 msgid "Unsaved osm data"
 msgstr "Datos OSM sin guardar"
 
@@ -6818,16 +6848,6 @@ msgstr ""
 "Únicamente lanzar navegadores de información para los primeros {0} de {1} "
 "usuarios seleccionados"
 
-msgid ""
-"<html>Failed to create an URL because the encoding ''{0}''<br>was missing on "
-"this system.</html>"
-msgstr ""
-"<html>No se pudo crear una URL debido a que la codificación ''{0}''<br>no se "
-"encontró en el sistema.</html>"
-
-msgid "Missing encoding"
-msgstr "Falta codificación"
-
 msgid "Author"
 msgstr "Autor"
 
@@ -11909,6 +11929,9 @@ msgstr "Directorio del caché de teselas: "
 msgid "Maximum concurrent downloads: "
 msgstr "Descargas máximas simultáneas: "
 
+msgid "Maximum concurrent downloads per host: "
+msgstr ""
+
 msgid "Maximum elements in disk cache: "
 msgstr "Máximos elementos en cache del disco: "
 
@@ -12025,9 +12048,6 @@ msgstr ""
 "Advertencia: formato ilegal de entrada en la lista de estilo \"{0}\". Se "
 "obtuvo \"{1}\""
 
-msgid "JOSM default (XML; old version)"
-msgstr "JOSM por defecto (XML; versión antigua)"
-
 msgid "JOSM default (MapCSS)"
 msgstr "JOSM por defecto (MapCSS)"
 
@@ -13672,9 +13692,6 @@ msgstr "Carga de nota fallida"
 msgid "Error parsing note response from server"
 msgstr "Error analizando la nota de respuesta desde el servidor"
 
-msgid "Error encoding string: {0}"
-msgstr "Error codificando la cadena: {0}"
-
 msgid "(Code={0})"
 msgstr "(Código={0})"
 
@@ -14074,27 +14091,26 @@ msgstr "Crear nuevos objetos"
 msgid "Read protocol version"
 msgstr "Leer la versión del protocolo"
 
-msgid "Cannot start remotecontrol server on port {0}: {1}"
+msgid "Cannot start IPv4 remotecontrol server on port {0}: {1}"
 msgstr ""
-"No se puede iniciar el servidor de control remoto en el puerto {0}: {1}"
 
-msgid "RemoteControl::Accepting connections on {0}:{1}"
-msgstr "RemoteControl::Accptando conexiones en {0}:{1}"
+msgid "Cannot start IPv6 remotecontrol server on port {0}: {1}"
+msgstr ""
 
-msgid "RemoteControl::Server stopped."
-msgstr "ControlRemoto::El servidor fue detenido"
+msgid "RemoteControl::Accepting remote connections on {0}:{1}"
+msgstr ""
 
-msgid "Cannot start remotecontrol https server on port {0}: {1}"
-msgstr "No se puede iniciar el servidor https en el puerto {0}: {1}"
+msgid "RemoteControl::Server {0}:{1} stopped."
+msgstr ""
 
-msgid "Unable to initialize Remote Control HTTPS Server"
-msgstr "No se puede inicializar Control Remoto sobre Servidor HTTPS"
+msgid "Cannot start IPv4 remotecontrol https server on port {0}: {1}"
+msgstr ""
 
-msgid "RemoteControl::Accepting secure connections on {0}:{1}"
-msgstr "RemoteControl::Aceptando conexiones seguras en {0}:{1}"
+msgid "Cannot start IPv6 remotecontrol https server on port {0}: {1}"
+msgstr ""
 
-msgid "RemoteControl::Server (https) stopped."
-msgstr "ControlRemoto:::Servidor (https) se detuvo."
+msgid "RemoteControl::Accepting secure remote connections on {0}:{1}"
+msgstr ""
 
 msgid "Remote Control has been asked to create a new node."
 msgstr "El Control Remoto recibió una solicitud para crear un nodo nuevo."
@@ -16046,9 +16062,6 @@ msgstr "NRW-Atlas: Mapa topográfico 1:10000"
 msgid "Metropole Ruhr: Luftbilder (10 cm)"
 msgstr "Área metropolitana de Rurh: Luftbilder (10 cm)"
 
-msgid "SN Luftbilder, Straßennetz, Administrative Grenzen"
-msgstr "Imágenes áreas SN, Red de carreteras, Fronteras administrativas"
-
 msgid "Drone Imagery (Haiti)"
 msgstr "Imágenes aéreas de drones (Haití)"
 
@@ -17001,6 +17014,11 @@ msgid ""
 msgstr ""
 "Traer errores de OSM Inspector y visualizarlos en los bordes actuales de JOSM"
 
+msgid ""
+"Recommends categories/tags on newly created OSM entities by analysing "
+"spatial entities into training features and using SVM classification"
+msgstr ""
+
 msgid "Import/export OSM data in PBF format"
 msgstr "Importar/exportar datos de OSM en formato PBF"
 
@@ -20584,7 +20602,7 @@ msgid "Retirement Home"
 msgstr "Centro de la tercera edad"
 
 msgid "Pharmacy"
-msgstr "Farmacia/Parafarmacia"
+msgstr "Farmacia"
 
 msgid "Dispensing"
 msgstr "Expende con receta médica"
@@ -20795,7 +20813,10 @@ msgstr ""
 msgid "Suction pumpout"
 msgstr ""
 
-msgid "Gravity dump station"
+msgid "Gravity drain for hose"
+msgstr ""
+
+msgid "Casette or Elsan Disposal"
 msgstr ""
 
 msgid "Operation times"
@@ -21299,6 +21320,10 @@ msgid "shed"
 msgstr "caseta"
 
 msgctxt "building"
+msgid "storage_tank"
+msgstr ""
+
+msgctxt "building"
 msgid "cowshed"
 msgstr "Establo"
 
@@ -21411,6 +21436,41 @@ msgstr "Molino de viento"
 msgid "Gasometer"
 msgstr "Gasómetro"
 
+msgid "Storage Tank"
+msgstr ""
+
+msgctxt "content"
+msgid "fuel"
+msgstr ""
+
+msgctxt "content"
+msgid "manure"
+msgstr ""
+
+msgctxt "content"
+msgid "oil"
+msgstr ""
+
+msgctxt "content"
+msgid "sewage"
+msgstr ""
+
+msgctxt "content"
+msgid "silage"
+msgstr ""
+
+msgctxt "content"
+msgid "slurry"
+msgstr ""
+
+msgctxt "content"
+msgid "water"
+msgstr ""
+
+msgctxt "content"
+msgid "wine"
+msgstr ""
+
 msgid "Bunker Silo"
 msgstr "Silo de búnker"
 
@@ -22698,7 +22758,7 @@ msgid "Mall"
 msgstr "Centro comercial"
 
 msgid "Chemist"
-msgstr "Droguería"
+msgstr "Droguería o parafarmacia"
 
 msgid "Hairdresser/Barber"
 msgstr "Peluquería/Barbería"
@@ -24950,6 +25010,34 @@ msgstr "Abrir el archivo NanoLog..."
 msgid "Could not read NanoLog file:"
 msgstr "No se pudo leer el archivo NanoLog:"
 
+msgid "OSM Recommendation"
+msgstr "OSM Recomendación"
+
+msgid "Recommend categories to your newly created instances."
+msgstr "Recomendar categorías para las nuevas instancias creadas"
+
+msgid "Training process configuration"
+msgstr ""
+
+msgid "Model Settings"
+msgstr "Configuración de Modelo"
+
+msgid "Select objects or create new objects and get recommendation."
+msgstr ""
+"Seleccione los objetos o cree nuevos objetos para obtener una recomendación"
+
+msgid "Add Recommendation"
+msgstr "Agregar recomendación"
+
+msgid "Add a recommended key/value pair to your object"
+msgstr ""
+
+msgid "Train a Model"
+msgstr ""
+
+msgid "Start the training engine!"
+msgstr ""
+
 msgid "Edit opening hours"
 msgstr "Horarios de apertura"
 
diff --git a/i18n/po/et.po b/i18n/po/et.po
index edf0ecf..35c5e00 100644
--- a/i18n/po/et.po
+++ b/i18n/po/et.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: josm\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-04-27 03:33+0200\n"
+"POT-Creation-Date: 2015-05-12 03:33+0200\n"
 "PO-Revision-Date: 2015-02-28 09:53+0000\n"
 "Last-Translator: Margus Värton <margus at dakar.ee>\n"
 "Language-Team: Estonian <et at li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Launchpad-Export-Date: 2015-04-27 04:39+0000\n"
-"X-Generator: Launchpad (build 17430)\n"
+"X-Launchpad-Export-Date: 2015-05-12 04:39+0000\n"
+"X-Generator: Launchpad (build 17487)\n"
 "Language: et\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -1528,6 +1528,9 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Some irrelevant nodes have been removed from the selection"
+msgstr ""
+
 msgid "Undo"
 msgstr "Võta tagasi"
 
@@ -3154,6 +3157,11 @@ msgstr "Kiht: {0}"
 msgid "Failed to persist preferences to ''{0}''"
 msgstr ""
 
+msgid ""
+"Try enabling IPv6 network, prefering IPv6 over IPv4 (only works on early "
+"startup)."
+msgstr ""
+
 msgid " (at line {0}, column {1})"
 msgstr ""
 
@@ -3782,6 +3790,15 @@ msgstr ""
 msgid "Number of lane dependent values inconsistent in backward direction"
 msgstr ""
 
+msgid "Long segments"
+msgstr ""
+
+msgid "This tests for long way segments, which are usually errors."
+msgstr ""
+
+msgid "Very long segment of {0} kilometers"
+msgstr ""
+
 msgid "Tag checker (MapCSS based)"
 msgstr ""
 
@@ -4611,6 +4628,18 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
+msgid ""
+"Detected useable IPv6 network, prefering IPv6 over IPv4 after next restart."
+msgstr ""
+
+msgid "Detected useable IPv6 network, prefering IPv6 over IPv4."
+msgstr ""
+
+msgid ""
+"Detected no useable IPv6 network, prefering IPv4 over IPv6 after next "
+"restart."
+msgstr ""
+
 msgid "Unsaved osm data"
 msgstr ""
 
@@ -6294,14 +6323,6 @@ msgstr "Näitab brauseris infot kasutaja kohta"
 msgid "Only launching info browsers for the first {0} of {1} selected users"
 msgstr ""
 
-msgid ""
-"<html>Failed to create an URL because the encoding ''{0}''<br>was missing on "
-"this system.</html>"
-msgstr ""
-
-msgid "Missing encoding"
-msgstr ""
-
 msgid "Author"
 msgstr "Autor"
 
@@ -10841,6 +10862,9 @@ msgstr ""
 msgid "Maximum concurrent downloads: "
 msgstr ""
 
+msgid "Maximum concurrent downloads per host: "
+msgstr ""
+
 msgid "Maximum elements in disk cache: "
 msgstr ""
 
@@ -10943,9 +10967,6 @@ msgstr ""
 msgid "Warning: illegal format of entry in style list ''{0}''. Got ''{1}''"
 msgstr ""
 
-msgid "JOSM default (XML; old version)"
-msgstr ""
-
 msgid "JOSM default (MapCSS)"
 msgstr ""
 
@@ -12436,9 +12457,6 @@ msgstr ""
 msgid "Error parsing note response from server"
 msgstr ""
 
-msgid "Error encoding string: {0}"
-msgstr ""
-
 msgid "(Code={0})"
 msgstr ""
 
@@ -12802,25 +12820,25 @@ msgstr "Uute objektide loomine"
 msgid "Read protocol version"
 msgstr "Protokolli versiooni lugemine"
 
-msgid "Cannot start remotecontrol server on port {0}: {1}"
+msgid "Cannot start IPv4 remotecontrol server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Accepting connections on {0}:{1}"
+msgid "Cannot start IPv6 remotecontrol server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Server stopped."
+msgid "RemoteControl::Accepting remote connections on {0}:{1}"
 msgstr ""
 
-msgid "Cannot start remotecontrol https server on port {0}: {1}"
+msgid "RemoteControl::Server {0}:{1} stopped."
 msgstr ""
 
-msgid "Unable to initialize Remote Control HTTPS Server"
+msgid "Cannot start IPv4 remotecontrol https server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Accepting secure connections on {0}:{1}"
+msgid "Cannot start IPv6 remotecontrol https server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Server (https) stopped."
+msgid "RemoteControl::Accepting secure remote connections on {0}:{1}"
 msgstr ""
 
 msgid "Remote Control has been asked to create a new node."
@@ -14524,9 +14542,6 @@ msgstr ""
 msgid "Metropole Ruhr: Luftbilder (10 cm)"
 msgstr ""
 
-msgid "SN Luftbilder, Straßennetz, Administrative Grenzen"
-msgstr ""
-
 msgid "Drone Imagery (Haiti)"
 msgstr ""
 
@@ -15394,6 +15409,11 @@ msgid ""
 "bounding box"
 msgstr ""
 
+msgid ""
+"Recommends categories/tags on newly created OSM entities by analysing "
+"spatial entities into training features and using SVM classification"
+msgstr ""
+
 msgid "Import/export OSM data in PBF format"
 msgstr "OSM andmete import/eksport PBF vormingusse"
 
@@ -19096,7 +19116,10 @@ msgstr ""
 msgid "Suction pumpout"
 msgstr ""
 
-msgid "Gravity dump station"
+msgid "Gravity drain for hose"
+msgstr ""
+
+msgid "Casette or Elsan Disposal"
 msgstr ""
 
 msgid "Operation times"
@@ -19600,6 +19623,10 @@ msgid "shed"
 msgstr ""
 
 msgctxt "building"
+msgid "storage_tank"
+msgstr ""
+
+msgctxt "building"
 msgid "cowshed"
 msgstr ""
 
@@ -19712,6 +19739,41 @@ msgstr "Tuuleveski"
 msgid "Gasometer"
 msgstr "Gaasimõõtejaam"
 
+msgid "Storage Tank"
+msgstr ""
+
+msgctxt "content"
+msgid "fuel"
+msgstr ""
+
+msgctxt "content"
+msgid "manure"
+msgstr ""
+
+msgctxt "content"
+msgid "oil"
+msgstr ""
+
+msgctxt "content"
+msgid "sewage"
+msgstr ""
+
+msgctxt "content"
+msgid "silage"
+msgstr ""
+
+msgctxt "content"
+msgid "slurry"
+msgstr ""
+
+msgctxt "content"
+msgid "water"
+msgstr ""
+
+msgctxt "content"
+msgid "wine"
+msgstr ""
+
 msgid "Bunker Silo"
 msgstr ""
 
@@ -23163,6 +23225,33 @@ msgstr ""
 msgid "Could not read NanoLog file:"
 msgstr ""
 
+msgid "OSM Recommendation"
+msgstr ""
+
+msgid "Recommend categories to your newly created instances."
+msgstr ""
+
+msgid "Training process configuration"
+msgstr ""
+
+msgid "Model Settings"
+msgstr ""
+
+msgid "Select objects or create new objects and get recommendation."
+msgstr ""
+
+msgid "Add Recommendation"
+msgstr ""
+
+msgid "Add a recommended key/value pair to your object"
+msgstr ""
+
+msgid "Train a Model"
+msgstr ""
+
+msgid "Start the training engine!"
+msgstr ""
+
 msgid "Edit opening hours"
 msgstr "Redigeeri lahtiolekuaegasid"
 
diff --git a/i18n/po/eu.po b/i18n/po/eu.po
index bbb4d33..ac36266 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-04-27 03:33+0200\n"
+"POT-Creation-Date: 2015-05-12 03:33+0200\n"
 "PO-Revision-Date: 2015-03-09 16:55+0000\n"
 "Last-Translator: Asier Sarasua Garmendia <Unknown>\n"
 "Language-Team: Basque <eu at li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Launchpad-Export-Date: 2015-04-27 04:34+0000\n"
-"X-Generator: Launchpad (build 17430)\n"
+"X-Launchpad-Export-Date: 2015-05-12 04:34+0000\n"
+"X-Generator: Launchpad (build 17487)\n"
 "Language: eu\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -1533,6 +1533,9 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Some irrelevant nodes have been removed from the selection"
+msgstr ""
+
 msgid "Undo"
 msgstr "Desegin"
 
@@ -3191,6 +3194,11 @@ msgstr "Geruza: {0}"
 msgid "Failed to persist preferences to ''{0}''"
 msgstr ""
 
+msgid ""
+"Try enabling IPv6 network, prefering IPv6 over IPv4 (only works on early "
+"startup)."
+msgstr ""
+
 msgid " (at line {0}, column {1})"
 msgstr ""
 
@@ -3833,6 +3841,15 @@ msgstr ""
 msgid "Number of lane dependent values inconsistent in backward direction"
 msgstr ""
 
+msgid "Long segments"
+msgstr ""
+
+msgid "This tests for long way segments, which are usually errors."
+msgstr ""
+
+msgid "Very long segment of {0} kilometers"
+msgstr ""
+
 msgid "Tag checker (MapCSS based)"
 msgstr ""
 
@@ -4685,6 +4702,18 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
+msgid ""
+"Detected useable IPv6 network, prefering IPv6 over IPv4 after next restart."
+msgstr ""
+
+msgid "Detected useable IPv6 network, prefering IPv6 over IPv4."
+msgstr ""
+
+msgid ""
+"Detected no useable IPv6 network, prefering IPv4 over IPv6 after next "
+"restart."
+msgstr ""
+
 msgid "Unsaved osm data"
 msgstr "Gorde gabeko OSM datuak"
 
@@ -6397,14 +6426,6 @@ msgstr ""
 msgid "Only launching info browsers for the first {0} of {1} selected users"
 msgstr ""
 
-msgid ""
-"<html>Failed to create an URL because the encoding ''{0}''<br>was missing on "
-"this system.</html>"
-msgstr ""
-
-msgid "Missing encoding"
-msgstr ""
-
 msgid "Author"
 msgstr "Egilea"
 
@@ -10864,6 +10885,9 @@ msgstr ""
 msgid "Maximum concurrent downloads: "
 msgstr ""
 
+msgid "Maximum concurrent downloads per host: "
+msgstr ""
+
 msgid "Maximum elements in disk cache: "
 msgstr ""
 
@@ -10966,9 +10990,6 @@ msgstr ""
 msgid "Warning: illegal format of entry in style list ''{0}''. Got ''{1}''"
 msgstr ""
 
-msgid "JOSM default (XML; old version)"
-msgstr ""
-
 msgid "JOSM default (MapCSS)"
 msgstr ""
 
@@ -12430,9 +12451,6 @@ msgstr ""
 msgid "Error parsing note response from server"
 msgstr ""
 
-msgid "Error encoding string: {0}"
-msgstr ""
-
 msgid "(Code={0})"
 msgstr ""
 
@@ -12790,25 +12808,25 @@ msgstr ""
 msgid "Read protocol version"
 msgstr ""
 
-msgid "Cannot start remotecontrol server on port {0}: {1}"
+msgid "Cannot start IPv4 remotecontrol server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Accepting connections on {0}:{1}"
+msgid "Cannot start IPv6 remotecontrol server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Server stopped."
+msgid "RemoteControl::Accepting remote connections on {0}:{1}"
 msgstr ""
 
-msgid "Cannot start remotecontrol https server on port {0}: {1}"
+msgid "RemoteControl::Server {0}:{1} stopped."
 msgstr ""
 
-msgid "Unable to initialize Remote Control HTTPS Server"
+msgid "Cannot start IPv4 remotecontrol https server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Accepting secure connections on {0}:{1}"
+msgid "Cannot start IPv6 remotecontrol https server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Server (https) stopped."
+msgid "RemoteControl::Accepting secure remote connections on {0}:{1}"
 msgstr ""
 
 msgid "Remote Control has been asked to create a new node."
@@ -14481,9 +14499,6 @@ msgstr ""
 msgid "Metropole Ruhr: Luftbilder (10 cm)"
 msgstr ""
 
-msgid "SN Luftbilder, Straßennetz, Administrative Grenzen"
-msgstr ""
-
 msgid "Drone Imagery (Haiti)"
 msgstr ""
 
@@ -15357,6 +15372,11 @@ msgid ""
 "bounding box"
 msgstr ""
 
+msgid ""
+"Recommends categories/tags on newly created OSM entities by analysing "
+"spatial entities into training features and using SVM classification"
+msgstr ""
+
 msgid "Import/export OSM data in PBF format"
 msgstr ""
 
@@ -19088,7 +19108,10 @@ msgstr ""
 msgid "Suction pumpout"
 msgstr ""
 
-msgid "Gravity dump station"
+msgid "Gravity drain for hose"
+msgstr ""
+
+msgid "Casette or Elsan Disposal"
 msgstr ""
 
 msgid "Operation times"
@@ -19592,6 +19615,10 @@ msgid "shed"
 msgstr ""
 
 msgctxt "building"
+msgid "storage_tank"
+msgstr ""
+
+msgctxt "building"
 msgid "cowshed"
 msgstr ""
 
@@ -19704,6 +19731,41 @@ msgstr "Haize-errota"
 msgid "Gasometer"
 msgstr "Gasometroa"
 
+msgid "Storage Tank"
+msgstr ""
+
+msgctxt "content"
+msgid "fuel"
+msgstr ""
+
+msgctxt "content"
+msgid "manure"
+msgstr ""
+
+msgctxt "content"
+msgid "oil"
+msgstr ""
+
+msgctxt "content"
+msgid "sewage"
+msgstr ""
+
+msgctxt "content"
+msgid "silage"
+msgstr ""
+
+msgctxt "content"
+msgid "slurry"
+msgstr ""
+
+msgctxt "content"
+msgid "water"
+msgstr ""
+
+msgctxt "content"
+msgid "wine"
+msgstr ""
+
 msgid "Bunker Silo"
 msgstr ""
 
@@ -23155,6 +23217,33 @@ msgstr ""
 msgid "Could not read NanoLog file:"
 msgstr ""
 
+msgid "OSM Recommendation"
+msgstr ""
+
+msgid "Recommend categories to your newly created instances."
+msgstr ""
+
+msgid "Training process configuration"
+msgstr ""
+
+msgid "Model Settings"
+msgstr ""
+
+msgid "Select objects or create new objects and get recommendation."
+msgstr ""
+
+msgid "Add Recommendation"
+msgstr ""
+
+msgid "Add a recommended key/value pair to your object"
+msgstr ""
+
+msgid "Train a Model"
+msgstr ""
+
+msgid "Start the training engine!"
+msgstr ""
+
 msgid "Edit opening hours"
 msgstr ""
 
diff --git a/i18n/po/fa.po b/i18n/po/fa.po
index b47f8c8..929e53c 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-04-27 03:33+0200\n"
+"POT-Creation-Date: 2015-05-12 03:33+0200\n"
 "PO-Revision-Date: 2014-03-18 07:32+0000\n"
 "Last-Translator: Saeed Ghazi Joolaee <Unknown>\n"
 "Language-Team: Persian <fa at li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=1; plural=0;\n"
-"X-Launchpad-Export-Date: 2015-04-27 04:52+0000\n"
-"X-Generator: Launchpad (build 17430)\n"
+"X-Launchpad-Export-Date: 2015-05-12 04:52+0000\n"
+"X-Generator: Launchpad (build 17487)\n"
 "Language: fa\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -1537,6 +1537,9 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Some irrelevant nodes have been removed from the selection"
+msgstr ""
+
 msgid "Undo"
 msgstr ""
 
@@ -3134,6 +3137,11 @@ msgstr "لايه: {0}"
 msgid "Failed to persist preferences to ''{0}''"
 msgstr ""
 
+msgid ""
+"Try enabling IPv6 network, prefering IPv6 over IPv4 (only works on early "
+"startup)."
+msgstr ""
+
 msgid " (at line {0}, column {1})"
 msgstr ""
 
@@ -3760,6 +3768,15 @@ msgstr ""
 msgid "Number of lane dependent values inconsistent in backward direction"
 msgstr ""
 
+msgid "Long segments"
+msgstr ""
+
+msgid "This tests for long way segments, which are usually errors."
+msgstr ""
+
+msgid "Very long segment of {0} kilometers"
+msgstr ""
+
 msgid "Tag checker (MapCSS based)"
 msgstr ""
 
@@ -4590,6 +4607,18 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
+msgid ""
+"Detected useable IPv6 network, prefering IPv6 over IPv4 after next restart."
+msgstr ""
+
+msgid "Detected useable IPv6 network, prefering IPv6 over IPv4."
+msgstr ""
+
+msgid ""
+"Detected no useable IPv6 network, prefering IPv4 over IPv6 after next "
+"restart."
+msgstr ""
+
 msgid "Unsaved osm data"
 msgstr ""
 
@@ -6268,14 +6297,6 @@ msgstr ""
 msgid "Only launching info browsers for the first {0} of {1} selected users"
 msgstr ""
 
-msgid ""
-"<html>Failed to create an URL because the encoding ''{0}''<br>was missing on "
-"this system.</html>"
-msgstr ""
-
-msgid "Missing encoding"
-msgstr ""
-
 msgid "Author"
 msgstr ""
 
@@ -10735,6 +10756,9 @@ msgstr ""
 msgid "Maximum concurrent downloads: "
 msgstr ""
 
+msgid "Maximum concurrent downloads per host: "
+msgstr ""
+
 msgid "Maximum elements in disk cache: "
 msgstr ""
 
@@ -10837,9 +10861,6 @@ msgstr ""
 msgid "Warning: illegal format of entry in style list ''{0}''. Got ''{1}''"
 msgstr ""
 
-msgid "JOSM default (XML; old version)"
-msgstr ""
-
 msgid "JOSM default (MapCSS)"
 msgstr ""
 
@@ -12301,9 +12322,6 @@ msgstr ""
 msgid "Error parsing note response from server"
 msgstr ""
 
-msgid "Error encoding string: {0}"
-msgstr ""
-
 msgid "(Code={0})"
 msgstr ""
 
@@ -12661,25 +12679,25 @@ msgstr ""
 msgid "Read protocol version"
 msgstr ""
 
-msgid "Cannot start remotecontrol server on port {0}: {1}"
+msgid "Cannot start IPv4 remotecontrol server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Accepting connections on {0}:{1}"
+msgid "Cannot start IPv6 remotecontrol server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Server stopped."
+msgid "RemoteControl::Accepting remote connections on {0}:{1}"
 msgstr ""
 
-msgid "Cannot start remotecontrol https server on port {0}: {1}"
+msgid "RemoteControl::Server {0}:{1} stopped."
 msgstr ""
 
-msgid "Unable to initialize Remote Control HTTPS Server"
+msgid "Cannot start IPv4 remotecontrol https server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Accepting secure connections on {0}:{1}"
+msgid "Cannot start IPv6 remotecontrol https server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Server (https) stopped."
+msgid "RemoteControl::Accepting secure remote connections on {0}:{1}"
 msgstr ""
 
 msgid "Remote Control has been asked to create a new node."
@@ -14347,9 +14365,6 @@ msgstr ""
 msgid "Metropole Ruhr: Luftbilder (10 cm)"
 msgstr ""
 
-msgid "SN Luftbilder, Straßennetz, Administrative Grenzen"
-msgstr ""
-
 msgid "Drone Imagery (Haiti)"
 msgstr ""
 
@@ -15210,6 +15225,11 @@ msgid ""
 "bounding box"
 msgstr ""
 
+msgid ""
+"Recommends categories/tags on newly created OSM entities by analysing "
+"spatial entities into training features and using SVM classification"
+msgstr ""
+
 msgid "Import/export OSM data in PBF format"
 msgstr ""
 
@@ -18910,7 +18930,10 @@ msgstr ""
 msgid "Suction pumpout"
 msgstr ""
 
-msgid "Gravity dump station"
+msgid "Gravity drain for hose"
+msgstr ""
+
+msgid "Casette or Elsan Disposal"
 msgstr ""
 
 msgid "Operation times"
@@ -19414,6 +19437,10 @@ msgid "shed"
 msgstr ""
 
 msgctxt "building"
+msgid "storage_tank"
+msgstr ""
+
+msgctxt "building"
 msgid "cowshed"
 msgstr ""
 
@@ -19526,6 +19553,41 @@ msgstr ""
 msgid "Gasometer"
 msgstr ""
 
+msgid "Storage Tank"
+msgstr ""
+
+msgctxt "content"
+msgid "fuel"
+msgstr ""
+
+msgctxt "content"
+msgid "manure"
+msgstr ""
+
+msgctxt "content"
+msgid "oil"
+msgstr ""
+
+msgctxt "content"
+msgid "sewage"
+msgstr ""
+
+msgctxt "content"
+msgid "silage"
+msgstr ""
+
+msgctxt "content"
+msgid "slurry"
+msgstr ""
+
+msgctxt "content"
+msgid "water"
+msgstr ""
+
+msgctxt "content"
+msgid "wine"
+msgstr ""
+
 msgid "Bunker Silo"
 msgstr ""
 
@@ -22977,6 +23039,33 @@ msgstr ""
 msgid "Could not read NanoLog file:"
 msgstr ""
 
+msgid "OSM Recommendation"
+msgstr ""
+
+msgid "Recommend categories to your newly created instances."
+msgstr ""
+
+msgid "Training process configuration"
+msgstr ""
+
+msgid "Model Settings"
+msgstr ""
+
+msgid "Select objects or create new objects and get recommendation."
+msgstr ""
+
+msgid "Add Recommendation"
+msgstr ""
+
+msgid "Add a recommended key/value pair to your object"
+msgstr ""
+
+msgid "Train a Model"
+msgstr ""
+
+msgid "Start the training engine!"
+msgstr ""
+
 msgid "Edit opening hours"
 msgstr ""
 
diff --git a/i18n/po/fi.po b/i18n/po/fi.po
index 42d6faf..1da9bca 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-04-27 03:33+0200\n"
+"POT-Creation-Date: 2015-05-12 03:33+0200\n"
 "PO-Revision-Date: 2015-04-15 14:57+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-04-27 04:40+0000\n"
-"X-Generator: Launchpad (build 17430)\n"
+"X-Launchpad-Export-Date: 2015-05-12 04:40+0000\n"
+"X-Generator: Launchpad (build 17487)\n"
 "Language: fi\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -1594,6 +1594,9 @@ msgstr[1] ""
 "Valittujen pisteiden irroittaminen poistaisi niiden kautta kulkevan polun "
 "kokonaan."
 
+msgid "Some irrelevant nodes have been removed from the selection"
+msgstr ""
+
 msgid "Undo"
 msgstr "Kumoa"
 
@@ -3304,6 +3307,11 @@ msgstr "Taso: {0}"
 msgid "Failed to persist preferences to ''{0}''"
 msgstr ""
 
+msgid ""
+"Try enabling IPv6 network, prefering IPv6 over IPv4 (only works on early "
+"startup)."
+msgstr ""
+
 msgid " (at line {0}, column {1})"
 msgstr " (rivillä {0}, sarakkeessa {1})"
 
@@ -3962,6 +3970,15 @@ msgstr ""
 "Kaistojen määrästä riippuvien tagien arvot eivät täsmää keskenään suunnassa "
 "polkua vastaan."
 
+msgid "Long segments"
+msgstr ""
+
+msgid "This tests for long way segments, which are usually errors."
+msgstr ""
+
+msgid "Very long segment of {0} kilometers"
+msgstr ""
+
 msgid "Tag checker (MapCSS based)"
 msgstr ""
 
@@ -4822,6 +4839,18 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
+msgid ""
+"Detected useable IPv6 network, prefering IPv6 over IPv4 after next restart."
+msgstr ""
+
+msgid "Detected useable IPv6 network, prefering IPv6 over IPv4."
+msgstr ""
+
+msgid ""
+"Detected no useable IPv6 network, prefering IPv4 over IPv6 after next "
+"restart."
+msgstr ""
+
 msgid "Unsaved osm data"
 msgstr "Tallentamatonta osm-tietoa"
 
@@ -6584,16 +6613,6 @@ msgstr "Avaa käyttäjän tiedot www-selaimessa"
 msgid "Only launching info browsers for the first {0} of {1} selected users"
 msgstr ""
 
-msgid ""
-"<html>Failed to create an URL because the encoding ''{0}''<br>was missing on "
-"this system.</html>"
-msgstr ""
-"<html>URL-osoitteen luominen ei onnistunut, koska koodaustapa \"{0}\"<br>ei "
-"ole käytettävissä.</html>"
-
-msgid "Missing encoding"
-msgstr "Puuttuva koodaustapa"
-
 msgid "Author"
 msgstr "Tekijä"
 
@@ -11364,6 +11383,9 @@ msgstr ""
 msgid "Maximum concurrent downloads: "
 msgstr ""
 
+msgid "Maximum concurrent downloads per host: "
+msgstr ""
+
 msgid "Maximum elements in disk cache: "
 msgstr ""
 
@@ -11480,9 +11502,6 @@ msgstr ""
 msgid "Warning: illegal format of entry in style list ''{0}''. Got ''{1}''"
 msgstr ""
 
-msgid "JOSM default (XML; old version)"
-msgstr ""
-
 msgid "JOSM default (MapCSS)"
 msgstr ""
 
@@ -13006,9 +13025,6 @@ msgstr ""
 msgid "Error parsing note response from server"
 msgstr ""
 
-msgid "Error encoding string: {0}"
-msgstr ""
-
 msgid "(Code={0})"
 msgstr ""
 
@@ -13376,26 +13392,26 @@ msgstr "Uusien karttakohteiden luominen datatasolle"
 msgid "Read protocol version"
 msgstr "Etähallinnan komentoprotokollan versionumeron raportointi"
 
-msgid "Cannot start remotecontrol server on port {0}: {1}"
+msgid "Cannot start IPv4 remotecontrol server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Accepting connections on {0}:{1}"
+msgid "Cannot start IPv6 remotecontrol server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Server stopped."
-msgstr "Etähallinta: palvelin pysäytettiin."
+msgid "RemoteControl::Accepting remote connections on {0}:{1}"
+msgstr ""
 
-msgid "Cannot start remotecontrol https server on port {0}: {1}"
+msgid "RemoteControl::Server {0}:{1} stopped."
 msgstr ""
 
-msgid "Unable to initialize Remote Control HTTPS Server"
-msgstr "Etähallinnan HTTPS-palvelimen käynnistys ei onnistunut"
+msgid "Cannot start IPv4 remotecontrol https server on port {0}: {1}"
+msgstr ""
 
-msgid "RemoteControl::Accepting secure connections on {0}:{1}"
+msgid "Cannot start IPv6 remotecontrol https server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Server (https) stopped."
-msgstr "Etähallinta: palvelin (https) pysäytettiin."
+msgid "RemoteControl::Accepting secure remote connections on {0}:{1}"
+msgstr ""
 
 msgid "Remote Control has been asked to create a new node."
 msgstr "JOSM:n etähallinta haluaa luoda uuden pisteen"
@@ -15133,9 +15149,6 @@ msgstr ""
 msgid "Metropole Ruhr: Luftbilder (10 cm)"
 msgstr "Saksan Ruhrin alueen ilmakuvat (10 cm erotuskyky)"
 
-msgid "SN Luftbilder, Straßennetz, Administrative Grenzen"
-msgstr ""
-
 msgid "Drone Imagery (Haiti)"
 msgstr ""
 
@@ -16017,6 +16030,11 @@ msgid ""
 "bounding box"
 msgstr ""
 
+msgid ""
+"Recommends categories/tags on newly created OSM entities by analysing "
+"spatial entities into training features and using SVM classification"
+msgstr ""
+
 msgid "Import/export OSM data in PBF format"
 msgstr ""
 
@@ -19730,7 +19748,10 @@ msgstr ""
 msgid "Suction pumpout"
 msgstr ""
 
-msgid "Gravity dump station"
+msgid "Gravity drain for hose"
+msgstr ""
+
+msgid "Casette or Elsan Disposal"
 msgstr ""
 
 msgid "Operation times"
@@ -20234,6 +20255,10 @@ msgid "shed"
 msgstr ""
 
 msgctxt "building"
+msgid "storage_tank"
+msgstr ""
+
+msgctxt "building"
 msgid "cowshed"
 msgstr ""
 
@@ -20346,6 +20371,41 @@ msgstr "Tuulimylly"
 msgid "Gasometer"
 msgstr "Kaasukello"
 
+msgid "Storage Tank"
+msgstr ""
+
+msgctxt "content"
+msgid "fuel"
+msgstr ""
+
+msgctxt "content"
+msgid "manure"
+msgstr ""
+
+msgctxt "content"
+msgid "oil"
+msgstr ""
+
+msgctxt "content"
+msgid "sewage"
+msgstr ""
+
+msgctxt "content"
+msgid "silage"
+msgstr ""
+
+msgctxt "content"
+msgid "slurry"
+msgstr ""
+
+msgctxt "content"
+msgid "water"
+msgstr ""
+
+msgctxt "content"
+msgid "wine"
+msgstr ""
+
 msgid "Bunker Silo"
 msgstr ""
 
@@ -23817,6 +23877,33 @@ msgstr ""
 msgid "Could not read NanoLog file:"
 msgstr ""
 
+msgid "OSM Recommendation"
+msgstr ""
+
+msgid "Recommend categories to your newly created instances."
+msgstr ""
+
+msgid "Training process configuration"
+msgstr ""
+
+msgid "Model Settings"
+msgstr ""
+
+msgid "Select objects or create new objects and get recommendation."
+msgstr ""
+
+msgid "Add Recommendation"
+msgstr ""
+
+msgid "Add a recommended key/value pair to your object"
+msgstr ""
+
+msgid "Train a Model"
+msgstr ""
+
+msgid "Start the training engine!"
+msgstr ""
+
 msgid "Edit opening hours"
 msgstr ""
 
diff --git a/i18n/po/fil.po b/i18n/po/fil.po
index e8361c1..d816521 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-04-27 03:33+0200\n"
+"POT-Creation-Date: 2015-05-12 03:33+0200\n"
 "PO-Revision-Date: 2011-06-19 14:15+0000\n"
 "Last-Translator: Anthony Balico <Unknown>\n"
 "Language-Team: Filipino <fil at li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n > 1;\n"
-"X-Launchpad-Export-Date: 2015-04-27 05:05+0000\n"
-"X-Generator: Launchpad (build 17430)\n"
+"X-Launchpad-Export-Date: 2015-05-12 05:05+0000\n"
+"X-Generator: Launchpad (build 17487)\n"
 "Language: fil\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -1468,6 +1468,9 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Some irrelevant nodes have been removed from the selection"
+msgstr ""
+
 msgid "Undo"
 msgstr ""
 
@@ -3065,6 +3068,11 @@ msgstr ""
 msgid "Failed to persist preferences to ''{0}''"
 msgstr ""
 
+msgid ""
+"Try enabling IPv6 network, prefering IPv6 over IPv4 (only works on early "
+"startup)."
+msgstr ""
+
 msgid " (at line {0}, column {1})"
 msgstr ""
 
@@ -3693,6 +3701,15 @@ msgstr ""
 msgid "Number of lane dependent values inconsistent in backward direction"
 msgstr ""
 
+msgid "Long segments"
+msgstr ""
+
+msgid "This tests for long way segments, which are usually errors."
+msgstr ""
+
+msgid "Very long segment of {0} kilometers"
+msgstr ""
+
 msgid "Tag checker (MapCSS based)"
 msgstr ""
 
@@ -4522,6 +4539,18 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
+msgid ""
+"Detected useable IPv6 network, prefering IPv6 over IPv4 after next restart."
+msgstr ""
+
+msgid "Detected useable IPv6 network, prefering IPv6 over IPv4."
+msgstr ""
+
+msgid ""
+"Detected no useable IPv6 network, prefering IPv4 over IPv6 after next "
+"restart."
+msgstr ""
+
 msgid "Unsaved osm data"
 msgstr ""
 
@@ -6200,14 +6229,6 @@ msgstr ""
 msgid "Only launching info browsers for the first {0} of {1} selected users"
 msgstr ""
 
-msgid ""
-"<html>Failed to create an URL because the encoding ''{0}''<br>was missing on "
-"this system.</html>"
-msgstr ""
-
-msgid "Missing encoding"
-msgstr ""
-
 msgid "Author"
 msgstr ""
 
@@ -10662,6 +10683,9 @@ msgstr ""
 msgid "Maximum concurrent downloads: "
 msgstr ""
 
+msgid "Maximum concurrent downloads per host: "
+msgstr ""
+
 msgid "Maximum elements in disk cache: "
 msgstr ""
 
@@ -10764,9 +10788,6 @@ msgstr ""
 msgid "Warning: illegal format of entry in style list ''{0}''. Got ''{1}''"
 msgstr ""
 
-msgid "JOSM default (XML; old version)"
-msgstr ""
-
 msgid "JOSM default (MapCSS)"
 msgstr ""
 
@@ -12228,9 +12249,6 @@ msgstr ""
 msgid "Error parsing note response from server"
 msgstr ""
 
-msgid "Error encoding string: {0}"
-msgstr ""
-
 msgid "(Code={0})"
 msgstr ""
 
@@ -12588,25 +12606,25 @@ msgstr ""
 msgid "Read protocol version"
 msgstr ""
 
-msgid "Cannot start remotecontrol server on port {0}: {1}"
+msgid "Cannot start IPv4 remotecontrol server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Accepting connections on {0}:{1}"
+msgid "Cannot start IPv6 remotecontrol server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Server stopped."
+msgid "RemoteControl::Accepting remote connections on {0}:{1}"
 msgstr ""
 
-msgid "Cannot start remotecontrol https server on port {0}: {1}"
+msgid "RemoteControl::Server {0}:{1} stopped."
 msgstr ""
 
-msgid "Unable to initialize Remote Control HTTPS Server"
+msgid "Cannot start IPv4 remotecontrol https server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Accepting secure connections on {0}:{1}"
+msgid "Cannot start IPv6 remotecontrol https server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Server (https) stopped."
+msgid "RemoteControl::Accepting secure remote connections on {0}:{1}"
 msgstr ""
 
 msgid "Remote Control has been asked to create a new node."
@@ -14274,9 +14292,6 @@ msgstr ""
 msgid "Metropole Ruhr: Luftbilder (10 cm)"
 msgstr ""
 
-msgid "SN Luftbilder, Straßennetz, Administrative Grenzen"
-msgstr ""
-
 msgid "Drone Imagery (Haiti)"
 msgstr ""
 
@@ -15137,6 +15152,11 @@ msgid ""
 "bounding box"
 msgstr ""
 
+msgid ""
+"Recommends categories/tags on newly created OSM entities by analysing "
+"spatial entities into training features and using SVM classification"
+msgstr ""
+
 msgid "Import/export OSM data in PBF format"
 msgstr ""
 
@@ -18837,7 +18857,10 @@ msgstr ""
 msgid "Suction pumpout"
 msgstr ""
 
-msgid "Gravity dump station"
+msgid "Gravity drain for hose"
+msgstr ""
+
+msgid "Casette or Elsan Disposal"
 msgstr ""
 
 msgid "Operation times"
@@ -19341,6 +19364,10 @@ msgid "shed"
 msgstr ""
 
 msgctxt "building"
+msgid "storage_tank"
+msgstr ""
+
+msgctxt "building"
 msgid "cowshed"
 msgstr ""
 
@@ -19453,6 +19480,41 @@ msgstr ""
 msgid "Gasometer"
 msgstr ""
 
+msgid "Storage Tank"
+msgstr ""
+
+msgctxt "content"
+msgid "fuel"
+msgstr ""
+
+msgctxt "content"
+msgid "manure"
+msgstr ""
+
+msgctxt "content"
+msgid "oil"
+msgstr ""
+
+msgctxt "content"
+msgid "sewage"
+msgstr ""
+
+msgctxt "content"
+msgid "silage"
+msgstr ""
+
+msgctxt "content"
+msgid "slurry"
+msgstr ""
+
+msgctxt "content"
+msgid "water"
+msgstr ""
+
+msgctxt "content"
+msgid "wine"
+msgstr ""
+
 msgid "Bunker Silo"
 msgstr ""
 
@@ -22904,6 +22966,33 @@ msgstr ""
 msgid "Could not read NanoLog file:"
 msgstr ""
 
+msgid "OSM Recommendation"
+msgstr ""
+
+msgid "Recommend categories to your newly created instances."
+msgstr ""
+
+msgid "Training process configuration"
+msgstr ""
+
+msgid "Model Settings"
+msgstr ""
+
+msgid "Select objects or create new objects and get recommendation."
+msgstr ""
+
+msgid "Add Recommendation"
+msgstr ""
+
+msgid "Add a recommended key/value pair to your object"
+msgstr ""
+
+msgid "Train a Model"
+msgstr ""
+
+msgid "Start the training engine!"
+msgstr ""
+
 msgid "Edit opening hours"
 msgstr ""
 
diff --git a/i18n/po/fo.po b/i18n/po/fo.po
index 14cd538..c49a6ad 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-04-27 03:33+0200\n"
+"POT-Creation-Date: 2015-05-12 03:33+0200\n"
 "PO-Revision-Date: 2015-02-28 16:15+0000\n"
 "Last-Translator: LiFo <Unknown>\n"
 "Language-Team: Faroese <fo at li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Launchpad-Export-Date: 2015-04-27 04:39+0000\n"
-"X-Generator: Launchpad (build 17430)\n"
+"X-Launchpad-Export-Date: 2015-05-12 04:39+0000\n"
+"X-Generator: Launchpad (build 17487)\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
 msgstr "{0}: valmøguleiki ''{1}'' er tvítýddur"
@@ -1467,6 +1467,9 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Some irrelevant nodes have been removed from the selection"
+msgstr ""
+
 msgid "Undo"
 msgstr ""
 
@@ -3064,6 +3067,11 @@ msgstr ""
 msgid "Failed to persist preferences to ''{0}''"
 msgstr ""
 
+msgid ""
+"Try enabling IPv6 network, prefering IPv6 over IPv4 (only works on early "
+"startup)."
+msgstr ""
+
 msgid " (at line {0}, column {1})"
 msgstr ""
 
@@ -3692,6 +3700,15 @@ msgstr ""
 msgid "Number of lane dependent values inconsistent in backward direction"
 msgstr ""
 
+msgid "Long segments"
+msgstr ""
+
+msgid "This tests for long way segments, which are usually errors."
+msgstr ""
+
+msgid "Very long segment of {0} kilometers"
+msgstr ""
+
 msgid "Tag checker (MapCSS based)"
 msgstr ""
 
@@ -4521,6 +4538,18 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
+msgid ""
+"Detected useable IPv6 network, prefering IPv6 over IPv4 after next restart."
+msgstr ""
+
+msgid "Detected useable IPv6 network, prefering IPv6 over IPv4."
+msgstr ""
+
+msgid ""
+"Detected no useable IPv6 network, prefering IPv4 over IPv6 after next "
+"restart."
+msgstr ""
+
 msgid "Unsaved osm data"
 msgstr ""
 
@@ -6199,14 +6228,6 @@ msgstr ""
 msgid "Only launching info browsers for the first {0} of {1} selected users"
 msgstr ""
 
-msgid ""
-"<html>Failed to create an URL because the encoding ''{0}''<br>was missing on "
-"this system.</html>"
-msgstr ""
-
-msgid "Missing encoding"
-msgstr ""
-
 msgid "Author"
 msgstr ""
 
@@ -10661,6 +10682,9 @@ msgstr ""
 msgid "Maximum concurrent downloads: "
 msgstr ""
 
+msgid "Maximum concurrent downloads per host: "
+msgstr ""
+
 msgid "Maximum elements in disk cache: "
 msgstr ""
 
@@ -10763,9 +10787,6 @@ msgstr ""
 msgid "Warning: illegal format of entry in style list ''{0}''. Got ''{1}''"
 msgstr ""
 
-msgid "JOSM default (XML; old version)"
-msgstr ""
-
 msgid "JOSM default (MapCSS)"
 msgstr ""
 
@@ -12227,9 +12248,6 @@ msgstr ""
 msgid "Error parsing note response from server"
 msgstr ""
 
-msgid "Error encoding string: {0}"
-msgstr ""
-
 msgid "(Code={0})"
 msgstr ""
 
@@ -12587,25 +12605,25 @@ msgstr ""
 msgid "Read protocol version"
 msgstr ""
 
-msgid "Cannot start remotecontrol server on port {0}: {1}"
+msgid "Cannot start IPv4 remotecontrol server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Accepting connections on {0}:{1}"
+msgid "Cannot start IPv6 remotecontrol server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Server stopped."
+msgid "RemoteControl::Accepting remote connections on {0}:{1}"
 msgstr ""
 
-msgid "Cannot start remotecontrol https server on port {0}: {1}"
+msgid "RemoteControl::Server {0}:{1} stopped."
 msgstr ""
 
-msgid "Unable to initialize Remote Control HTTPS Server"
+msgid "Cannot start IPv4 remotecontrol https server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Accepting secure connections on {0}:{1}"
+msgid "Cannot start IPv6 remotecontrol https server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Server (https) stopped."
+msgid "RemoteControl::Accepting secure remote connections on {0}:{1}"
 msgstr ""
 
 msgid "Remote Control has been asked to create a new node."
@@ -14273,9 +14291,6 @@ msgstr ""
 msgid "Metropole Ruhr: Luftbilder (10 cm)"
 msgstr ""
 
-msgid "SN Luftbilder, Straßennetz, Administrative Grenzen"
-msgstr ""
-
 msgid "Drone Imagery (Haiti)"
 msgstr ""
 
@@ -15136,6 +15151,11 @@ msgid ""
 "bounding box"
 msgstr ""
 
+msgid ""
+"Recommends categories/tags on newly created OSM entities by analysing "
+"spatial entities into training features and using SVM classification"
+msgstr ""
+
 msgid "Import/export OSM data in PBF format"
 msgstr ""
 
@@ -18836,7 +18856,10 @@ msgstr ""
 msgid "Suction pumpout"
 msgstr ""
 
-msgid "Gravity dump station"
+msgid "Gravity drain for hose"
+msgstr ""
+
+msgid "Casette or Elsan Disposal"
 msgstr ""
 
 msgid "Operation times"
@@ -19340,6 +19363,10 @@ msgid "shed"
 msgstr ""
 
 msgctxt "building"
+msgid "storage_tank"
+msgstr ""
+
+msgctxt "building"
 msgid "cowshed"
 msgstr ""
 
@@ -19452,6 +19479,41 @@ msgstr ""
 msgid "Gasometer"
 msgstr ""
 
+msgid "Storage Tank"
+msgstr ""
+
+msgctxt "content"
+msgid "fuel"
+msgstr ""
+
+msgctxt "content"
+msgid "manure"
+msgstr ""
+
+msgctxt "content"
+msgid "oil"
+msgstr ""
+
+msgctxt "content"
+msgid "sewage"
+msgstr ""
+
+msgctxt "content"
+msgid "silage"
+msgstr ""
+
+msgctxt "content"
+msgid "slurry"
+msgstr ""
+
+msgctxt "content"
+msgid "water"
+msgstr ""
+
+msgctxt "content"
+msgid "wine"
+msgstr ""
+
 msgid "Bunker Silo"
 msgstr ""
 
@@ -22903,6 +22965,33 @@ msgstr ""
 msgid "Could not read NanoLog file:"
 msgstr ""
 
+msgid "OSM Recommendation"
+msgstr ""
+
+msgid "Recommend categories to your newly created instances."
+msgstr ""
+
+msgid "Training process configuration"
+msgstr ""
+
+msgid "Model Settings"
+msgstr ""
+
+msgid "Select objects or create new objects and get recommendation."
+msgstr ""
+
+msgid "Add Recommendation"
+msgstr ""
+
+msgid "Add a recommended key/value pair to your object"
+msgstr ""
+
+msgid "Train a Model"
+msgstr ""
+
+msgid "Start the training engine!"
+msgstr ""
+
 msgid "Edit opening hours"
 msgstr ""
 
diff --git a/i18n/po/fr.po b/i18n/po/fr.po
index 9ecbbe4..414b2fd 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-04-27 03:33+0200\n"
-"PO-Revision-Date: 2015-04-26 15:25+0000\n"
-"Last-Translator: Dirk Stöcker <launchpad at dstoecker.de>\n"
+"POT-Creation-Date: 2015-05-12 03:33+0200\n"
+"PO-Revision-Date: 2015-05-08 22:31+0000\n"
+"Last-Translator: Christian Quest <Unknown>\n"
 "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-04-27 04:40+0000\n"
-"X-Generator: Launchpad (build 17430)\n"
+"X-Launchpad-Export-Date: 2015-05-12 04:40+0000\n"
+"X-Generator: Launchpad (build 17487)\n"
 "Language: fr\n"
 "X-Poedit-Bookmarks: 1767,-1,-1,2669,-1,-1,-1,-1,-1,-1\n"
 
@@ -1609,6 +1609,9 @@ msgstr[0] ""
 msgstr[1] ""
 "Le chemin en question disparaît après avoir retiré les nœuds sélectionnés"
 
+msgid "Some irrelevant nodes have been removed from the selection"
+msgstr "Certains noeuds non pertinents ont été supprimés de la sélection"
+
 msgid "Undo"
 msgstr "Annuler"
 
@@ -3370,6 +3373,11 @@ msgstr "Calque : {0}"
 msgid "Failed to persist preferences to ''{0}''"
 msgstr "Impossible de régler les préférences à ''{0}''"
 
+msgid ""
+"Try enabling IPv6 network, prefering IPv6 over IPv4 (only works on early "
+"startup)."
+msgstr ""
+
 msgid " (at line {0}, column {1})"
 msgstr " (à la ligne {0}, colonne {1})"
 
@@ -4050,6 +4058,15 @@ msgid "Number of lane dependent values inconsistent in backward direction"
 msgstr ""
 "La valeur du nombre de voie dépendante est incohérente en marche arrière"
 
+msgid "Long segments"
+msgstr "Longs segments"
+
+msgid "This tests for long way segments, which are usually errors."
+msgstr ""
+
+msgid "Very long segment of {0} kilometers"
+msgstr "Très long segment de {0} kilomètres"
+
 msgid "Tag checker (MapCSS based)"
 msgstr "Vérificateur d''attribut (basé sur MapCSS)"
 
@@ -4932,6 +4949,18 @@ msgstr[1] ""
 "JOSM fonctionne en mode hors-ligne. Ces ressources ne seront pas accessibles "
 ": {0}"
 
+msgid ""
+"Detected useable IPv6 network, prefering IPv6 over IPv4 after next restart."
+msgstr ""
+
+msgid "Detected useable IPv6 network, prefering IPv6 over IPv4."
+msgstr "Un réseau IPv6 a été détecté, il sera utilisé de préférence à IPv4."
+
+msgid ""
+"Detected no useable IPv6 network, prefering IPv4 over IPv6 after next "
+"restart."
+msgstr ""
+
 msgid "Unsaved osm data"
 msgstr "Données OSM non enregistrées"
 
@@ -5351,10 +5380,10 @@ msgid "Conflict foreground: keep all tags"
 msgstr "Conflit d''avant-plan: garder tous les attributs"
 
 msgid "Conflict background: sum all numeric tags"
-msgstr ""
+msgstr "Conflit en arrière-plan: additionnez tout les attributs numériques"
 
 msgid "Conflict foreground: sum all numeric tags"
-msgstr ""
+msgstr "Conflit en avant-plan: additionnez tout les attributs numériques"
 
 msgid "Conflict background: keep member"
 msgstr "Conflit d''arrière-plan: garder le membre"
@@ -5841,6 +5870,8 @@ msgstr "La valeur ''{0}'' va être appliquée à la clé ''{1}''"
 msgid ""
 "All numeric values sumed as ''{0}'' are going to be applied for key ''{1}''"
 msgstr ""
+"Toute les valeurs numériques additionnée en ''{0}''vont être appliquée pour "
+"la clé ''{1}''"
 
 msgid "The key ''{0}'' and all its values are going to be removed"
 msgstr "La clé ''{0}'' et toutes ses valeurs vont être supprimées."
@@ -6764,16 +6795,6 @@ msgstr ""
 "Lancement du navigateur dʼinfo uniquement pour le premier {0} sur {1} "
 "utilisateurs sélectionnés"
 
-msgid ""
-"<html>Failed to create an URL because the encoding ''{0}''<br>was missing on "
-"this system.</html>"
-msgstr ""
-"<html>Impossible de créer l’adresse web, car l’encodage ''{0}''<br>n’est pas "
-"disponible sur ce système.</html>"
-
-msgid "Missing encoding"
-msgstr "Encodage manquant"
-
 msgid "Author"
 msgstr "Auteur"
 
@@ -7401,7 +7422,7 @@ msgid "<different>"
 msgstr "<différent>"
 
 msgid "Objects: {2} / Tags: {0} / Memberships: {1}"
-msgstr ""
+msgstr "Objets: {2} / Attributs: {0} / Membres: {1}"
 
 msgid "Tags: {0} / Memberships: {1}"
 msgstr "Attributs : {0} / Appartenance : {1}"
@@ -7548,6 +7569,8 @@ msgstr "<code>Shift-Enter</code> pour ajouter sans fermer la fenêtre"
 msgid ""
 "<code>Shift-Ctrl-1</code> to add first suggestion without closing the dialog"
 msgstr ""
+"<code>Shift-Ctrl-1</code> pour ajouter la première suggestion sans fermer la "
+"fenêtre"
 
 msgid "Please enter the number of recently added tags to display"
 msgstr ""
@@ -8109,8 +8132,9 @@ msgid ""
 "<strong>{2}</strong> is enabled.<br>Please choose to either download OSM "
 "data, or GPX data, or Notes, or all.</html>"
 msgstr ""
-"html>Ni <strong>{0}</strong> ni <strong>{1}</strong> ni <strong>{2}</strong> "
-"ne sont cochés.<br>Cochez au moins l’une des cases.</html>"
+"<html>Ni <strong>{0}</strong> ni <strong>{1}</strong> ni "
+"<strong>{2}</strong> ne sont cochés.<br>Cochez au moins l’une des "
+"cases.</html>"
 
 msgid "Download referrers (parent relations)"
 msgstr "Télécharger les référents (relations parentes)"
@@ -10271,6 +10295,8 @@ msgid ""
 "Detected deprecated ''{0}'' in ''{1}'' which will be removed shortly. Use "
 "''{2}'' instead."
 msgstr ""
+"Détection de l’élément déprécié ''{0}'' dans ''{1}'' qui sera bientôt "
+"supprimé. Utilisez ''{2}'' à la place."
 
 msgid "Illegal dash pattern, values must be positive"
 msgstr "Le motif est erroné, les valeurs doivent être positives"
@@ -11588,6 +11614,9 @@ msgid ""
 "Use file choosers that behave more like native ones. They look nicer but do "
 "not support some features like file filters"
 msgstr ""
+"Utiliser des sélectionneurs de fichiers qui se comportent plutôt comme le "
+"natif. Ils auront l’air plus joli, mais ne supporteront pas certaines "
+"fonctionnalités comme le filtrage de fichiers"
 
 msgid "Look and Feel"
 msgstr "Apparence"
@@ -11788,6 +11817,9 @@ msgstr "Répertoire du cache : "
 msgid "Maximum concurrent downloads: "
 msgstr "Nombre maximum de téléchargements parallèles : "
 
+msgid "Maximum concurrent downloads per host: "
+msgstr "Nombre maximum de téléchargements simultanés par hôte: "
+
 msgid "Maximum elements in disk cache: "
 msgstr "Nombre maximum d’éléments du cache sur le disque : "
 
@@ -11904,9 +11936,6 @@ msgstr ""
 "Attention : le format d’entrée dans la liste ''{0}'' est erroné. "
 "Actuellement il est ''{1}''"
 
-msgid "JOSM default (XML; old version)"
-msgstr "JOSM par défaut (XML; old version)"
-
 msgid "JOSM default (MapCSS)"
 msgstr "JOSM par défaut (MapCSS)"
 
@@ -13546,9 +13575,6 @@ msgid "Error parsing note response from server"
 msgstr ""
 "Erreur de parsing lors de la récupération de la la note depuis le serveur"
 
-msgid "Error encoding string: {0}"
-msgstr "Erreur d''encodage de la chaîne: {0}"
-
 msgid "(Code={0})"
 msgstr "(Code={0})"
 
@@ -13964,28 +13990,32 @@ msgstr "Créer des nouveaux objets"
 msgid "Read protocol version"
 msgstr "Lire la version du protocole"
 
-msgid "Cannot start remotecontrol server on port {0}: {1}"
-msgstr "Impossible de lancer el serveur à distance sur le port {0}: {1}"
+msgid "Cannot start IPv4 remotecontrol server on port {0}: {1}"
+msgstr ""
+"Impossible de démarrer le contrôle à distance en IPv4 sur le port {0}: {1}"
 
-msgid "RemoteControl::Accepting connections on {0}:{1}"
+msgid "Cannot start IPv6 remotecontrol server on port {0}: {1}"
 msgstr ""
+"Impossible de démarrer le contrôle à distance en IPv6 sur le port {0}: {1}"
 
-msgid "RemoteControl::Server stopped."
-msgstr "Contrôle à distance::Serveur arrêté."
+msgid "RemoteControl::Accepting remote connections on {0}:{1}"
+msgstr ""
 
-msgid "Cannot start remotecontrol https server on port {0}: {1}"
+msgid "RemoteControl::Server {0}:{1} stopped."
 msgstr ""
-"Impossible de démarrer le serveur de contrôle à distance https sur le port "
-"{0}: {1}"
 
-msgid "Unable to initialize Remote Control HTTPS Server"
-msgstr "Impossible d’initialiser le serveur HTTPS de contrôle à distance"
+msgid "Cannot start IPv4 remotecontrol https server on port {0}: {1}"
+msgstr ""
+"Impossible de démarrer le contrôle à distance HTTPS en IPv4 sur le port {0}: "
+"{1}"
 
-msgid "RemoteControl::Accepting secure connections on {0}:{1}"
+msgid "Cannot start IPv6 remotecontrol https server on port {0}: {1}"
 msgstr ""
+"Impossible de démarrer le contrôle à distance HTTPS en IPv6 sur le port {0}: "
+"{1}"
 
-msgid "RemoteControl::Server (https) stopped."
-msgstr "Contrôle à distance::Serveur (https) arrêté"
+msgid "RemoteControl::Accepting secure remote connections on {0}:{1}"
+msgstr ""
 
 msgid "Remote Control has been asked to create a new node."
 msgstr "Il a été demandé au contrôle à distance de créer un nouveau nœud."
@@ -14044,6 +14074,7 @@ msgstr "La valeur minimum doit être plus petite que la valeur maximum"
 
 msgid "Remote Control has been asked to load the following data:"
 msgstr ""
+"La télécommande a reçu une demande de chargement des données suivantes :"
 
 msgid "Loading data"
 msgstr "Chargement des données"
@@ -15120,8 +15151,8 @@ msgid ""
 msgstr ""
 "L’existence d’un important risque de sécurité semble être "
 "avéré</b>.<br><br>Vous allez maintenant être invité par Windows à supprimer "
-"ce certificat non sécuritaire.<br>Pour votre propre sécurité, <b>s’il vous "
-"plaît cliquez sur Oui</ b> dans le dialogue suivant."
+"ce certificat non sécurisé.<br>Pour votre propre sécurité, <b>s’il vous "
+"plaît cliquez sur Oui</ b> dans la fenêtre suivante."
 
 msgid "Removing insecure certificate from {0} keystore: {1}"
 msgstr ""
@@ -15924,9 +15955,6 @@ msgstr "NRW-Atlas : Carte topographique 1:10000"
 msgid "Metropole Ruhr: Luftbilder (10 cm)"
 msgstr ""
 
-msgid "SN Luftbilder, Straßennetz, Administrative Grenzen"
-msgstr ""
-
 msgid "Drone Imagery (Haiti)"
 msgstr "Imagerie drone (Haïti)"
 
@@ -16870,6 +16898,11 @@ msgstr ""
 "Import des erreurs depuis Osm Inspector et affichage dans la zone de "
 "sélection actuelle de JOSM"
 
+msgid ""
+"Recommends categories/tags on newly created OSM entities by analysing "
+"spatial entities into training features and using SVM classification"
+msgstr ""
+
 msgid "Import/export OSM data in PBF format"
 msgstr "Importer/exporter les données OSM dans le format PBF."
 
@@ -17126,7 +17159,7 @@ msgid "sett"
 msgstr "galet"
 
 msgid "Smoothness"
-msgstr ""
+msgstr "Lissage"
 
 msgid "excellent"
 msgstr "excellent"
@@ -17159,7 +17192,7 @@ msgid "High Clearance: light duty off-road vehicle"
 msgstr ""
 
 msgid "horrible"
-msgstr ""
+msgstr "horrible"
 
 msgid "Off-Road: heavy duty off-road vehicle"
 msgstr "Tout terrain : véhicules tout terrain spécialisés"
@@ -17607,11 +17640,11 @@ msgstr "Mai-Sep 09:30-12:30,14:15-19:30"
 
 msgctxt "parking"
 msgid "multi-storey"
-msgstr ""
+msgstr "niveaux multiples"
 
 msgctxt "parking"
 msgid "surface"
-msgstr ""
+msgstr "surface"
 
 msgctxt "parking"
 msgid "underground"
@@ -17619,7 +17652,7 @@ msgstr "souterrain"
 
 msgctxt "parking"
 msgid "rooftop"
-msgstr ""
+msgstr "toit"
 
 msgid "Reference number"
 msgstr "Numéro de référence"
@@ -17655,7 +17688,7 @@ msgid "agricultural"
 msgstr "véhicules agricoles"
 
 msgid "forestry"
-msgstr "véhicules sylvicoles"
+msgstr "véhicules forestiers"
 
 msgid "Population"
 msgstr "Population"
@@ -17700,7 +17733,7 @@ msgid "deciduous"
 msgstr "feuillus"
 
 msgid "Plants that are leafless for a certain period during the year."
-msgstr ""
+msgstr "Plants qui n’ont pas de feuilles pendant une période de l’année"
 
 msgid "evergreen"
 msgstr "persistant"
@@ -17927,7 +17960,7 @@ msgstr ""
 "saisonnièrement) ?"
 
 msgid "culvert"
-msgstr ""
+msgstr "buse"
 
 msgid "Water access rules:"
 msgstr ""
@@ -18076,15 +18109,15 @@ msgstr "Autoroute"
 
 msgctxt "Highway"
 msgid "motorway_link"
-msgstr ""
+msgstr "Bretelle d’autoroute"
 
 msgctxt "Highway"
 msgid "trunk"
-msgstr ""
+msgstr "voie rapide"
 
 msgctxt "Highway"
 msgid "trunk_link"
-msgstr ""
+msgstr "bretelle de voie rapide"
 
 msgctxt "Highway"
 msgid "primary"
@@ -18112,7 +18145,7 @@ msgstr "Liaison tertiaire"
 
 msgctxt "Highway"
 msgid "bus_guideway"
-msgstr ""
+msgstr "Voie de bus"
 
 msgctxt "Highway"
 msgid "bridleway"
@@ -18120,7 +18153,7 @@ msgstr "piste équestre"
 
 msgctxt "Highway"
 msgid "living_street"
-msgstr ""
+msgstr "zone de rencontre"
 
 msgctxt "Highway"
 msgid "pedestrian"
@@ -18569,7 +18602,7 @@ msgid "Pedestrian Crossing"
 msgstr "Passage piéton"
 
 msgid "In case of traffic signals:"
-msgstr ""
+msgstr "En cas de feux de signalisation:"
 
 msgid "Traffic Calming"
 msgstr "Ralentisseur"
@@ -19747,7 +19780,7 @@ msgid "Tactile Paving"
 msgstr "Bande rugueuse"
 
 msgid "incorrect"
-msgstr ""
+msgstr "incorrect"
 
 msgid "Bus Platform"
 msgstr "Plateforme de bus"
@@ -19912,7 +19945,7 @@ msgid "Microbrewery"
 msgstr "Microbrasserie"
 
 msgid "Outdoor seating"
-msgstr ""
+msgstr "terrasse"
 
 msgid "Fast Food"
 msgstr "Fast-Food"
@@ -20650,7 +20683,10 @@ msgstr "Station de vidange de toilettes"
 msgid "Suction pumpout"
 msgstr ""
 
-msgid "Gravity dump station"
+msgid "Gravity drain for hose"
+msgstr ""
+
+msgid "Casette or Elsan Disposal"
 msgstr ""
 
 msgid "Operation times"
@@ -21154,6 +21190,10 @@ msgid "shed"
 msgstr "hangar"
 
 msgctxt "building"
+msgid "storage_tank"
+msgstr ""
+
+msgctxt "building"
 msgid "cowshed"
 msgstr "étable"
 
@@ -21266,6 +21306,41 @@ msgstr "Moulin à vent"
 msgid "Gasometer"
 msgstr "Gazomètre"
 
+msgid "Storage Tank"
+msgstr ""
+
+msgctxt "content"
+msgid "fuel"
+msgstr "carburant"
+
+msgctxt "content"
+msgid "manure"
+msgstr ""
+
+msgctxt "content"
+msgid "oil"
+msgstr ""
+
+msgctxt "content"
+msgid "sewage"
+msgstr "eaux usées"
+
+msgctxt "content"
+msgid "silage"
+msgstr ""
+
+msgctxt "content"
+msgid "slurry"
+msgstr "purin"
+
+msgctxt "content"
+msgid "water"
+msgstr "eau"
+
+msgctxt "content"
+msgid "wine"
+msgstr "vin"
+
 msgid "Bunker Silo"
 msgstr ""
 
@@ -21608,7 +21683,7 @@ msgid "Bridge Support"
 msgstr "Pilier de pont"
 
 msgid "pier"
-msgstr ""
+msgstr "Ponton"
 
 msgid "abutment"
 msgstr ""
@@ -21677,7 +21752,7 @@ msgid "pyrolysis"
 msgstr "pyrolyse"
 
 msgid "combustion"
-msgstr ""
+msgstr "Centrale à combustion"
 
 msgid "steam_turbine"
 msgstr "turbine à vapeur"
@@ -21799,7 +21874,7 @@ msgid "pyrolysis"
 msgstr "pyrolyse"
 
 msgid "gasification"
-msgstr ""
+msgstr "gazéification"
 
 msgid "Water Turbine"
 msgstr "Turbine à eau"
@@ -22298,15 +22373,15 @@ msgstr "Câble électrique"
 
 msgctxt "power cable"
 msgid "underground"
-msgstr ""
+msgstr "souterrain"
 
 msgctxt "power cable"
 msgid "underwater"
-msgstr ""
+msgstr "sous-marin"
 
 msgctxt "power cable"
 msgid "overground"
-msgstr ""
+msgstr "au dessus du sol"
 
 msgid "Historic Places"
 msgstr "Patrimoine"
@@ -22711,7 +22786,7 @@ msgid "Laser"
 msgstr ""
 
 msgid "Maestro"
-msgstr ""
+msgstr "Maestro"
 
 msgid "Visa Debit"
 msgstr ""
@@ -22747,7 +22822,7 @@ msgid "Avant (fi)"
 msgstr ""
 
 msgid "Cash (ch)"
-msgstr ""
+msgstr "Espèce (ch)"
 
 msgid "Chipknip (nl)"
 msgstr ""
@@ -22771,10 +22846,10 @@ msgid "Mondero 4b (es)"
 msgstr ""
 
 msgid "Moneo (fr)"
-msgstr ""
+msgstr "Monéo (fr)"
 
 msgid "Proton (be)"
-msgstr ""
+msgstr "Proton (be)"
 
 msgid "Quick (au)"
 msgstr ""
@@ -22837,16 +22912,16 @@ msgid "Title or type of protection"
 msgstr "Titre ou type de protection"
 
 msgid "Border type"
-msgstr ""
+msgstr "Type de frontière"
 
 msgid "baseline"
 msgstr ""
 
 msgid "territorial"
-msgstr ""
+msgstr "territoriale"
 
 msgid "contiguous"
-msgstr ""
+msgstr "contiguë"
 
 msgid "eez"
 msgstr ""
@@ -23021,7 +23096,7 @@ msgstr ""
 
 msgctxt "cutline"
 msgid "pipeline"
-msgstr ""
+msgstr "pipeline"
 
 msgctxt "cutline"
 msgid "piste"
@@ -23029,7 +23104,7 @@ msgstr ""
 
 msgctxt "cutline"
 msgid "section"
-msgstr ""
+msgstr "section"
 
 msgid "Grassland"
 msgstr "Prairie"
@@ -23100,7 +23175,7 @@ msgid "Large area covered with sand."
 msgstr ""
 
 msgid "Bare Rock"
-msgstr ""
+msgstr "Roche mère"
 
 msgid ""
 "For areas of solid visible rock that is sparsely vegetated or not vegetated "
@@ -23108,7 +23183,7 @@ msgid ""
 msgstr ""
 
 msgid "Rock"
-msgstr ""
+msgstr "Roche"
 
 msgid ""
 "A notable rock or group of rocks, with at least one of them firmly attached "
@@ -23116,10 +23191,10 @@ msgid ""
 msgstr ""
 
 msgid "Tourism attraction"
-msgstr ""
+msgstr "Attraction touristique"
 
 msgid "Stone"
-msgstr ""
+msgstr "Pierre"
 
 msgid ""
 "A single notable free-standing rock, which may differ from the composition "
@@ -23272,7 +23347,7 @@ msgstr "Province"
 
 msgctxt "addr:"
 msgid "State"
-msgstr ""
+msgstr "État"
 
 msgid "AL"
 msgstr "AL"
@@ -23499,6 +23574,8 @@ msgstr "Note"
 msgctxt "note=*"
 msgid "An important hint for other mappers (not for the end user)."
 msgstr ""
+"Un indice important pour les autres contributeurs (mais pas pour "
+"l’utilisateur final)"
 
 msgid "Fixme"
 msgstr ""
@@ -23508,6 +23585,8 @@ msgid ""
 "A hint for other mappers (not for the end user), that an object needs an "
 "improvement."
 msgstr ""
+"Un indice pour les autres contributeurs (mais pas pour l’utilisateur final), "
+"que cet objet a besoin d’amélioration."
 
 msgid "outer segment"
 msgstr "chemin extérieur"
@@ -23915,7 +23994,7 @@ msgid "{0} should be on the node where {1} and {2} intersect"
 msgstr "{0} devrait être sur le nœud où {1} et {2} se croisent"
 
 msgid "alternative name without {0}"
-msgstr ""
+msgstr "nom alternatif sans {0}"
 
 msgid "incomplete usage of {0} on a way without {1}"
 msgstr ""
@@ -23972,17 +24051,17 @@ msgid ""
 msgstr ""
 
 msgid "Unspecific tag {0}"
-msgstr ""
+msgstr "Attribut {0} non spécifique"
 
 msgid "Definition of {0} is unclear"
-msgstr ""
+msgstr "La définition de {0} n’est pas claire"
 
 msgid ""
 "{0} is not recommended. Use the Reverse Ways function from the Tools menu."
 msgstr ""
 
 msgid "key with uncommon character"
-msgstr ""
+msgstr "touche avec un caractère non usuel"
 
 msgid "uncommon short key"
 msgstr ""
@@ -24027,7 +24106,7 @@ msgid "{0} must be connected to a way"
 msgstr "{0} doit être relié à un chemin"
 
 msgid "node connects waterway and bridge"
-msgstr ""
+msgstr "le noeud est à l’intersection d’un cours d’eau et d’un pont"
 
 msgid "abbreviated street name"
 msgstr "abbréviation du nom de rue"
@@ -24054,6 +24133,8 @@ msgid ""
 "Value of ''{0}'' should either be ''{1}'' or ''{2}''. For sidewalks use "
 "''{3}'' instead."
 msgstr ""
+"La valeur de \"{0}\" doit être soit \"{1}\", soit \"{2}\". Pour les "
+"trottoirs, utiliser \"{3}\" à la place"
 
 msgid "{0} with multiple values"
 msgstr "{0} avec de  multiples valeurs"
@@ -24100,7 +24181,7 @@ msgid "{0} must be a numeric value"
 msgstr "{0} doit être une valeur numérique"
 
 msgid "{0} must be a positive integer number"
-msgstr ""
+msgstr "{0} doit être un nombre entier positif"
 
 msgid "relation without type"
 msgstr "relation sans type"
@@ -24158,6 +24239,7 @@ msgstr "Afficher les étiquettes de rues (à zoom élevé)"
 
 msgid "Use alternative turn restriction icon set"
 msgstr ""
+"Utiliser un jeu d’icônes alternatif pour les interdictions de tourner"
 
 msgid "Columbus V-900 CSV Files"
 msgstr "Fichiers CSV de Columbus V-900"
@@ -24198,7 +24280,7 @@ msgid ""
 msgstr ""
 
 msgid "No command found"
-msgstr ""
+msgstr "Aucune commande trouvée"
 
 msgid "Default commands have been successfully installed"
 msgstr ""
@@ -24778,6 +24860,33 @@ msgstr ""
 msgid "Could not read NanoLog file:"
 msgstr ""
 
+msgid "OSM Recommendation"
+msgstr ""
+
+msgid "Recommend categories to your newly created instances."
+msgstr ""
+
+msgid "Training process configuration"
+msgstr ""
+
+msgid "Model Settings"
+msgstr ""
+
+msgid "Select objects or create new objects and get recommendation."
+msgstr ""
+
+msgid "Add Recommendation"
+msgstr ""
+
+msgid "Add a recommended key/value pair to your object"
+msgstr ""
+
+msgid "Train a Model"
+msgstr ""
+
+msgid "Start the training engine!"
+msgstr ""
+
 msgid "Edit opening hours"
 msgstr "Modifier les horaires d’ouverture"
 
@@ -25373,9 +25482,11 @@ msgid ""
 "Let us know what you did and what happend add the following text to the bug "
 "report, so we can find the source of the issue."
 msgstr ""
+"Dites-nous ce que vous avez essayé de faire et ce qui s’est passé, pour que "
+"nous puissions trouver l’origine du problème"
 
 msgid "Area detection algorithm settings."
-msgstr ""
+msgstr "Configuration de l’algorithme de détection d’aire."
 
 msgid "Algorithm Settings"
 msgstr ""
@@ -25394,13 +25505,13 @@ msgid ""
 msgstr ""
 
 msgid "Tolerance Distance"
-msgstr ""
+msgstr "Distance de tolérance"
 
 msgid "Tolerance for fitting angles, in radians (Default {0})."
 msgstr ""
 
 msgid "Tolerance Angle"
-msgstr ""
+msgstr "Angle de tolérance"
 
 msgid "Plugin Settings"
 msgstr "Paramètres des greffons"
@@ -25427,7 +25538,7 @@ msgid "Use hue and saturation instead of RGB distinction"
 msgstr ""
 
 msgid "use HSV based algorithm"
-msgstr ""
+msgstr "utiliser un algorithme basée sur HSV"
 
 msgid "Street Name:"
 msgstr "Nom de la rue :"
@@ -25484,10 +25595,12 @@ msgid "Set width of the building"
 msgstr "Saisissez la largeur du bâtiment"
 
 msgid "Merge address points"
-msgstr ""
+msgstr "Fusionner les points d’adresses"
 
 msgid "Move tags from address nodes inside buildings to building ways"
 msgstr ""
+"Déplacer les attributs des noeuds d’adresse à l’intérieur des bâtiments au "
+"bâtiment lui-même"
 
 msgid "Select both address nodes and building ways to merge"
 msgstr ""
@@ -25496,7 +25609,7 @@ msgid "No address nodes found in the selection"
 msgstr ""
 
 msgid "No building ways found in the selection"
-msgstr ""
+msgstr "Aucun chemin building trouvé dans la sélection"
 
 msgid "There is {0} building with multiple address nodes inside"
 msgid_plural "There are {0} buildings with multiple address nodes inside"
@@ -25509,7 +25622,7 @@ msgstr[0] ""
 msgstr[1] ""
 
 msgid "No address nodes inside buildings found"
-msgstr ""
+msgstr "Pas de noeud d’adresses trouvés dans les bâtiments"
 
 msgid "on polygon"
 msgstr "sur le polygone"
@@ -26240,13 +26353,13 @@ msgid "Threshold distance"
 msgstr ""
 
 msgid "Distances greater than this will result in a score of zero."
-msgstr ""
+msgstr "Une distance plus grande que cela donnera un score de zéro"
 
 msgid "Centroid distance"
 msgstr "Distance du centroïde"
 
 msgid "Hausdorff distance"
-msgstr ""
+msgstr "Distance de Hausdorff"
 
 msgid "Configure conflation settings"
 msgstr ""
@@ -26285,7 +26398,7 @@ msgid "Empty selection"
 msgstr "Sélection vide"
 
 msgid "Invalid reference or subject"
-msgstr ""
+msgstr "Référence ou sujet invalide"
 
 msgid "Address"
 msgstr "Adresse"
@@ -26413,7 +26526,7 @@ msgid "Public"
 msgstr "Publique"
 
 msgid "Could not get server response, check logs"
-msgstr ""
+msgstr "Ne peux recevoir une réponse du serveur, vérifiez les journaux"
 
 msgid "Failed to login as {0}:"
 msgstr "Échec à l’identification de {0} :"
@@ -26645,7 +26758,7 @@ msgid "Invalid closing xml tag </{0}> in state {1}"
 msgstr "Balise de fermeture XML </{0}> non valide dans l’état {1}"
 
 msgid "Some tags have not been closed; now in state {0}"
-msgstr ""
+msgstr "Certain attributs n''ont pas été fermés; maintenant dans l''état {0}"
 
 msgid "Key element without attribute k"
 msgstr "Élement de clé (key) sans attribut k"
@@ -26657,7 +26770,7 @@ msgid "Unknown tag for condition: {0}"
 msgstr "Balise inconnue pour la condition : {0}"
 
 msgid "Element must not have children: {0}"
-msgstr ""
+msgstr "Élément ne doit pas avoir d''enfant: {0}"
 
 msgid "Condition is already finished at </{0}>"
 msgstr "La condition est déjà terminée à </{0}>"
@@ -26962,7 +27075,7 @@ msgid "edit bounds for selected defaults"
 msgstr "modifier les limites pour les valeurs par défaut sélectionnées"
 
 msgid "Download imagery XML bounds"
-msgstr ""
+msgstr "Téléchargement des limites XML de l’imagerie"
 
 msgid ""
 "Validating error in file {0}:\n"
@@ -27037,7 +27150,7 @@ msgid "Error processing XML response: {0}"
 msgstr ""
 
 msgid "Offset"
-msgstr ""
+msgstr "Décalage"
 
 msgid "Imagery Offset Database"
 msgstr "Base de données des ajustement de décalage d’imagerie"
@@ -27642,7 +27755,7 @@ msgid "Mapillary"
 msgstr "Mapillary"
 
 msgid "Create Mapillary layer."
-msgstr ""
+msgstr "Crée le calque Mapillary"
 
 msgid "Export"
 msgstr "Exporter"
@@ -27751,7 +27864,7 @@ msgid "Object type: "
 msgstr "Type d’objet "
 
 msgid "OSM object type to download (''*'' stands for any)"
-msgstr ""
+msgstr "Type d’objet Osm à télécharger (\"*\" pour tout type)"
 
 msgid "XAPI query: "
 msgstr "Requête XAPI : "
@@ -27912,10 +28025,10 @@ msgid "Split this data by municipality (admin_level=8)."
 msgstr "Découper ces données par municipalité (admin_level=8)."
 
 msgid "Split by sector"
-msgstr ""
+msgstr "Séparer par secteur"
 
 msgid "Split this data by sector (admin_level=10)."
-msgstr ""
+msgstr "Séparer cette donnée par secteur (admin_level=10)."
 
 msgid "Split by neighbourhood"
 msgstr ""
@@ -28072,7 +28185,7 @@ msgid "Download modules"
 msgstr "Télécharger les modules"
 
 msgid "View summary"
-msgstr ""
+msgstr "Voir le résumé"
 
 msgid "View full text"
 msgstr "Voir le texte complet"
@@ -28160,6 +28273,8 @@ msgstr "Aucunes coordonnées valides n’ont été trouvées"
 
 msgid "Invalid file. Bad length on line {0}. Expected {1} columns, got {2}."
 msgstr ""
+"Fichier invalide. Mauvaise longueur à la ligne {0}. {1} colonnes attendues, "
+"{2} trouvées"
 
 msgid "XLS files"
 msgstr "Fichiers XLS"
@@ -28261,8 +28376,8 @@ msgstr[1] "JOSM n’a pas trouvé d’information à propos de ces modules :"
 
 msgid "The module is not going to be loaded."
 msgid_plural "The modules are not going to be loaded."
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Le module ne sera pas chargé."
+msgstr[1] "Les modules ne seront pas chargés."
 
 msgid "Updating the following module has failed:"
 msgid_plural "Updating the following modules has failed:"
@@ -28309,7 +28424,7 @@ msgstr ""
 "modifier la prochaine fois)"
 
 msgid "The module file ''{0}'' does not include a Manifest."
-msgstr ""
+msgstr "Le fichier de module ''{0}'' n’inclus pas de Manifeste."
 
 msgid "Invalid URL ''{0}'' in module {1}"
 msgstr "URL invalide ''{0}'' dans le module {1}"
@@ -28925,13 +29040,14 @@ msgid "Error reading poly file: {0}"
 msgstr "Erreur de lecture du fichier Poly {0}"
 
 msgid "The file must begin with a polygon name"
-msgstr ""
+msgstr "Le fichier doit commencer avec un nom de polygone"
 
 msgid "There are less than 2 points in an area"
-msgstr ""
+msgstr "Il y a moins de points dans la zone"
 
 msgid "A polygon coordinate line must contain exactly 2 numbers"
 msgstr ""
+"Une ligne de coordonnée de polygone doit contenir exactement 2 nombres"
 
 msgid "Unable to parse {0} as a number"
 msgstr ""
@@ -29419,10 +29535,10 @@ msgid "Way without ''inner'' or ''outer'' role found"
 msgstr "Présence d’un way sans rôle \"inner\" ou \"outer\""
 
 msgid "Node without ''stop'' or ''platform'' role found"
-msgstr ""
+msgstr "Présence d’un noeud sans rôle \"stop\" ou \"platform\""
 
 msgid "Way platform without ''platform'' role found"
-msgstr ""
+msgstr "Présence d’un quai sans rôle \"platform\""
 
 msgid "Revert changeset fully"
 msgstr "Annuler le groupe de modifications"
@@ -29446,7 +29562,7 @@ msgid "Reverted changeset"
 msgstr "Changeset annulé"
 
 msgid "It is not allowed to revert changeset from {0}"
-msgstr ""
+msgstr "Il n’est pas permis d’annuler le groupe de modifications depuis {0}"
 
 msgid "Missing merge target for {0} with id {1}"
 msgstr "Cible de fusion manquante pour {0} avec l’identifiant {1}"
@@ -29662,7 +29778,7 @@ msgid "Enter credentials for Separate Data Store API"
 msgstr ""
 
 msgid "Please enter the user name of your SDS account"
-msgstr ""
+msgstr "Veuillez entrer le nom d’utilisateur de votre compte SDS"
 
 msgid "Please enter the password of your SDS account"
 msgstr "Merci d’entrer le mot de passe de votre compte SDS"
@@ -29679,13 +29795,13 @@ msgid "Load..."
 msgstr "Charger..."
 
 msgid "Load separate data store data from a file."
-msgstr ""
+msgstr "Chargement d''un magasin de donnée séparé à partir d''un fichier."
 
 msgid "Loading files"
 msgstr "Chargement des fichiers"
 
 msgid "SDS"
-msgstr ""
+msgstr "SDS"
 
 msgid "Information about SDS."
 msgstr "Information sur SDS"
@@ -29697,7 +29813,7 @@ msgid "Open a preferences dialog for SDS."
 msgstr ""
 
 msgid "Separate Data Store"
-msgstr ""
+msgstr "Magasin de donnée séparé"
 
 msgid "Configures access to the Separate Data Store."
 msgstr ""
@@ -29706,22 +29822,28 @@ msgid "Server"
 msgstr "Serveur"
 
 msgid "The URL under which the SDS server can be contacted."
-msgstr ""
+msgstr "L''URL grâce a laquelle le serveur SDS peut être contacté."
 
 msgid ""
 "The user name at the SDS server. You need to create an account with the SDS "
 "admin first."
 msgstr ""
+"Le nom d’utilisateur du serveur SDS. Vous devez d’abord avoir crée un compte "
+"avec l’administrateur SDS."
 
 msgid ""
 "The password at the SDS server. You need to create an account with the SDS "
 "admin first."
 msgstr ""
+"Le mot de passe du serveur SDS. Vous devez d’abord avoir crée un compte avec "
+"l’administrateur SDS."
 
 msgid ""
 "Tags beginning with this prefix are never saved to OSM, but to the SDS "
 "server only."
 msgstr ""
+"Les attributs commençant avec ce préfixe ne sont jamais enregistré dans OSM, "
+"mais dans le serveur SDS uniquement."
 
 msgid "SDS server URL"
 msgstr "URL du serveur SDS"
@@ -29736,7 +29858,7 @@ msgid "Test credentials now"
 msgstr ""
 
 msgid "SDS tag prefix"
-msgstr ""
+msgstr "préfixe de l''attribut SDS"
 
 msgid "Connection successful."
 msgstr "Connexion réussie"
@@ -29749,6 +29871,8 @@ msgstr "Sauvegarder..."
 
 msgid "Save the current separate data store information to a file."
 msgstr ""
+"Enregistrer les informations séparée du magasin de donnée courant dans un "
+"fichier."
 
 msgid "Save SDS file"
 msgstr "Sauvegarde du fichier SDS"
@@ -29757,10 +29881,10 @@ msgid "No object selected"
 msgstr "Pas d’objet sélectionné"
 
 msgid "SeaChart Editor"
-msgstr ""
+msgstr "Éditeur SeaChart"
 
 msgid "Seamark Inspector"
-msgstr ""
+msgstr "Inspecteur Seamark"
 
 msgid "Select only one object"
 msgstr "Sélectionner un seul objet"
@@ -31428,7 +31552,7 @@ msgid "Delete from history"
 msgstr "Supprimer à partir de l’historique"
 
 msgid "Find primitives with these tags"
-msgstr ""
+msgstr "Trouvez les primitives avec cet attribut"
 
 msgid "Multitag Background: highlight"
 msgstr ""
@@ -31847,6 +31971,8 @@ msgstr "Ajout du nom depuis Wikipedia"
 msgid ""
 "Fetches interwiki links from Wikipedia in order to add several name tags"
 msgstr ""
+"Cherche les liens interwiki de Wikipedia pour ajouter plusieurs attributs de "
+"noms"
 
 msgid ""
 "Copies the {0} template to the system clipboard instantiated with the "
diff --git a/i18n/po/gl.po b/i18n/po/gl.po
index a1d26d4..2c29942 100644
--- a/i18n/po/gl.po
+++ b/i18n/po/gl.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: josm\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-04-27 03:33+0200\n"
+"POT-Creation-Date: 2015-05-12 03:33+0200\n"
 "PO-Revision-Date: 2015-02-02 23:45+0000\n"
 "Last-Translator: Adrián Chaves Fernández <adriyetichaves at gmail.com>\n"
 "Language-Team: Galician <proxecto at trasno.net>\n"
@@ -16,8 +16,8 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Launchpad-Export-Date: 2015-04-27 04:41+0000\n"
-"X-Generator: Launchpad (build 17430)\n"
+"X-Launchpad-Export-Date: 2015-05-12 04:41+0000\n"
+"X-Generator: Launchpad (build 17487)\n"
 "Language: gl\n"
 "X-Poedit-Language: Galician\n"
 
@@ -1608,6 +1608,9 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Some irrelevant nodes have been removed from the selection"
+msgstr ""
+
 msgid "Undo"
 msgstr "Desfacer"
 
@@ -3259,6 +3262,11 @@ msgstr "Capa: {0}"
 msgid "Failed to persist preferences to ''{0}''"
 msgstr ""
 
+msgid ""
+"Try enabling IPv6 network, prefering IPv6 over IPv4 (only works on early "
+"startup)."
+msgstr ""
+
 msgid " (at line {0}, column {1})"
 msgstr ""
 
@@ -3907,6 +3915,15 @@ msgstr ""
 msgid "Number of lane dependent values inconsistent in backward direction"
 msgstr ""
 
+msgid "Long segments"
+msgstr ""
+
+msgid "This tests for long way segments, which are usually errors."
+msgstr ""
+
+msgid "Very long segment of {0} kilometers"
+msgstr ""
+
 msgid "Tag checker (MapCSS based)"
 msgstr ""
 
@@ -4747,6 +4764,18 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
+msgid ""
+"Detected useable IPv6 network, prefering IPv6 over IPv4 after next restart."
+msgstr ""
+
+msgid "Detected useable IPv6 network, prefering IPv6 over IPv4."
+msgstr ""
+
+msgid ""
+"Detected no useable IPv6 network, prefering IPv4 over IPv6 after next "
+"restart."
+msgstr ""
+
 msgid "Unsaved osm data"
 msgstr ""
 
@@ -6498,16 +6527,6 @@ msgstr "Lanzar un navegador con información sobre este usuario"
 msgid "Only launching info browsers for the first {0} of {1} selected users"
 msgstr ""
 
-msgid ""
-"<html>Failed to create an URL because the encoding ''{0}''<br>was missing on "
-"this system.</html>"
-msgstr ""
-"<html>Non foi posíbel crear un URL debido a que a codificación «{0}» <br>non "
-"foi posíbel atopar no sistema.</html>"
-
-msgid "Missing encoding"
-msgstr "Non se atopa a codificación"
-
 msgid "Author"
 msgstr "Autor"
 
@@ -11111,6 +11130,9 @@ msgstr ""
 msgid "Maximum concurrent downloads: "
 msgstr ""
 
+msgid "Maximum concurrent downloads per host: "
+msgstr ""
+
 msgid "Maximum elements in disk cache: "
 msgstr ""
 
@@ -11214,9 +11236,6 @@ msgstr ""
 msgid "Warning: illegal format of entry in style list ''{0}''. Got ''{1}''"
 msgstr ""
 
-msgid "JOSM default (XML; old version)"
-msgstr ""
-
 msgid "JOSM default (MapCSS)"
 msgstr ""
 
@@ -12707,9 +12726,6 @@ msgstr ""
 msgid "Error parsing note response from server"
 msgstr ""
 
-msgid "Error encoding string: {0}"
-msgstr ""
-
 msgid "(Code={0})"
 msgstr "(Código={0})"
 
@@ -13088,25 +13104,25 @@ msgstr ""
 msgid "Read protocol version"
 msgstr ""
 
-msgid "Cannot start remotecontrol server on port {0}: {1}"
+msgid "Cannot start IPv4 remotecontrol server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Accepting connections on {0}:{1}"
+msgid "Cannot start IPv6 remotecontrol server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Server stopped."
+msgid "RemoteControl::Accepting remote connections on {0}:{1}"
 msgstr ""
 
-msgid "Cannot start remotecontrol https server on port {0}: {1}"
+msgid "RemoteControl::Server {0}:{1} stopped."
 msgstr ""
 
-msgid "Unable to initialize Remote Control HTTPS Server"
+msgid "Cannot start IPv4 remotecontrol https server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Accepting secure connections on {0}:{1}"
+msgid "Cannot start IPv6 remotecontrol https server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Server (https) stopped."
+msgid "RemoteControl::Accepting secure remote connections on {0}:{1}"
 msgstr ""
 
 msgid "Remote Control has been asked to create a new node."
@@ -14814,9 +14830,6 @@ msgstr ""
 msgid "Metropole Ruhr: Luftbilder (10 cm)"
 msgstr ""
 
-msgid "SN Luftbilder, Straßennetz, Administrative Grenzen"
-msgstr ""
-
 msgid "Drone Imagery (Haiti)"
 msgstr ""
 
@@ -15686,6 +15699,11 @@ msgid ""
 "bounding box"
 msgstr ""
 
+msgid ""
+"Recommends categories/tags on newly created OSM entities by analysing "
+"spatial entities into training features and using SVM classification"
+msgstr ""
+
 msgid "Import/export OSM data in PBF format"
 msgstr ""
 
@@ -19413,7 +19431,10 @@ msgstr ""
 msgid "Suction pumpout"
 msgstr ""
 
-msgid "Gravity dump station"
+msgid "Gravity drain for hose"
+msgstr ""
+
+msgid "Casette or Elsan Disposal"
 msgstr ""
 
 msgid "Operation times"
@@ -19917,6 +19938,10 @@ msgid "shed"
 msgstr ""
 
 msgctxt "building"
+msgid "storage_tank"
+msgstr ""
+
+msgctxt "building"
 msgid "cowshed"
 msgstr ""
 
@@ -20029,6 +20054,41 @@ msgstr "Muíño de vento"
 msgid "Gasometer"
 msgstr "Gasómetro"
 
+msgid "Storage Tank"
+msgstr ""
+
+msgctxt "content"
+msgid "fuel"
+msgstr ""
+
+msgctxt "content"
+msgid "manure"
+msgstr ""
+
+msgctxt "content"
+msgid "oil"
+msgstr ""
+
+msgctxt "content"
+msgid "sewage"
+msgstr ""
+
+msgctxt "content"
+msgid "silage"
+msgstr ""
+
+msgctxt "content"
+msgid "slurry"
+msgstr ""
+
+msgctxt "content"
+msgid "water"
+msgstr ""
+
+msgctxt "content"
+msgid "wine"
+msgstr ""
+
 msgid "Bunker Silo"
 msgstr ""
 
@@ -23480,6 +23540,33 @@ msgstr ""
 msgid "Could not read NanoLog file:"
 msgstr ""
 
+msgid "OSM Recommendation"
+msgstr ""
+
+msgid "Recommend categories to your newly created instances."
+msgstr ""
+
+msgid "Training process configuration"
+msgstr ""
+
+msgid "Model Settings"
+msgstr ""
+
+msgid "Select objects or create new objects and get recommendation."
+msgstr ""
+
+msgid "Add Recommendation"
+msgstr ""
+
+msgid "Add a recommended key/value pair to your object"
+msgstr ""
+
+msgid "Train a Model"
+msgstr ""
+
+msgid "Start the training engine!"
+msgstr ""
+
 msgid "Edit opening hours"
 msgstr ""
 
diff --git a/i18n/po/he.po b/i18n/po/he.po
index a507cf4..779d4bc 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-04-27 03:33+0200\n"
+"POT-Creation-Date: 2015-05-12 03:33+0200\n"
 "PO-Revision-Date: 2013-03-30 13:38+0000\n"
 "Last-Translator: Dirk Stöcker <launchpad at dstoecker.de>\n"
 "Language-Team: Hebrew <he at li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Launchpad-Export-Date: 2015-04-27 04:43+0000\n"
-"X-Generator: Launchpad (build 17430)\n"
+"X-Launchpad-Export-Date: 2015-05-12 04:43+0000\n"
+"X-Generator: Launchpad (build 17487)\n"
 "Language: he\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -1472,6 +1472,9 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Some irrelevant nodes have been removed from the selection"
+msgstr ""
+
 msgid "Undo"
 msgstr "בטל"
 
@@ -3078,6 +3081,11 @@ msgstr "שיכבה: {0}"
 msgid "Failed to persist preferences to ''{0}''"
 msgstr ""
 
+msgid ""
+"Try enabling IPv6 network, prefering IPv6 over IPv4 (only works on early "
+"startup)."
+msgstr ""
+
 msgid " (at line {0}, column {1})"
 msgstr ""
 
@@ -3708,6 +3716,15 @@ msgstr ""
 msgid "Number of lane dependent values inconsistent in backward direction"
 msgstr ""
 
+msgid "Long segments"
+msgstr ""
+
+msgid "This tests for long way segments, which are usually errors."
+msgstr ""
+
+msgid "Very long segment of {0} kilometers"
+msgstr ""
+
 msgid "Tag checker (MapCSS based)"
 msgstr ""
 
@@ -4539,6 +4556,18 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
+msgid ""
+"Detected useable IPv6 network, prefering IPv6 over IPv4 after next restart."
+msgstr ""
+
+msgid "Detected useable IPv6 network, prefering IPv6 over IPv4."
+msgstr ""
+
+msgid ""
+"Detected no useable IPv6 network, prefering IPv4 over IPv6 after next "
+"restart."
+msgstr ""
+
 msgid "Unsaved osm data"
 msgstr ""
 
@@ -6226,14 +6255,6 @@ msgstr ""
 msgid "Only launching info browsers for the first {0} of {1} selected users"
 msgstr ""
 
-msgid ""
-"<html>Failed to create an URL because the encoding ''{0}''<br>was missing on "
-"this system.</html>"
-msgstr ""
-
-msgid "Missing encoding"
-msgstr ""
-
 msgid "Author"
 msgstr "מחבר"
 
@@ -10699,6 +10720,9 @@ msgstr ""
 msgid "Maximum concurrent downloads: "
 msgstr ""
 
+msgid "Maximum concurrent downloads per host: "
+msgstr ""
+
 msgid "Maximum elements in disk cache: "
 msgstr ""
 
@@ -10801,9 +10825,6 @@ msgstr ""
 msgid "Warning: illegal format of entry in style list ''{0}''. Got ''{1}''"
 msgstr ""
 
-msgid "JOSM default (XML; old version)"
-msgstr ""
-
 msgid "JOSM default (MapCSS)"
 msgstr ""
 
@@ -12267,9 +12288,6 @@ msgstr ""
 msgid "Error parsing note response from server"
 msgstr ""
 
-msgid "Error encoding string: {0}"
-msgstr ""
-
 msgid "(Code={0})"
 msgstr ""
 
@@ -12627,25 +12645,25 @@ msgstr ""
 msgid "Read protocol version"
 msgstr ""
 
-msgid "Cannot start remotecontrol server on port {0}: {1}"
+msgid "Cannot start IPv4 remotecontrol server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Accepting connections on {0}:{1}"
+msgid "Cannot start IPv6 remotecontrol server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Server stopped."
+msgid "RemoteControl::Accepting remote connections on {0}:{1}"
 msgstr ""
 
-msgid "Cannot start remotecontrol https server on port {0}: {1}"
+msgid "RemoteControl::Server {0}:{1} stopped."
 msgstr ""
 
-msgid "Unable to initialize Remote Control HTTPS Server"
+msgid "Cannot start IPv4 remotecontrol https server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Accepting secure connections on {0}:{1}"
+msgid "Cannot start IPv6 remotecontrol https server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Server (https) stopped."
+msgid "RemoteControl::Accepting secure remote connections on {0}:{1}"
 msgstr ""
 
 msgid "Remote Control has been asked to create a new node."
@@ -14315,9 +14333,6 @@ msgstr ""
 msgid "Metropole Ruhr: Luftbilder (10 cm)"
 msgstr ""
 
-msgid "SN Luftbilder, Straßennetz, Administrative Grenzen"
-msgstr ""
-
 msgid "Drone Imagery (Haiti)"
 msgstr ""
 
@@ -15178,6 +15193,11 @@ msgid ""
 "bounding box"
 msgstr ""
 
+msgid ""
+"Recommends categories/tags on newly created OSM entities by analysing "
+"spatial entities into training features and using SVM classification"
+msgstr ""
+
 msgid "Import/export OSM data in PBF format"
 msgstr ""
 
@@ -18878,7 +18898,10 @@ msgstr ""
 msgid "Suction pumpout"
 msgstr ""
 
-msgid "Gravity dump station"
+msgid "Gravity drain for hose"
+msgstr ""
+
+msgid "Casette or Elsan Disposal"
 msgstr ""
 
 msgid "Operation times"
@@ -19382,6 +19405,10 @@ msgid "shed"
 msgstr ""
 
 msgctxt "building"
+msgid "storage_tank"
+msgstr ""
+
+msgctxt "building"
 msgid "cowshed"
 msgstr ""
 
@@ -19494,6 +19521,41 @@ msgstr "טחנת רוח"
 msgid "Gasometer"
 msgstr ""
 
+msgid "Storage Tank"
+msgstr ""
+
+msgctxt "content"
+msgid "fuel"
+msgstr ""
+
+msgctxt "content"
+msgid "manure"
+msgstr ""
+
+msgctxt "content"
+msgid "oil"
+msgstr ""
+
+msgctxt "content"
+msgid "sewage"
+msgstr ""
+
+msgctxt "content"
+msgid "silage"
+msgstr ""
+
+msgctxt "content"
+msgid "slurry"
+msgstr ""
+
+msgctxt "content"
+msgid "water"
+msgstr ""
+
+msgctxt "content"
+msgid "wine"
+msgstr ""
+
 msgid "Bunker Silo"
 msgstr ""
 
@@ -22945,6 +23007,33 @@ msgstr ""
 msgid "Could not read NanoLog file:"
 msgstr ""
 
+msgid "OSM Recommendation"
+msgstr ""
+
+msgid "Recommend categories to your newly created instances."
+msgstr ""
+
+msgid "Training process configuration"
+msgstr ""
+
+msgid "Model Settings"
+msgstr ""
+
+msgid "Select objects or create new objects and get recommendation."
+msgstr ""
+
+msgid "Add Recommendation"
+msgstr ""
+
+msgid "Add a recommended key/value pair to your object"
+msgstr ""
+
+msgid "Train a Model"
+msgstr ""
+
+msgid "Start the training engine!"
+msgstr ""
+
 msgid "Edit opening hours"
 msgstr ""
 
diff --git a/i18n/po/hi.po b/i18n/po/hi.po
index e2800f4..2737994 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-04-27 03:33+0200\n"
+"POT-Creation-Date: 2015-05-12 03:33+0200\n"
 "PO-Revision-Date: 2009-11-14 16:28+0000\n"
 "Last-Translator: nipunreddevil <nipunreddevil at gmail.com>\n"
 "Language-Team: Hindi <hi at li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Launchpad-Export-Date: 2015-04-27 04:43+0000\n"
-"X-Generator: Launchpad (build 17430)\n"
+"X-Launchpad-Export-Date: 2015-05-12 04:43+0000\n"
+"X-Generator: Launchpad (build 17487)\n"
 "Language: hi\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -1468,6 +1468,9 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Some irrelevant nodes have been removed from the selection"
+msgstr ""
+
 msgid "Undo"
 msgstr ""
 
@@ -3065,6 +3068,11 @@ msgstr ""
 msgid "Failed to persist preferences to ''{0}''"
 msgstr ""
 
+msgid ""
+"Try enabling IPv6 network, prefering IPv6 over IPv4 (only works on early "
+"startup)."
+msgstr ""
+
 msgid " (at line {0}, column {1})"
 msgstr ""
 
@@ -3693,6 +3701,15 @@ msgstr ""
 msgid "Number of lane dependent values inconsistent in backward direction"
 msgstr ""
 
+msgid "Long segments"
+msgstr ""
+
+msgid "This tests for long way segments, which are usually errors."
+msgstr ""
+
+msgid "Very long segment of {0} kilometers"
+msgstr ""
+
 msgid "Tag checker (MapCSS based)"
 msgstr ""
 
@@ -4522,6 +4539,18 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
+msgid ""
+"Detected useable IPv6 network, prefering IPv6 over IPv4 after next restart."
+msgstr ""
+
+msgid "Detected useable IPv6 network, prefering IPv6 over IPv4."
+msgstr ""
+
+msgid ""
+"Detected no useable IPv6 network, prefering IPv4 over IPv6 after next "
+"restart."
+msgstr ""
+
 msgid "Unsaved osm data"
 msgstr ""
 
@@ -6200,14 +6229,6 @@ msgstr ""
 msgid "Only launching info browsers for the first {0} of {1} selected users"
 msgstr ""
 
-msgid ""
-"<html>Failed to create an URL because the encoding ''{0}''<br>was missing on "
-"this system.</html>"
-msgstr ""
-
-msgid "Missing encoding"
-msgstr ""
-
 msgid "Author"
 msgstr ""
 
@@ -10662,6 +10683,9 @@ msgstr ""
 msgid "Maximum concurrent downloads: "
 msgstr ""
 
+msgid "Maximum concurrent downloads per host: "
+msgstr ""
+
 msgid "Maximum elements in disk cache: "
 msgstr ""
 
@@ -10764,9 +10788,6 @@ msgstr ""
 msgid "Warning: illegal format of entry in style list ''{0}''. Got ''{1}''"
 msgstr ""
 
-msgid "JOSM default (XML; old version)"
-msgstr ""
-
 msgid "JOSM default (MapCSS)"
 msgstr ""
 
@@ -12228,9 +12249,6 @@ msgstr ""
 msgid "Error parsing note response from server"
 msgstr ""
 
-msgid "Error encoding string: {0}"
-msgstr ""
-
 msgid "(Code={0})"
 msgstr ""
 
@@ -12588,25 +12606,25 @@ msgstr ""
 msgid "Read protocol version"
 msgstr ""
 
-msgid "Cannot start remotecontrol server on port {0}: {1}"
+msgid "Cannot start IPv4 remotecontrol server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Accepting connections on {0}:{1}"
+msgid "Cannot start IPv6 remotecontrol server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Server stopped."
+msgid "RemoteControl::Accepting remote connections on {0}:{1}"
 msgstr ""
 
-msgid "Cannot start remotecontrol https server on port {0}: {1}"
+msgid "RemoteControl::Server {0}:{1} stopped."
 msgstr ""
 
-msgid "Unable to initialize Remote Control HTTPS Server"
+msgid "Cannot start IPv4 remotecontrol https server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Accepting secure connections on {0}:{1}"
+msgid "Cannot start IPv6 remotecontrol https server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Server (https) stopped."
+msgid "RemoteControl::Accepting secure remote connections on {0}:{1}"
 msgstr ""
 
 msgid "Remote Control has been asked to create a new node."
@@ -14274,9 +14292,6 @@ msgstr ""
 msgid "Metropole Ruhr: Luftbilder (10 cm)"
 msgstr ""
 
-msgid "SN Luftbilder, Straßennetz, Administrative Grenzen"
-msgstr ""
-
 msgid "Drone Imagery (Haiti)"
 msgstr ""
 
@@ -15137,6 +15152,11 @@ msgid ""
 "bounding box"
 msgstr ""
 
+msgid ""
+"Recommends categories/tags on newly created OSM entities by analysing "
+"spatial entities into training features and using SVM classification"
+msgstr ""
+
 msgid "Import/export OSM data in PBF format"
 msgstr ""
 
@@ -18837,7 +18857,10 @@ msgstr ""
 msgid "Suction pumpout"
 msgstr ""
 
-msgid "Gravity dump station"
+msgid "Gravity drain for hose"
+msgstr ""
+
+msgid "Casette or Elsan Disposal"
 msgstr ""
 
 msgid "Operation times"
@@ -19341,6 +19364,10 @@ msgid "shed"
 msgstr ""
 
 msgctxt "building"
+msgid "storage_tank"
+msgstr ""
+
+msgctxt "building"
 msgid "cowshed"
 msgstr ""
 
@@ -19453,6 +19480,41 @@ msgstr ""
 msgid "Gasometer"
 msgstr ""
 
+msgid "Storage Tank"
+msgstr ""
+
+msgctxt "content"
+msgid "fuel"
+msgstr ""
+
+msgctxt "content"
+msgid "manure"
+msgstr ""
+
+msgctxt "content"
+msgid "oil"
+msgstr ""
+
+msgctxt "content"
+msgid "sewage"
+msgstr ""
+
+msgctxt "content"
+msgid "silage"
+msgstr ""
+
+msgctxt "content"
+msgid "slurry"
+msgstr ""
+
+msgctxt "content"
+msgid "water"
+msgstr ""
+
+msgctxt "content"
+msgid "wine"
+msgstr ""
+
 msgid "Bunker Silo"
 msgstr ""
 
@@ -22904,6 +22966,33 @@ msgstr ""
 msgid "Could not read NanoLog file:"
 msgstr ""
 
+msgid "OSM Recommendation"
+msgstr ""
+
+msgid "Recommend categories to your newly created instances."
+msgstr ""
+
+msgid "Training process configuration"
+msgstr ""
+
+msgid "Model Settings"
+msgstr ""
+
+msgid "Select objects or create new objects and get recommendation."
+msgstr ""
+
+msgid "Add Recommendation"
+msgstr ""
+
+msgid "Add a recommended key/value pair to your object"
+msgstr ""
+
+msgid "Train a Model"
+msgstr ""
+
+msgid "Start the training engine!"
+msgstr ""
+
 msgid "Edit opening hours"
 msgstr ""
 
diff --git a/i18n/po/hr.po b/i18n/po/hr.po
index 729e75b..d565a06 100644
--- a/i18n/po/hr.po
+++ b/i18n/po/hr.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: josm\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-04-27 03:33+0200\n"
+"POT-Creation-Date: 2015-05-12 03:33+0200\n"
 "PO-Revision-Date: 2015-02-25 14:38+0000\n"
 "Last-Translator: gogo <trebelnik2 at gmail.com>\n"
 "Language-Team: Croatian <hr at li.org>\n"
@@ -16,8 +16,8 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
 "n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
-"X-Launchpad-Export-Date: 2015-04-27 04:55+0000\n"
-"X-Generator: Launchpad (build 17430)\n"
+"X-Launchpad-Export-Date: 2015-05-12 04:55+0000\n"
+"X-Generator: Launchpad (build 17487)\n"
 "Language: hr\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -1550,6 +1550,9 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Some irrelevant nodes have been removed from the selection"
+msgstr ""
+
 msgid "Undo"
 msgstr "Poništi"
 
@@ -3175,6 +3178,11 @@ msgstr "Sloj: {0}"
 msgid "Failed to persist preferences to ''{0}''"
 msgstr ""
 
+msgid ""
+"Try enabling IPv6 network, prefering IPv6 over IPv4 (only works on early "
+"startup)."
+msgstr ""
+
 msgid " (at line {0}, column {1})"
 msgstr ""
 
@@ -3806,6 +3814,15 @@ msgstr ""
 msgid "Number of lane dependent values inconsistent in backward direction"
 msgstr ""
 
+msgid "Long segments"
+msgstr ""
+
+msgid "This tests for long way segments, which are usually errors."
+msgstr ""
+
+msgid "Very long segment of {0} kilometers"
+msgstr ""
+
 msgid "Tag checker (MapCSS based)"
 msgstr ""
 
@@ -4636,6 +4653,18 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
+msgid ""
+"Detected useable IPv6 network, prefering IPv6 over IPv4 after next restart."
+msgstr ""
+
+msgid "Detected useable IPv6 network, prefering IPv6 over IPv4."
+msgstr ""
+
+msgid ""
+"Detected no useable IPv6 network, prefering IPv4 over IPv6 after next "
+"restart."
+msgstr ""
+
 msgid "Unsaved osm data"
 msgstr ""
 
@@ -6319,14 +6348,6 @@ msgstr ""
 msgid "Only launching info browsers for the first {0} of {1} selected users"
 msgstr ""
 
-msgid ""
-"<html>Failed to create an URL because the encoding ''{0}''<br>was missing on "
-"this system.</html>"
-msgstr ""
-
-msgid "Missing encoding"
-msgstr ""
-
 msgid "Author"
 msgstr "Autor"
 
@@ -10812,6 +10833,9 @@ msgstr ""
 msgid "Maximum concurrent downloads: "
 msgstr ""
 
+msgid "Maximum concurrent downloads per host: "
+msgstr ""
+
 msgid "Maximum elements in disk cache: "
 msgstr ""
 
@@ -10914,9 +10938,6 @@ msgstr ""
 msgid "Warning: illegal format of entry in style list ''{0}''. Got ''{1}''"
 msgstr ""
 
-msgid "JOSM default (XML; old version)"
-msgstr ""
-
 msgid "JOSM default (MapCSS)"
 msgstr ""
 
@@ -12378,9 +12399,6 @@ msgstr ""
 msgid "Error parsing note response from server"
 msgstr ""
 
-msgid "Error encoding string: {0}"
-msgstr ""
-
 msgid "(Code={0})"
 msgstr ""
 
@@ -12738,25 +12756,25 @@ msgstr ""
 msgid "Read protocol version"
 msgstr ""
 
-msgid "Cannot start remotecontrol server on port {0}: {1}"
+msgid "Cannot start IPv4 remotecontrol server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Accepting connections on {0}:{1}"
+msgid "Cannot start IPv6 remotecontrol server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Server stopped."
+msgid "RemoteControl::Accepting remote connections on {0}:{1}"
 msgstr ""
 
-msgid "Cannot start remotecontrol https server on port {0}: {1}"
+msgid "RemoteControl::Server {0}:{1} stopped."
 msgstr ""
 
-msgid "Unable to initialize Remote Control HTTPS Server"
+msgid "Cannot start IPv4 remotecontrol https server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Accepting secure connections on {0}:{1}"
+msgid "Cannot start IPv6 remotecontrol https server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Server (https) stopped."
+msgid "RemoteControl::Accepting secure remote connections on {0}:{1}"
 msgstr ""
 
 msgid "Remote Control has been asked to create a new node."
@@ -14424,9 +14442,6 @@ msgstr ""
 msgid "Metropole Ruhr: Luftbilder (10 cm)"
 msgstr ""
 
-msgid "SN Luftbilder, Straßennetz, Administrative Grenzen"
-msgstr ""
-
 msgid "Drone Imagery (Haiti)"
 msgstr ""
 
@@ -15287,6 +15302,11 @@ msgid ""
 "bounding box"
 msgstr ""
 
+msgid ""
+"Recommends categories/tags on newly created OSM entities by analysing "
+"spatial entities into training features and using SVM classification"
+msgstr ""
+
 msgid "Import/export OSM data in PBF format"
 msgstr ""
 
@@ -18987,7 +19007,10 @@ msgstr ""
 msgid "Suction pumpout"
 msgstr ""
 
-msgid "Gravity dump station"
+msgid "Gravity drain for hose"
+msgstr ""
+
+msgid "Casette or Elsan Disposal"
 msgstr ""
 
 msgid "Operation times"
@@ -19491,6 +19514,10 @@ msgid "shed"
 msgstr ""
 
 msgctxt "building"
+msgid "storage_tank"
+msgstr ""
+
+msgctxt "building"
 msgid "cowshed"
 msgstr ""
 
@@ -19603,6 +19630,41 @@ msgstr ""
 msgid "Gasometer"
 msgstr ""
 
+msgid "Storage Tank"
+msgstr ""
+
+msgctxt "content"
+msgid "fuel"
+msgstr ""
+
+msgctxt "content"
+msgid "manure"
+msgstr ""
+
+msgctxt "content"
+msgid "oil"
+msgstr ""
+
+msgctxt "content"
+msgid "sewage"
+msgstr ""
+
+msgctxt "content"
+msgid "silage"
+msgstr ""
+
+msgctxt "content"
+msgid "slurry"
+msgstr ""
+
+msgctxt "content"
+msgid "water"
+msgstr ""
+
+msgctxt "content"
+msgid "wine"
+msgstr ""
+
 msgid "Bunker Silo"
 msgstr ""
 
@@ -23054,6 +23116,33 @@ msgstr ""
 msgid "Could not read NanoLog file:"
 msgstr ""
 
+msgid "OSM Recommendation"
+msgstr ""
+
+msgid "Recommend categories to your newly created instances."
+msgstr ""
+
+msgid "Training process configuration"
+msgstr ""
+
+msgid "Model Settings"
+msgstr ""
+
+msgid "Select objects or create new objects and get recommendation."
+msgstr ""
+
+msgid "Add Recommendation"
+msgstr ""
+
+msgid "Add a recommended key/value pair to your object"
+msgstr ""
+
+msgid "Train a Model"
+msgstr ""
+
+msgid "Start the training engine!"
+msgstr ""
+
 msgid "Edit opening hours"
 msgstr ""
 
diff --git a/i18n/po/ht.po b/i18n/po/ht.po
index 5cda21e..98f5096 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-04-27 03:33+0200\n"
+"POT-Creation-Date: 2015-05-12 03:33+0200\n"
 "PO-Revision-Date: 2010-03-11 21:17+0000\n"
 "Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
 "Language-Team: Haitian; Haitian Creole <ht at li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Launchpad-Export-Date: 2015-04-27 04:42+0000\n"
-"X-Generator: Launchpad (build 17430)\n"
+"X-Launchpad-Export-Date: 2015-05-12 04:42+0000\n"
+"X-Generator: Launchpad (build 17487)\n"
 "Language: \n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -1468,6 +1468,9 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Some irrelevant nodes have been removed from the selection"
+msgstr ""
+
 msgid "Undo"
 msgstr ""
 
@@ -3065,6 +3068,11 @@ msgstr ""
 msgid "Failed to persist preferences to ''{0}''"
 msgstr ""
 
+msgid ""
+"Try enabling IPv6 network, prefering IPv6 over IPv4 (only works on early "
+"startup)."
+msgstr ""
+
 msgid " (at line {0}, column {1})"
 msgstr ""
 
@@ -3693,6 +3701,15 @@ msgstr ""
 msgid "Number of lane dependent values inconsistent in backward direction"
 msgstr ""
 
+msgid "Long segments"
+msgstr ""
+
+msgid "This tests for long way segments, which are usually errors."
+msgstr ""
+
+msgid "Very long segment of {0} kilometers"
+msgstr ""
+
 msgid "Tag checker (MapCSS based)"
 msgstr ""
 
@@ -4522,6 +4539,18 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
+msgid ""
+"Detected useable IPv6 network, prefering IPv6 over IPv4 after next restart."
+msgstr ""
+
+msgid "Detected useable IPv6 network, prefering IPv6 over IPv4."
+msgstr ""
+
+msgid ""
+"Detected no useable IPv6 network, prefering IPv4 over IPv6 after next "
+"restart."
+msgstr ""
+
 msgid "Unsaved osm data"
 msgstr ""
 
@@ -6200,14 +6229,6 @@ msgstr ""
 msgid "Only launching info browsers for the first {0} of {1} selected users"
 msgstr ""
 
-msgid ""
-"<html>Failed to create an URL because the encoding ''{0}''<br>was missing on "
-"this system.</html>"
-msgstr ""
-
-msgid "Missing encoding"
-msgstr ""
-
 msgid "Author"
 msgstr ""
 
@@ -10662,6 +10683,9 @@ msgstr ""
 msgid "Maximum concurrent downloads: "
 msgstr ""
 
+msgid "Maximum concurrent downloads per host: "
+msgstr ""
+
 msgid "Maximum elements in disk cache: "
 msgstr ""
 
@@ -10764,9 +10788,6 @@ msgstr ""
 msgid "Warning: illegal format of entry in style list ''{0}''. Got ''{1}''"
 msgstr ""
 
-msgid "JOSM default (XML; old version)"
-msgstr ""
-
 msgid "JOSM default (MapCSS)"
 msgstr ""
 
@@ -12228,9 +12249,6 @@ msgstr ""
 msgid "Error parsing note response from server"
 msgstr ""
 
-msgid "Error encoding string: {0}"
-msgstr ""
-
 msgid "(Code={0})"
 msgstr ""
 
@@ -12588,25 +12606,25 @@ msgstr ""
 msgid "Read protocol version"
 msgstr ""
 
-msgid "Cannot start remotecontrol server on port {0}: {1}"
+msgid "Cannot start IPv4 remotecontrol server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Accepting connections on {0}:{1}"
+msgid "Cannot start IPv6 remotecontrol server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Server stopped."
+msgid "RemoteControl::Accepting remote connections on {0}:{1}"
 msgstr ""
 
-msgid "Cannot start remotecontrol https server on port {0}: {1}"
+msgid "RemoteControl::Server {0}:{1} stopped."
 msgstr ""
 
-msgid "Unable to initialize Remote Control HTTPS Server"
+msgid "Cannot start IPv4 remotecontrol https server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Accepting secure connections on {0}:{1}"
+msgid "Cannot start IPv6 remotecontrol https server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Server (https) stopped."
+msgid "RemoteControl::Accepting secure remote connections on {0}:{1}"
 msgstr ""
 
 msgid "Remote Control has been asked to create a new node."
@@ -14274,9 +14292,6 @@ msgstr ""
 msgid "Metropole Ruhr: Luftbilder (10 cm)"
 msgstr ""
 
-msgid "SN Luftbilder, Straßennetz, Administrative Grenzen"
-msgstr ""
-
 msgid "Drone Imagery (Haiti)"
 msgstr ""
 
@@ -15137,6 +15152,11 @@ msgid ""
 "bounding box"
 msgstr ""
 
+msgid ""
+"Recommends categories/tags on newly created OSM entities by analysing "
+"spatial entities into training features and using SVM classification"
+msgstr ""
+
 msgid "Import/export OSM data in PBF format"
 msgstr ""
 
@@ -18837,7 +18857,10 @@ msgstr ""
 msgid "Suction pumpout"
 msgstr ""
 
-msgid "Gravity dump station"
+msgid "Gravity drain for hose"
+msgstr ""
+
+msgid "Casette or Elsan Disposal"
 msgstr ""
 
 msgid "Operation times"
@@ -19341,6 +19364,10 @@ msgid "shed"
 msgstr ""
 
 msgctxt "building"
+msgid "storage_tank"
+msgstr ""
+
+msgctxt "building"
 msgid "cowshed"
 msgstr ""
 
@@ -19453,6 +19480,41 @@ msgstr ""
 msgid "Gasometer"
 msgstr ""
 
+msgid "Storage Tank"
+msgstr ""
+
+msgctxt "content"
+msgid "fuel"
+msgstr ""
+
+msgctxt "content"
+msgid "manure"
+msgstr ""
+
+msgctxt "content"
+msgid "oil"
+msgstr ""
+
+msgctxt "content"
+msgid "sewage"
+msgstr ""
+
+msgctxt "content"
+msgid "silage"
+msgstr ""
+
+msgctxt "content"
+msgid "slurry"
+msgstr ""
+
+msgctxt "content"
+msgid "water"
+msgstr ""
+
+msgctxt "content"
+msgid "wine"
+msgstr ""
+
 msgid "Bunker Silo"
 msgstr ""
 
@@ -22904,6 +22966,33 @@ msgstr ""
 msgid "Could not read NanoLog file:"
 msgstr ""
 
+msgid "OSM Recommendation"
+msgstr ""
+
+msgid "Recommend categories to your newly created instances."
+msgstr ""
+
+msgid "Training process configuration"
+msgstr ""
+
+msgid "Model Settings"
+msgstr ""
+
+msgid "Select objects or create new objects and get recommendation."
+msgstr ""
+
+msgid "Add Recommendation"
+msgstr ""
+
+msgid "Add a recommended key/value pair to your object"
+msgstr ""
+
+msgid "Train a Model"
+msgstr ""
+
+msgid "Start the training engine!"
+msgstr ""
+
 msgid "Edit opening hours"
 msgstr ""
 
diff --git a/i18n/po/hu.po b/i18n/po/hu.po
index aa13acc..5bcd7f5 100644
--- a/i18n/po/hu.po
+++ b/i18n/po/hu.po
@@ -8,16 +8,16 @@ msgid ""
 msgstr ""
 "Project-Id-Version: josm\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-04-27 03:33+0200\n"
-"PO-Revision-Date: 2015-04-26 16:30+0000\n"
-"Last-Translator: Zoltan Faludi <Unknown>\n"
+"POT-Creation-Date: 2015-05-12 03:33+0200\n"
+"PO-Revision-Date: 2015-05-09 11:41+0000\n"
+"Last-Translator: Marta Homann <marta.homann at gmail.com>\n"
 "Language-Team: Hungarian <kde-l10n-hu at kde.org>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Launchpad-Export-Date: 2015-04-27 04:44+0000\n"
-"X-Generator: Launchpad (build 17430)\n"
+"X-Launchpad-Export-Date: 2015-05-12 04:44+0000\n"
+"X-Generator: Launchpad (build 17487)\n"
 "Language: hu\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -1608,6 +1608,9 @@ msgstr[0] ""
 msgstr[1] ""
 "Az érintett vonal eltűnne, ha leválasztanád a kiválasztott pontokat."
 
+msgid "Some irrelevant nodes have been removed from the selection"
+msgstr ""
+
 msgid "Undo"
 msgstr "Visszavonás"
 
@@ -1881,13 +1884,13 @@ msgid ""
 msgstr ""
 
 msgid "More notes to download"
-msgstr ""
+msgstr "További letöltendő jegyzetek"
 
 msgid "Download OSM Notes within Bounds"
 msgstr ""
 
 msgid "Download OSM Note by ID"
-msgstr ""
+msgstr "OSM Note letöltése ID alapján"
 
 msgid "Download Compressed OSM Change"
 msgstr "Tömörített OSM Change letöltése"
@@ -1899,7 +1902,7 @@ msgid "Download Compressed OSM"
 msgstr "Tömörített OSM letöltése"
 
 msgid "Download OSM object by ID"
-msgstr ""
+msgstr "OSM objektum letöltése ID alapján"
 
 msgid "Download OSM"
 msgstr "OSM letöltése"
@@ -3342,6 +3345,11 @@ msgstr "Réteg: {0}"
 msgid "Failed to persist preferences to ''{0}''"
 msgstr "Nem sikerült elmenteni a beállításokat az alábbi helyre: ''{0}''"
 
+msgid ""
+"Try enabling IPv6 network, prefering IPv6 over IPv4 (only works on early "
+"startup)."
+msgstr ""
+
 msgid " (at line {0}, column {1})"
 msgstr " ({0}. sor {1}. oszlopában)"
 
@@ -4001,6 +4009,15 @@ msgstr "A sáv-függő értékek nem következetesek előre (forward) irányban"
 msgid "Number of lane dependent values inconsistent in backward direction"
 msgstr "A sáv-függő értékek nem következetesek vissza (backward) irányban"
 
+msgid "Long segments"
+msgstr "Hosszú szakaszok"
+
+msgid "This tests for long way segments, which are usually errors."
+msgstr "Ez hosszútávú szegmenseket tesztel, amelyek általában hibák."
+
+msgid "Very long segment of {0} kilometers"
+msgstr "Kiemelkedően hosszú {0} kilométeres szegmens"
+
 msgid "Tag checker (MapCSS based)"
 msgstr "Címkeellenőrző (MapCSS alapú)"
 
@@ -4756,7 +4773,7 @@ msgid "Print debugging messages to console"
 msgstr "Hibakeresési üzenetek kiírása a konzolra"
 
 msgid "Skip loading plugins"
-msgstr ""
+msgstr "Bővítmények letöltésének kihagyása"
 
 msgid "Disable access to the given resource(s), separated by comma"
 msgstr ""
@@ -4829,7 +4846,7 @@ msgid "Printing debugging messages to console"
 msgstr "Hibaüzenetek írása a konzolra"
 
 msgid "Plugin loading skipped"
-msgstr ""
+msgstr "Bővítmény betöltése átugorva"
 
 msgid "Enabled detailed debug level (trace)"
 msgstr "Részletes hibakeresési szint (trace) engedélyezve"
@@ -4870,6 +4887,18 @@ msgstr[0] "A JOSM offline módban fut. Ez az erőforrás nem lesz elérhető: {0
 msgstr[1] ""
 "A JOSM offline módban fut. Ezek az erőforrások nem lesz elérhetők: {0}"
 
+msgid ""
+"Detected useable IPv6 network, prefering IPv6 over IPv4 after next restart."
+msgstr ""
+
+msgid "Detected useable IPv6 network, prefering IPv6 over IPv4."
+msgstr "IPv6 hálózat észlelve, az IPv6 előnyben részesítése az IPv4 helyett."
+
+msgid ""
+"Detected no useable IPv6 network, prefering IPv4 over IPv6 after next "
+"restart."
+msgstr ""
+
 msgid "Unsaved osm data"
 msgstr "Elmentetlen osm adat"
 
@@ -6511,7 +6540,7 @@ msgid "Customize the style"
 msgstr "Stílus testreszabása"
 
 msgid "List of notes"
-msgstr ""
+msgstr "Jegyzetek listája"
 
 msgid "Add comment"
 msgstr "Megjegyzés hozzáadása"
@@ -6683,16 +6712,6 @@ msgid "Only launching info browsers for the first {0} of {1} selected users"
 msgstr ""
 "Infó böngésző nyitása csak az első {0} felhasználóhoz a(z) {1} kijelöltből"
 
-msgid ""
-"<html>Failed to create an URL because the encoding ''{0}''<br>was missing on "
-"this system.</html>"
-msgstr ""
-"<html>Nem sikerült URL-t készíteni, mert a(z) ''{0}'' kódolás<br>hiányzik "
-"ezen a rendszeren.</html>"
-
-msgid "Missing encoding"
-msgstr "Hiányzó kódolás"
-
 msgid "Author"
 msgstr "Szerkesztő"
 
@@ -7290,12 +7309,12 @@ msgid "Discardable key: background"
 msgstr "Eldobható kulcs: háttér"
 
 msgid "{0} ''{1}''"
-msgstr ""
+msgstr "{0} \"{1}\""
 
 msgid "{0} different"
 msgid_plural "{0} different"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "{0} különböző"
+msgstr[1] "{0} különböző"
 
 msgid ", {0} unset"
 msgid_plural ", {0} unset"
@@ -7321,7 +7340,7 @@ msgid "<different>"
 msgstr "<különböző>"
 
 msgid "Objects: {2} / Tags: {0} / Memberships: {1}"
-msgstr ""
+msgstr "Objektumok: {2} / Tagek: {0} / Tagságok {1}"
 
 msgid "Tags: {0} / Memberships: {1}"
 msgstr "Címke: {0} / Tagság: {1}"
@@ -9480,7 +9499,7 @@ msgid "Best zoom: {0}"
 msgstr "Legjobb nagyítás: {0}"
 
 msgid "Cache stats: {0}"
-msgstr ""
+msgstr "Gyorsítótár adatok: {0}"
 
 msgid "TMS layer ({0}), downloading in zoom {1}"
 msgstr "TMS réteg ({0}), letöltés {1} zoomszinten"
@@ -11663,7 +11682,10 @@ msgid "Tile cache directory: "
 msgstr "Csempegyorsítótár könyvtár: "
 
 msgid "Maximum concurrent downloads: "
-msgstr ""
+msgstr "Maximális egy időben történő letöltés: "
+
+msgid "Maximum concurrent downloads per host: "
+msgstr "Maximális egy időben történő letöltés csomópontonként: "
 
 msgid "Maximum elements in disk cache: "
 msgstr ""
@@ -11782,9 +11804,6 @@ msgstr ""
 "Figyelmeztetés: érvénytelen formátumú bejegyzés a stíluslistában \"{0}\". "
 "Kapott érték \"{1}\""
 
-msgid "JOSM default (XML; old version)"
-msgstr "JOSM alapértelmezett (XML; régi verzió)"
-
 msgid "JOSM default (MapCSS)"
 msgstr "JOSM alapértelmezett (MapCSS)"
 
@@ -13414,9 +13433,6 @@ msgstr "Jegyzet feltöltése meghiúsult"
 msgid "Error parsing note response from server"
 msgstr "A szerver jegyzet válaszának feldolgozása hibás"
 
-msgid "Error encoding string: {0}"
-msgstr "Szöveg titkosítás hibás: {0}"
-
 msgid "(Code={0})"
 msgstr "(Kód={0})"
 
@@ -13804,26 +13820,26 @@ msgstr "Új objektumok létrehozása"
 msgid "Read protocol version"
 msgstr "Olvasási protokollverzió"
 
-msgid "Cannot start remotecontrol server on port {0}: {1}"
-msgstr "Nem indul el a távvezérlő szerver a(z) {0} porton: {1}"
+msgid "Cannot start IPv4 remotecontrol server on port {0}: {1}"
+msgstr ""
 
-msgid "RemoteControl::Accepting connections on {0}:{1}"
-msgstr "Távirányító::Kapcsolatok fogadása {0}:{1}"
+msgid "Cannot start IPv6 remotecontrol server on port {0}: {1}"
+msgstr ""
 
-msgid "RemoteControl::Server stopped."
-msgstr "Távirányító::Szerver megállítva."
+msgid "RemoteControl::Accepting remote connections on {0}:{1}"
+msgstr ""
 
-msgid "Cannot start remotecontrol https server on port {0}: {1}"
-msgstr "A távirányító https szerver nem indítható el a(z) {0} porton: {1}"
+msgid "RemoteControl::Server {0}:{1} stopped."
+msgstr ""
 
-msgid "Unable to initialize Remote Control HTTPS Server"
-msgstr "Nem sikerül inicializálni a Távirányító HTTPS szervert"
+msgid "Cannot start IPv4 remotecontrol https server on port {0}: {1}"
+msgstr ""
 
-msgid "RemoteControl::Accepting secure connections on {0}:{1}"
-msgstr "Távirányító::Biztonságos kapcsolatok fogadása a(z) {0}:{1} porton"
+msgid "Cannot start IPv6 remotecontrol https server on port {0}: {1}"
+msgstr ""
 
-msgid "RemoteControl::Server (https) stopped."
-msgstr "Távirányító::Szerver (https) megállítva."
+msgid "RemoteControl::Accepting secure remote connections on {0}:{1}"
+msgstr ""
 
 msgid "Remote Control has been asked to create a new node."
 msgstr "A Távirányítóhoz kérés érkezett, egy új pont létrehozására."
@@ -15463,7 +15479,7 @@ msgid "Locator Overlay"
 msgstr ""
 
 msgid "QA No Address"
-msgstr ""
+msgstr "QA nincs cím"
 
 msgid "Waymarked Trails: Hiking"
 msgstr "Waymarked Trails: túra"
@@ -15554,10 +15570,10 @@ msgid ""
 msgstr "AGIV(laanderen) légifotó (Brusseli régió) (2013)"
 
 msgid "SPW(allonie) 2012 aerial imagery"
-msgstr ""
+msgstr "SPW(allonie) 2012 légi képek"
 
 msgid "SPW(allonie) 2009 aerial imagery"
-msgstr ""
+msgstr "SPW(allonie) 2009 légi felvételek"
 
 msgid "IBGE Mapa de Setores Urbanos"
 msgstr "IBGE Mapa de Setores Urbanos"
@@ -15578,7 +15594,7 @@ msgid "British Columbia Mosaic"
 msgstr "British Columbia Mosaic"
 
 msgid "Kelowna 2012"
-msgstr ""
+msgstr "Kelowna 2012"
 
 msgid "Kelowna Roads overlay"
 msgstr ""
@@ -15623,7 +15639,7 @@ msgid "Estonia Forestry (Maaamet)"
 msgstr "Estonia Forestry (Maaamet)"
 
 msgid "BANO"
-msgstr ""
+msgstr "BANO"
 
 msgid "Bordeaux - 2012"
 msgstr "Bordeaux - 2012"
@@ -15632,7 +15648,7 @@ msgid "Cadastre"
 msgstr ""
 
 msgid "CRAIG - Auvergne 2013 - 25 cm"
-msgstr ""
+msgstr "RAIG - Auvergne 2013 - 25 cm"
 
 msgid "CRIGE PACA Alpes-Maritimes 2009 - 40 cm"
 msgstr "CRIGE PACA Alpes-Maritimes 2009 - 40 cm"
@@ -15699,7 +15715,7 @@ msgid "Hamburg (40 cm)"
 msgstr "Hamburg (40 cm)"
 
 msgid "Hamburg (20 cm)"
-msgstr ""
+msgstr "Hamburg (20 cm)"
 
 msgid "Hamburg (DK5)"
 msgstr "Hamburg (DK5)"
@@ -15756,9 +15772,6 @@ msgstr "NRW-Atlas: Topographische Karte 1:10000"
 msgid "Metropole Ruhr: Luftbilder (10 cm)"
 msgstr "Metropole Ruhr: Luftbilder (10 cm)"
 
-msgid "SN Luftbilder, Straßennetz, Administrative Grenzen"
-msgstr ""
-
 msgid "Drone Imagery (Haiti)"
 msgstr "Drón ábrázolás (Haiti)"
 
@@ -16705,6 +16718,11 @@ msgstr ""
 "Hibákat hív be az OSM Inspector-ból és megjeleníti az aktuális JOSM "
 "kijelölési területen."
 
+msgid ""
+"Recommends categories/tags on newly created OSM entities by analysing "
+"spatial entities into training features and using SVM classification"
+msgstr ""
+
 msgid "Import/export OSM data in PBF format"
 msgstr "OSM adatok betöltése és kiöntése PBF formátumban."
 
@@ -17399,7 +17417,7 @@ msgstr "(unió) rögbi"
 
 msgctxt "sport"
 msgid "running"
-msgstr ""
+msgstr "futás"
 
 msgctxt "sport"
 msgid "shooting"
@@ -17761,7 +17779,7 @@ msgid "Is the water body intermittent (disappears seasonally)?"
 msgstr "A víztömeg jelenléte időszakos  (szezonálisan eltűnik)?"
 
 msgid "culvert"
-msgstr ""
+msgstr "áteresz"
 
 msgid "Water access rules:"
 msgstr ""
@@ -17889,7 +17907,7 @@ msgid "Parking Aisle"
 msgstr "parkolóút"
 
 msgid "Escape"
-msgstr ""
+msgstr "Kijárat"
 
 msgid ""
 "Emergency lane beside long descending slopes for trucks and other vehicles "
@@ -18399,7 +18417,7 @@ msgid "Pedestrian Crossing"
 msgstr "Gyalogátkelő"
 
 msgid "In case of traffic signals:"
-msgstr ""
+msgstr "Közlekedési jelzések esetében"
 
 msgid "Traffic Calming"
 msgstr "Forgalomcsillapító"
@@ -19211,7 +19229,7 @@ msgid "1/50 mix (mofa/moped)"
 msgstr "1:50 keverék (moped)"
 
 msgid "Fuel cards:"
-msgstr ""
+msgstr "Üzemanyag kártyák:"
 
 msgid "DKV"
 msgstr "DKV"
@@ -19349,7 +19367,7 @@ msgid "Public Bicycle Repair Station"
 msgstr "Önkiszolgáló kerékpáros szervizpont"
 
 msgid "Chain tool"
-msgstr ""
+msgstr "Láncbontó szerszám"
 
 msgid "Public Transport"
 msgstr "Tömegközlekedés"
@@ -19574,7 +19592,7 @@ msgid "Tactile Paving"
 msgstr "Vakvezető burkolat"
 
 msgid "incorrect"
-msgstr ""
+msgstr "helytelen"
 
 msgid "Bus Platform"
 msgstr "Autóbuszperon"
@@ -19649,7 +19667,7 @@ msgid "Motel"
 msgstr "Motel"
 
 msgid "Guest House/Bed & Breakfast"
-msgstr ""
+msgstr "Vendégház/ Szállás és reggeli"
 
 msgid "Chalet"
 msgstr "Apartman"
@@ -19740,7 +19758,7 @@ msgid "Microbrewery"
 msgstr "Házi sörfőzde"
 
 msgid "Outdoor seating"
-msgstr ""
+msgstr "Szabadtéri asztalok"
 
 msgid "Fast Food"
 msgstr "Gyorsétterem"
@@ -19966,7 +19984,7 @@ msgid "Fireplace"
 msgstr "Tűzrakóhely"
 
 msgid "Picnic Table"
-msgstr ""
+msgstr "Piknik asztal"
 
 msgid "Public Grill"
 msgstr "Nyilvános grillezőhely"
@@ -20210,7 +20228,7 @@ msgid "Police"
 msgstr "Rendőrség"
 
 msgid "Ranger Station"
-msgstr ""
+msgstr "Vadőr állomás"
 
 msgid "Fire Station"
 msgstr "Tűzoltóság"
@@ -20339,13 +20357,13 @@ msgid "Collection times"
 msgstr "Begyűjtési időpontok"
 
 msgid "Mo-Sa 09:00"
-msgstr ""
+msgstr "Hétfőtől-szombatig 09:00"
 
 msgid "Mo-Fr 17:30; Sa 12:00"
-msgstr ""
+msgstr "H-P 17:30; Sz 12:00"
 
 msgid "Mo-Fr 15:00,19:00; Sa 15:10; Su 10:30"
-msgstr ""
+msgstr "H-P 15:00, 19:00; Sz 15:10; V 10:30"
 
 msgid "Drive through"
 msgstr "Áthajtó (autós)"
@@ -20478,7 +20496,10 @@ msgstr ""
 msgid "Suction pumpout"
 msgstr ""
 
-msgid "Gravity dump station"
+msgid "Gravity drain for hose"
+msgstr ""
+
+msgid "Casette or Elsan Disposal"
 msgstr ""
 
 msgid "Operation times"
@@ -20732,10 +20753,10 @@ msgid "skitour"
 msgstr "sítúra"
 
 msgid "sled"
-msgstr ""
+msgstr "szánkó"
 
 msgid "sleigh"
-msgstr ""
+msgstr "szán"
 
 msgid "snow_park"
 msgstr "sípark"
@@ -20983,6 +21004,10 @@ msgid "shed"
 msgstr "pajta/gépszín"
 
 msgctxt "building"
+msgid "storage_tank"
+msgstr ""
+
+msgctxt "building"
 msgid "cowshed"
 msgstr "tehénistálló"
 
@@ -20992,7 +21017,7 @@ msgstr "építkezés"
 
 msgctxt "building"
 msgid "Levels"
-msgstr ""
+msgstr "Szintek"
 
 msgid "Residential Building"
 msgstr "Lakóépület"
@@ -21095,6 +21120,41 @@ msgstr "Szélmalom"
 msgid "Gasometer"
 msgstr "Gáztározó"
 
+msgid "Storage Tank"
+msgstr "Tárolótartály"
+
+msgctxt "content"
+msgid "fuel"
+msgstr "üzemanyag"
+
+msgctxt "content"
+msgid "manure"
+msgstr ""
+
+msgctxt "content"
+msgid "oil"
+msgstr ""
+
+msgctxt "content"
+msgid "sewage"
+msgstr ""
+
+msgctxt "content"
+msgid "silage"
+msgstr ""
+
+msgctxt "content"
+msgid "slurry"
+msgstr ""
+
+msgctxt "content"
+msgid "water"
+msgstr "víz"
+
+msgctxt "content"
+msgid "wine"
+msgstr "bor"
+
 msgid "Bunker Silo"
 msgstr "Falközi siló"
 
@@ -22403,7 +22463,7 @@ msgid "Hearing Aids"
 msgstr "Hallókészülék"
 
 msgid "Medical Supply"
-msgstr ""
+msgstr "Egészségügyi ellátás"
 
 msgid "Jewellery"
 msgstr "Ékszerész"
@@ -22526,13 +22586,13 @@ msgid "Debit cards"
 msgstr "Bankkártya"
 
 msgid "BankAxess"
-msgstr ""
+msgstr "Bank hozzáféré"
 
 msgid "Bancomat"
-msgstr ""
+msgstr "Bankomat"
 
 msgid "Girocard"
-msgstr ""
+msgstr "Bankkártya"
 
 msgid "Laser"
 msgstr ""
@@ -22553,7 +22613,7 @@ msgid "American Express"
 msgstr "American Express"
 
 msgid "Diners Club"
-msgstr ""
+msgstr "Diners Club"
 
 msgid "Discover Card"
 msgstr ""
@@ -22781,10 +22841,10 @@ msgid "A mountain or hill ridge."
 msgstr "Egy domb- vagy hegygerinc."
 
 msgid "Valley"
-msgstr ""
+msgstr "Völgy"
 
 msgid "A low area between hills."
-msgstr ""
+msgstr "Egy alacsonyan fekvő terület a hegyek között."
 
 msgid "Cave Entrance"
 msgstr "Barlangbejárat"
@@ -22830,23 +22890,23 @@ msgstr ""
 
 msgctxt "cutline"
 msgid "border"
-msgstr ""
+msgstr "határ"
 
 msgctxt "cutline"
 msgid "firebreak"
-msgstr ""
+msgstr "tűzvédelmi sáv"
 
 msgctxt "cutline"
 msgid "hunting"
-msgstr ""
+msgstr "vadászat"
 
 msgctxt "cutline"
 msgid "loggingmachine"
-msgstr ""
+msgstr "favágó gép"
 
 msgctxt "cutline"
 msgid "pipeline"
-msgstr ""
+msgstr "csővezeték"
 
 msgctxt "cutline"
 msgid "piste"
@@ -22854,7 +22914,7 @@ msgstr ""
 
 msgctxt "cutline"
 msgid "section"
-msgstr ""
+msgstr "szakasz"
 
 msgid "Grassland"
 msgstr "Füves terület"
@@ -23315,7 +23375,7 @@ msgstr "Kapcsolat („contact:*” előtagú séma)"
 
 msgctxt "description=*"
 msgid "A short text with additional information."
-msgstr ""
+msgstr "Egy rövid szöveg további információkkal."
 
 msgctxt "description=*"
 msgid ""
@@ -23325,7 +23385,7 @@ msgstr ""
 
 msgctxt "note=*, fixme=*, description=*"
 msgid "Similar but different tags:"
-msgstr ""
+msgstr "Hasonló, de eltérő tagek:"
 
 msgctxt "the tag note=*"
 msgid "Note"
@@ -23363,16 +23423,16 @@ msgid "maritime"
 msgstr ""
 
 msgid "national_park"
-msgstr ""
+msgstr "nemzeti_park"
 
 msgid "political"
 msgstr "politikai"
 
 msgid "postal_code"
-msgstr ""
+msgstr "postai_irányítószám"
 
 msgid "protected_area"
-msgstr ""
+msgstr "védett_övezet"
 
 msgid "Sub area"
 msgstr "Alterület"
@@ -23525,13 +23585,13 @@ msgid "Piste Route"
 msgstr "Sí útvonal"
 
 msgid "link segment"
-msgstr ""
+msgstr "hivatkozásszegmens"
 
 msgid "shortcut segment"
-msgstr ""
+msgstr "billentyűparancs szegmens"
 
 msgid "variant segment"
-msgstr ""
+msgstr "változó szegmens"
 
 msgid "entry points"
 msgstr "belépési pontok"
@@ -24292,10 +24352,10 @@ msgid "Enter key mode"
 msgstr ""
 
 msgid "Auto add tags"
-msgstr ""
+msgstr "Tagek automatikus hozzáadása"
 
 msgid "Autosimplify"
-msgstr ""
+msgstr "Automatikus egyszerűsítés"
 
 msgid "Simplify with initial epsilon"
 msgstr ""
@@ -24609,6 +24669,33 @@ msgstr "NanoLog fájl megnyitása..."
 msgid "Could not read NanoLog file:"
 msgstr "A NanoLog fájl nem olvasható:"
 
+msgid "OSM Recommendation"
+msgstr ""
+
+msgid "Recommend categories to your newly created instances."
+msgstr ""
+
+msgid "Training process configuration"
+msgstr ""
+
+msgid "Model Settings"
+msgstr ""
+
+msgid "Select objects or create new objects and get recommendation."
+msgstr ""
+
+msgid "Add Recommendation"
+msgstr ""
+
+msgid "Add a recommended key/value pair to your object"
+msgstr ""
+
+msgid "Train a Model"
+msgstr ""
+
+msgid "Start the training engine!"
+msgstr ""
+
 msgid "Edit opening hours"
 msgstr "Nyitvatartási idő szerkesztése"
 
@@ -25080,10 +25167,10 @@ msgid "Select an area (e.g. building) from an underlying image."
 msgstr ""
 
 msgid "Area Selector"
-msgstr ""
+msgstr "Területválasztó"
 
 msgid "Created area"
-msgstr ""
+msgstr "Létrehozott terület"
 
 msgid "Unable to detect a polygon where you clicked."
 msgstr ""
@@ -25273,6 +25360,8 @@ msgid ""
 "Error loading file.\n"
 "Probably an old version of the cache file."
 msgstr ""
+"Hiba történt a fájl betöltése közben.\n"
+"Valószínűleg a gyorsítótár fájl egy korábbi verziója."
 
 msgid "Lambert Zone {0} cache file (.{0})"
 msgstr ""
@@ -25306,7 +25395,7 @@ msgid ""
 msgstr ""
 
 msgid "Choose from..."
-msgstr ""
+msgstr "Válasszon a következőkből:"
 
 msgid "Select commune"
 msgstr ""
@@ -25395,7 +25484,7 @@ msgid "locality"
 msgstr "helyszín"
 
 msgid "section"
-msgstr ""
+msgstr "szakasz"
 
 msgid "commune"
 msgstr "közösség"
@@ -25404,7 +25493,7 @@ msgid "Enable automatic caching."
 msgstr ""
 
 msgid "Max. cache size (in MB)"
-msgstr ""
+msgstr "Gyorsítótár maximális mérete (MB)"
 
 msgid "French cadastre WMS"
 msgstr ""
@@ -25445,13 +25534,13 @@ msgid "Image resolution:"
 msgstr ""
 
 msgid "High resolution (1000x800)"
-msgstr ""
+msgstr "Nagy felbontás (1000x800)"
 
 msgid "Medium resolution (800x600)"
 msgstr ""
 
 msgid "Low resolution (600x400)"
-msgstr ""
+msgstr "Alacsony felbontás (600x400)"
 
 msgid "Image filter interpolation:"
 msgstr ""
@@ -25460,10 +25549,10 @@ msgid "Nearest-Neighbor (fastest) [ Default ]"
 msgstr ""
 
 msgid "Bilinear (fast)"
-msgstr ""
+msgstr "Bilineáris (gyors)"
 
 msgid "Bicubic (slow)"
-msgstr ""
+msgstr "Bikubikus (lassú)"
 
 msgid "Vector images grab multiplier:"
 msgstr ""
@@ -25550,7 +25639,7 @@ msgid "Contacting WMS Server..."
 msgstr ""
 
 msgid "Create buildings"
-msgstr ""
+msgstr "Épületek létrehozása"
 
 msgid ""
 "To avoid cadastre WMS overload,\n"
@@ -25679,7 +25768,7 @@ msgid "Improve georeferencing (only raster images)"
 msgstr ""
 
 msgid "Reset cookie"
-msgstr ""
+msgstr "Süti visszaállítása"
 
 msgid "Get a new cookie (session timeout)"
 msgstr ""
@@ -26206,7 +26295,7 @@ msgid "No data found on device."
 msgstr ""
 
 msgid "Connection failed."
-msgstr ""
+msgstr "Sikertelen csatlakozás."
 
 msgid ""
 "Cannot load library rxtxSerial. If you need support to install it try "
@@ -26221,7 +26310,7 @@ msgid "Import Data from Globalsat Datalogger DG100 into GPX layer."
 msgstr ""
 
 msgid "Import"
-msgstr ""
+msgstr "Importálás"
 
 msgid "GPS Blams"
 msgstr ""
diff --git a/i18n/po/hy.po b/i18n/po/hy.po
index 953bccb..85348a3 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-04-27 03:33+0200\n"
+"POT-Creation-Date: 2015-05-12 03:33+0200\n"
 "PO-Revision-Date: 2011-04-13 21:51+0000\n"
 "Last-Translator: Gev777 <Unknown>\n"
 "Language-Team: Armenian <hy at li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=1; plural=0;\n"
-"X-Launchpad-Export-Date: 2015-04-27 04:32+0000\n"
-"X-Generator: Launchpad (build 17430)\n"
+"X-Launchpad-Export-Date: 2015-05-12 04:32+0000\n"
+"X-Generator: Launchpad (build 17487)\n"
 "Language: hy\n"
 
 msgid "Cancel"
@@ -1468,6 +1468,9 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Some irrelevant nodes have been removed from the selection"
+msgstr ""
+
 msgid "Undo"
 msgstr ""
 
@@ -3065,6 +3068,11 @@ msgstr ""
 msgid "Failed to persist preferences to ''{0}''"
 msgstr ""
 
+msgid ""
+"Try enabling IPv6 network, prefering IPv6 over IPv4 (only works on early "
+"startup)."
+msgstr ""
+
 msgid " (at line {0}, column {1})"
 msgstr ""
 
@@ -3693,6 +3701,15 @@ msgstr ""
 msgid "Number of lane dependent values inconsistent in backward direction"
 msgstr ""
 
+msgid "Long segments"
+msgstr ""
+
+msgid "This tests for long way segments, which are usually errors."
+msgstr ""
+
+msgid "Very long segment of {0} kilometers"
+msgstr ""
+
 msgid "Tag checker (MapCSS based)"
 msgstr ""
 
@@ -4522,6 +4539,18 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
+msgid ""
+"Detected useable IPv6 network, prefering IPv6 over IPv4 after next restart."
+msgstr ""
+
+msgid "Detected useable IPv6 network, prefering IPv6 over IPv4."
+msgstr ""
+
+msgid ""
+"Detected no useable IPv6 network, prefering IPv4 over IPv6 after next "
+"restart."
+msgstr ""
+
 msgid "Unsaved osm data"
 msgstr ""
 
@@ -6200,14 +6229,6 @@ msgstr ""
 msgid "Only launching info browsers for the first {0} of {1} selected users"
 msgstr ""
 
-msgid ""
-"<html>Failed to create an URL because the encoding ''{0}''<br>was missing on "
-"this system.</html>"
-msgstr ""
-
-msgid "Missing encoding"
-msgstr ""
-
 msgid "Author"
 msgstr ""
 
@@ -10662,6 +10683,9 @@ msgstr ""
 msgid "Maximum concurrent downloads: "
 msgstr ""
 
+msgid "Maximum concurrent downloads per host: "
+msgstr ""
+
 msgid "Maximum elements in disk cache: "
 msgstr ""
 
@@ -10764,9 +10788,6 @@ msgstr ""
 msgid "Warning: illegal format of entry in style list ''{0}''. Got ''{1}''"
 msgstr ""
 
-msgid "JOSM default (XML; old version)"
-msgstr ""
-
 msgid "JOSM default (MapCSS)"
 msgstr ""
 
@@ -12228,9 +12249,6 @@ msgstr ""
 msgid "Error parsing note response from server"
 msgstr ""
 
-msgid "Error encoding string: {0}"
-msgstr ""
-
 msgid "(Code={0})"
 msgstr ""
 
@@ -12588,25 +12606,25 @@ msgstr ""
 msgid "Read protocol version"
 msgstr ""
 
-msgid "Cannot start remotecontrol server on port {0}: {1}"
+msgid "Cannot start IPv4 remotecontrol server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Accepting connections on {0}:{1}"
+msgid "Cannot start IPv6 remotecontrol server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Server stopped."
+msgid "RemoteControl::Accepting remote connections on {0}:{1}"
 msgstr ""
 
-msgid "Cannot start remotecontrol https server on port {0}: {1}"
+msgid "RemoteControl::Server {0}:{1} stopped."
 msgstr ""
 
-msgid "Unable to initialize Remote Control HTTPS Server"
+msgid "Cannot start IPv4 remotecontrol https server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Accepting secure connections on {0}:{1}"
+msgid "Cannot start IPv6 remotecontrol https server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Server (https) stopped."
+msgid "RemoteControl::Accepting secure remote connections on {0}:{1}"
 msgstr ""
 
 msgid "Remote Control has been asked to create a new node."
@@ -14274,9 +14292,6 @@ msgstr ""
 msgid "Metropole Ruhr: Luftbilder (10 cm)"
 msgstr ""
 
-msgid "SN Luftbilder, Straßennetz, Administrative Grenzen"
-msgstr ""
-
 msgid "Drone Imagery (Haiti)"
 msgstr ""
 
@@ -15137,6 +15152,11 @@ msgid ""
 "bounding box"
 msgstr ""
 
+msgid ""
+"Recommends categories/tags on newly created OSM entities by analysing "
+"spatial entities into training features and using SVM classification"
+msgstr ""
+
 msgid "Import/export OSM data in PBF format"
 msgstr ""
 
@@ -18837,7 +18857,10 @@ msgstr ""
 msgid "Suction pumpout"
 msgstr ""
 
-msgid "Gravity dump station"
+msgid "Gravity drain for hose"
+msgstr ""
+
+msgid "Casette or Elsan Disposal"
 msgstr ""
 
 msgid "Operation times"
@@ -19341,6 +19364,10 @@ msgid "shed"
 msgstr ""
 
 msgctxt "building"
+msgid "storage_tank"
+msgstr ""
+
+msgctxt "building"
 msgid "cowshed"
 msgstr ""
 
@@ -19453,6 +19480,41 @@ msgstr ""
 msgid "Gasometer"
 msgstr ""
 
+msgid "Storage Tank"
+msgstr ""
+
+msgctxt "content"
+msgid "fuel"
+msgstr ""
+
+msgctxt "content"
+msgid "manure"
+msgstr ""
+
+msgctxt "content"
+msgid "oil"
+msgstr ""
+
+msgctxt "content"
+msgid "sewage"
+msgstr ""
+
+msgctxt "content"
+msgid "silage"
+msgstr ""
+
+msgctxt "content"
+msgid "slurry"
+msgstr ""
+
+msgctxt "content"
+msgid "water"
+msgstr ""
+
+msgctxt "content"
+msgid "wine"
+msgstr ""
+
 msgid "Bunker Silo"
 msgstr ""
 
@@ -22904,6 +22966,33 @@ msgstr ""
 msgid "Could not read NanoLog file:"
 msgstr ""
 
+msgid "OSM Recommendation"
+msgstr ""
+
+msgid "Recommend categories to your newly created instances."
+msgstr ""
+
+msgid "Training process configuration"
+msgstr ""
+
+msgid "Model Settings"
+msgstr ""
+
+msgid "Select objects or create new objects and get recommendation."
+msgstr ""
+
+msgid "Add Recommendation"
+msgstr ""
+
+msgid "Add a recommended key/value pair to your object"
+msgstr ""
+
+msgid "Train a Model"
+msgstr ""
+
+msgid "Start the training engine!"
+msgstr ""
+
 msgid "Edit opening hours"
 msgstr ""
 
diff --git a/i18n/po/ia.po b/i18n/po/ia.po
index 85c615f..79c84a3 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-04-27 03:33+0200\n"
+"POT-Creation-Date: 2015-05-12 03:33+0200\n"
 "PO-Revision-Date: 2011-08-29 01:02+0000\n"
 "Last-Translator: Emilio Sepulveda <Unknown>\n"
 "Language-Team: Interlingua <ia at li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Launchpad-Export-Date: 2015-04-27 04:45+0000\n"
-"X-Generator: Launchpad (build 17430)\n"
+"X-Launchpad-Export-Date: 2015-05-12 04:45+0000\n"
+"X-Generator: Launchpad (build 17487)\n"
 "Language: ia\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -1468,6 +1468,9 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Some irrelevant nodes have been removed from the selection"
+msgstr ""
+
 msgid "Undo"
 msgstr ""
 
@@ -3065,6 +3068,11 @@ msgstr ""
 msgid "Failed to persist preferences to ''{0}''"
 msgstr ""
 
+msgid ""
+"Try enabling IPv6 network, prefering IPv6 over IPv4 (only works on early "
+"startup)."
+msgstr ""
+
 msgid " (at line {0}, column {1})"
 msgstr ""
 
@@ -3693,6 +3701,15 @@ msgstr ""
 msgid "Number of lane dependent values inconsistent in backward direction"
 msgstr ""
 
+msgid "Long segments"
+msgstr ""
+
+msgid "This tests for long way segments, which are usually errors."
+msgstr ""
+
+msgid "Very long segment of {0} kilometers"
+msgstr ""
+
 msgid "Tag checker (MapCSS based)"
 msgstr ""
 
@@ -4522,6 +4539,18 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
+msgid ""
+"Detected useable IPv6 network, prefering IPv6 over IPv4 after next restart."
+msgstr ""
+
+msgid "Detected useable IPv6 network, prefering IPv6 over IPv4."
+msgstr ""
+
+msgid ""
+"Detected no useable IPv6 network, prefering IPv4 over IPv6 after next "
+"restart."
+msgstr ""
+
 msgid "Unsaved osm data"
 msgstr ""
 
@@ -6200,14 +6229,6 @@ msgstr ""
 msgid "Only launching info browsers for the first {0} of {1} selected users"
 msgstr ""
 
-msgid ""
-"<html>Failed to create an URL because the encoding ''{0}''<br>was missing on "
-"this system.</html>"
-msgstr ""
-
-msgid "Missing encoding"
-msgstr ""
-
 msgid "Author"
 msgstr ""
 
@@ -10662,6 +10683,9 @@ msgstr ""
 msgid "Maximum concurrent downloads: "
 msgstr ""
 
+msgid "Maximum concurrent downloads per host: "
+msgstr ""
+
 msgid "Maximum elements in disk cache: "
 msgstr ""
 
@@ -10764,9 +10788,6 @@ msgstr ""
 msgid "Warning: illegal format of entry in style list ''{0}''. Got ''{1}''"
 msgstr ""
 
-msgid "JOSM default (XML; old version)"
-msgstr ""
-
 msgid "JOSM default (MapCSS)"
 msgstr ""
 
@@ -12228,9 +12249,6 @@ msgstr ""
 msgid "Error parsing note response from server"
 msgstr ""
 
-msgid "Error encoding string: {0}"
-msgstr ""
-
 msgid "(Code={0})"
 msgstr ""
 
@@ -12588,25 +12606,25 @@ msgstr ""
 msgid "Read protocol version"
 msgstr ""
 
-msgid "Cannot start remotecontrol server on port {0}: {1}"
+msgid "Cannot start IPv4 remotecontrol server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Accepting connections on {0}:{1}"
+msgid "Cannot start IPv6 remotecontrol server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Server stopped."
+msgid "RemoteControl::Accepting remote connections on {0}:{1}"
 msgstr ""
 
-msgid "Cannot start remotecontrol https server on port {0}: {1}"
+msgid "RemoteControl::Server {0}:{1} stopped."
 msgstr ""
 
-msgid "Unable to initialize Remote Control HTTPS Server"
+msgid "Cannot start IPv4 remotecontrol https server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Accepting secure connections on {0}:{1}"
+msgid "Cannot start IPv6 remotecontrol https server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Server (https) stopped."
+msgid "RemoteControl::Accepting secure remote connections on {0}:{1}"
 msgstr ""
 
 msgid "Remote Control has been asked to create a new node."
@@ -14274,9 +14292,6 @@ msgstr ""
 msgid "Metropole Ruhr: Luftbilder (10 cm)"
 msgstr ""
 
-msgid "SN Luftbilder, Straßennetz, Administrative Grenzen"
-msgstr ""
-
 msgid "Drone Imagery (Haiti)"
 msgstr ""
 
@@ -15137,6 +15152,11 @@ msgid ""
 "bounding box"
 msgstr ""
 
+msgid ""
+"Recommends categories/tags on newly created OSM entities by analysing "
+"spatial entities into training features and using SVM classification"
+msgstr ""
+
 msgid "Import/export OSM data in PBF format"
 msgstr ""
 
@@ -18837,7 +18857,10 @@ msgstr ""
 msgid "Suction pumpout"
 msgstr ""
 
-msgid "Gravity dump station"
+msgid "Gravity drain for hose"
+msgstr ""
+
+msgid "Casette or Elsan Disposal"
 msgstr ""
 
 msgid "Operation times"
@@ -19341,6 +19364,10 @@ msgid "shed"
 msgstr ""
 
 msgctxt "building"
+msgid "storage_tank"
+msgstr ""
+
+msgctxt "building"
 msgid "cowshed"
 msgstr ""
 
@@ -19453,6 +19480,41 @@ msgstr ""
 msgid "Gasometer"
 msgstr ""
 
+msgid "Storage Tank"
+msgstr ""
+
+msgctxt "content"
+msgid "fuel"
+msgstr ""
+
+msgctxt "content"
+msgid "manure"
+msgstr ""
+
+msgctxt "content"
+msgid "oil"
+msgstr ""
+
+msgctxt "content"
+msgid "sewage"
+msgstr ""
+
+msgctxt "content"
+msgid "silage"
+msgstr ""
+
+msgctxt "content"
+msgid "slurry"
+msgstr ""
+
+msgctxt "content"
+msgid "water"
+msgstr ""
+
+msgctxt "content"
+msgid "wine"
+msgstr ""
+
 msgid "Bunker Silo"
 msgstr ""
 
@@ -22904,6 +22966,33 @@ msgstr ""
 msgid "Could not read NanoLog file:"
 msgstr ""
 
+msgid "OSM Recommendation"
+msgstr ""
+
+msgid "Recommend categories to your newly created instances."
+msgstr ""
+
+msgid "Training process configuration"
+msgstr ""
+
+msgid "Model Settings"
+msgstr ""
+
+msgid "Select objects or create new objects and get recommendation."
+msgstr ""
+
+msgid "Add Recommendation"
+msgstr ""
+
+msgid "Add a recommended key/value pair to your object"
+msgstr ""
+
+msgid "Train a Model"
+msgstr ""
+
+msgid "Start the training engine!"
+msgstr ""
+
 msgid "Edit opening hours"
 msgstr ""
 
diff --git a/i18n/po/id.po b/i18n/po/id.po
index 25f562e..a42e70f 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-04-27 03:33+0200\n"
+"POT-Creation-Date: 2015-05-12 03:33+0200\n"
 "PO-Revision-Date: 2015-04-10 09:39+0000\n"
 "Last-Translator: Trisno Pamuji <tri.snowman at gmail.com>\n"
 "Language-Team: Indonesian <id at li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=1; plural=0;\n"
-"X-Launchpad-Export-Date: 2015-04-27 04:45+0000\n"
-"X-Generator: Launchpad (build 17430)\n"
+"X-Launchpad-Export-Date: 2015-05-12 04:45+0000\n"
+"X-Generator: Launchpad (build 17487)\n"
 "Language: id\n"
 "X-Language: id_ID\n"
 
@@ -1577,6 +1577,9 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Some irrelevant nodes have been removed from the selection"
+msgstr ""
+
 msgid "Undo"
 msgstr "Ulangi"
 
@@ -3268,6 +3271,11 @@ msgstr "Layer: {0}"
 msgid "Failed to persist preferences to ''{0}''"
 msgstr ""
 
+msgid ""
+"Try enabling IPv6 network, prefering IPv6 over IPv4 (only works on early "
+"startup)."
+msgstr ""
+
 msgid " (at line {0}, column {1})"
 msgstr " (pada garis {0}, kolom {1})"
 
@@ -3930,6 +3938,15 @@ msgstr ""
 msgid "Number of lane dependent values inconsistent in backward direction"
 msgstr ""
 
+msgid "Long segments"
+msgstr ""
+
+msgid "This tests for long way segments, which are usually errors."
+msgstr ""
+
+msgid "Very long segment of {0} kilometers"
+msgstr ""
+
 msgid "Tag checker (MapCSS based)"
 msgstr ""
 
@@ -4784,6 +4801,18 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
+msgid ""
+"Detected useable IPv6 network, prefering IPv6 over IPv4 after next restart."
+msgstr ""
+
+msgid "Detected useable IPv6 network, prefering IPv6 over IPv4."
+msgstr ""
+
+msgid ""
+"Detected no useable IPv6 network, prefering IPv4 over IPv6 after next "
+"restart."
+msgstr ""
+
 msgid "Unsaved osm data"
 msgstr "osm data tidak tersimpan"
 
@@ -6531,16 +6560,6 @@ msgstr "Luncurkan browser dengan informasi mengenai pengguna"
 msgid "Only launching info browsers for the first {0} of {1} selected users"
 msgstr ""
 
-msgid ""
-"<html>Failed to create an URL because the encoding ''{0}''<br>was missing on "
-"this system.</html>"
-msgstr ""
-"<html>Gagal untuk membuat URL karena pengkodean \"{0}\"<br>hilang pada "
-"sistem ini.<html>"
-
-msgid "Missing encoding"
-msgstr "Pengkodean hilang"
-
 msgid "Author"
 msgstr "Pengarang"
 
@@ -11405,6 +11424,9 @@ msgstr "Direktori indeks cache: "
 msgid "Maximum concurrent downloads: "
 msgstr ""
 
+msgid "Maximum concurrent downloads per host: "
+msgstr ""
+
 msgid "Maximum elements in disk cache: "
 msgstr ""
 
@@ -11520,9 +11542,6 @@ msgstr ""
 "peringatan: format ilegal dari entri pada daftar model ''{0}''. Mendapatkan "
 "''{1}''"
 
-msgid "JOSM default (XML; old version)"
-msgstr ""
-
 msgid "JOSM default (MapCSS)"
 msgstr ""
 
@@ -13097,9 +13116,6 @@ msgstr ""
 msgid "Error parsing note response from server"
 msgstr ""
 
-msgid "Error encoding string: {0}"
-msgstr ""
-
 msgid "(Code={0})"
 msgstr "(Kode={0})"
 
@@ -13480,25 +13496,25 @@ msgstr "membuat objek baru"
 msgid "Read protocol version"
 msgstr "membaca versi protokol"
 
-msgid "Cannot start remotecontrol server on port {0}: {1}"
+msgid "Cannot start IPv4 remotecontrol server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Accepting connections on {0}:{1}"
+msgid "Cannot start IPv6 remotecontrol server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Server stopped."
-msgstr "Kendali Jarak jauh::Server berhenti."
+msgid "RemoteControl::Accepting remote connections on {0}:{1}"
+msgstr ""
 
-msgid "Cannot start remotecontrol https server on port {0}: {1}"
+msgid "RemoteControl::Server {0}:{1} stopped."
 msgstr ""
 
-msgid "Unable to initialize Remote Control HTTPS Server"
+msgid "Cannot start IPv4 remotecontrol https server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Accepting secure connections on {0}:{1}"
+msgid "Cannot start IPv6 remotecontrol https server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Server (https) stopped."
+msgid "RemoteControl::Accepting secure remote connections on {0}:{1}"
 msgstr ""
 
 msgid "Remote Control has been asked to create a new node."
@@ -15321,9 +15337,6 @@ msgstr ""
 msgid "Metropole Ruhr: Luftbilder (10 cm)"
 msgstr ""
 
-msgid "SN Luftbilder, Straßennetz, Administrative Grenzen"
-msgstr ""
-
 msgid "Drone Imagery (Haiti)"
 msgstr ""
 
@@ -16244,6 +16257,11 @@ msgstr ""
 "Membawa kesalahan dari Pemeriksa Osm dan menampilkannya dalam kotak pembatas "
 "JOSM saat ini"
 
+msgid ""
+"Recommends categories/tags on newly created OSM entities by analysing "
+"spatial entities into training features and using SVM classification"
+msgstr ""
+
 msgid "Import/export OSM data in PBF format"
 msgstr ""
 
@@ -19982,7 +20000,10 @@ msgstr ""
 msgid "Suction pumpout"
 msgstr ""
 
-msgid "Gravity dump station"
+msgid "Gravity drain for hose"
+msgstr ""
+
+msgid "Casette or Elsan Disposal"
 msgstr ""
 
 msgid "Operation times"
@@ -20486,6 +20507,10 @@ msgid "shed"
 msgstr ""
 
 msgctxt "building"
+msgid "storage_tank"
+msgstr ""
+
+msgctxt "building"
 msgid "cowshed"
 msgstr ""
 
@@ -20598,6 +20623,41 @@ msgstr "Kincir Angin"
 msgid "Gasometer"
 msgstr "Gasometer"
 
+msgid "Storage Tank"
+msgstr ""
+
+msgctxt "content"
+msgid "fuel"
+msgstr ""
+
+msgctxt "content"
+msgid "manure"
+msgstr ""
+
+msgctxt "content"
+msgid "oil"
+msgstr ""
+
+msgctxt "content"
+msgid "sewage"
+msgstr ""
+
+msgctxt "content"
+msgid "silage"
+msgstr ""
+
+msgctxt "content"
+msgid "slurry"
+msgstr ""
+
+msgctxt "content"
+msgid "water"
+msgstr ""
+
+msgctxt "content"
+msgid "wine"
+msgstr ""
+
 msgid "Bunker Silo"
 msgstr ""
 
@@ -24075,6 +24135,33 @@ msgstr "Buka file NanoLog..."
 msgid "Could not read NanoLog file:"
 msgstr ""
 
+msgid "OSM Recommendation"
+msgstr ""
+
+msgid "Recommend categories to your newly created instances."
+msgstr ""
+
+msgid "Training process configuration"
+msgstr ""
+
+msgid "Model Settings"
+msgstr ""
+
+msgid "Select objects or create new objects and get recommendation."
+msgstr ""
+
+msgid "Add Recommendation"
+msgstr ""
+
+msgid "Add a recommended key/value pair to your object"
+msgstr ""
+
+msgid "Train a Model"
+msgstr ""
+
+msgid "Start the training engine!"
+msgstr ""
+
 msgid "Edit opening hours"
 msgstr "Edit jam buka"
 
diff --git a/i18n/po/is.po b/i18n/po/is.po
index 9eadfac..2d5b7f5 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-04-27 03:33+0200\n"
+"POT-Creation-Date: 2015-05-12 03:33+0200\n"
 "PO-Revision-Date: 2013-03-30 13:49+0000\n"
 "Last-Translator: Pjetur G. Hjaltason <pjetur at pjetur.net>\n"
 "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-04-27 04:44+0000\n"
-"X-Generator: Launchpad (build 17430)\n"
+"X-Launchpad-Export-Date: 2015-05-12 04:44+0000\n"
+"X-Generator: Launchpad (build 17487)\n"
 "Language: is\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -1482,6 +1482,9 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Some irrelevant nodes have been removed from the selection"
+msgstr ""
+
 msgid "Undo"
 msgstr "Afturkalla"
 
@@ -3084,6 +3087,11 @@ msgstr "Lag: {0}"
 msgid "Failed to persist preferences to ''{0}''"
 msgstr ""
 
+msgid ""
+"Try enabling IPv6 network, prefering IPv6 over IPv4 (only works on early "
+"startup)."
+msgstr ""
+
 msgid " (at line {0}, column {1})"
 msgstr ""
 
@@ -3712,6 +3720,15 @@ msgstr ""
 msgid "Number of lane dependent values inconsistent in backward direction"
 msgstr ""
 
+msgid "Long segments"
+msgstr ""
+
+msgid "This tests for long way segments, which are usually errors."
+msgstr ""
+
+msgid "Very long segment of {0} kilometers"
+msgstr ""
+
 msgid "Tag checker (MapCSS based)"
 msgstr ""
 
@@ -4543,6 +4560,18 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
+msgid ""
+"Detected useable IPv6 network, prefering IPv6 over IPv4 after next restart."
+msgstr ""
+
+msgid "Detected useable IPv6 network, prefering IPv6 over IPv4."
+msgstr ""
+
+msgid ""
+"Detected no useable IPv6 network, prefering IPv4 over IPv6 after next "
+"restart."
+msgstr ""
+
 msgid "Unsaved osm data"
 msgstr ""
 
@@ -6223,14 +6252,6 @@ msgstr "Sýna notandasíðu þessa notanda á openstreetmap.org"
 msgid "Only launching info browsers for the first {0} of {1} selected users"
 msgstr ""
 
-msgid ""
-"<html>Failed to create an URL because the encoding ''{0}''<br>was missing on "
-"this system.</html>"
-msgstr ""
-
-msgid "Missing encoding"
-msgstr ""
-
 msgid "Author"
 msgstr "Notandi"
 
@@ -10703,6 +10724,9 @@ msgstr ""
 msgid "Maximum concurrent downloads: "
 msgstr ""
 
+msgid "Maximum concurrent downloads per host: "
+msgstr ""
+
 msgid "Maximum elements in disk cache: "
 msgstr ""
 
@@ -10805,9 +10829,6 @@ msgstr ""
 msgid "Warning: illegal format of entry in style list ''{0}''. Got ''{1}''"
 msgstr ""
 
-msgid "JOSM default (XML; old version)"
-msgstr ""
-
 msgid "JOSM default (MapCSS)"
 msgstr ""
 
@@ -12275,9 +12296,6 @@ msgstr ""
 msgid "Error parsing note response from server"
 msgstr ""
 
-msgid "Error encoding string: {0}"
-msgstr ""
-
 msgid "(Code={0})"
 msgstr ""
 
@@ -12636,25 +12654,25 @@ msgstr ""
 msgid "Read protocol version"
 msgstr ""
 
-msgid "Cannot start remotecontrol server on port {0}: {1}"
+msgid "Cannot start IPv4 remotecontrol server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Accepting connections on {0}:{1}"
+msgid "Cannot start IPv6 remotecontrol server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Server stopped."
+msgid "RemoteControl::Accepting remote connections on {0}:{1}"
 msgstr ""
 
-msgid "Cannot start remotecontrol https server on port {0}: {1}"
+msgid "RemoteControl::Server {0}:{1} stopped."
 msgstr ""
 
-msgid "Unable to initialize Remote Control HTTPS Server"
+msgid "Cannot start IPv4 remotecontrol https server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Accepting secure connections on {0}:{1}"
+msgid "Cannot start IPv6 remotecontrol https server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Server (https) stopped."
+msgid "RemoteControl::Accepting secure remote connections on {0}:{1}"
 msgstr ""
 
 msgid "Remote Control has been asked to create a new node."
@@ -14325,9 +14343,6 @@ msgstr ""
 msgid "Metropole Ruhr: Luftbilder (10 cm)"
 msgstr ""
 
-msgid "SN Luftbilder, Straßennetz, Administrative Grenzen"
-msgstr ""
-
 msgid "Drone Imagery (Haiti)"
 msgstr ""
 
@@ -15189,6 +15204,11 @@ msgid ""
 "bounding box"
 msgstr ""
 
+msgid ""
+"Recommends categories/tags on newly created OSM entities by analysing "
+"spatial entities into training features and using SVM classification"
+msgstr ""
+
 msgid "Import/export OSM data in PBF format"
 msgstr ""
 
@@ -18889,7 +18909,10 @@ msgstr ""
 msgid "Suction pumpout"
 msgstr ""
 
-msgid "Gravity dump station"
+msgid "Gravity drain for hose"
+msgstr ""
+
+msgid "Casette or Elsan Disposal"
 msgstr ""
 
 msgid "Operation times"
@@ -19393,6 +19416,10 @@ msgid "shed"
 msgstr ""
 
 msgctxt "building"
+msgid "storage_tank"
+msgstr ""
+
+msgctxt "building"
 msgid "cowshed"
 msgstr ""
 
@@ -19505,6 +19532,41 @@ msgstr "Vindmylla"
 msgid "Gasometer"
 msgstr ""
 
+msgid "Storage Tank"
+msgstr ""
+
+msgctxt "content"
+msgid "fuel"
+msgstr ""
+
+msgctxt "content"
+msgid "manure"
+msgstr ""
+
+msgctxt "content"
+msgid "oil"
+msgstr ""
+
+msgctxt "content"
+msgid "sewage"
+msgstr ""
+
+msgctxt "content"
+msgid "silage"
+msgstr ""
+
+msgctxt "content"
+msgid "slurry"
+msgstr ""
+
+msgctxt "content"
+msgid "water"
+msgstr ""
+
+msgctxt "content"
+msgid "wine"
+msgstr ""
+
 msgid "Bunker Silo"
 msgstr ""
 
@@ -22956,6 +23018,33 @@ msgstr ""
 msgid "Could not read NanoLog file:"
 msgstr ""
 
+msgid "OSM Recommendation"
+msgstr ""
+
+msgid "Recommend categories to your newly created instances."
+msgstr ""
+
+msgid "Training process configuration"
+msgstr ""
+
+msgid "Model Settings"
+msgstr ""
+
+msgid "Select objects or create new objects and get recommendation."
+msgstr ""
+
+msgid "Add Recommendation"
+msgstr ""
+
+msgid "Add a recommended key/value pair to your object"
+msgstr ""
+
+msgid "Train a Model"
+msgstr ""
+
+msgid "Start the training engine!"
+msgstr ""
+
 msgid "Edit opening hours"
 msgstr ""
 
diff --git a/i18n/po/it.po b/i18n/po/it.po
index 00a8f8c..0f209dd 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-04-27 03:33+0200\n"
+"POT-Creation-Date: 2015-05-12 03:33+0200\n"
 "PO-Revision-Date: 2015-03-30 13:27+0000\n"
 "Last-Translator: Sbiribizio <ftambussa at gmail.com>\n"
 "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-04-27 04:45+0000\n"
-"X-Generator: Launchpad (build 17430)\n"
+"X-Launchpad-Export-Date: 2015-05-12 04:46+0000\n"
+"X-Generator: Launchpad (build 17487)\n"
 "Language: it\n"
 "X-Language: it_IT\n"
 "X-Source-Language: en\n"
@@ -1620,6 +1620,9 @@ msgstr[1] ""
 "Il percorso interessato potrebbe scomparire dopo la disconnessione dei nodi "
 "selezionati."
 
+msgid "Some irrelevant nodes have been removed from the selection"
+msgstr ""
+
 msgid "Undo"
 msgstr "Annulla"
 
@@ -3405,6 +3408,11 @@ msgstr "Livello: {0}"
 msgid "Failed to persist preferences to ''{0}''"
 msgstr "Fallita la persistenza delle preferenze su ''{0}''"
 
+msgid ""
+"Try enabling IPv6 network, prefering IPv6 over IPv4 (only works on early "
+"startup)."
+msgstr ""
+
 msgid " (at line {0}, column {1})"
 msgstr " (alla linea {0}, colonna {1})"
 
@@ -4091,6 +4099,15 @@ msgstr ""
 "Valori dipendenti dal numero di corsie inconsistenti nel senso contrario di "
 "marcia"
 
+msgid "Long segments"
+msgstr ""
+
+msgid "This tests for long way segments, which are usually errors."
+msgstr ""
+
+msgid "Very long segment of {0} kilometers"
+msgstr ""
+
 msgid "Tag checker (MapCSS based)"
 msgstr "Controllo etichette (basato su MapCSS)"
 
@@ -4986,6 +5003,18 @@ msgstr[1] ""
 "JOSM è in esecuzione in modalità non in linea. Queste risorse non saranno "
 "disponibili: {0}"
 
+msgid ""
+"Detected useable IPv6 network, prefering IPv6 over IPv4 after next restart."
+msgstr ""
+
+msgid "Detected useable IPv6 network, prefering IPv6 over IPv4."
+msgstr ""
+
+msgid ""
+"Detected no useable IPv6 network, prefering IPv4 over IPv6 after next "
+"restart."
+msgstr ""
+
 msgid "Unsaved osm data"
 msgstr "Dati OSM non salvati"
 
@@ -6855,16 +6884,6 @@ msgstr ""
 "Avvio del browser delle informazioni solamente per {0} dei {1} utenti "
 "selezionati"
 
-msgid ""
-"<html>Failed to create an URL because the encoding ''{0}''<br>was missing on "
-"this system.</html>"
-msgstr ""
-"<html>Fallita la creazione di un indirizzo URL perché manca la codifica "
-"''''{0}''''<br>su questo sistema.</html>"
-
-msgid "Missing encoding"
-msgstr "Codifica mancante"
-
 msgid "Author"
 msgstr "Autore"
 
@@ -11994,6 +12013,9 @@ msgstr "Cartella di cache per i tasselli: "
 msgid "Maximum concurrent downloads: "
 msgstr ""
 
+msgid "Maximum concurrent downloads per host: "
+msgstr ""
+
 msgid "Maximum elements in disk cache: "
 msgstr ""
 
@@ -12112,9 +12134,6 @@ msgstr ""
 "Attenzione: formato non valido della voce nella lista degli stili "
 "''''{0}''''. Ottenuto ''{1}''"
 
-msgid "JOSM default (XML; old version)"
-msgstr "Predefinito JOSM (XML; vecchia versione)"
-
 msgid "JOSM default (MapCSS)"
 msgstr "Predefinito JOSM (MapCSS)"
 
@@ -13787,9 +13806,6 @@ msgstr "Caricamente delle note fallito"
 msgid "Error parsing note response from server"
 msgstr "Errore dal server durante l''analisi delle note"
 
-msgid "Error encoding string: {0}"
-msgstr "Stringa di codifica errore: {0}"
-
 msgid "(Code={0})"
 msgstr "(Code={0})"
 
@@ -14198,28 +14214,26 @@ msgstr "Crea nuovi oggetti"
 msgid "Read protocol version"
 msgstr "Leggi la versione del protocollo"
 
-msgid "Cannot start remotecontrol server on port {0}: {1}"
+msgid "Cannot start IPv4 remotecontrol server on port {0}: {1}"
 msgstr ""
-"Impossibile avviare il server del controllo remoto sulla porta {0}: {1}"
 
-msgid "RemoteControl::Accepting connections on {0}:{1}"
-msgstr "Controllo remoto::Connessione accettata su {0}:{1}"
+msgid "Cannot start IPv6 remotecontrol server on port {0}: {1}"
+msgstr ""
 
-msgid "RemoteControl::Server stopped."
-msgstr "Controllo remoto::Server fermato."
+msgid "RemoteControl::Accepting remote connections on {0}:{1}"
+msgstr ""
 
-msgid "Cannot start remotecontrol https server on port {0}: {1}"
+msgid "RemoteControl::Server {0}:{1} stopped."
 msgstr ""
-"Impossibile avviare il server https del controllo remoto sulla porta {0}: {1}"
 
-msgid "Unable to initialize Remote Control HTTPS Server"
-msgstr "Impossibile inizializzare il server HTTPS del Controllo Remoto"
+msgid "Cannot start IPv4 remotecontrol https server on port {0}: {1}"
+msgstr ""
 
-msgid "RemoteControl::Accepting secure connections on {0}:{1}"
-msgstr "Controllo remoto::Connessione sicura accettata su {0}:{1}"
+msgid "Cannot start IPv6 remotecontrol https server on port {0}: {1}"
+msgstr ""
 
-msgid "RemoteControl::Server (https) stopped."
-msgstr "Controllo remoto::Server (https) arrestato."
+msgid "RemoteControl::Accepting secure remote connections on {0}:{1}"
+msgstr ""
 
 msgid "Remote Control has been asked to create a new node."
 msgstr "È stata richiesta al controllo remoto la creazione di un nuovo nodo."
@@ -16192,9 +16206,6 @@ msgstr "NRW-Atlas: Topographische Karte 1:10000"
 msgid "Metropole Ruhr: Luftbilder (10 cm)"
 msgstr "Metropole Ruhr: Antenne (10 cm)"
 
-msgid "SN Luftbilder, Straßennetz, Administrative Grenzen"
-msgstr ""
-
 msgid "Drone Imagery (Haiti)"
 msgstr "Drone Imagery (Haiti)"
 
@@ -17140,6 +17151,11 @@ msgstr ""
 "Riporta gli errori da Osm Inspector e visualizzali sul riquadro corrente di "
 "JOSM"
 
+msgid ""
+"Recommends categories/tags on newly created OSM entities by analysing "
+"spatial entities into training features and using SVM classification"
+msgstr ""
+
 msgid "Import/export OSM data in PBF format"
 msgstr "Importa/esporta dati OSM in formato PBF"
 
@@ -20926,7 +20942,10 @@ msgstr ""
 msgid "Suction pumpout"
 msgstr ""
 
-msgid "Gravity dump station"
+msgid "Gravity drain for hose"
+msgstr ""
+
+msgid "Casette or Elsan Disposal"
 msgstr ""
 
 msgid "Operation times"
@@ -21430,6 +21449,10 @@ msgid "shed"
 msgstr "rimessa"
 
 msgctxt "building"
+msgid "storage_tank"
+msgstr ""
+
+msgctxt "building"
 msgid "cowshed"
 msgstr "Stalla per mucche"
 
@@ -21542,6 +21565,41 @@ msgstr "Mulino a vento"
 msgid "Gasometer"
 msgstr "Gasometro"
 
+msgid "Storage Tank"
+msgstr ""
+
+msgctxt "content"
+msgid "fuel"
+msgstr ""
+
+msgctxt "content"
+msgid "manure"
+msgstr ""
+
+msgctxt "content"
+msgid "oil"
+msgstr ""
+
+msgctxt "content"
+msgid "sewage"
+msgstr ""
+
+msgctxt "content"
+msgid "silage"
+msgstr ""
+
+msgctxt "content"
+msgid "slurry"
+msgstr ""
+
+msgctxt "content"
+msgid "water"
+msgstr ""
+
+msgctxt "content"
+msgid "wine"
+msgstr ""
+
 msgid "Bunker Silo"
 msgstr "Silos a bunker"
 
@@ -25073,6 +25131,33 @@ msgstr "Apri file NanoLog..."
 msgid "Could not read NanoLog file:"
 msgstr "Impossibile leggere il file NanoLog:"
 
+msgid "OSM Recommendation"
+msgstr ""
+
+msgid "Recommend categories to your newly created instances."
+msgstr ""
+
+msgid "Training process configuration"
+msgstr ""
+
+msgid "Model Settings"
+msgstr ""
+
+msgid "Select objects or create new objects and get recommendation."
+msgstr ""
+
+msgid "Add Recommendation"
+msgstr ""
+
+msgid "Add a recommended key/value pair to your object"
+msgstr ""
+
+msgid "Train a Model"
+msgstr ""
+
+msgid "Start the training engine!"
+msgstr ""
+
 msgid "Edit opening hours"
 msgstr "Modifica orari di apertura"
 
diff --git a/i18n/po/ja.po b/i18n/po/ja.po
index 771318d..ca8cab6 100644
--- a/i18n/po/ja.po
+++ b/i18n/po/ja.po
@@ -7,16 +7,16 @@ msgid ""
 msgstr ""
 "Project-Id-Version: josm\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-04-27 03:33+0200\n"
-"PO-Revision-Date: 2015-04-06 03:26+0000\n"
+"POT-Creation-Date: 2015-05-12 03:33+0200\n"
+"PO-Revision-Date: 2015-05-09 15:41+0000\n"
 "Last-Translator: fujimoto <fujimoto at internet.ne.jp>\n"
 "Language-Team: Japanese <tr at openstreetmap.jp>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=1; plural=0;\n"
-"X-Launchpad-Export-Date: 2015-04-27 04:46+0000\n"
-"X-Generator: Launchpad (build 17430)\n"
+"X-Launchpad-Export-Date: 2015-05-12 04:46+0000\n"
+"X-Generator: Launchpad (build 17487)\n"
 "X-Poedit-Country: JAPAN\n"
 "Language: ja\n"
 "X-Poedit-Language: Japanese\n"
@@ -477,7 +477,7 @@ msgid "Download data"
 msgstr "データのダウンロード"
 
 msgid "Download notes in current view"
-msgstr ""
+msgstr "現在のビューにメモをダウンロード"
 
 msgid "Download object..."
 msgstr "オブジェクトをダウンロード..."
@@ -1484,6 +1484,9 @@ msgid_plural ""
 "The affected way would disappear after disconnecting the selected nodes."
 msgstr[0] "影響を受けるウェイは選択されたノードが切り離された後に非表示になります。"
 
+msgid "Some irrelevant nodes have been removed from the selection"
+msgstr ""
+
 msgid "Undo"
 msgstr "元に戻す"
 
@@ -1739,8 +1742,7 @@ msgstr "メモ"
 
 msgid "{0} note has been downloaded."
 msgid_plural "{0} notes have been downloaded."
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "ノート{0}件をダウンロードしました。"
 
 msgid ""
 "Since the download limit was {0}, there might be more notes to download."
@@ -1769,7 +1771,7 @@ msgid "Download Compressed OSM"
 msgstr "OSMを圧縮形式でダウンロード"
 
 msgid "Download OSM object by ID"
-msgstr ""
+msgstr "IDでOSMオブジェクトをダウンロード"
 
 msgid "Download OSM"
 msgstr "OSMをダウンロード"
@@ -2458,11 +2460,11 @@ msgstr "プロパティ"
 
 msgid ""
 "ways with at least 20 nodes, or relations containing at least 20 nodes"
-msgstr ""
+msgstr "ノードが20個以上あるウェイ、またはノードが20個以上あるリレーション"
 
 msgid ""
 "nodes with at least 3 referring ways, or relations containing at least 3 ways"
-msgstr ""
+msgstr "3本以上のウェイから参照されているノード、または3本以上のウェイを含むリレーション"
 
 msgid "objects having 5 to 10 tags"
 msgstr "5~10個のタグを持つオブジェクト"
@@ -2474,7 +2476,7 @@ msgid "closed ways with an area of 100 m²"
 msgstr "100㎡以上の面積を持った閉じたウェイ"
 
 msgid "ways with a length of 200 m or more"
-msgstr ""
+msgstr "200m以上のウェイ"
 
 msgid "state"
 msgstr "状態"
@@ -3096,6 +3098,11 @@ msgstr "レイヤー: {0}"
 msgid "Failed to persist preferences to ''{0}''"
 msgstr "設定を''{0}''に保存できませんでした"
 
+msgid ""
+"Try enabling IPv6 network, prefering IPv6 over IPv4 (only works on early "
+"startup)."
+msgstr ""
+
 msgid " (at line {0}, column {1})"
 msgstr " (行{0}、コラム{1}で)"
 
@@ -3725,6 +3732,15 @@ msgstr "下り車線数の指定値が矛盾しています"
 msgid "Number of lane dependent values inconsistent in backward direction"
 msgstr "上り車線数の指定値が矛盾しています"
 
+msgid "Long segments"
+msgstr "長い区間"
+
+msgid "This tests for long way segments, which are usually errors."
+msgstr ""
+
+msgid "Very long segment of {0} kilometers"
+msgstr ""
+
 msgid "Tag checker (MapCSS based)"
 msgstr "タグチェッカー(MapCSSベース)"
 
@@ -4555,6 +4571,18 @@ msgid_plural ""
 "JOSM is running in offline mode. These resources will not be available: {0}"
 msgstr[0] "JOSMはオフラインモードで実行しています。{0}のリソースは利用できません。"
 
+msgid ""
+"Detected useable IPv6 network, prefering IPv6 over IPv4 after next restart."
+msgstr ""
+
+msgid "Detected useable IPv6 network, prefering IPv6 over IPv4."
+msgstr ""
+
+msgid ""
+"Detected no useable IPv6 network, prefering IPv4 over IPv6 after next "
+"restart."
+msgstr ""
+
 msgid "Unsaved osm data"
 msgstr "未保存のOSMデータ"
 
@@ -6269,14 +6297,6 @@ msgstr "ユーザーについての情報付きでブラウザーを起動"
 msgid "Only launching info browsers for the first {0} of {1} selected users"
 msgstr "選択された{1}人のうち最初の{0}人分のみ情報ブラウザーを起動しています"
 
-msgid ""
-"<html>Failed to create an URL because the encoding ''{0}''<br>was missing on "
-"this system.</html>"
-msgstr "<html>URLの生成に失敗しました。指定したエンコーディング ''{0}''<br>はこの環境では利用できません。</html>"
-
-msgid "Missing encoding"
-msgstr "エンコーディングがありません"
-
 msgid "Author"
 msgstr "作者"
 
@@ -10864,6 +10884,9 @@ msgstr "タイルキャッシュの保存フォルダ: "
 msgid "Maximum concurrent downloads: "
 msgstr "最大同時ダウンロード数: "
 
+msgid "Maximum concurrent downloads per host: "
+msgstr ""
+
 msgid "Maximum elements in disk cache: "
 msgstr "最大ディスクキャッシュ項目数: "
 
@@ -10972,9 +10995,6 @@ msgstr "<html>''{0}''からのスタイルソースのダウンロードに<br>
 msgid "Warning: illegal format of entry in style list ''{0}''. Got ''{1}''"
 msgstr "警告: スタイルリスト ''{0}'' 中に不正な形式のエントリ。入力値 ''{1}''"
 
-msgid "JOSM default (XML; old version)"
-msgstr "JOSM標準(XML; 旧バージョン)"
-
 msgid "JOSM default (MapCSS)"
 msgstr "JOSM標準(MapCSS)"
 
@@ -12470,9 +12490,6 @@ msgstr "メモのアップロードに失敗しました"
 msgid "Error parsing note response from server"
 msgstr "サーバーからのメモ応答の解析エラー"
 
-msgid "Error encoding string: {0}"
-msgstr "文字列のエンコードエラー; {0}"
-
 msgid "(Code={0})"
 msgstr "(コード={0})"
 
@@ -12837,26 +12854,26 @@ msgstr "新しいオブジェクトの作成"
 msgid "Read protocol version"
 msgstr "プロトコルバージョンの読み取り"
 
-msgid "Cannot start remotecontrol server on port {0}: {1}"
-msgstr "リモート制御サーバーがポート{0}で開始できません。{1}"
+msgid "Cannot start IPv4 remotecontrol server on port {0}: {1}"
+msgstr ""
 
-msgid "RemoteControl::Accepting connections on {0}:{1}"
-msgstr "リモート制御::接続を{0}:{1}で受け付けています"
+msgid "Cannot start IPv6 remotecontrol server on port {0}: {1}"
+msgstr ""
 
-msgid "RemoteControl::Server stopped."
-msgstr "リモート制御::サーバーが停止しました。"
+msgid "RemoteControl::Accepting remote connections on {0}:{1}"
+msgstr ""
 
-msgid "Cannot start remotecontrol https server on port {0}: {1}"
-msgstr "リモート制御のhttpsサーバーをポート{0}で開始できません。{1}"
+msgid "RemoteControl::Server {0}:{1} stopped."
+msgstr ""
 
-msgid "Unable to initialize Remote Control HTTPS Server"
-msgstr "リモート制御用HTTPSサーバーを初期化できませんでした"
+msgid "Cannot start IPv4 remotecontrol https server on port {0}: {1}"
+msgstr ""
 
-msgid "RemoteControl::Accepting secure connections on {0}:{1}"
-msgstr "リモート制御::セキュアな接続を{0}:{1}で受け付けています"
+msgid "Cannot start IPv6 remotecontrol https server on port {0}: {1}"
+msgstr ""
 
-msgid "RemoteControl::Server (https) stopped."
-msgstr "リモート制御::サーバー(https)が停止しました。"
+msgid "RemoteControl::Accepting secure remote connections on {0}:{1}"
+msgstr ""
 
 msgid "Remote Control has been asked to create a new node."
 msgstr "リモート制御により、新しいノードを作成するよう指示されました。"
@@ -14589,9 +14606,6 @@ msgstr "NRW-Atlas: Topographische Karte 1:10000"
 msgid "Metropole Ruhr: Luftbilder (10 cm)"
 msgstr "Metropole Ruhr: Luftbilder (10 cm)"
 
-msgid "SN Luftbilder, Straßennetz, Administrative Grenzen"
-msgstr ""
-
 msgid "Drone Imagery (Haiti)"
 msgstr "Drone Imagery (Haiti)"
 
@@ -15472,6 +15486,11 @@ msgid ""
 "bounding box"
 msgstr "OSM Inspectorからエラーを取得し、現在のJOSMの矩形範囲に表示します"
 
+msgid ""
+"Recommends categories/tags on newly created OSM entities by analysing "
+"spatial entities into training features and using SVM classification"
+msgstr ""
+
 msgid "Import/export OSM data in PBF format"
 msgstr "PBFフォーマットでOSMデータをインポート・エクスポート"
 
@@ -19189,7 +19208,10 @@ msgstr ""
 msgid "Suction pumpout"
 msgstr ""
 
-msgid "Gravity dump station"
+msgid "Gravity drain for hose"
+msgstr ""
+
+msgid "Casette or Elsan Disposal"
 msgstr ""
 
 msgid "Operation times"
@@ -19693,6 +19715,10 @@ msgid "shed"
 msgstr "格納庫"
 
 msgctxt "building"
+msgid "storage_tank"
+msgstr ""
+
+msgctxt "building"
 msgid "cowshed"
 msgstr "牛小屋"
 
@@ -19805,6 +19831,41 @@ msgstr "風車"
 msgid "Gasometer"
 msgstr "ガスタンク"
 
+msgid "Storage Tank"
+msgstr ""
+
+msgctxt "content"
+msgid "fuel"
+msgstr ""
+
+msgctxt "content"
+msgid "manure"
+msgstr ""
+
+msgctxt "content"
+msgid "oil"
+msgstr ""
+
+msgctxt "content"
+msgid "sewage"
+msgstr ""
+
+msgctxt "content"
+msgid "silage"
+msgstr ""
+
+msgctxt "content"
+msgid "slurry"
+msgstr ""
+
+msgctxt "content"
+msgid "water"
+msgstr ""
+
+msgctxt "content"
+msgid "wine"
+msgstr ""
+
 msgid "Bunker Silo"
 msgstr "バンカーサイロ"
 
@@ -23267,6 +23328,33 @@ msgstr "NanoLogファイルを開く..."
 msgid "Could not read NanoLog file:"
 msgstr "NanoLogファイルを読み取れませんでした:"
 
+msgid "OSM Recommendation"
+msgstr ""
+
+msgid "Recommend categories to your newly created instances."
+msgstr ""
+
+msgid "Training process configuration"
+msgstr ""
+
+msgid "Model Settings"
+msgstr ""
+
+msgid "Select objects or create new objects and get recommendation."
+msgstr ""
+
+msgid "Add Recommendation"
+msgstr ""
+
+msgid "Add a recommended key/value pair to your object"
+msgstr ""
+
+msgid "Train a Model"
+msgstr ""
+
+msgid "Start the training engine!"
+msgstr ""
+
 msgid "Edit opening hours"
 msgstr "開店時間を編集"
 
diff --git a/i18n/po/ka.po b/i18n/po/ka.po
index 7d13a07..39eed22 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-04-27 03:33+0200\n"
+"POT-Creation-Date: 2015-05-12 03:33+0200\n"
 "PO-Revision-Date: 2011-12-16 00:14+0000\n"
 "Last-Translator: datogogishvili <Unknown>\n"
 "Language-Team: Georgian <ka at li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=1; plural=0;\n"
-"X-Launchpad-Export-Date: 2015-04-27 04:41+0000\n"
-"X-Generator: Launchpad (build 17430)\n"
+"X-Launchpad-Export-Date: 2015-05-12 04:41+0000\n"
+"X-Generator: Launchpad (build 17487)\n"
 "Language: ka\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -1473,6 +1473,9 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Some irrelevant nodes have been removed from the selection"
+msgstr ""
+
 msgid "Undo"
 msgstr ""
 
@@ -3070,6 +3073,11 @@ msgstr ""
 msgid "Failed to persist preferences to ''{0}''"
 msgstr ""
 
+msgid ""
+"Try enabling IPv6 network, prefering IPv6 over IPv4 (only works on early "
+"startup)."
+msgstr ""
+
 msgid " (at line {0}, column {1})"
 msgstr ""
 
@@ -3698,6 +3706,15 @@ msgstr ""
 msgid "Number of lane dependent values inconsistent in backward direction"
 msgstr ""
 
+msgid "Long segments"
+msgstr ""
+
+msgid "This tests for long way segments, which are usually errors."
+msgstr ""
+
+msgid "Very long segment of {0} kilometers"
+msgstr ""
+
 msgid "Tag checker (MapCSS based)"
 msgstr ""
 
@@ -4527,6 +4544,18 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
+msgid ""
+"Detected useable IPv6 network, prefering IPv6 over IPv4 after next restart."
+msgstr ""
+
+msgid "Detected useable IPv6 network, prefering IPv6 over IPv4."
+msgstr ""
+
+msgid ""
+"Detected no useable IPv6 network, prefering IPv4 over IPv6 after next "
+"restart."
+msgstr ""
+
 msgid "Unsaved osm data"
 msgstr ""
 
@@ -6205,14 +6234,6 @@ msgstr ""
 msgid "Only launching info browsers for the first {0} of {1} selected users"
 msgstr ""
 
-msgid ""
-"<html>Failed to create an URL because the encoding ''{0}''<br>was missing on "
-"this system.</html>"
-msgstr ""
-
-msgid "Missing encoding"
-msgstr ""
-
 msgid "Author"
 msgstr ""
 
@@ -10667,6 +10688,9 @@ msgstr ""
 msgid "Maximum concurrent downloads: "
 msgstr ""
 
+msgid "Maximum concurrent downloads per host: "
+msgstr ""
+
 msgid "Maximum elements in disk cache: "
 msgstr ""
 
@@ -10769,9 +10793,6 @@ msgstr ""
 msgid "Warning: illegal format of entry in style list ''{0}''. Got ''{1}''"
 msgstr ""
 
-msgid "JOSM default (XML; old version)"
-msgstr ""
-
 msgid "JOSM default (MapCSS)"
 msgstr ""
 
@@ -12233,9 +12254,6 @@ msgstr ""
 msgid "Error parsing note response from server"
 msgstr ""
 
-msgid "Error encoding string: {0}"
-msgstr ""
-
 msgid "(Code={0})"
 msgstr ""
 
@@ -12593,25 +12611,25 @@ msgstr ""
 msgid "Read protocol version"
 msgstr ""
 
-msgid "Cannot start remotecontrol server on port {0}: {1}"
+msgid "Cannot start IPv4 remotecontrol server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Accepting connections on {0}:{1}"
+msgid "Cannot start IPv6 remotecontrol server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Server stopped."
+msgid "RemoteControl::Accepting remote connections on {0}:{1}"
 msgstr ""
 
-msgid "Cannot start remotecontrol https server on port {0}: {1}"
+msgid "RemoteControl::Server {0}:{1} stopped."
 msgstr ""
 
-msgid "Unable to initialize Remote Control HTTPS Server"
+msgid "Cannot start IPv4 remotecontrol https server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Accepting secure connections on {0}:{1}"
+msgid "Cannot start IPv6 remotecontrol https server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Server (https) stopped."
+msgid "RemoteControl::Accepting secure remote connections on {0}:{1}"
 msgstr ""
 
 msgid "Remote Control has been asked to create a new node."
@@ -14279,9 +14297,6 @@ msgstr ""
 msgid "Metropole Ruhr: Luftbilder (10 cm)"
 msgstr ""
 
-msgid "SN Luftbilder, Straßennetz, Administrative Grenzen"
-msgstr ""
-
 msgid "Drone Imagery (Haiti)"
 msgstr ""
 
@@ -15142,6 +15157,11 @@ msgid ""
 "bounding box"
 msgstr ""
 
+msgid ""
+"Recommends categories/tags on newly created OSM entities by analysing "
+"spatial entities into training features and using SVM classification"
+msgstr ""
+
 msgid "Import/export OSM data in PBF format"
 msgstr ""
 
@@ -18842,7 +18862,10 @@ msgstr ""
 msgid "Suction pumpout"
 msgstr ""
 
-msgid "Gravity dump station"
+msgid "Gravity drain for hose"
+msgstr ""
+
+msgid "Casette or Elsan Disposal"
 msgstr ""
 
 msgid "Operation times"
@@ -19346,6 +19369,10 @@ msgid "shed"
 msgstr ""
 
 msgctxt "building"
+msgid "storage_tank"
+msgstr ""
+
+msgctxt "building"
 msgid "cowshed"
 msgstr ""
 
@@ -19458,6 +19485,41 @@ msgstr ""
 msgid "Gasometer"
 msgstr ""
 
+msgid "Storage Tank"
+msgstr ""
+
+msgctxt "content"
+msgid "fuel"
+msgstr ""
+
+msgctxt "content"
+msgid "manure"
+msgstr ""
+
+msgctxt "content"
+msgid "oil"
+msgstr ""
+
+msgctxt "content"
+msgid "sewage"
+msgstr ""
+
+msgctxt "content"
+msgid "silage"
+msgstr ""
+
+msgctxt "content"
+msgid "slurry"
+msgstr ""
+
+msgctxt "content"
+msgid "water"
+msgstr ""
+
+msgctxt "content"
+msgid "wine"
+msgstr ""
+
 msgid "Bunker Silo"
 msgstr ""
 
@@ -22909,6 +22971,33 @@ msgstr ""
 msgid "Could not read NanoLog file:"
 msgstr ""
 
+msgid "OSM Recommendation"
+msgstr ""
+
+msgid "Recommend categories to your newly created instances."
+msgstr ""
+
+msgid "Training process configuration"
+msgstr ""
+
+msgid "Model Settings"
+msgstr ""
+
+msgid "Select objects or create new objects and get recommendation."
+msgstr ""
+
+msgid "Add Recommendation"
+msgstr ""
+
+msgid "Add a recommended key/value pair to your object"
+msgstr ""
+
+msgid "Train a Model"
+msgstr ""
+
+msgid "Start the training engine!"
+msgstr ""
+
 msgid "Edit opening hours"
 msgstr ""
 
diff --git a/i18n/po/km.po b/i18n/po/km.po
index e831cc1..306c9c8 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-04-27 03:33+0200\n"
+"POT-Creation-Date: 2015-05-12 03:33+0200\n"
 "PO-Revision-Date: 2015-01-27 10:25+0000\n"
 "Last-Translator: Sophea Sok <sksophea at gmail.com>\n"
 "Language-Team: Khmer <km at li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=1; plural=0;\n"
-"X-Launchpad-Export-Date: 2015-04-27 04:46+0000\n"
-"X-Generator: Launchpad (build 17430)\n"
+"X-Launchpad-Export-Date: 2015-05-12 04:46+0000\n"
+"X-Generator: Launchpad (build 17487)\n"
 "Language: \n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -1568,6 +1568,9 @@ msgid_plural ""
 msgstr[0] ""
 "ផ្លូវ​ដែល​ប៉ះពាល់​នឹង​មិន​បង្ហាញ​ឡើយ បន្ទាប់ពី​ផ្ដាច់​តំណ​ដែល​បាន​ជ្រើស"
 
+msgid "Some irrelevant nodes have been removed from the selection"
+msgstr ""
+
 msgid "Undo"
 msgstr "មិន​ធ្វើ​វិញ"
 
@@ -3265,6 +3268,11 @@ msgstr "ស្រទាប់៖ {0}"
 msgid "Failed to persist preferences to ''{0}''"
 msgstr "បាន​បរាជ័យ​ក្នុង​ការ​បន្ត​ចំណូលចិត្ត ''{0}''"
 
+msgid ""
+"Try enabling IPv6 network, prefering IPv6 over IPv4 (only works on early "
+"startup)."
+msgstr ""
+
 msgid " (at line {0}, column {1})"
 msgstr " (នៅ​បន្ទាត់​ទី {0}, ជួរឈរ {1})"
 
@@ -3936,6 +3944,15 @@ msgstr "ចំនួន​តម្លៃ​អាស្រ័យ​ចំណែ
 msgid "Number of lane dependent values inconsistent in backward direction"
 msgstr "ចំនួន​តម្លៃ​អាស្រ័យ​ចំណែក​ផ្លូវ​នៅ​ក្នុង​ទិសដៅ​ថយក្រោយ"
 
+msgid "Long segments"
+msgstr ""
+
+msgid "This tests for long way segments, which are usually errors."
+msgstr ""
+
+msgid "Very long segment of {0} kilometers"
+msgstr ""
+
 msgid "Tag checker (MapCSS based)"
 msgstr "កម្មវិធី​ពិនិត្យ​ស្លាក (មូលដ្ឋាន​លើ MapCSS)"
 
@@ -4805,6 +4822,18 @@ msgid_plural ""
 msgstr[0] ""
 "JOSM កំពុង​ដំណើរការ​ក្នុង​របៀប​ក្រៅ​បណ្ដាញ។ ធនធាន​ទាំងនេះ​នឹង​លែង​មាន៖ {0}"
 
+msgid ""
+"Detected useable IPv6 network, prefering IPv6 over IPv4 after next restart."
+msgstr ""
+
+msgid "Detected useable IPv6 network, prefering IPv6 over IPv4."
+msgstr ""
+
+msgid ""
+"Detected no useable IPv6 network, prefering IPv4 over IPv6 after next "
+"restart."
+msgstr ""
+
 msgid "Unsaved osm data"
 msgstr "ទិន្នន័យ osm មិន​បាន​រក្សាទុក"
 
@@ -6628,16 +6657,6 @@ msgstr ""
 "ចាប់ផ្ដើម​តែ​ព័ត៌មាន​កម្មវិធី​អ៊ីនធឺណិត​សម្រាប់ {0} ដំបូង​នៃ​អ្នកប្រើ {1} "
 "ដែល​បាន​ជ្រើស​ប៉ុណ្ណោះ"
 
-msgid ""
-"<html>Failed to create an URL because the encoding ''{0}''<br>was missing on "
-"this system.</html>"
-msgstr ""
-"<html>បាន​បរាជ័យ​ក្នុង​ការ​បង្កើត URL ដោយសារ​ការ​ដាក់​លេខ​កូដ "
-"''{0}''<br>បាន​បាត់​នៅ​លើ​ប្រព័ន្ធ​នេះ។</html>"
-
-msgid "Missing encoding"
-msgstr "បាត់​ការ​ដាក់​លេខ​កូដ"
-
 msgid "Author"
 msgstr "អ្នកនិពន្ធ"
 
@@ -11617,6 +11636,9 @@ msgstr "ថត​ឃ្លាំង​ក្រឡា៖ "
 msgid "Maximum concurrent downloads: "
 msgstr ""
 
+msgid "Maximum concurrent downloads per host: "
+msgstr ""
+
 msgid "Maximum elements in disk cache: "
 msgstr ""
 
@@ -11734,9 +11756,6 @@ msgstr ""
 "ព្រមាន៖ ទ្រង់ទ្រាយ​មិន​ត្រឹមត្រូវ​នៃ​ធាតុ​នៅ​ក្នុង​បញ្ជី​រចនាប័ទ្ម ''{0}'' ។ "
 "បាន​ទទួល ''{1}''"
 
-msgid "JOSM default (XML; old version)"
-msgstr "JOSM លំនាំដើម (XML; កំណែ​ចាស់)"
-
 msgid "JOSM default (MapCSS)"
 msgstr "JOSM លំនាំដើម (MapCSS)"
 
@@ -13373,9 +13392,6 @@ msgstr "បាន​បរាជ័យ​ក្នុង​ការ​ផ្ទ
 msgid "Error parsing note response from server"
 msgstr "កំហុស​ក្នុង​ការ​ញែក​ចំណាំ​ពី​ម៉ាស៊ីន​មេ"
 
-msgid "Error encoding string: {0}"
-msgstr "កំហុស​ក្នុង​ការ​ដាក់​លេខ​កូដ​ឃ្លា៖ {0}"
-
 msgid "(Code={0})"
 msgstr "(កូដ={0})"
 
@@ -13772,28 +13788,26 @@ msgstr "បង្កើត​វត្ថុ​ថ្មី"
 msgid "Read protocol version"
 msgstr "អាន​កំណែ​ពិធីការ"
 
-msgid "Cannot start remotecontrol server on port {0}: {1}"
-msgstr "មិន​អាច​ចាប់ផ្ដើម​ម៉ាស៊ីន​មេ​គ្រប់គ្រង​ពី​ចម្ងាយ​នៅ​លើ​ច្រក {0}: {1}"
+msgid "Cannot start IPv4 remotecontrol server on port {0}: {1}"
+msgstr ""
 
-msgid "RemoteControl::Accepting connections on {0}:{1}"
-msgstr "ការ​គ្រប់គ្រង​ពី​ចម្ងាយ៖ ព្រម​ទទួល​ការ​តភ្ជាប់​នៅ​លើ {0}:{1}"
+msgid "Cannot start IPv6 remotecontrol server on port {0}: {1}"
+msgstr ""
 
-msgid "RemoteControl::Server stopped."
-msgstr "ការ​គ្រប់គ្រង​ពី​ចម្ងាយ៖ ម៉ាស៊ីន​មេ​បាន​ឈប់។"
+msgid "RemoteControl::Accepting remote connections on {0}:{1}"
+msgstr ""
 
-msgid "Cannot start remotecontrol https server on port {0}: {1}"
+msgid "RemoteControl::Server {0}:{1} stopped."
 msgstr ""
-"មិន​អាច​ចាប់ផ្ដើម​ម៉ាស៊ីន​មេ https គ្រប់គ្រង​ពី​ចម្ងាយ​នៅ​លើ​ច្រក {0}: {1}"
 
-msgid "Unable to initialize Remote Control HTTPS Server"
-msgstr "មិន​អាច​ចាប់ផ្ដើម​ម៉ាស៊ីន​មេ HTTPS គ្រប់គ្រង​ពី​ចម្ងាយ"
+msgid "Cannot start IPv4 remotecontrol https server on port {0}: {1}"
+msgstr ""
 
-msgid "RemoteControl::Accepting secure connections on {0}:{1}"
+msgid "Cannot start IPv6 remotecontrol https server on port {0}: {1}"
 msgstr ""
-"ការ​គ្រប់គ្រង​ពី​ចម្ងាយ៖ ព្រម​ទទួល​ការ​តភ្ជាប់​សុវត្ថិភាព​នៅ​លើ {0}:{1}"
 
-msgid "RemoteControl::Server (https) stopped."
-msgstr "ការ​គ្រប់គ្រង​ពី​ចម្ងាយ៖ ម៉ាស៊ីន​មេ (https) បាន​ឈប់។"
+msgid "RemoteControl::Accepting secure remote connections on {0}:{1}"
+msgstr ""
 
 msgid "Remote Control has been asked to create a new node."
 msgstr "ការ​គ្រប់គ្រង​ពី​ចម្ងាយ​បាន​ស្នើ​ឲ្យ​បង្កើត​តំណ​ថ្មី។"
@@ -15689,9 +15703,6 @@ msgstr ""
 msgid "Metropole Ruhr: Luftbilder (10 cm)"
 msgstr ""
 
-msgid "SN Luftbilder, Straßennetz, Administrative Grenzen"
-msgstr ""
-
 msgid "Drone Imagery (Haiti)"
 msgstr ""
 
@@ -16633,6 +16644,11 @@ msgstr ""
 "នាំ​យក​កំហុស​ពី​កម្មវិធី​ត្រួតពិនិត្យ Osm រួច​បង្ហាញ​វា​នៅ​លើ​ប្រអប់​ព្រំដែន "
 "JOSM បច្ចុប្បន្ន"
 
+msgid ""
+"Recommends categories/tags on newly created OSM entities by analysing "
+"spatial entities into training features and using SVM classification"
+msgstr ""
+
 msgid "Import/export OSM data in PBF format"
 msgstr "នាំចេញ/នាំចូល​ទិន្នន័យ OSM ក្នុង​ទ្រង់ទ្រាយ PBF"
 
@@ -20343,7 +20359,10 @@ msgstr ""
 msgid "Suction pumpout"
 msgstr ""
 
-msgid "Gravity dump station"
+msgid "Gravity drain for hose"
+msgstr ""
+
+msgid "Casette or Elsan Disposal"
 msgstr ""
 
 msgid "Operation times"
@@ -20847,6 +20866,10 @@ msgid "shed"
 msgstr ""
 
 msgctxt "building"
+msgid "storage_tank"
+msgstr ""
+
+msgctxt "building"
 msgid "cowshed"
 msgstr ""
 
@@ -20959,6 +20982,41 @@ msgstr ""
 msgid "Gasometer"
 msgstr ""
 
+msgid "Storage Tank"
+msgstr ""
+
+msgctxt "content"
+msgid "fuel"
+msgstr ""
+
+msgctxt "content"
+msgid "manure"
+msgstr ""
+
+msgctxt "content"
+msgid "oil"
+msgstr ""
+
+msgctxt "content"
+msgid "sewage"
+msgstr ""
+
+msgctxt "content"
+msgid "silage"
+msgstr ""
+
+msgctxt "content"
+msgid "slurry"
+msgstr ""
+
+msgctxt "content"
+msgid "water"
+msgstr ""
+
+msgctxt "content"
+msgid "wine"
+msgstr ""
+
 msgid "Bunker Silo"
 msgstr ""
 
@@ -24410,6 +24468,33 @@ msgstr ""
 msgid "Could not read NanoLog file:"
 msgstr ""
 
+msgid "OSM Recommendation"
+msgstr ""
+
+msgid "Recommend categories to your newly created instances."
+msgstr ""
+
+msgid "Training process configuration"
+msgstr ""
+
+msgid "Model Settings"
+msgstr ""
+
+msgid "Select objects or create new objects and get recommendation."
+msgstr ""
+
+msgid "Add Recommendation"
+msgstr ""
+
+msgid "Add a recommended key/value pair to your object"
+msgstr ""
+
+msgid "Train a Model"
+msgstr ""
+
+msgid "Start the training engine!"
+msgstr ""
+
 msgid "Edit opening hours"
 msgstr ""
 
diff --git a/i18n/po/ko.po b/i18n/po/ko.po
index ce4a567..57fa345 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-04-27 03:33+0200\n"
+"POT-Creation-Date: 2015-05-12 03:33+0200\n"
 "PO-Revision-Date: 2015-02-27 14:53+0000\n"
 "Last-Translator: Yongmin Hong <revi at fastlizard4.org>\n"
 "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-04-27 04:47+0000\n"
-"X-Generator: Launchpad (build 17430)\n"
+"X-Launchpad-Export-Date: 2015-05-12 04:47+0000\n"
+"X-Generator: Launchpad (build 17487)\n"
 "Language: ko\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -1461,6 +1461,9 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Some irrelevant nodes have been removed from the selection"
+msgstr ""
+
 msgid "Undo"
 msgstr "실행 취소"
 
@@ -3052,6 +3055,11 @@ msgstr ""
 msgid "Failed to persist preferences to ''{0}''"
 msgstr ""
 
+msgid ""
+"Try enabling IPv6 network, prefering IPv6 over IPv4 (only works on early "
+"startup)."
+msgstr ""
+
 msgid " (at line {0}, column {1})"
 msgstr ""
 
@@ -3678,6 +3686,15 @@ msgstr ""
 msgid "Number of lane dependent values inconsistent in backward direction"
 msgstr ""
 
+msgid "Long segments"
+msgstr ""
+
+msgid "This tests for long way segments, which are usually errors."
+msgstr ""
+
+msgid "Very long segment of {0} kilometers"
+msgstr ""
+
 msgid "Tag checker (MapCSS based)"
 msgstr ""
 
@@ -4506,6 +4523,18 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
+msgid ""
+"Detected useable IPv6 network, prefering IPv6 over IPv4 after next restart."
+msgstr ""
+
+msgid "Detected useable IPv6 network, prefering IPv6 over IPv4."
+msgstr ""
+
+msgid ""
+"Detected no useable IPv6 network, prefering IPv4 over IPv6 after next "
+"restart."
+msgstr ""
+
 msgid "Unsaved osm data"
 msgstr ""
 
@@ -6184,14 +6213,6 @@ msgstr ""
 msgid "Only launching info browsers for the first {0} of {1} selected users"
 msgstr ""
 
-msgid ""
-"<html>Failed to create an URL because the encoding ''{0}''<br>was missing on "
-"this system.</html>"
-msgstr ""
-
-msgid "Missing encoding"
-msgstr ""
-
 msgid "Author"
 msgstr ""
 
@@ -10651,6 +10672,9 @@ msgstr ""
 msgid "Maximum concurrent downloads: "
 msgstr ""
 
+msgid "Maximum concurrent downloads per host: "
+msgstr ""
+
 msgid "Maximum elements in disk cache: "
 msgstr ""
 
@@ -10753,9 +10777,6 @@ msgstr ""
 msgid "Warning: illegal format of entry in style list ''{0}''. Got ''{1}''"
 msgstr ""
 
-msgid "JOSM default (XML; old version)"
-msgstr ""
-
 msgid "JOSM default (MapCSS)"
 msgstr ""
 
@@ -12217,9 +12238,6 @@ msgstr ""
 msgid "Error parsing note response from server"
 msgstr ""
 
-msgid "Error encoding string: {0}"
-msgstr ""
-
 msgid "(Code={0})"
 msgstr ""
 
@@ -12577,25 +12595,25 @@ msgstr ""
 msgid "Read protocol version"
 msgstr ""
 
-msgid "Cannot start remotecontrol server on port {0}: {1}"
+msgid "Cannot start IPv4 remotecontrol server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Accepting connections on {0}:{1}"
+msgid "Cannot start IPv6 remotecontrol server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Server stopped."
+msgid "RemoteControl::Accepting remote connections on {0}:{1}"
 msgstr ""
 
-msgid "Cannot start remotecontrol https server on port {0}: {1}"
+msgid "RemoteControl::Server {0}:{1} stopped."
 msgstr ""
 
-msgid "Unable to initialize Remote Control HTTPS Server"
+msgid "Cannot start IPv4 remotecontrol https server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Accepting secure connections on {0}:{1}"
+msgid "Cannot start IPv6 remotecontrol https server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Server (https) stopped."
+msgid "RemoteControl::Accepting secure remote connections on {0}:{1}"
 msgstr ""
 
 msgid "Remote Control has been asked to create a new node."
@@ -14263,9 +14281,6 @@ msgstr ""
 msgid "Metropole Ruhr: Luftbilder (10 cm)"
 msgstr ""
 
-msgid "SN Luftbilder, Straßennetz, Administrative Grenzen"
-msgstr ""
-
 msgid "Drone Imagery (Haiti)"
 msgstr ""
 
@@ -15126,6 +15141,11 @@ msgid ""
 "bounding box"
 msgstr ""
 
+msgid ""
+"Recommends categories/tags on newly created OSM entities by analysing "
+"spatial entities into training features and using SVM classification"
+msgstr ""
+
 msgid "Import/export OSM data in PBF format"
 msgstr ""
 
@@ -18826,7 +18846,10 @@ msgstr ""
 msgid "Suction pumpout"
 msgstr ""
 
-msgid "Gravity dump station"
+msgid "Gravity drain for hose"
+msgstr ""
+
+msgid "Casette or Elsan Disposal"
 msgstr ""
 
 msgid "Operation times"
@@ -19330,6 +19353,10 @@ msgid "shed"
 msgstr ""
 
 msgctxt "building"
+msgid "storage_tank"
+msgstr ""
+
+msgctxt "building"
 msgid "cowshed"
 msgstr ""
 
@@ -19442,6 +19469,41 @@ msgstr ""
 msgid "Gasometer"
 msgstr ""
 
+msgid "Storage Tank"
+msgstr ""
+
+msgctxt "content"
+msgid "fuel"
+msgstr ""
+
+msgctxt "content"
+msgid "manure"
+msgstr ""
+
+msgctxt "content"
+msgid "oil"
+msgstr ""
+
+msgctxt "content"
+msgid "sewage"
+msgstr ""
+
+msgctxt "content"
+msgid "silage"
+msgstr ""
+
+msgctxt "content"
+msgid "slurry"
+msgstr ""
+
+msgctxt "content"
+msgid "water"
+msgstr ""
+
+msgctxt "content"
+msgid "wine"
+msgstr ""
+
 msgid "Bunker Silo"
 msgstr ""
 
@@ -22893,6 +22955,33 @@ msgstr ""
 msgid "Could not read NanoLog file:"
 msgstr ""
 
+msgid "OSM Recommendation"
+msgstr ""
+
+msgid "Recommend categories to your newly created instances."
+msgstr ""
+
+msgid "Training process configuration"
+msgstr ""
+
+msgid "Model Settings"
+msgstr ""
+
+msgid "Select objects or create new objects and get recommendation."
+msgstr ""
+
+msgid "Add Recommendation"
+msgstr ""
+
+msgid "Add a recommended key/value pair to your object"
+msgstr ""
+
+msgid "Train a Model"
+msgstr ""
+
+msgid "Start the training engine!"
+msgstr ""
+
 msgid "Edit opening hours"
 msgstr ""
 
diff --git a/i18n/po/ky.po b/i18n/po/ky.po
index c3e5dba..37c119f 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-04-27 03:33+0200\n"
+"POT-Creation-Date: 2015-05-12 03:33+0200\n"
 "PO-Revision-Date: 2012-12-18 02:36+0000\n"
 "Last-Translator: chyngyz <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-04-27 04:47+0000\n"
-"X-Generator: Launchpad (build 17430)\n"
+"X-Launchpad-Export-Date: 2015-05-12 04:47+0000\n"
+"X-Generator: Launchpad (build 17487)\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
 msgstr ""
@@ -1467,6 +1467,9 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Some irrelevant nodes have been removed from the selection"
+msgstr ""
+
 msgid "Undo"
 msgstr ""
 
@@ -3064,6 +3067,11 @@ msgstr ""
 msgid "Failed to persist preferences to ''{0}''"
 msgstr ""
 
+msgid ""
+"Try enabling IPv6 network, prefering IPv6 over IPv4 (only works on early "
+"startup)."
+msgstr ""
+
 msgid " (at line {0}, column {1})"
 msgstr ""
 
@@ -3692,6 +3700,15 @@ msgstr ""
 msgid "Number of lane dependent values inconsistent in backward direction"
 msgstr ""
 
+msgid "Long segments"
+msgstr ""
+
+msgid "This tests for long way segments, which are usually errors."
+msgstr ""
+
+msgid "Very long segment of {0} kilometers"
+msgstr ""
+
 msgid "Tag checker (MapCSS based)"
 msgstr ""
 
@@ -4521,6 +4538,18 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
+msgid ""
+"Detected useable IPv6 network, prefering IPv6 over IPv4 after next restart."
+msgstr ""
+
+msgid "Detected useable IPv6 network, prefering IPv6 over IPv4."
+msgstr ""
+
+msgid ""
+"Detected no useable IPv6 network, prefering IPv4 over IPv6 after next "
+"restart."
+msgstr ""
+
 msgid "Unsaved osm data"
 msgstr ""
 
@@ -6199,14 +6228,6 @@ msgstr ""
 msgid "Only launching info browsers for the first {0} of {1} selected users"
 msgstr ""
 
-msgid ""
-"<html>Failed to create an URL because the encoding ''{0}''<br>was missing on "
-"this system.</html>"
-msgstr ""
-
-msgid "Missing encoding"
-msgstr ""
-
 msgid "Author"
 msgstr ""
 
@@ -10661,6 +10682,9 @@ msgstr ""
 msgid "Maximum concurrent downloads: "
 msgstr ""
 
+msgid "Maximum concurrent downloads per host: "
+msgstr ""
+
 msgid "Maximum elements in disk cache: "
 msgstr ""
 
@@ -10763,9 +10787,6 @@ msgstr ""
 msgid "Warning: illegal format of entry in style list ''{0}''. Got ''{1}''"
 msgstr ""
 
-msgid "JOSM default (XML; old version)"
-msgstr ""
-
 msgid "JOSM default (MapCSS)"
 msgstr ""
 
@@ -12227,9 +12248,6 @@ msgstr ""
 msgid "Error parsing note response from server"
 msgstr ""
 
-msgid "Error encoding string: {0}"
-msgstr ""
-
 msgid "(Code={0})"
 msgstr ""
 
@@ -12587,25 +12605,25 @@ msgstr ""
 msgid "Read protocol version"
 msgstr ""
 
-msgid "Cannot start remotecontrol server on port {0}: {1}"
+msgid "Cannot start IPv4 remotecontrol server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Accepting connections on {0}:{1}"
+msgid "Cannot start IPv6 remotecontrol server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Server stopped."
+msgid "RemoteControl::Accepting remote connections on {0}:{1}"
 msgstr ""
 
-msgid "Cannot start remotecontrol https server on port {0}: {1}"
+msgid "RemoteControl::Server {0}:{1} stopped."
 msgstr ""
 
-msgid "Unable to initialize Remote Control HTTPS Server"
+msgid "Cannot start IPv4 remotecontrol https server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Accepting secure connections on {0}:{1}"
+msgid "Cannot start IPv6 remotecontrol https server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Server (https) stopped."
+msgid "RemoteControl::Accepting secure remote connections on {0}:{1}"
 msgstr ""
 
 msgid "Remote Control has been asked to create a new node."
@@ -14273,9 +14291,6 @@ msgstr ""
 msgid "Metropole Ruhr: Luftbilder (10 cm)"
 msgstr ""
 
-msgid "SN Luftbilder, Straßennetz, Administrative Grenzen"
-msgstr ""
-
 msgid "Drone Imagery (Haiti)"
 msgstr ""
 
@@ -15136,6 +15151,11 @@ msgid ""
 "bounding box"
 msgstr ""
 
+msgid ""
+"Recommends categories/tags on newly created OSM entities by analysing "
+"spatial entities into training features and using SVM classification"
+msgstr ""
+
 msgid "Import/export OSM data in PBF format"
 msgstr ""
 
@@ -18836,7 +18856,10 @@ msgstr ""
 msgid "Suction pumpout"
 msgstr ""
 
-msgid "Gravity dump station"
+msgid "Gravity drain for hose"
+msgstr ""
+
+msgid "Casette or Elsan Disposal"
 msgstr ""
 
 msgid "Operation times"
@@ -19340,6 +19363,10 @@ msgid "shed"
 msgstr ""
 
 msgctxt "building"
+msgid "storage_tank"
+msgstr ""
+
+msgctxt "building"
 msgid "cowshed"
 msgstr ""
 
@@ -19452,6 +19479,41 @@ msgstr ""
 msgid "Gasometer"
 msgstr ""
 
+msgid "Storage Tank"
+msgstr ""
+
+msgctxt "content"
+msgid "fuel"
+msgstr ""
+
+msgctxt "content"
+msgid "manure"
+msgstr ""
+
+msgctxt "content"
+msgid "oil"
+msgstr ""
+
+msgctxt "content"
+msgid "sewage"
+msgstr ""
+
+msgctxt "content"
+msgid "silage"
+msgstr ""
+
+msgctxt "content"
+msgid "slurry"
+msgstr ""
+
+msgctxt "content"
+msgid "water"
+msgstr ""
+
+msgctxt "content"
+msgid "wine"
+msgstr ""
+
 msgid "Bunker Silo"
 msgstr ""
 
@@ -22903,6 +22965,33 @@ msgstr ""
 msgid "Could not read NanoLog file:"
 msgstr ""
 
+msgid "OSM Recommendation"
+msgstr ""
+
+msgid "Recommend categories to your newly created instances."
+msgstr ""
+
+msgid "Training process configuration"
+msgstr ""
+
+msgid "Model Settings"
+msgstr ""
+
+msgid "Select objects or create new objects and get recommendation."
+msgstr ""
+
+msgid "Add Recommendation"
+msgstr ""
+
+msgid "Add a recommended key/value pair to your object"
+msgstr ""
+
+msgid "Train a Model"
+msgstr ""
+
+msgid "Start the training engine!"
+msgstr ""
+
 msgid "Edit opening hours"
 msgstr ""
 
diff --git a/i18n/po/lo.po b/i18n/po/lo.po
index 96e1068..b791846 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-04-27 03:33+0200\n"
+"POT-Creation-Date: 2015-05-12 03:33+0200\n"
 "PO-Revision-Date: 2009-09-15 10:06+0000\n"
 "Last-Translator: Anousone <Unknown>\n"
 "Language-Team: Lao <lo at li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=1; plural=0;\n"
-"X-Launchpad-Export-Date: 2015-04-27 04:48+0000\n"
-"X-Generator: Launchpad (build 17430)\n"
+"X-Launchpad-Export-Date: 2015-05-12 04:48+0000\n"
+"X-Generator: Launchpad (build 17487)\n"
 "Language: \n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -1468,6 +1468,9 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Some irrelevant nodes have been removed from the selection"
+msgstr ""
+
 msgid "Undo"
 msgstr ""
 
@@ -3065,6 +3068,11 @@ msgstr ""
 msgid "Failed to persist preferences to ''{0}''"
 msgstr ""
 
+msgid ""
+"Try enabling IPv6 network, prefering IPv6 over IPv4 (only works on early "
+"startup)."
+msgstr ""
+
 msgid " (at line {0}, column {1})"
 msgstr ""
 
@@ -3693,6 +3701,15 @@ msgstr ""
 msgid "Number of lane dependent values inconsistent in backward direction"
 msgstr ""
 
+msgid "Long segments"
+msgstr ""
+
+msgid "This tests for long way segments, which are usually errors."
+msgstr ""
+
+msgid "Very long segment of {0} kilometers"
+msgstr ""
+
 msgid "Tag checker (MapCSS based)"
 msgstr ""
 
@@ -4522,6 +4539,18 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
+msgid ""
+"Detected useable IPv6 network, prefering IPv6 over IPv4 after next restart."
+msgstr ""
+
+msgid "Detected useable IPv6 network, prefering IPv6 over IPv4."
+msgstr ""
+
+msgid ""
+"Detected no useable IPv6 network, prefering IPv4 over IPv6 after next "
+"restart."
+msgstr ""
+
 msgid "Unsaved osm data"
 msgstr ""
 
@@ -6200,14 +6229,6 @@ msgstr ""
 msgid "Only launching info browsers for the first {0} of {1} selected users"
 msgstr ""
 
-msgid ""
-"<html>Failed to create an URL because the encoding ''{0}''<br>was missing on "
-"this system.</html>"
-msgstr ""
-
-msgid "Missing encoding"
-msgstr ""
-
 msgid "Author"
 msgstr ""
 
@@ -10662,6 +10683,9 @@ msgstr ""
 msgid "Maximum concurrent downloads: "
 msgstr ""
 
+msgid "Maximum concurrent downloads per host: "
+msgstr ""
+
 msgid "Maximum elements in disk cache: "
 msgstr ""
 
@@ -10764,9 +10788,6 @@ msgstr ""
 msgid "Warning: illegal format of entry in style list ''{0}''. Got ''{1}''"
 msgstr ""
 
-msgid "JOSM default (XML; old version)"
-msgstr ""
-
 msgid "JOSM default (MapCSS)"
 msgstr ""
 
@@ -12228,9 +12249,6 @@ msgstr ""
 msgid "Error parsing note response from server"
 msgstr ""
 
-msgid "Error encoding string: {0}"
-msgstr ""
-
 msgid "(Code={0})"
 msgstr ""
 
@@ -12588,25 +12606,25 @@ msgstr ""
 msgid "Read protocol version"
 msgstr ""
 
-msgid "Cannot start remotecontrol server on port {0}: {1}"
+msgid "Cannot start IPv4 remotecontrol server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Accepting connections on {0}:{1}"
+msgid "Cannot start IPv6 remotecontrol server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Server stopped."
+msgid "RemoteControl::Accepting remote connections on {0}:{1}"
 msgstr ""
 
-msgid "Cannot start remotecontrol https server on port {0}: {1}"
+msgid "RemoteControl::Server {0}:{1} stopped."
 msgstr ""
 
-msgid "Unable to initialize Remote Control HTTPS Server"
+msgid "Cannot start IPv4 remotecontrol https server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Accepting secure connections on {0}:{1}"
+msgid "Cannot start IPv6 remotecontrol https server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Server (https) stopped."
+msgid "RemoteControl::Accepting secure remote connections on {0}:{1}"
 msgstr ""
 
 msgid "Remote Control has been asked to create a new node."
@@ -14274,9 +14292,6 @@ msgstr ""
 msgid "Metropole Ruhr: Luftbilder (10 cm)"
 msgstr ""
 
-msgid "SN Luftbilder, Straßennetz, Administrative Grenzen"
-msgstr ""
-
 msgid "Drone Imagery (Haiti)"
 msgstr ""
 
@@ -15137,6 +15152,11 @@ msgid ""
 "bounding box"
 msgstr ""
 
+msgid ""
+"Recommends categories/tags on newly created OSM entities by analysing "
+"spatial entities into training features and using SVM classification"
+msgstr ""
+
 msgid "Import/export OSM data in PBF format"
 msgstr ""
 
@@ -18837,7 +18857,10 @@ msgstr ""
 msgid "Suction pumpout"
 msgstr ""
 
-msgid "Gravity dump station"
+msgid "Gravity drain for hose"
+msgstr ""
+
+msgid "Casette or Elsan Disposal"
 msgstr ""
 
 msgid "Operation times"
@@ -19341,6 +19364,10 @@ msgid "shed"
 msgstr ""
 
 msgctxt "building"
+msgid "storage_tank"
+msgstr ""
+
+msgctxt "building"
 msgid "cowshed"
 msgstr ""
 
@@ -19453,6 +19480,41 @@ msgstr ""
 msgid "Gasometer"
 msgstr ""
 
+msgid "Storage Tank"
+msgstr ""
+
+msgctxt "content"
+msgid "fuel"
+msgstr ""
+
+msgctxt "content"
+msgid "manure"
+msgstr ""
+
+msgctxt "content"
+msgid "oil"
+msgstr ""
+
+msgctxt "content"
+msgid "sewage"
+msgstr ""
+
+msgctxt "content"
+msgid "silage"
+msgstr ""
+
+msgctxt "content"
+msgid "slurry"
+msgstr ""
+
+msgctxt "content"
+msgid "water"
+msgstr ""
+
+msgctxt "content"
+msgid "wine"
+msgstr ""
+
 msgid "Bunker Silo"
 msgstr ""
 
@@ -22904,6 +22966,33 @@ msgstr ""
 msgid "Could not read NanoLog file:"
 msgstr ""
 
+msgid "OSM Recommendation"
+msgstr ""
+
+msgid "Recommend categories to your newly created instances."
+msgstr ""
+
+msgid "Training process configuration"
+msgstr ""
+
+msgid "Model Settings"
+msgstr ""
+
+msgid "Select objects or create new objects and get recommendation."
+msgstr ""
+
+msgid "Add Recommendation"
+msgstr ""
+
+msgid "Add a recommended key/value pair to your object"
+msgstr ""
+
+msgid "Train a Model"
+msgstr ""
+
+msgid "Start the training engine!"
+msgstr ""
+
 msgid "Edit opening hours"
 msgstr ""
 
diff --git a/i18n/po/lt.po b/i18n/po/lt.po
index 6a5222e..c14ce2b 100644
--- a/i18n/po/lt.po
+++ b/i18n/po/lt.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: josm\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-04-27 03:33+0200\n"
-"PO-Revision-Date: 2015-04-25 06:53+0000\n"
+"POT-Creation-Date: 2015-05-12 03:33+0200\n"
+"PO-Revision-Date: 2015-05-09 06:50+0000\n"
 "Last-Translator: Aurimas Fišeras <Unknown>\n"
 "Language-Team: Lithuanian <lt at li.org>\n"
 "MIME-Version: 1.0\n"
@@ -16,8 +16,8 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
 "(n%100<10 || n%100>=20) ? 1 : 2;\n"
-"X-Launchpad-Export-Date: 2015-04-27 04:49+0000\n"
-"X-Generator: Launchpad (build 17430)\n"
+"X-Launchpad-Export-Date: 2015-05-12 04:49+0000\n"
+"X-Generator: Launchpad (build 17487)\n"
 "Language: lt\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -329,7 +329,7 @@ msgid "download"
 msgstr "parsiųsti"
 
 msgid "problem"
-msgstr "problema"
+msgstr "problemą"
 
 msgid "previous"
 msgstr "ankstesnis"
@@ -526,10 +526,10 @@ msgid "Exit the application."
 msgstr "Baigti programą."
 
 msgid "Expert Mode"
-msgstr "Eksperto režimas"
+msgstr "Eksperto veiksena"
 
 msgid "Enable/disable expert mode"
-msgstr "Įjungti/išjungti eksperto režimą"
+msgstr "Įjungti/išjungti eksperto veikseną"
 
 msgid "Follow line"
 msgstr "Sekti liniją"
@@ -788,11 +788,10 @@ msgid "Unable to parse Lon/Lat"
 msgstr "Nepavyko išnagrinėti ilgumos/platumos."
 
 msgid "Lasso Mode"
-msgstr "Laisvo pasirinkimo Režimas"
+msgstr "Laisvo pažymėjimo veiksena"
 
 msgid "Lasso selection mode: select objects within a hand-drawn region"
-msgstr ""
-"Laisvo pasirinkimo veiksena: pažymėti objektus ranka pieštoje srityje"
+msgstr "Laisvo pažymėjimo veiksena: pažymėti objektus ranka pieštoje srityje"
 
 msgid "Rectified Image..."
 msgstr "Rektifikuotas piešinys..."
@@ -1602,6 +1601,9 @@ msgstr[0] "Atjungus pažymėtą tašką dings susietas kelias."
 msgstr[1] "Atjungus pažymėtus taškus dings susietas kelias."
 msgstr[2] "Atjungus pažymėtus taškus dings susietas kelias."
 
+msgid "Some irrelevant nodes have been removed from the selection"
+msgstr "Kai kurie nereikalingi taškai buvo pašalinti iš pažymėjimo"
+
 msgid "Undo"
 msgstr "Atšaukti"
 
@@ -1716,7 +1718,7 @@ msgid "Checking for deleted parents in the local dataset"
 msgstr "Ieškoma ištrintų tėvų vietinėje duomenų aibėje"
 
 msgid "Validation"
-msgstr "Tikrinimas"
+msgstr "Tikrinti"
 
 msgid "Performs the data validation"
 msgstr "Atlieka duomenų patikrinimą"
@@ -1812,11 +1814,11 @@ msgstr "Šokti į pradžią"
 
 msgctxt "audio"
 msgid "Next Marker"
-msgstr "Kita žyma"
+msgstr "Kita žymeklis"
 
 msgctxt "audio"
 msgid "Play next marker."
-msgstr "Groti kitą žymę."
+msgstr "Groti kitą žymą."
 
 msgctxt "audio"
 msgid "Play/Pause"
@@ -1831,7 +1833,7 @@ msgstr "Ankstesnė žyma"
 
 msgctxt "audio"
 msgid "Play previous marker."
-msgstr "Groti ankstesnę žymę"
+msgstr "Groti ankstesnę žymą."
 
 msgctxt "audio"
 msgid "Slower"
@@ -1848,7 +1850,7 @@ msgid "Downloading GPS data"
 msgstr "Atsiunčiami GPS duomenys"
 
 msgid "Downloaded GPX Data"
-msgstr "Atsiuntė GPX duomenis"
+msgstr "Atsiųsti GPX duomenys"
 
 msgid "Markers from {0}"
 msgstr "Žymekliai iš {0}"
@@ -2023,7 +2025,7 @@ msgid "Add a new Note"
 msgstr "Pridėti naują pastabą"
 
 msgid "Add note mode"
-msgstr "Pastabų pridėjimo režimas"
+msgstr "Pastabų pridėjimo veiksena"
 
 msgid "Click the location where you wish to create a new note"
 msgstr "Spauskite vietą, kurioje norite sukurti naują pastabą"
@@ -2041,7 +2043,7 @@ msgid "You must enter a comment to create a new note"
 msgstr "Privalote įvesti komentarą, kad sukurtumėte pastabą"
 
 msgid "Delete Mode"
-msgstr "Trynimo režimas"
+msgstr "Šalinimo veiksena"
 
 msgid "Delete nodes or ways."
 msgstr "Pašalinti taškus arba kelius."
@@ -2398,7 +2400,7 @@ msgid "Create a copy of this relation and open it in another editor window"
 msgstr "Sukurti šio ryšio  kopiją ir atverti kitą redaktoriaus langą"
 
 msgid "Edit"
-msgstr "Taisa"
+msgstr "Keisti"
 
 msgid "Call relation editor for selected relation"
 msgstr "Iškviesti ryšių redaktorių pažymėtam ryšiui"
@@ -2525,7 +2527,7 @@ msgid "regular expression"
 msgstr "reguliarusis reiškinys"
 
 msgid "add toolbar button"
-msgstr "pridėti įrankinės mygtuką"
+msgstr "pridėti įrankių juostos mygtuką"
 
 msgid "Filter"
 msgstr "Filtras"
@@ -2796,10 +2798,10 @@ msgid "Range of numbers expected"
 msgstr "Tikimasi skaičių intervalo"
 
 msgid "Unexpected token. Expected {0}, found {1}"
-msgstr "Netikėta frazė. Tikėtasi {0}, rasta {1}"
+msgstr "Netikėta leksema. Tikėtasi {0}, rasta {1}"
 
 msgid "Unexpected token: {0}"
-msgstr "Netikėta frazė: {0}"
+msgstr "Netikėta leksema: {0}"
 
 msgid "Missing parameter for OR"
 msgstr "Trūksta OR parametro"
@@ -3377,6 +3379,13 @@ msgstr "Sluoksnis: {0}"
 msgid "Failed to persist preferences to ''{0}''"
 msgstr "Nepavyko išlaikyti nustatymo „{0}“"
 
+msgid ""
+"Try enabling IPv6 network, prefering IPv6 over IPv4 (only works on early "
+"startup)."
+msgstr ""
+"Pabandykite įjungti IPv6 tinklą, teikdami pirmenybę IPv6 prieš IPv4 (veikia "
+"tik pradiniame etape)"
+
 msgid " (at line {0}, column {1})"
 msgstr " (eilutėje {0}, stulpelyje {1})"
 
@@ -3926,7 +3935,7 @@ msgid "Waterway duplicated nodes"
 msgstr "Vandens kelių taškų dubliai"
 
 msgid "Boundary duplicated nodes"
-msgstr "Ribų taškų dubliai"
+msgstr ""
 
 msgid "Power duplicated nodes"
 msgstr "Elektros linijų taškų dubliai"
@@ -4038,6 +4047,15 @@ msgstr "Nenuoseklus skaičius nuo juostų priklausančių reikšmių pirmyn"
 msgid "Number of lane dependent values inconsistent in backward direction"
 msgstr "Nenuoseklus skaičius nuo juostų priklausančių reikšmių atgal"
 
+msgid "Long segments"
+msgstr "Ilgi segmentai"
+
+msgid "This tests for long way segments, which are usually errors."
+msgstr "Tai ieško ilgų kelio segmentų, kurie paprastai reiškia klaidą."
+
+msgid "Very long segment of {0} kilometers"
+msgstr "Labai ilgas {0} kilometrų segmentas"
+
 msgid "Tag checker (MapCSS based)"
 msgstr "Žymų tikrinimas (pagal MapCSS)"
 
@@ -4154,25 +4172,25 @@ msgid "opening_hours value can be prettified"
 msgstr "opening_hours reikšmė gali būti pagražinta"
 
 msgid "Unexpected token:"
-msgstr "Netikėta žyma"
+msgstr "Netikėta leksema:"
 
 msgid "Unexpected token (school holiday parser):"
-msgstr "Netikėta žyma (mokyklos atostogų analizatorius):"
+msgstr "Netikėta leksema (mokyklos atostogų analizatorius):"
 
 msgid "Unexpected token in number range:"
-msgstr "Netikėta žyma skaičių intervale:"
+msgstr "Netikėta leksema skaičių intervale:"
 
 msgid "Unexpected token in week range:"
-msgstr "Netikėta žyma svaitės intervale:"
+msgstr "Netikėta leksema svaitės intervale:"
 
 msgid "Unexpected token in weekday range:"
-msgstr "Netikėta žyma savaitės dienų intervale:"
+msgstr "Netikėta leksema savaitės dienų intervale:"
 
 msgid "Unexpected token in month range:"
-msgstr "Netikėta žyma mėnesių intervale:"
+msgstr "Netikėta leksema mėnesių intervale:"
 
 msgid "Unexpected token in year range:"
-msgstr "Netikėta žyma metų intervale:"
+msgstr "Netikėta leksema metų intervale:"
 
 msgid "Invalid/unsupported syntax."
 msgstr "Neteisinga/nepalaikoma sintaksė."
@@ -4685,7 +4703,7 @@ msgid "Conflict"
 msgstr "Konfliktas"
 
 msgid "Authentication Failed"
-msgstr "Nepavyko nustatyti tapatybės"
+msgstr "Nepavyko nustatyti tapatumo"
 
 msgid "Access to redacted version ''{0}'' of {1} {2} is forbidden."
 msgstr "Prieiga prie pašalintos {1} {2} versijos „{0}“ yra uždrausta."
@@ -4703,7 +4721,7 @@ msgid "Communication with OSM server failed"
 msgstr "Ryšys su OSM serveriu nepavyko"
 
 msgid "Authentication failed"
-msgstr "Tapatybės nustatyti nepavyko"
+msgstr "Tapatumo nustatyti nepavyko"
 
 msgid "Unknown host"
 msgstr "Nežinomas serveris"
@@ -4910,6 +4928,23 @@ msgstr[1] ""
 msgstr[2] ""
 "JOSM dirba neprisijungusiame režime. Šie resursai bus neprieinami: {0}"
 
+msgid ""
+"Detected useable IPv6 network, prefering IPv6 over IPv4 after next restart."
+msgstr ""
+"Aptiktas panaudojamas IPv6 tinklas, po kito paleidimo pirmenybė bus teikiama "
+"IPv6, o ne IPv4."
+
+msgid "Detected useable IPv6 network, prefering IPv6 over IPv4."
+msgstr ""
+"Aptiktas panaudojamas IPv6 tinklas, pirmenybė teikiama IPv6, o ne IPv4."
+
+msgid ""
+"Detected no useable IPv6 network, prefering IPv4 over IPv6 after next "
+"restart."
+msgstr ""
+"Aptiktas nepanaudojamas IPv6 tinklas, kito paleidimo metu pirmenybė bus "
+"teikiama IPv4, o ne IPv6."
+
 msgid "Unsaved osm data"
 msgstr "Neišsaugoti osm duomenys"
 
@@ -4977,7 +5012,7 @@ msgid "Data"
 msgstr "Duomenys"
 
 msgid "Selection"
-msgstr "Pažymėjimas"
+msgstr "Pažymėti objektai"
 
 msgid "Presets"
 msgstr "Ruošiniai"
@@ -4998,10 +5033,10 @@ msgid "Save and load the current session (list of layers, etc.)"
 msgstr "Įrašyti ir įkelti dabartinį seansą (sluoksnių sąrašą ir t. t.)"
 
 msgid "Edit toolbar"
-msgstr "Keitimo įrankinė"
+msgstr "Keitimo įrankių juosta"
 
 msgid "Toggles the visibility of the edit toolbar (i.e., the vertical tool)"
-msgstr "Keičia keitimo įrankinės (vertikalios juostos) matomumą"
+msgstr "Keičia keitimo įrankių juostos (vertikalios) matomumą"
 
 msgid "Preset preferences"
 msgstr "Išankstinių nuostatų savybės"
@@ -5031,7 +5066,7 @@ msgid "Click the arrow at the bottom to show it again."
 msgstr "Spauskite rodyklę apačioje, kad vėl jį rodytumėte."
 
 msgid "Hide edit toolbar"
-msgstr "Slėpti keitimo įrankinę"
+msgstr "Slėpti keitimo įrankių juostą"
 
 msgid "Hide or show this toggle button"
 msgstr "Slėpti ar rodyti šį perjungimo mygtuką"
@@ -6288,7 +6323,7 @@ msgid " as \"{0}\""
 msgstr " kaip \"{0}\""
 
 msgid "{0} Nodes: "
-msgstr "{0} raškai: "
+msgstr "{0} taškai: "
 
 msgid "Bounding box: "
 msgstr "Apimties stačiakampis: "
@@ -6544,7 +6579,7 @@ msgid "URL:"
 msgstr "URL:"
 
 msgid "Built-in Style, internal path:"
-msgstr "Vidinis stilius, vidinis kelias:"
+msgstr "Įtaisytasis stilius, vidinis kelias:"
 
 msgid "Path:"
 msgstr "Kelias:"
@@ -6710,8 +6745,8 @@ msgstr "Atkabinti skydelį"
 msgid ""
 "Close this panel. You can reopen it with the buttons in the left toolbar."
 msgstr ""
-"Uždaryti šį skydelį. Vėliau galite jį iš naujo atverti mygtukais įrankinėje "
-"kairėje."
+"Uždaryti šį skydelį. Vėliau galite jį iš naujo atverti mygtukais kairėje "
+"įrankių juostoje."
 
 msgid "Click to minimize/maximize the panel content"
 msgstr "Spauskite skydelio turiniui suskleisti/išskleisti"
@@ -6741,16 +6776,6 @@ msgid "Only launching info browsers for the first {0} of {1} selected users"
 msgstr ""
 "Info naršyklės paleidžiamos tik pirmiems {0} iš {1} pažymėtų naudotojų"
 
-msgid ""
-"<html>Failed to create an URL because the encoding ''{0}''<br>was missing on "
-"this system.</html>"
-msgstr ""
-"<html>Nepavyko sukurti URL, nes koduotės „{0}“<br>nėra šioje "
-"sistemoje.</html>"
-
-msgid "Missing encoding"
-msgstr "Trūksta koduotės"
-
 msgid "Author"
 msgstr "Autorius"
 
@@ -6773,7 +6798,7 @@ msgid "Fix the selected issue."
 msgstr "Pataisyti parinktą problemą"
 
 msgid "Ignore the selected issue next time."
-msgstr "Kitą karta ignoruoti parinkta problema."
+msgstr "Kitą kartą ignoruoti pasirinktą problemą."
 
 msgid "Whole group"
 msgstr "Visą grupę"
@@ -7363,7 +7388,7 @@ msgid "Tags for selected objects."
 msgstr "Žymos, pažymėtiems objektams"
 
 msgid "Member Of"
-msgstr "Šio narys"
+msgstr "Šio ryšio narys"
 
 msgid "Position"
 msgstr "Padėtis"
@@ -8023,7 +8048,7 @@ msgstr ""
 "Pažymėkite, kad atsiųstumėte OSM duomenis parinktame atsiuntimo plote."
 
 msgid "Raw GPS data"
-msgstr "Nauji GPS duomenys"
+msgstr "Neapdoroti GPS duomenys"
 
 msgid "Select to download GPS traces in the selected download area."
 msgstr ""
@@ -8050,9 +8075,9 @@ msgid ""
 "<html>Autostart ''Download from OSM'' dialog every time JOSM is "
 "started.<br>You can open it manually from File menu or toolbar.</html>"
 msgstr ""
-"<html>Automatiškai paleisti „Atsiųsti iš OSM“ dialogą kiekvieną kartą "
-"paleidus JOSM.<br>Jūs galite jį atverti patys iš Failo meniu arba "
-"įrankinės.</html>"
+"<html>Automatiškai atverti „Atsiųsti iš OSM“ dialogo langą kiekvieną kartą "
+"paleidus JOSM.<br>Galite jį atverti patys iš Failo meniu arba įrankių "
+"juostos.</html>"
 
 msgid ""
 "Use left click&drag to select area, arrows or right mouse button to scroll "
@@ -8631,8 +8656,8 @@ msgid ""
 "Warning: depending on the authentication method the proxy server uses the "
 "password may be transferred unencrypted."
 msgstr ""
-"Įspėjimas: priklausomai nuo autentikacijos metodo, šliuzo stoties naudojamas "
-"slaptažodis gali būti perduodamas atviru tekstu."
+"Įspėjimas: priklausomai nuo tapatumo nustatymo metodo, įgaliotojo serverio "
+"naudojamas slaptažodis gali būti persiunčiamas nešifruotas."
 
 msgid "Authenticate"
 msgstr "Patvirtinti tapatybę"
@@ -8641,7 +8666,7 @@ msgid "Authenticate with the supplied username and password"
 msgstr "Autentikuotis su nurodytu vardu ir slaptažodžiu"
 
 msgid "Cancel authentication"
-msgstr "Nutraukti autentikacija"
+msgstr "Nutraukti tapatumo nustatymą"
 
 msgid "Downloading file"
 msgstr "Atsiunčiamas failas"
@@ -9392,7 +9417,7 @@ msgid "Save Layer"
 msgstr "Išsaugoti sluoksnį"
 
 msgid "Note"
-msgstr ""
+msgstr "Pastaba"
 
 msgid "Notes layer"
 msgstr "Pastabų sluoksnis"
@@ -9683,19 +9708,19 @@ msgid "Matches first photo with first gpx point"
 msgstr "Sutapatina pirmą nuotrauką su pirmu gpx tašku"
 
 msgid "Manual adjust"
-msgstr ""
+msgstr "Rankinis derinimas"
 
 msgid "Override position for: "
-msgstr ""
+msgstr "Perrašyti poziciją: "
 
 msgid "Images with geo location in exif data ({0}/{1})"
-msgstr ""
+msgstr "Nuotraukos su koordinatėmis exif duomenyse ({0}/{1})"
 
 msgid "Images that are already tagged ({0}/{1})"
-msgstr ""
+msgstr "Nuotraukos, kurios jau sužymėtos ({0}/{1})"
 
 msgid "Show Thumbnail images on the map"
-msgstr ""
+msgstr "Žemėlapyje rodyti nuotraukų miniatiūras"
 
 msgid "Timezone: "
 msgstr "Laiko juosta: "
@@ -9704,7 +9729,7 @@ msgid "Offset:"
 msgstr "Poslinkis:"
 
 msgid "Correlate images with GPX track"
-msgstr ""
+msgstr "Koreliuoti nuotraukas su GPX pėdsaku"
 
 msgid "Correlate"
 msgstr "Koreliuoti"
@@ -9719,10 +9744,10 @@ msgid "Try Again"
 msgstr "Bandyti dar kartą"
 
 msgid "No images could be matched!"
-msgstr ""
+msgstr "Nepavyko sutapatinti jokių nuotraukų!"
 
 msgid "No gpx selected"
-msgstr ""
+msgstr "Neparinkti jokie gpx"
 
 msgid "<html>Matched <b>{0}</b> of <b>{1}</b> photo to GPX track.</html>"
 msgid_plural ""
@@ -10079,6 +10104,8 @@ msgid ""
 "server.<br>Because its way points do not include a timestamp we cannot "
 "correlate them with audio data.</html>"
 msgstr ""
+"<html>GPX sluoksnio „{0}“ duomenys įkelti iš serverio.<br>Kadangi juose nėra "
+"laiko, jų negalima susieti su audio duomenimis.</html>"
 
 msgid "Import not possible"
 msgstr "Importas neįmanomas"
@@ -10087,20 +10114,24 @@ msgid "Wave Audio files (*.wav)"
 msgstr "Wave Audio failas (*.wav)"
 
 msgid "Audio markers from {0}"
-msgstr ""
+msgstr "Garso žymos iš {0}"
 
 msgid "No GPX track available in layer to associate audio with."
-msgstr ""
+msgstr "Sluoksnyje nėra GPX pėdsakų, su kuriais būtų galima susieti garsą."
 
 msgid ""
 "Some waypoints with timestamps from before the start of the track or after "
 "the end were omitted or moved to the start."
 msgstr ""
+"Kai kurie taškai su laiku prieš pėdsako pradžią arba po jo pabaigos buvo "
+"praleisti arba perkelti į pradžią."
 
 msgid ""
 "Some waypoints which were too far from the track to sensibly estimate their "
 "time were omitted."
 msgstr ""
+"Kai kurie taškai, kurie buvo per toli nuo pėdsako, kad būtų galima nuspėti "
+"jų laiką, buvo praleisti."
 
 msgid "Import images"
 msgstr "Importuoti atvaizdžius"
@@ -10110,34 +10141,39 @@ msgid ""
 "server.<br>Because its way points do not include a timestamp we cannot "
 "correlate them with images.</html>"
 msgstr ""
+"<html>GPX sluoksnio „{0}“ duomenys buvo atsiųsti iš serverio.<br>Juose nėra "
+"laiko, todėl šių pėdsakų negalima susieti su nuotraukomis.</html>"
 
 msgid "Markers From Named Points"
-msgstr ""
+msgstr "Žymos iš pavadintų taškų"
 
 msgid "Named Trackpoints from {0}"
-msgstr ""
+msgstr "Pavadinti pėdsako taškai iš {0}"
 
 msgid "gps marker"
-msgstr ""
+msgstr "gps žyma"
 
 msgid "marker"
 msgid_plural "markers"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "žyma"
+msgstr[1] "žymos"
+msgstr[2] "žymų"
 
 msgid "{0} consists of {1} marker"
 msgid_plural "{0} consists of {1} markers"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "{0} yra {1} žyma"
+msgstr[1] "{0} yra {1} žymos"
+msgstr[2] "{0} yra {1} žymų"
 
 msgid "No existing audio markers in this layer to offset from."
 msgstr ""
+"Šiame sluoksnyje nėra esamų audio žymų, nuo kurių būtų galima paslinkti."
 
 msgid "Show Text/Icons"
 msgstr "Rodyti tekstą/piktogramas"
 
 msgid "Toggle visible state of the marker text and icons."
-msgstr ""
+msgstr "Perjungti žymų teksto ir piktogramų matomumą."
 
 msgid "Synchronize Audio"
 msgstr "Sinchronizuoti garsą"
@@ -10145,45 +10181,52 @@ msgstr "Sinchronizuoti garsą"
 msgid ""
 "You need to pause audio at the moment when you hear your synchronization cue."
 msgstr ""
+"Jums reikia sustabdyti garsą tuo metu, kai jūs girdite savo sinchronizacijos "
+"užuominą."
 
 msgid "Audio synchronized at point {0}."
-msgstr ""
+msgstr "Garsas sinchronizuotas taške {0}."
 
 msgid "Unable to synchronize in layer being played."
-msgstr ""
+msgstr "Nepavyksta sinchronizuoti grojamame sluoksnyje."
 
 msgid "Make Audio Marker at Play Head"
-msgstr ""
+msgstr "Sukurti garso žymą grojimo pozicijoje"
 
 msgid ""
 "You need to have paused audio at the point on the track where you want the "
 "marker."
 msgstr ""
+"Jums reikėjo sustabdyti garsą pėdsako taške, kuriame norite palikti žymą."
 
 msgid ""
 "You need to drag the play head near to the GPX track whose associated sound "
 "track you were playing (after the first marker)."
 msgstr ""
+"Jums reikia pertempti grojimo vietą arčiau GPX pėdsako, kurio susietą garso "
+"takelį jūs grojate (po pirmo žymeklio)."
 
 msgid ""
 "You need to SHIFT-drag the play head onto an audio marker or onto the track "
 "point where you want to synchronize."
 msgstr ""
+"Jums reikia SHIFT-pertraukti grojimo vietą ant garso žymeklio arba ant "
+"pėdsako taško, kurį norite sinchronizuoti."
 
 msgid "Unable to create new audio marker."
-msgstr ""
+msgstr "Nepavyko sukurti naujo garso žymeklio."
 
 msgid "There was an error while trying to display the URL for this marker"
-msgstr ""
+msgstr "Bandant parodyti šio žymeklio URL įvyko klaida"
 
 msgid "(URL was: "
 msgstr "(URL buvo: "
 
 msgid "Select the map painting styles"
-msgstr ""
+msgstr "Parinkite žemėlapio paišymo stilius"
 
 msgid "Failed to load Mappaint styles from ''{0}''. Exception was: {1}"
-msgstr ""
+msgstr "Nepavyko įkelti žemėlapio paišymo stilių iš „{0}“. Klaida buvo: {1}"
 
 msgid "loading style ''{0}''..."
 msgstr "įkeliamas stilius „{0}“..."
@@ -10195,77 +10238,94 @@ msgid_plural ""
 "There were {0} errors when loading this style. Select ''Info'' from the "
 "right click menu for details."
 msgstr[0] ""
+"Įkeliant šį stilių įvyko klaida. Parinkite „Info“ iš dešinio paspaudimo "
+"meniu, kad gautumėte daugiau informacijos."
 msgstr[1] ""
+"Įkeliant šį stilių įvyko {0} klaidos. Parinkite „Info“ iš dešinio paspaudimo "
+"meniu, kad gautumėte daugiau informacijos."
+msgstr[2] ""
+"Įkeliant šį stilių įvyko {0} klaidų. Parinkite „Info“ iš dešinio paspaudimo "
+"meniu, kad gautumėte daugiau informacijos."
 
 msgid "Failed to parse Mappaint styles from ''{0}''. Error was: {1}"
-msgstr ""
+msgstr "Nepavyko išnagrinėti žemėlapio paišymo stilių iš „{0}“. Klaida: {1}"
 
 msgid ""
 "Detected deprecated ''{0}'' in ''{1}'' which will be removed shortly. Use "
 "''{2}'' instead."
 msgstr ""
+"Nustatytas pasenęs \"{0}\", kuris yra \"{1}\". Greitai jis bus pašalintas. "
+"Naudokite \"{2}\"."
 
 msgid "Illegal dash pattern, values must be positive"
-msgstr ""
+msgstr "Neteisingas punktyro šablonas, reikšmės turi būti teigiamos"
 
 msgid "Illegal dash pattern, at least one value must be > 0"
-msgstr ""
+msgstr "Neteisingas punktyro šablonas, bent viena reikšmė turi būti > 0"
 
 msgid ""
 "Failed to parse Mappaint styles from ''{0}''. Error was: [{1}:{2}] {3}"
 msgstr ""
+"Nepavyko išnagrinėti žemėlapio braižymo stilių iš „{0}“. Klaida: [{1}:{2}] "
+"{3}"
 
 msgid "Access Token Key:"
-msgstr ""
+msgstr "Prieigos raktas:"
 
 msgid "Access Token Secret:"
-msgstr ""
+msgstr "Prieigos rakto paslaptis:"
 
 msgid "Save Access Token in preferences"
-msgstr ""
+msgstr "Išsaugoti prieigos raktą nustatymuose"
 
 msgid ""
 "<html>Select to save the Access Token in the JOSM preferences.<br>Unselect "
 "to use the Access Token in this JOSM session only.</html>"
 msgstr ""
+"<html>Pažymėkite prieigos rakto išsaugojimui JOSM "
+"nustatymuose.<br>Atžymėkite prieigos rakto naudojimui tik šiame JOSM "
+"seanse.</html>"
 
 msgid "Use default settings"
 msgstr "Naudoti numatytuosius nustatymus"
 
 msgid "Consumer Key:"
-msgstr ""
+msgstr "Vartotojo raktas:"
 
 msgid "Consumer Secret:"
-msgstr ""
+msgstr "Vartotojo slaptažodis"
 
 msgid "Request Token URL:"
-msgstr ""
+msgstr "Prieigos rakto užklausos URL:"
 
 msgid "Access Token URL:"
-msgstr ""
+msgstr "Prieigos rakto URL:"
 
 msgid "Authorize URL:"
-msgstr ""
+msgstr "Autorizavimo URL:"
 
 msgid "Click to reset the OAuth settings to default values"
-msgstr ""
+msgstr "Spauskite OAuth nustatymų atkūrimui į numatytąsias reikšmes"
 
 msgid "Click to abort resetting to the OAuth default values"
 msgstr ""
+"Spauskite OAuth nustatymų atkūrimui į numatytąsias reikšmes nutraukti"
 
 msgid ""
 "<html>JOSM is about to reset the OAuth settings to default values.<br>The "
 "current custom settings are not saved.</html>"
 msgstr ""
+"<html>JOSM ruošiasi atkurti OAuth nustatymų numatytąsias "
+"reikšmes.<br>Dabartiniai adaptuoti nustatymas nėra išsaugoti.</html>"
 
 msgid "Overwrite custom OAuth settings?"
-msgstr ""
+msgstr "Perrašyti adaptuotus OAuth nustatymus?"
 
 msgid "Fully automatic"
-msgstr "Visiškai automatinis"
+msgstr "Visiškai automatinė"
 
 msgid "Semi-automatic"
-msgstr "Iš dalies automatinis"
+msgstr "Iš dalies automatinė"
 
 msgid "Manual"
 msgstr "Rankinis"
@@ -10276,6 +10336,10 @@ msgid ""
 "fully<br>automatically authorizes the user and retrieves an Access "
 "Token.</html>"
 msgstr ""
+"<html>Vykdyti visiškai automatinę procedūrą prieigos raktui prie OSM "
+"svetainės gauti.<br>JOSM kreipiasi į OSM svetainę JOSM naudotojo vardu ir "
+"visiškai<br>automatiškai nustato naudoto prieigos teises ir gauna prieigos "
+"raktą.</html>"
 
 msgid ""
 "<html>Run a semi-automatic procedure to get an access token from the OSM "
@@ -10284,11 +10348,18 @@ msgid ""
 "external browser<br>to authenticate itself and to accept the request token "
 "submitted by JOSM.</html>"
 msgstr ""
+"<html>Vykdyti iš dalies automatinę procedūrą prieigos raktui prie OSM "
+"svetainės gauti.<br>JOSM išsiunčia standartines OAuth užklausas prieigos "
+"rakto užklausai ir<br>prieigos raktui. Tada nusiunčia naudotoją į OSM "
+"svetainę išorinėje naršyklėje<br>tapatumo nustatymui ir JOSM išsiųstai "
+"prieigos rakto užklausai priimti.</html>"
 
 msgid ""
 "<html>Enter an Access Token manually if it was generated and retrieved "
 "outside<br>of JOSM.</html>"
 msgstr ""
+"<html>Įveskite prieigos raktą rankinių būdu, jei jis buvo sugeneruotas ir "
+"gautas<br>ne JOSM.</html>"
 
 msgid ""
 "Please enter your OSM user name and password. The password will "
@@ -10296,6 +10367,10 @@ msgid ""
 "will be submitted to the OSM server <strong>only once</strong>. Subsequent "
 "data upload requests don''t use your password any more."
 msgstr ""
+"Prašome įvesti jūsų OSM naudotojo vardą ir slaptažodį. Slaptažodis "
+"<strong>nebus</strong> saugomas atviru tekstu JOSM nustatymuose ir bus "
+"siunčiamas į OSM serverį <strong>tik vieną kartą</strong>. Vėlesni duomenų "
+"įkėlimai jūsų slaptažodžio daugiau nebenaudos."
 
 msgid "Username: "
 msgstr "Naudotojo vardas : "
@@ -10307,24 +10382,29 @@ msgid ""
 "<strong>Warning:</strong> JOSM does login <strong>once</strong> using a "
 "secure connection."
 msgstr ""
+"<strong>Įspėjimas:</strong> JOSM prisijungs <strong>vieną kartą</strong> "
+"naudojant saugų ryšio kanalą."
 
 msgid "Granted rights"
-msgstr ""
+msgstr "Leidžiamos teisės"
 
 msgid "Advanced OAuth properties"
-msgstr ""
+msgstr "Sudėtingesnės OAuth savybės"
 
 msgid "Accept Access Token"
-msgstr ""
+msgstr "Priimti prieigos raktą"
 
 msgid ""
 "<html>You have successfully retrieved an OAuth Access Token from the OSM "
 "website. Click on <strong>{0}</strong> to accept the token. JOSM will use it "
 "in subsequent requests to gain access to the OSM API.</html>"
 msgstr ""
+"<html>Sėkmingai gavote OAuth prieigos raktą iš OSM svetainės. Spauskite "
+"<strong>{0}</strong> prieigos raktui priimti. JOSM jį naudos vėlesnėse "
+"užklausose prieigai prie OSM API gauti.</html>"
 
 msgid "Authorize now"
-msgstr ""
+msgstr "Autorizuotis dabar"
 
 msgid "Click to redirect you to the authorization form on the JOSM web site"
 msgstr ""
@@ -10333,34 +10413,40 @@ msgid "Back"
 msgstr "Atgal"
 
 msgid "Run the automatic authorization steps again"
-msgstr ""
+msgstr "Paleisti automatinius autorizavimo žingsnius dabar"
 
 msgid "Test Access Token"
-msgstr ""
+msgstr "Tikrinti prieigos raktą"
 
 msgid "Please enter your OSM user name"
-msgstr ""
+msgstr "Įveskite savo OSM vartotojo vardą"
 
 msgid "The user name cannot be empty. Please enter your OSM user name"
 msgstr ""
+"Vartotojo vardas negali būti tuščias. Įveskite savo OSM vartotojo vardą"
 
 msgid "Please enter your OSM password"
-msgstr ""
+msgstr "Įveskite savo OSM vartotojo slaptažodį"
 
 msgid "The password cannot be empty. Please enter your OSM password"
 msgstr ""
+"Slaptažodis negali būti tuščias. Įveskite savo OSM vartotojo slaptažodį"
 
 msgid "Authorize JOSM to access the OSM API"
-msgstr ""
+msgstr "Autorizuoti JOSM prieigai prie OSM API"
 
 msgid ""
 "<html>The automatic process for retrieving an OAuth Access Token<br>from the "
 "OSM server failed.<br><br>Please try again or choose another kind of "
 "authorization process,<br>i.e. semi-automatic or manual authorization.</html>"
 msgstr ""
+"<html>Automatinis OAuth prieigos rakto gavimo procesas<br>iš OSM serverio "
+"nepavyko.<br><br>Bandykite dar kartą arba pasirinkite kitą prieigos "
+"suteikimo procesą,<br>pvz., iš dalies automatinį ar rankinį prieigos "
+"suteikimą.</html>"
 
 msgid "OAuth authorization failed"
-msgstr ""
+msgstr "OAuth prieigos suteikimas nepavyko"
 
 msgid ""
 "<html>The automatic process for retrieving an OAuth Access Token<br>from the "
@@ -10368,176 +10454,200 @@ msgid ""
 "from the OAuth Authorize Endpoint URL ''{0}''.<br><br>Please check your "
 "advanced setting and try again.</html>"
 msgstr ""
+"<html>Automatinis OAuth prieigos rakto gavimo procesas<br>iš OSM serverio "
+"nepavyko, nes JOSM negalėjo sukurti<br>teisingo URL iš OAuth prieigos "
+"suteikimo galinio URL „{0}“.<br><br>Patikrinkite sudėtingesnes nuostatas ir "
+"bandykite dar kartą.</html>"
 
 msgid ""
 "<html>The automatic process for retrieving an OAuth Access Token<br>from the "
 "OSM server failed. JOSM failed to log into {0}<br>for user "
 "{1}.<br><br>Please check username and password and try again.</html>"
 msgstr ""
+"<html>Automatinis OAuth prieigos rakto gavimo procesas<br>iš OSM serverio "
+"nepavyko. JOSM nepavyko prisijungti prie {0}<br>su naudotoju "
+"{1}.<br><br>Patikrinkite naudotojo vardą, slaptažodį ir bandykite dar "
+"kartą.</html>"
 
 msgid ""
 "Please enter an OAuth Access Token which is authorized to access the OSM "
 "server ''{0}''."
 msgstr ""
+"Įveskite OAuth prieigos raktą kuriam leidžiama prieiti prie OSM serverio "
+"„{0}“."
 
 msgid "Access Token"
-msgstr ""
+msgstr "Prieigos raktas"
 
 msgid "Advanced OAuth parameters"
-msgstr ""
+msgstr "Sudėtingesni OAuth parametrai"
 
 msgid "Enter the OAuth Access Token"
-msgstr ""
+msgstr "Įveskite OAuth prieigos raktą"
 
 msgid "Enter advanced OAuth properties"
-msgstr ""
+msgstr "Įveskite sudėtingesnes OAuth savybes"
 
 msgid ""
 "<html><body>Please enter an OAuth Access Token which is authorized to access "
 "the OSM server ''{0}''.</body></html>"
 msgstr ""
+"<html><body>Įveskite OAuth prieigos raktą, kuriam leidžiama prieiti prie OSM "
+"serverio „{0}“.</body></html>"
 
 msgid "Please enter an Access Token Key"
-msgstr ""
+msgstr "Įveskite prieigos raktą"
 
 msgid ""
 "The Access Token Key must not be empty. Please enter an Access Token Key"
-msgstr ""
+msgstr "Prieigos raktas privalo būti ne tuščias. Įveskite prieigos raktą"
 
 msgid "Please enter an Access Token Secret"
-msgstr ""
+msgstr "Įveskite prieigos rakto paslaptį"
 
 msgid ""
 "The Access Token Secret must not be empty. Please enter an Access Token "
 "Secret"
 msgstr ""
+"Prieigos rakto paslaptis privalo būti ne tuščia. Įveskite prieigos rakto "
+"paslaptį"
 
 msgid "Click to test the Access Token"
-msgstr ""
+msgstr "Spauskite prieigos rakto patikrinimui"
 
 msgid ""
 "With OAuth you grant JOSM the right to upload map data and GPS tracks on "
 "your behalf (<a href=\"{0}\">more info...</a>)."
 msgstr ""
+"Su OAuth suteikiate JOSM teisę išsiųsti žemėlapio duomenis ir GPS pėdsakus "
+"savo vardu (<a href=\"{0}\">daugiau informacijos...</a>)."
 
 msgid "Please select an authorization procedure: "
-msgstr ""
+msgstr "Pasirinkite autorizavimo procedūrą: "
 
 msgid "Get an Access Token for ''{0}''"
-msgstr ""
+msgstr "Gauti prieigos raktą „{0}“"
 
 msgid "Close the dialog and cancel authorization"
-msgstr ""
+msgstr "Uždarykite langą ir atšaukite autorizaciją"
 
 msgid "Close the dialog and accept the Access Token"
-msgstr ""
+msgstr "Užverti dialogo langą ir priimti prieigos raktą"
 
 msgid "Failed to cancel running OAuth operation"
-msgstr ""
+msgstr "Nepavyko nutraukti vykdomos OAuth operacijos"
 
 msgid "Retrieving OAuth Request Token from ''{0}''"
-msgstr ""
+msgstr "Gaunama OAuth prieigos rakto užklausa iš „{0}“"
 
 msgid "Retrieving OAuth Access Token from ''{0}''"
-msgstr ""
+msgstr "Gaunamas OAuth prieigos raktas iš „{0}“"
 
 msgid "OSM website did not return a session cookie in response to ''{0}'',"
-msgstr ""
+msgstr "OSM svetainė negrąžinto sesijos sausainuko atsakant į „{0}“,"
 
 msgid ""
 "Failed to authenticate user ''{0}'' with password ''***'' as OAuth user"
 msgstr ""
+"Nepavyko suteikti prieigos naudotojui „{0}“ su slaptažodžiu „***“ kaip OAuth "
+"naudotojui"
 
 msgid "Failed to authorize OAuth request  ''{0}''"
-msgstr ""
+msgstr "Nepavyko sankcionuoti OAuth užklausos „{0}“"
 
 msgid "Authorizing OAuth Request token ''{0}'' at the OSM website ..."
-msgstr ""
+msgstr "Sankcionuojama OAuth prieigos rakto užklausa „{0}“ OSM svetainėje..."
 
 msgid "Initializing a session at the OSM website..."
-msgstr ""
+msgstr "Inicilizuojama OSM svetainės sesija..."
 
 msgid "Authenticating the session for user ''{0}''..."
-msgstr ""
+msgstr "Autentikuojama sesija naudotojui „{0}“..."
 
 msgid "Authorizing request token ''{0}''..."
-msgstr ""
+msgstr "Sankcionuojama OAuth prieigos rakto užklausa „{0}“..."
 
 msgid "Logging out session ''{0}''..."
-msgstr ""
+msgstr "Baigiama sesija \"{0}\"..."
 
 msgid "Allow to upload map data"
-msgstr ""
+msgstr "Leisti įkelti žemėlapio duomenis"
 
 msgid "Select to grant JOSM the right to upload map data on your behalf"
-msgstr ""
+msgstr "Parinkite, kad suteiktumėte JOSM teisę įkelti duomenis jūsų vardu"
 
 msgid "Allow to upload GPS traces"
-msgstr ""
+msgstr "Leisti įkelti GPS pėdsakus"
 
 msgid "Select to grant JOSM the right to upload GPS traces on your behalf"
-msgstr ""
+msgstr "Parinkite, kad duotumėte JOSM teisę įkelti GPS pėdsakus jūsų vardu"
 
 msgid "Allow to download your private GPS traces"
-msgstr ""
+msgstr "Leisti kitiems atsisiųsti Jūsų privačius GPS pėdsakus"
 
 msgid ""
 "Select to grant JOSM the right to download your private GPS traces into JOSM "
 "layers"
 msgstr ""
+"Pažymėkite, jei leidžiate JOSM atsisiųsti Jūsų privačius GPS pėdsakus į JOSM "
+"sluoksnius"
 
 msgid "Allow to read your preferences"
-msgstr ""
+msgstr "Leisti skaityti Jūsų nustatymus"
 
 msgid "Select to grant JOSM the right to read your server preferences"
 msgstr ""
+"Parinkite, kad duotumėte JOSM teisę skaityti jūsų serverio nustatymus"
 
 msgid "Allow to write your preferences"
-msgstr ""
+msgstr "Leisti įrašyti Jūsų nustatymus"
 
 msgid "Select to grant JOSM the right to write your server preferences"
-msgstr ""
+msgstr "Parinkite, kad duotumėte JOSM teisę įrašyti jūsų serverio nustatymus"
 
 msgid "Allow modifications of notes"
 msgstr "Leisti modifikuoti pastabas"
 
 msgid "Select to grant JOSM the right to modify notes on your behalf"
-msgstr ""
+msgstr "Parinkite, kad duotumėte JOSM teisę keisti pastabas jūsų vardu"
 
 msgid "Retrieving OAuth Access Token..."
-msgstr ""
+msgstr "Gaunamas OAuth prieigos raktas..."
 
 msgid "<html>Retrieving an OAuth Access Token from ''{0}'' failed.</html>"
-msgstr ""
+msgstr "<html>Nepavyko gauti OAuth prieigos rakto iš „{0}“.</html>"
 
 msgid "Request Failed"
-msgstr ""
+msgstr "Užklausa nepavyko"
 
 msgid "Retrieving OAuth Request Token..."
-msgstr ""
+msgstr "Gaunama OAuth prieigos rakto užklausa..."
 
 msgid "<html>Retrieving an OAuth Request Token from ''{0}'' failed.</html>"
-msgstr ""
+msgstr "<html>Nepavyko gauti OAuth prieigos rakto užklausos iš „{0}“.</html>"
 
 msgid "Display Advanced OAuth Parameters"
-msgstr ""
+msgstr "Rodyti sudėtingesnius OAuth parametrus"
 
 msgid "Retrieve Request Token"
-msgstr ""
+msgstr "Gauti prieigos rakto užklausą"
 
 msgid ""
 "<html>Please click on <strong>{0}</strong> to retrieve an OAuth Request "
 "Token from ''{1}''.</html>"
 msgstr ""
+"<html>Spauskite <strong>{0}</strong> OAuth prieigos rakto užklausai gauti iš "
+"„{1}“.</html>"
 
 msgid "<html>Step 1/3: Retrieve an OAuth Request Token</html>"
-msgstr ""
+msgstr "<html>Žingsnis 1/3: Gauti OAuth prieigos rakto užklausą</html>"
 
 msgid "<html>Step 2/3: Authorize and retrieve an Access Token</html>"
 msgstr ""
+"<html>Žingsnis 2/3: Sankcionuoti prieigą ir gauti prieigos raktą</html>"
 
 msgid "Request Access Token"
-msgstr ""
+msgstr "Užklausti prieigos rakto"
 
 msgid ""
 "<html>JOSM successfully retrieved a Request Token. JOSM is now launching an "
@@ -10548,42 +10658,55 @@ msgid ""
 "copy the following authorize URL and paste it into the address field of your "
 "browser.</html>"
 msgstr ""
+"<html>JOSM sėkmingai gavo prieigos rakto užklausą. JOSM dabar paleidinėja "
+"prieigos sankcionavimo puslapį išorinėje naršyklėje. Prisijunkite su savo "
+"OSM naudotojo vardu ir slaptažodžiu ir sekite instrukcijas prieigos rakto "
+"užklausai sankcionuoti. Tada grįžkite į šį dialogo langą ir spauskite "
+"<strong>{0}</strong><br><br>Jei nepavyko paleisti išorinės naršyklės, galite "
+"kopijuoti šį prieigos sankcionavimo URL ir įdėti jį naršyklės adreso "
+"lauke.</html>"
 
 msgid "Go back to step 1/3"
-msgstr ""
+msgstr "Grįžti į žingsnį 1/3"
 
 msgid "<html>Step 3/3: Successfully retrieved an Access Token</html>"
-msgstr ""
+msgstr "<html>Žingsnis 3/3: Sėkmingai gautas prieigos raktas</html>"
 
 msgid ""
 "<html>JOSM has successfully retrieved an Access Token. You can now accept "
 "this token. JOSM will use it in the future for authentication and "
 "authorization to the OSM server.<br><br>The access token is: </html>"
 msgstr ""
+"<html>JOSM sėkmingai gavo prieigos raktą. Galite priimti šį prieigos raktą. "
+"JOSM naudos jį ateityje tapatumo nustatymui ir prieigos teisėms prie OSM "
+"serverio.<br><br>Prieigos raktas: </html>"
 
 msgid "Click to retrieve a Request Token"
-msgstr ""
+msgstr "Spauskite prieigos rakto užklausai gauti"
 
 msgid "Retrieve Access Token"
-msgstr ""
+msgstr "Gauti prieigos raktą"
 
 msgid "Click to retrieve an Access Token"
-msgstr ""
+msgstr "Spauskite prieigos raktui gauti"
 
 msgid "Testing OAuth Access Token"
-msgstr ""
+msgstr "Tikrinamas OAuth prieigos raktas"
 
 msgid "Retrieving user details with Access Token Key ''{0}'' was rejected."
-msgstr ""
+msgstr "Naudotojo duomenų gavimas su prieigos raktu „{0}“ atmestas."
 
 msgid "Retrieving user details with Access Token Key ''{0}'' was forbidden."
-msgstr ""
+msgstr "Naudotojo duomenų gavimas su prieigos raktu „{0}“ uždraustas."
 
 msgid ""
 "<html>Successfully used the Access Token ''{0}'' to<br>access the OSM server "
 "at ''{1}''.<br>You are accessing the OSM server as user ''{2}'' with id "
 "''{3}''.</html>"
 msgstr ""
+"<html>Sėkmingai panaudotas prieigos raktas „{0}“<br>kreipimuisi į OSM "
+"serverį „{1}“.<br>Kreipiatės į OSM serverį kaip naudotojas „{2}“ su ID "
+"„{3}“.</html>"
 
 msgid "Success"
 msgstr "Sėkmė"
@@ -10594,6 +10717,10 @@ msgid ""
 "not<br>be able to access any protected resource on this server using this "
 "token.</html>"
 msgstr ""
+"<html>Nepavyko prieiti prie OSM serverio „{0}“<br>su prieigos raktu "
+"„{1}“.<br>Serveris atmetė prieigos raktą kaip nesankcionuotą. "
+"Negalėsite<br>prieiti prie bet kokio apsaugoto resurso šiame serveryje su "
+"šiuo prieigos raktu.</html>"
 
 msgid "Test failed"
 msgstr "Testas nesėkmingas"
@@ -10605,9 +10732,14 @@ msgid ""
 "nevertheless use it<br>to upload data, upload GPS traces, and/or access "
 "other protected resources.</html>"
 msgstr ""
+"<html>Prieigos raktas „{1}“ yra žinomas OSM serveriui „{0}“.<br>Tačiau "
+"naudotojo duomenų gavimo testas su šiuo prieigos raktu "
+"nepavyko.<br>Priklausomai nuo to, kokios teisės buvo suteiktos šiam prieigos "
+"raktui, galėsite jį naudoti<br>duomenų, GPS pėdsakų išsiuntimui irba "
+"prieigai prie kitų apsaugotų resursų.</html>"
 
 msgid "Token allows restricted access"
-msgstr ""
+msgstr "Prieigos raktas leidžia ribotą prieigą"
 
 msgid ""
 "<html>Failed to retrieve information about the current user from the OSM "
@@ -10615,38 +10747,47 @@ msgid ""
 "Access Token, but<br>rather a problem with the server configuration. "
 "Carefully check the server<br>URL and your Internet connection.</html>"
 msgstr ""
+"<html>Nepavyko gauti informacijos apie dabartinį naudotoją iš OSM serverio "
+"„{0}“.<br>Tai greičiausiai ne prieigos rakto sukelta problema, "
+"bet<br>problema su serverio konfigūracija. Atidžiai patikrinkite "
+"serverio<br>URL ir interneto ryšį.</html>"
 
 msgid ""
 "<html>Failed to sign the request for the OSM server ''{0}'' with the token "
 "''{1}''.<br>The token ist probably invalid.</html>"
 msgstr ""
+"<html>Nepavyko pasirašyti užklausos OSM serveriui „{0}“ su prieigos raktu "
+"„{1}“.<br>Prieigos raktas greičiausiai neteisingas.</html>"
 
 msgid ""
 "<html>The test failed because the server responded with an internal "
 "error.<br>JOSM could not decide whether the token is valid. Please try again "
 "later.</html>"
 msgstr ""
+"<html>Patikrinimas nepavyko, nes serveris atsakė su vidine klaida.<br>JOSM "
+"negalėjo nustatyti, ar prieigos raktas galiojantis. Bandykite dar kartą "
+"vėliau.</html>"
 
 msgid "Retrieving user info..."
-msgstr ""
+msgstr "Gaunama vartotojo informacija..."
 
 msgid "Expert mode"
-msgstr ""
+msgstr "Eksperto režimas"
 
 msgid "Close the preferences dialog and discard preference updates"
-msgstr ""
+msgstr "Uždaryti nustatymų dialogą ir panaikinti visus pakeitimus"
 
 msgid "Save the preferences and close the dialog"
-msgstr ""
+msgstr "Išsaugoti nustatymus ir uždaryti langą"
 
 msgid "Download plugins"
 msgstr "Atsiųsti papildinius"
 
 msgid "You have to restart JOSM for some settings to take effect."
-msgstr ""
+msgstr "Turite paleisti JOSM iš naujo, kad įsigaliotų kai kurie nustatymai."
 
 msgid "Would you like to restart now?"
-msgstr ""
+msgstr "Ar norite paleisti iš naujo dabar?"
 
 msgid "Icon paths:"
 msgstr "Piktogramų keliai:"
@@ -10670,40 +10811,40 @@ msgid "Minimum JOSM Version:"
 msgstr "Minimali JOSM versija:"
 
 msgid "by {0}"
-msgstr ""
+msgstr "pagal {0}"
 
 msgid "Name (optional):"
-msgstr ""
+msgstr "Vardas (neprivalomas):"
 
 msgid "URL / File:"
 msgstr "URL / Failas:"
 
 msgid "active"
-msgstr ""
+msgstr "aktyvus"
 
 msgid "Map paint style file (*.xml, *.mapcss, *.zip)"
 msgstr "Žemėlapio paišymo stilius (*.xml, *.mapcss, *.zip)"
 
 msgid "Preset definition file (*.xml, *.zip)"
-msgstr ""
+msgstr "Šablono failas (*.xml, *.zip)"
 
 msgid "Tag checker rule (*.validator.mapcss, *.zip)"
 msgstr "Žymų tikrinimo taisyklė (*.validator.mapcss, *.zip)"
 
 msgid "Edit source entry:"
-msgstr ""
+msgstr "Keisti šaltinio įrašą:"
 
 msgid "Entry ''{0}'' requires JOSM Version {1}. (Currently running: {2})"
-msgstr ""
+msgstr "Įrašui „{0}“ reikia JOSM Versijos {1}. (Dabar paleista: {2})"
 
 msgid "Continue anyway"
 msgstr "Tęsti vis tiek"
 
 msgid "Ignore warning and install style anyway"
-msgstr ""
+msgstr "Ignoruoti įspėjimus ir įdiegiti stilių"
 
 msgid "Some entries have unmet dependencies:"
-msgstr ""
+msgstr "Kai kurie įrašai turi nenustatytų priklausomybių:"
 
 msgid "Reset"
 msgstr "Atstatyti"
@@ -10712,40 +10853,40 @@ msgid "Reset to default"
 msgstr "Atstatyti numatytąsias"
 
 msgid "Add a new icon path"
-msgstr ""
+msgstr "Pridėti naują piktogramų kelią"
 
 msgid "Remove the selected icon paths"
-msgstr ""
+msgstr "Pašalinti pažymėtus piktogramų kelius"
 
 msgid "Edit the selected icon path"
-msgstr ""
+msgstr "Keisti pažymėtą piktogramų kelią"
 
 msgid "Tooltip"
 msgstr "Paaiškinimas"
 
 msgid "Icon"
-msgstr "Ikona"
+msgstr "Piktograma"
 
 msgid "Remove from toolbar"
 msgstr "Pašalinti iš įrankių juostos"
 
 msgid "Configure toolbar"
-msgstr ""
+msgstr "Konfigūruoti įrankių juostą"
 
 msgid "Edit shortcut"
-msgstr ""
+msgstr "Keisti sparčiuosius klavišus"
 
 msgid "Do not hide toolbar and menu"
-msgstr ""
+msgstr "Neslėpti įrankių juostos ir menu"
 
 msgid "Actions"
 msgstr "Veiksmai"
 
 msgid "Toolbar customization"
-msgstr ""
+msgstr "Įrankių juostos pritaikymas"
 
 msgid "Customize the elements on the toolbar."
-msgstr ""
+msgstr "Pritaikyti įrankių juostos elementus."
 
 msgid "Separator"
 msgstr "Skirtukas"
@@ -10754,10 +10895,10 @@ msgid "Toolbar"
 msgstr "Įrankių juosta"
 
 msgid "Available"
-msgstr ""
+msgstr "Prieinami"
 
 msgid "Action parameters"
-msgstr ""
+msgstr "Veiksmo parametrai"
 
 msgid "Parameter name"
 msgstr "Parametro pavadinimas"
@@ -10766,19 +10907,19 @@ msgid "Parameter value"
 msgstr "Parametro reikšmė"
 
 msgid "Toolbar action without name: {0}"
-msgstr ""
+msgstr "Įrankių juostos veiksmas be pavadinimo: {0}"
 
 msgid "Strange toolbar value: {0}"
-msgstr ""
+msgstr "Nesuprantama įankių juostos reikšmė: {0}"
 
 msgid "Toolbar action {0} overwritten: {1} gets {2}"
-msgstr ""
+msgstr "Įrankių juostos veiksmas {0} perrašytas: {1} gauna {2}"
 
 msgid "Registered toolbar action without name: {0}"
-msgstr ""
+msgstr "Registruotas įrankių juostos veiksmas be pavadinimo: {0}"
 
 msgid "Registered toolbar action {0} overwritten: {1} gets {2}"
-msgstr ""
+msgstr "Registruotas įrankių juostos veiksmas {0}: {1} gauna {2}"
 
 msgid "Toolbar: {0}"
 msgstr "Įrankių juosta: {0}"
@@ -10787,7 +10928,7 @@ msgid "Advanced Preferences"
 msgstr "Sudėtingesni nustatymai"
 
 msgid "Setting Preference entries directly. Use with caution!"
-msgstr ""
+msgstr "Nustatymų įrašai keičiami tiesiogiai. Naudokite atsargiai!"
 
 msgid "Search: "
 msgstr "Ieškoti: "
@@ -10796,28 +10937,29 @@ msgid "Read from file"
 msgstr "Skaityti iš failo"
 
 msgid "Export selected items"
-msgstr ""
+msgstr "Eksportuoti pažymėtus"
 
 msgid "JOSM custom settings files (*.xml)"
-msgstr ""
+msgstr "JOSM savi nustatymų failai (*.xml)"
 
 msgid "Please select some preference keys not marked as default"
 msgstr ""
+"Prašome parinkti kelis nustatymų raktus, nepažymėtus kaip numatytuosius"
 
 msgid "Export preferences keys to JOSM customization file"
-msgstr ""
+msgstr "Eksportuoti nustatymų raktus į JOSM nustatymų failą"
 
 msgid "What to do with preference lists when this file is to be imported?"
-msgstr ""
+msgstr "Ką daryti su nustatymų sąrašais, kai šis failas bus importuojamas?"
 
 msgid "Append preferences from file to existing values"
-msgstr ""
+msgstr "Pridėti nustatymus iš failo prie esamų reikšmių"
 
 msgid "Replace existing values"
-msgstr ""
+msgstr "Pakeisti esamas reikšmes"
 
 msgid "Open JOSM customization file"
-msgstr ""
+msgstr "Atverti JOSM nustatymų failą"
 
 msgid "Import log"
 msgstr "Importo žurnalas"
@@ -10829,13 +10971,13 @@ msgid ""
 msgstr ""
 
 msgid "shortcut"
-msgstr ""
+msgstr "nuoroda"
 
 msgid "color"
 msgstr "spalva"
 
 msgid "toolbar"
-msgstr ""
+msgstr "įrankių juosta"
 
 msgid "imagery"
 msgstr "vaizdai"
@@ -10874,22 +11016,22 @@ msgid "Change list of lists setting"
 msgstr ""
 
 msgid "add entry"
-msgstr ""
+msgstr "pridėti įrašą"
 
 msgid "Remove the selected entry"
-msgstr ""
+msgstr "Pašalinti pažymėtą įrašą"
 
 msgid "Change list of maps setting"
-msgstr ""
+msgstr "Keisti žemėlapio nustatymų sąrašą"
 
 msgid "Entry {0}"
-msgstr ""
+msgstr "Įrašas {0}"
 
 msgid "Please select the row to edit."
-msgstr ""
+msgstr "Prašome parinkti eilutę redagavimui."
 
 msgid "Select Setting Type:"
-msgstr ""
+msgstr "Parinkite nustatymo tipą:"
 
 msgid "Simple"
 msgstr "Paprasta"
@@ -10910,10 +11052,10 @@ msgid "Please select the row to delete."
 msgstr "Pasirinkite eilutę šalinimui."
 
 msgid "Advanced Background: Changed"
-msgstr ""
+msgstr "Sudėtingesnis fonas: pakeistas"
 
 msgid "Advanced Background: NonDefault"
-msgstr ""
+msgstr "Sudėtingesnis fonas: ne numatytasis"
 
 msgid "Current value is default."
 msgstr "Dabartinė reikšmė yra numatytoji."
@@ -10923,9 +11065,10 @@ msgstr "Numatytoji reikšmė yra „{0}“."
 
 msgid "Default value currently unknown (setting has not been used yet)."
 msgstr ""
+"Numatytoji reikšmė šiuo metu nežinoma (nustatymas dar nebuvo panaudotas)."
 
 msgid "Change string setting"
-msgstr ""
+msgstr "Keisti eilutės nustatymą"
 
 msgid "Value: "
 msgstr "Reikšmė: "
@@ -10934,39 +11077,41 @@ msgid "Audio Settings"
 msgstr "Garso parametrai"
 
 msgid "Settings for the audio player and audio markers."
-msgstr ""
+msgstr "Garso grotuvo ir garso žymų nustatymai"
 
 msgid "Display the Audio menu."
 msgstr "Rodyti garso meniu."
 
 msgid "Label audio (and image and web) markers."
-msgstr ""
+msgstr "Žymėti garso (ir vaizdo, ir tinklo) žymeklius."
 
 msgid "Display live audio trace."
-msgstr ""
+msgstr "Rodyti gyvą garso pėdsaką."
 
 msgid "Explicit waypoints with valid timestamps."
-msgstr ""
+msgstr "Tikslūs kelio taškai su tinkamomis laiko žymomis."
 
 msgid "Explicit waypoints with time estimated from track position."
-msgstr ""
+msgstr "Tikslūs kelio taškai su laiku, paskaičiuotu pagal pėdsako poziciją."
 
 msgid "Named trackpoints."
-msgstr ""
+msgstr "Pėdsako taškai su pavadinimais."
 
 msgid "Modified times (time stamps) of audio files."
-msgstr ""
+msgstr "Modifikuoti garso failų laikai (laiko žymos)."
 
 msgid "Start of track (will always do this if no other markers available)."
-msgstr ""
+msgstr "Pėdsako pradžia (visada tai darys, jei nėra kitų žymeklių)."
 
 msgid "Show or hide the audio menu entry on the main menu bar."
-msgstr ""
+msgstr "Rodyti ar slėpti garso meniu įrašą pagrindinėje meniu juostoje."
 
 msgid ""
 "Display a moving icon representing the point on the synchronized track where "
 "the audio currently playing was recorded."
 msgstr ""
+"Rodyti judančią piktogramą, vaizduojančią sinchronizuojamo takelio tašką, "
+"kur dabar grojamas garsas buvo įrašytas."
 
 msgid ""
 "Put text labels against audio (and image and web) markers as well as their "
@@ -11021,7 +11166,7 @@ msgid "Color"
 msgstr "Spalva"
 
 msgid "Choose"
-msgstr ""
+msgstr "Pasirinkti"
 
 msgid "Choose a color for {0}"
 msgstr "Pasirinkite {0} spalvą"
@@ -11030,10 +11175,10 @@ msgid "Set to default"
 msgstr "Nustatyti į numatytąją"
 
 msgid "Set all to default"
-msgstr ""
+msgstr "Nustatyti visas į numatytąsias"
 
 msgid "Colors used by different objects in JOSM."
-msgstr ""
+msgstr "Skirtingų JOSM objektų naudojamos spalvos."
 
 msgid "Colors"
 msgstr "Spalvos"
@@ -11044,84 +11189,89 @@ msgstr "Rodymo nustatymai"
 msgid ""
 "Various settings that influence the visual representation of the whole "
 "program."
-msgstr ""
+msgstr "Įvairūs nustatymai, kurie įtakoja visos programos atvaizdavimą."
 
 msgid "Draw Direction Arrows"
 msgstr "Piešti krypties rodykles"
 
 msgid "Only on the head of a way."
-msgstr ""
+msgstr "Tik kelio viršūnėje."
 
 msgid "Draw oneway arrows."
-msgstr ""
+msgstr "Piešti vienpusio eismo rodykles."
 
 msgid "Draw segment order numbers"
-msgstr ""
+msgstr "Piešti segmentų tvarkos numerius"
 
 msgid "Draw boundaries of downloaded data"
-msgstr ""
+msgstr "Piešti atsiųstų duomenų ribas"
 
 msgid "Draw virtual nodes in select mode"
-msgstr ""
+msgstr "Piešti virtualius taškus pažymėjimo veiksenoje"
 
 msgid "Draw inactive layers in other color"
-msgstr ""
+msgstr "Piešti neaktyvius sluoksnius kita spalva"
 
 msgid "Display discardable keys"
-msgstr ""
+msgstr "Rodyti išmetamus raktus"
 
 msgid "Highlight target ways and nodes"
-msgstr ""
+msgstr "Paryškinti paskirties kelius ir taškus"
 
 msgid "Draw rubber-band helper line"
-msgstr ""
+msgstr "Piešti guminę pagalbinę liniją"
 
 msgid "Smooth map graphics (antialiasing)"
-msgstr ""
+msgstr "Lyginti žemėlapio grafiką (glodinimas)"
 
 msgid "Smooth map graphics in wireframe mode (antialiasing)"
-msgstr ""
+msgstr "Lyginti žemėlapio grafiką vielos veiksenoje (glodinimas)"
 
 msgid "Draw only outlines of areas"
-msgstr ""
+msgstr "Piešti tik plotų kontūrus"
 
 msgid "GPS Points"
-msgstr "GPS Taškai"
+msgstr "GPS taškai"
 
 msgid "Draw direction hints for way segments."
-msgstr ""
+msgstr "Piešti krypties žymes kelio segmentams."
 
 msgid "Draw arrows in the direction of oneways and other directed features."
-msgstr ""
+msgstr "Piešti rodykles vienpusio eismo ir kitų kryptinių objektų kryptimi."
 
 msgid "Draw the order numbers of all segments within their way."
-msgstr ""
+msgstr "Piešti visų segmentų tvarkos numerius jų kelyje."
 
 msgid "Draw the boundaries of data loaded from the server."
 msgstr ""
 
 msgid "Draw virtual nodes in select mode for easy way modification."
 msgstr ""
+"Piešti virtualius taškus pažymėjimo veiksenoje lengvam kelio modifikavimui."
 
 msgid "Draw the inactive data layers in a different color."
-msgstr ""
+msgstr "Piešti neaktyvius duomenų sluoksnius kita spalva."
 
 msgid ""
 "Apply antialiasing to the map view resulting in a smoother appearance."
-msgstr ""
+msgstr "Naudoti glodinimą žemėlapio rodinyje taip gaunant lygesnį vaizdą."
 
 msgid ""
 "Apply antialiasing to the map view in wireframe mode resulting in a smoother "
 "appearance."
 msgstr ""
+"Naudoti glodinimą žemėlapio rodinyje vielos veiksenoje taip gaunant lygesnį "
+"vaizdą."
 
 msgid "Hightlight target nodes and ways while drawing or selecting"
-msgstr ""
+msgstr "Paryškinti paskirties taškus ir kelius piešiant ar žymint"
 
 msgid ""
 "This option suppresses the filling of areas, overriding anything specified "
 "in the selected style."
 msgstr ""
+"Ši parinktis nerodo plotų užpildymo, nustelbia visus nurodymus pasirinktame "
+"stiliuje."
 
 msgid ""
 "Display keys which have been deemed uninteresting to the point that they can "
@@ -11129,19 +11279,19 @@ msgid ""
 msgstr ""
 
 msgid "Options that affect drawing performance"
-msgstr ""
+msgstr "Parinktys įtakojančios piešimo našumą"
 
 msgid "Segment drawing options"
-msgstr ""
+msgstr "Segmentų piešimo parinktys"
 
 msgid "Select and draw mode options"
-msgstr ""
+msgstr "Pažymėjimo ir piešimo veiksenos parinktys"
 
 msgid "Other options"
 msgstr "Kitos parinktys"
 
 msgid "OSM Data"
-msgstr "OSM Duomenys"
+msgstr "OSM duomenys"
 
 msgid "Auto"
 msgstr ""
@@ -11218,7 +11368,7 @@ msgid "Dynamic color range based on data limits"
 msgstr ""
 
 msgid "Smooth GPX graphics (antialiasing)"
-msgstr ""
+msgstr "Lyginti GPX grafiką (glodinimas)"
 
 msgid ""
 "Automatically make a marker layer from any waypoints when opening a GPX "
@@ -11248,7 +11398,7 @@ msgid ""
 msgstr ""
 
 msgid "Draw direction arrows for lines, connecting GPS points."
-msgstr ""
+msgstr "Piešti krypties rodykles linijoms, jungiančioms GPS taškus."
 
 msgid ""
 "Draw the direction arrows using table lookups instead of complex math."
@@ -11276,7 +11426,7 @@ msgstr ""
 
 msgid ""
 "Apply antialiasing to the GPX lines resulting in a smoother appearance."
-msgstr ""
+msgstr "Naudoti GPX linijų glodinimą taip gaunant lygesnį vaizdą."
 
 msgid ""
 "All points and track segments will have the same color. Can be customized in "
@@ -11284,10 +11434,10 @@ msgid ""
 msgstr ""
 
 msgid "Colors points and track segments by velocity."
-msgstr ""
+msgstr "Spalvina taškus ir pėdsako segmentus pagal greitį."
 
 msgid "Colors points and track segments by direction."
-msgstr ""
+msgstr "Spalvina taškus ir pėdsako segmentus pagal kryptį."
 
 msgid ""
 "Colors points and track segments by dilution of position (HDOP). Your "
@@ -11295,7 +11445,7 @@ msgid ""
 msgstr ""
 
 msgid "Colors points and track segments by its timestamp."
-msgstr ""
+msgstr "Spalvina taškus ir pėdsako segmentus pagal laiko žymą."
 
 msgid "Allows to tune the track coloring for different average speeds."
 msgstr ""
@@ -11304,7 +11454,7 @@ msgid "Track and Point Coloring"
 msgstr ""
 
 msgid "Colors points and track segments by data limits."
-msgstr ""
+msgstr "Spalvina taškus ir pėdsako segmentus pagal duomenų limitus."
 
 msgid "Waypoint labelling"
 msgstr ""
@@ -11322,28 +11472,29 @@ msgid "Incorrect audio waypoint label pattern: {0}"
 msgstr ""
 
 msgid "Show splash screen at startup"
-msgstr ""
+msgstr "Rodyti prisistatymo langą paleidžiant programą"
 
 msgid "Show object ID in selection lists"
-msgstr ""
+msgstr "Rodyti objekto ID pažymėjimo sąrašuose"
 
 msgid "Show localized name in selection lists"
-msgstr ""
+msgstr "Rodyti lokalizuotą vardą pažymėjimo sąrašuose"
 
 msgid "Modeless working (Potlatch style)"
-msgstr ""
+msgstr "Darbas be veiksenų (Potlatch stiliaus)"
 
 msgid "Dynamic buttons in side menus"
-msgstr ""
+msgstr "Dinaminiai mygtukai šoniniuose meniu"
 
 msgid "Display ISO dates"
-msgstr ""
+msgstr "Rodyti ISO datas"
 
 msgid "Use native file choosers (nicer, but do not support file filters)"
 msgstr ""
+"Naudoti savąjį failų parinkiklį (gražesnis, bet nepalaiko failų filtrų)"
 
 msgid "Show localized name in selection lists, if available"
-msgstr ""
+msgstr "Jei yra, rodyti lokalizuotą vardą pažymėjimo sąrašuose"
 
 msgid "Do not require to switch modes (potlatch style workflow)"
 msgstr ""
@@ -11351,19 +11502,23 @@ msgstr ""
 msgid ""
 "Display buttons in right side menus only when mouse is inside the element"
 msgstr ""
+"Rodyti mygtukus dešiniajame meniu tik kai žymeklis yra elemento viduje"
 
 msgid "ISO 8601"
-msgstr ""
+msgstr "ISO 8601"
 
 msgid ""
 "Format dates according to {0}. Today''s date will be displayed as {1} "
 "instead of {2}"
 msgstr ""
+"Formatuoti datas pagal {0}. Šiandienos data bus rodoma kaip {1} vietoje {2}"
 
 msgid ""
 "Use file choosers that behave more like native ones. They look nicer but do "
 "not support some features like file filters"
 msgstr ""
+"Naudoti failų parinkiklius, kurie elgiasi kaip savieji. Jie atrodo gražiau, "
+"bet nepalaiko kai kurių galimybių, pvz., failų filtrų"
 
 msgid "Look and Feel"
 msgstr "Išvaizda ir elgsena"
@@ -11372,7 +11527,7 @@ msgid "Language"
 msgstr "Kalba"
 
 msgid "Default (Auto determined)"
-msgstr ""
+msgstr "Numatytoji( Automatiškai nustatyta)"
 
 msgid "Add Imagery URL"
 msgstr "Pridėti vaizdų URL"
@@ -11557,6 +11712,9 @@ msgstr ""
 msgid "Maximum concurrent downloads: "
 msgstr ""
 
+msgid "Maximum concurrent downloads per host: "
+msgstr ""
+
 msgid "Maximum elements in disk cache: "
 msgstr ""
 
@@ -11581,72 +11739,78 @@ msgid "% of north:"
 msgstr ""
 
 msgid "Auto save enabled"
-msgstr ""
+msgstr "Automatinis įrašymas įjungtas"
 
 msgid "Auto save interval (seconds)"
-msgstr "Automatinio išsaugojimo intervalas (sekundėmis)"
+msgstr "Automatinio įrašymo intervalas (sekundėmis)"
 
 msgid "Default value: {0}"
 msgstr "Numatytoji reikšmė: {0}"
 
 msgid "Auto saved files per layer"
-msgstr ""
+msgstr "Automatiškai įrašytų failų skaičius sluoksniui"
 
 msgid ""
 "<i>(Autosave stores the changed data layers in periodic intervals. The "
 "backups are saved in JOSM''s preference folder. In case of a crash, JOSM "
 "tries to recover the unsaved changes on next start.)</i>"
 msgstr ""
+"<i>(Automatinis įrašymas periodiškai išsaugo pakeistus duomenų sluoksnius. "
+"Atsarginės kopijos yra saugomos JOSM nustatymų aplanke. Įvykus strigčiai "
+"JOSM bando atkurti neišsaugotus pakeitimus kito paleidimo metu.)</i>"
 
 msgid "Keep backup files when saving data layers"
-msgstr ""
+msgstr "Palikti atsargines kopijas saugant duomenų sluoksnius"
 
 msgid "When saving, keep backup files ending with a ~"
-msgstr ""
+msgstr "Palikti atsarginės kopijos failą su ~ pabaigoje, kai saugoma"
 
 msgid ""
 "<i>(JOSM can keep a backup file when saving data layers. It appends ''~'' to "
 "the file name and saves it in the same folder.)</i>"
 msgstr ""
+"<i>(JOSM gali palikti atsarginės kopijos failą, kai įrašomi duomenų "
+"sluoksniai. Failo vardo gale bus pridėta „~“, o failas įrašytas tame pačiame "
+"aplanke.)</i>"
 
 msgid "Notification at each save"
-msgstr ""
+msgstr "Pranešimas įrašant"
 
 msgid "When saving, display a small notification"
-msgstr ""
+msgstr "Rodyti nedidelį pranešimą, kai įrašoma"
 
 msgid "File backup"
-msgstr ""
+msgstr "Failų atsarginės kopijos"
 
 msgid "Configure whether to create backup files"
-msgstr ""
+msgstr "Konfigūruokite, ar kurti atsargines failų kopijas"
 
 msgid "Enable built-in icon defaults"
-msgstr ""
+msgstr "Įjungti numatytąsias įtaisytąsias piktogramas"
 
 msgid "Available styles:"
-msgstr ""
+msgstr "Prieinami stiliai:"
 
 msgid "Active styles:"
-msgstr ""
+msgstr "Aktyvūs stiliai:"
 
 msgid "Add a new style by entering filename or URL"
-msgstr ""
+msgstr "Pridėti naują stilių įvedant failą ar URL"
 
 msgid "New style entry:"
 msgstr ""
 
 msgid "Remove the selected styles from the list of active styles"
-msgstr ""
+msgstr "Išimti pažymėtus stilius iš aktyvių stilių sąrašo"
 
 msgid "Edit the filename or URL for the selected active style"
-msgstr ""
+msgstr "Redaguoti pažymėto aktyvaus stiliaus failą ar URL"
 
 msgid "Add the selected available styles to the list of active styles"
-msgstr ""
+msgstr "Pridėti pažymėtus prieinamus stilius į aktyvių stilių sąrašą"
 
 msgid "Reloads the list of available styles from ''{0}''"
-msgstr ""
+msgstr "Iš naujo įkelia prieinamų stilių sąrašą iš „{0}“"
 
 msgid "Loading style sources from ''{0}''"
 msgstr ""
@@ -11659,9 +11823,6 @@ msgstr ""
 msgid "Warning: illegal format of entry in style list ''{0}''. Got ''{1}''"
 msgstr ""
 
-msgid "JOSM default (XML; old version)"
-msgstr ""
-
 msgid "JOSM default (MapCSS)"
 msgstr ""
 
@@ -11679,7 +11840,7 @@ msgid "Map Settings"
 msgstr "Žemėlapio nustatymai"
 
 msgid "Settings for the map projection and data interpretation."
-msgstr ""
+msgstr "Žemėlapio projekcijos ir duomenų interpretavimo nustatymai."
 
 msgid "Could not read tagging preset source: {0}"
 msgstr "Nepavyko perskaityti žymėjimo ruošinių šaltinio: {0}"
@@ -11824,7 +11985,7 @@ msgid "Search:"
 msgstr "Paieška:"
 
 msgid "Enter a search expression"
-msgstr ""
+msgstr "Įveskite paieškos terminą"
 
 msgid "Plugin update policy"
 msgstr "Papildinių atnaujinimo politika"
@@ -11855,7 +12016,7 @@ msgid "Plugins up to date"
 msgstr "Papildiniai naujausių versijų"
 
 msgid "Configure sites..."
-msgstr ""
+msgstr "Konfigūruoti svetaines..."
 
 msgid "Configure the list of sites where plugins are downloaded from"
 msgstr "Konfigūruokite svetainių sąrašą iš kurių atsiunčiami papildiniai"
@@ -11911,7 +12072,7 @@ msgid "Projection configuration is valid."
 msgstr ""
 
 msgid "Validate"
-msgstr ""
+msgstr "Tikrinti"
 
 msgid "Parameter information..."
 msgstr "Parametrų informacija..."
@@ -11953,7 +12114,7 @@ msgid "NTv2 grid file"
 msgstr ""
 
 msgid "Built-in:"
-msgstr ""
+msgstr "Įtaisytoji:"
 
 msgid "Projection bounds (in degrees)"
 msgstr ""
@@ -12148,6 +12309,8 @@ msgid ""
 "<html>''{0}'' is not a valid OSM API URL.<br>Please check the spelling and "
 "validate again.</html>"
 msgstr ""
+"<html>„{0}“ nėra teisingas OSM API URL.<br>Patikrinkite rašybą ir tikrinkite "
+"dar kartą.</html>"
 
 msgid "Invalid API URL"
 msgstr "Neteisingas API URL"
@@ -12156,11 +12319,15 @@ msgid ""
 "<html>Failed to build URL ''{0}'' for validating the OSM API "
 "server.<br>Please check the spelling of ''{1}'' and validate again.</html>"
 msgstr ""
+"<html>Nepavyko sukurti URL „{0}“ OSM API serverio "
+"patikrinimui.<br>Patikrinkite „{1}“ rašybą ir tikrinkite dar kartą.</html>"
 
 msgid ""
 "<html>Failed to connect to the URL ''{0}''.<br>Please check the spelling of "
 "''{1}'' and your Internet connection and validate again.</html>"
 msgstr ""
+"<html>Nepavyko prisijungti prie URL „{0}“.<br>Patikrinkite „{1}“ rašybą, "
+"interneto ryšį ir tikrinkite dar kartą.</html>"
 
 msgid "Connection to API failed"
 msgstr "Prisijungimas prie API nepavyko"
@@ -12179,30 +12346,37 @@ msgid ""
 "is likely that ''{0}'' is not an OSM API server.<br>Please check the "
 "spelling of ''{0}'' and validate again.</html>"
 msgstr ""
+"<html>OSM API serveris „{0}“ negrąžino teisingo atsakymo.<br>Greičiausiai "
+"„{0}“ nėra OSM API serveris.<br>Patikrinkite „{0}“ rašybą ir tikrinkite dar "
+"kartą.</html>"
 
 msgid "Authentication"
-msgstr "Tapatybės nustatymas"
+msgstr "Tapatumo nustatymas"
 
 msgid "Configure your identity and how to authenticate at the OSM server"
 msgstr ""
 
 msgid "Use Basic Authentication"
-msgstr "Naudoti bazinį tapatybės nustatymą"
+msgstr "Naudoti bazinį tapatumo nustatymą"
 
 msgid ""
 "Select to use HTTP basic authentication with your OSM username and password"
 msgstr ""
+"Pasirinkite bazinio HTTP tapatumo nustatymo su savo OSM naudotojo vardu ir "
+"slaptažodžiu naudojimui"
 
 msgid "Use OAuth"
 msgstr "Naudoti OAuth"
 
 msgid "Select to use OAuth as authentication mechanism"
-msgstr ""
+msgstr "Pasirinkite OAuth kaip tapatumo nustatymo mechanizmo naudojimui"
 
 msgid ""
 "Unsupported value in preference ''{0}'', got ''{1}''. Using authentication "
 "method ''Basic Authentication''."
 msgstr ""
+"Nepalaikoma reikšmė nustatyme „{0}“, gauta „{1}“. Naudojamas tapatumo "
+"nustatymo metodas „Bazinis tapatumo nustatymas“."
 
 msgid "OSM username:"
 msgstr "OSM naudotojas:"
@@ -12220,56 +12394,67 @@ msgid "Failed to save OSM credentials to credential manager."
 msgstr ""
 
 msgid "Periodically check for new messages"
-msgstr ""
+msgstr "Periodiškai tikrinti, ar nėra naujų pranešimų"
 
 msgid "Check interval (minutes):"
 msgstr "Tikrinimo intervalas (minutėmis):"
 
 msgid "Max age for closed notes (days):"
-msgstr ""
+msgstr "Užvertų pastabų didžiausias amžius (dienomis):"
 
 msgid ""
 "Specifies the number of days a note needs to be closed to no longer be "
 "downloaded"
 msgstr ""
+"Nurodo dienų skaičių, kurį pastaba turi būti užverta, kad daugiau nebūtų "
+"atsiunčiama"
 
 msgid "Failed to retrieve OAuth Access Token from credential manager"
 msgstr ""
+"Nepavyko gauti OAuth prieigos rakto iš prisijungimo duomenų tvarkytuvės"
 
 msgid "Failed to store OAuth Access Token to credentials manager"
 msgstr ""
+"Nepavyko išsaugoti OAuth prieigos rakto į prisijungimo duomenų tvarkytuvę"
 
 msgid ""
 "You do not have an Access Token yet to access the OSM server using OAuth. "
 "Please authorize first."
 msgstr ""
+"Dar neturite prieigos rakto prieigai prie OSM serverio naudojant OAuth. Iš "
+"pradžių suteikite prieigą."
 
 msgid ""
 "You already have an Access Token to access the OSM server using OAuth."
 msgstr ""
+"Jau turite prieigos raktą prieigai prie OSM serverio naudojant OAuth."
 
 msgid "Save to preferences"
 msgstr "Išsaugoti į nustatymus"
 
 msgid "Click to step through the OAuth authorization process"
-msgstr ""
+msgstr "Spauskite OAuth prieigos suteikimo proceso įvykdymui"
 
 msgid "New Access Token"
-msgstr ""
+msgstr "Naujas prieigos raktas"
 
 msgid ""
 "Click to step through the OAuth authorization process and generate a new "
 "Access Token"
 msgstr ""
+"Spauskite OAuth prieigos suteikimo proceso įvykdymui ir naujo prieigos rakto "
+"sugeneravimui"
 
 msgid "Click test access to the OSM server with the current access token"
 msgstr ""
+"Spauskite prieigai su dabartiniu prieigos raktu prie OSM serverio patikrinti"
 
 msgid "<html>Use the default OSM server URL (<strong>{0}</strong>)</html>"
 msgstr ""
+"<html>Naudoti numatytąjį OSM serverio URL (<strong>{0}</strong>)</html>"
 
 msgid "Test the API URL"
-msgstr "Testuoti API URL"
+msgstr "Tikrinti API URL"
 
 msgid "The API URL is valid."
 msgstr "API URL teisingas."
@@ -12302,6 +12487,8 @@ msgstr "Prievadas:"
 msgid ""
 "Please enter a username and a password if your proxy requires authentication."
 msgstr ""
+"Įveskite naudotojo vardą ir slaptažodį, jei įgaliotasis serveris reikalauja "
+"tapatumo nustatymo."
 
 msgid "Password:"
 msgstr "Slaptažodis:"
@@ -12310,15 +12497,17 @@ msgid "No proxy"
 msgstr "Be įgaliotojo serverio"
 
 msgid "Use standard system settings"
-msgstr ""
+msgstr "Naudoti standartinius sistemos nustatymus"
 
 msgid ""
 "Use standard system settings (disabled. Start JOSM with <tt>-"
 "Djava.net.useSystemProxies=true</tt> to enable)"
 msgstr ""
+"Naudoti standartinius sistemos nustatymus (išjungta. Įjungimui paleiskite "
+"JOSM su <tt>-Djava.net.useSystemProxies=true</tt>)"
 
 msgid "Manually configure a HTTP proxy"
-msgstr ""
+msgstr "Rankiniu būdu konfigūruoti HTTP įgaliotąjį serverį"
 
 msgid "Use a SOCKS proxy"
 msgstr "Naudoti SOCKS įgaliotąjį serverį"
@@ -12332,34 +12521,34 @@ msgid "Connection Settings"
 msgstr "Ryšio nustatymai"
 
 msgid "Connection Settings for the OSM server."
-msgstr ""
+msgstr "Ryšio nustatymai OSM serveriui."
 
 msgid "Action"
 msgstr "Veiksmas"
 
 msgid "Shortcut"
-msgstr ""
+msgstr "Spartusis klavišas"
 
 msgid "Shortcut Background: User"
-msgstr ""
+msgstr "Sparčiojo klavišo fonas: naudotojo"
 
 msgid "Shortcut Background: Modified"
-msgstr ""
+msgstr "Sparčiojo klavišo fonas: modifikuotas"
 
 msgid "Use default"
-msgstr ""
+msgstr "Naudoti numatytąjį"
 
 msgid "Key:"
 msgstr "Klavišas:"
 
 msgid "Attention: Use real keyboard keys only!"
-msgstr ""
+msgstr "Dėmesio: naudokite tik tikrus klaviatūros klavišus!"
 
 msgid "Keyboard Shortcuts"
 msgstr "Spartieji klavišai"
 
 msgid "Changing keyboard shortcuts manually."
-msgstr ""
+msgstr "Sparčiųjų klavišų keitimas."
 
 msgid "Data validator"
 msgstr ""
@@ -12483,7 +12672,7 @@ msgid "Use error layer."
 msgstr "Naudoti klaidų sluoksnį."
 
 msgid "Use the error layer to display problematic elements."
-msgstr ""
+msgstr "Naudoti klaidų sluoksnį probleminiams elementams parodyti."
 
 msgid "Show informational level."
 msgstr "Rodyti informacinį sluoksnį."
@@ -12559,7 +12748,7 @@ msgid "Change Tags"
 msgstr ""
 
 msgid "Add or remove toolbar button"
-msgstr ""
+msgstr "Pridėti ar pašalinti įrankių juostos mygtuką"
 
 msgid "Unknown requisite: {0}"
 msgstr ""
@@ -12672,7 +12861,7 @@ msgid "Search in tags"
 msgstr ""
 
 msgid "Add toolbar button"
-msgstr ""
+msgstr "Pridėti įrankių juostos mygtuką"
 
 msgid ""
 "Adjustable {0} not registered yet. Cannot set participation in synchronized "
@@ -13037,13 +13226,13 @@ msgid ""
 msgstr ""
 
 msgid "Fetching a package of nodes from ''{0}''"
-msgstr ""
+msgstr "Ištraukiamas taškų rinkinys iš „{0}“"
 
 msgid "Fetching a package of ways from ''{0}''"
-msgstr ""
+msgstr "Ištraukiamas kelių rinkinys iš „{0}“"
 
 msgid "Fetching a package of relations from ''{0}''"
-msgstr ""
+msgstr "Ištraukiamas ryšių rinkinys iš „{0}“"
 
 msgid "Downloading {0} object from ''{1}''"
 msgid_plural "Downloading {0} objects from ''{1}''"
@@ -13060,13 +13249,13 @@ msgid "Downloading OSM data..."
 msgstr "Atsiunčiami OSM duomenys..."
 
 msgid "Fetching node with id {0} from ''{1}''"
-msgstr ""
+msgstr "Ištraukiamas taškas su id {0} iš „{1}“"
 
 msgid "Fetching way with id {0} from ''{1}''"
-msgstr ""
+msgstr "Ištraukiamas kelias su id {0} iš „{1}“"
 
 msgid "Fetching relation with id {0} from ''{1}''"
-msgstr ""
+msgstr "Ištraukiamas ryšys su id {0} iš „{1}“"
 
 msgid "Server replied with response code 404 for id {0}. Skipping."
 msgstr ""
@@ -13180,9 +13369,6 @@ msgstr ""
 msgid "Error parsing note response from server"
 msgstr ""
 
-msgid "Error encoding string: {0}"
-msgstr ""
-
 msgid "(Code={0})"
 msgstr "(Kodas={0})"
 
@@ -13254,7 +13440,7 @@ msgid "Parsing list of changesets..."
 msgstr "Nagrinėjamas pakeitimų sąrašas..."
 
 msgid "Failed to sign a HTTP connection with an OAuth Authentication header"
-msgstr ""
+msgstr "Nepavyko pasirašyti HTTP ryšio su OAuth tapatumo nustatymo antrašte"
 
 msgid "Unexpected value for preference ''{0}''. Got ''{1}''."
 msgstr ""
@@ -13266,6 +13452,8 @@ msgid ""
 "<html>An error occurred while restoring backup file.<br>Error "
 "is:<br>{0}</html>"
 msgstr ""
+"<html>Įvyko klaida atkuriant atsarginės kopijos "
+"failą.<br>Klaida:<br>{0}</html>"
 
 msgid "OSM Server Files gzip compressed"
 msgstr ""
@@ -13550,25 +13738,25 @@ msgstr "Sukurti naujus objektus"
 msgid "Read protocol version"
 msgstr ""
 
-msgid "Cannot start remotecontrol server on port {0}: {1}"
+msgid "Cannot start IPv4 remotecontrol server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Accepting connections on {0}:{1}"
+msgid "Cannot start IPv6 remotecontrol server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Server stopped."
+msgid "RemoteControl::Accepting remote connections on {0}:{1}"
 msgstr ""
 
-msgid "Cannot start remotecontrol https server on port {0}: {1}"
+msgid "RemoteControl::Server {0}:{1} stopped."
 msgstr ""
 
-msgid "Unable to initialize Remote Control HTTPS Server"
+msgid "Cannot start IPv4 remotecontrol https server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Accepting secure connections on {0}:{1}"
+msgid "Cannot start IPv6 remotecontrol https server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Server (https) stopped."
+msgid "RemoteControl::Accepting secure remote connections on {0}:{1}"
 msgstr ""
 
 msgid "Remote Control has been asked to create a new node."
@@ -14209,6 +14397,10 @@ msgid ""
 "configured.<br>Please open the Preferences Dialog and generate or enter an "
 "Access Token.</html>"
 msgstr ""
+"<html>Nepavyko nustatyti tapatumo OSM serveryje „{0}“.<br>Naudojate OAuth "
+"tapatumui nustatyti, bet dar nėra sukonfigūruoto<br>OAuth prieigos "
+"rakto.<br>Atverkite nustatymų dialogo langą ir sugeneruokite arba įveskite "
+"prieigos raktą.</html>"
 
 msgid ""
 "<strong>Failed</strong> to delete <strong>node {0}</strong>. It is still "
@@ -14320,12 +14512,18 @@ msgid ""
 "failed.<br>Please check the username and the password in the JOSM "
 "preferences.</html>"
 msgstr ""
+"<html>Tapatumo nustatymas OSM serveryje su naudotojo vardu „{0}“ "
+"nepavyko.<br>Patikrinkite naudotojo vardą ir slaptažodį JOSM "
+"nustatymuose.</html>"
 
 msgid ""
 "<html>Authentication at the OSM server with the OAuth token ''{0}'' "
 "failed.<br>Please launch the preferences dialog and retrieve another OAuth "
 "token.</html>"
 msgstr ""
+"<html>Tapatumo nustatymas OSM serveryje su OAuth prieigos raktu „{0}“ "
+"nepavyko.<br>Atverkite nustatymų dialogo langą ir gaukite kitą OAuth "
+"prieigos raktą.</html>"
 
 msgid ""
 "<html>Authorisation at the OSM server failed.<br>The server reported the "
@@ -14341,6 +14539,10 @@ msgid ""
 "resource<br>''{1}''.<br>Please launch the preferences dialog and retrieve "
 "another OAuth token.</html>"
 msgstr ""
+"<html>Prieigos suteikimas OSM serveryje su OAuth prieigos raktu „{0}““ "
+"nepavyko.<br>Prieigos raktui nėra suteikta prieiga kreiptis į apsaugotą "
+"resursą<br>„{1}“.<br>Atverkite nustatymų dialogo langą ir gaukite kitą OAuth "
+"prieigos raktą.</html>"
 
 msgid ""
 "<html>Communication with the OSM server ''{0}'' timed out. Please retry "
@@ -14559,6 +14761,7 @@ msgstr ""
 
 msgid "Silent shortcut conflict: ''{0}'' moved by ''{1}'' to ''{2}''."
 msgstr ""
+"Tylus sparčiųjų klavišų konfliktas: „{1}“ perkeltas iš „{0}“ į „{2}“."
 
 msgid "There was {0} tag found in the buffer, it is suspicious!"
 msgid_plural "There were {0} tags found in the buffer, it is suspicious!"
@@ -14653,10 +14856,10 @@ msgid ""
 msgstr ""
 
 msgid "Unexpected token ({0}) on position {1}"
-msgstr ""
+msgstr "Netikėta leksema ({0}) pozicijoje {1}"
 
 msgid "Unexpected token on position {0}. Expected {1}, found {2}"
-msgstr ""
+msgstr "Netikėta leksema pozicijoje {0}. Tikėtasi {1}, rasta {2}"
 
 msgid "Error while parsing search expression on position {0}"
 msgstr ""
@@ -14724,7 +14927,7 @@ msgstr ""
 
 msgctxt "Relation type"
 msgid "boundary"
-msgstr ""
+msgstr "riba"
 
 msgctxt "Relation type"
 msgid "bridge"
@@ -15032,28 +15235,28 @@ msgid "Waymarked Trails: Winter Sports"
 msgstr ""
 
 msgid "OSM Inspector: Geometry"
-msgstr ""
+msgstr "OSM tikrintuvė: geometrija"
 
 msgid "OSM Inspector: Tagging"
-msgstr ""
+msgstr "OSM tikrintuvė: žymėjimas"
 
 msgid "OSM Inspector: Places"
-msgstr ""
+msgstr "OSM tikrintuvė: vietos"
 
 msgid "OSM Inspector: Highways"
-msgstr ""
+msgstr "OSM tikrintuvė: keliai"
 
 msgid "OSM Inspector: Multipolygon"
-msgstr ""
+msgstr "OSM tikrintuvė: multipoligonas"
 
 msgid "OSM Inspector: Routing"
-msgstr ""
+msgstr "OSM tikrintuvė: maršruto parinkimas"
 
 msgid "OSM Inspector: Addresses"
-msgstr ""
+msgstr "OSM tikrintuvė: adresai"
 
 msgid "OSM Inspector: Boundaries (EU)"
-msgstr ""
+msgstr "OSM tikrintuvė: ribos (ES)"
 
 msgid "AGRI black-and-white 2.5m"
 msgstr ""
@@ -15300,9 +15503,6 @@ msgstr ""
 msgid "Metropole Ruhr: Luftbilder (10 cm)"
 msgstr ""
 
-msgid "SN Luftbilder, Straßennetz, Administrative Grenzen"
-msgstr ""
-
 msgid "Drone Imagery (Haiti)"
 msgstr ""
 
@@ -15421,7 +15621,7 @@ msgid "20cm ortho - Latvia - Coastline"
 msgstr ""
 
 msgid "ORT10LT (Lithuania)"
-msgstr ""
+msgstr "ORT10LT (Lietuva)"
 
 msgid "Luxembourg Inspire Ortho 2010"
 msgstr ""
@@ -16003,7 +16203,7 @@ msgid "Shows the elevation profile and some statistical data of a GPX track."
 msgstr ""
 
 msgid "Handling of French EPCIs (boundary=local_authority)"
-msgstr ""
+msgstr "Prancūzų EPCI (boundary=local_authority) apdorojimas"
 
 msgid "Use external scripts in JOSM"
 msgstr ""
@@ -16036,6 +16236,7 @@ msgstr "Leidžia išfiltruoti nereikalingus GPS pėdsakus"
 
 msgid "Visualizes routing information as a routing graph."
 msgstr ""
+"Vizualizuoja maršruto parinkimo informaciją kaip maršruto parinkimo grafą."
 
 msgid "Simple tool to tag house numbers."
 msgstr ""
@@ -16166,6 +16367,13 @@ msgid ""
 "Bring in errors from Osm Inspector and display it on the current JOSM "
 "bounding box"
 msgstr ""
+"Įtraukti klaidas iš OSM tikrintuvės ir parodyti dabartiniame JOSM "
+"apibrėžtame stačiakampyje"
+
+msgid ""
+"Recommends categories/tags on newly created OSM entities by analysing "
+"spatial entities into training features and using SVM classification"
+msgstr ""
 
 msgid "Import/export OSM data in PBF format"
 msgstr ""
@@ -16226,7 +16434,7 @@ msgid ""
 msgstr ""
 
 msgid "Provides routing capabilities."
-msgstr ""
+msgstr "Teikia maršruto parinkimo galimybes."
 
 msgid "Loads data from SDS"
 msgstr "Įkelti duomenis iš SDS"
@@ -16383,7 +16591,7 @@ msgid "sett"
 msgstr ""
 
 msgid "Smoothness"
-msgstr ""
+msgstr "Lygumas"
 
 msgid "excellent"
 msgstr ""
@@ -16677,7 +16885,7 @@ msgid "separated"
 msgstr ""
 
 msgid "isolated"
-msgstr ""
+msgstr "izoliuotas"
 
 msgid "Height (meters)"
 msgstr "Aukštis (metrais)"
@@ -17237,7 +17445,7 @@ msgid "Tertiary Link"
 msgstr "Rajoninio negrįsto kelio Rampa"
 
 msgid "Unclassified"
-msgstr "Nepriskirtas kelias"
+msgstr "Neklasifikuotas kelias"
 
 msgid "Passing Places"
 msgstr ""
@@ -17261,7 +17469,7 @@ msgstr ""
 
 msgctxt "Highway"
 msgid "unclassified"
-msgstr ""
+msgstr "neklasifikuotas"
 
 msgctxt "Highway"
 msgid "path"
@@ -17275,7 +17483,7 @@ msgid "Vehicle access"
 msgstr ""
 
 msgid "Oneway for bicycle"
-msgstr ""
+msgstr "Vienpusis dviračiams"
 
 msgid "Living Street"
 msgstr ""
@@ -17643,7 +17851,7 @@ msgid "Cycleway right"
 msgstr ""
 
 msgid "Oneway (bicycle)"
-msgstr ""
+msgstr "Vienpusis (dviratis)"
 
 msgid "Edit Highway Attributes:"
 msgstr ""
@@ -18445,7 +18653,7 @@ msgid "ferry"
 msgstr "keltas"
 
 msgid "Capacity (overall)"
-msgstr "Vietų skaičius (viso)"
+msgstr "Vietų skaičius (visas)"
 
 msgid "Spaces for Disabled"
 msgstr "Vietos Neįgaliesiems"
@@ -19833,7 +20041,7 @@ msgid "Shows humidity"
 msgstr ""
 
 msgid "Recycling"
-msgstr ""
+msgstr "Rūšiavimas"
 
 msgid "Batteries"
 msgstr "Baterijos"
@@ -19848,7 +20056,7 @@ msgid "Paper"
 msgstr "Popierius"
 
 msgid "Scrap Metal"
-msgstr "Metalo Laužas"
+msgstr "Metalo laužas"
 
 msgid "container"
 msgstr ""
@@ -19868,7 +20076,10 @@ msgstr ""
 msgid "Suction pumpout"
 msgstr ""
 
-msgid "Gravity dump station"
+msgid "Gravity drain for hose"
+msgstr ""
+
+msgid "Casette or Elsan Disposal"
 msgstr ""
 
 msgid "Operation times"
@@ -20372,6 +20583,10 @@ msgid "shed"
 msgstr "pašiūrė"
 
 msgctxt "building"
+msgid "storage_tank"
+msgstr ""
+
+msgctxt "building"
 msgid "cowshed"
 msgstr "tvartas"
 
@@ -20484,6 +20699,41 @@ msgstr ""
 msgid "Gasometer"
 msgstr ""
 
+msgid "Storage Tank"
+msgstr ""
+
+msgctxt "content"
+msgid "fuel"
+msgstr ""
+
+msgctxt "content"
+msgid "manure"
+msgstr ""
+
+msgctxt "content"
+msgid "oil"
+msgstr ""
+
+msgctxt "content"
+msgid "sewage"
+msgstr ""
+
+msgctxt "content"
+msgid "silage"
+msgstr ""
+
+msgctxt "content"
+msgid "slurry"
+msgstr ""
+
+msgctxt "content"
+msgid "water"
+msgstr ""
+
+msgctxt "content"
+msgid "wine"
+msgstr ""
+
 msgid "Bunker Silo"
 msgstr ""
 
@@ -21589,7 +21839,7 @@ msgid "wayside_shrine"
 msgstr ""
 
 msgid "Boundary Stone"
-msgstr ""
+msgstr "Ribos akmuo"
 
 msgid "Shops"
 msgstr "Parduotuvės"
@@ -22094,7 +22344,7 @@ msgid "Hamlet"
 msgstr ""
 
 msgid "Isolated Dwelling"
-msgstr ""
+msgstr "Vienkiemis"
 
 msgid "Suburb"
 msgstr ""
@@ -22109,7 +22359,7 @@ msgid "A farm within a bigger settlement"
 msgstr "Ferma didesnėje gyvenvietėje"
 
 msgid "(please use isolated_dwelling for an isolated farm)"
-msgstr ""
+msgstr "(naudokite isolated_dwelling izoliuotai fermai)"
 
 msgid "Locality"
 msgstr ""
@@ -22722,10 +22972,10 @@ msgid "inner segment"
 msgstr ""
 
 msgid "Boundary"
-msgstr ""
+msgstr "Riba"
 
 msgid "Boundary type"
-msgstr ""
+msgstr "Ribos tipas"
 
 msgid "administrative"
 msgstr ""
@@ -23238,7 +23488,7 @@ msgid "wrong crossing tag on a way"
 msgstr ""
 
 msgid "Unnamed unclassified highway"
-msgstr ""
+msgstr "Bevardis neklasifikuotas kelias"
 
 msgid "highway without a reference"
 msgstr ""
@@ -23389,6 +23639,8 @@ msgid ""
 "No command has been found. Would you like to download and install default "
 "commands now?"
 msgstr ""
+"Nerasta jokių komandų. Ar norite atsiųsti ir įdiegti numatytąsias komandas "
+"dabar?"
 
 msgid "No command found"
 msgstr ""
@@ -23479,7 +23731,7 @@ msgid "Invalid URL {0}"
 msgstr ""
 
 msgid "Error fetching URL {0}"
-msgstr ""
+msgstr "Klaida ištraukiant iš URL {0}"
 
 msgid "Error parsing data from URL {0}"
 msgstr ""
@@ -23937,6 +24189,33 @@ msgstr ""
 msgid "Could not read NanoLog file:"
 msgstr ""
 
+msgid "OSM Recommendation"
+msgstr ""
+
+msgid "Recommend categories to your newly created instances."
+msgstr ""
+
+msgid "Training process configuration"
+msgstr ""
+
+msgid "Model Settings"
+msgstr ""
+
+msgid "Select objects or create new objects and get recommendation."
+msgstr ""
+
+msgid "Add Recommendation"
+msgstr ""
+
+msgid "Add a recommended key/value pair to your object"
+msgstr ""
+
+msgid "Train a Model"
+msgstr ""
+
+msgid "Start the training engine!"
+msgstr ""
+
 msgid "Edit opening hours"
 msgstr ""
 
@@ -23974,7 +24253,7 @@ msgid "open end"
 msgstr ""
 
 msgid "Import Osm Inspector Bugs..."
-msgstr ""
+msgstr "Importuoti OSM tikrintuvės klaidas..."
 
 msgid "OsmInspector"
 msgstr ""
@@ -23986,7 +24265,7 @@ msgid "OsmBugInfo"
 msgstr ""
 
 msgid "Open a OSM Inspector selection list window."
-msgstr ""
+msgstr "Atverti OSM tikrintuvės pažymėjimo sąrašo langą."
 
 msgid "Current Selected Bug Info"
 msgstr ""
@@ -23998,10 +24277,10 @@ msgid "Next OSMI bug"
 msgstr ""
 
 msgid "Osm Inspector Bugs"
-msgstr ""
+msgstr "OSM tikrintuvės klaidos"
 
 msgid "OSM Inspector Bugs"
-msgstr ""
+msgstr "OSM tikrintuvės klaidos"
 
 msgid "Selected Bug Info"
 msgstr ""
@@ -24322,6 +24601,18 @@ msgid ""
 "</html>\n"
 "\n"
 msgstr ""
+"<html>\n"
+"<div style=\"font-family:sans-serif\">\n"
+"<ul>\n"
+"  <li><b>Lygiuoti segmentus.</b> Spauskite <b><i><span "
+"style=\"color:green\">{0}</span></i></b>. Taip pat komandą rasite "
+"<b>Įrankių</b>\n"
+" meniu, arba galite pridėti veiksmą <b>įrankių juostoje</b>.\n"
+"  </li>\n"
+"</ul>\n"
+"</div>\n"
+"</html>\n"
+"\n"
 
 msgid ""
 "<html>\n"
@@ -24670,7 +24961,7 @@ msgid "Set background transparent."
 msgstr ""
 
 msgid "Draw boundaries of downloaded data."
-msgstr ""
+msgstr "Piešti atsiųstų duomenų ribas."
 
 msgid "Disable image cropping during georeferencing."
 msgstr ""
@@ -24884,10 +25175,10 @@ msgid "Extract SVG ViewBox..."
 msgstr ""
 
 msgid "Extract best fitting boundary..."
-msgstr ""
+msgstr "Išrinkti geriausiai tinkančią ribą..."
 
 msgid "Create boundary"
-msgstr ""
+msgstr "Sukurti ribą"
 
 msgid "Contacting cadastre WMS ..."
 msgstr ""
@@ -24906,7 +25197,7 @@ msgid ""
 msgstr ""
 
 msgid "Extract commune boundary"
-msgstr ""
+msgstr "Išrinkti komunos ribą"
 
 msgid "Only on vectorized layers"
 msgstr ""
@@ -25131,7 +25422,7 @@ msgid "Use the selected scheme from the list."
 msgstr ""
 
 msgid "Use the current colors as a new color scheme."
-msgstr ""
+msgstr "Naudoti dabartines spalvas kaip naują spalvų schemą."
 
 msgid "Delete the selected scheme from the list."
 msgstr ""
@@ -25669,7 +25960,7 @@ msgid "File not found:\n"
 msgstr ""
 
 msgid "Couldn''t find built-in ruleset {0}"
-msgstr ""
+msgstr "Nepavyko rasti įtaisytųjų taisyklių {0}"
 
 msgid "height (m)"
 msgstr "aukštis (m)"
@@ -25777,12 +26068,14 @@ msgstr ""
 
 msgid "Settings for the Graphview plugin that visualizes routing graphs."
 msgstr ""
+"GraphView papildinio, kuris vizualizuoja maršruto parinkimo grafus, "
+"nustatymai."
 
 msgid "Ruleset"
 msgstr ""
 
 msgid "Use built-in rulesets"
-msgstr ""
+msgstr "Naudoti įtaisytąsias taisykles"
 
 msgid "External ruleset directory:"
 msgstr ""
@@ -25800,7 +26093,7 @@ msgid "Visualization"
 msgstr ""
 
 msgid "Draw directions separately"
-msgstr ""
+msgstr "Piešti kryptis atskirai"
 
 msgid "Node color"
 msgstr ""
@@ -25841,7 +26134,7 @@ msgid "Choose arrowhead fill color"
 msgstr ""
 
 msgid "Routing graph calculated by the GraphView plugin"
-msgstr ""
+msgstr "Maršruto parinkimo grafas apskaičiuotas GraphView papildinio"
 
 msgid "GraphView layer is not mergable"
 msgstr ""
@@ -26729,10 +27022,10 @@ msgid "JOSM/Proxy/Password"
 msgstr ""
 
 msgid "JOSM/OAuth/OSM API/Key"
-msgstr ""
+msgstr "JOSM/OAuth/OSM API/raktas"
 
 msgid "JOSM/OAuth/OSM API/Secret"
-msgstr ""
+msgstr "JOSM/OAuth/OSM API/paslaptis"
 
 msgid "Native Password Manager Plugin"
 msgstr ""
@@ -26753,10 +27046,10 @@ msgid "proxy password"
 msgstr ""
 
 msgid "oauth key"
-msgstr ""
+msgstr "oauth raktas"
 
 msgid "oauth secret"
-msgstr ""
+msgstr "oauth paslaptis"
 
 msgid ""
 "<br><strong>Warning:</strong> There may be sensitive data left in your "
@@ -27503,7 +27796,7 @@ msgid "settings"
 msgstr "nustatymai"
 
 msgid "keep backup files"
-msgstr ""
+msgstr "laikyti atsarginių kopijų failus"
 
 msgid "change file modification time:"
 msgstr ""
@@ -27536,13 +27829,13 @@ msgid "Could not rename file {0} to {1}!"
 msgstr ""
 
 msgid "<html><h3>There are old backup files in the image directory!</h3>"
-msgstr ""
+msgstr "<html><h3>Yra senų atsarginių kopijų failų paveikslų aplanke!</h3>"
 
 msgid "Override old backup files?"
-msgstr ""
+msgstr "Nustelbti senus atsarginių kopijų failus?"
 
 msgid "Keep old backups and continue"
-msgstr ""
+msgstr "Palikti senus atsarginių kopijų failus ir tęsti"
 
 msgid "Override"
 msgstr ""
@@ -28139,7 +28432,7 @@ msgid "Change relation member roles to {0}"
 msgstr ""
 
 msgid "Create administrative boundary relations"
-msgstr ""
+msgstr "Kurti administracinių ribų ryšius"
 
 msgid "Add tags boundary and admin_level to boundary relation ways"
 msgstr "Pridėti boundary ir admin_level žymas ribų rišių keliams"
@@ -28326,7 +28619,7 @@ msgid "Confirm"
 msgstr "Patvirtinti"
 
 msgid "Fetching missing primitives"
-msgstr ""
+msgstr "Ištraukiami trūkstami primityvai"
 
 msgid "Downloading changeset"
 msgstr "Atsiunčiamas pakeitimas"
@@ -28427,13 +28720,13 @@ msgid "Remove relation ''{0}'' at position {1} from relation ''{2}''"
 msgstr ""
 
 msgid "routing active route"
-msgstr ""
+msgstr "maršruto parinkimo aktyvus maršrutas"
 
 msgid "routing inactive route"
-msgstr ""
+msgstr "maršruto parinkimo neaktyvus maršrutas"
 
 msgid "Routing"
-msgstr ""
+msgstr "Maršruto parinkimas"
 
 msgid "Click to add destination."
 msgstr ""
@@ -28445,10 +28738,10 @@ msgid "Click to remove destination"
 msgstr ""
 
 msgid "Open a list of routing nodes"
-msgstr ""
+msgstr "Atverti maršruto parinkimo taškų sąrašą"
 
 msgid "Add routing layer"
-msgstr ""
+msgstr "Pridėti maršruto parinkimo sluoksnį"
 
 msgid "Criteria"
 msgstr ""
@@ -28460,7 +28753,7 @@ msgid "Fastest"
 msgstr ""
 
 msgid "Ignore oneways"
-msgstr ""
+msgstr "Ignoruoti vienpusius"
 
 msgid "Reverse route"
 msgstr ""
@@ -28472,10 +28765,10 @@ msgid "Reconstruct Graph"
 msgstr ""
 
 msgid "Routing Plugin Preferences"
-msgstr ""
+msgstr "Maršruto parinkimo papildinio nuostatos"
 
 msgid "Configure routing preferences."
-msgstr ""
+msgstr "Konfigūruoti maršruto parinkimo nuostatas."
 
 msgid "Speed (Km/h)"
 msgstr "Greitis (Km/h)"
@@ -28680,7 +28973,7 @@ msgid "SUMO Export"
 msgstr ""
 
 msgid "AutoSave LiveData"
-msgstr ""
+msgstr "Automatiškai įrašyti LiveData"
 
 msgid "Save captured data to file every minute."
 msgstr ""
@@ -29035,7 +29328,7 @@ msgid "Check"
 msgstr ""
 
 msgid "Check all available signatures for selected object."
-msgstr ""
+msgstr "Tikrinti visus prieinamus pažymėto objekto parašus."
 
 msgid "Sign"
 msgstr ""
@@ -29044,7 +29337,7 @@ msgid "Digital sign selected Tags, if you believe they are correct."
 msgstr ""
 
 msgid "Show all available signatures for selected attribute."
-msgstr ""
+msgstr "Rodyti visus prieinamus pažymėto atributo parašus."
 
 msgid "Show deleted tags and notes if they were signed before"
 msgstr ""
@@ -29053,6 +29346,8 @@ msgid ""
 "Use default (and maybe existing) GnuPG directory ({0}) to store new keys and "
 "configs."
 msgstr ""
+"Naudoti numatytąjį (ir galbūt egzistuojantį) GnuPG aplanką ({0}) naujiems "
+"raktams ir konfigūracijai saugoti."
 
 msgid "Use separate GnuPG directory ({0}) to store new keys and configs."
 msgstr ""
@@ -30168,10 +30463,10 @@ msgid ""
 msgstr ""
 
 msgid "Area boundary [testing]"
-msgstr ""
+msgstr "Ploto riba [testuojama]"
 
 msgid "Select relation or all ways that forms area boundary"
-msgstr ""
+msgstr "Pažymėkite ryšį arba visus kelius sudarančius ploto ribą"
 
 msgid ""
 "Nothing found. Please select way that is a part of some polygon formed by "
@@ -30311,7 +30606,7 @@ msgid ""
 msgstr ""
 
 msgid "Jump to"
-msgstr ""
+msgstr "Peršokti į"
 
 msgid "Jump to GPS time"
 msgstr ""
@@ -30320,7 +30615,7 @@ msgid "Shows current position in the video"
 msgstr ""
 
 msgid "Sync"
-msgstr ""
+msgstr "Sinchronizacija"
 
 msgid "Unable to find JNA Java library!"
 msgstr ""
@@ -30418,6 +30713,8 @@ msgstr ""
 msgid ""
 "Fetches interwiki links from Wikipedia in order to add several name tags"
 msgstr ""
+"Ištraukiami interwiki ryšiai iš Wikipedijos, kad galima būtų pridėti kelias "
+"pavadinimų žymas"
 
 msgid ""
 "Copies the {0} template to the system clipboard instantiated with the "
@@ -30428,7 +30725,7 @@ msgid "Copy {0} template"
 msgstr ""
 
 msgid "Fetch Wikipedia articles with coordinates"
-msgstr ""
+msgstr "Ištraukti Wikipedijos straipsnius su koordinatėmis"
 
 msgid ""
 "Double click on item to search for object with article name (and center "
@@ -30499,6 +30796,3 @@ msgstr ""
 
 msgid "Drive a race car on this layer"
 msgstr ""
-
-#~ msgid "Note comment background"
-#~ msgstr "Pastabos komentaro fonas"
diff --git a/i18n/po/lv.po b/i18n/po/lv.po
index 18cf9a5..46474c6 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-04-27 03:33+0200\n"
+"POT-Creation-Date: 2015-05-12 03:33+0200\n"
 "PO-Revision-Date: 2012-10-03 22:16+0000\n"
 "Last-Translator: Dirk Stöcker <launchpad at dstoecker.de>\n"
 "Language-Team: Latvian <lv at li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2;\n"
-"X-Launchpad-Export-Date: 2015-04-27 04:48+0000\n"
-"X-Generator: Launchpad (build 17430)\n"
+"X-Launchpad-Export-Date: 2015-05-12 04:48+0000\n"
+"X-Generator: Launchpad (build 17487)\n"
 "Language: lv\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -1479,6 +1479,9 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Some irrelevant nodes have been removed from the selection"
+msgstr ""
+
 msgid "Undo"
 msgstr "Atsaukt"
 
@@ -3076,6 +3079,11 @@ msgstr "Slānis: {0}"
 msgid "Failed to persist preferences to ''{0}''"
 msgstr ""
 
+msgid ""
+"Try enabling IPv6 network, prefering IPv6 over IPv4 (only works on early "
+"startup)."
+msgstr ""
+
 msgid " (at line {0}, column {1})"
 msgstr ""
 
@@ -3704,6 +3712,15 @@ msgstr ""
 msgid "Number of lane dependent values inconsistent in backward direction"
 msgstr ""
 
+msgid "Long segments"
+msgstr ""
+
+msgid "This tests for long way segments, which are usually errors."
+msgstr ""
+
+msgid "Very long segment of {0} kilometers"
+msgstr ""
+
 msgid "Tag checker (MapCSS based)"
 msgstr ""
 
@@ -4532,6 +4549,18 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
+msgid ""
+"Detected useable IPv6 network, prefering IPv6 over IPv4 after next restart."
+msgstr ""
+
+msgid "Detected useable IPv6 network, prefering IPv6 over IPv4."
+msgstr ""
+
+msgid ""
+"Detected no useable IPv6 network, prefering IPv4 over IPv6 after next "
+"restart."
+msgstr ""
+
 msgid "Unsaved osm data"
 msgstr ""
 
@@ -6210,14 +6239,6 @@ msgstr ""
 msgid "Only launching info browsers for the first {0} of {1} selected users"
 msgstr ""
 
-msgid ""
-"<html>Failed to create an URL because the encoding ''{0}''<br>was missing on "
-"this system.</html>"
-msgstr ""
-
-msgid "Missing encoding"
-msgstr ""
-
 msgid "Author"
 msgstr ""
 
@@ -10672,6 +10693,9 @@ msgstr ""
 msgid "Maximum concurrent downloads: "
 msgstr ""
 
+msgid "Maximum concurrent downloads per host: "
+msgstr ""
+
 msgid "Maximum elements in disk cache: "
 msgstr ""
 
@@ -10774,9 +10798,6 @@ msgstr ""
 msgid "Warning: illegal format of entry in style list ''{0}''. Got ''{1}''"
 msgstr ""
 
-msgid "JOSM default (XML; old version)"
-msgstr ""
-
 msgid "JOSM default (MapCSS)"
 msgstr ""
 
@@ -12242,9 +12263,6 @@ msgstr ""
 msgid "Error parsing note response from server"
 msgstr ""
 
-msgid "Error encoding string: {0}"
-msgstr ""
-
 msgid "(Code={0})"
 msgstr ""
 
@@ -12602,25 +12620,25 @@ msgstr ""
 msgid "Read protocol version"
 msgstr ""
 
-msgid "Cannot start remotecontrol server on port {0}: {1}"
+msgid "Cannot start IPv4 remotecontrol server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Accepting connections on {0}:{1}"
+msgid "Cannot start IPv6 remotecontrol server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Server stopped."
+msgid "RemoteControl::Accepting remote connections on {0}:{1}"
 msgstr ""
 
-msgid "Cannot start remotecontrol https server on port {0}: {1}"
+msgid "RemoteControl::Server {0}:{1} stopped."
 msgstr ""
 
-msgid "Unable to initialize Remote Control HTTPS Server"
+msgid "Cannot start IPv4 remotecontrol https server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Accepting secure connections on {0}:{1}"
+msgid "Cannot start IPv6 remotecontrol https server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Server (https) stopped."
+msgid "RemoteControl::Accepting secure remote connections on {0}:{1}"
 msgstr ""
 
 msgid "Remote Control has been asked to create a new node."
@@ -14288,9 +14306,6 @@ msgstr ""
 msgid "Metropole Ruhr: Luftbilder (10 cm)"
 msgstr ""
 
-msgid "SN Luftbilder, Straßennetz, Administrative Grenzen"
-msgstr ""
-
 msgid "Drone Imagery (Haiti)"
 msgstr ""
 
@@ -15151,6 +15166,11 @@ msgid ""
 "bounding box"
 msgstr ""
 
+msgid ""
+"Recommends categories/tags on newly created OSM entities by analysing "
+"spatial entities into training features and using SVM classification"
+msgstr ""
+
 msgid "Import/export OSM data in PBF format"
 msgstr ""
 
@@ -18851,7 +18871,10 @@ msgstr ""
 msgid "Suction pumpout"
 msgstr ""
 
-msgid "Gravity dump station"
+msgid "Gravity drain for hose"
+msgstr ""
+
+msgid "Casette or Elsan Disposal"
 msgstr ""
 
 msgid "Operation times"
@@ -19355,6 +19378,10 @@ msgid "shed"
 msgstr ""
 
 msgctxt "building"
+msgid "storage_tank"
+msgstr ""
+
+msgctxt "building"
 msgid "cowshed"
 msgstr ""
 
@@ -19467,6 +19494,41 @@ msgstr ""
 msgid "Gasometer"
 msgstr ""
 
+msgid "Storage Tank"
+msgstr ""
+
+msgctxt "content"
+msgid "fuel"
+msgstr ""
+
+msgctxt "content"
+msgid "manure"
+msgstr ""
+
+msgctxt "content"
+msgid "oil"
+msgstr ""
+
+msgctxt "content"
+msgid "sewage"
+msgstr ""
+
+msgctxt "content"
+msgid "silage"
+msgstr ""
+
+msgctxt "content"
+msgid "slurry"
+msgstr ""
+
+msgctxt "content"
+msgid "water"
+msgstr ""
+
+msgctxt "content"
+msgid "wine"
+msgstr ""
+
 msgid "Bunker Silo"
 msgstr ""
 
@@ -22918,6 +22980,33 @@ msgstr ""
 msgid "Could not read NanoLog file:"
 msgstr ""
 
+msgid "OSM Recommendation"
+msgstr ""
+
+msgid "Recommend categories to your newly created instances."
+msgstr ""
+
+msgid "Training process configuration"
+msgstr ""
+
+msgid "Model Settings"
+msgstr ""
+
+msgid "Select objects or create new objects and get recommendation."
+msgstr ""
+
+msgid "Add Recommendation"
+msgstr ""
+
+msgid "Add a recommended key/value pair to your object"
+msgstr ""
+
+msgid "Train a Model"
+msgstr ""
+
+msgid "Start the training engine!"
+msgstr ""
+
 msgid "Edit opening hours"
 msgstr ""
 
diff --git a/i18n/po/mk.po b/i18n/po/mk.po
index 8d7157a..c037638 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-04-27 03:33+0200\n"
+"POT-Creation-Date: 2015-05-12 03:33+0200\n"
 "PO-Revision-Date: 2013-05-11 04:37+0000\n"
 "Last-Translator: Bojan Jankuloski <bojan.jankuloski at gmail.com>\n"
 "Language-Team: Macedonian <mk at li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : 1;\n"
-"X-Launchpad-Export-Date: 2015-04-27 04:49+0000\n"
-"X-Generator: Launchpad (build 17430)\n"
+"X-Launchpad-Export-Date: 2015-05-12 04:49+0000\n"
+"X-Generator: Launchpad (build 17487)\n"
 "Language: mk\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -1471,6 +1471,9 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Some irrelevant nodes have been removed from the selection"
+msgstr ""
+
 msgid "Undo"
 msgstr ""
 
@@ -3068,6 +3071,11 @@ msgstr ""
 msgid "Failed to persist preferences to ''{0}''"
 msgstr ""
 
+msgid ""
+"Try enabling IPv6 network, prefering IPv6 over IPv4 (only works on early "
+"startup)."
+msgstr ""
+
 msgid " (at line {0}, column {1})"
 msgstr ""
 
@@ -3696,6 +3704,15 @@ msgstr ""
 msgid "Number of lane dependent values inconsistent in backward direction"
 msgstr ""
 
+msgid "Long segments"
+msgstr ""
+
+msgid "This tests for long way segments, which are usually errors."
+msgstr ""
+
+msgid "Very long segment of {0} kilometers"
+msgstr ""
+
 msgid "Tag checker (MapCSS based)"
 msgstr ""
 
@@ -4525,6 +4542,18 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
+msgid ""
+"Detected useable IPv6 network, prefering IPv6 over IPv4 after next restart."
+msgstr ""
+
+msgid "Detected useable IPv6 network, prefering IPv6 over IPv4."
+msgstr ""
+
+msgid ""
+"Detected no useable IPv6 network, prefering IPv4 over IPv6 after next "
+"restart."
+msgstr ""
+
 msgid "Unsaved osm data"
 msgstr ""
 
@@ -6203,14 +6232,6 @@ msgstr ""
 msgid "Only launching info browsers for the first {0} of {1} selected users"
 msgstr ""
 
-msgid ""
-"<html>Failed to create an URL because the encoding ''{0}''<br>was missing on "
-"this system.</html>"
-msgstr ""
-
-msgid "Missing encoding"
-msgstr ""
-
 msgid "Author"
 msgstr ""
 
@@ -10665,6 +10686,9 @@ msgstr ""
 msgid "Maximum concurrent downloads: "
 msgstr ""
 
+msgid "Maximum concurrent downloads per host: "
+msgstr ""
+
 msgid "Maximum elements in disk cache: "
 msgstr ""
 
@@ -10767,9 +10791,6 @@ msgstr ""
 msgid "Warning: illegal format of entry in style list ''{0}''. Got ''{1}''"
 msgstr ""
 
-msgid "JOSM default (XML; old version)"
-msgstr ""
-
 msgid "JOSM default (MapCSS)"
 msgstr ""
 
@@ -12232,9 +12253,6 @@ msgstr ""
 msgid "Error parsing note response from server"
 msgstr ""
 
-msgid "Error encoding string: {0}"
-msgstr ""
-
 msgid "(Code={0})"
 msgstr ""
 
@@ -12592,25 +12610,25 @@ msgstr ""
 msgid "Read protocol version"
 msgstr ""
 
-msgid "Cannot start remotecontrol server on port {0}: {1}"
+msgid "Cannot start IPv4 remotecontrol server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Accepting connections on {0}:{1}"
+msgid "Cannot start IPv6 remotecontrol server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Server stopped."
+msgid "RemoteControl::Accepting remote connections on {0}:{1}"
 msgstr ""
 
-msgid "Cannot start remotecontrol https server on port {0}: {1}"
+msgid "RemoteControl::Server {0}:{1} stopped."
 msgstr ""
 
-msgid "Unable to initialize Remote Control HTTPS Server"
+msgid "Cannot start IPv4 remotecontrol https server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Accepting secure connections on {0}:{1}"
+msgid "Cannot start IPv6 remotecontrol https server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Server (https) stopped."
+msgid "RemoteControl::Accepting secure remote connections on {0}:{1}"
 msgstr ""
 
 msgid "Remote Control has been asked to create a new node."
@@ -14278,9 +14296,6 @@ msgstr ""
 msgid "Metropole Ruhr: Luftbilder (10 cm)"
 msgstr ""
 
-msgid "SN Luftbilder, Straßennetz, Administrative Grenzen"
-msgstr ""
-
 msgid "Drone Imagery (Haiti)"
 msgstr ""
 
@@ -15141,6 +15156,11 @@ msgid ""
 "bounding box"
 msgstr ""
 
+msgid ""
+"Recommends categories/tags on newly created OSM entities by analysing "
+"spatial entities into training features and using SVM classification"
+msgstr ""
+
 msgid "Import/export OSM data in PBF format"
 msgstr ""
 
@@ -18841,7 +18861,10 @@ msgstr ""
 msgid "Suction pumpout"
 msgstr ""
 
-msgid "Gravity dump station"
+msgid "Gravity drain for hose"
+msgstr ""
+
+msgid "Casette or Elsan Disposal"
 msgstr ""
 
 msgid "Operation times"
@@ -19345,6 +19368,10 @@ msgid "shed"
 msgstr ""
 
 msgctxt "building"
+msgid "storage_tank"
+msgstr ""
+
+msgctxt "building"
 msgid "cowshed"
 msgstr ""
 
@@ -19457,6 +19484,41 @@ msgstr ""
 msgid "Gasometer"
 msgstr ""
 
+msgid "Storage Tank"
+msgstr ""
+
+msgctxt "content"
+msgid "fuel"
+msgstr ""
+
+msgctxt "content"
+msgid "manure"
+msgstr ""
+
+msgctxt "content"
+msgid "oil"
+msgstr ""
+
+msgctxt "content"
+msgid "sewage"
+msgstr ""
+
+msgctxt "content"
+msgid "silage"
+msgstr ""
+
+msgctxt "content"
+msgid "slurry"
+msgstr ""
+
+msgctxt "content"
+msgid "water"
+msgstr ""
+
+msgctxt "content"
+msgid "wine"
+msgstr ""
+
 msgid "Bunker Silo"
 msgstr ""
 
@@ -22908,6 +22970,33 @@ msgstr ""
 msgid "Could not read NanoLog file:"
 msgstr ""
 
+msgid "OSM Recommendation"
+msgstr ""
+
+msgid "Recommend categories to your newly created instances."
+msgstr ""
+
+msgid "Training process configuration"
+msgstr ""
+
+msgid "Model Settings"
+msgstr ""
+
+msgid "Select objects or create new objects and get recommendation."
+msgstr ""
+
+msgid "Add Recommendation"
+msgstr ""
+
+msgid "Add a recommended key/value pair to your object"
+msgstr ""
+
+msgid "Train a Model"
+msgstr ""
+
+msgid "Start the training engine!"
+msgstr ""
+
 msgid "Edit opening hours"
 msgstr ""
 
diff --git a/i18n/po/ms.po b/i18n/po/ms.po
index 65cd623..eb41a96 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-04-27 03:33+0200\n"
+"POT-Creation-Date: 2015-05-12 03:33+0200\n"
 "PO-Revision-Date: 2011-12-11 22:14+0000\n"
 "Last-Translator: abuyop <Unknown>\n"
 "Language-Team: Malay <ms at li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Launchpad-Export-Date: 2015-04-27 04:49+0000\n"
-"X-Generator: Launchpad (build 17430)\n"
+"X-Launchpad-Export-Date: 2015-05-12 04:50+0000\n"
+"X-Generator: Launchpad (build 17487)\n"
 "Language: ms\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -1468,6 +1468,9 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Some irrelevant nodes have been removed from the selection"
+msgstr ""
+
 msgid "Undo"
 msgstr ""
 
@@ -3065,6 +3068,11 @@ msgstr ""
 msgid "Failed to persist preferences to ''{0}''"
 msgstr ""
 
+msgid ""
+"Try enabling IPv6 network, prefering IPv6 over IPv4 (only works on early "
+"startup)."
+msgstr ""
+
 msgid " (at line {0}, column {1})"
 msgstr ""
 
@@ -3693,6 +3701,15 @@ msgstr ""
 msgid "Number of lane dependent values inconsistent in backward direction"
 msgstr ""
 
+msgid "Long segments"
+msgstr ""
+
+msgid "This tests for long way segments, which are usually errors."
+msgstr ""
+
+msgid "Very long segment of {0} kilometers"
+msgstr ""
+
 msgid "Tag checker (MapCSS based)"
 msgstr ""
 
@@ -4522,6 +4539,18 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
+msgid ""
+"Detected useable IPv6 network, prefering IPv6 over IPv4 after next restart."
+msgstr ""
+
+msgid "Detected useable IPv6 network, prefering IPv6 over IPv4."
+msgstr ""
+
+msgid ""
+"Detected no useable IPv6 network, prefering IPv4 over IPv6 after next "
+"restart."
+msgstr ""
+
 msgid "Unsaved osm data"
 msgstr ""
 
@@ -6200,14 +6229,6 @@ msgstr ""
 msgid "Only launching info browsers for the first {0} of {1} selected users"
 msgstr ""
 
-msgid ""
-"<html>Failed to create an URL because the encoding ''{0}''<br>was missing on "
-"this system.</html>"
-msgstr ""
-
-msgid "Missing encoding"
-msgstr ""
-
 msgid "Author"
 msgstr ""
 
@@ -10662,6 +10683,9 @@ msgstr ""
 msgid "Maximum concurrent downloads: "
 msgstr ""
 
+msgid "Maximum concurrent downloads per host: "
+msgstr ""
+
 msgid "Maximum elements in disk cache: "
 msgstr ""
 
@@ -10764,9 +10788,6 @@ msgstr ""
 msgid "Warning: illegal format of entry in style list ''{0}''. Got ''{1}''"
 msgstr ""
 
-msgid "JOSM default (XML; old version)"
-msgstr ""
-
 msgid "JOSM default (MapCSS)"
 msgstr ""
 
@@ -12228,9 +12249,6 @@ msgstr ""
 msgid "Error parsing note response from server"
 msgstr ""
 
-msgid "Error encoding string: {0}"
-msgstr ""
-
 msgid "(Code={0})"
 msgstr ""
 
@@ -12588,25 +12606,25 @@ msgstr ""
 msgid "Read protocol version"
 msgstr ""
 
-msgid "Cannot start remotecontrol server on port {0}: {1}"
+msgid "Cannot start IPv4 remotecontrol server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Accepting connections on {0}:{1}"
+msgid "Cannot start IPv6 remotecontrol server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Server stopped."
+msgid "RemoteControl::Accepting remote connections on {0}:{1}"
 msgstr ""
 
-msgid "Cannot start remotecontrol https server on port {0}: {1}"
+msgid "RemoteControl::Server {0}:{1} stopped."
 msgstr ""
 
-msgid "Unable to initialize Remote Control HTTPS Server"
+msgid "Cannot start IPv4 remotecontrol https server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Accepting secure connections on {0}:{1}"
+msgid "Cannot start IPv6 remotecontrol https server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Server (https) stopped."
+msgid "RemoteControl::Accepting secure remote connections on {0}:{1}"
 msgstr ""
 
 msgid "Remote Control has been asked to create a new node."
@@ -14274,9 +14292,6 @@ msgstr ""
 msgid "Metropole Ruhr: Luftbilder (10 cm)"
 msgstr ""
 
-msgid "SN Luftbilder, Straßennetz, Administrative Grenzen"
-msgstr ""
-
 msgid "Drone Imagery (Haiti)"
 msgstr ""
 
@@ -15137,6 +15152,11 @@ msgid ""
 "bounding box"
 msgstr ""
 
+msgid ""
+"Recommends categories/tags on newly created OSM entities by analysing "
+"spatial entities into training features and using SVM classification"
+msgstr ""
+
 msgid "Import/export OSM data in PBF format"
 msgstr ""
 
@@ -18837,7 +18857,10 @@ msgstr ""
 msgid "Suction pumpout"
 msgstr ""
 
-msgid "Gravity dump station"
+msgid "Gravity drain for hose"
+msgstr ""
+
+msgid "Casette or Elsan Disposal"
 msgstr ""
 
 msgid "Operation times"
@@ -19341,6 +19364,10 @@ msgid "shed"
 msgstr ""
 
 msgctxt "building"
+msgid "storage_tank"
+msgstr ""
+
+msgctxt "building"
 msgid "cowshed"
 msgstr ""
 
@@ -19453,6 +19480,41 @@ msgstr ""
 msgid "Gasometer"
 msgstr ""
 
+msgid "Storage Tank"
+msgstr ""
+
+msgctxt "content"
+msgid "fuel"
+msgstr ""
+
+msgctxt "content"
+msgid "manure"
+msgstr ""
+
+msgctxt "content"
+msgid "oil"
+msgstr ""
+
+msgctxt "content"
+msgid "sewage"
+msgstr ""
+
+msgctxt "content"
+msgid "silage"
+msgstr ""
+
+msgctxt "content"
+msgid "slurry"
+msgstr ""
+
+msgctxt "content"
+msgid "water"
+msgstr ""
+
+msgctxt "content"
+msgid "wine"
+msgstr ""
+
 msgid "Bunker Silo"
 msgstr ""
 
@@ -22904,6 +22966,33 @@ msgstr ""
 msgid "Could not read NanoLog file:"
 msgstr ""
 
+msgid "OSM Recommendation"
+msgstr ""
+
+msgid "Recommend categories to your newly created instances."
+msgstr ""
+
+msgid "Training process configuration"
+msgstr ""
+
+msgid "Model Settings"
+msgstr ""
+
+msgid "Select objects or create new objects and get recommendation."
+msgstr ""
+
+msgid "Add Recommendation"
+msgstr ""
+
+msgid "Add a recommended key/value pair to your object"
+msgstr ""
+
+msgid "Train a Model"
+msgstr ""
+
+msgid "Start the training engine!"
+msgstr ""
+
 msgid "Edit opening hours"
 msgstr ""
 
diff --git a/i18n/po/nb.po b/i18n/po/nb.po
index 55a8fc2..d623ee3 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-04-27 03:33+0200\n"
+"POT-Creation-Date: 2015-05-12 03:33+0200\n"
 "PO-Revision-Date: 2014-03-19 14:25+0000\n"
 "Last-Translator: Magnus Meyer Hustveit <Unknown>\n"
 "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-04-27 04:51+0000\n"
-"X-Generator: Launchpad (build 17430)\n"
+"X-Launchpad-Export-Date: 2015-05-12 04:51+0000\n"
+"X-Generator: Launchpad (build 17487)\n"
 "Language: nb\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -1485,6 +1485,9 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Some irrelevant nodes have been removed from the selection"
+msgstr ""
+
 msgid "Undo"
 msgstr "Angre"
 
@@ -3098,6 +3101,11 @@ msgstr "Lag: {0}"
 msgid "Failed to persist preferences to ''{0}''"
 msgstr ""
 
+msgid ""
+"Try enabling IPv6 network, prefering IPv6 over IPv4 (only works on early "
+"startup)."
+msgstr ""
+
 msgid " (at line {0}, column {1})"
 msgstr ""
 
@@ -3728,6 +3736,15 @@ msgstr ""
 msgid "Number of lane dependent values inconsistent in backward direction"
 msgstr ""
 
+msgid "Long segments"
+msgstr ""
+
+msgid "This tests for long way segments, which are usually errors."
+msgstr ""
+
+msgid "Very long segment of {0} kilometers"
+msgstr ""
+
 msgid "Tag checker (MapCSS based)"
 msgstr ""
 
@@ -4564,6 +4581,18 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
+msgid ""
+"Detected useable IPv6 network, prefering IPv6 over IPv4 after next restart."
+msgstr ""
+
+msgid "Detected useable IPv6 network, prefering IPv6 over IPv4."
+msgstr ""
+
+msgid ""
+"Detected no useable IPv6 network, prefering IPv4 over IPv6 after next "
+"restart."
+msgstr ""
+
 msgid "Unsaved osm data"
 msgstr ""
 
@@ -6270,14 +6299,6 @@ msgstr ""
 msgid "Only launching info browsers for the first {0} of {1} selected users"
 msgstr ""
 
-msgid ""
-"<html>Failed to create an URL because the encoding ''{0}''<br>was missing on "
-"this system.</html>"
-msgstr ""
-
-msgid "Missing encoding"
-msgstr ""
-
 msgid "Author"
 msgstr "Opphavsmann"
 
@@ -10797,6 +10818,9 @@ msgstr ""
 msgid "Maximum concurrent downloads: "
 msgstr ""
 
+msgid "Maximum concurrent downloads per host: "
+msgstr ""
+
 msgid "Maximum elements in disk cache: "
 msgstr ""
 
@@ -10899,9 +10923,6 @@ msgstr ""
 msgid "Warning: illegal format of entry in style list ''{0}''. Got ''{1}''"
 msgstr ""
 
-msgid "JOSM default (XML; old version)"
-msgstr ""
-
 msgid "JOSM default (MapCSS)"
 msgstr ""
 
@@ -12378,9 +12399,6 @@ msgstr ""
 msgid "Error parsing note response from server"
 msgstr ""
 
-msgid "Error encoding string: {0}"
-msgstr ""
-
 msgid "(Code={0})"
 msgstr "(Kode={0})"
 
@@ -12741,25 +12759,25 @@ msgstr ""
 msgid "Read protocol version"
 msgstr ""
 
-msgid "Cannot start remotecontrol server on port {0}: {1}"
+msgid "Cannot start IPv4 remotecontrol server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Accepting connections on {0}:{1}"
+msgid "Cannot start IPv6 remotecontrol server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Server stopped."
+msgid "RemoteControl::Accepting remote connections on {0}:{1}"
 msgstr ""
 
-msgid "Cannot start remotecontrol https server on port {0}: {1}"
+msgid "RemoteControl::Server {0}:{1} stopped."
 msgstr ""
 
-msgid "Unable to initialize Remote Control HTTPS Server"
+msgid "Cannot start IPv4 remotecontrol https server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Accepting secure connections on {0}:{1}"
+msgid "Cannot start IPv6 remotecontrol https server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Server (https) stopped."
+msgid "RemoteControl::Accepting secure remote connections on {0}:{1}"
 msgstr ""
 
 msgid "Remote Control has been asked to create a new node."
@@ -14437,9 +14455,6 @@ msgstr ""
 msgid "Metropole Ruhr: Luftbilder (10 cm)"
 msgstr ""
 
-msgid "SN Luftbilder, Straßennetz, Administrative Grenzen"
-msgstr ""
-
 msgid "Drone Imagery (Haiti)"
 msgstr ""
 
@@ -15311,6 +15326,11 @@ msgid ""
 "bounding box"
 msgstr ""
 
+msgid ""
+"Recommends categories/tags on newly created OSM entities by analysing "
+"spatial entities into training features and using SVM classification"
+msgstr ""
+
 msgid "Import/export OSM data in PBF format"
 msgstr ""
 
@@ -19018,7 +19038,10 @@ msgstr ""
 msgid "Suction pumpout"
 msgstr ""
 
-msgid "Gravity dump station"
+msgid "Gravity drain for hose"
+msgstr ""
+
+msgid "Casette or Elsan Disposal"
 msgstr ""
 
 msgid "Operation times"
@@ -19522,6 +19545,10 @@ msgid "shed"
 msgstr ""
 
 msgctxt "building"
+msgid "storage_tank"
+msgstr ""
+
+msgctxt "building"
 msgid "cowshed"
 msgstr ""
 
@@ -19634,6 +19661,41 @@ msgstr "Vindmølle"
 msgid "Gasometer"
 msgstr "Gassbeholder"
 
+msgid "Storage Tank"
+msgstr ""
+
+msgctxt "content"
+msgid "fuel"
+msgstr ""
+
+msgctxt "content"
+msgid "manure"
+msgstr ""
+
+msgctxt "content"
+msgid "oil"
+msgstr ""
+
+msgctxt "content"
+msgid "sewage"
+msgstr ""
+
+msgctxt "content"
+msgid "silage"
+msgstr ""
+
+msgctxt "content"
+msgid "slurry"
+msgstr ""
+
+msgctxt "content"
+msgid "water"
+msgstr ""
+
+msgctxt "content"
+msgid "wine"
+msgstr ""
+
 msgid "Bunker Silo"
 msgstr ""
 
@@ -23087,6 +23149,33 @@ msgstr ""
 msgid "Could not read NanoLog file:"
 msgstr ""
 
+msgid "OSM Recommendation"
+msgstr ""
+
+msgid "Recommend categories to your newly created instances."
+msgstr ""
+
+msgid "Training process configuration"
+msgstr ""
+
+msgid "Model Settings"
+msgstr ""
+
+msgid "Select objects or create new objects and get recommendation."
+msgstr ""
+
+msgid "Add Recommendation"
+msgstr ""
+
+msgid "Add a recommended key/value pair to your object"
+msgstr ""
+
+msgid "Train a Model"
+msgstr ""
+
+msgid "Start the training engine!"
+msgstr ""
+
 msgid "Edit opening hours"
 msgstr ""
 
diff --git a/i18n/po/nds.po b/i18n/po/nds.po
index bcea38b..c5f4436 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-04-27 03:33+0200\n"
+"POT-Creation-Date: 2015-05-12 03:33+0200\n"
 "PO-Revision-Date: 2009-11-29 09:01+0000\n"
 "Last-Translator: Dirk Stöcker <launchpad at dstoecker.de>\n"
 "Language-Team: German, Low <nds at li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Launchpad-Export-Date: 2015-04-27 04:50+0000\n"
-"X-Generator: Launchpad (build 17430)\n"
+"X-Launchpad-Export-Date: 2015-05-12 04:50+0000\n"
+"X-Generator: Launchpad (build 17487)\n"
 "Language: \n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -1468,6 +1468,9 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Some irrelevant nodes have been removed from the selection"
+msgstr ""
+
 msgid "Undo"
 msgstr ""
 
@@ -3064,6 +3067,11 @@ msgstr ""
 msgid "Failed to persist preferences to ''{0}''"
 msgstr ""
 
+msgid ""
+"Try enabling IPv6 network, prefering IPv6 over IPv4 (only works on early "
+"startup)."
+msgstr ""
+
 msgid " (at line {0}, column {1})"
 msgstr ""
 
@@ -3692,6 +3700,15 @@ msgstr ""
 msgid "Number of lane dependent values inconsistent in backward direction"
 msgstr ""
 
+msgid "Long segments"
+msgstr ""
+
+msgid "This tests for long way segments, which are usually errors."
+msgstr ""
+
+msgid "Very long segment of {0} kilometers"
+msgstr ""
+
 msgid "Tag checker (MapCSS based)"
 msgstr ""
 
@@ -4521,6 +4538,18 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
+msgid ""
+"Detected useable IPv6 network, prefering IPv6 over IPv4 after next restart."
+msgstr ""
+
+msgid "Detected useable IPv6 network, prefering IPv6 over IPv4."
+msgstr ""
+
+msgid ""
+"Detected no useable IPv6 network, prefering IPv4 over IPv6 after next "
+"restart."
+msgstr ""
+
 msgid "Unsaved osm data"
 msgstr ""
 
@@ -6199,14 +6228,6 @@ msgstr ""
 msgid "Only launching info browsers for the first {0} of {1} selected users"
 msgstr ""
 
-msgid ""
-"<html>Failed to create an URL because the encoding ''{0}''<br>was missing on "
-"this system.</html>"
-msgstr ""
-
-msgid "Missing encoding"
-msgstr ""
-
 msgid "Author"
 msgstr ""
 
@@ -10661,6 +10682,9 @@ msgstr ""
 msgid "Maximum concurrent downloads: "
 msgstr ""
 
+msgid "Maximum concurrent downloads per host: "
+msgstr ""
+
 msgid "Maximum elements in disk cache: "
 msgstr ""
 
@@ -10763,9 +10787,6 @@ msgstr ""
 msgid "Warning: illegal format of entry in style list ''{0}''. Got ''{1}''"
 msgstr ""
 
-msgid "JOSM default (XML; old version)"
-msgstr ""
-
 msgid "JOSM default (MapCSS)"
 msgstr ""
 
@@ -12227,9 +12248,6 @@ msgstr ""
 msgid "Error parsing note response from server"
 msgstr ""
 
-msgid "Error encoding string: {0}"
-msgstr ""
-
 msgid "(Code={0})"
 msgstr ""
 
@@ -12587,25 +12605,25 @@ msgstr ""
 msgid "Read protocol version"
 msgstr ""
 
-msgid "Cannot start remotecontrol server on port {0}: {1}"
+msgid "Cannot start IPv4 remotecontrol server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Accepting connections on {0}:{1}"
+msgid "Cannot start IPv6 remotecontrol server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Server stopped."
+msgid "RemoteControl::Accepting remote connections on {0}:{1}"
 msgstr ""
 
-msgid "Cannot start remotecontrol https server on port {0}: {1}"
+msgid "RemoteControl::Server {0}:{1} stopped."
 msgstr ""
 
-msgid "Unable to initialize Remote Control HTTPS Server"
+msgid "Cannot start IPv4 remotecontrol https server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Accepting secure connections on {0}:{1}"
+msgid "Cannot start IPv6 remotecontrol https server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Server (https) stopped."
+msgid "RemoteControl::Accepting secure remote connections on {0}:{1}"
 msgstr ""
 
 msgid "Remote Control has been asked to create a new node."
@@ -14273,9 +14291,6 @@ msgstr ""
 msgid "Metropole Ruhr: Luftbilder (10 cm)"
 msgstr ""
 
-msgid "SN Luftbilder, Straßennetz, Administrative Grenzen"
-msgstr ""
-
 msgid "Drone Imagery (Haiti)"
 msgstr ""
 
@@ -15136,6 +15151,11 @@ msgid ""
 "bounding box"
 msgstr ""
 
+msgid ""
+"Recommends categories/tags on newly created OSM entities by analysing "
+"spatial entities into training features and using SVM classification"
+msgstr ""
+
 msgid "Import/export OSM data in PBF format"
 msgstr ""
 
@@ -18836,7 +18856,10 @@ msgstr ""
 msgid "Suction pumpout"
 msgstr ""
 
-msgid "Gravity dump station"
+msgid "Gravity drain for hose"
+msgstr ""
+
+msgid "Casette or Elsan Disposal"
 msgstr ""
 
 msgid "Operation times"
@@ -19340,6 +19363,10 @@ msgid "shed"
 msgstr ""
 
 msgctxt "building"
+msgid "storage_tank"
+msgstr ""
+
+msgctxt "building"
 msgid "cowshed"
 msgstr ""
 
@@ -19452,6 +19479,41 @@ msgstr ""
 msgid "Gasometer"
 msgstr ""
 
+msgid "Storage Tank"
+msgstr ""
+
+msgctxt "content"
+msgid "fuel"
+msgstr ""
+
+msgctxt "content"
+msgid "manure"
+msgstr ""
+
+msgctxt "content"
+msgid "oil"
+msgstr ""
+
+msgctxt "content"
+msgid "sewage"
+msgstr ""
+
+msgctxt "content"
+msgid "silage"
+msgstr ""
+
+msgctxt "content"
+msgid "slurry"
+msgstr ""
+
+msgctxt "content"
+msgid "water"
+msgstr ""
+
+msgctxt "content"
+msgid "wine"
+msgstr ""
+
 msgid "Bunker Silo"
 msgstr ""
 
@@ -22903,6 +22965,33 @@ msgstr ""
 msgid "Could not read NanoLog file:"
 msgstr ""
 
+msgid "OSM Recommendation"
+msgstr ""
+
+msgid "Recommend categories to your newly created instances."
+msgstr ""
+
+msgid "Training process configuration"
+msgstr ""
+
+msgid "Model Settings"
+msgstr ""
+
+msgid "Select objects or create new objects and get recommendation."
+msgstr ""
+
+msgid "Add Recommendation"
+msgstr ""
+
+msgid "Add a recommended key/value pair to your object"
+msgstr ""
+
+msgid "Train a Model"
+msgstr ""
+
+msgid "Start the training engine!"
+msgstr ""
+
 msgid "Edit opening hours"
 msgstr ""
 
diff --git a/i18n/po/nl.po b/i18n/po/nl.po
index 08a13c0..3a0a563 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-04-27 03:33+0200\n"
-"PO-Revision-Date: 2015-04-25 16:03+0000\n"
+"POT-Creation-Date: 2015-05-12 03:33+0200\n"
+"PO-Revision-Date: 2015-05-11 17:09+0000\n"
 "Last-Translator: DiGro <Unknown>\n"
 "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-04-27 04:38+0000\n"
-"X-Generator: Launchpad (build 17430)\n"
+"X-Launchpad-Export-Date: 2015-05-12 04:38+0000\n"
+"X-Generator: Launchpad (build 17487)\n"
 "Language: nl\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -1633,6 +1633,9 @@ msgstr[1] ""
 "De betrokken wegen zouden verdwijnen na het ontkoppelen van de geselecteerde "
 "knopen"
 
+msgid "Some irrelevant nodes have been removed from the selection"
+msgstr "Enkele niet relevante knopen zijn uit de selectie verwijderd"
+
 msgid "Undo"
 msgstr "Ongedaan maken"
 
@@ -3400,6 +3403,13 @@ msgstr "Laag: {0}"
 msgid "Failed to persist preferences to ''{0}''"
 msgstr "Behouden van voorkeuren voor ''{0}'' mislukt"
 
+msgid ""
+"Try enabling IPv6 network, prefering IPv6 over IPv4 (only works on early "
+"startup)."
+msgstr ""
+"Probeer netwerk IPv6 in te schakelen, voorkeur voor IPv6 boven IPv4 (werkt "
+"alleen bij eerste opstarten)."
+
 msgid " (at line {0}, column {1})"
 msgstr " (op regel {0}, kolom {1})"
 
@@ -4077,6 +4087,15 @@ msgid "Number of lane dependent values inconsistent in backward direction"
 msgstr ""
 "Aantal van lane afhankelijke waarden inconsistent in achterwaartse richting"
 
+msgid "Long segments"
+msgstr "Lange segmenten"
+
+msgid "This tests for long way segments, which are usually errors."
+msgstr "Deze testen op lange wegsegmenten, wat gewoonlijk fouten zijn."
+
+msgid "Very long segment of {0} kilometers"
+msgstr "Zeer lang segment van {0} kilometers"
+
 msgid "Tag checker (MapCSS based)"
 msgstr "Tagcontrole (MapCSS gebaseerd)"
 
@@ -4268,11 +4287,13 @@ msgid "Relation checker"
 msgstr "Controle voor relaties"
 
 msgid "Checks for errors in relations."
-msgstr ""
+msgstr "Controleert op fouten in relaties."
 
 msgid ""
 "Route scheme is unspecified. Add {0} ({1}=public_transport; {2}=legacy)"
 msgstr ""
+"Routeschema is niet gespecificeerd. Voeg toe {0} ({1}=public_transport; "
+"{2}=legacy)"
 
 msgid "Relation type is unknown"
 msgstr "Relatietype is onbekend"
@@ -4281,20 +4302,22 @@ msgid "Relation is empty"
 msgstr "Lege relatie"
 
 msgid "Role member does not match expression {0} in template {1}"
-msgstr ""
+msgstr "Rol van het lid komt niet overeen met expressie {0} in sjabloon {1}"
 
 msgid ""
 "Role member type {0} does not match accepted list of {1} in template {2}"
 msgstr ""
+"Rol van het type lid {0} komt niet overeen met de geaccepteerde lijst van "
+"{1} in sjabloon {2}"
 
 msgid "<empty>"
 msgstr "<leeg>"
 
 msgid "Role {0} unknown in templates {1}"
-msgstr ""
+msgstr "Rol {0} onbekend in sjablonen {1}"
 
 msgid "Empty role type found when expecting one of {0}"
-msgstr ""
+msgstr "Leeg type rol gevonden waar verwacht werd een van {0}"
 
 msgid "Role {0} missing"
 msgstr "Rol {0} ontbreekt"
@@ -4449,7 +4472,7 @@ msgid "Turnrestrictions"
 msgstr "Turnrestrictions"
 
 msgid "This test checks if turnrestrictions are valid."
-msgstr ""
+msgstr "Deze test controleert of Beperkingen omkeren geldig zijn."
 
 msgid "Unknown role"
 msgstr "Onbekende rol"
@@ -4479,13 +4502,13 @@ msgid "No \"via\" node or way found"
 msgstr "Er werd geen weg of knoop met \"via\" gevonden"
 
 msgid "The \"from\" way does not start or end at a \"via\" node."
-msgstr ""
+msgstr "De weg met \"from\" begint of eindigt niet op een knoop \"via\"."
 
 msgid "Superfluous turnrestriction as \"to\" way is oneway"
 msgstr "Overbodige beperking Afslaan omdat weg \"to\" eenrichtingsverkeer is"
 
 msgid "The \"to\" way does not start or end at a \"via\" node."
-msgstr ""
+msgstr "De weg met \"to\" begint of eindigt niet op een knoop \"via\"."
 
 msgid "The \"from\" and the first \"via\" way are not connected."
 msgstr "De \"van\" en de eerste \"via\" wegen zijn niet verbonden."
@@ -4530,7 +4553,7 @@ msgid "waterway type {0}"
 msgstr "soort waterweg {0}"
 
 msgid "boundary type {0}"
-msgstr ""
+msgstr "grens type {0}"
 
 msgid "building"
 msgstr "gebouw"
@@ -4715,7 +4738,7 @@ msgid "Illegal Data"
 msgstr "Ongeldige gegevens"
 
 msgid "Offline mode"
-msgstr ""
+msgstr "modus Offline"
 
 msgid "Internal Server Error"
 msgstr "Interne serverfout"
@@ -4840,44 +4863,48 @@ msgid "Print debugging messages to console"
 msgstr "Druk berichten voor debuggen af naar scherm"
 
 msgid "Skip loading plugins"
-msgstr ""
+msgstr "Plug-ins laden overslaan"
 
 msgid "Disable access to the given resource(s), separated by comma"
 msgstr ""
+"Toegang uitschakelen naar de opgegeven bron(nen), gescheiden door komma's"
 
 msgid "options provided as Java system properties"
 msgstr "opties ter beschikking gesteld als systeemeigenschappen"
 
 msgid "/PATH/TO/JOSM/PREF    "
-msgstr ""
+msgstr "/PAD/NAAR/JOSM/PREF    "
 
 msgid "Set the preferences directory"
-msgstr ""
+msgstr "Map voor voorkeuren instellen"
 
 msgid "/PATH/TO/JOSM/USERDATA"
-msgstr ""
+msgstr "/PAD/NAAR/JOSM/GEBRUIKERSGEGEVENS"
 
 msgid "Set the user data directory"
-msgstr ""
+msgstr "Map voor gebruikersgegevens instellen"
 
 msgid "/PATH/TO/JOSM/CACHE   "
-msgstr ""
+msgstr "/PAD/NAAR/JOSM/CACHE   "
 
 msgid "Set the cache directory"
-msgstr ""
+msgstr "Map voor cache instellen"
 
 msgid "/PATH/TO/JOSM/HOMEDIR "
-msgstr ""
+msgstr "/PAD/NAAR/JOSM/HOMEDIR "
 
 msgid ""
 "Relocate all 3 directories to homedir. Cache directory will be in "
 "homedir/cache"
 msgstr ""
+"Alle 3 mappen verplaatsen naar homedir. Map Cache zal zijn in homedir/cache"
 
 msgid ""
 "-Djosm.home has lower precedence, i.e. the specific setting overrides the "
 "general one"
 msgstr ""
+"-Djosm.home heeft een lagere prioriteit, d.i. de specifieke instelling gaat "
+"voor de algemene"
 
 msgid ""
 "note: For some tasks, JOSM needs a lot of memory. It can be necessary to add "
@@ -4904,13 +4931,13 @@ msgid "Make sure you load some data if you use --selection."
 msgstr "Zorg dat u wat gegevens inlaadt, als u --selection gebruikt."
 
 msgid "Printing debugging messages to console"
-msgstr ""
+msgstr "Berichten voor debuggen afdrukken op scherm"
 
 msgid "Plugin loading skipped"
-msgstr ""
+msgstr "Plug-in laden overgeslagen"
 
 msgid "Enabled detailed debug level (trace)"
-msgstr ""
+msgstr "Gedetailleerd niveau voor debuggen ingeschakeld (trace)"
 
 msgid "Initializing"
 msgstr "Initialiseren"
@@ -4937,13 +4964,35 @@ msgid ""
 "''{0}'' is not a valid value for argument ''{1}''. Possible values are {2}, "
 "possibly delimited by commas."
 msgstr ""
+"''{0}'' is geen geldige waarde voor argument ''{1}''. Mogelijke waarden zijn "
+"{2}, mogelijk gescheiden door komma's."
 
 msgid ""
 "JOSM is running in offline mode. This resource will not be available: {0}"
 msgid_plural ""
 "JOSM is running in offline mode. These resources will not be available: {0}"
 msgstr[0] ""
+"JOSM wordt uitgevoerd in modus Offline. Deze bron zal niet beschikbaar zijn: "
+"{0}"
 msgstr[1] ""
+"JOSM wordt uitgevoerd in modus Offline. Deze bronnen zullen niet beschikbaar "
+"zijn: {0}"
+
+msgid ""
+"Detected useable IPv6 network, prefering IPv6 over IPv4 after next restart."
+msgstr ""
+"Bruikbaar IPv6-netwerk gedetecteerd, voorkeur voor IPv6 boven IPv4 na "
+"volgende keer opstarten."
+
+msgid "Detected useable IPv6 network, prefering IPv6 over IPv4."
+msgstr "Bruikbaar IPv6-netwerk gedetecteerd, voorkeur voor IPv6 boven IPv4."
+
+msgid ""
+"Detected no useable IPv6 network, prefering IPv4 over IPv6 after next "
+"restart."
+msgstr ""
+"Geen bruikbaar IPv6-netwerk gedetecteerd, voorkeur voor IPv4 boven IPv6 na "
+"volgende keer opstarten."
 
 msgid "Unsaved osm data"
 msgstr "Niet-opgeslagen OSM-gegevens"
@@ -4989,6 +5038,10 @@ msgid ""
 "missing proxy configuration.<br>Would you like to change your proxy settings "
 "now?"
 msgstr ""
+"JOSM probeerde toegang te krijgen tot de volgende bronnen:<br>{0}maar dat "
+"<b>mislukte</b>, vanwege de volgende netwerkfouten:<br>{1}Het zou aan een "
+"ontbrekende configuratie voor de proxy kunnen liggen.<br>Wilt u nu uw "
+"instellingen voor de proxy wijzigen?"
 
 msgid "File"
 msgstr "Bestand"
@@ -5050,7 +5103,7 @@ msgid "Click to open the imagery tab in the preferences"
 msgstr "Klik om de tab Afbeeldingen te openen in de voorkeuren"
 
 msgid "Search menu items"
-msgstr ""
+msgstr "Items Zoekmenu"
 
 msgid "Audio"
 msgstr "Geluid"
@@ -5153,7 +5206,7 @@ msgid "Layer ''{0}'' must be in list of layers"
 msgstr "De laag ''{0}'' moet in de lijst beschikbare lagen staan"
 
 msgid "Default (open, closed, new)"
-msgstr ""
+msgstr "Standaard (open, closed, new)"
 
 msgid "Username"
 msgstr "Gebruikersnaam"
@@ -5162,7 +5215,7 @@ msgid "Created date"
 msgstr ""
 
 msgid "Last change date"
-msgstr ""
+msgstr "Datum laatste wijziging"
 
 msgid "Select note sorting method"
 msgstr "Sorteervolgorde van notities"
@@ -5364,10 +5417,10 @@ msgid "Conflict foreground: keep all tags"
 msgstr "Conflict op voorgrond: behoud alle tags"
 
 msgid "Conflict background: sum all numeric tags"
-msgstr ""
+msgstr "Conflict op de achtergrond: vermeld alle numerieke tags"
 
 msgid "Conflict foreground: sum all numeric tags"
-msgstr ""
+msgstr "Conflict op de voorgrond: vermeld alle numerieke tags"
 
 msgid "Conflict background: keep member"
 msgstr "Conflict op achtergrond: behoud lid"
@@ -5797,7 +5850,17 @@ msgid_plural ""
 "are shown a dialog to decide how to adapt the relations.<br/><br/>Do you "
 "want to continue?"
 msgstr[0] ""
+"U staat op het punt om {1} object te combineren, dat deel uitmaakt van {0} "
+"relatie:<br/>{2}Combineren van deze objecten zouden deze relatie kunnen "
+"verbreken. Annuleer deze bewerking als u er niet zeker van bent.<br/>Als u "
+"wilt doorgaan zal u een dialoogvenster worden getoond om te bepalen hoe de "
+"relatie moet worden aangepast.<br/><br/>Wilt u doorgaan?"
 msgstr[1] ""
+"U staat op het punt om {1} objecten te combineren, die deel uitmaken van {0} "
+"relaties:<br/>{2}Combineren van deze objecten zouden deze relaties kunnen "
+"verbreken. Annuleer deze bewerking als u er niet zeker van bent.<br/>Als u "
+"wilt doorgaan zal u een dialoogvenster worden getoond om te bepalen hoe de "
+"relaties moeten worden aangepast.<br/><br/>Wilt u doorgaan?"
 
 msgid "Combine confirmation"
 msgstr "Combineren bevestigen"
@@ -5841,7 +5904,7 @@ msgid "all"
 msgstr "alles"
 
 msgid "sum"
-msgstr ""
+msgstr "som"
 
 msgid "Please decide which values to keep"
 msgstr "Bepaal welke waardes behouden moeten blijven"
@@ -5852,6 +5915,8 @@ msgstr "Waarde ''{0}'' zal worden toegepast voor sleutel ''{1}''"
 msgid ""
 "All numeric values sumed as ''{0}'' are going to be applied for key ''{1}''"
 msgstr ""
+"Alle numerieke waarden die zijn gesommeerd als ''{0}'' zullen worden "
+"toegepast voor sleutel ''{1}''"
 
 msgid "The key ''{0}'' and all its values are going to be removed"
 msgstr "De sleutel ''{0}'' en al zijn waarden zullen worden verwijderd"
@@ -6065,7 +6130,7 @@ msgid "Toggle: {0}"
 msgstr "Omschakelen: {0}"
 
 msgid "Command Stack: Undo: {0} / Redo: {1}"
-msgstr ""
+msgstr "Opdrachtenlijst: Ongedana maken: {0} / Opnieuw: {1}"
 
 msgid ""
 "Selects the objects that take part in this command (unless currently deleted)"
@@ -6094,8 +6159,8 @@ msgstr "Los conflicten op."
 
 msgid "Conflict: {0} unresolved"
 msgid_plural "Conflicts: {0} unresolved"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Conflict: {0} niet opgeslost"
+msgstr[1] "Conflicten: {0} niet opgelost"
 
 msgid "Rel.:{0} / Ways:{1} / Nodes:{2}"
 msgstr "Rel.:{0} / Wegen:{1} / Knopen:{2}"
@@ -6606,16 +6671,16 @@ msgid "No"
 msgstr "Neen"
 
 msgid "Style settings"
-msgstr ""
+msgstr "Instellingen Stijl"
 
 msgid "Customize the style"
-msgstr ""
+msgstr "De stijl aanpasen"
 
 msgid "List of notes"
 msgstr "Lijst van opmerkingen"
 
 msgid "Add comment"
-msgstr ""
+msgstr "Opmerking toevoegen"
 
 msgid "Comment"
 msgstr "Commentaar"
@@ -6642,7 +6707,7 @@ msgid "Reopen note"
 msgstr "Notitie heropenen"
 
 msgid "Reopen"
-msgstr ""
+msgstr "Heropenen"
 
 msgid "Reopen note with message:"
 msgstr "Notitie heropenen met een toelichting"
@@ -6674,6 +6739,10 @@ msgid ""
 "mixed mode, specify objects like this: {1}<br/>({2} stands for <i>node</i>, "
 "{3} for <i>way</i>, and {4} for <i>relation</i>)"
 msgstr ""
+"Object-ID's kunnen gescheiden worden door komma's of spaties.<br/> "
+"Voorbeelden: {0}<br/>In gemengde modus worden objecten als volgt "
+"gespecificeerd: {1}<br/>({2} betekent <i>knoop</i>, {3} <i>weg</i>, en {4} "
+"<i>relatie</i>)"
 
 msgid ""
 "Invalid ID list specified\n"
@@ -6782,16 +6851,6 @@ msgstr ""
 "Alleen info-browsers gestart voor de eerste {0} van {1} geselecteerde "
 "gebruikers"
 
-msgid ""
-"<html>Failed to create an URL because the encoding ''{0}''<br>was missing on "
-"this system.</html>"
-msgstr ""
-"<html>Niet mogelijk om een URL samen te stellen, omdat de codering "
-"''{0}''<br>ontbreekt op dit systeem.</html>"
-
-msgid "Missing encoding"
-msgstr "Codering ontbreekt"
-
 msgid "Author"
 msgstr "Auteur"
 
@@ -6857,10 +6916,10 @@ msgstr ""
 "De gecreëerde/bijgewerkte en verwijderde objecten tonen per wijzigingenset"
 
 msgid "Discussion"
-msgstr ""
+msgstr "Bespreking"
 
 msgid "Display the public discussion around this changeset"
-msgstr ""
+msgstr "Geef de publieke bespreking van deze wijzigingenset weer"
 
 msgid "Changeset Management Dialog"
 msgstr "Venster Beheren wijzigingenset"
@@ -6945,7 +7004,7 @@ msgid "Closed at"
 msgstr "Afgesloten op"
 
 msgid "Discussions"
-msgstr ""
+msgstr "Besprekingen"
 
 msgid "Downloading changeset content"
 msgstr "Downloaden van inhoud wijzigingenset"
@@ -7073,10 +7132,10 @@ msgstr ""
 "gegevenslaag"
 
 msgid "Update changeset discussion"
-msgstr ""
+msgstr "Bespreking over wijzigingenset bijwerken"
 
 msgid "Update the changeset discussion from the OSM server"
-msgstr ""
+msgstr "Bespreking over de wijzigingenset vanaf de server van OSM bijwerken"
 
 msgid "Date"
 msgstr "Datum"
@@ -7414,17 +7473,17 @@ msgid "Discardable key: background"
 msgstr "Te missen sleutel: achtergrond"
 
 msgid "{0} ''{1}''"
-msgstr ""
+msgstr "{0} ''{1}''"
 
 msgid "{0} different"
 msgid_plural "{0} different"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "{0} verschillend"
+msgstr[1] "{0} verschillende"
 
 msgid ", {0} unset"
 msgid_plural ", {0} unset"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] ", {0} niet ingesteld"
+msgstr[1] ", {0} niet ingestelde"
 
 msgid "Select objects for which to change tags."
 msgstr "Selecteer de objecten waarvan de tags gewijzigd moeten worden."
@@ -11850,6 +11909,9 @@ msgstr "Map voor cache van tegels: "
 msgid "Maximum concurrent downloads: "
 msgstr ""
 
+msgid "Maximum concurrent downloads per host: "
+msgstr ""
+
 msgid "Maximum elements in disk cache: "
 msgstr ""
 
@@ -11966,9 +12028,6 @@ msgstr ""
 "Waarschuwing: ongeldige indeling van item in de lijst met stijlen ''{0}''. "
 "Kreeg ''{1}''"
 
-msgid "JOSM default (XML; old version)"
-msgstr ""
-
 msgid "JOSM default (MapCSS)"
 msgstr ""
 
@@ -13593,9 +13652,6 @@ msgstr ""
 msgid "Error parsing note response from server"
 msgstr ""
 
-msgid "Error encoding string: {0}"
-msgstr ""
-
 msgid "(Code={0})"
 msgstr "(Code={0})"
 
@@ -13986,25 +14042,25 @@ msgstr "Nieuwe objecten maken"
 msgid "Read protocol version"
 msgstr "Lees protocolversie"
 
-msgid "Cannot start remotecontrol server on port {0}: {1}"
-msgstr "Kan geen server voor afstandsbediening starten op poort {0}: {1}"
+msgid "Cannot start IPv4 remotecontrol server on port {0}: {1}"
+msgstr ""
 
-msgid "RemoteControl::Accepting connections on {0}:{1}"
+msgid "Cannot start IPv6 remotecontrol server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Server stopped."
-msgstr "Afstandsbediening::Server gestopt."
+msgid "RemoteControl::Accepting remote connections on {0}:{1}"
+msgstr ""
 
-msgid "Cannot start remotecontrol https server on port {0}: {1}"
+msgid "RemoteControl::Server {0}:{1} stopped."
 msgstr ""
 
-msgid "Unable to initialize Remote Control HTTPS Server"
+msgid "Cannot start IPv4 remotecontrol https server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Accepting secure connections on {0}:{1}"
+msgid "Cannot start IPv6 remotecontrol https server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Server (https) stopped."
+msgid "RemoteControl::Accepting secure remote connections on {0}:{1}"
 msgstr ""
 
 msgid "Remote Control has been asked to create a new node."
@@ -15920,9 +15976,6 @@ msgstr ""
 msgid "Metropole Ruhr: Luftbilder (10 cm)"
 msgstr ""
 
-msgid "SN Luftbilder, Straßennetz, Administrative Grenzen"
-msgstr ""
-
 msgid "Drone Imagery (Haiti)"
 msgstr ""
 
@@ -16860,6 +16913,11 @@ msgstr ""
 "Laad fouten van OSM Inspector, en laat ze zien binnen het huidige "
 "gedownloade gebied in JOSM"
 
+msgid ""
+"Recommends categories/tags on newly created OSM entities by analysing "
+"spatial entities into training features and using SVM classification"
+msgstr ""
+
 msgid "Import/export OSM data in PBF format"
 msgstr ""
 
@@ -20624,7 +20682,10 @@ msgstr ""
 msgid "Suction pumpout"
 msgstr ""
 
-msgid "Gravity dump station"
+msgid "Gravity drain for hose"
+msgstr ""
+
+msgid "Casette or Elsan Disposal"
 msgstr ""
 
 msgid "Operation times"
@@ -21128,6 +21189,10 @@ msgid "shed"
 msgstr "schuur"
 
 msgctxt "building"
+msgid "storage_tank"
+msgstr ""
+
+msgctxt "building"
 msgid "cowshed"
 msgstr ""
 
@@ -21240,6 +21305,41 @@ msgstr "Windmolen"
 msgid "Gasometer"
 msgstr "Olieopslag"
 
+msgid "Storage Tank"
+msgstr ""
+
+msgctxt "content"
+msgid "fuel"
+msgstr ""
+
+msgctxt "content"
+msgid "manure"
+msgstr ""
+
+msgctxt "content"
+msgid "oil"
+msgstr ""
+
+msgctxt "content"
+msgid "sewage"
+msgstr ""
+
+msgctxt "content"
+msgid "silage"
+msgstr ""
+
+msgctxt "content"
+msgid "slurry"
+msgstr ""
+
+msgctxt "content"
+msgid "water"
+msgstr ""
+
+msgctxt "content"
+msgid "wine"
+msgstr ""
+
 msgid "Bunker Silo"
 msgstr ""
 
@@ -24728,6 +24828,33 @@ msgstr "Openen NanoLog-bestand..."
 msgid "Could not read NanoLog file:"
 msgstr ""
 
+msgid "OSM Recommendation"
+msgstr ""
+
+msgid "Recommend categories to your newly created instances."
+msgstr ""
+
+msgid "Training process configuration"
+msgstr ""
+
+msgid "Model Settings"
+msgstr ""
+
+msgid "Select objects or create new objects and get recommendation."
+msgstr ""
+
+msgid "Add Recommendation"
+msgstr ""
+
+msgid "Add a recommended key/value pair to your object"
+msgstr ""
+
+msgid "Train a Model"
+msgstr ""
+
+msgid "Start the training engine!"
+msgstr ""
+
 msgid "Edit opening hours"
 msgstr "Openingstijden bewerken"
 
diff --git a/i18n/po/nn.po b/i18n/po/nn.po
index 1fa12c2..fb06a41 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-04-27 03:33+0200\n"
+"POT-Creation-Date: 2015-05-12 03:33+0200\n"
 "PO-Revision-Date: 2009-07-15 12:49+0000\n"
 "Last-Translator: Skippern <Unknown>\n"
 "Language-Team: Norwegian Nynorsk <nn at li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Launchpad-Export-Date: 2015-04-27 04:50+0000\n"
-"X-Generator: Launchpad (build 17430)\n"
+"X-Launchpad-Export-Date: 2015-05-12 04:51+0000\n"
+"X-Generator: Launchpad (build 17487)\n"
 "Language: nn\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -1468,6 +1468,9 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Some irrelevant nodes have been removed from the selection"
+msgstr ""
+
 msgid "Undo"
 msgstr ""
 
@@ -3065,6 +3068,11 @@ msgstr ""
 msgid "Failed to persist preferences to ''{0}''"
 msgstr ""
 
+msgid ""
+"Try enabling IPv6 network, prefering IPv6 over IPv4 (only works on early "
+"startup)."
+msgstr ""
+
 msgid " (at line {0}, column {1})"
 msgstr ""
 
@@ -3693,6 +3701,15 @@ msgstr ""
 msgid "Number of lane dependent values inconsistent in backward direction"
 msgstr ""
 
+msgid "Long segments"
+msgstr ""
+
+msgid "This tests for long way segments, which are usually errors."
+msgstr ""
+
+msgid "Very long segment of {0} kilometers"
+msgstr ""
+
 msgid "Tag checker (MapCSS based)"
 msgstr ""
 
@@ -4522,6 +4539,18 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
+msgid ""
+"Detected useable IPv6 network, prefering IPv6 over IPv4 after next restart."
+msgstr ""
+
+msgid "Detected useable IPv6 network, prefering IPv6 over IPv4."
+msgstr ""
+
+msgid ""
+"Detected no useable IPv6 network, prefering IPv4 over IPv6 after next "
+"restart."
+msgstr ""
+
 msgid "Unsaved osm data"
 msgstr ""
 
@@ -6200,14 +6229,6 @@ msgstr ""
 msgid "Only launching info browsers for the first {0} of {1} selected users"
 msgstr ""
 
-msgid ""
-"<html>Failed to create an URL because the encoding ''{0}''<br>was missing on "
-"this system.</html>"
-msgstr ""
-
-msgid "Missing encoding"
-msgstr ""
-
 msgid "Author"
 msgstr ""
 
@@ -10662,6 +10683,9 @@ msgstr ""
 msgid "Maximum concurrent downloads: "
 msgstr ""
 
+msgid "Maximum concurrent downloads per host: "
+msgstr ""
+
 msgid "Maximum elements in disk cache: "
 msgstr ""
 
@@ -10764,9 +10788,6 @@ msgstr ""
 msgid "Warning: illegal format of entry in style list ''{0}''. Got ''{1}''"
 msgstr ""
 
-msgid "JOSM default (XML; old version)"
-msgstr ""
-
 msgid "JOSM default (MapCSS)"
 msgstr ""
 
@@ -12228,9 +12249,6 @@ msgstr ""
 msgid "Error parsing note response from server"
 msgstr ""
 
-msgid "Error encoding string: {0}"
-msgstr ""
-
 msgid "(Code={0})"
 msgstr ""
 
@@ -12588,25 +12606,25 @@ msgstr ""
 msgid "Read protocol version"
 msgstr ""
 
-msgid "Cannot start remotecontrol server on port {0}: {1}"
+msgid "Cannot start IPv4 remotecontrol server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Accepting connections on {0}:{1}"
+msgid "Cannot start IPv6 remotecontrol server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Server stopped."
+msgid "RemoteControl::Accepting remote connections on {0}:{1}"
 msgstr ""
 
-msgid "Cannot start remotecontrol https server on port {0}: {1}"
+msgid "RemoteControl::Server {0}:{1} stopped."
 msgstr ""
 
-msgid "Unable to initialize Remote Control HTTPS Server"
+msgid "Cannot start IPv4 remotecontrol https server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Accepting secure connections on {0}:{1}"
+msgid "Cannot start IPv6 remotecontrol https server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Server (https) stopped."
+msgid "RemoteControl::Accepting secure remote connections on {0}:{1}"
 msgstr ""
 
 msgid "Remote Control has been asked to create a new node."
@@ -14274,9 +14292,6 @@ msgstr ""
 msgid "Metropole Ruhr: Luftbilder (10 cm)"
 msgstr ""
 
-msgid "SN Luftbilder, Straßennetz, Administrative Grenzen"
-msgstr ""
-
 msgid "Drone Imagery (Haiti)"
 msgstr ""
 
@@ -15137,6 +15152,11 @@ msgid ""
 "bounding box"
 msgstr ""
 
+msgid ""
+"Recommends categories/tags on newly created OSM entities by analysing "
+"spatial entities into training features and using SVM classification"
+msgstr ""
+
 msgid "Import/export OSM data in PBF format"
 msgstr ""
 
@@ -18837,7 +18857,10 @@ msgstr ""
 msgid "Suction pumpout"
 msgstr ""
 
-msgid "Gravity dump station"
+msgid "Gravity drain for hose"
+msgstr ""
+
+msgid "Casette or Elsan Disposal"
 msgstr ""
 
 msgid "Operation times"
@@ -19341,6 +19364,10 @@ msgid "shed"
 msgstr ""
 
 msgctxt "building"
+msgid "storage_tank"
+msgstr ""
+
+msgctxt "building"
 msgid "cowshed"
 msgstr ""
 
@@ -19453,6 +19480,41 @@ msgstr ""
 msgid "Gasometer"
 msgstr ""
 
+msgid "Storage Tank"
+msgstr ""
+
+msgctxt "content"
+msgid "fuel"
+msgstr ""
+
+msgctxt "content"
+msgid "manure"
+msgstr ""
+
+msgctxt "content"
+msgid "oil"
+msgstr ""
+
+msgctxt "content"
+msgid "sewage"
+msgstr ""
+
+msgctxt "content"
+msgid "silage"
+msgstr ""
+
+msgctxt "content"
+msgid "slurry"
+msgstr ""
+
+msgctxt "content"
+msgid "water"
+msgstr ""
+
+msgctxt "content"
+msgid "wine"
+msgstr ""
+
 msgid "Bunker Silo"
 msgstr ""
 
@@ -22904,6 +22966,33 @@ msgstr ""
 msgid "Could not read NanoLog file:"
 msgstr ""
 
+msgid "OSM Recommendation"
+msgstr ""
+
+msgid "Recommend categories to your newly created instances."
+msgstr ""
+
+msgid "Training process configuration"
+msgstr ""
+
+msgid "Model Settings"
+msgstr ""
+
+msgid "Select objects or create new objects and get recommendation."
+msgstr ""
+
+msgid "Add Recommendation"
+msgstr ""
+
+msgid "Add a recommended key/value pair to your object"
+msgstr ""
+
+msgid "Train a Model"
+msgstr ""
+
+msgid "Start the training engine!"
+msgstr ""
+
 msgid "Edit opening hours"
 msgstr ""
 
diff --git a/i18n/po/oc.po b/i18n/po/oc.po
index d5c2920..f050aaf 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-04-27 03:33+0200\n"
+"POT-Creation-Date: 2015-05-12 03:33+0200\n"
 "PO-Revision-Date: 2012-10-03 22:14+0000\n"
 "Last-Translator: Cédric VALMARY (Tot en òc) <cvalmary at yahoo.fr>\n"
 "Language-Team: Occitan (post 1500) <oc at li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n > 1;\n"
-"X-Launchpad-Export-Date: 2015-04-27 04:51+0000\n"
-"X-Generator: Launchpad (build 17430)\n"
+"X-Launchpad-Export-Date: 2015-05-12 04:51+0000\n"
+"X-Generator: Launchpad (build 17487)\n"
 "Language: \n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -1475,6 +1475,9 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Some irrelevant nodes have been removed from the selection"
+msgstr ""
+
 msgid "Undo"
 msgstr "Anullar"
 
@@ -3072,6 +3075,11 @@ msgstr "Calc : {0}"
 msgid "Failed to persist preferences to ''{0}''"
 msgstr ""
 
+msgid ""
+"Try enabling IPv6 network, prefering IPv6 over IPv4 (only works on early "
+"startup)."
+msgstr ""
+
 msgid " (at line {0}, column {1})"
 msgstr ""
 
@@ -3700,6 +3708,15 @@ msgstr ""
 msgid "Number of lane dependent values inconsistent in backward direction"
 msgstr ""
 
+msgid "Long segments"
+msgstr ""
+
+msgid "This tests for long way segments, which are usually errors."
+msgstr ""
+
+msgid "Very long segment of {0} kilometers"
+msgstr ""
+
 msgid "Tag checker (MapCSS based)"
 msgstr ""
 
@@ -4529,6 +4546,18 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
+msgid ""
+"Detected useable IPv6 network, prefering IPv6 over IPv4 after next restart."
+msgstr ""
+
+msgid "Detected useable IPv6 network, prefering IPv6 over IPv4."
+msgstr ""
+
+msgid ""
+"Detected no useable IPv6 network, prefering IPv4 over IPv6 after next "
+"restart."
+msgstr ""
+
 msgid "Unsaved osm data"
 msgstr ""
 
@@ -6207,14 +6236,6 @@ msgstr ""
 msgid "Only launching info browsers for the first {0} of {1} selected users"
 msgstr ""
 
-msgid ""
-"<html>Failed to create an URL because the encoding ''{0}''<br>was missing on "
-"this system.</html>"
-msgstr ""
-
-msgid "Missing encoding"
-msgstr "Encodatge mancant"
-
 msgid "Author"
 msgstr "Autor"
 
@@ -10671,6 +10692,9 @@ msgstr ""
 msgid "Maximum concurrent downloads: "
 msgstr ""
 
+msgid "Maximum concurrent downloads per host: "
+msgstr ""
+
 msgid "Maximum elements in disk cache: "
 msgstr ""
 
@@ -10773,9 +10797,6 @@ msgstr ""
 msgid "Warning: illegal format of entry in style list ''{0}''. Got ''{1}''"
 msgstr ""
 
-msgid "JOSM default (XML; old version)"
-msgstr ""
-
 msgid "JOSM default (MapCSS)"
 msgstr ""
 
@@ -12237,9 +12258,6 @@ msgstr ""
 msgid "Error parsing note response from server"
 msgstr ""
 
-msgid "Error encoding string: {0}"
-msgstr ""
-
 msgid "(Code={0})"
 msgstr ""
 
@@ -12597,25 +12615,25 @@ msgstr ""
 msgid "Read protocol version"
 msgstr ""
 
-msgid "Cannot start remotecontrol server on port {0}: {1}"
+msgid "Cannot start IPv4 remotecontrol server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Accepting connections on {0}:{1}"
+msgid "Cannot start IPv6 remotecontrol server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Server stopped."
+msgid "RemoteControl::Accepting remote connections on {0}:{1}"
 msgstr ""
 
-msgid "Cannot start remotecontrol https server on port {0}: {1}"
+msgid "RemoteControl::Server {0}:{1} stopped."
 msgstr ""
 
-msgid "Unable to initialize Remote Control HTTPS Server"
+msgid "Cannot start IPv4 remotecontrol https server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Accepting secure connections on {0}:{1}"
+msgid "Cannot start IPv6 remotecontrol https server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Server (https) stopped."
+msgid "RemoteControl::Accepting secure remote connections on {0}:{1}"
 msgstr ""
 
 msgid "Remote Control has been asked to create a new node."
@@ -14283,9 +14301,6 @@ msgstr ""
 msgid "Metropole Ruhr: Luftbilder (10 cm)"
 msgstr ""
 
-msgid "SN Luftbilder, Straßennetz, Administrative Grenzen"
-msgstr ""
-
 msgid "Drone Imagery (Haiti)"
 msgstr ""
 
@@ -15146,6 +15161,11 @@ msgid ""
 "bounding box"
 msgstr ""
 
+msgid ""
+"Recommends categories/tags on newly created OSM entities by analysing "
+"spatial entities into training features and using SVM classification"
+msgstr ""
+
 msgid "Import/export OSM data in PBF format"
 msgstr ""
 
@@ -18846,7 +18866,10 @@ msgstr ""
 msgid "Suction pumpout"
 msgstr ""
 
-msgid "Gravity dump station"
+msgid "Gravity drain for hose"
+msgstr ""
+
+msgid "Casette or Elsan Disposal"
 msgstr ""
 
 msgid "Operation times"
@@ -19350,6 +19373,10 @@ msgid "shed"
 msgstr ""
 
 msgctxt "building"
+msgid "storage_tank"
+msgstr ""
+
+msgctxt "building"
 msgid "cowshed"
 msgstr ""
 
@@ -19462,6 +19489,41 @@ msgstr ""
 msgid "Gasometer"
 msgstr ""
 
+msgid "Storage Tank"
+msgstr ""
+
+msgctxt "content"
+msgid "fuel"
+msgstr ""
+
+msgctxt "content"
+msgid "manure"
+msgstr ""
+
+msgctxt "content"
+msgid "oil"
+msgstr ""
+
+msgctxt "content"
+msgid "sewage"
+msgstr ""
+
+msgctxt "content"
+msgid "silage"
+msgstr ""
+
+msgctxt "content"
+msgid "slurry"
+msgstr ""
+
+msgctxt "content"
+msgid "water"
+msgstr ""
+
+msgctxt "content"
+msgid "wine"
+msgstr ""
+
 msgid "Bunker Silo"
 msgstr ""
 
@@ -22913,6 +22975,33 @@ msgstr ""
 msgid "Could not read NanoLog file:"
 msgstr ""
 
+msgid "OSM Recommendation"
+msgstr ""
+
+msgid "Recommend categories to your newly created instances."
+msgstr ""
+
+msgid "Training process configuration"
+msgstr ""
+
+msgid "Model Settings"
+msgstr ""
+
+msgid "Select objects or create new objects and get recommendation."
+msgstr ""
+
+msgid "Add Recommendation"
+msgstr ""
+
+msgid "Add a recommended key/value pair to your object"
+msgstr ""
+
+msgid "Train a Model"
+msgstr ""
+
+msgid "Start the training engine!"
+msgstr ""
+
 msgid "Edit opening hours"
 msgstr ""
 
diff --git a/i18n/po/pa.po b/i18n/po/pa.po
index 9dd330c..7dab5ec 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-04-27 03:33+0200\n"
+"POT-Creation-Date: 2015-05-12 03:33+0200\n"
 "PO-Revision-Date: 2011-05-06 15:52+0000\n"
 "Last-Translator: A S Alam <aalam at users.sf.net>\n"
 "Language-Team: Punjabi <pa at li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Launchpad-Export-Date: 2015-04-27 04:52+0000\n"
-"X-Generator: Launchpad (build 17430)\n"
+"X-Launchpad-Export-Date: 2015-05-12 04:52+0000\n"
+"X-Generator: Launchpad (build 17487)\n"
 "Language: pa\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -1468,6 +1468,9 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Some irrelevant nodes have been removed from the selection"
+msgstr ""
+
 msgid "Undo"
 msgstr ""
 
@@ -3065,6 +3068,11 @@ msgstr ""
 msgid "Failed to persist preferences to ''{0}''"
 msgstr ""
 
+msgid ""
+"Try enabling IPv6 network, prefering IPv6 over IPv4 (only works on early "
+"startup)."
+msgstr ""
+
 msgid " (at line {0}, column {1})"
 msgstr ""
 
@@ -3693,6 +3701,15 @@ msgstr ""
 msgid "Number of lane dependent values inconsistent in backward direction"
 msgstr ""
 
+msgid "Long segments"
+msgstr ""
+
+msgid "This tests for long way segments, which are usually errors."
+msgstr ""
+
+msgid "Very long segment of {0} kilometers"
+msgstr ""
+
 msgid "Tag checker (MapCSS based)"
 msgstr ""
 
@@ -4522,6 +4539,18 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
+msgid ""
+"Detected useable IPv6 network, prefering IPv6 over IPv4 after next restart."
+msgstr ""
+
+msgid "Detected useable IPv6 network, prefering IPv6 over IPv4."
+msgstr ""
+
+msgid ""
+"Detected no useable IPv6 network, prefering IPv4 over IPv6 after next "
+"restart."
+msgstr ""
+
 msgid "Unsaved osm data"
 msgstr ""
 
@@ -6200,14 +6229,6 @@ msgstr ""
 msgid "Only launching info browsers for the first {0} of {1} selected users"
 msgstr ""
 
-msgid ""
-"<html>Failed to create an URL because the encoding ''{0}''<br>was missing on "
-"this system.</html>"
-msgstr ""
-
-msgid "Missing encoding"
-msgstr ""
-
 msgid "Author"
 msgstr ""
 
@@ -10662,6 +10683,9 @@ msgstr ""
 msgid "Maximum concurrent downloads: "
 msgstr ""
 
+msgid "Maximum concurrent downloads per host: "
+msgstr ""
+
 msgid "Maximum elements in disk cache: "
 msgstr ""
 
@@ -10764,9 +10788,6 @@ msgstr ""
 msgid "Warning: illegal format of entry in style list ''{0}''. Got ''{1}''"
 msgstr ""
 
-msgid "JOSM default (XML; old version)"
-msgstr ""
-
 msgid "JOSM default (MapCSS)"
 msgstr ""
 
@@ -12228,9 +12249,6 @@ msgstr ""
 msgid "Error parsing note response from server"
 msgstr ""
 
-msgid "Error encoding string: {0}"
-msgstr ""
-
 msgid "(Code={0})"
 msgstr ""
 
@@ -12588,25 +12606,25 @@ msgstr ""
 msgid "Read protocol version"
 msgstr ""
 
-msgid "Cannot start remotecontrol server on port {0}: {1}"
+msgid "Cannot start IPv4 remotecontrol server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Accepting connections on {0}:{1}"
+msgid "Cannot start IPv6 remotecontrol server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Server stopped."
+msgid "RemoteControl::Accepting remote connections on {0}:{1}"
 msgstr ""
 
-msgid "Cannot start remotecontrol https server on port {0}: {1}"
+msgid "RemoteControl::Server {0}:{1} stopped."
 msgstr ""
 
-msgid "Unable to initialize Remote Control HTTPS Server"
+msgid "Cannot start IPv4 remotecontrol https server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Accepting secure connections on {0}:{1}"
+msgid "Cannot start IPv6 remotecontrol https server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Server (https) stopped."
+msgid "RemoteControl::Accepting secure remote connections on {0}:{1}"
 msgstr ""
 
 msgid "Remote Control has been asked to create a new node."
@@ -14274,9 +14292,6 @@ msgstr ""
 msgid "Metropole Ruhr: Luftbilder (10 cm)"
 msgstr ""
 
-msgid "SN Luftbilder, Straßennetz, Administrative Grenzen"
-msgstr ""
-
 msgid "Drone Imagery (Haiti)"
 msgstr ""
 
@@ -15137,6 +15152,11 @@ msgid ""
 "bounding box"
 msgstr ""
 
+msgid ""
+"Recommends categories/tags on newly created OSM entities by analysing "
+"spatial entities into training features and using SVM classification"
+msgstr ""
+
 msgid "Import/export OSM data in PBF format"
 msgstr ""
 
@@ -18837,7 +18857,10 @@ msgstr ""
 msgid "Suction pumpout"
 msgstr ""
 
-msgid "Gravity dump station"
+msgid "Gravity drain for hose"
+msgstr ""
+
+msgid "Casette or Elsan Disposal"
 msgstr ""
 
 msgid "Operation times"
@@ -19341,6 +19364,10 @@ msgid "shed"
 msgstr ""
 
 msgctxt "building"
+msgid "storage_tank"
+msgstr ""
+
+msgctxt "building"
 msgid "cowshed"
 msgstr ""
 
@@ -19453,6 +19480,41 @@ msgstr ""
 msgid "Gasometer"
 msgstr ""
 
+msgid "Storage Tank"
+msgstr ""
+
+msgctxt "content"
+msgid "fuel"
+msgstr ""
+
+msgctxt "content"
+msgid "manure"
+msgstr ""
+
+msgctxt "content"
+msgid "oil"
+msgstr ""
+
+msgctxt "content"
+msgid "sewage"
+msgstr ""
+
+msgctxt "content"
+msgid "silage"
+msgstr ""
+
+msgctxt "content"
+msgid "slurry"
+msgstr ""
+
+msgctxt "content"
+msgid "water"
+msgstr ""
+
+msgctxt "content"
+msgid "wine"
+msgstr ""
+
 msgid "Bunker Silo"
 msgstr ""
 
@@ -22904,6 +22966,33 @@ msgstr ""
 msgid "Could not read NanoLog file:"
 msgstr ""
 
+msgid "OSM Recommendation"
+msgstr ""
+
+msgid "Recommend categories to your newly created instances."
+msgstr ""
+
+msgid "Training process configuration"
+msgstr ""
+
+msgid "Model Settings"
+msgstr ""
+
+msgid "Select objects or create new objects and get recommendation."
+msgstr ""
+
+msgid "Add Recommendation"
+msgstr ""
+
+msgid "Add a recommended key/value pair to your object"
+msgstr ""
+
+msgid "Train a Model"
+msgstr ""
+
+msgid "Start the training engine!"
+msgstr ""
+
 msgid "Edit opening hours"
 msgstr ""
 
diff --git a/i18n/po/pl.po b/i18n/po/pl.po
index 7649062..4503a99 100644
--- a/i18n/po/pl.po
+++ b/i18n/po/pl.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: josm\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-04-27 03:33+0200\n"
-"PO-Revision-Date: 2015-04-21 15:02+0000\n"
+"POT-Creation-Date: 2015-05-12 03:33+0200\n"
+"PO-Revision-Date: 2015-05-10 22:43+0000\n"
 "Last-Translator: Daniel Koć <daniel at xn--ko-wla.pl>\n"
 "Language-Team: Polish <josm-lang-pl at googlegroups.com>\n"
 "MIME-Version: 1.0\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-04-27 04:53+0000\n"
-"X-Generator: Launchpad (build 17430)\n"
+"X-Launchpad-Export-Date: 2015-05-12 04:53+0000\n"
+"X-Generator: Launchpad (build 17487)\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"
@@ -1616,6 +1616,9 @@ msgstr[0] "Powiązana linia zniknie po odłączeniu wybranego węzła."
 msgstr[1] "Powiązana linia zniknie po odłączeniu wybranych węzłów."
 msgstr[2] "Powiązana linia zniknie po odłączeniu wybranych węzłów."
 
+msgid "Some irrelevant nodes have been removed from the selection"
+msgstr ""
+
 msgid "Undo"
 msgstr "Cofnij"
 
@@ -3389,6 +3392,11 @@ msgstr "Warstwa: {0}"
 msgid "Failed to persist preferences to ''{0}''"
 msgstr "Nie udało się zapisać preferencji w ''{0}''"
 
+msgid ""
+"Try enabling IPv6 network, prefering IPv6 over IPv4 (only works on early "
+"startup)."
+msgstr ""
+
 msgid " (at line {0}, column {1})"
 msgstr " (linia {0}, kolumna {1})"
 
@@ -4051,6 +4059,15 @@ msgstr "Niespójne wartości zależne od liczby pasów w kierunku ruchu"
 msgid "Number of lane dependent values inconsistent in backward direction"
 msgstr "Niespójne wartości zależne od liczby pasów w przeciwnym kierunku"
 
+msgid "Long segments"
+msgstr ""
+
+msgid "This tests for long way segments, which are usually errors."
+msgstr ""
+
+msgid "Very long segment of {0} kilometers"
+msgstr ""
+
 msgid "Tag checker (MapCSS based)"
 msgstr "Walidator tagów (bazujący na MapCSS)"
 
@@ -4917,6 +4934,18 @@ msgstr[0] "JOSM działa w trybie offline. Ten zasób nie będzie dostępny: {0}"
 msgstr[1] "JOSM działa w trybie offline. Te zasoby nie będą dostępne: {0}"
 msgstr[2] "JOSM działa w trybie offline. Te zasoby nie będą dostępne: {0}"
 
+msgid ""
+"Detected useable IPv6 network, prefering IPv6 over IPv4 after next restart."
+msgstr ""
+
+msgid "Detected useable IPv6 network, prefering IPv6 over IPv4."
+msgstr ""
+
+msgid ""
+"Detected no useable IPv6 network, prefering IPv4 over IPv6 after next "
+"restart."
+msgstr ""
+
 msgid "Unsaved osm data"
 msgstr "Niezapisane dane OSM"
 
@@ -6721,16 +6750,6 @@ msgstr "Przechodzi do strony www z informacjami o tym użytkowniku."
 msgid "Only launching info browsers for the first {0} of {1} selected users"
 msgstr ""
 
-msgid ""
-"<html>Failed to create an URL because the encoding ''{0}''<br>was missing on "
-"this system.</html>"
-msgstr ""
-"<html>Błąd tworzenia URL ponieważ brakuje kodowania ''{0}''<br>w tym "
-"systemie.</html>"
-
-msgid "Missing encoding"
-msgstr "Brakujące kodowanie"
-
 msgid "Author"
 msgstr "Autor"
 
@@ -11606,6 +11625,9 @@ msgstr "Katalog buforowania kafelków: "
 msgid "Maximum concurrent downloads: "
 msgstr ""
 
+msgid "Maximum concurrent downloads per host: "
+msgstr ""
+
 msgid "Maximum elements in disk cache: "
 msgstr ""
 
@@ -11721,9 +11743,6 @@ msgstr ""
 "Ostrzeżenie: nieprawidłowy format pozycji w liście stylu ''{0}''. Otrzymano "
 "''{1}''"
 
-msgid "JOSM default (XML; old version)"
-msgstr "JOSM domyślny (XML; stara wersja)"
-
 msgid "JOSM default (MapCSS)"
 msgstr "JOSM domyślny (MapCSS)"
 
@@ -13264,9 +13283,6 @@ msgstr "Wysyłanie uwag nie powiodło się"
 msgid "Error parsing note response from server"
 msgstr ""
 
-msgid "Error encoding string: {0}"
-msgstr ""
-
 msgid "(Code={0})"
 msgstr "(Kod={0})"
 
@@ -13637,25 +13653,25 @@ msgstr "Utwórz nowe obiekty"
 msgid "Read protocol version"
 msgstr "Odczytaj wersję protokołu"
 
-msgid "Cannot start remotecontrol server on port {0}: {1}"
+msgid "Cannot start IPv4 remotecontrol server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Accepting connections on {0}:{1}"
+msgid "Cannot start IPv6 remotecontrol server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Server stopped."
+msgid "RemoteControl::Accepting remote connections on {0}:{1}"
 msgstr ""
 
-msgid "Cannot start remotecontrol https server on port {0}: {1}"
+msgid "RemoteControl::Server {0}:{1} stopped."
 msgstr ""
 
-msgid "Unable to initialize Remote Control HTTPS Server"
+msgid "Cannot start IPv4 remotecontrol https server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Accepting secure connections on {0}:{1}"
+msgid "Cannot start IPv6 remotecontrol https server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Server (https) stopped."
+msgid "RemoteControl::Accepting secure remote connections on {0}:{1}"
 msgstr ""
 
 msgid "Remote Control has been asked to create a new node."
@@ -15411,9 +15427,6 @@ msgstr ""
 msgid "Metropole Ruhr: Luftbilder (10 cm)"
 msgstr ""
 
-msgid "SN Luftbilder, Straßennetz, Administrative Grenzen"
-msgstr ""
-
 msgid "Drone Imagery (Haiti)"
 msgstr ""
 
@@ -16294,6 +16307,11 @@ msgstr ""
 "Pobierz listę błędów z serwisu Osm Inspector i wyświetl je w bieżącym "
 "obszarze edycji JOSM"
 
+msgid ""
+"Recommends categories/tags on newly created OSM entities by analysing "
+"spatial entities into training features and using SVM classification"
+msgstr ""
+
 msgid "Import/export OSM data in PBF format"
 msgstr "Import/eksport danych OSM w formacie PBF"
 
@@ -19263,7 +19281,7 @@ msgid "Microbrewery"
 msgstr "Mikrobrowar"
 
 msgid "Outdoor seating"
-msgstr ""
+msgstr "Ogródek"
 
 msgid "Fast Food"
 msgstr "Fast food"
@@ -19991,12 +20009,15 @@ msgid "Waste Disposal/Dumpster"
 msgstr "Miejsca składowania śmieci"
 
 msgid "Sanitary Dump Station"
-msgstr ""
+msgstr "Punkt składowania nieczystości"
 
 msgid "Suction pumpout"
 msgstr ""
 
-msgid "Gravity dump station"
+msgid "Gravity drain for hose"
+msgstr ""
+
+msgid "Casette or Elsan Disposal"
 msgstr ""
 
 msgid "Operation times"
@@ -20500,6 +20521,10 @@ msgid "shed"
 msgstr "szopa"
 
 msgctxt "building"
+msgid "storage_tank"
+msgstr ""
+
+msgctxt "building"
 msgid "cowshed"
 msgstr "obora"
 
@@ -20612,6 +20637,41 @@ msgstr "Wiatrak"
 msgid "Gasometer"
 msgstr "Zbiornik gazu"
 
+msgid "Storage Tank"
+msgstr ""
+
+msgctxt "content"
+msgid "fuel"
+msgstr ""
+
+msgctxt "content"
+msgid "manure"
+msgstr ""
+
+msgctxt "content"
+msgid "oil"
+msgstr ""
+
+msgctxt "content"
+msgid "sewage"
+msgstr ""
+
+msgctxt "content"
+msgid "silage"
+msgstr ""
+
+msgctxt "content"
+msgid "slurry"
+msgstr ""
+
+msgctxt "content"
+msgid "water"
+msgstr ""
+
+msgctxt "content"
+msgid "wine"
+msgstr ""
+
 msgid "Bunker Silo"
 msgstr "Silos"
 
@@ -24076,6 +24136,33 @@ msgstr ""
 msgid "Could not read NanoLog file:"
 msgstr ""
 
+msgid "OSM Recommendation"
+msgstr ""
+
+msgid "Recommend categories to your newly created instances."
+msgstr ""
+
+msgid "Training process configuration"
+msgstr ""
+
+msgid "Model Settings"
+msgstr ""
+
+msgid "Select objects or create new objects and get recommendation."
+msgstr ""
+
+msgid "Add Recommendation"
+msgstr ""
+
+msgid "Add a recommended key/value pair to your object"
+msgstr ""
+
+msgid "Train a Model"
+msgstr ""
+
+msgid "Start the training engine!"
+msgstr ""
+
 msgid "Edit opening hours"
 msgstr "Edytuj godziny otwarcia"
 
diff --git a/i18n/po/pt.po b/i18n/po/pt.po
index f06108d..9730e49 100644
--- a/i18n/po/pt.po
+++ b/i18n/po/pt.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: josm\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-04-27 03:33+0200\n"
+"POT-Creation-Date: 2015-05-12 03:33+0200\n"
 "PO-Revision-Date: 2015-03-15 00:41+0000\n"
 "Last-Translator: Rui <xande6ruz at yandex.com>\n"
 "Language-Team: Portuguese <pt 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-04-27 04:53+0000\n"
-"X-Generator: Launchpad (build 17430)\n"
+"X-Launchpad-Export-Date: 2015-05-12 04:53+0000\n"
+"X-Generator: Launchpad (build 17487)\n"
 "Language: pt\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -1624,6 +1624,9 @@ msgid_plural ""
 msgstr[0] "A linha afetada desaparecerá após desligar o nó selecionado."
 msgstr[1] "A linha afetada desaparecerá após desligar os nós selecionados."
 
+msgid "Some irrelevant nodes have been removed from the selection"
+msgstr ""
+
 msgid "Undo"
 msgstr "Desfazer"
 
@@ -3383,6 +3386,11 @@ msgstr "Camada: {0}"
 msgid "Failed to persist preferences to ''{0}''"
 msgstr ""
 
+msgid ""
+"Try enabling IPv6 network, prefering IPv6 over IPv4 (only works on early "
+"startup)."
+msgstr ""
+
 msgid " (at line {0}, column {1})"
 msgstr " (na linha {0}, coluna {1})"
 
@@ -4064,6 +4072,15 @@ msgid "Number of lane dependent values inconsistent in backward direction"
 msgstr ""
 "Inconcistência no número de valores dependente de faixas na direção inversa."
 
+msgid "Long segments"
+msgstr ""
+
+msgid "This tests for long way segments, which are usually errors."
+msgstr ""
+
+msgid "Very long segment of {0} kilometers"
+msgstr ""
+
 msgid "Tag checker (MapCSS based)"
 msgstr "Verificador de etiquetas (baseado em MapCSS)"
 
@@ -4965,6 +4982,18 @@ msgstr[1] ""
 "O JOSM encontra-se no modo desligado. Os seguintes recursos não estarão "
 "disponíveis: {0}"
 
+msgid ""
+"Detected useable IPv6 network, prefering IPv6 over IPv4 after next restart."
+msgstr ""
+
+msgid "Detected useable IPv6 network, prefering IPv6 over IPv4."
+msgstr ""
+
+msgid ""
+"Detected no useable IPv6 network, prefering IPv4 over IPv6 after next "
+"restart."
+msgstr ""
+
 msgid "Unsaved osm data"
 msgstr "Dados OpenStreetMap não gravados"
 
@@ -6799,16 +6828,6 @@ msgstr ""
 "A abrir janelas do navegador de Internet para os primeiros {0} de um total "
 "de {1} utilizadores"
 
-msgid ""
-"<html>Failed to create an URL because the encoding ''{0}''<br>was missing on "
-"this system.</html>"
-msgstr ""
-"<html>Não foi possível criar o URL porque a codificação ''{0}''<br>não "
-"existe no sistema.</html>"
-
-msgid "Missing encoding"
-msgstr "Falta a codificação"
-
 msgid "Author"
 msgstr "Autor"
 
@@ -11873,6 +11892,9 @@ msgstr "Pasta para armazenar as telas temporariamente: "
 msgid "Maximum concurrent downloads: "
 msgstr ""
 
+msgid "Maximum concurrent downloads per host: "
+msgstr ""
+
 msgid "Maximum elements in disk cache: "
 msgstr ""
 
@@ -11987,9 +12009,6 @@ msgstr ""
 msgid "Warning: illegal format of entry in style list ''{0}''. Got ''{1}''"
 msgstr "Aviso: formato errado na lista de estilos ''{0}''. Obteve-se ''{1}''"
 
-msgid "JOSM default (XML; old version)"
-msgstr "Padrão do JOSM (XML; versão antiga)"
-
 msgid "JOSM default (MapCSS)"
 msgstr "Padrão do JOSM (MapCSS)"
 
@@ -13637,9 +13656,6 @@ msgid "Error parsing note response from server"
 msgstr ""
 "Erro ao processar a resposta do servidor sobre os erros no mapa reportados"
 
-msgid "Error encoding string: {0}"
-msgstr "Erro ao codificar a expressão: {0}"
-
 msgid "(Code={0})"
 msgstr "(Código={0})"
 
@@ -14028,27 +14044,26 @@ msgstr "Criar objetos"
 msgid "Read protocol version"
 msgstr "Ler a versão do protocolo"
 
-msgid "Cannot start remotecontrol server on port {0}: {1}"
+msgid "Cannot start IPv4 remotecontrol server on port {0}: {1}"
 msgstr ""
-"Não foi possível iniciar o servidor de controlo remoto na porta {0}: {1}"
 
-msgid "RemoteControl::Accepting connections on {0}:{1}"
-msgstr "Controlo Remoto::A aceitar ligações em {0}:{1}"
+msgid "Cannot start IPv6 remotecontrol server on port {0}: {1}"
+msgstr ""
 
-msgid "RemoteControl::Server stopped."
-msgstr "ControloRemoto::Servidor parado."
+msgid "RemoteControl::Accepting remote connections on {0}:{1}"
+msgstr ""
 
-msgid "Cannot start remotecontrol https server on port {0}: {1}"
-msgstr "Não foi possível iniciar o servidor https na porta {0}: {1}"
+msgid "RemoteControl::Server {0}:{1} stopped."
+msgstr ""
 
-msgid "Unable to initialize Remote Control HTTPS Server"
-msgstr "Não foi possível inicializar o servidor HTTPS do Controlo Remoto"
+msgid "Cannot start IPv4 remotecontrol https server on port {0}: {1}"
+msgstr ""
 
-msgid "RemoteControl::Accepting secure connections on {0}:{1}"
-msgstr "Controlo Remoto::A aceitar ligações seguras em {0}:{1}"
+msgid "Cannot start IPv6 remotecontrol https server on port {0}: {1}"
+msgstr ""
 
-msgid "RemoteControl::Server (https) stopped."
-msgstr "Controlo Remoto::O servidor (https) parou."
+msgid "RemoteControl::Accepting secure remote connections on {0}:{1}"
+msgstr ""
 
 msgid "Remote Control has been asked to create a new node."
 msgstr "Foi pedido ao Controlo Remoto para criar um nó."
@@ -15986,9 +16001,6 @@ msgstr "NRW-Atlas: Carta Topográfica 1:10000"
 msgid "Metropole Ruhr: Luftbilder (10 cm)"
 msgstr "Metropole Ruhr: Luftbilder (10 cm)"
 
-msgid "SN Luftbilder, Straßennetz, Administrative Grenzen"
-msgstr ""
-
 msgid "Drone Imagery (Haiti)"
 msgstr "Imagens de Drone (Haiti)"
 
@@ -16933,6 +16945,11 @@ msgstr ""
 "Obtém erros nos mapas provenientes do site Osm Isnspector e mostra-os na "
 "área de limites descarregada do JOSM"
 
+msgid ""
+"Recommends categories/tags on newly created OSM entities by analysing "
+"spatial entities into training features and using SVM classification"
+msgstr ""
+
 msgid "Import/export OSM data in PBF format"
 msgstr "Importar/exportar dados OSM no formato PBF"
 
@@ -20751,7 +20768,10 @@ msgstr ""
 msgid "Suction pumpout"
 msgstr ""
 
-msgid "Gravity dump station"
+msgid "Gravity drain for hose"
+msgstr ""
+
+msgid "Casette or Elsan Disposal"
 msgstr ""
 
 msgid "Operation times"
@@ -21257,6 +21277,10 @@ msgid "shed"
 msgstr ""
 
 msgctxt "building"
+msgid "storage_tank"
+msgstr ""
+
+msgctxt "building"
 msgid "cowshed"
 msgstr "curral de vacas"
 
@@ -21369,6 +21393,41 @@ msgstr "Moinho de Vento"
 msgid "Gasometer"
 msgstr "Gasómetro (depósito)"
 
+msgid "Storage Tank"
+msgstr ""
+
+msgctxt "content"
+msgid "fuel"
+msgstr ""
+
+msgctxt "content"
+msgid "manure"
+msgstr ""
+
+msgctxt "content"
+msgid "oil"
+msgstr ""
+
+msgctxt "content"
+msgid "sewage"
+msgstr ""
+
+msgctxt "content"
+msgid "silage"
+msgstr ""
+
+msgctxt "content"
+msgid "slurry"
+msgstr ""
+
+msgctxt "content"
+msgid "water"
+msgstr ""
+
+msgctxt "content"
+msgid "wine"
+msgstr ""
+
 msgid "Bunker Silo"
 msgstr "Silo em Corredor/Trincheira"
 
@@ -24886,6 +24945,33 @@ msgstr "Abrir um ficheiro NanoLog..."
 msgid "Could not read NanoLog file:"
 msgstr "Não foi possível ler o ficheiro NanoLog:"
 
+msgid "OSM Recommendation"
+msgstr ""
+
+msgid "Recommend categories to your newly created instances."
+msgstr ""
+
+msgid "Training process configuration"
+msgstr ""
+
+msgid "Model Settings"
+msgstr ""
+
+msgid "Select objects or create new objects and get recommendation."
+msgstr ""
+
+msgid "Add Recommendation"
+msgstr ""
+
+msgid "Add a recommended key/value pair to your object"
+msgstr ""
+
+msgid "Train a Model"
+msgstr ""
+
+msgid "Start the training engine!"
+msgstr ""
+
 msgid "Edit opening hours"
 msgstr "Editar horário de abertura"
 
diff --git a/i18n/po/pt_BR.po b/i18n/po/pt_BR.po
index 84dde19..b042306 100644
--- a/i18n/po/pt_BR.po
+++ b/i18n/po/pt_BR.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: josm\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-04-27 03:33+0200\n"
+"POT-Creation-Date: 2015-05-12 03:33+0200\n"
 "PO-Revision-Date: 2015-04-24 14:11+0000\n"
 "Last-Translator: Nelson A. de Oliveira <naoliv at debian.org>\n"
 "Language-Team: Português Brasileiro <gnome-pt_br-list at gnome.org>\n"
@@ -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-04-27 05:02+0000\n"
-"X-Generator: Launchpad (build 17430)\n"
+"X-Launchpad-Export-Date: 2015-05-12 05:02+0000\n"
+"X-Generator: Launchpad (build 17487)\n"
 "Language: pt_BR\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -1607,6 +1607,9 @@ msgstr[0] "A via afetada irá desaparecer após desconectar o nó selecionado."
 msgstr[1] ""
 "A via afetada irá desaparecer após desconectar os nós selecionados."
 
+msgid "Some irrelevant nodes have been removed from the selection"
+msgstr ""
+
 msgid "Undo"
 msgstr "Desfazer"
 
@@ -3354,6 +3357,11 @@ msgstr "Camada: {0}"
 msgid "Failed to persist preferences to ''{0}''"
 msgstr "Falha para manter preferências em ''{0}''"
 
+msgid ""
+"Try enabling IPv6 network, prefering IPv6 over IPv4 (only works on early "
+"startup)."
+msgstr ""
+
 msgid " (at line {0}, column {1})"
 msgstr " (na linha {0}, coluna {1})"
 
@@ -4028,6 +4036,15 @@ msgstr "Valor do número de faixas dependentes inconsistente à frente"
 msgid "Number of lane dependent values inconsistent in backward direction"
 msgstr "Valor do número de faixas dependentes inconsistente atrás"
 
+msgid "Long segments"
+msgstr ""
+
+msgid "This tests for long way segments, which are usually errors."
+msgstr ""
+
+msgid "Very long segment of {0} kilometers"
+msgstr ""
+
 msgid "Tag checker (MapCSS based)"
 msgstr "Verificador de tag (MapCSS based)"
 
@@ -4896,6 +4913,18 @@ msgstr[0] ""
 msgstr[1] ""
 "JOSM está rodando em modo offline. Estes recursos não estarão disponível: {0}"
 
+msgid ""
+"Detected useable IPv6 network, prefering IPv6 over IPv4 after next restart."
+msgstr ""
+
+msgid "Detected useable IPv6 network, prefering IPv6 over IPv4."
+msgstr ""
+
+msgid ""
+"Detected no useable IPv6 network, prefering IPv4 over IPv6 after next "
+"restart."
+msgstr ""
+
 msgid "Unsaved osm data"
 msgstr "Dado osm não salvo"
 
@@ -6729,16 +6758,6 @@ msgstr ""
 "Mostrando apenas informações dos navegadores para os primeiros {0} de {1} "
 "usuários selecionados"
 
-msgid ""
-"<html>Failed to create an URL because the encoding ''{0}''<br>was missing on "
-"this system.</html>"
-msgstr ""
-"<html>Falha ao criar a URL pois a codificação ''{0}''<br>não existe no "
-"sistema operacional.</html>"
-
-msgid "Missing encoding"
-msgstr "Falta de codificação"
-
 msgid "Author"
 msgstr "Autor"
 
@@ -11744,6 +11763,9 @@ msgstr "Diretória de cahce de quadros: "
 msgid "Maximum concurrent downloads: "
 msgstr ""
 
+msgid "Maximum concurrent downloads per host: "
+msgstr ""
+
 msgid "Maximum elements in disk cache: "
 msgstr ""
 
@@ -11858,9 +11880,6 @@ msgid "Warning: illegal format of entry in style list ''{0}''. Got ''{1}''"
 msgstr ""
 "Aviso: formato de entrada na lista estilos ilegal ''{0}''. Tem ''{1}''"
 
-msgid "JOSM default (XML; old version)"
-msgstr "JOSM Padrão (XML; versão antiga)"
-
 msgid "JOSM default (MapCSS)"
 msgstr "JOSM Padrão (MapCSS)"
 
@@ -13478,9 +13497,6 @@ msgstr "Upload de notas falhou"
 msgid "Error parsing note response from server"
 msgstr "Erro ao analisar resposta do servidor"
 
-msgid "Error encoding string: {0}"
-msgstr "Erro na codificação da string:{0}"
-
 msgid "(Code={0})"
 msgstr "(Código={0})"
 
@@ -13872,27 +13888,26 @@ msgstr "Criar novos objetos"
 msgid "Read protocol version"
 msgstr "Versão do protocolo de leitura"
 
-msgid "Cannot start remotecontrol server on port {0}: {1}"
-msgstr "Não é possível iniciar o servidor remotecontrol na porta {0}: {1}"
+msgid "Cannot start IPv4 remotecontrol server on port {0}: {1}"
+msgstr ""
 
-msgid "RemoteControl::Accepting connections on {0}:{1}"
-msgstr "ControleRemoto::Aceitando conexões em {0}:{1}"
+msgid "Cannot start IPv6 remotecontrol server on port {0}: {1}"
+msgstr ""
 
-msgid "RemoteControl::Server stopped."
-msgstr "RemoteControl::Servidor parou."
+msgid "RemoteControl::Accepting remote connections on {0}:{1}"
+msgstr ""
 
-msgid "Cannot start remotecontrol https server on port {0}: {1}"
+msgid "RemoteControl::Server {0}:{1} stopped."
 msgstr ""
-"Não é possível iniciar o servidor https remotecontrol na porta {0}: {1}"
 
-msgid "Unable to initialize Remote Control HTTPS Server"
-msgstr "Não é possível inicializar Servidor de Controle Remoto HTTPS"
+msgid "Cannot start IPv4 remotecontrol https server on port {0}: {1}"
+msgstr ""
 
-msgid "RemoteControl::Accepting secure connections on {0}:{1}"
-msgstr "ControleRemoto::Aceitando conexões seguras em {0}:{1}"
+msgid "Cannot start IPv6 remotecontrol https server on port {0}: {1}"
+msgstr ""
 
-msgid "RemoteControl::Server (https) stopped."
-msgstr "RemoteControl::Servidor (https) parou."
+msgid "RemoteControl::Accepting secure remote connections on {0}:{1}"
+msgstr ""
 
 msgid "Remote Control has been asked to create a new node."
 msgstr "Controle remoto informou da criação de um novo nó."
@@ -15822,9 +15837,6 @@ msgstr "NRW-Atlas: Topographische Karte 1:10000"
 msgid "Metropole Ruhr: Luftbilder (10 cm)"
 msgstr "Metropole Ruhr: Luftbilder (10 cm)"
 
-msgid "SN Luftbilder, Straßennetz, Administrative Grenzen"
-msgstr ""
-
 msgid "Drone Imagery (Haiti)"
 msgstr "Drone Imagery (Haiti)"
 
@@ -16757,6 +16769,11 @@ msgid ""
 msgstr ""
 "Pegar os erros de Inspetor Osm e exibi-lo na caixa delimitadora JOSM atual"
 
+msgid ""
+"Recommends categories/tags on newly created OSM entities by analysing "
+"spatial entities into training features and using SVM classification"
+msgstr ""
+
 msgid "Import/export OSM data in PBF format"
 msgstr "Importar/exportar dados OSM no formato PBF"
 
@@ -20522,7 +20539,10 @@ msgstr ""
 msgid "Suction pumpout"
 msgstr ""
 
-msgid "Gravity dump station"
+msgid "Gravity drain for hose"
+msgstr ""
+
+msgid "Casette or Elsan Disposal"
 msgstr ""
 
 msgid "Operation times"
@@ -21026,6 +21046,10 @@ msgid "shed"
 msgstr "cabana"
 
 msgctxt "building"
+msgid "storage_tank"
+msgstr ""
+
+msgctxt "building"
 msgid "cowshed"
 msgstr "estábulo"
 
@@ -21138,6 +21162,41 @@ msgstr "Moinho de Vento"
 msgid "Gasometer"
 msgstr "Gasômetro"
 
+msgid "Storage Tank"
+msgstr ""
+
+msgctxt "content"
+msgid "fuel"
+msgstr ""
+
+msgctxt "content"
+msgid "manure"
+msgstr ""
+
+msgctxt "content"
+msgid "oil"
+msgstr ""
+
+msgctxt "content"
+msgid "sewage"
+msgstr ""
+
+msgctxt "content"
+msgid "silage"
+msgstr ""
+
+msgctxt "content"
+msgid "slurry"
+msgstr ""
+
+msgctxt "content"
+msgid "water"
+msgstr ""
+
+msgctxt "content"
+msgid "wine"
+msgstr ""
+
 msgid "Bunker Silo"
 msgstr "Bunker Silo"
 
@@ -24651,6 +24710,33 @@ msgstr "Abrir arquivo NanoLog..."
 msgid "Could not read NanoLog file:"
 msgstr "Não foi possível ler o arquivo NanoLog:"
 
+msgid "OSM Recommendation"
+msgstr ""
+
+msgid "Recommend categories to your newly created instances."
+msgstr ""
+
+msgid "Training process configuration"
+msgstr ""
+
+msgid "Model Settings"
+msgstr ""
+
+msgid "Select objects or create new objects and get recommendation."
+msgstr ""
+
+msgid "Add Recommendation"
+msgstr ""
+
+msgid "Add a recommended key/value pair to your object"
+msgstr ""
+
+msgid "Train a Model"
+msgstr ""
+
+msgid "Start the training engine!"
+msgstr ""
+
 msgid "Edit opening hours"
 msgstr "Editar hora de funcionamento"
 
diff --git a/i18n/po/rm.po b/i18n/po/rm.po
index bbc89ec..90385b1 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-04-27 03:33+0200\n"
+"POT-Creation-Date: 2015-05-12 03:33+0200\n"
 "PO-Revision-Date: 2009-06-21 19:14+0000\n"
 "Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
 "Language-Team: Raeto-Romance <rm at li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n !=1;\n"
-"X-Launchpad-Export-Date: 2015-04-27 04:54+0000\n"
-"X-Generator: Launchpad (build 17430)\n"
+"X-Launchpad-Export-Date: 2015-05-12 04:54+0000\n"
+"X-Generator: Launchpad (build 17487)\n"
 "Language: \n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -1468,6 +1468,9 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Some irrelevant nodes have been removed from the selection"
+msgstr ""
+
 msgid "Undo"
 msgstr ""
 
@@ -3065,6 +3068,11 @@ msgstr ""
 msgid "Failed to persist preferences to ''{0}''"
 msgstr ""
 
+msgid ""
+"Try enabling IPv6 network, prefering IPv6 over IPv4 (only works on early "
+"startup)."
+msgstr ""
+
 msgid " (at line {0}, column {1})"
 msgstr ""
 
@@ -3693,6 +3701,15 @@ msgstr ""
 msgid "Number of lane dependent values inconsistent in backward direction"
 msgstr ""
 
+msgid "Long segments"
+msgstr ""
+
+msgid "This tests for long way segments, which are usually errors."
+msgstr ""
+
+msgid "Very long segment of {0} kilometers"
+msgstr ""
+
 msgid "Tag checker (MapCSS based)"
 msgstr ""
 
@@ -4522,6 +4539,18 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
+msgid ""
+"Detected useable IPv6 network, prefering IPv6 over IPv4 after next restart."
+msgstr ""
+
+msgid "Detected useable IPv6 network, prefering IPv6 over IPv4."
+msgstr ""
+
+msgid ""
+"Detected no useable IPv6 network, prefering IPv4 over IPv6 after next "
+"restart."
+msgstr ""
+
 msgid "Unsaved osm data"
 msgstr ""
 
@@ -6200,14 +6229,6 @@ msgstr ""
 msgid "Only launching info browsers for the first {0} of {1} selected users"
 msgstr ""
 
-msgid ""
-"<html>Failed to create an URL because the encoding ''{0}''<br>was missing on "
-"this system.</html>"
-msgstr ""
-
-msgid "Missing encoding"
-msgstr ""
-
 msgid "Author"
 msgstr ""
 
@@ -10662,6 +10683,9 @@ msgstr ""
 msgid "Maximum concurrent downloads: "
 msgstr ""
 
+msgid "Maximum concurrent downloads per host: "
+msgstr ""
+
 msgid "Maximum elements in disk cache: "
 msgstr ""
 
@@ -10764,9 +10788,6 @@ msgstr ""
 msgid "Warning: illegal format of entry in style list ''{0}''. Got ''{1}''"
 msgstr ""
 
-msgid "JOSM default (XML; old version)"
-msgstr ""
-
 msgid "JOSM default (MapCSS)"
 msgstr ""
 
@@ -12228,9 +12249,6 @@ msgstr ""
 msgid "Error parsing note response from server"
 msgstr ""
 
-msgid "Error encoding string: {0}"
-msgstr ""
-
 msgid "(Code={0})"
 msgstr ""
 
@@ -12588,25 +12606,25 @@ msgstr ""
 msgid "Read protocol version"
 msgstr ""
 
-msgid "Cannot start remotecontrol server on port {0}: {1}"
+msgid "Cannot start IPv4 remotecontrol server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Accepting connections on {0}:{1}"
+msgid "Cannot start IPv6 remotecontrol server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Server stopped."
+msgid "RemoteControl::Accepting remote connections on {0}:{1}"
 msgstr ""
 
-msgid "Cannot start remotecontrol https server on port {0}: {1}"
+msgid "RemoteControl::Server {0}:{1} stopped."
 msgstr ""
 
-msgid "Unable to initialize Remote Control HTTPS Server"
+msgid "Cannot start IPv4 remotecontrol https server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Accepting secure connections on {0}:{1}"
+msgid "Cannot start IPv6 remotecontrol https server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Server (https) stopped."
+msgid "RemoteControl::Accepting secure remote connections on {0}:{1}"
 msgstr ""
 
 msgid "Remote Control has been asked to create a new node."
@@ -14274,9 +14292,6 @@ msgstr ""
 msgid "Metropole Ruhr: Luftbilder (10 cm)"
 msgstr ""
 
-msgid "SN Luftbilder, Straßennetz, Administrative Grenzen"
-msgstr ""
-
 msgid "Drone Imagery (Haiti)"
 msgstr ""
 
@@ -15137,6 +15152,11 @@ msgid ""
 "bounding box"
 msgstr ""
 
+msgid ""
+"Recommends categories/tags on newly created OSM entities by analysing "
+"spatial entities into training features and using SVM classification"
+msgstr ""
+
 msgid "Import/export OSM data in PBF format"
 msgstr ""
 
@@ -18837,7 +18857,10 @@ msgstr ""
 msgid "Suction pumpout"
 msgstr ""
 
-msgid "Gravity dump station"
+msgid "Gravity drain for hose"
+msgstr ""
+
+msgid "Casette or Elsan Disposal"
 msgstr ""
 
 msgid "Operation times"
@@ -19341,6 +19364,10 @@ msgid "shed"
 msgstr ""
 
 msgctxt "building"
+msgid "storage_tank"
+msgstr ""
+
+msgctxt "building"
 msgid "cowshed"
 msgstr ""
 
@@ -19453,6 +19480,41 @@ msgstr ""
 msgid "Gasometer"
 msgstr ""
 
+msgid "Storage Tank"
+msgstr ""
+
+msgctxt "content"
+msgid "fuel"
+msgstr ""
+
+msgctxt "content"
+msgid "manure"
+msgstr ""
+
+msgctxt "content"
+msgid "oil"
+msgstr ""
+
+msgctxt "content"
+msgid "sewage"
+msgstr ""
+
+msgctxt "content"
+msgid "silage"
+msgstr ""
+
+msgctxt "content"
+msgid "slurry"
+msgstr ""
+
+msgctxt "content"
+msgid "water"
+msgstr ""
+
+msgctxt "content"
+msgid "wine"
+msgstr ""
+
 msgid "Bunker Silo"
 msgstr ""
 
@@ -22904,6 +22966,33 @@ msgstr ""
 msgid "Could not read NanoLog file:"
 msgstr ""
 
+msgid "OSM Recommendation"
+msgstr ""
+
+msgid "Recommend categories to your newly created instances."
+msgstr ""
+
+msgid "Training process configuration"
+msgstr ""
+
+msgid "Model Settings"
+msgstr ""
+
+msgid "Select objects or create new objects and get recommendation."
+msgstr ""
+
+msgid "Add Recommendation"
+msgstr ""
+
+msgid "Add a recommended key/value pair to your object"
+msgstr ""
+
+msgid "Train a Model"
+msgstr ""
+
+msgid "Start the training engine!"
+msgstr ""
+
 msgid "Edit opening hours"
 msgstr ""
 
diff --git a/i18n/po/ro.po b/i18n/po/ro.po
index 33e95ba..d97a9a9 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-04-27 03:33+0200\n"
+"POT-Creation-Date: 2015-05-12 03:33+0200\n"
 "PO-Revision-Date: 2015-02-24 11:34+0000\n"
 "Last-Translator: Ciprian <c1pr1an_43v3r at yahoo.com>\n"
 "Language-Team: Romanian <gnomero-list at lists.sourceforge.net>\n"
@@ -16,8 +16,8 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=3; plural=(n == 1 ? 0: (((n % 100 > 19) || ((n % 100 "
 "== 0) && (n != 0))) ? 2: 1));\n"
-"X-Launchpad-Export-Date: 2015-04-27 04:54+0000\n"
-"X-Generator: Launchpad (build 17430)\n"
+"X-Launchpad-Export-Date: 2015-05-12 04:54+0000\n"
+"X-Generator: Launchpad (build 17487)\n"
 "X-Poedit-Country: ROMANIA\n"
 "Language: ro\n"
 "X-Poedit-Language: Romanian\n"
@@ -1522,6 +1522,9 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Some irrelevant nodes have been removed from the selection"
+msgstr ""
+
 msgid "Undo"
 msgstr "Anulează"
 
@@ -3121,6 +3124,11 @@ msgstr "Strat: {0}"
 msgid "Failed to persist preferences to ''{0}''"
 msgstr ""
 
+msgid ""
+"Try enabling IPv6 network, prefering IPv6 over IPv4 (only works on early "
+"startup)."
+msgstr ""
+
 msgid " (at line {0}, column {1})"
 msgstr ""
 
@@ -3751,6 +3759,15 @@ msgstr ""
 msgid "Number of lane dependent values inconsistent in backward direction"
 msgstr ""
 
+msgid "Long segments"
+msgstr ""
+
+msgid "This tests for long way segments, which are usually errors."
+msgstr ""
+
+msgid "Very long segment of {0} kilometers"
+msgstr ""
+
 msgid "Tag checker (MapCSS based)"
 msgstr ""
 
@@ -4580,6 +4597,18 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
+msgid ""
+"Detected useable IPv6 network, prefering IPv6 over IPv4 after next restart."
+msgstr ""
+
+msgid "Detected useable IPv6 network, prefering IPv6 over IPv4."
+msgstr ""
+
+msgid ""
+"Detected no useable IPv6 network, prefering IPv4 over IPv6 after next "
+"restart."
+msgstr ""
+
 msgid "Unsaved osm data"
 msgstr ""
 
@@ -6260,14 +6289,6 @@ msgstr ""
 msgid "Only launching info browsers for the first {0} of {1} selected users"
 msgstr ""
 
-msgid ""
-"<html>Failed to create an URL because the encoding ''{0}''<br>was missing on "
-"this system.</html>"
-msgstr ""
-
-msgid "Missing encoding"
-msgstr ""
-
 msgid "Author"
 msgstr ""
 
@@ -10728,6 +10749,9 @@ msgstr ""
 msgid "Maximum concurrent downloads: "
 msgstr ""
 
+msgid "Maximum concurrent downloads per host: "
+msgstr ""
+
 msgid "Maximum elements in disk cache: "
 msgstr ""
 
@@ -10830,9 +10854,6 @@ msgstr ""
 msgid "Warning: illegal format of entry in style list ''{0}''. Got ''{1}''"
 msgstr ""
 
-msgid "JOSM default (XML; old version)"
-msgstr ""
-
 msgid "JOSM default (MapCSS)"
 msgstr ""
 
@@ -12295,9 +12316,6 @@ msgstr ""
 msgid "Error parsing note response from server"
 msgstr ""
 
-msgid "Error encoding string: {0}"
-msgstr ""
-
 msgid "(Code={0})"
 msgstr ""
 
@@ -12655,25 +12673,25 @@ msgstr ""
 msgid "Read protocol version"
 msgstr ""
 
-msgid "Cannot start remotecontrol server on port {0}: {1}"
+msgid "Cannot start IPv4 remotecontrol server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Accepting connections on {0}:{1}"
+msgid "Cannot start IPv6 remotecontrol server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Server stopped."
+msgid "RemoteControl::Accepting remote connections on {0}:{1}"
 msgstr ""
 
-msgid "Cannot start remotecontrol https server on port {0}: {1}"
+msgid "RemoteControl::Server {0}:{1} stopped."
 msgstr ""
 
-msgid "Unable to initialize Remote Control HTTPS Server"
+msgid "Cannot start IPv4 remotecontrol https server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Accepting secure connections on {0}:{1}"
+msgid "Cannot start IPv6 remotecontrol https server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Server (https) stopped."
+msgid "RemoteControl::Accepting secure remote connections on {0}:{1}"
 msgstr ""
 
 msgid "Remote Control has been asked to create a new node."
@@ -14341,9 +14359,6 @@ msgstr ""
 msgid "Metropole Ruhr: Luftbilder (10 cm)"
 msgstr ""
 
-msgid "SN Luftbilder, Straßennetz, Administrative Grenzen"
-msgstr ""
-
 msgid "Drone Imagery (Haiti)"
 msgstr ""
 
@@ -15204,6 +15219,11 @@ msgid ""
 "bounding box"
 msgstr ""
 
+msgid ""
+"Recommends categories/tags on newly created OSM entities by analysing "
+"spatial entities into training features and using SVM classification"
+msgstr ""
+
 msgid "Import/export OSM data in PBF format"
 msgstr ""
 
@@ -18904,7 +18924,10 @@ msgstr ""
 msgid "Suction pumpout"
 msgstr ""
 
-msgid "Gravity dump station"
+msgid "Gravity drain for hose"
+msgstr ""
+
+msgid "Casette or Elsan Disposal"
 msgstr ""
 
 msgid "Operation times"
@@ -19408,6 +19431,10 @@ msgid "shed"
 msgstr ""
 
 msgctxt "building"
+msgid "storage_tank"
+msgstr ""
+
+msgctxt "building"
 msgid "cowshed"
 msgstr ""
 
@@ -19520,6 +19547,41 @@ msgstr ""
 msgid "Gasometer"
 msgstr ""
 
+msgid "Storage Tank"
+msgstr ""
+
+msgctxt "content"
+msgid "fuel"
+msgstr ""
+
+msgctxt "content"
+msgid "manure"
+msgstr ""
+
+msgctxt "content"
+msgid "oil"
+msgstr ""
+
+msgctxt "content"
+msgid "sewage"
+msgstr ""
+
+msgctxt "content"
+msgid "silage"
+msgstr ""
+
+msgctxt "content"
+msgid "slurry"
+msgstr ""
+
+msgctxt "content"
+msgid "water"
+msgstr ""
+
+msgctxt "content"
+msgid "wine"
+msgstr ""
+
 msgid "Bunker Silo"
 msgstr ""
 
@@ -22971,6 +23033,33 @@ msgstr ""
 msgid "Could not read NanoLog file:"
 msgstr ""
 
+msgid "OSM Recommendation"
+msgstr ""
+
+msgid "Recommend categories to your newly created instances."
+msgstr ""
+
+msgid "Training process configuration"
+msgstr ""
+
+msgid "Model Settings"
+msgstr ""
+
+msgid "Select objects or create new objects and get recommendation."
+msgstr ""
+
+msgid "Add Recommendation"
+msgstr ""
+
+msgid "Add a recommended key/value pair to your object"
+msgstr ""
+
+msgid "Train a Model"
+msgstr ""
+
+msgid "Start the training engine!"
+msgstr ""
+
 msgid "Edit opening hours"
 msgstr ""
 
diff --git a/i18n/po/ru.po b/i18n/po/ru.po
index 77c3ee5..946c897 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-04-27 03:33+0200\n"
-"PO-Revision-Date: 2015-04-24 06:08+0000\n"
-"Last-Translator: Nkolay Parukhin <parukhin at gmail.com>\n"
+"POT-Creation-Date: 2015-05-12 03:33+0200\n"
+"PO-Revision-Date: 2015-05-09 04:59+0000\n"
+"Last-Translator: Aleksey Kabanov <Unknown>\n"
 "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-04-27 04:54+0000\n"
-"X-Generator: Launchpad (build 17430)\n"
+"X-Launchpad-Export-Date: 2015-05-12 04:54+0000\n"
+"X-Generator: Launchpad (build 17487)\n"
 "Language: ru_RU\n"
 
 msgid "Note"
@@ -1636,6 +1636,9 @@ msgstr[0] "Затронутая линия исчезнет после отсо
 msgstr[1] "Затронутая линия исчезнет после отсоединения выделенных точек."
 msgstr[2] "Затронутая линия исчезнет после отсоединения выделенных точек."
 
+msgid "Some irrelevant nodes have been removed from the selection"
+msgstr "Некоторые неподходящие точки были удалены из выделения"
+
 msgid "Undo"
 msgstr "Отмена"
 
@@ -3421,6 +3424,11 @@ msgstr "Слой: {0}"
 msgid "Failed to persist preferences to ''{0}''"
 msgstr "Не удалось сохранить настройки в ''{0}''"
 
+msgid ""
+"Try enabling IPv6 network, prefering IPv6 over IPv4 (only works on early "
+"startup)."
+msgstr ""
+
 msgid " (at line {0}, column {1})"
 msgstr " (в строке {0}, столбец {1})"
 
@@ -4087,6 +4095,15 @@ msgstr ""
 "Несоответствие числа значений, зависящих от полос движения, в обратном "
 "направлении"
 
+msgid "Long segments"
+msgstr "Длинные сегменты"
+
+msgid "This tests for long way segments, which are usually errors."
+msgstr "Проверка длинных сегментов линий, которые обычно являются ошибками."
+
+msgid "Very long segment of {0} kilometers"
+msgstr "Слишком длинный сегмент ({0} километров)"
+
 msgid "Tag checker (MapCSS based)"
 msgstr "Проверка тегов (основана на MapCSS)"
 
@@ -4965,6 +4982,18 @@ msgstr[1] ""
 msgstr[2] ""
 "JOSM работает в автомномном режиме. Эти ресурсы будут недоступны: {0}"
 
+msgid ""
+"Detected useable IPv6 network, prefering IPv6 over IPv4 after next restart."
+msgstr ""
+
+msgid "Detected useable IPv6 network, prefering IPv6 over IPv4."
+msgstr ""
+
+msgid ""
+"Detected no useable IPv6 network, prefering IPv4 over IPv6 after next "
+"restart."
+msgstr ""
+
 msgid "Unsaved osm data"
 msgstr "Несохранённые данные osm"
 
@@ -6811,16 +6840,6 @@ msgstr ""
 "Запуск браузеров с информацией только для первых {0} из {1} выбранных "
 "пользователей"
 
-msgid ""
-"<html>Failed to create an URL because the encoding ''{0}''<br>was missing on "
-"this system.</html>"
-msgstr ""
-"<html>Не удалось создать URL, потому что в этой системе<br>нет кодировки "
-"''{0}''.</html>"
-
-msgid "Missing encoding"
-msgstr "Отсутствует кодировка"
-
 msgid "Author"
 msgstr "Автор"
 
@@ -11873,6 +11892,9 @@ msgstr "Каталог кэша квадратов: "
 msgid "Maximum concurrent downloads: "
 msgstr "Макс. число одновременных загрузок: "
 
+msgid "Maximum concurrent downloads per host: "
+msgstr "Макс. количество одновременных загрузок с хоста: "
+
 msgid "Maximum elements in disk cache: "
 msgstr "Макс. число элементов в дисковом кэше: "
 
@@ -11989,9 +12011,6 @@ msgstr ""
 "Предупреждение: неверный формат или запись в списке стилей ''{0}''. Получено "
 "''{1}''"
 
-msgid "JOSM default (XML; old version)"
-msgstr "Стандартный JOSM (XML; старая версия)"
-
 msgid "JOSM default (MapCSS)"
 msgstr "Стандартный JOSM (MapCSS)"
 
@@ -13603,9 +13622,6 @@ msgstr "Не удалось отправить заметку"
 msgid "Error parsing note response from server"
 msgstr "Ошибка при разборе ответа сервера на отправку заметки"
 
-msgid "Error encoding string: {0}"
-msgstr "Ошибка в кодировке строки: {0}"
-
 msgid "(Code={0})"
 msgstr "(Код={0})"
 
@@ -14001,37 +14017,42 @@ msgstr "Создать новые объекты"
 msgid "Read protocol version"
 msgstr "Считать версию протокола"
 
-msgid "Cannot start remotecontrol server on port {0}: {1}"
+msgid "Cannot start IPv4 remotecontrol server on port {0}: {1}"
 msgstr ""
-"Не удалось запустить сервер дистанционного управления на порту {0}: {1}"
+"Не удаётся запустить сервер удалённого управления IPv4 на порту {0}: {1}"
 
-msgid "RemoteControl::Accepting connections on {0}:{1}"
-msgstr "Удалённое управление::Принимается соединение на {0}:{1}"
+msgid "Cannot start IPv6 remotecontrol server on port {0}: {1}"
+msgstr ""
+"Не удаётся запустить сервер удалённого управления IPv6 на порту {0}: {1}"
 
-msgid "RemoteControl::Server stopped."
-msgstr "Удалённое управление::Сервер остановлен."
+msgid "RemoteControl::Accepting remote connections on {0}:{1}"
+msgstr "Удалённое управления::Прием удалённых соединений на {0}:{1}"
 
-msgid "Cannot start remotecontrol https server on port {0}: {1}"
-msgstr ""
-"Не удалось запустить https-сервер удалённого управления на порту {0}: {1}"
+msgid "RemoteControl::Server {0}:{1} stopped."
+msgstr "Удалённое управления::Сервер {0}:{1} остановлен."
 
-msgid "Unable to initialize Remote Control HTTPS Server"
-msgstr "Не удалось инициализировать HTTPS-сервер удалённого управления"
+msgid "Cannot start IPv4 remotecontrol https server on port {0}: {1}"
+msgstr ""
+"Не удаётся запустить https сервер удалённого управления IPv4 на порту {0}: "
+"{1}"
 
-msgid "RemoteControl::Accepting secure connections on {0}:{1}"
-msgstr "Удалённое управление::Принимается защищённое соединение на {0}:{1}"
+msgid "Cannot start IPv6 remotecontrol https server on port {0}: {1}"
+msgstr ""
+"Не удаётся запустить https сервер удалённого управления IPv6 на порту {0}: "
+"{1}"
 
-msgid "RemoteControl::Server (https) stopped."
-msgstr "Удалённое управление::сервер (https) остановлен."
+msgid "RemoteControl::Accepting secure remote connections on {0}:{1}"
+msgstr ""
+"Удалённое управления::Приём безопасных удаленных соединений на {0}:{1}"
 
 msgid "Remote Control has been asked to create a new node."
-msgstr "Удалённое управление было запросило создание новой точки."
+msgstr "Удалённое управление получило запрос на создание новой точки."
 
 msgid "There is no layer opened to add node"
 msgstr "Нет открытого слоя для добавления точки"
 
 msgid "Remote Control has been asked to create a new way."
-msgstr "Удалённое управление было запросило создание новой линии."
+msgstr "Удалённое управление получило запрос на создание новой линии."
 
 msgid "Invalid coordinates: {0}"
 msgstr "Неправильные координаты: {0}"
@@ -15975,9 +15996,6 @@ msgstr "NRW-Atlas: топографическая карта 1:10000"
 msgid "Metropole Ruhr: Luftbilder (10 cm)"
 msgstr "Городская агломерация Рур: аэрофотосъёмка (10 см)"
 
-msgid "SN Luftbilder, Straßennetz, Administrative Grenzen"
-msgstr "Саксония: аэроснимки, дорожная сеть, административные границы"
-
 msgid "Drone Imagery (Haiti)"
 msgstr "Снимки с дрона (Гаити)"
 
@@ -16906,6 +16924,13 @@ msgid ""
 msgstr ""
 "Получить ошибки из Osm Inspector и отобразить в текущей рабочей области JOSM"
 
+msgid ""
+"Recommends categories/tags on newly created OSM entities by analysing "
+"spatial entities into training features and using SVM classification"
+msgstr ""
+"Рекомендует категории/теги для создаваемых объектов OSM на основе анализа "
+"данных механизма обучения и использования классификации SVM"
+
 msgid "Import/export OSM data in PBF format"
 msgstr "Импорт/экспорт данных OSM в формате PBF"
 
@@ -20683,8 +20708,11 @@ msgstr "Ассенизационная сливная станция"
 msgid "Suction pumpout"
 msgstr "Всасывающий насос"
 
-msgid "Gravity dump station"
-msgstr "Самотечная сливная станция"
+msgid "Gravity drain for hose"
+msgstr "Соединитель шланга для слива самотёком"
+
+msgid "Casette or Elsan Disposal"
+msgstr "Кассета или контейнер Elsan"
 
 msgid "Operation times"
 msgstr "Время работы"
@@ -21187,6 +21215,10 @@ msgid "shed"
 msgstr "сарай"
 
 msgctxt "building"
+msgid "storage_tank"
+msgstr "резервуар"
+
+msgctxt "building"
 msgid "cowshed"
 msgstr "коровник"
 
@@ -21299,6 +21331,41 @@ msgstr "Ветряная мельница"
 msgid "Gasometer"
 msgstr "Газгольдер"
 
+msgid "Storage Tank"
+msgstr "Резервуар"
+
+msgctxt "content"
+msgid "fuel"
+msgstr "топливо"
+
+msgctxt "content"
+msgid "manure"
+msgstr "органическое удобрение"
+
+msgctxt "content"
+msgid "oil"
+msgstr "нефть"
+
+msgctxt "content"
+msgid "sewage"
+msgstr "сточные воды"
+
+msgctxt "content"
+msgid "silage"
+msgstr "силос"
+
+msgctxt "content"
+msgid "slurry"
+msgstr "цементный раствор"
+
+msgctxt "content"
+msgid "water"
+msgstr "вода"
+
+msgctxt "content"
+msgid "wine"
+msgstr "вино"
+
 msgid "Bunker Silo"
 msgstr "Силосная яма"
 
@@ -24639,13 +24706,13 @@ msgid "No name"
 msgstr "Без названия"
 
 msgid "Unresolved Addresses"
-msgstr "Неразгаданные адреса"
+msgstr "Сомнительные адреса"
 
 msgid "Select and close"
 msgstr "Выделить и закрыть"
 
 msgid "Fix unresolved addresses"
-msgstr "Исправить неразгаданные адреса"
+msgstr "Исправить сомнительные адреса"
 
 msgid "Complete Addresses"
 msgstr "Полные адреса"
@@ -24824,6 +24891,33 @@ msgstr "Открыть файл NanoLog..."
 msgid "Could not read NanoLog file:"
 msgstr "Не удалось прочитать файл NanoLog:"
 
+msgid "OSM Recommendation"
+msgstr "Рекомендация OSM"
+
+msgid "Recommend categories to your newly created instances."
+msgstr "Рекомендует категории для создаваемых объектов."
+
+msgid "Training process configuration"
+msgstr "Конфигурация процесса обучения"
+
+msgid "Model Settings"
+msgstr "Параметры модели"
+
+msgid "Select objects or create new objects and get recommendation."
+msgstr "Выберите или создайте новые объекты и получите рекомендацию."
+
+msgid "Add Recommendation"
+msgstr "Добавить рекомендацию"
+
+msgid "Add a recommended key/value pair to your object"
+msgstr "Добавить рекомендуемую пару ключ/значение к объекту"
+
+msgid "Train a Model"
+msgstr "Обучение модели"
+
+msgid "Start the training engine!"
+msgstr "Запустить механизм обучения!"
+
 msgid "Edit opening hours"
 msgstr "Править часы работы"
 
@@ -31975,6 +32069,3 @@ msgstr "Приступить к вождению"
 
 msgid "Drive a race car on this layer"
 msgstr "Вести гоночный автомобиль на этом слое"
-
-#~ msgid "Note comment background"
-#~ msgstr "Фон комментария к заметке"
diff --git a/i18n/po/sk.po b/i18n/po/sk.po
index 0c09d06..452972f 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-04-27 03:33+0200\n"
-"PO-Revision-Date: 2015-04-20 19:26+0000\n"
+"POT-Creation-Date: 2015-05-12 03:33+0200\n"
+"PO-Revision-Date: 2015-05-10 19:55+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-04-27 04:56+0000\n"
-"X-Generator: Launchpad (build 17430)\n"
+"X-Launchpad-Export-Date: 2015-05-12 04:56+0000\n"
+"X-Generator: Launchpad (build 17487)\n"
 "Language: sk\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -484,6 +484,9 @@ msgid ""
 "* One no self-crossing way with at most two of its nodes;\n"
 "* Three nodes."
 msgstr ""
+"Prosím označte:\n"
+"* Jednu cestu nepretínajúcu samu seba a najviac 2 jej body;\n"
+"* Tri body."
 
 msgid "Download from OSM..."
 msgstr "Stiahnuť z OSM..."
@@ -1611,6 +1614,9 @@ msgstr[0] "Dotknutá cesta by po odpojení vybraných bodov zmizla."
 msgstr[1] "Dotknutá cesta by po odpojení vybraného bodu zmizla."
 msgstr[2] "Dotknutá cesta by po odpojení vybraných bodov zmizla."
 
+msgid "Some irrelevant nodes have been removed from the selection"
+msgstr "Niektoré nepodstatné body boli odstránené z výberu"
+
 msgid "Undo"
 msgstr "Späť"
 
@@ -3377,6 +3383,13 @@ msgstr "Vrstva: {0}"
 msgid "Failed to persist preferences to ''{0}''"
 msgstr "Nepodarilo sa uložiť preferencie do \"{0}\""
 
+msgid ""
+"Try enabling IPv6 network, prefering IPv6 over IPv4 (only works on early "
+"startup)."
+msgstr ""
+"Pokúsiť sa zapnúť sieť IPv6, prednostne použiť IPv6 pred IPv4 (funguje len "
+"skoro po štarte)."
+
 msgid " (at line {0}, column {1})"
 msgstr " (na riadku {0}, stĺpec {1})"
 
@@ -4047,6 +4060,15 @@ msgid "Number of lane dependent values inconsistent in backward direction"
 msgstr ""
 "Počet hodnôt pre jazdné pruhy je nekonzistentný v smere dozadu (backward)"
 
+msgid "Long segments"
+msgstr "Dlhé úseky"
+
+msgid "This tests for long way segments, which are usually errors."
+msgstr "Toto hľadá dlhé úseky ciest, čo obyčajne znamená chybu."
+
+msgid "Very long segment of {0} kilometers"
+msgstr "Veľmi dlhý úsek dĺžky {0} kilometrov"
+
 msgid "Tag checker (MapCSS based)"
 msgstr "Kontrola značiek (založená na MapCSS)"
 
@@ -4922,6 +4944,21 @@ msgstr[0] "JOSM je v režime offline. Tento zdroje nebudú dostupné: {0}"
 msgstr[1] "JOSM je v režime offline. Tento zdroj nebude dostupný: {0}"
 msgstr[2] "JOSM je v režime offline. Tento zdroje nebudú dostupné: {0}"
 
+msgid ""
+"Detected useable IPv6 network, prefering IPv6 over IPv4 after next restart."
+msgstr ""
+"Našla sa sieť IPv6, od ďalšieho reštartu bude použitá prednostne pred IPv4."
+
+msgid "Detected useable IPv6 network, prefering IPv6 over IPv4."
+msgstr "Našla sa sieť IPv6, bude použitá prednostne pred IPv4."
+
+msgid ""
+"Detected no useable IPv6 network, prefering IPv4 over IPv6 after next "
+"restart."
+msgstr ""
+"Nenašla sa použiteľná sieť IPv6, po nasledujúcom reštarte sa prednostne "
+"použije IPv4."
+
 msgid "Unsaved osm data"
 msgstr "Neuložené OSM dáta"
 
@@ -6765,16 +6802,6 @@ msgstr ""
 "Spustí sa prehliadač informácií iba pre prvých {0} z {1} vybraných "
 "používateľov"
 
-msgid ""
-"<html>Failed to create an URL because the encoding ''{0}''<br>was missing on "
-"this system.</html>"
-msgstr ""
-"<html>Neúspešné vytvorenie URL pretože kódovanie ''{0}''<br>chýbalo na tomto "
-"systéme.</html>"
-
-msgid "Missing encoding"
-msgstr "Chýbajúce kódovanie"
-
 msgid "Author"
 msgstr "Autor"
 
@@ -8390,7 +8417,7 @@ msgstr ""
 "<html>Verzia <strong>{0}</strong> vytvorená <strong>{1}</strong></html>"
 
 msgid "Changeset"
-msgstr ""
+msgstr "Sada zmien"
 
 msgid "Changeset info"
 msgstr "Info súboru zmien"
@@ -11788,6 +11815,9 @@ msgstr "Adresár pre vyrovnávaciu pamäť dlaždíc: "
 msgid "Maximum concurrent downloads: "
 msgstr "Maximum paralelných sťahovaní: "
 
+msgid "Maximum concurrent downloads per host: "
+msgstr "Maximum paralelných sťahovaní z jedného serveru: "
+
 msgid "Maximum elements in disk cache: "
 msgstr "Maximum objektov v diskovej vyrovnávacej pamäti: "
 
@@ -11902,9 +11932,6 @@ msgstr ""
 "Varovanie: neplatný formát počtu v štýle obsahu \"{0}\". Obdržaná hodnota je "
 "\"{1}\""
 
-msgid "JOSM default (XML; old version)"
-msgstr "JOSM predvolené (XML; stará verzia)"
-
 msgid "JOSM default (MapCSS)"
 msgstr "JOSM predvolené (MapCSS)"
 
@@ -13540,9 +13567,6 @@ msgstr "Odoslanie poznámky zlyhalo"
 msgid "Error parsing note response from server"
 msgstr "Chyba pri čítaní reakcie servera na poznámku"
 
-msgid "Error encoding string: {0}"
-msgstr "Chyba pri kódovaní reťazca: {0}"
-
 msgid "(Code={0})"
 msgstr "(Kód={0})"
 
@@ -13940,28 +13964,32 @@ msgstr "Vytvoriť nové objekty"
 msgid "Read protocol version"
 msgstr "Prečítať si protokol verzie"
 
-msgid "Cannot start remotecontrol server on port {0}: {1}"
+msgid "Cannot start IPv4 remotecontrol server on port {0}: {1}"
+msgstr ""
+"Nepodarilo sa spustiť server diaľkového ovládania cez IPv4 na porte {0}: {1}"
+
+msgid "Cannot start IPv6 remotecontrol server on port {0}: {1}"
 msgstr ""
-"Nepodarilo sa spustiť server pre diaľkové ovládanie na porte {0}: {1}"
+"Nepodarilo sa spustiť server diaľkového ovládania cez IPv6 na porte {0}: {1}"
 
-msgid "RemoteControl::Accepting connections on {0}:{1}"
-msgstr "Diaľkové ovládanie::Prijímajú sa spojenia na {0}:{1}"
+msgid "RemoteControl::Accepting remote connections on {0}:{1}"
+msgstr "Diaľkové ovládanie::Prijímajú sa pripojenia na {0}:{1}"
 
-msgid "RemoteControl::Server stopped."
-msgstr "Diaľkové ovládanie::Server zastavený."
+msgid "RemoteControl::Server {0}:{1} stopped."
+msgstr "Diaľkové ovládanie::Server {0}:{1} zastavený."
 
-msgid "Cannot start remotecontrol https server on port {0}: {1}"
+msgid "Cannot start IPv4 remotecontrol https server on port {0}: {1}"
 msgstr ""
-"Nedá sa spustiť https server pre diaľkové ovládanie na porte {0}: {1}"
-
-msgid "Unable to initialize Remote Control HTTPS Server"
-msgstr "Nepodarilo sa inicializovať HTTPS server pre diaľkové ovládanie"
+"Nepodarilo sa spustiť server diaľkového ovládania cez HTTPS a IPv4 na porte "
+"{0}: {1}"
 
-msgid "RemoteControl::Accepting secure connections on {0}:{1}"
-msgstr "Diaľkové ovládanie::Prijímajú sa zabezpečené spojenia na {0}:{1}"
+msgid "Cannot start IPv6 remotecontrol https server on port {0}: {1}"
+msgstr ""
+"Nepodarilo sa spustiť server diaľkového ovládania cez HTTPS a IPv6 na porte "
+"{0}: {1}"
 
-msgid "RemoteControl::Server (https) stopped."
-msgstr "Diaľkové ovládanie::Server (https) zastavený."
+msgid "RemoteControl::Accepting secure remote connections on {0}:{1}"
+msgstr "Diaľkové ovládanie::Prijímajú sa zabezpečené pripojenia na {0}:{1}"
 
 msgid "Remote Control has been asked to create a new node."
 msgstr "Diaľkové ovládanie bolo požiadané o vytvorenie nového bodu."
@@ -15916,9 +15944,6 @@ msgstr "NRW-Atlas: Topografická mapa 1:10000"
 msgid "Metropole Ruhr: Luftbilder (10 cm)"
 msgstr "Metropola Ruhr: Letecké snímky (10 cm)"
 
-msgid "SN Luftbilder, Straßennetz, Administrative Grenzen"
-msgstr "SN Letecké snímky, Cestná sieť, Administratívne hranice"
-
 msgid "Drone Imagery (Haiti)"
 msgstr "Snímky automatických lietadiel (Haiti)"
 
@@ -16841,6 +16866,13 @@ msgstr ""
 "Načíta chyby z Osm Inspector a zobrazí ich v aktuálnom ohraničujúcom rámci "
 "JOSM"
 
+msgid ""
+"Recommends categories/tags on newly created OSM entities by analysing "
+"spatial entities into training features and using SVM classification"
+msgstr ""
+"Odporúča kategórie/značky na novovytvorených OSM objektoch analyzovaním a "
+"učením priestorových útvarov a pomocou SVM klasifikácie"
+
 msgid "Import/export OSM data in PBF format"
 msgstr "Importovať/exportovať OSM dáta vo formáte PBF"
 
@@ -18229,19 +18261,19 @@ msgid "Tracktype"
 msgstr "Typ stopy"
 
 msgid "grade1"
-msgstr "kvalita1"
+msgstr "kvalita1 (najlepšia)"
 
 msgid "grade2"
-msgstr "kvalita2"
+msgstr "kvalita2 (dobrá)"
 
 msgid "grade3"
-msgstr "kvalita3"
+msgstr "kvalita3 (priemerná)"
 
 msgid "grade4"
-msgstr "kvalita4"
+msgstr "kvalita4 (horšia)"
 
 msgid "grade5"
-msgstr "kvalita5"
+msgstr "kvalita5 (najhoršia)"
 
 msgid "MTB Scale"
 msgstr "MTB Rozsah"
@@ -20617,8 +20649,11 @@ msgstr "Výlevka na WC z karavanu"
 msgid "Suction pumpout"
 msgstr "Vyliatie nasávaním"
 
-msgid "Gravity dump station"
-msgstr "Vyliatie voľným pádom"
+msgid "Gravity drain for hose"
+msgstr "Gravitačný výtok pre hadicu"
+
+msgid "Casette or Elsan Disposal"
+msgstr "Likvidácia nádrží (Elsan)"
 
 msgid "Operation times"
 msgstr "Prevádzková doba"
@@ -21121,6 +21156,10 @@ msgid "shed"
 msgstr "kôlňa"
 
 msgctxt "building"
+msgid "storage_tank"
+msgstr "Zásobník/silo"
+
+msgctxt "building"
 msgid "cowshed"
 msgstr "maštaľ"
 
@@ -21233,6 +21272,41 @@ msgstr "Veterný mlyn"
 msgid "Gasometer"
 msgstr "Plynojem (gasometer)"
 
+msgid "Storage Tank"
+msgstr "Zásobník/silo"
+
+msgctxt "content"
+msgid "fuel"
+msgstr "palivo"
+
+msgctxt "content"
+msgid "manure"
+msgstr "hnoj"
+
+msgctxt "content"
+msgid "oil"
+msgstr "ropa"
+
+msgctxt "content"
+msgid "sewage"
+msgstr "splašky"
+
+msgctxt "content"
+msgid "silage"
+msgstr "siláž"
+
+msgctxt "content"
+msgid "slurry"
+msgstr "kal"
+
+msgctxt "content"
+msgid "water"
+msgstr "voda"
+
+msgctxt "content"
+msgid "wine"
+msgstr "víno"
+
 msgid "Bunker Silo"
 msgstr "Silážna jama"
 
@@ -24739,6 +24813,33 @@ msgstr ""
 msgid "Could not read NanoLog file:"
 msgstr ""
 
+msgid "OSM Recommendation"
+msgstr ""
+
+msgid "Recommend categories to your newly created instances."
+msgstr ""
+
+msgid "Training process configuration"
+msgstr ""
+
+msgid "Model Settings"
+msgstr ""
+
+msgid "Select objects or create new objects and get recommendation."
+msgstr ""
+
+msgid "Add Recommendation"
+msgstr ""
+
+msgid "Add a recommended key/value pair to your object"
+msgstr ""
+
+msgid "Train a Model"
+msgstr ""
+
+msgid "Start the training engine!"
+msgstr ""
+
 msgid "Edit opening hours"
 msgstr "Upraviť otváraciu dobu"
 
@@ -31547,6 +31648,3 @@ msgstr "Ísť jazdiť"
 
 msgid "Drive a race car on this layer"
 msgstr "Jazdiť so závodným autom na tejto vrstve"
-
-#~ msgid "Note comment background"
-#~ msgstr "Pozadie komentára poznámky"
diff --git a/i18n/po/sl.po b/i18n/po/sl.po
index 7c21407..a931160 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-04-27 03:33+0200\n"
+"POT-Creation-Date: 2015-05-12 03:33+0200\n"
 "PO-Revision-Date: 2013-03-30 13:06+0000\n"
 "Last-Translator: Dirk Stöcker <launchpad at dstoecker.de>\n"
 "Language-Team: Slovenian <sl at li.org>\n"
@@ -16,8 +16,8 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=4; plural=(n%100==1 ? 1 : n%100==2 ? 2 : n%100==3 || "
 "n%100==4 ? 3 : 0);\n"
-"X-Launchpad-Export-Date: 2015-04-27 04:56+0000\n"
-"X-Generator: Launchpad (build 17430)\n"
+"X-Launchpad-Export-Date: 2015-05-12 04:56+0000\n"
+"X-Generator: Launchpad (build 17487)\n"
 "Language: sl\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -1480,6 +1480,9 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Some irrelevant nodes have been removed from the selection"
+msgstr ""
+
 msgid "Undo"
 msgstr "Izniči"
 
@@ -3081,6 +3084,11 @@ msgstr ""
 msgid "Failed to persist preferences to ''{0}''"
 msgstr ""
 
+msgid ""
+"Try enabling IPv6 network, prefering IPv6 over IPv4 (only works on early "
+"startup)."
+msgstr ""
+
 msgid " (at line {0}, column {1})"
 msgstr ""
 
@@ -3717,6 +3725,15 @@ msgstr ""
 msgid "Number of lane dependent values inconsistent in backward direction"
 msgstr ""
 
+msgid "Long segments"
+msgstr ""
+
+msgid "This tests for long way segments, which are usually errors."
+msgstr ""
+
+msgid "Very long segment of {0} kilometers"
+msgstr ""
+
 msgid "Tag checker (MapCSS based)"
 msgstr ""
 
@@ -4552,6 +4569,18 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
+msgid ""
+"Detected useable IPv6 network, prefering IPv6 over IPv4 after next restart."
+msgstr ""
+
+msgid "Detected useable IPv6 network, prefering IPv6 over IPv4."
+msgstr ""
+
+msgid ""
+"Detected no useable IPv6 network, prefering IPv4 over IPv6 after next "
+"restart."
+msgstr ""
+
 msgid "Unsaved osm data"
 msgstr ""
 
@@ -6230,14 +6259,6 @@ msgstr ""
 msgid "Only launching info browsers for the first {0} of {1} selected users"
 msgstr ""
 
-msgid ""
-"<html>Failed to create an URL because the encoding ''{0}''<br>was missing on "
-"this system.</html>"
-msgstr ""
-
-msgid "Missing encoding"
-msgstr ""
-
 msgid "Author"
 msgstr "Avtor"
 
@@ -10714,6 +10735,9 @@ msgstr ""
 msgid "Maximum concurrent downloads: "
 msgstr ""
 
+msgid "Maximum concurrent downloads per host: "
+msgstr ""
+
 msgid "Maximum elements in disk cache: "
 msgstr ""
 
@@ -10816,9 +10840,6 @@ msgstr ""
 msgid "Warning: illegal format of entry in style list ''{0}''. Got ''{1}''"
 msgstr ""
 
-msgid "JOSM default (XML; old version)"
-msgstr ""
-
 msgid "JOSM default (MapCSS)"
 msgstr ""
 
@@ -12286,9 +12307,6 @@ msgstr ""
 msgid "Error parsing note response from server"
 msgstr ""
 
-msgid "Error encoding string: {0}"
-msgstr ""
-
 msgid "(Code={0})"
 msgstr ""
 
@@ -12648,25 +12666,25 @@ msgstr ""
 msgid "Read protocol version"
 msgstr ""
 
-msgid "Cannot start remotecontrol server on port {0}: {1}"
+msgid "Cannot start IPv4 remotecontrol server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Accepting connections on {0}:{1}"
+msgid "Cannot start IPv6 remotecontrol server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Server stopped."
+msgid "RemoteControl::Accepting remote connections on {0}:{1}"
 msgstr ""
 
-msgid "Cannot start remotecontrol https server on port {0}: {1}"
+msgid "RemoteControl::Server {0}:{1} stopped."
 msgstr ""
 
-msgid "Unable to initialize Remote Control HTTPS Server"
+msgid "Cannot start IPv4 remotecontrol https server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Accepting secure connections on {0}:{1}"
+msgid "Cannot start IPv6 remotecontrol https server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Server (https) stopped."
+msgid "RemoteControl::Accepting secure remote connections on {0}:{1}"
 msgstr ""
 
 msgid "Remote Control has been asked to create a new node."
@@ -14338,9 +14356,6 @@ msgstr ""
 msgid "Metropole Ruhr: Luftbilder (10 cm)"
 msgstr ""
 
-msgid "SN Luftbilder, Straßennetz, Administrative Grenzen"
-msgstr ""
-
 msgid "Drone Imagery (Haiti)"
 msgstr ""
 
@@ -15201,6 +15216,11 @@ msgid ""
 "bounding box"
 msgstr ""
 
+msgid ""
+"Recommends categories/tags on newly created OSM entities by analysing "
+"spatial entities into training features and using SVM classification"
+msgstr ""
+
 msgid "Import/export OSM data in PBF format"
 msgstr ""
 
@@ -18901,7 +18921,10 @@ msgstr ""
 msgid "Suction pumpout"
 msgstr ""
 
-msgid "Gravity dump station"
+msgid "Gravity drain for hose"
+msgstr ""
+
+msgid "Casette or Elsan Disposal"
 msgstr ""
 
 msgid "Operation times"
@@ -19405,6 +19428,10 @@ msgid "shed"
 msgstr ""
 
 msgctxt "building"
+msgid "storage_tank"
+msgstr ""
+
+msgctxt "building"
 msgid "cowshed"
 msgstr ""
 
@@ -19517,6 +19544,41 @@ msgstr "Mlin na veter"
 msgid "Gasometer"
 msgstr ""
 
+msgid "Storage Tank"
+msgstr ""
+
+msgctxt "content"
+msgid "fuel"
+msgstr ""
+
+msgctxt "content"
+msgid "manure"
+msgstr ""
+
+msgctxt "content"
+msgid "oil"
+msgstr ""
+
+msgctxt "content"
+msgid "sewage"
+msgstr ""
+
+msgctxt "content"
+msgid "silage"
+msgstr ""
+
+msgctxt "content"
+msgid "slurry"
+msgstr ""
+
+msgctxt "content"
+msgid "water"
+msgstr ""
+
+msgctxt "content"
+msgid "wine"
+msgstr ""
+
 msgid "Bunker Silo"
 msgstr ""
 
@@ -22968,6 +23030,33 @@ msgstr ""
 msgid "Could not read NanoLog file:"
 msgstr ""
 
+msgid "OSM Recommendation"
+msgstr ""
+
+msgid "Recommend categories to your newly created instances."
+msgstr ""
+
+msgid "Training process configuration"
+msgstr ""
+
+msgid "Model Settings"
+msgstr ""
+
+msgid "Select objects or create new objects and get recommendation."
+msgstr ""
+
+msgid "Add Recommendation"
+msgstr ""
+
+msgid "Add a recommended key/value pair to your object"
+msgstr ""
+
+msgid "Train a Model"
+msgstr ""
+
+msgid "Start the training engine!"
+msgstr ""
+
 msgid "Edit opening hours"
 msgstr ""
 
diff --git a/i18n/po/sq.po b/i18n/po/sq.po
index eab7751..3da9e9a 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-04-27 03:33+0200\n"
+"POT-Creation-Date: 2015-05-12 03:33+0200\n"
 "PO-Revision-Date: 2011-11-04 19:43+0000\n"
 "Last-Translator: StefanPrifti <Unknown>\n"
 "Language-Team: FLOSS Kosova\n"
@@ -15,8 +15,8 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Launchpad-Export-Date: 2015-04-27 04:31+0000\n"
-"X-Generator: Launchpad (build 17430)\n"
+"X-Launchpad-Export-Date: 2015-05-12 04:31+0000\n"
+"X-Generator: Launchpad (build 17487)\n"
 "Language: \n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -1468,6 +1468,9 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Some irrelevant nodes have been removed from the selection"
+msgstr ""
+
 msgid "Undo"
 msgstr ""
 
@@ -3065,6 +3068,11 @@ msgstr ""
 msgid "Failed to persist preferences to ''{0}''"
 msgstr ""
 
+msgid ""
+"Try enabling IPv6 network, prefering IPv6 over IPv4 (only works on early "
+"startup)."
+msgstr ""
+
 msgid " (at line {0}, column {1})"
 msgstr ""
 
@@ -3693,6 +3701,15 @@ msgstr ""
 msgid "Number of lane dependent values inconsistent in backward direction"
 msgstr ""
 
+msgid "Long segments"
+msgstr ""
+
+msgid "This tests for long way segments, which are usually errors."
+msgstr ""
+
+msgid "Very long segment of {0} kilometers"
+msgstr ""
+
 msgid "Tag checker (MapCSS based)"
 msgstr ""
 
@@ -4522,6 +4539,18 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
+msgid ""
+"Detected useable IPv6 network, prefering IPv6 over IPv4 after next restart."
+msgstr ""
+
+msgid "Detected useable IPv6 network, prefering IPv6 over IPv4."
+msgstr ""
+
+msgid ""
+"Detected no useable IPv6 network, prefering IPv4 over IPv6 after next "
+"restart."
+msgstr ""
+
 msgid "Unsaved osm data"
 msgstr ""
 
@@ -6200,14 +6229,6 @@ msgstr ""
 msgid "Only launching info browsers for the first {0} of {1} selected users"
 msgstr ""
 
-msgid ""
-"<html>Failed to create an URL because the encoding ''{0}''<br>was missing on "
-"this system.</html>"
-msgstr ""
-
-msgid "Missing encoding"
-msgstr ""
-
 msgid "Author"
 msgstr ""
 
@@ -10662,6 +10683,9 @@ msgstr ""
 msgid "Maximum concurrent downloads: "
 msgstr ""
 
+msgid "Maximum concurrent downloads per host: "
+msgstr ""
+
 msgid "Maximum elements in disk cache: "
 msgstr ""
 
@@ -10764,9 +10788,6 @@ msgstr ""
 msgid "Warning: illegal format of entry in style list ''{0}''. Got ''{1}''"
 msgstr ""
 
-msgid "JOSM default (XML; old version)"
-msgstr ""
-
 msgid "JOSM default (MapCSS)"
 msgstr ""
 
@@ -12228,9 +12249,6 @@ msgstr ""
 msgid "Error parsing note response from server"
 msgstr ""
 
-msgid "Error encoding string: {0}"
-msgstr ""
-
 msgid "(Code={0})"
 msgstr ""
 
@@ -12588,25 +12606,25 @@ msgstr ""
 msgid "Read protocol version"
 msgstr ""
 
-msgid "Cannot start remotecontrol server on port {0}: {1}"
+msgid "Cannot start IPv4 remotecontrol server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Accepting connections on {0}:{1}"
+msgid "Cannot start IPv6 remotecontrol server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Server stopped."
+msgid "RemoteControl::Accepting remote connections on {0}:{1}"
 msgstr ""
 
-msgid "Cannot start remotecontrol https server on port {0}: {1}"
+msgid "RemoteControl::Server {0}:{1} stopped."
 msgstr ""
 
-msgid "Unable to initialize Remote Control HTTPS Server"
+msgid "Cannot start IPv4 remotecontrol https server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Accepting secure connections on {0}:{1}"
+msgid "Cannot start IPv6 remotecontrol https server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Server (https) stopped."
+msgid "RemoteControl::Accepting secure remote connections on {0}:{1}"
 msgstr ""
 
 msgid "Remote Control has been asked to create a new node."
@@ -14274,9 +14292,6 @@ msgstr ""
 msgid "Metropole Ruhr: Luftbilder (10 cm)"
 msgstr ""
 
-msgid "SN Luftbilder, Straßennetz, Administrative Grenzen"
-msgstr ""
-
 msgid "Drone Imagery (Haiti)"
 msgstr ""
 
@@ -15137,6 +15152,11 @@ msgid ""
 "bounding box"
 msgstr ""
 
+msgid ""
+"Recommends categories/tags on newly created OSM entities by analysing "
+"spatial entities into training features and using SVM classification"
+msgstr ""
+
 msgid "Import/export OSM data in PBF format"
 msgstr ""
 
@@ -18837,7 +18857,10 @@ msgstr ""
 msgid "Suction pumpout"
 msgstr ""
 
-msgid "Gravity dump station"
+msgid "Gravity drain for hose"
+msgstr ""
+
+msgid "Casette or Elsan Disposal"
 msgstr ""
 
 msgid "Operation times"
@@ -19341,6 +19364,10 @@ msgid "shed"
 msgstr ""
 
 msgctxt "building"
+msgid "storage_tank"
+msgstr ""
+
+msgctxt "building"
 msgid "cowshed"
 msgstr ""
 
@@ -19453,6 +19480,41 @@ msgstr ""
 msgid "Gasometer"
 msgstr ""
 
+msgid "Storage Tank"
+msgstr ""
+
+msgctxt "content"
+msgid "fuel"
+msgstr ""
+
+msgctxt "content"
+msgid "manure"
+msgstr ""
+
+msgctxt "content"
+msgid "oil"
+msgstr ""
+
+msgctxt "content"
+msgid "sewage"
+msgstr ""
+
+msgctxt "content"
+msgid "silage"
+msgstr ""
+
+msgctxt "content"
+msgid "slurry"
+msgstr ""
+
+msgctxt "content"
+msgid "water"
+msgstr ""
+
+msgctxt "content"
+msgid "wine"
+msgstr ""
+
 msgid "Bunker Silo"
 msgstr ""
 
@@ -22904,6 +22966,33 @@ msgstr ""
 msgid "Could not read NanoLog file:"
 msgstr ""
 
+msgid "OSM Recommendation"
+msgstr ""
+
+msgid "Recommend categories to your newly created instances."
+msgstr ""
+
+msgid "Training process configuration"
+msgstr ""
+
+msgid "Model Settings"
+msgstr ""
+
+msgid "Select objects or create new objects and get recommendation."
+msgstr ""
+
+msgid "Add Recommendation"
+msgstr ""
+
+msgid "Add a recommended key/value pair to your object"
+msgstr ""
+
+msgid "Train a Model"
+msgstr ""
+
+msgid "Start the training engine!"
+msgstr ""
+
 msgid "Edit opening hours"
 msgstr ""
 
diff --git a/i18n/po/sr.po b/i18n/po/sr.po
index ed7549c..603923f 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-04-27 03:33+0200\n"
+"POT-Creation-Date: 2015-05-12 03:33+0200\n"
 "PO-Revision-Date: 2015-02-01 15:30+0000\n"
 "Last-Translator: Slobodan Simić <Unknown>\n"
 "Language-Team: Serbian <sr at li.org>\n"
@@ -16,8 +16,8 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
 "n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
-"X-Launchpad-Export-Date: 2015-04-27 04:55+0000\n"
-"X-Generator: Launchpad (build 17430)\n"
+"X-Launchpad-Export-Date: 2015-05-12 04:55+0000\n"
+"X-Generator: Launchpad (build 17487)\n"
 "Language: sr\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -1469,6 +1469,9 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Some irrelevant nodes have been removed from the selection"
+msgstr ""
+
 msgid "Undo"
 msgstr ""
 
@@ -3066,6 +3069,11 @@ msgstr ""
 msgid "Failed to persist preferences to ''{0}''"
 msgstr ""
 
+msgid ""
+"Try enabling IPv6 network, prefering IPv6 over IPv4 (only works on early "
+"startup)."
+msgstr ""
+
 msgid " (at line {0}, column {1})"
 msgstr ""
 
@@ -3694,6 +3702,15 @@ msgstr ""
 msgid "Number of lane dependent values inconsistent in backward direction"
 msgstr ""
 
+msgid "Long segments"
+msgstr ""
+
+msgid "This tests for long way segments, which are usually errors."
+msgstr ""
+
+msgid "Very long segment of {0} kilometers"
+msgstr ""
+
 msgid "Tag checker (MapCSS based)"
 msgstr ""
 
@@ -4523,6 +4540,18 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
+msgid ""
+"Detected useable IPv6 network, prefering IPv6 over IPv4 after next restart."
+msgstr ""
+
+msgid "Detected useable IPv6 network, prefering IPv6 over IPv4."
+msgstr ""
+
+msgid ""
+"Detected no useable IPv6 network, prefering IPv4 over IPv6 after next "
+"restart."
+msgstr ""
+
 msgid "Unsaved osm data"
 msgstr ""
 
@@ -6201,14 +6230,6 @@ msgstr ""
 msgid "Only launching info browsers for the first {0} of {1} selected users"
 msgstr ""
 
-msgid ""
-"<html>Failed to create an URL because the encoding ''{0}''<br>was missing on "
-"this system.</html>"
-msgstr ""
-
-msgid "Missing encoding"
-msgstr ""
-
 msgid "Author"
 msgstr ""
 
@@ -10664,6 +10685,9 @@ msgstr ""
 msgid "Maximum concurrent downloads: "
 msgstr ""
 
+msgid "Maximum concurrent downloads per host: "
+msgstr ""
+
 msgid "Maximum elements in disk cache: "
 msgstr ""
 
@@ -10766,9 +10790,6 @@ msgstr ""
 msgid "Warning: illegal format of entry in style list ''{0}''. Got ''{1}''"
 msgstr ""
 
-msgid "JOSM default (XML; old version)"
-msgstr ""
-
 msgid "JOSM default (MapCSS)"
 msgstr ""
 
@@ -12230,9 +12251,6 @@ msgstr ""
 msgid "Error parsing note response from server"
 msgstr ""
 
-msgid "Error encoding string: {0}"
-msgstr ""
-
 msgid "(Code={0})"
 msgstr ""
 
@@ -12590,25 +12608,25 @@ msgstr ""
 msgid "Read protocol version"
 msgstr ""
 
-msgid "Cannot start remotecontrol server on port {0}: {1}"
+msgid "Cannot start IPv4 remotecontrol server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Accepting connections on {0}:{1}"
+msgid "Cannot start IPv6 remotecontrol server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Server stopped."
+msgid "RemoteControl::Accepting remote connections on {0}:{1}"
 msgstr ""
 
-msgid "Cannot start remotecontrol https server on port {0}: {1}"
+msgid "RemoteControl::Server {0}:{1} stopped."
 msgstr ""
 
-msgid "Unable to initialize Remote Control HTTPS Server"
+msgid "Cannot start IPv4 remotecontrol https server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Accepting secure connections on {0}:{1}"
+msgid "Cannot start IPv6 remotecontrol https server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Server (https) stopped."
+msgid "RemoteControl::Accepting secure remote connections on {0}:{1}"
 msgstr ""
 
 msgid "Remote Control has been asked to create a new node."
@@ -14276,9 +14294,6 @@ msgstr ""
 msgid "Metropole Ruhr: Luftbilder (10 cm)"
 msgstr ""
 
-msgid "SN Luftbilder, Straßennetz, Administrative Grenzen"
-msgstr ""
-
 msgid "Drone Imagery (Haiti)"
 msgstr ""
 
@@ -15139,6 +15154,11 @@ msgid ""
 "bounding box"
 msgstr ""
 
+msgid ""
+"Recommends categories/tags on newly created OSM entities by analysing "
+"spatial entities into training features and using SVM classification"
+msgstr ""
+
 msgid "Import/export OSM data in PBF format"
 msgstr ""
 
@@ -18839,7 +18859,10 @@ msgstr ""
 msgid "Suction pumpout"
 msgstr ""
 
-msgid "Gravity dump station"
+msgid "Gravity drain for hose"
+msgstr ""
+
+msgid "Casette or Elsan Disposal"
 msgstr ""
 
 msgid "Operation times"
@@ -19343,6 +19366,10 @@ msgid "shed"
 msgstr ""
 
 msgctxt "building"
+msgid "storage_tank"
+msgstr ""
+
+msgctxt "building"
 msgid "cowshed"
 msgstr ""
 
@@ -19455,6 +19482,41 @@ msgstr ""
 msgid "Gasometer"
 msgstr ""
 
+msgid "Storage Tank"
+msgstr ""
+
+msgctxt "content"
+msgid "fuel"
+msgstr ""
+
+msgctxt "content"
+msgid "manure"
+msgstr ""
+
+msgctxt "content"
+msgid "oil"
+msgstr ""
+
+msgctxt "content"
+msgid "sewage"
+msgstr ""
+
+msgctxt "content"
+msgid "silage"
+msgstr ""
+
+msgctxt "content"
+msgid "slurry"
+msgstr ""
+
+msgctxt "content"
+msgid "water"
+msgstr ""
+
+msgctxt "content"
+msgid "wine"
+msgstr ""
+
 msgid "Bunker Silo"
 msgstr ""
 
@@ -22906,6 +22968,33 @@ msgstr ""
 msgid "Could not read NanoLog file:"
 msgstr ""
 
+msgid "OSM Recommendation"
+msgstr ""
+
+msgid "Recommend categories to your newly created instances."
+msgstr ""
+
+msgid "Training process configuration"
+msgstr ""
+
+msgid "Model Settings"
+msgstr ""
+
+msgid "Select objects or create new objects and get recommendation."
+msgstr ""
+
+msgid "Add Recommendation"
+msgstr ""
+
+msgid "Add a recommended key/value pair to your object"
+msgstr ""
+
+msgid "Train a Model"
+msgstr ""
+
+msgid "Start the training engine!"
+msgstr ""
+
 msgid "Edit opening hours"
 msgstr ""
 
diff --git a/i18n/po/sv.po b/i18n/po/sv.po
index ee044f2..28ca46f 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-04-27 03:33+0200\n"
+"POT-Creation-Date: 2015-05-12 03:33+0200\n"
 "PO-Revision-Date: 2015-03-12 23:01+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-04-27 04:57+0000\n"
-"X-Generator: Launchpad (build 17430)\n"
+"X-Launchpad-Export-Date: 2015-05-12 04:57+0000\n"
+"X-Generator: Launchpad (build 17487)\n"
 "Language: sv\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -1588,6 +1588,9 @@ msgstr[1] ""
 "Den påverkade sträckan kommer att försvinna efter att ha kopplat loss de "
 "valda noderna."
 
+msgid "Some irrelevant nodes have been removed from the selection"
+msgstr ""
+
 msgid "Undo"
 msgstr "Ångra"
 
@@ -3296,6 +3299,11 @@ msgstr "Lager: {0}"
 msgid "Failed to persist preferences to ''{0}''"
 msgstr ""
 
+msgid ""
+"Try enabling IPv6 network, prefering IPv6 over IPv4 (only works on early "
+"startup)."
+msgstr ""
+
 msgid " (at line {0}, column {1})"
 msgstr " (vid rad {0}, kolumn {1})"
 
@@ -3935,6 +3943,15 @@ msgstr ""
 msgid "Number of lane dependent values inconsistent in backward direction"
 msgstr ""
 
+msgid "Long segments"
+msgstr ""
+
+msgid "This tests for long way segments, which are usually errors."
+msgstr ""
+
+msgid "Very long segment of {0} kilometers"
+msgstr ""
+
 msgid "Tag checker (MapCSS based)"
 msgstr ""
 
@@ -4792,6 +4809,18 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
+msgid ""
+"Detected useable IPv6 network, prefering IPv6 over IPv4 after next restart."
+msgstr ""
+
+msgid "Detected useable IPv6 network, prefering IPv6 over IPv4."
+msgstr ""
+
+msgid ""
+"Detected no useable IPv6 network, prefering IPv4 over IPv6 after next "
+"restart."
+msgstr ""
+
 msgid "Unsaved osm data"
 msgstr "Osparad osm-data"
 
@@ -6489,14 +6518,6 @@ msgstr "Öppna en webbläsare med information om användaren"
 msgid "Only launching info browsers for the first {0} of {1} selected users"
 msgstr ""
 
-msgid ""
-"<html>Failed to create an URL because the encoding ''{0}''<br>was missing on "
-"this system.</html>"
-msgstr ""
-
-msgid "Missing encoding"
-msgstr ""
-
 msgid "Author"
 msgstr "Upphovsman"
 
@@ -11102,6 +11123,9 @@ msgstr ""
 msgid "Maximum concurrent downloads: "
 msgstr ""
 
+msgid "Maximum concurrent downloads per host: "
+msgstr ""
+
 msgid "Maximum elements in disk cache: "
 msgstr ""
 
@@ -11205,9 +11229,6 @@ msgstr ""
 msgid "Warning: illegal format of entry in style list ''{0}''. Got ''{1}''"
 msgstr ""
 
-msgid "JOSM default (XML; old version)"
-msgstr ""
-
 msgid "JOSM default (MapCSS)"
 msgstr ""
 
@@ -12699,9 +12720,6 @@ msgstr ""
 msgid "Error parsing note response from server"
 msgstr ""
 
-msgid "Error encoding string: {0}"
-msgstr ""
-
 msgid "(Code={0})"
 msgstr ""
 
@@ -13066,25 +13084,25 @@ msgstr "Skapa nya objekt"
 msgid "Read protocol version"
 msgstr ""
 
-msgid "Cannot start remotecontrol server on port {0}: {1}"
+msgid "Cannot start IPv4 remotecontrol server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Accepting connections on {0}:{1}"
+msgid "Cannot start IPv6 remotecontrol server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Server stopped."
+msgid "RemoteControl::Accepting remote connections on {0}:{1}"
 msgstr ""
 
-msgid "Cannot start remotecontrol https server on port {0}: {1}"
+msgid "RemoteControl::Server {0}:{1} stopped."
 msgstr ""
 
-msgid "Unable to initialize Remote Control HTTPS Server"
+msgid "Cannot start IPv4 remotecontrol https server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Accepting secure connections on {0}:{1}"
+msgid "Cannot start IPv6 remotecontrol https server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Server (https) stopped."
+msgid "RemoteControl::Accepting secure remote connections on {0}:{1}"
 msgstr ""
 
 msgid "Remote Control has been asked to create a new node."
@@ -14848,9 +14866,6 @@ msgstr ""
 msgid "Metropole Ruhr: Luftbilder (10 cm)"
 msgstr ""
 
-msgid "SN Luftbilder, Straßennetz, Administrative Grenzen"
-msgstr ""
-
 msgid "Drone Imagery (Haiti)"
 msgstr ""
 
@@ -15716,6 +15731,11 @@ msgid ""
 "bounding box"
 msgstr ""
 
+msgid ""
+"Recommends categories/tags on newly created OSM entities by analysing "
+"spatial entities into training features and using SVM classification"
+msgstr ""
+
 msgid "Import/export OSM data in PBF format"
 msgstr ""
 
@@ -19425,7 +19445,10 @@ msgstr ""
 msgid "Suction pumpout"
 msgstr ""
 
-msgid "Gravity dump station"
+msgid "Gravity drain for hose"
+msgstr ""
+
+msgid "Casette or Elsan Disposal"
 msgstr ""
 
 msgid "Operation times"
@@ -19929,6 +19952,10 @@ msgid "shed"
 msgstr "skjul"
 
 msgctxt "building"
+msgid "storage_tank"
+msgstr ""
+
+msgctxt "building"
 msgid "cowshed"
 msgstr ""
 
@@ -20041,6 +20068,41 @@ msgstr "Väderkvarn"
 msgid "Gasometer"
 msgstr "Gasklocka"
 
+msgid "Storage Tank"
+msgstr ""
+
+msgctxt "content"
+msgid "fuel"
+msgstr ""
+
+msgctxt "content"
+msgid "manure"
+msgstr ""
+
+msgctxt "content"
+msgid "oil"
+msgstr ""
+
+msgctxt "content"
+msgid "sewage"
+msgstr ""
+
+msgctxt "content"
+msgid "silage"
+msgstr ""
+
+msgctxt "content"
+msgid "slurry"
+msgstr ""
+
+msgctxt "content"
+msgid "water"
+msgstr ""
+
+msgctxt "content"
+msgid "wine"
+msgstr ""
+
 msgid "Bunker Silo"
 msgstr ""
 
@@ -23500,6 +23562,33 @@ msgstr ""
 msgid "Could not read NanoLog file:"
 msgstr ""
 
+msgid "OSM Recommendation"
+msgstr ""
+
+msgid "Recommend categories to your newly created instances."
+msgstr ""
+
+msgid "Training process configuration"
+msgstr ""
+
+msgid "Model Settings"
+msgstr ""
+
+msgid "Select objects or create new objects and get recommendation."
+msgstr ""
+
+msgid "Add Recommendation"
+msgstr ""
+
+msgid "Add a recommended key/value pair to your object"
+msgstr ""
+
+msgid "Train a Model"
+msgstr ""
+
+msgid "Start the training engine!"
+msgstr ""
+
 msgid "Edit opening hours"
 msgstr ""
 
diff --git a/i18n/po/ta.po b/i18n/po/ta.po
index 5a43ff7..db9e155 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-04-27 03:33+0200\n"
+"POT-Creation-Date: 2015-05-12 03:33+0200\n"
 "PO-Revision-Date: 2012-10-03 22:36+0000\n"
 "Last-Translator: நவீன் குமார்(கெம்ளின்) <naveenmtp at gmail.com>\n"
 "Language-Team: Tamil <ta at li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Launchpad-Export-Date: 2015-04-27 04:58+0000\n"
-"X-Generator: Launchpad (build 17430)\n"
+"X-Launchpad-Export-Date: 2015-05-12 04:58+0000\n"
+"X-Generator: Launchpad (build 17487)\n"
 "X-Poedit-Country: INDIA\n"
 "Language: ta\n"
 "X-Poedit-Language: Tamil\n"
@@ -1500,6 +1500,9 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Some irrelevant nodes have been removed from the selection"
+msgstr ""
+
 msgid "Undo"
 msgstr "செயல்நீக்கு"
 
@@ -3099,6 +3102,11 @@ msgstr "அடுக்கு: {0}"
 msgid "Failed to persist preferences to ''{0}''"
 msgstr ""
 
+msgid ""
+"Try enabling IPv6 network, prefering IPv6 over IPv4 (only works on early "
+"startup)."
+msgstr ""
+
 msgid " (at line {0}, column {1})"
 msgstr ""
 
@@ -3727,6 +3735,15 @@ msgstr ""
 msgid "Number of lane dependent values inconsistent in backward direction"
 msgstr ""
 
+msgid "Long segments"
+msgstr ""
+
+msgid "This tests for long way segments, which are usually errors."
+msgstr ""
+
+msgid "Very long segment of {0} kilometers"
+msgstr ""
+
 msgid "Tag checker (MapCSS based)"
 msgstr ""
 
@@ -4556,6 +4573,18 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
+msgid ""
+"Detected useable IPv6 network, prefering IPv6 over IPv4 after next restart."
+msgstr ""
+
+msgid "Detected useable IPv6 network, prefering IPv6 over IPv4."
+msgstr ""
+
+msgid ""
+"Detected no useable IPv6 network, prefering IPv4 over IPv6 after next "
+"restart."
+msgstr ""
+
 msgid "Unsaved osm data"
 msgstr ""
 
@@ -6234,14 +6263,6 @@ msgstr ""
 msgid "Only launching info browsers for the first {0} of {1} selected users"
 msgstr ""
 
-msgid ""
-"<html>Failed to create an URL because the encoding ''{0}''<br>was missing on "
-"this system.</html>"
-msgstr ""
-
-msgid "Missing encoding"
-msgstr ""
-
 msgid "Author"
 msgstr ""
 
@@ -10699,6 +10720,9 @@ msgstr ""
 msgid "Maximum concurrent downloads: "
 msgstr ""
 
+msgid "Maximum concurrent downloads per host: "
+msgstr ""
+
 msgid "Maximum elements in disk cache: "
 msgstr ""
 
@@ -10801,9 +10825,6 @@ msgstr ""
 msgid "Warning: illegal format of entry in style list ''{0}''. Got ''{1}''"
 msgstr ""
 
-msgid "JOSM default (XML; old version)"
-msgstr ""
-
 msgid "JOSM default (MapCSS)"
 msgstr ""
 
@@ -12265,9 +12286,6 @@ msgstr ""
 msgid "Error parsing note response from server"
 msgstr ""
 
-msgid "Error encoding string: {0}"
-msgstr ""
-
 msgid "(Code={0})"
 msgstr ""
 
@@ -12625,25 +12643,25 @@ msgstr ""
 msgid "Read protocol version"
 msgstr ""
 
-msgid "Cannot start remotecontrol server on port {0}: {1}"
+msgid "Cannot start IPv4 remotecontrol server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Accepting connections on {0}:{1}"
+msgid "Cannot start IPv6 remotecontrol server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Server stopped."
+msgid "RemoteControl::Accepting remote connections on {0}:{1}"
 msgstr ""
 
-msgid "Cannot start remotecontrol https server on port {0}: {1}"
+msgid "RemoteControl::Server {0}:{1} stopped."
 msgstr ""
 
-msgid "Unable to initialize Remote Control HTTPS Server"
+msgid "Cannot start IPv4 remotecontrol https server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Accepting secure connections on {0}:{1}"
+msgid "Cannot start IPv6 remotecontrol https server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Server (https) stopped."
+msgid "RemoteControl::Accepting secure remote connections on {0}:{1}"
 msgstr ""
 
 msgid "Remote Control has been asked to create a new node."
@@ -14311,9 +14329,6 @@ msgstr ""
 msgid "Metropole Ruhr: Luftbilder (10 cm)"
 msgstr ""
 
-msgid "SN Luftbilder, Straßennetz, Administrative Grenzen"
-msgstr ""
-
 msgid "Drone Imagery (Haiti)"
 msgstr ""
 
@@ -15174,6 +15189,11 @@ msgid ""
 "bounding box"
 msgstr ""
 
+msgid ""
+"Recommends categories/tags on newly created OSM entities by analysing "
+"spatial entities into training features and using SVM classification"
+msgstr ""
+
 msgid "Import/export OSM data in PBF format"
 msgstr ""
 
@@ -18874,7 +18894,10 @@ msgstr ""
 msgid "Suction pumpout"
 msgstr ""
 
-msgid "Gravity dump station"
+msgid "Gravity drain for hose"
+msgstr ""
+
+msgid "Casette or Elsan Disposal"
 msgstr ""
 
 msgid "Operation times"
@@ -19378,6 +19401,10 @@ msgid "shed"
 msgstr ""
 
 msgctxt "building"
+msgid "storage_tank"
+msgstr ""
+
+msgctxt "building"
 msgid "cowshed"
 msgstr ""
 
@@ -19490,6 +19517,41 @@ msgstr ""
 msgid "Gasometer"
 msgstr ""
 
+msgid "Storage Tank"
+msgstr ""
+
+msgctxt "content"
+msgid "fuel"
+msgstr ""
+
+msgctxt "content"
+msgid "manure"
+msgstr ""
+
+msgctxt "content"
+msgid "oil"
+msgstr ""
+
+msgctxt "content"
+msgid "sewage"
+msgstr ""
+
+msgctxt "content"
+msgid "silage"
+msgstr ""
+
+msgctxt "content"
+msgid "slurry"
+msgstr ""
+
+msgctxt "content"
+msgid "water"
+msgstr ""
+
+msgctxt "content"
+msgid "wine"
+msgstr ""
+
 msgid "Bunker Silo"
 msgstr ""
 
@@ -22941,6 +23003,33 @@ msgstr ""
 msgid "Could not read NanoLog file:"
 msgstr ""
 
+msgid "OSM Recommendation"
+msgstr ""
+
+msgid "Recommend categories to your newly created instances."
+msgstr ""
+
+msgid "Training process configuration"
+msgstr ""
+
+msgid "Model Settings"
+msgstr ""
+
+msgid "Select objects or create new objects and get recommendation."
+msgstr ""
+
+msgid "Add Recommendation"
+msgstr ""
+
+msgid "Add a recommended key/value pair to your object"
+msgstr ""
+
+msgid "Train a Model"
+msgstr ""
+
+msgid "Start the training engine!"
+msgstr ""
+
 msgid "Edit opening hours"
 msgstr ""
 
diff --git a/i18n/po/te.po b/i18n/po/te.po
index cc84bd1..dfedd2b 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-04-27 03:33+0200\n"
+"POT-Creation-Date: 2015-05-12 03:33+0200\n"
 "PO-Revision-Date: 2011-05-13 08:50+0000\n"
 "Last-Translator: Praveen Illa <mail2ipn at gmail.com>\n"
 "Language-Team: Telugu <te at li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Launchpad-Export-Date: 2015-04-27 04:58+0000\n"
-"X-Generator: Launchpad (build 17430)\n"
+"X-Launchpad-Export-Date: 2015-05-12 04:58+0000\n"
+"X-Generator: Launchpad (build 17487)\n"
 "Language: te\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -1468,6 +1468,9 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Some irrelevant nodes have been removed from the selection"
+msgstr ""
+
 msgid "Undo"
 msgstr ""
 
@@ -3065,6 +3068,11 @@ msgstr ""
 msgid "Failed to persist preferences to ''{0}''"
 msgstr ""
 
+msgid ""
+"Try enabling IPv6 network, prefering IPv6 over IPv4 (only works on early "
+"startup)."
+msgstr ""
+
 msgid " (at line {0}, column {1})"
 msgstr ""
 
@@ -3693,6 +3701,15 @@ msgstr ""
 msgid "Number of lane dependent values inconsistent in backward direction"
 msgstr ""
 
+msgid "Long segments"
+msgstr ""
+
+msgid "This tests for long way segments, which are usually errors."
+msgstr ""
+
+msgid "Very long segment of {0} kilometers"
+msgstr ""
+
 msgid "Tag checker (MapCSS based)"
 msgstr ""
 
@@ -4522,6 +4539,18 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
+msgid ""
+"Detected useable IPv6 network, prefering IPv6 over IPv4 after next restart."
+msgstr ""
+
+msgid "Detected useable IPv6 network, prefering IPv6 over IPv4."
+msgstr ""
+
+msgid ""
+"Detected no useable IPv6 network, prefering IPv4 over IPv6 after next "
+"restart."
+msgstr ""
+
 msgid "Unsaved osm data"
 msgstr ""
 
@@ -6200,14 +6229,6 @@ msgstr ""
 msgid "Only launching info browsers for the first {0} of {1} selected users"
 msgstr ""
 
-msgid ""
-"<html>Failed to create an URL because the encoding ''{0}''<br>was missing on "
-"this system.</html>"
-msgstr ""
-
-msgid "Missing encoding"
-msgstr ""
-
 msgid "Author"
 msgstr ""
 
@@ -10662,6 +10683,9 @@ msgstr ""
 msgid "Maximum concurrent downloads: "
 msgstr ""
 
+msgid "Maximum concurrent downloads per host: "
+msgstr ""
+
 msgid "Maximum elements in disk cache: "
 msgstr ""
 
@@ -10764,9 +10788,6 @@ msgstr ""
 msgid "Warning: illegal format of entry in style list ''{0}''. Got ''{1}''"
 msgstr ""
 
-msgid "JOSM default (XML; old version)"
-msgstr ""
-
 msgid "JOSM default (MapCSS)"
 msgstr ""
 
@@ -12228,9 +12249,6 @@ msgstr ""
 msgid "Error parsing note response from server"
 msgstr ""
 
-msgid "Error encoding string: {0}"
-msgstr ""
-
 msgid "(Code={0})"
 msgstr ""
 
@@ -12588,25 +12606,25 @@ msgstr ""
 msgid "Read protocol version"
 msgstr ""
 
-msgid "Cannot start remotecontrol server on port {0}: {1}"
+msgid "Cannot start IPv4 remotecontrol server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Accepting connections on {0}:{1}"
+msgid "Cannot start IPv6 remotecontrol server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Server stopped."
+msgid "RemoteControl::Accepting remote connections on {0}:{1}"
 msgstr ""
 
-msgid "Cannot start remotecontrol https server on port {0}: {1}"
+msgid "RemoteControl::Server {0}:{1} stopped."
 msgstr ""
 
-msgid "Unable to initialize Remote Control HTTPS Server"
+msgid "Cannot start IPv4 remotecontrol https server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Accepting secure connections on {0}:{1}"
+msgid "Cannot start IPv6 remotecontrol https server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Server (https) stopped."
+msgid "RemoteControl::Accepting secure remote connections on {0}:{1}"
 msgstr ""
 
 msgid "Remote Control has been asked to create a new node."
@@ -14274,9 +14292,6 @@ msgstr ""
 msgid "Metropole Ruhr: Luftbilder (10 cm)"
 msgstr ""
 
-msgid "SN Luftbilder, Straßennetz, Administrative Grenzen"
-msgstr ""
-
 msgid "Drone Imagery (Haiti)"
 msgstr ""
 
@@ -15137,6 +15152,11 @@ msgid ""
 "bounding box"
 msgstr ""
 
+msgid ""
+"Recommends categories/tags on newly created OSM entities by analysing "
+"spatial entities into training features and using SVM classification"
+msgstr ""
+
 msgid "Import/export OSM data in PBF format"
 msgstr ""
 
@@ -18837,7 +18857,10 @@ msgstr ""
 msgid "Suction pumpout"
 msgstr ""
 
-msgid "Gravity dump station"
+msgid "Gravity drain for hose"
+msgstr ""
+
+msgid "Casette or Elsan Disposal"
 msgstr ""
 
 msgid "Operation times"
@@ -19341,6 +19364,10 @@ msgid "shed"
 msgstr ""
 
 msgctxt "building"
+msgid "storage_tank"
+msgstr ""
+
+msgctxt "building"
 msgid "cowshed"
 msgstr ""
 
@@ -19453,6 +19480,41 @@ msgstr ""
 msgid "Gasometer"
 msgstr ""
 
+msgid "Storage Tank"
+msgstr ""
+
+msgctxt "content"
+msgid "fuel"
+msgstr ""
+
+msgctxt "content"
+msgid "manure"
+msgstr ""
+
+msgctxt "content"
+msgid "oil"
+msgstr ""
+
+msgctxt "content"
+msgid "sewage"
+msgstr ""
+
+msgctxt "content"
+msgid "silage"
+msgstr ""
+
+msgctxt "content"
+msgid "slurry"
+msgstr ""
+
+msgctxt "content"
+msgid "water"
+msgstr ""
+
+msgctxt "content"
+msgid "wine"
+msgstr ""
+
 msgid "Bunker Silo"
 msgstr ""
 
@@ -22904,6 +22966,33 @@ msgstr ""
 msgid "Could not read NanoLog file:"
 msgstr ""
 
+msgid "OSM Recommendation"
+msgstr ""
+
+msgid "Recommend categories to your newly created instances."
+msgstr ""
+
+msgid "Training process configuration"
+msgstr ""
+
+msgid "Model Settings"
+msgstr ""
+
+msgid "Select objects or create new objects and get recommendation."
+msgstr ""
+
+msgid "Add Recommendation"
+msgstr ""
+
+msgid "Add a recommended key/value pair to your object"
+msgstr ""
+
+msgid "Train a Model"
+msgstr ""
+
+msgid "Start the training engine!"
+msgstr ""
+
 msgid "Edit opening hours"
 msgstr ""
 
diff --git a/i18n/po/th.po b/i18n/po/th.po
index 144fa8c..b641b22 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-04-27 03:33+0200\n"
+"POT-Creation-Date: 2015-05-12 03:33+0200\n"
 "PO-Revision-Date: 2009-03-23 02:34+0000\n"
 "Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
 "Language-Team: Thai <th at li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=1; plural=0;\n"
-"X-Launchpad-Export-Date: 2015-04-27 04:58+0000\n"
-"X-Generator: Launchpad (build 17430)\n"
+"X-Launchpad-Export-Date: 2015-05-12 04:58+0000\n"
+"X-Generator: Launchpad (build 17487)\n"
 "Language: th\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -1468,6 +1468,9 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Some irrelevant nodes have been removed from the selection"
+msgstr ""
+
 msgid "Undo"
 msgstr ""
 
@@ -3065,6 +3068,11 @@ msgstr ""
 msgid "Failed to persist preferences to ''{0}''"
 msgstr ""
 
+msgid ""
+"Try enabling IPv6 network, prefering IPv6 over IPv4 (only works on early "
+"startup)."
+msgstr ""
+
 msgid " (at line {0}, column {1})"
 msgstr ""
 
@@ -3693,6 +3701,15 @@ msgstr ""
 msgid "Number of lane dependent values inconsistent in backward direction"
 msgstr ""
 
+msgid "Long segments"
+msgstr ""
+
+msgid "This tests for long way segments, which are usually errors."
+msgstr ""
+
+msgid "Very long segment of {0} kilometers"
+msgstr ""
+
 msgid "Tag checker (MapCSS based)"
 msgstr ""
 
@@ -4522,6 +4539,18 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
+msgid ""
+"Detected useable IPv6 network, prefering IPv6 over IPv4 after next restart."
+msgstr ""
+
+msgid "Detected useable IPv6 network, prefering IPv6 over IPv4."
+msgstr ""
+
+msgid ""
+"Detected no useable IPv6 network, prefering IPv4 over IPv6 after next "
+"restart."
+msgstr ""
+
 msgid "Unsaved osm data"
 msgstr ""
 
@@ -6200,14 +6229,6 @@ msgstr ""
 msgid "Only launching info browsers for the first {0} of {1} selected users"
 msgstr ""
 
-msgid ""
-"<html>Failed to create an URL because the encoding ''{0}''<br>was missing on "
-"this system.</html>"
-msgstr ""
-
-msgid "Missing encoding"
-msgstr ""
-
 msgid "Author"
 msgstr ""
 
@@ -10662,6 +10683,9 @@ msgstr ""
 msgid "Maximum concurrent downloads: "
 msgstr ""
 
+msgid "Maximum concurrent downloads per host: "
+msgstr ""
+
 msgid "Maximum elements in disk cache: "
 msgstr ""
 
@@ -10764,9 +10788,6 @@ msgstr ""
 msgid "Warning: illegal format of entry in style list ''{0}''. Got ''{1}''"
 msgstr ""
 
-msgid "JOSM default (XML; old version)"
-msgstr ""
-
 msgid "JOSM default (MapCSS)"
 msgstr ""
 
@@ -12228,9 +12249,6 @@ msgstr ""
 msgid "Error parsing note response from server"
 msgstr ""
 
-msgid "Error encoding string: {0}"
-msgstr ""
-
 msgid "(Code={0})"
 msgstr ""
 
@@ -12588,25 +12606,25 @@ msgstr ""
 msgid "Read protocol version"
 msgstr ""
 
-msgid "Cannot start remotecontrol server on port {0}: {1}"
+msgid "Cannot start IPv4 remotecontrol server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Accepting connections on {0}:{1}"
+msgid "Cannot start IPv6 remotecontrol server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Server stopped."
+msgid "RemoteControl::Accepting remote connections on {0}:{1}"
 msgstr ""
 
-msgid "Cannot start remotecontrol https server on port {0}: {1}"
+msgid "RemoteControl::Server {0}:{1} stopped."
 msgstr ""
 
-msgid "Unable to initialize Remote Control HTTPS Server"
+msgid "Cannot start IPv4 remotecontrol https server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Accepting secure connections on {0}:{1}"
+msgid "Cannot start IPv6 remotecontrol https server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Server (https) stopped."
+msgid "RemoteControl::Accepting secure remote connections on {0}:{1}"
 msgstr ""
 
 msgid "Remote Control has been asked to create a new node."
@@ -14274,9 +14292,6 @@ msgstr ""
 msgid "Metropole Ruhr: Luftbilder (10 cm)"
 msgstr ""
 
-msgid "SN Luftbilder, Straßennetz, Administrative Grenzen"
-msgstr ""
-
 msgid "Drone Imagery (Haiti)"
 msgstr ""
 
@@ -15137,6 +15152,11 @@ msgid ""
 "bounding box"
 msgstr ""
 
+msgid ""
+"Recommends categories/tags on newly created OSM entities by analysing "
+"spatial entities into training features and using SVM classification"
+msgstr ""
+
 msgid "Import/export OSM data in PBF format"
 msgstr ""
 
@@ -18837,7 +18857,10 @@ msgstr ""
 msgid "Suction pumpout"
 msgstr ""
 
-msgid "Gravity dump station"
+msgid "Gravity drain for hose"
+msgstr ""
+
+msgid "Casette or Elsan Disposal"
 msgstr ""
 
 msgid "Operation times"
@@ -19341,6 +19364,10 @@ msgid "shed"
 msgstr ""
 
 msgctxt "building"
+msgid "storage_tank"
+msgstr ""
+
+msgctxt "building"
 msgid "cowshed"
 msgstr ""
 
@@ -19453,6 +19480,41 @@ msgstr ""
 msgid "Gasometer"
 msgstr ""
 
+msgid "Storage Tank"
+msgstr ""
+
+msgctxt "content"
+msgid "fuel"
+msgstr ""
+
+msgctxt "content"
+msgid "manure"
+msgstr ""
+
+msgctxt "content"
+msgid "oil"
+msgstr ""
+
+msgctxt "content"
+msgid "sewage"
+msgstr ""
+
+msgctxt "content"
+msgid "silage"
+msgstr ""
+
+msgctxt "content"
+msgid "slurry"
+msgstr ""
+
+msgctxt "content"
+msgid "water"
+msgstr ""
+
+msgctxt "content"
+msgid "wine"
+msgstr ""
+
 msgid "Bunker Silo"
 msgstr ""
 
@@ -22904,6 +22966,33 @@ msgstr ""
 msgid "Could not read NanoLog file:"
 msgstr ""
 
+msgid "OSM Recommendation"
+msgstr ""
+
+msgid "Recommend categories to your newly created instances."
+msgstr ""
+
+msgid "Training process configuration"
+msgstr ""
+
+msgid "Model Settings"
+msgstr ""
+
+msgid "Select objects or create new objects and get recommendation."
+msgstr ""
+
+msgid "Add Recommendation"
+msgstr ""
+
+msgid "Add a recommended key/value pair to your object"
+msgstr ""
+
+msgid "Train a Model"
+msgstr ""
+
+msgid "Start the training engine!"
+msgstr ""
+
 msgid "Edit opening hours"
 msgstr ""
 
diff --git a/i18n/po/tr.po b/i18n/po/tr.po
index 1faaaa7..6708a73 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-04-27 03:33+0200\n"
+"POT-Creation-Date: 2015-05-12 03:33+0200\n"
 "PO-Revision-Date: 2014-05-16 05:31+0000\n"
 "Last-Translator: katpatuka <email at katpatuka.org>\n"
 "Language-Team: Türkçe <>\n"
@@ -17,8 +17,8 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Launchpad-Export-Date: 2015-04-27 04:59+0000\n"
-"X-Generator: Launchpad (build 17430)\n"
+"X-Launchpad-Export-Date: 2015-05-12 04:59+0000\n"
+"X-Generator: Launchpad (build 17487)\n"
 "Language: \n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -1512,6 +1512,9 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Some irrelevant nodes have been removed from the selection"
+msgstr ""
+
 msgid "Undo"
 msgstr "Geri Al"
 
@@ -3119,6 +3122,11 @@ msgstr "Katman: {0}"
 msgid "Failed to persist preferences to ''{0}''"
 msgstr ""
 
+msgid ""
+"Try enabling IPv6 network, prefering IPv6 over IPv4 (only works on early "
+"startup)."
+msgstr ""
+
 msgid " (at line {0}, column {1})"
 msgstr ""
 
@@ -3749,6 +3757,15 @@ msgstr ""
 msgid "Number of lane dependent values inconsistent in backward direction"
 msgstr ""
 
+msgid "Long segments"
+msgstr ""
+
+msgid "This tests for long way segments, which are usually errors."
+msgstr ""
+
+msgid "Very long segment of {0} kilometers"
+msgstr ""
+
 msgid "Tag checker (MapCSS based)"
 msgstr ""
 
@@ -4588,6 +4605,18 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
+msgid ""
+"Detected useable IPv6 network, prefering IPv6 over IPv4 after next restart."
+msgstr ""
+
+msgid "Detected useable IPv6 network, prefering IPv6 over IPv4."
+msgstr ""
+
+msgid ""
+"Detected no useable IPv6 network, prefering IPv4 over IPv6 after next "
+"restart."
+msgstr ""
+
 msgid "Unsaved osm data"
 msgstr ""
 
@@ -6264,14 +6293,6 @@ msgstr ""
 msgid "Only launching info browsers for the first {0} of {1} selected users"
 msgstr ""
 
-msgid ""
-"<html>Failed to create an URL because the encoding ''{0}''<br>was missing on "
-"this system.</html>"
-msgstr ""
-
-msgid "Missing encoding"
-msgstr ""
-
 msgid "Author"
 msgstr "yazar"
 
@@ -10754,6 +10775,9 @@ msgstr ""
 msgid "Maximum concurrent downloads: "
 msgstr ""
 
+msgid "Maximum concurrent downloads per host: "
+msgstr ""
+
 msgid "Maximum elements in disk cache: "
 msgstr ""
 
@@ -10856,9 +10880,6 @@ msgstr ""
 msgid "Warning: illegal format of entry in style list ''{0}''. Got ''{1}''"
 msgstr ""
 
-msgid "JOSM default (XML; old version)"
-msgstr ""
-
 msgid "JOSM default (MapCSS)"
 msgstr ""
 
@@ -12325,9 +12346,6 @@ msgstr ""
 msgid "Error parsing note response from server"
 msgstr ""
 
-msgid "Error encoding string: {0}"
-msgstr ""
-
 msgid "(Code={0})"
 msgstr ""
 
@@ -12687,25 +12705,25 @@ msgstr ""
 msgid "Read protocol version"
 msgstr ""
 
-msgid "Cannot start remotecontrol server on port {0}: {1}"
+msgid "Cannot start IPv4 remotecontrol server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Accepting connections on {0}:{1}"
+msgid "Cannot start IPv6 remotecontrol server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Server stopped."
+msgid "RemoteControl::Accepting remote connections on {0}:{1}"
 msgstr ""
 
-msgid "Cannot start remotecontrol https server on port {0}: {1}"
+msgid "RemoteControl::Server {0}:{1} stopped."
 msgstr ""
 
-msgid "Unable to initialize Remote Control HTTPS Server"
+msgid "Cannot start IPv4 remotecontrol https server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Accepting secure connections on {0}:{1}"
+msgid "Cannot start IPv6 remotecontrol https server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Server (https) stopped."
+msgid "RemoteControl::Accepting secure remote connections on {0}:{1}"
 msgstr ""
 
 msgid "Remote Control has been asked to create a new node."
@@ -14380,9 +14398,6 @@ msgstr ""
 msgid "Metropole Ruhr: Luftbilder (10 cm)"
 msgstr ""
 
-msgid "SN Luftbilder, Straßennetz, Administrative Grenzen"
-msgstr ""
-
 msgid "Drone Imagery (Haiti)"
 msgstr ""
 
@@ -15243,6 +15258,11 @@ msgid ""
 "bounding box"
 msgstr ""
 
+msgid ""
+"Recommends categories/tags on newly created OSM entities by analysing "
+"spatial entities into training features and using SVM classification"
+msgstr ""
+
 msgid "Import/export OSM data in PBF format"
 msgstr ""
 
@@ -18943,7 +18963,10 @@ msgstr ""
 msgid "Suction pumpout"
 msgstr ""
 
-msgid "Gravity dump station"
+msgid "Gravity drain for hose"
+msgstr ""
+
+msgid "Casette or Elsan Disposal"
 msgstr ""
 
 msgid "Operation times"
@@ -19447,6 +19470,10 @@ msgid "shed"
 msgstr ""
 
 msgctxt "building"
+msgid "storage_tank"
+msgstr ""
+
+msgctxt "building"
 msgid "cowshed"
 msgstr ""
 
@@ -19559,6 +19586,41 @@ msgstr "Yeldeğerimeni"
 msgid "Gasometer"
 msgstr "Gazdeposu"
 
+msgid "Storage Tank"
+msgstr ""
+
+msgctxt "content"
+msgid "fuel"
+msgstr ""
+
+msgctxt "content"
+msgid "manure"
+msgstr ""
+
+msgctxt "content"
+msgid "oil"
+msgstr ""
+
+msgctxt "content"
+msgid "sewage"
+msgstr ""
+
+msgctxt "content"
+msgid "silage"
+msgstr ""
+
+msgctxt "content"
+msgid "slurry"
+msgstr ""
+
+msgctxt "content"
+msgid "water"
+msgstr ""
+
+msgctxt "content"
+msgid "wine"
+msgstr ""
+
 msgid "Bunker Silo"
 msgstr ""
 
@@ -23010,6 +23072,33 @@ msgstr ""
 msgid "Could not read NanoLog file:"
 msgstr ""
 
+msgid "OSM Recommendation"
+msgstr ""
+
+msgid "Recommend categories to your newly created instances."
+msgstr ""
+
+msgid "Training process configuration"
+msgstr ""
+
+msgid "Model Settings"
+msgstr ""
+
+msgid "Select objects or create new objects and get recommendation."
+msgstr ""
+
+msgid "Add Recommendation"
+msgstr ""
+
+msgid "Add a recommended key/value pair to your object"
+msgstr ""
+
+msgid "Train a Model"
+msgstr ""
+
+msgid "Start the training engine!"
+msgstr ""
+
 msgid "Edit opening hours"
 msgstr ""
 
diff --git a/i18n/po/ug.po b/i18n/po/ug.po
index 8241b3d..f9d864b 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-04-27 03:33+0200\n"
+"POT-Creation-Date: 2015-05-12 03:33+0200\n"
 "PO-Revision-Date: 2012-07-14 16:22+0000\n"
 "Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
 "Language-Team: Uyghur <ug at li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=1; plural=0;\n"
-"X-Launchpad-Export-Date: 2015-04-27 04:59+0000\n"
-"X-Generator: Launchpad (build 17430)\n"
+"X-Launchpad-Export-Date: 2015-05-12 04:59+0000\n"
+"X-Generator: Launchpad (build 17487)\n"
 "Language: \n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -1468,6 +1468,9 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Some irrelevant nodes have been removed from the selection"
+msgstr ""
+
 msgid "Undo"
 msgstr ""
 
@@ -3065,6 +3068,11 @@ msgstr ""
 msgid "Failed to persist preferences to ''{0}''"
 msgstr ""
 
+msgid ""
+"Try enabling IPv6 network, prefering IPv6 over IPv4 (only works on early "
+"startup)."
+msgstr ""
+
 msgid " (at line {0}, column {1})"
 msgstr ""
 
@@ -3693,6 +3701,15 @@ msgstr ""
 msgid "Number of lane dependent values inconsistent in backward direction"
 msgstr ""
 
+msgid "Long segments"
+msgstr ""
+
+msgid "This tests for long way segments, which are usually errors."
+msgstr ""
+
+msgid "Very long segment of {0} kilometers"
+msgstr ""
+
 msgid "Tag checker (MapCSS based)"
 msgstr ""
 
@@ -4522,6 +4539,18 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
+msgid ""
+"Detected useable IPv6 network, prefering IPv6 over IPv4 after next restart."
+msgstr ""
+
+msgid "Detected useable IPv6 network, prefering IPv6 over IPv4."
+msgstr ""
+
+msgid ""
+"Detected no useable IPv6 network, prefering IPv4 over IPv6 after next "
+"restart."
+msgstr ""
+
 msgid "Unsaved osm data"
 msgstr ""
 
@@ -6200,14 +6229,6 @@ msgstr ""
 msgid "Only launching info browsers for the first {0} of {1} selected users"
 msgstr ""
 
-msgid ""
-"<html>Failed to create an URL because the encoding ''{0}''<br>was missing on "
-"this system.</html>"
-msgstr ""
-
-msgid "Missing encoding"
-msgstr ""
-
 msgid "Author"
 msgstr ""
 
@@ -10662,6 +10683,9 @@ msgstr ""
 msgid "Maximum concurrent downloads: "
 msgstr ""
 
+msgid "Maximum concurrent downloads per host: "
+msgstr ""
+
 msgid "Maximum elements in disk cache: "
 msgstr ""
 
@@ -10764,9 +10788,6 @@ msgstr ""
 msgid "Warning: illegal format of entry in style list ''{0}''. Got ''{1}''"
 msgstr ""
 
-msgid "JOSM default (XML; old version)"
-msgstr ""
-
 msgid "JOSM default (MapCSS)"
 msgstr ""
 
@@ -12228,9 +12249,6 @@ msgstr ""
 msgid "Error parsing note response from server"
 msgstr ""
 
-msgid "Error encoding string: {0}"
-msgstr ""
-
 msgid "(Code={0})"
 msgstr ""
 
@@ -12588,25 +12606,25 @@ msgstr ""
 msgid "Read protocol version"
 msgstr ""
 
-msgid "Cannot start remotecontrol server on port {0}: {1}"
+msgid "Cannot start IPv4 remotecontrol server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Accepting connections on {0}:{1}"
+msgid "Cannot start IPv6 remotecontrol server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Server stopped."
+msgid "RemoteControl::Accepting remote connections on {0}:{1}"
 msgstr ""
 
-msgid "Cannot start remotecontrol https server on port {0}: {1}"
+msgid "RemoteControl::Server {0}:{1} stopped."
 msgstr ""
 
-msgid "Unable to initialize Remote Control HTTPS Server"
+msgid "Cannot start IPv4 remotecontrol https server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Accepting secure connections on {0}:{1}"
+msgid "Cannot start IPv6 remotecontrol https server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Server (https) stopped."
+msgid "RemoteControl::Accepting secure remote connections on {0}:{1}"
 msgstr ""
 
 msgid "Remote Control has been asked to create a new node."
@@ -14274,9 +14292,6 @@ msgstr ""
 msgid "Metropole Ruhr: Luftbilder (10 cm)"
 msgstr ""
 
-msgid "SN Luftbilder, Straßennetz, Administrative Grenzen"
-msgstr ""
-
 msgid "Drone Imagery (Haiti)"
 msgstr ""
 
@@ -15137,6 +15152,11 @@ msgid ""
 "bounding box"
 msgstr ""
 
+msgid ""
+"Recommends categories/tags on newly created OSM entities by analysing "
+"spatial entities into training features and using SVM classification"
+msgstr ""
+
 msgid "Import/export OSM data in PBF format"
 msgstr ""
 
@@ -18837,7 +18857,10 @@ msgstr ""
 msgid "Suction pumpout"
 msgstr ""
 
-msgid "Gravity dump station"
+msgid "Gravity drain for hose"
+msgstr ""
+
+msgid "Casette or Elsan Disposal"
 msgstr ""
 
 msgid "Operation times"
@@ -19341,6 +19364,10 @@ msgid "shed"
 msgstr ""
 
 msgctxt "building"
+msgid "storage_tank"
+msgstr ""
+
+msgctxt "building"
 msgid "cowshed"
 msgstr ""
 
@@ -19453,6 +19480,41 @@ msgstr ""
 msgid "Gasometer"
 msgstr ""
 
+msgid "Storage Tank"
+msgstr ""
+
+msgctxt "content"
+msgid "fuel"
+msgstr ""
+
+msgctxt "content"
+msgid "manure"
+msgstr ""
+
+msgctxt "content"
+msgid "oil"
+msgstr ""
+
+msgctxt "content"
+msgid "sewage"
+msgstr ""
+
+msgctxt "content"
+msgid "silage"
+msgstr ""
+
+msgctxt "content"
+msgid "slurry"
+msgstr ""
+
+msgctxt "content"
+msgid "water"
+msgstr ""
+
+msgctxt "content"
+msgid "wine"
+msgstr ""
+
 msgid "Bunker Silo"
 msgstr ""
 
@@ -22904,6 +22966,33 @@ msgstr ""
 msgid "Could not read NanoLog file:"
 msgstr ""
 
+msgid "OSM Recommendation"
+msgstr ""
+
+msgid "Recommend categories to your newly created instances."
+msgstr ""
+
+msgid "Training process configuration"
+msgstr ""
+
+msgid "Model Settings"
+msgstr ""
+
+msgid "Select objects or create new objects and get recommendation."
+msgstr ""
+
+msgid "Add Recommendation"
+msgstr ""
+
+msgid "Add a recommended key/value pair to your object"
+msgstr ""
+
+msgid "Train a Model"
+msgstr ""
+
+msgid "Start the training engine!"
+msgstr ""
+
 msgid "Edit opening hours"
 msgstr ""
 
diff --git a/i18n/po/uk.po b/i18n/po/uk.po
index d78d257..e5d01d9 100644
--- a/i18n/po/uk.po
+++ b/i18n/po/uk.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: josm\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-04-27 03:33+0200\n"
-"PO-Revision-Date: 2015-04-24 17:27+0000\n"
+"POT-Creation-Date: 2015-05-12 03:33+0200\n"
+"PO-Revision-Date: 2015-05-10 06:55+0000\n"
 "Last-Translator: andygol <Unknown>\n"
 "Language-Team: Ukrainian <uk at li.org>\n"
 "MIME-Version: 1.0\n"
@@ -16,8 +16,8 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
 "n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
-"X-Launchpad-Export-Date: 2015-04-27 05:00+0000\n"
-"X-Generator: Launchpad (build 17430)\n"
+"X-Launchpad-Export-Date: 2015-05-12 05:00+0000\n"
+"X-Generator: Launchpad (build 17487)\n"
 "Language: uk\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -1632,6 +1632,9 @@ msgstr[0] "Залежна лінія зникне після від’єднан
 msgstr[1] "Залежна лінія зникне після від’єднання точок."
 msgstr[2] "Залежна лінія зникне після від’єднання точок."
 
+msgid "Some irrelevant nodes have been removed from the selection"
+msgstr "Деякі невідповідні точки були вилучені з виділення"
+
 msgid "Undo"
 msgstr "Відмінити"
 
@@ -3411,6 +3414,13 @@ msgstr "Шар: {0}"
 msgid "Failed to persist preferences to ''{0}''"
 msgstr "Не вдалося зберегти налаштування у ''{0}''"
 
+msgid ""
+"Try enabling IPv6 network, prefering IPv6 over IPv4 (only works on early "
+"startup)."
+msgstr ""
+"Спробуйте ввімкнути мережу IPv6, перевагу IPv6 над IPv4 (працює тільки на "
+"раніх етапах запуску)."
+
 msgid " (at line {0}, column {1})"
 msgstr " (рядок {0}, ствопчик {1})"
 
@@ -4083,6 +4093,16 @@ msgstr ""
 "Кількість значень в залежності від смуг руху є суперечливою у напрямку проти "
 "напрямку лінії"
 
+msgid "Long segments"
+msgstr "Завеликі відрізки"
+
+msgid "This tests for long way segments, which are usually errors."
+msgstr ""
+"Перевірка на наявність довгих відрізків ліній, що зазвичай є помлковими."
+
+msgid "Very long segment of {0} kilometers"
+msgstr "Занадто довний відрізок ({0} кілометрів)"
+
 msgid "Tag checker (MapCSS based)"
 msgstr "Перевірка теґів (на основі MapCSS)"
 
@@ -4964,6 +4984,22 @@ msgstr[1] ""
 msgstr[2] ""
 "JOSM запущено в автономному режимі. Ці ресурси будуть недосяжними: {0}"
 
+msgid ""
+"Detected useable IPv6 network, prefering IPv6 over IPv4 after next restart."
+msgstr ""
+"Виявлено придатну мережу IPv6, перевага IPv6 над IPv4 буде увімкнено після "
+"перезапуску."
+
+msgid "Detected useable IPv6 network, prefering IPv6 over IPv4."
+msgstr "Виявлено придатну мережу IPv6, перевагу IPv6 над IPv4 увімкнено"
+
+msgid ""
+"Detected no useable IPv6 network, prefering IPv4 over IPv6 after next "
+"restart."
+msgstr ""
+"Виявлено не придатну мережу IPv6, перевага IPv4 над IPv6 буде увімкнено "
+"після перезапуску."
+
 msgid "Unsaved osm data"
 msgstr "Незбережені osm-дані"
 
@@ -6811,16 +6847,6 @@ msgstr ""
 "Відкрити в оглядачі інформацію тільки про перших {0} з {1} виділених "
 "учасників"
 
-msgid ""
-"<html>Failed to create an URL because the encoding ''{0}''<br>was missing on "
-"this system.</html>"
-msgstr ""
-"<html>Збій створення URL, тому що кодування ''{0}''<br>відсутнє у цій "
-"системі.</html>"
-
-msgid "Missing encoding"
-msgstr "Відсутнє кодування"
-
 msgid "Author"
 msgstr "Автор"
 
@@ -11837,6 +11863,9 @@ msgstr "Тека кешу квадратів мапи: "
 msgid "Maximum concurrent downloads: "
 msgstr "Максимальна кількість одночасних завантажень: "
 
+msgid "Maximum concurrent downloads per host: "
+msgstr "Максимальна кількість одночасних завантажень хосту: "
+
 msgid "Maximum elements in disk cache: "
 msgstr "Максимальна кількість елементів у дісковому кеші "
 
@@ -11952,9 +11981,6 @@ msgstr ""
 "Попередження: неправильний формат або запис у списку стилів ''{0}''. "
 "Отримано ''{1}''"
 
-msgid "JOSM default (XML; old version)"
-msgstr "JOSM типово (XML; стара версія)"
-
 msgid "JOSM default (MapCSS)"
 msgstr "JOSM типово (MapCSS)"
 
@@ -13571,9 +13597,6 @@ msgstr "Збій надсилання нотатки"
 msgid "Error parsing note response from server"
 msgstr "Помилка аналізу відповіді з сервера на нотатку"
 
-msgid "Error encoding string: {0}"
-msgstr "Помилка кодування: {0}"
-
 msgid "(Code={0})"
 msgstr "(Код={0})"
 
@@ -13967,28 +13990,33 @@ msgstr "Створення нових об’єктів"
 msgid "Read protocol version"
 msgstr "Отримання версії протоколу"
 
-msgid "Cannot start remotecontrol server on port {0}: {1}"
-msgstr "Неможливо запустити сервер дистанційного керування з портом {0}: {1}"
+msgid "Cannot start IPv4 remotecontrol server on port {0}: {1}"
+msgstr ""
+"Не вдалося запустити сервер дистанційного керування IPv4 на порту {0}: {1}"
 
-msgid "RemoteControl::Accepting connections on {0}:{1}"
-msgstr "RemoteControl::Прийом з’єднання на {0}:{1}"
+msgid "Cannot start IPv6 remotecontrol server on port {0}: {1}"
+msgstr ""
+"Не вдалося запустити сервер дистанційного керування IPv6 на порту {0}: {1}"
+
+msgid "RemoteControl::Accepting remote connections on {0}:{1}"
+msgstr "Дистанційне керування::Приймання віддалених з’єднаннь на {0}:{1}"
 
-msgid "RemoteControl::Server stopped."
-msgstr "RemoteControl::Сервер зупинено."
+msgid "RemoteControl::Server {0}:{1} stopped."
+msgstr "Дистанційне керування::Сервер {0}:{1} зупинений."
 
-msgid "Cannot start remotecontrol https server on port {0}: {1}"
+msgid "Cannot start IPv4 remotecontrol https server on port {0}: {1}"
 msgstr ""
-"Неможливо запустити сервер дистанційного керування для https на порту {0}: "
+"Не вдалося запустити https сервер дистанційного керування IPv4 на порту {0}: "
 "{1}"
 
-msgid "Unable to initialize Remote Control HTTPS Server"
-msgstr "Неможливо ініціалізувати HTTPS Сервер Дистанційного керування"
-
-msgid "RemoteControl::Accepting secure connections on {0}:{1}"
-msgstr "RemoteControl::Прийом захищеного з’єднання на {0}:{1}"
+msgid "Cannot start IPv6 remotecontrol https server on port {0}: {1}"
+msgstr ""
+"Не вдалося запустити https сервер дистанційного керування IPv6 на порту {0}: "
+"{1}"
 
-msgid "RemoteControl::Server (https) stopped."
-msgstr "RemoteControl::Сервер (https) зупинено."
+msgid "RemoteControl::Accepting secure remote connections on {0}:{1}"
+msgstr ""
+"Дистанційне керування::Приймання віддалених захищених з’єднаннь на {0}:{1}"
 
 msgid "Remote Control has been asked to create a new node."
 msgstr "Через Дистанційне керування отримано запит на створення нової точки."
@@ -15946,9 +15974,6 @@ msgstr "NRW-Atlas: Топографічна мапа 1:10000"
 msgid "Metropole Ruhr: Luftbilder (10 cm)"
 msgstr "Агломерація Рур: Аерофотозйомка (10 см)"
 
-msgid "SN Luftbilder, Straßennetz, Administrative Grenzen"
-msgstr "SN аерофотознімки, дорожня мережа, адміністративні кордоні"
-
 msgid "Drone Imagery (Haiti)"
 msgstr "Знімки дронів (Гаїті)"
 
@@ -16887,6 +16912,13 @@ msgstr ""
 "Завантажує помилки з Osm Inspector та показує їх у поточному місці "
 "знаходження JOSM"
 
+msgid ""
+"Recommends categories/tags on newly created OSM entities by analysing "
+"spatial entities into training features and using SVM classification"
+msgstr ""
+"Радить  категорії/теґи для новостворених об‘єктів OSM на основі аналізу "
+"даних механізму навчання та використання класифікації SVM"
+
 msgid "Import/export OSM data in PBF format"
 msgstr "Імпорт/експорт даних OSM у форматі PBF"
 
@@ -20659,8 +20691,11 @@ msgstr "Станція асенізації"
 msgid "Suction pumpout"
 msgstr "Висмоктування"
 
-msgid "Gravity dump station"
-msgstr "Злив самопливом"
+msgid "Gravity drain for hose"
+msgstr "Шланг для зливу самопливом"
+
+msgid "Casette or Elsan Disposal"
+msgstr "Касета або контейнер Elsan"
 
 msgid "Operation times"
 msgstr "Час роботи"
@@ -21163,6 +21198,10 @@ msgid "shed"
 msgstr "сарай"
 
 msgctxt "building"
+msgid "storage_tank"
+msgstr "резервуар"
+
+msgctxt "building"
 msgid "cowshed"
 msgstr "корівник"
 
@@ -21275,6 +21314,41 @@ msgstr "Вітряк"
 msgid "Gasometer"
 msgstr "Газгольдер"
 
+msgid "Storage Tank"
+msgstr "Резервуар"
+
+msgctxt "content"
+msgid "fuel"
+msgstr "паливо"
+
+msgctxt "content"
+msgid "manure"
+msgstr "гній"
+
+msgctxt "content"
+msgid "oil"
+msgstr "мастило"
+
+msgctxt "content"
+msgid "sewage"
+msgstr "каналізація"
+
+msgctxt "content"
+msgid "silage"
+msgstr "силос"
+
+msgctxt "content"
+msgid "slurry"
+msgstr "пульпа"
+
+msgctxt "content"
+msgid "water"
+msgstr "вода"
+
+msgctxt "content"
+msgid "wine"
+msgstr "вино"
+
 msgid "Bunker Silo"
 msgstr "Силосна яма"
 
@@ -24808,6 +24882,33 @@ msgstr "Відкрити файл NanoLog…"
 msgid "Could not read NanoLog file:"
 msgstr "Неможливо прочитати файл NanoLog:"
 
+msgid "OSM Recommendation"
+msgstr "Рекомендації OSM"
+
+msgid "Recommend categories to your newly created instances."
+msgstr "Радіть яку категорію обрати для новостворених об‘єктів."
+
+msgid "Training process configuration"
+msgstr "Конфігурація навчального процесу"
+
+msgid "Model Settings"
+msgstr "Параметри моделі"
+
+msgid "Select objects or create new objects and get recommendation."
+msgstr "Виділіть об‘єкти, або створіть нові та отримайте рекомендацію."
+
+msgid "Add Recommendation"
+msgstr "Додати рекомендацію"
+
+msgid "Add a recommended key/value pair to your object"
+msgstr "Додати пару ключ/значення з рекомендації до об‘ єкта"
+
+msgid "Train a Model"
+msgstr "Навчання моделі"
+
+msgid "Start the training engine!"
+msgstr "Запустити механізм навчання!"
+
 msgid "Edit opening hours"
 msgstr "Властивості робочого часу"
 
@@ -31948,6 +32049,3 @@ msgstr "Кермувати"
 
 msgid "Drive a race car on this layer"
 msgstr "Керуйте гоночним автомобілем на цьому шарі"
-
-#~ msgid "Note comment background"
-#~ msgstr "Фон коментаря нотатки"
diff --git a/i18n/po/ur.po b/i18n/po/ur.po
index 70d3606..44e531e 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-04-27 03:33+0200\n"
+"POT-Creation-Date: 2015-05-12 03:33+0200\n"
 "PO-Revision-Date: 2010-05-13 04:15+0000\n"
 "Last-Translator: Shoaib Mirza <Unknown>\n"
 "Language-Team: Urdu <ur at li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Launchpad-Export-Date: 2015-04-27 05:00+0000\n"
-"X-Generator: Launchpad (build 17430)\n"
+"X-Launchpad-Export-Date: 2015-05-12 05:00+0000\n"
+"X-Generator: Launchpad (build 17487)\n"
 "Language: ur\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -1468,6 +1468,9 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Some irrelevant nodes have been removed from the selection"
+msgstr ""
+
 msgid "Undo"
 msgstr ""
 
@@ -3065,6 +3068,11 @@ msgstr ""
 msgid "Failed to persist preferences to ''{0}''"
 msgstr ""
 
+msgid ""
+"Try enabling IPv6 network, prefering IPv6 over IPv4 (only works on early "
+"startup)."
+msgstr ""
+
 msgid " (at line {0}, column {1})"
 msgstr ""
 
@@ -3693,6 +3701,15 @@ msgstr ""
 msgid "Number of lane dependent values inconsistent in backward direction"
 msgstr ""
 
+msgid "Long segments"
+msgstr ""
+
+msgid "This tests for long way segments, which are usually errors."
+msgstr ""
+
+msgid "Very long segment of {0} kilometers"
+msgstr ""
+
 msgid "Tag checker (MapCSS based)"
 msgstr ""
 
@@ -4522,6 +4539,18 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
+msgid ""
+"Detected useable IPv6 network, prefering IPv6 over IPv4 after next restart."
+msgstr ""
+
+msgid "Detected useable IPv6 network, prefering IPv6 over IPv4."
+msgstr ""
+
+msgid ""
+"Detected no useable IPv6 network, prefering IPv4 over IPv6 after next "
+"restart."
+msgstr ""
+
 msgid "Unsaved osm data"
 msgstr ""
 
@@ -6200,14 +6229,6 @@ msgstr ""
 msgid "Only launching info browsers for the first {0} of {1} selected users"
 msgstr ""
 
-msgid ""
-"<html>Failed to create an URL because the encoding ''{0}''<br>was missing on "
-"this system.</html>"
-msgstr ""
-
-msgid "Missing encoding"
-msgstr ""
-
 msgid "Author"
 msgstr ""
 
@@ -10662,6 +10683,9 @@ msgstr ""
 msgid "Maximum concurrent downloads: "
 msgstr ""
 
+msgid "Maximum concurrent downloads per host: "
+msgstr ""
+
 msgid "Maximum elements in disk cache: "
 msgstr ""
 
@@ -10764,9 +10788,6 @@ msgstr ""
 msgid "Warning: illegal format of entry in style list ''{0}''. Got ''{1}''"
 msgstr ""
 
-msgid "JOSM default (XML; old version)"
-msgstr ""
-
 msgid "JOSM default (MapCSS)"
 msgstr ""
 
@@ -12228,9 +12249,6 @@ msgstr ""
 msgid "Error parsing note response from server"
 msgstr ""
 
-msgid "Error encoding string: {0}"
-msgstr ""
-
 msgid "(Code={0})"
 msgstr ""
 
@@ -12588,25 +12606,25 @@ msgstr ""
 msgid "Read protocol version"
 msgstr ""
 
-msgid "Cannot start remotecontrol server on port {0}: {1}"
+msgid "Cannot start IPv4 remotecontrol server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Accepting connections on {0}:{1}"
+msgid "Cannot start IPv6 remotecontrol server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Server stopped."
+msgid "RemoteControl::Accepting remote connections on {0}:{1}"
 msgstr ""
 
-msgid "Cannot start remotecontrol https server on port {0}: {1}"
+msgid "RemoteControl::Server {0}:{1} stopped."
 msgstr ""
 
-msgid "Unable to initialize Remote Control HTTPS Server"
+msgid "Cannot start IPv4 remotecontrol https server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Accepting secure connections on {0}:{1}"
+msgid "Cannot start IPv6 remotecontrol https server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Server (https) stopped."
+msgid "RemoteControl::Accepting secure remote connections on {0}:{1}"
 msgstr ""
 
 msgid "Remote Control has been asked to create a new node."
@@ -14274,9 +14292,6 @@ msgstr ""
 msgid "Metropole Ruhr: Luftbilder (10 cm)"
 msgstr ""
 
-msgid "SN Luftbilder, Straßennetz, Administrative Grenzen"
-msgstr ""
-
 msgid "Drone Imagery (Haiti)"
 msgstr ""
 
@@ -15137,6 +15152,11 @@ msgid ""
 "bounding box"
 msgstr ""
 
+msgid ""
+"Recommends categories/tags on newly created OSM entities by analysing "
+"spatial entities into training features and using SVM classification"
+msgstr ""
+
 msgid "Import/export OSM data in PBF format"
 msgstr ""
 
@@ -18837,7 +18857,10 @@ msgstr ""
 msgid "Suction pumpout"
 msgstr ""
 
-msgid "Gravity dump station"
+msgid "Gravity drain for hose"
+msgstr ""
+
+msgid "Casette or Elsan Disposal"
 msgstr ""
 
 msgid "Operation times"
@@ -19341,6 +19364,10 @@ msgid "shed"
 msgstr ""
 
 msgctxt "building"
+msgid "storage_tank"
+msgstr ""
+
+msgctxt "building"
 msgid "cowshed"
 msgstr ""
 
@@ -19453,6 +19480,41 @@ msgstr ""
 msgid "Gasometer"
 msgstr ""
 
+msgid "Storage Tank"
+msgstr ""
+
+msgctxt "content"
+msgid "fuel"
+msgstr ""
+
+msgctxt "content"
+msgid "manure"
+msgstr ""
+
+msgctxt "content"
+msgid "oil"
+msgstr ""
+
+msgctxt "content"
+msgid "sewage"
+msgstr ""
+
+msgctxt "content"
+msgid "silage"
+msgstr ""
+
+msgctxt "content"
+msgid "slurry"
+msgstr ""
+
+msgctxt "content"
+msgid "water"
+msgstr ""
+
+msgctxt "content"
+msgid "wine"
+msgstr ""
+
 msgid "Bunker Silo"
 msgstr ""
 
@@ -22904,6 +22966,33 @@ msgstr ""
 msgid "Could not read NanoLog file:"
 msgstr ""
 
+msgid "OSM Recommendation"
+msgstr ""
+
+msgid "Recommend categories to your newly created instances."
+msgstr ""
+
+msgid "Training process configuration"
+msgstr ""
+
+msgid "Model Settings"
+msgstr ""
+
+msgid "Select objects or create new objects and get recommendation."
+msgstr ""
+
+msgid "Add Recommendation"
+msgstr ""
+
+msgid "Add a recommended key/value pair to your object"
+msgstr ""
+
+msgid "Train a Model"
+msgstr ""
+
+msgid "Start the training engine!"
+msgstr ""
+
 msgid "Edit opening hours"
 msgstr ""
 
diff --git a/i18n/po/vi.po b/i18n/po/vi.po
index f5e31ff..012f6b3 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-04-27 03:33+0200\n"
+"POT-Creation-Date: 2015-05-12 03:33+0200\n"
 "PO-Revision-Date: 2013-03-13 05:33+0000\n"
 "Last-Translator: Minh Nguyễn <mxn at 1ec5.org>\n"
 "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-04-27 05:01+0000\n"
-"X-Generator: Launchpad (build 17430)\n"
+"X-Launchpad-Export-Date: 2015-05-12 05:01+0000\n"
+"X-Generator: Launchpad (build 17487)\n"
 "Language: vi\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -1479,6 +1479,9 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Some irrelevant nodes have been removed from the selection"
+msgstr ""
+
 msgid "Undo"
 msgstr "Hoàn lại"
 
@@ -3080,6 +3083,11 @@ msgstr "Layer: {0}"
 msgid "Failed to persist preferences to ''{0}''"
 msgstr ""
 
+msgid ""
+"Try enabling IPv6 network, prefering IPv6 over IPv4 (only works on early "
+"startup)."
+msgstr ""
+
 msgid " (at line {0}, column {1})"
 msgstr ""
 
@@ -3705,6 +3713,15 @@ msgstr ""
 msgid "Number of lane dependent values inconsistent in backward direction"
 msgstr ""
 
+msgid "Long segments"
+msgstr ""
+
+msgid "This tests for long way segments, which are usually errors."
+msgstr ""
+
+msgid "Very long segment of {0} kilometers"
+msgstr ""
+
 msgid "Tag checker (MapCSS based)"
 msgstr ""
 
@@ -4531,6 +4548,18 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
+msgid ""
+"Detected useable IPv6 network, prefering IPv6 over IPv4 after next restart."
+msgstr ""
+
+msgid "Detected useable IPv6 network, prefering IPv6 over IPv4."
+msgstr ""
+
+msgid ""
+"Detected no useable IPv6 network, prefering IPv4 over IPv6 after next "
+"restart."
+msgstr ""
+
 msgid "Unsaved osm data"
 msgstr ""
 
@@ -6209,14 +6238,6 @@ msgstr ""
 msgid "Only launching info browsers for the first {0} of {1} selected users"
 msgstr ""
 
-msgid ""
-"<html>Failed to create an URL because the encoding ''{0}''<br>was missing on "
-"this system.</html>"
-msgstr ""
-
-msgid "Missing encoding"
-msgstr ""
-
 msgid "Author"
 msgstr ""
 
@@ -10681,6 +10702,9 @@ msgstr ""
 msgid "Maximum concurrent downloads: "
 msgstr ""
 
+msgid "Maximum concurrent downloads per host: "
+msgstr ""
+
 msgid "Maximum elements in disk cache: "
 msgstr ""
 
@@ -10783,9 +10807,6 @@ msgstr ""
 msgid "Warning: illegal format of entry in style list ''{0}''. Got ''{1}''"
 msgstr ""
 
-msgid "JOSM default (XML; old version)"
-msgstr ""
-
 msgid "JOSM default (MapCSS)"
 msgstr ""
 
@@ -12251,9 +12272,6 @@ msgstr ""
 msgid "Error parsing note response from server"
 msgstr ""
 
-msgid "Error encoding string: {0}"
-msgstr ""
-
 msgid "(Code={0})"
 msgstr ""
 
@@ -12611,25 +12629,25 @@ msgstr ""
 msgid "Read protocol version"
 msgstr ""
 
-msgid "Cannot start remotecontrol server on port {0}: {1}"
+msgid "Cannot start IPv4 remotecontrol server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Accepting connections on {0}:{1}"
+msgid "Cannot start IPv6 remotecontrol server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Server stopped."
+msgid "RemoteControl::Accepting remote connections on {0}:{1}"
 msgstr ""
 
-msgid "Cannot start remotecontrol https server on port {0}: {1}"
+msgid "RemoteControl::Server {0}:{1} stopped."
 msgstr ""
 
-msgid "Unable to initialize Remote Control HTTPS Server"
+msgid "Cannot start IPv4 remotecontrol https server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Accepting secure connections on {0}:{1}"
+msgid "Cannot start IPv6 remotecontrol https server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Server (https) stopped."
+msgid "RemoteControl::Accepting secure remote connections on {0}:{1}"
 msgstr ""
 
 msgid "Remote Control has been asked to create a new node."
@@ -14297,9 +14315,6 @@ msgstr ""
 msgid "Metropole Ruhr: Luftbilder (10 cm)"
 msgstr ""
 
-msgid "SN Luftbilder, Straßennetz, Administrative Grenzen"
-msgstr ""
-
 msgid "Drone Imagery (Haiti)"
 msgstr ""
 
@@ -15160,6 +15175,11 @@ msgid ""
 "bounding box"
 msgstr ""
 
+msgid ""
+"Recommends categories/tags on newly created OSM entities by analysing "
+"spatial entities into training features and using SVM classification"
+msgstr ""
+
 msgid "Import/export OSM data in PBF format"
 msgstr ""
 
@@ -18860,7 +18880,10 @@ msgstr ""
 msgid "Suction pumpout"
 msgstr ""
 
-msgid "Gravity dump station"
+msgid "Gravity drain for hose"
+msgstr ""
+
+msgid "Casette or Elsan Disposal"
 msgstr ""
 
 msgid "Operation times"
@@ -19364,6 +19387,10 @@ msgid "shed"
 msgstr ""
 
 msgctxt "building"
+msgid "storage_tank"
+msgstr ""
+
+msgctxt "building"
 msgid "cowshed"
 msgstr ""
 
@@ -19476,6 +19503,41 @@ msgstr ""
 msgid "Gasometer"
 msgstr ""
 
+msgid "Storage Tank"
+msgstr ""
+
+msgctxt "content"
+msgid "fuel"
+msgstr ""
+
+msgctxt "content"
+msgid "manure"
+msgstr ""
+
+msgctxt "content"
+msgid "oil"
+msgstr ""
+
+msgctxt "content"
+msgid "sewage"
+msgstr ""
+
+msgctxt "content"
+msgid "silage"
+msgstr ""
+
+msgctxt "content"
+msgid "slurry"
+msgstr ""
+
+msgctxt "content"
+msgid "water"
+msgstr ""
+
+msgctxt "content"
+msgid "wine"
+msgstr ""
+
 msgid "Bunker Silo"
 msgstr ""
 
@@ -22927,6 +22989,33 @@ msgstr ""
 msgid "Could not read NanoLog file:"
 msgstr ""
 
+msgid "OSM Recommendation"
+msgstr ""
+
+msgid "Recommend categories to your newly created instances."
+msgstr ""
+
+msgid "Training process configuration"
+msgstr ""
+
+msgid "Model Settings"
+msgstr ""
+
+msgid "Select objects or create new objects and get recommendation."
+msgstr ""
+
+msgid "Add Recommendation"
+msgstr ""
+
+msgid "Add a recommended key/value pair to your object"
+msgstr ""
+
+msgid "Train a Model"
+msgstr ""
+
+msgid "Start the training engine!"
+msgstr ""
+
 msgid "Edit opening hours"
 msgstr ""
 
diff --git a/i18n/po/zh_CN.po b/i18n/po/zh_CN.po
index 5e767e6..4a2cd36 100644
--- a/i18n/po/zh_CN.po
+++ b/i18n/po/zh_CN.po
@@ -10,7 +10,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: josm\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-04-27 03:33+0200\n"
+"POT-Creation-Date: 2015-05-12 03:33+0200\n"
 "PO-Revision-Date: 2015-04-21 04:28+0000\n"
 "Last-Translator: rc1028 <q371320247 at live.com>\n"
 "Language-Team: 汉语 <>\n"
@@ -18,8 +18,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-04-27 05:04+0000\n"
-"X-Generator: Launchpad (build 17430)\n"
+"X-Launchpad-Export-Date: 2015-05-12 05:03+0000\n"
+"X-Generator: Launchpad (build 17487)\n"
 "Language: zh_CN\n"
 
 msgid "yard"
@@ -1472,6 +1472,9 @@ msgid_plural ""
 "The affected way would disappear after disconnecting the selected nodes."
 msgstr[0] "断开选定的节点后,受影响的路径将会消失。"
 
+msgid "Some irrelevant nodes have been removed from the selection"
+msgstr ""
+
 msgid "Undo"
 msgstr "撤消"
 
@@ -3060,6 +3063,11 @@ msgstr "图层:{0}"
 msgid "Failed to persist preferences to ''{0}''"
 msgstr "无法保持首选项“{0}”"
 
+msgid ""
+"Try enabling IPv6 network, prefering IPv6 over IPv4 (only works on early "
+"startup)."
+msgstr ""
+
 msgid " (at line {0}, column {1})"
 msgstr " (在 {0} 行,{1} 列)"
 
@@ -3687,6 +3695,15 @@ msgstr "正向车道相关值参数不一致"
 msgid "Number of lane dependent values inconsistent in backward direction"
 msgstr "反向车道相关值参数不一致"
 
+msgid "Long segments"
+msgstr ""
+
+msgid "This tests for long way segments, which are usually errors."
+msgstr ""
+
+msgid "Very long segment of {0} kilometers"
+msgstr ""
+
 msgid "Tag checker (MapCSS based)"
 msgstr "标签检查器(基于 MapCSS)"
 
@@ -4517,6 +4534,18 @@ msgid_plural ""
 "JOSM is running in offline mode. These resources will not be available: {0}"
 msgstr[0] "JOSM 正在以离线模式运行。此资源将无法使用:{0}"
 
+msgid ""
+"Detected useable IPv6 network, prefering IPv6 over IPv4 after next restart."
+msgstr ""
+
+msgid "Detected useable IPv6 network, prefering IPv6 over IPv4."
+msgstr ""
+
+msgid ""
+"Detected no useable IPv6 network, prefering IPv4 over IPv6 after next "
+"restart."
+msgstr ""
+
 msgid "Unsaved osm data"
 msgstr "未保存的 OSM 数据"
 
@@ -6219,14 +6248,6 @@ msgstr "启动浏览器,显示关于此用户的信息"
 msgid "Only launching info browsers for the first {0} of {1} selected users"
 msgstr "{1} 位已选中用户中,只启动第一位 {0} 的信息浏览器"
 
-msgid ""
-"<html>Failed to create an URL because the encoding ''{0}''<br>was missing on "
-"this system.</html>"
-msgstr "<html>无法建立 URL,因为编码“{0}”<br>在这个系统中并不存在。</html>"
-
-msgid "Missing encoding"
-msgstr "缺少编码"
-
 msgid "Author"
 msgstr "作者"
 
@@ -10753,6 +10774,9 @@ msgstr "瓦片缓存目录: "
 msgid "Maximum concurrent downloads: "
 msgstr ""
 
+msgid "Maximum concurrent downloads per host: "
+msgstr ""
+
 msgid "Maximum elements in disk cache: "
 msgstr ""
 
@@ -10859,9 +10883,6 @@ msgstr "<html>无法从这里加载样式来源列表:<br>“{0}”。<br><br>
 msgid "Warning: illegal format of entry in style list ''{0}''. Got ''{1}''"
 msgstr "警告:样式列表“{0}”中项目的格式不正确。得到“{1}”。"
 
-msgid "JOSM default (XML; old version)"
-msgstr "JOSM默认(XML;旧版本)"
-
 msgid "JOSM default (MapCSS)"
 msgstr "JOSM默认(MapCSS)"
 
@@ -12335,9 +12356,6 @@ msgstr "注释上传失败"
 msgid "Error parsing note response from server"
 msgstr "解析服务器返回的地图注释响应失败"
 
-msgid "Error encoding string: {0}"
-msgstr "字符串{0}编码错误"
-
 msgid "(Code={0})"
 msgstr "(代码={0})"
 
@@ -12698,25 +12716,25 @@ msgstr "创建新对象"
 msgid "Read protocol version"
 msgstr "读取通讯许可证版本"
 
-msgid "Cannot start remotecontrol server on port {0}: {1}"
+msgid "Cannot start IPv4 remotecontrol server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Accepting connections on {0}:{1}"
+msgid "Cannot start IPv6 remotecontrol server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Server stopped."
+msgid "RemoteControl::Accepting remote connections on {0}:{1}"
 msgstr ""
 
-msgid "Cannot start remotecontrol https server on port {0}: {1}"
+msgid "RemoteControl::Server {0}:{1} stopped."
 msgstr ""
 
-msgid "Unable to initialize Remote Control HTTPS Server"
+msgid "Cannot start IPv4 remotecontrol https server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Accepting secure connections on {0}:{1}"
+msgid "Cannot start IPv6 remotecontrol https server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Server (https) stopped."
+msgid "RemoteControl::Accepting secure remote connections on {0}:{1}"
 msgstr ""
 
 msgid "Remote Control has been asked to create a new node."
@@ -14395,9 +14413,6 @@ msgstr ""
 msgid "Metropole Ruhr: Luftbilder (10 cm)"
 msgstr ""
 
-msgid "SN Luftbilder, Straßennetz, Administrative Grenzen"
-msgstr ""
-
 msgid "Drone Imagery (Haiti)"
 msgstr ""
 
@@ -15260,6 +15275,11 @@ msgid ""
 "bounding box"
 msgstr ""
 
+msgid ""
+"Recommends categories/tags on newly created OSM entities by analysing "
+"spatial entities into training features and using SVM classification"
+msgstr ""
+
 msgid "Import/export OSM data in PBF format"
 msgstr ""
 
@@ -18957,7 +18977,10 @@ msgstr ""
 msgid "Suction pumpout"
 msgstr ""
 
-msgid "Gravity dump station"
+msgid "Gravity drain for hose"
+msgstr ""
+
+msgid "Casette or Elsan Disposal"
 msgstr ""
 
 msgid "Operation times"
@@ -19461,6 +19484,10 @@ msgid "shed"
 msgstr "棚舍"
 
 msgctxt "building"
+msgid "storage_tank"
+msgstr ""
+
+msgctxt "building"
 msgid "cowshed"
 msgstr ""
 
@@ -19573,6 +19600,41 @@ msgstr "风车"
 msgid "Gasometer"
 msgstr "贮气桶"
 
+msgid "Storage Tank"
+msgstr ""
+
+msgctxt "content"
+msgid "fuel"
+msgstr ""
+
+msgctxt "content"
+msgid "manure"
+msgstr ""
+
+msgctxt "content"
+msgid "oil"
+msgstr ""
+
+msgctxt "content"
+msgid "sewage"
+msgstr ""
+
+msgctxt "content"
+msgid "silage"
+msgstr ""
+
+msgctxt "content"
+msgid "slurry"
+msgstr ""
+
+msgctxt "content"
+msgid "water"
+msgstr ""
+
+msgctxt "content"
+msgid "wine"
+msgstr ""
+
 msgid "Bunker Silo"
 msgstr ""
 
@@ -23029,6 +23091,33 @@ msgstr ""
 msgid "Could not read NanoLog file:"
 msgstr ""
 
+msgid "OSM Recommendation"
+msgstr ""
+
+msgid "Recommend categories to your newly created instances."
+msgstr ""
+
+msgid "Training process configuration"
+msgstr ""
+
+msgid "Model Settings"
+msgstr ""
+
+msgid "Select objects or create new objects and get recommendation."
+msgstr ""
+
+msgid "Add Recommendation"
+msgstr ""
+
+msgid "Add a recommended key/value pair to your object"
+msgstr ""
+
+msgid "Train a Model"
+msgstr ""
+
+msgid "Start the training engine!"
+msgstr ""
+
 msgid "Edit opening hours"
 msgstr "编辑开放时间"
 
diff --git a/i18n/po/zh_TW.po b/i18n/po/zh_TW.po
index 945c3e6..b524e89 100644
--- a/i18n/po/zh_TW.po
+++ b/i18n/po/zh_TW.po
@@ -7,16 +7,16 @@ msgid ""
 msgstr ""
 "Project-Id-Version: josm\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-04-27 03:33+0200\n"
-"PO-Revision-Date: 2015-04-23 04:35+0000\n"
+"POT-Creation-Date: 2015-05-12 03:33+0200\n"
+"PO-Revision-Date: 2015-05-02 23:23+0000\n"
 "Last-Translator: Chao-Hsiung Liao <j_h_liau at yahoo.com.tw>\n"
 "Language-Team: Traditional Chinese\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=1; plural=0;\n"
-"X-Launchpad-Export-Date: 2015-04-27 05:03+0000\n"
-"X-Generator: Launchpad (build 17430)\n"
+"X-Launchpad-Export-Date: 2015-05-12 05:03+0000\n"
+"X-Generator: Launchpad (build 17487)\n"
 "Language: zh_TW\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -472,7 +472,7 @@ msgid "Download data"
 msgstr "下載資料"
 
 msgid "Download notes in current view"
-msgstr ""
+msgstr "在目前檢視下載筆記"
 
 msgid "Download object..."
 msgstr "下載物件..."
@@ -1186,7 +1186,7 @@ msgid "Search Notes..."
 msgstr "搜尋筆記…"
 
 msgid "Download notes from the note search API"
-msgstr ""
+msgstr "從筆記搜尋 API 下載筆記"
 
 msgid "Search the OSM API for notes containing words:"
 msgstr ""
@@ -1469,6 +1469,9 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Some irrelevant nodes have been removed from the selection"
+msgstr ""
+
 msgid "Undo"
 msgstr "復原"
 
@@ -3061,6 +3064,11 @@ msgstr "圖層:{0}"
 msgid "Failed to persist preferences to ''{0}''"
 msgstr ""
 
+msgid ""
+"Try enabling IPv6 network, prefering IPv6 over IPv4 (only works on early "
+"startup)."
+msgstr ""
+
 msgid " (at line {0}, column {1})"
 msgstr " (於第 {0} 列,第 {1} 欄)"
 
@@ -3688,6 +3696,15 @@ msgstr ""
 msgid "Number of lane dependent values inconsistent in backward direction"
 msgstr ""
 
+msgid "Long segments"
+msgstr ""
+
+msgid "This tests for long way segments, which are usually errors."
+msgstr ""
+
+msgid "Very long segment of {0} kilometers"
+msgstr ""
+
 msgid "Tag checker (MapCSS based)"
 msgstr "標籤檢查器 (基於 MapCSS)"
 
@@ -4518,6 +4535,18 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
+msgid ""
+"Detected useable IPv6 network, prefering IPv6 over IPv4 after next restart."
+msgstr ""
+
+msgid "Detected useable IPv6 network, prefering IPv6 over IPv4."
+msgstr ""
+
+msgid ""
+"Detected no useable IPv6 network, prefering IPv4 over IPv6 after next "
+"restart."
+msgstr ""
+
 msgid "Unsaved osm data"
 msgstr "未儲存的 osm 資料"
 
@@ -4615,7 +4644,7 @@ msgid "Click to open the imagery tab in the preferences"
 msgstr "點選以開啟偏好設定的圖片分頁"
 
 msgid "Search menu items"
-msgstr ""
+msgstr "搜尋選單項目"
 
 msgid "Audio"
 msgstr "音效"
@@ -6193,14 +6222,6 @@ msgstr "啟動瀏覽器顯示關於此使用者的資訊"
 msgid "Only launching info browsers for the first {0} of {1} selected users"
 msgstr ""
 
-msgid ""
-"<html>Failed to create an URL because the encoding ''{0}''<br>was missing on "
-"this system.</html>"
-msgstr "<html>無法建立 URL,因為編碼「{0}」<br>在這個系統中並不存在。</html>"
-
-msgid "Missing encoding"
-msgstr "缺少編碼"
-
 msgid "Author"
 msgstr "作者"
 
@@ -6778,7 +6799,7 @@ msgid "Tags: {0} / Memberships: {1}"
 msgstr "標籤: {0} / 成員: {1}"
 
 msgid "Tags / Memberships"
-msgstr ""
+msgstr "標籤 / 成員"
 
 msgid "Delete the selected key in all objects"
 msgstr "刪除所有物件中選取的設定鍵"
@@ -7376,7 +7397,7 @@ msgid "Select to download GPS traces in the selected download area."
 msgstr "選擇以下載選取下載區域中的 GPS 軌跡。"
 
 msgid "Select to download notes in the selected download area."
-msgstr ""
+msgstr "在選取的下載區域選擇下載筆記。"
 
 msgid "Download as new layer"
 msgstr "下載為新圖層"
@@ -10696,6 +10717,9 @@ msgstr "拼貼快取目錄: "
 msgid "Maximum concurrent downloads: "
 msgstr ""
 
+msgid "Maximum concurrent downloads per host: "
+msgstr ""
+
 msgid "Maximum elements in disk cache: "
 msgstr ""
 
@@ -10802,9 +10826,6 @@ msgstr "<html>無法從這裡載入樣式來源清單:<br>「{0}」。<br><br>
 msgid "Warning: illegal format of entry in style list ''{0}''. Got ''{1}''"
 msgstr "警告:樣式清單「{0}」中項目的格式不正確。得到「{1}」。"
 
-msgid "JOSM default (XML; old version)"
-msgstr ""
-
 msgid "JOSM default (MapCSS)"
 msgstr ""
 
@@ -12280,9 +12301,6 @@ msgstr ""
 msgid "Error parsing note response from server"
 msgstr ""
 
-msgid "Error encoding string: {0}"
-msgstr ""
-
 msgid "(Code={0})"
 msgstr "(代碼={0})"
 
@@ -12641,25 +12659,25 @@ msgstr "建立新的物件"
 msgid "Read protocol version"
 msgstr "讀取通訊協定版本"
 
-msgid "Cannot start remotecontrol server on port {0}: {1}"
+msgid "Cannot start IPv4 remotecontrol server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Accepting connections on {0}:{1}"
+msgid "Cannot start IPv6 remotecontrol server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Server stopped."
+msgid "RemoteControl::Accepting remote connections on {0}:{1}"
 msgstr ""
 
-msgid "Cannot start remotecontrol https server on port {0}: {1}"
+msgid "RemoteControl::Server {0}:{1} stopped."
 msgstr ""
 
-msgid "Unable to initialize Remote Control HTTPS Server"
+msgid "Cannot start IPv4 remotecontrol https server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Accepting secure connections on {0}:{1}"
+msgid "Cannot start IPv6 remotecontrol https server on port {0}: {1}"
 msgstr ""
 
-msgid "RemoteControl::Server (https) stopped."
+msgid "RemoteControl::Accepting secure remote connections on {0}:{1}"
 msgstr ""
 
 msgid "Remote Control has been asked to create a new node."
@@ -14338,9 +14356,6 @@ msgstr ""
 msgid "Metropole Ruhr: Luftbilder (10 cm)"
 msgstr ""
 
-msgid "SN Luftbilder, Straßennetz, Administrative Grenzen"
-msgstr ""
-
 msgid "Drone Imagery (Haiti)"
 msgstr ""
 
@@ -15203,6 +15218,11 @@ msgid ""
 "bounding box"
 msgstr ""
 
+msgid ""
+"Recommends categories/tags on newly created OSM entities by analysing "
+"spatial entities into training features and using SVM classification"
+msgstr ""
+
 msgid "Import/export OSM data in PBF format"
 msgstr ""
 
@@ -16154,7 +16174,7 @@ msgstr ""
 
 msgctxt "power"
 msgid "platform"
-msgstr ""
+msgstr "月台"
 
 msgctxt "power"
 msgid "kiosk"
@@ -17857,22 +17877,22 @@ msgid "route segment"
 msgstr "路線區段"
 
 msgid "stop position"
-msgstr ""
+msgstr "停車位置"
 
 msgid "stop position (exit only)"
-msgstr ""
+msgstr "停車位置(僅下車)"
 
 msgid "stop position (entry only)"
-msgstr ""
+msgstr "停車位置(僅上車)"
 
 msgid "platform"
-msgstr ""
+msgstr "月台"
 
 msgid "platform (exit only)"
-msgstr ""
+msgstr "月台(僅下車)"
 
 msgid "platform (entry only)"
-msgstr ""
+msgstr "月台(僅上車)"
 
 msgid "Route Master"
 msgstr ""
@@ -17890,10 +17910,10 @@ msgid "UIC name"
 msgstr ""
 
 msgid "Stop Position"
-msgstr ""
+msgstr "停車位置"
 
 msgid "Platform"
-msgstr ""
+msgstr "月台"
 
 msgid "Subway Entrance"
 msgstr "地下鐵入口"
@@ -17938,10 +17958,10 @@ msgid "Shelter"
 msgstr "涼亭"
 
 msgid "Highway platform (legacy)"
-msgstr ""
+msgstr "公路月台(傳統)"
 
 msgid "Railway platform (legacy)"
-msgstr ""
+msgstr "鐵路月台(傳統)"
 
 msgid "funicular"
 msgstr ""
@@ -18200,10 +18220,10 @@ msgid "Bar"
 msgstr "酒吧"
 
 msgid "Night Club"
-msgstr ""
+msgstr "夜店"
 
 msgid "Strip Club"
-msgstr ""
+msgstr "脫衣酒吧"
 
 msgid "Tourism"
 msgstr "旅遊相關"
@@ -18324,7 +18344,7 @@ msgid "Closer description"
 msgstr ""
 
 msgid "Audio Guide"
-msgstr ""
+msgstr "語音導覽"
 
 msgid "Information using headphones or a mobile phone."
 msgstr ""
@@ -18903,7 +18923,10 @@ msgstr ""
 msgid "Suction pumpout"
 msgstr ""
 
-msgid "Gravity dump station"
+msgid "Gravity drain for hose"
+msgstr ""
+
+msgid "Casette or Elsan Disposal"
 msgstr ""
 
 msgid "Operation times"
@@ -19407,6 +19430,10 @@ msgid "shed"
 msgstr ""
 
 msgctxt "building"
+msgid "storage_tank"
+msgstr ""
+
+msgctxt "building"
 msgid "cowshed"
 msgstr ""
 
@@ -19519,6 +19546,41 @@ msgstr "風車"
 msgid "Gasometer"
 msgstr "貯氣桶"
 
+msgid "Storage Tank"
+msgstr ""
+
+msgctxt "content"
+msgid "fuel"
+msgstr ""
+
+msgctxt "content"
+msgid "manure"
+msgstr ""
+
+msgctxt "content"
+msgid "oil"
+msgstr ""
+
+msgctxt "content"
+msgid "sewage"
+msgstr ""
+
+msgctxt "content"
+msgid "silage"
+msgstr ""
+
+msgctxt "content"
+msgid "slurry"
+msgstr ""
+
+msgctxt "content"
+msgid "water"
+msgstr ""
+
+msgctxt "content"
+msgid "wine"
+msgstr ""
+
 msgid "Bunker Silo"
 msgstr ""
 
@@ -22969,6 +23031,33 @@ msgstr ""
 msgid "Could not read NanoLog file:"
 msgstr ""
 
+msgid "OSM Recommendation"
+msgstr ""
+
+msgid "Recommend categories to your newly created instances."
+msgstr ""
+
+msgid "Training process configuration"
+msgstr ""
+
+msgid "Model Settings"
+msgstr ""
+
+msgid "Select objects or create new objects and get recommendation."
+msgstr ""
+
+msgid "Add Recommendation"
+msgstr ""
+
+msgid "Add a recommended key/value pair to your object"
+msgstr ""
+
+msgid "Train a Model"
+msgstr ""
+
+msgid "Start the training engine!"
+msgstr ""
+
 msgid "Edit opening hours"
 msgstr "編輯開放小時"
 
diff --git a/images/presets/storage_tank.png b/images/presets/storage_tank.png
new file mode 100644
index 0000000..ab4f43b
Binary files /dev/null and b/images/presets/storage_tank.png differ
diff --git a/linux/latest/DEBIAN/control b/linux/latest/DEBIAN/control
index 7f6c2c6..53538ad 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
+Depends: openjdk-7-jre | openjdk-8-jre
 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/latest/usr/bin/josm-latest b/linux/latest/usr/bin/josm-latest
index f2089f3..8adcbfe 100755
--- a/linux/latest/usr/bin/josm-latest
+++ b/linux/latest/usr/bin/josm-latest
@@ -11,20 +11,34 @@ ARCH="`dpkg --print-architecture 2> /dev/null || true`"
 
 # If OpenJDK is only available headless, do not try it
 if dpkg --get-selections 'openjdk-*-jre' | grep install$ > /dev/null ; then
-	JAVA_CMDS="$JAVA_HOME/bin/java /usr/lib/jvm/java-7-openjdk/bin/java /usr/lib/jvm/java-7-openjdk-$ARCH/bin/java /usr/lib/jvm/java-7-oracle/bin/java /usr/lib/jvm/java-8-oracle/bin/java"
+	JAVA8_CMDS="/usr/lib/jvm/java-8-openjdk/bin/java /usr/lib/jvm/java-8-openjdk-$ARCH/bin/java /usr/lib/jvm/java-8-oracle/bin/java"
+	JAVA7_CMDS="$JAVA_HOME/bin/java /usr/lib/jvm/java-7-openjdk/bin/java /usr/lib/jvm/java-7-openjdk-$ARCH/bin/java /usr/lib/jvm/java-7-oracle/bin/java"
 else
-	JAVA_CMDS="$JAVA_HOME/bin/java /usr/lib/jvm/java-7-oracle/bin/java /usr/lib/jvm/java-8-oracle/bin/java /usr/bin/java"
+	JAVA8_CMDS="/usr/lib/jvm/java-8-oracle/bin/java"
+	JAVA7_CMDS="$JAVA_HOME/bin/java /usr/lib/jvm/java-7-oracle/bin/java /usr/bin/java"
 fi
 
 JAVA_OPTS="-Djosm.restart=true -Djosm.home=$HOME/.josm-latest -Djava.net.useSystemProxies=true $JAVA_OPTS"
 
-for jcmd in $JAVA_CMDS; do
+for jcmd in $JAVA8_CMDS; do
 	if [ "z$ALTERNATIVE_JDK" = "z`readlink -n -f $jcmd`" ] && [ -z "${JAVACMD}" ]; then
         JAVACMD="$jcmd"
     fi
 done
 
-for jcmd in $JAVA_CMDS; do
+for jcmd in $JAVA8_CMDS; do
+    if [ -x "$jcmd" -a -z "${JAVACMD}" ]; then
+        JAVACMD="$jcmd"
+    fi
+done
+
+for jcmd in $JAVA7_CMDS; do
+	if [ "z$ALTERNATIVE_JDK" = "z`readlink -n -f $jcmd`" ] && [ -z "${JAVACMD}" ]; then
+        JAVACMD="$jcmd"
+    fi
+done
+
+for jcmd in $JAVA7_CMDS; do
     if [ -x "$jcmd" -a -z "${JAVACMD}" ]; then
         JAVACMD="$jcmd"
     fi
diff --git a/linux/latest/usr/share/doc/josm-latest/copyright b/linux/latest/usr/share/doc/josm-latest/copyright
index 2d09786..8b4f9a6 100644
--- a/linux/latest/usr/share/doc/josm-latest/copyright
+++ b/linux/latest/usr/share/doc/josm-latest/copyright
@@ -1,4 +1,4 @@
-Copyright (c) 2005-2014 JOSM developers <josm-dev at openstreetmap.org>
+Copyright (c) 2005-2015 JOSM developers <josm-dev at openstreetmap.org>
 
 License: GPL3+
 
diff --git a/linux/tested/DEBIAN/control b/linux/tested/DEBIAN/control
index f34d2b7..485b02d 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
+Depends: openjdk-7-jre | openjdk-8-jre
 Conflicts: josm-plugins
 Replaces: josm-plugins
 Description: Editor for OpenStreetMap
diff --git a/linux/tested/usr/bin/josm b/linux/tested/usr/bin/josm
index 3a3ec51..0a8c07d 100755
--- a/linux/tested/usr/bin/josm
+++ b/linux/tested/usr/bin/josm
@@ -11,20 +11,34 @@ ARCH="`dpkg --print-architecture 2> /dev/null || true`"
 
 # If OpenJDK is only available headless, do not try it
 if dpkg --get-selections 'openjdk-*-jre' | grep install$ > /dev/null ; then
-	JAVA_CMDS="$JAVA_HOME/bin/java /usr/lib/jvm/java-7-openjdk/bin/java /usr/lib/jvm/java-7-openjdk-$ARCH/bin/java /usr/lib/jvm/java-7-oracle/bin/java /usr/lib/jvm/java-8-oracle/bin/java"
+	JAVA8_CMDS="/usr/lib/jvm/java-8-openjdk/bin/java /usr/lib/jvm/java-8-openjdk-$ARCH/bin/java /usr/lib/jvm/java-8-oracle/bin/java"
+	JAVA7_CMDS="$JAVA_HOME/bin/java /usr/lib/jvm/java-7-openjdk/bin/java /usr/lib/jvm/java-7-openjdk-$ARCH/bin/java /usr/lib/jvm/java-7-oracle/bin/java"
 else
-	JAVA_CMDS="$JAVA_HOME/bin/java /usr/lib/jvm/java-7-oracle/bin/java /usr/lib/jvm/java-8-oracle/bin/java /usr/bin/java"
+	JAVA8_CMDS="/usr/lib/jvm/java-8-oracle/bin/java"
+	JAVA7_CMDS="$JAVA_HOME/bin/java /usr/lib/jvm/java-7-oracle/bin/java /usr/bin/java"
 fi
 
 JAVA_OPTS="-Djosm.restart=true -Djava.net.useSystemProxies=true $JAVA_OPTS"
 
-for jcmd in $JAVA_CMDS; do
+for jcmd in $JAVA8_CMDS; do
 	if [ "z$ALTERNATIVE_JDK" = "z`readlink -n -f $jcmd`" ] && [ -z "${JAVACMD}" ]; then
         JAVACMD="$jcmd"
     fi
 done
 
-for jcmd in $JAVA_CMDS; do
+for jcmd in $JAVA8_CMDS; do
+    if [ -x "$jcmd" -a -z "${JAVACMD}" ]; then
+        JAVACMD="$jcmd"
+    fi
+done
+
+for jcmd in $JAVA7_CMDS; do
+	if [ "z$ALTERNATIVE_JDK" = "z`readlink -n -f $jcmd`" ] && [ -z "${JAVACMD}" ]; then
+        JAVACMD="$jcmd"
+    fi
+done
+
+for jcmd in $JAVA7_CMDS; do
     if [ -x "$jcmd" -a -z "${JAVACMD}" ]; then
         JAVACMD="$jcmd"
     fi
diff --git a/linux/tested/usr/share/doc/josm/copyright b/linux/tested/usr/share/doc/josm/copyright
index 2d09786..8b4f9a6 100644
--- a/linux/tested/usr/share/doc/josm/copyright
+++ b/linux/tested/usr/share/doc/josm/copyright
@@ -1,4 +1,4 @@
-Copyright (c) 2005-2014 JOSM developers <josm-dev at openstreetmap.org>
+Copyright (c) 2005-2015 JOSM developers <josm-dev at openstreetmap.org>
 
 License: GPL3+
 
diff --git a/taginfoextract.groovy b/scripts/taginfoextract.groovy
similarity index 97%
rename from taginfoextract.groovy
rename to scripts/taginfoextract.groovy
index 370dfb6..2f180e5 100644
--- a/taginfoextract.groovy
+++ b/scripts/taginfoextract.groovy
@@ -4,8 +4,8 @@
  *
  * Run from the base directory of a JOSM checkout:
  *
- * groovy -cp dist/josm-custom.jar taginfoextract.groovy -t mappaint
- * groovy -cp dist/josm-custom.jar taginfoextract.groovy -t presets
+ * groovy -cp dist/josm-custom.jar scripts/taginfoextract.groovy -t mappaint
+ * groovy -cp dist/josm-custom.jar scripts/taginfoextract.groovy -t presets
  */
 import java.awt.image.BufferedImage
 import java.nio.file.Files
@@ -248,9 +248,9 @@ class taginfoextract {
                             description: preset.name,
                             key: item.key,
                             value: value,
-                            type: preset.types.collect {it == TaggingPresetType.CLOSEDWAY ? "area" : it.toString().toLowerCase()},
+                            object_types: preset.types.collect {it == TaggingPresetType.CLOSEDWAY ? "area" : it.toString().toLowerCase()},
                     ]
-                    if (preset.iconName) tag += [icon: find_image_url(preset.iconName)]
+                    if (preset.iconName) tag += [icon_url: find_image_url(preset.iconName)]
                     tags += tag
                 }
             }
diff --git a/src/org/openstreetmap/josm/Main.java b/src/org/openstreetmap/josm/Main.java
index 2a14c05..041e9a2 100644
--- a/src/org/openstreetmap/josm/Main.java
+++ b/src/org/openstreetmap/josm/Main.java
@@ -660,7 +660,7 @@ public abstract class Main {
                         }
 
                         @Override
-                        public void close() throws SecurityException {
+                        public void close() {
                         }
                     });
                 }
diff --git a/src/org/openstreetmap/josm/actions/AddImageryLayerAction.java b/src/org/openstreetmap/josm/actions/AddImageryLayerAction.java
index 82956aa..422e840 100644
--- a/src/org/openstreetmap/josm/actions/AddImageryLayerAction.java
+++ b/src/org/openstreetmap/josm/actions/AddImageryLayerAction.java
@@ -10,7 +10,6 @@ import java.awt.event.ActionEvent;
 import java.io.IOException;
 import java.net.MalformedURLException;
 
-import javax.swing.Action;
 import javax.swing.JComboBox;
 import javax.swing.JOptionPane;
 import javax.swing.JPanel;
@@ -35,7 +34,7 @@ import org.openstreetmap.josm.tools.ImageResource;
  * @since 3715
  */
 public class AddImageryLayerAction extends JosmAction implements AdaptableAction {
-    private final ImageryInfo info;
+    private final transient ImageryInfo info;
 
     /**
      * Constructs a new {@code AddImageryLayerAction} for the given {@code ImageryInfo}.
diff --git a/src/org/openstreetmap/josm/actions/AlignInCircleAction.java b/src/org/openstreetmap/josm/actions/AlignInCircleAction.java
index 7cdcdf5..e6b6b83 100644
--- a/src/org/openstreetmap/josm/actions/AlignInCircleAction.java
+++ b/src/org/openstreetmap/josm/actions/AlignInCircleAction.java
@@ -12,6 +12,7 @@ import java.util.Collections;
 import java.util.HashSet;
 import java.util.LinkedList;
 import java.util.List;
+import java.util.Set;
 
 import javax.swing.JOptionPane;
 
@@ -57,10 +58,10 @@ public final class AlignInCircleAction extends JosmAction {
     }
 
     public static class PolarCoor {
-        double radius;
-        double angle;
-        EastNorth origin = new EastNorth(0, 0);
-        double azimuth = 0;
+        private double radius;
+        private double angle;
+        private EastNorth origin = new EastNorth(0, 0);
+        private double azimuth = 0;
 
         PolarCoor(double radius, double angle) {
             this(radius, angle, new EastNorth(0, 0), 0);
@@ -132,7 +133,7 @@ public final class AlignInCircleAction extends JosmAction {
         Collection<OsmPrimitive> sel = getCurrentDataSet().getSelected();
         List<Node> nodes = new LinkedList<>();
         // fixNodes: All nodes for which the angle relative to center should not be modified
-        HashSet<Node> fixNodes = new HashSet<>();
+        Set<Node> fixNodes = new HashSet<>();
         List<Way> ways = new LinkedList<>();
         EastNorth center = null;
         double radius = 0;
@@ -155,13 +156,13 @@ public final class AlignInCircleAction extends JosmAction {
             // Temporary closed way used to reorder nodes
             Way closedWay = new Way(w);
             closedWay.addNode(w.firstNode());
-            ArrayList<Way> usedWays = new ArrayList<>(1);
+            List<Way> usedWays = new ArrayList<>(1);
             usedWays.add(closedWay);
             nodes = collectNodesAnticlockwise(usedWays);
         } else if (!ways.isEmpty() && checkWaysArePolygon(ways)) {
             // Case 2
-            ArrayList<Node> inside = new ArrayList<>();
-            ArrayList<Node> outside = new ArrayList<>();
+            List<Node> inside = new ArrayList<>();
+            List<Node> outside = new ArrayList<>();
 
             for(Node n: nodes) {
                 boolean isInside = false;
@@ -286,7 +287,7 @@ public final class AlignInCircleAction extends JosmAction {
      * @return List of nodes with more than one referrer
      */
     private List<Node> collectNodesWithExternReferers(List<Way> ways) {
-        ArrayList<Node> withReferrers = new ArrayList<>();
+        List<Node> withReferrers = new ArrayList<>();
         for(Way w: ways)
             for(Node n: w.getNodes())
                 if(n.getReferrers().size() > 1)
@@ -300,7 +301,7 @@ public final class AlignInCircleAction extends JosmAction {
      * @return Nodes anticlockwise ordered
      */
     private List<Node> collectNodesAnticlockwise(List<Way> ways) {
-        ArrayList<Node> nodes = new ArrayList<>();
+        List<Node> nodes = new ArrayList<>();
         Node firstNode = ways.get(0).firstNode();
         Node lastNode = null;
         Way lastWay = null;
diff --git a/src/org/openstreetmap/josm/actions/AlignInLineAction.java b/src/org/openstreetmap/josm/actions/AlignInLineAction.java
index c470485..0df49af 100644
--- a/src/org/openstreetmap/josm/actions/AlignInLineAction.java
+++ b/src/org/openstreetmap/josm/actions/AlignInLineAction.java
@@ -285,7 +285,7 @@ public final class AlignInLineAction extends JosmAction {
                     neighbors.add(nodes.get(i-1));
                     neighbors.add(nodes.get(i+1));
                 }
-            if(neighbors.size() == 0)
+            if(neighbors.isEmpty())
                 continue;
             else if(neighbors.size() == 2)
                 // Non self crossing
diff --git a/src/org/openstreetmap/josm/actions/AutoScaleAction.java b/src/org/openstreetmap/josm/actions/AutoScaleAction.java
index 7e0d94f..1251393 100644
--- a/src/org/openstreetmap/josm/actions/AutoScaleAction.java
+++ b/src/org/openstreetmap/josm/actions/AutoScaleAction.java
@@ -54,8 +54,8 @@ public class AutoScaleAction extends JosmAction {
 
     private final String mode;
 
-    protected ZoomChangeAdapter zoomChangeAdapter;
-    protected MapFrameAdapter mapFrameAdapter;
+    protected transient ZoomChangeAdapter zoomChangeAdapter;
+    protected transient MapFrameAdapter mapFrameAdapter;
     /** Time of last zoom to bounds action */
     protected long lastZoomTime = -1;
     /** Last zommed bounds */
@@ -270,7 +270,7 @@ public class AutoScaleAction extends JosmAction {
             }
             DataSet dataset = Main.main.getCurrentDataSet();
             if(dataset != null) {
-                ArrayList<DataSource> dataSources = new ArrayList<>(dataset.getDataSources());
+                List<DataSource> dataSources = new ArrayList<>(dataset.getDataSources());
                 int s = dataSources.size();
                 if(s > 0) {
                     if(lastZoomTime == -1 || lastZoomArea == -1 || lastZoomArea > s) {
diff --git a/src/org/openstreetmap/josm/actions/ChangesetManagerToggleAction.java b/src/org/openstreetmap/josm/actions/ChangesetManagerToggleAction.java
index 052f3da..4f34d73 100644
--- a/src/org/openstreetmap/josm/actions/ChangesetManagerToggleAction.java
+++ b/src/org/openstreetmap/josm/actions/ChangesetManagerToggleAction.java
@@ -18,7 +18,7 @@ import org.openstreetmap.josm.tools.Shortcut;
  * @since 2685
  */
 public class ChangesetManagerToggleAction extends ToggleAction {
-    private WindowListener changesetCacheManagerClosedHandler;
+    private transient WindowListener changesetCacheManagerClosedHandler;
 
     /**
      * Constructs a new {@code ChangesetManagerToggleAction}.
diff --git a/src/org/openstreetmap/josm/actions/CloseChangesetAction.java b/src/org/openstreetmap/josm/actions/CloseChangesetAction.java
index 913f69c..52219c3 100644
--- a/src/org/openstreetmap/josm/actions/CloseChangesetAction.java
+++ b/src/org/openstreetmap/josm/actions/CloseChangesetAction.java
@@ -116,7 +116,7 @@ public class CloseChangesetAction extends JosmAction {
          * the users id yet
          *
          * @return the user info
-         * @throws OsmTransferException thrown in case of any communication exception
+         * @throws OsmTransferException in case of any communication exception
          */
         protected UserInfo fetchUserInfo() throws OsmTransferException {
             OsmServerUserInfoReader reader = new OsmServerUserInfoReader();
diff --git a/src/org/openstreetmap/josm/actions/CombineWayAction.java b/src/org/openstreetmap/josm/actions/CombineWayAction.java
index 929c72c..caebcb8 100644
--- a/src/org/openstreetmap/josm/actions/CombineWayAction.java
+++ b/src/org/openstreetmap/josm/actions/CombineWayAction.java
@@ -10,7 +10,6 @@ import java.awt.event.KeyEvent;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
-import java.util.HashSet;
 import java.util.LinkedHashMap;
 import java.util.LinkedHashSet;
 import java.util.LinkedList;
@@ -183,8 +182,8 @@ public class CombineWayAction extends JosmAction {
 
         List<Command> resolution = CombinePrimitiveResolverDialog.launchIfNecessary(wayTags, ways, Collections.singleton(targetWay));
 
-        LinkedList<Command> cmds = new LinkedList<>();
-        LinkedList<Way> deletedWays = new LinkedList<>(ways);
+        List<Command> cmds = new LinkedList<>();
+        List<Way> deletedWays = new LinkedList<>(ways);
         deletedWays.remove(targetWay);
 
         cmds.add(new ChangeCommand(targetWay, modifiedTargetWay));
@@ -560,7 +559,7 @@ public class CombineWayAction extends JosmAction {
         }
 
         protected Set<Node> getNodes(Stack<NodePair> pairs) {
-            HashSet<Node> nodes = new LinkedHashSet<>(2*pairs.size());
+            Set<Node> nodes = new LinkedHashSet<>(2*pairs.size());
             for (NodePair pair: pairs) {
                 nodes.add(pair.getA());
                 nodes.add(pair.getB());
@@ -593,7 +592,7 @@ public class CombineWayAction extends JosmAction {
         }
 
         protected List<Node> buildPathFromNodePairs(Stack<NodePair> path) {
-            LinkedList<Node> ret = new LinkedList<>();
+            List<Node> ret = new LinkedList<>();
             for (NodePair pair: path) {
                 ret.add(pair.getA());
             }
diff --git a/src/org/openstreetmap/josm/actions/CreateCircleAction.java b/src/org/openstreetmap/josm/actions/CreateCircleAction.java
index 87ef10d..80f9d15 100644
--- a/src/org/openstreetmap/josm/actions/CreateCircleAction.java
+++ b/src/org/openstreetmap/josm/actions/CreateCircleAction.java
@@ -6,9 +6,11 @@ import static org.openstreetmap.josm.tools.I18n.tr;
 
 import java.awt.event.ActionEvent;
 import java.awt.event.KeyEvent;
+import java.io.Serializable;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
+import java.util.Collections;
 import java.util.Comparator;
 import java.util.LinkedList;
 import java.util.List;
@@ -27,6 +29,7 @@ import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.data.osm.Way;
 import org.openstreetmap.josm.gui.Notification;
 import org.openstreetmap.josm.tools.Geometry;
+import org.openstreetmap.josm.tools.RightAndLefthandTraffic;
 import org.openstreetmap.josm.tools.Shortcut;
 
 /**
@@ -97,8 +100,8 @@ public final class CreateCircleAction extends JosmAction {
      * Class designed to create a couple between a node and its angle relative to the center of the circle.
      */
     private static class PolarNode {
-        double a;
-        Node node;
+        private double a;
+        private Node node;
 
         PolarNode(EastNorth center, Node n) {
             EastNorth pt = n.getEastNorth();
@@ -110,16 +113,11 @@ public final class CreateCircleAction extends JosmAction {
     /**
      * Comparator used to order PolarNode relative to their angle.
      */
-    private static class PolarNodeComparator implements Comparator<PolarNode> {
-
+    private static class PolarNodeComparator implements Comparator<PolarNode>, Serializable {
+        private static final long serialVersionUID = 1L;
         @Override
         public int compare(PolarNode pc1, PolarNode pc2) {
-            if(pc1.a < pc2.a)
-                return -1;
-            else if(pc1.a == pc2.a)
-                return 0;
-            else
-                return 1;
+            return Double.compare(pc1.a, pc2.a);
         }
     }
 
@@ -136,27 +134,20 @@ public final class CreateCircleAction extends JosmAction {
         }
 
         Collection<OsmPrimitive> sel = getCurrentDataSet().getSelected();
-        List<Node> nodes = new LinkedList<>();
-        Way existingWay = null;
+        List<Node> nodes = OsmPrimitive.getFilteredList(sel, Node.class);
+        List<Way> ways = OsmPrimitive.getFilteredList(sel, Way.class);
 
-        for (OsmPrimitive osm : sel)
-            if (osm instanceof Node) {
-                nodes.add((Node)osm);
-            }
+        Way existingWay = null;
 
         // special case if no single nodes are selected and exactly one way is:
         // then use the way's nodes
-        if (nodes.isEmpty() && (sel.size() == 1)) {
-            for (OsmPrimitive osm : sel)
-                if (osm instanceof Way) {
-                    existingWay = ((Way)osm);
-                    for (Node n : ((Way)osm).getNodes())
-                    {
-                        if(!nodes.contains(n)) {
-                            nodes.add(n);
-                        }
-                    }
+        if (nodes.isEmpty() && (ways.size() == 1)) {
+            existingWay = ways.get(0);
+            for (Node n : existingWay.getNodes()) {
+                if(!nodes.contains(n)) {
+                    nodes.add(n);
                 }
+            }
         }
 
         if (nodes.size() < 2 || nodes.size() > 3) {
@@ -209,9 +200,9 @@ public final class CreateCircleAction extends JosmAction {
                 numberOfNodesInCircle >= nodes.size() ? numberOfNodesInCircle - nodes.size() : 0);
 
         // build a way for the circle
-        List<Node> wayToAdd = new ArrayList<>();
+        List<Node> nodesToAdd = new ArrayList<>();
         for(int i = 0; i < nodes.size(); i++) {
-            wayToAdd.add(angles[i].node);
+            nodesToAdd.add(angles[i].node);
             double delta = angles[(i+1) % nodes.size()].a - angles[i].a;
             if(delta < 0)
                 delta += 2*Math.PI;
@@ -225,18 +216,23 @@ public final class CreateCircleAction extends JosmAction {
                     return;
                 }
                 Node n = new Node(ll);
-                wayToAdd.add(n);
+                nodesToAdd.add(n);
                 cmds.add(new AddCommand(n));
             }
         }
-        wayToAdd.add(wayToAdd.get(0)); // close the circle
+        nodesToAdd.add(nodesToAdd.get(0)); // close the circle
+        if (existingWay != null && existingWay.getNodesCount() >= 3) {
+            nodesToAdd = orderNodesByWay(nodesToAdd, existingWay);
+        } else {
+            nodesToAdd = orderNodesByTrafficHand(nodesToAdd);
+        }
         if (existingWay == null) {
             Way newWay = new Way();
-            newWay.setNodes(wayToAdd);
+            newWay.setNodes(nodesToAdd);
             cmds.add(new AddCommand(newWay));
         } else {
             Way newWay = new Way(existingWay);
-            newWay.setNodes(wayToAdd);
+            newWay.setNodes(nodesToAdd);
             cmds.add(new ChangeCommand(existingWay, newWay));
         }
 
@@ -244,6 +240,42 @@ public final class CreateCircleAction extends JosmAction {
         Main.map.repaint();
     }
 
+    /**
+     * Order nodes according to left/right hand traffic.
+     * @param nodes Nodes list to be ordered.
+     * @return Modified nodes list ordered according hand traffic.
+     */
+    private List<Node> orderNodesByTrafficHand(List<Node> nodes) {
+        boolean rightHandTraffic = true;
+        for (Node n: nodes) {
+            if (!RightAndLefthandTraffic.isRightHandTraffic(n.getCoor())) {
+                rightHandTraffic = false;
+                break;
+            }
+        }
+        if (rightHandTraffic == Geometry.isClockwise(nodes)) {
+            Collections.reverse(nodes);
+        }
+        return nodes;
+    }
+
+    /**
+     * Order nodes according to way direction.
+     * @param nodes Nodes list to be ordered.
+     * @param way Way used to determine direction.
+     * @return Modified nodes list with same direction as way.
+     */
+    private List<Node> orderNodesByWay(List<Node> nodes, Way way) {
+        List<Node> wayNodes = way.getNodes();
+        if (!way.isClosed()) {
+            wayNodes.add(wayNodes.get(0));
+        }
+        if (Geometry.isClockwise(wayNodes) != Geometry.isClockwise(nodes)) {
+            Collections.reverse(nodes);
+        }
+        return nodes;
+    }
+
     private static void notifyNodesNotOnCircle() {
         new Notification(
                 tr("Those nodes are not in a circle. Aborting."))
diff --git a/src/org/openstreetmap/josm/actions/DownloadReferrersAction.java b/src/org/openstreetmap/josm/actions/DownloadReferrersAction.java
index e6b523a..cd7efb4 100644
--- a/src/org/openstreetmap/josm/actions/DownloadReferrersAction.java
+++ b/src/org/openstreetmap/josm/actions/DownloadReferrersAction.java
@@ -41,11 +41,11 @@ public class DownloadReferrersAction extends JosmAction {
      * into the target layer <code>targetLayer</code>.
      * Does nothing if primitives is null or empty.
      *
-     * @param targetLayer  the target layer. Must not be null.
+     * @param targetLayer the target layer. Must not be null.
      * @param children the collection of child primitives.
-     * @exception IllegalArgumentException thrown if targetLayer is null
+     * @throws IllegalArgumentException if targetLayer is null
      */
-    public static void downloadReferrers(OsmDataLayer targetLayer, Collection<OsmPrimitive> children) throws IllegalArgumentException {
+    public static void downloadReferrers(OsmDataLayer targetLayer, Collection<OsmPrimitive> children) {
         if (children == null || children.isEmpty()) return;
         Main.worker.submit(new DownloadReferrersTask(targetLayer, children));
     }
@@ -55,27 +55,26 @@ public class DownloadReferrersAction extends JosmAction {
      * into the target layer <code>targetLayer</code>.
      * Does nothing if primitives is null or empty.
      *
-     * @param targetLayer  the target layer. Must not be null.
+     * @param targetLayer the target layer. Must not be null.
      * @param children the collection of primitives, given as map of ids and types
-     * @exception IllegalArgumentException thrown if targetLayer is null
+     * @throws IllegalArgumentException if targetLayer is null
      */
-    public static void downloadReferrers(OsmDataLayer targetLayer, Map<Long, OsmPrimitiveType> children) throws IllegalArgumentException {
+    public static void downloadReferrers(OsmDataLayer targetLayer, Map<Long, OsmPrimitiveType> children) {
         if (children == null || children.isEmpty()) return;
         Main.worker.submit(new DownloadReferrersTask(targetLayer, children));
     }
 
     /**
-     * Downloads the primitives referring to the primitive given by <code>id</code> and
-     * <code>type</code>.
+     * Downloads the primitives referring to the primitive given by <code>id</code> and <code>type</code>.
      *
-     * @param targetLayer  the target layer. Must not be null.
+     * @param targetLayer the target layer. Must not be null.
      * @param id the primitive id. id > 0 required.
      * @param type the primitive type. type != null required
-     * @exception IllegalArgumentException thrown if targetLayer is null
-     * @exception IllegalArgumentException thrown if id <= 0
-     * @exception IllegalArgumentException thrown if type == null
+     * @throws IllegalArgumentException if targetLayer is null
+     * @throws IllegalArgumentException if id <= 0
+     * @throws IllegalArgumentException if type == null
      */
-    public static void downloadReferrers(OsmDataLayer targetLayer, long id, OsmPrimitiveType type) throws IllegalArgumentException {
+    public static void downloadReferrers(OsmDataLayer targetLayer, long id, OsmPrimitiveType type) {
         if (id <= 0)
             throw new IllegalArgumentException(MessageFormat.format("Id > 0 required, got {0}", id));
         CheckParameterUtil.ensureParameterNotNull(type, "type");
diff --git a/src/org/openstreetmap/josm/actions/ExtensionFileFilter.java b/src/org/openstreetmap/josm/actions/ExtensionFileFilter.java
index 979fed3..3e811ec 100644
--- a/src/org/openstreetmap/josm/actions/ExtensionFileFilter.java
+++ b/src/org/openstreetmap/josm/actions/ExtensionFileFilter.java
@@ -163,7 +163,7 @@ public class ExtensionFileFilter extends FileFilter implements java.io.FileFilte
      */
     public static List<ExtensionFileFilter> getImportExtensionFileFilters() {
         updateAllFormatsImporter();
-        LinkedList<ExtensionFileFilter> filters = new LinkedList<>();
+        List<ExtensionFileFilter> filters = new LinkedList<>();
         for (FileImporter importer : importers) {
             filters.add(importer.filter);
         }
@@ -180,7 +180,7 @@ public class ExtensionFileFilter extends FileFilter implements java.io.FileFilte
      * @since 2029
      */
     public static List<ExtensionFileFilter> getExportExtensionFileFilters() {
-        LinkedList<ExtensionFileFilter> filters = new LinkedList<>();
+        List<ExtensionFileFilter> filters = new LinkedList<>();
         for (FileExporter exporter : exporters) {
             if (filters.contains(exporter.filter) || !exporter.isEnabled()) {
                 continue;
diff --git a/src/org/openstreetmap/josm/actions/FullscreenToggleAction.java b/src/org/openstreetmap/josm/actions/FullscreenToggleAction.java
index 1942515..f730b8b 100644
--- a/src/org/openstreetmap/josm/actions/FullscreenToggleAction.java
+++ b/src/org/openstreetmap/josm/actions/FullscreenToggleAction.java
@@ -27,7 +27,7 @@ import org.openstreetmap.josm.tools.Shortcut;
  * @since 2533
  */
 public class FullscreenToggleAction extends ToggleAction {
-    private GraphicsDevice gd;
+    private transient GraphicsDevice gd;
     private Rectangle prevBounds;
 
     /**
diff --git a/src/org/openstreetmap/josm/actions/GpxExportAction.java b/src/org/openstreetmap/josm/actions/GpxExportAction.java
index 19fc2c9..a9b3c8f 100644
--- a/src/org/openstreetmap/josm/actions/GpxExportAction.java
+++ b/src/org/openstreetmap/josm/actions/GpxExportAction.java
@@ -72,8 +72,8 @@ public class GpxExportAction extends DiskAccessAction {
      * {@link OsmDataLayer} or {@link GpxLayer}.
      *
      * @param layer the layer
-     * @exception IllegalArgumentException thrown if layer is null
-     * @exception IllegalArgumentException thrown if layer is neither an instance of {@link OsmDataLayer}
+     * @throws IllegalArgumentException if layer is null
+     * @throws IllegalArgumentException if layer is neither an instance of {@link OsmDataLayer}
      *  nor of {@link GpxLayer}
      */
     public void export(Layer layer) {
diff --git a/src/org/openstreetmap/josm/actions/ImageryAdjustAction.java b/src/org/openstreetmap/josm/actions/ImageryAdjustAction.java
index 878acaf..993ee57 100644
--- a/src/org/openstreetmap/josm/actions/ImageryAdjustAction.java
+++ b/src/org/openstreetmap/josm/actions/ImageryAdjustAction.java
@@ -45,7 +45,7 @@ public class ImageryAdjustAction extends MapMode implements MouseListener, Mouse
 
     private double oldDx, oldDy;
     private EastNorth prevEastNorth;
-    private ImageryLayer layer;
+    private transient ImageryLayer layer;
     private MapMode oldMapMode;
 
     /**
diff --git a/src/org/openstreetmap/josm/actions/JoinAreasAction.java b/src/org/openstreetmap/josm/actions/JoinAreasAction.java
index 0bba0ed..bc7fdfa 100644
--- a/src/org/openstreetmap/josm/actions/JoinAreasAction.java
+++ b/src/org/openstreetmap/josm/actions/JoinAreasAction.java
@@ -54,7 +54,7 @@ public class JoinAreasAction extends JosmAction {
     // This will be used to commit commands and unite them into one large command sequence at the end
     private final LinkedList<Command> cmds = new LinkedList<>();
     private int cmdsCount = 0;
-    private final List<Relation> addedRelations = new LinkedList<>();
+    private final transient List<Relation> addedRelations = new LinkedList<>();
 
     /**
      * This helper class describes join areas action result.
@@ -1070,7 +1070,7 @@ public class JoinAreasAction extends JosmAction {
         // In multigonWays collection, some way are just a point (i.e. way like nodeA-nodeA)
         // This seems to appear when is apply over invalid way like #9911 test-case
         // Remove all of these way to make the next work.
-        ArrayList<WayInPolygon> cleanMultigonWays = new ArrayList<>();
+        List<WayInPolygon> cleanMultigonWays = new ArrayList<>();
         for(WayInPolygon way: multigonWays)
             if(way.way.getNodesCount() == 2 && way.way.firstNode() == way.way.lastNode())
                 discardedWays.add(way);
@@ -1082,7 +1082,7 @@ public class JoinAreasAction extends JosmAction {
 
         WayInPolygon startWay;
         while((startWay = traverser.startNewWay()) != null) {
-            ArrayList<WayInPolygon> path = new ArrayList<>();
+            List<WayInPolygon> path = new ArrayList<>();
             List<WayInPolygon> startWays = new ArrayList<>();
             path.add(startWay);
             while(true) {
diff --git a/src/org/openstreetmap/josm/actions/JoinNodeWayAction.java b/src/org/openstreetmap/josm/actions/JoinNodeWayAction.java
index 9329c17..3ba72da 100644
--- a/src/org/openstreetmap/josm/actions/JoinNodeWayAction.java
+++ b/src/org/openstreetmap/josm/actions/JoinNodeWayAction.java
@@ -6,6 +6,7 @@ import static org.openstreetmap.josm.tools.I18n.tr;
 
 import java.awt.event.ActionEvent;
 import java.awt.event.KeyEvent;
+import java.io.Serializable;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.Comparator;
@@ -170,7 +171,10 @@ public class JoinNodeWayAction extends JosmAction {
     /**
      * Sorts collinear nodes by their distance to a common reference node.
      */
-    private static class NodeDistanceToRefNodeComparator implements Comparator<Node> {
+    private static class NodeDistanceToRefNodeComparator implements Comparator<Node>, Serializable {
+
+        private static final long serialVersionUID = 1L;
+
         private final EastNorth refPoint;
         private EastNorth refPoint2;
         private final boolean projectToSegment;
diff --git a/src/org/openstreetmap/josm/actions/JosmAction.java b/src/org/openstreetmap/josm/actions/JosmAction.java
index 6d06751..7dc9c8b 100644
--- a/src/org/openstreetmap/josm/actions/JosmAction.java
+++ b/src/org/openstreetmap/josm/actions/JosmAction.java
@@ -7,7 +7,6 @@ import java.awt.event.KeyEvent;
 import java.util.Collection;
 
 import javax.swing.AbstractAction;
-import javax.swing.Icon;
 
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.data.SelectionChangedListener;
@@ -39,9 +38,9 @@ import org.openstreetmap.josm.tools.Shortcut;
  */
 public abstract class JosmAction extends AbstractAction implements Destroyable {
 
-    protected Shortcut sc;
-    private LayerChangeAdapter layerChangeAdapter;
-    private SelectionChangeAdapter selectionChangeAdapter;
+    protected transient Shortcut sc;
+    private transient LayerChangeAdapter layerChangeAdapter;
+    private transient SelectionChangeAdapter selectionChangeAdapter;
 
     /**
      * Returns the shortcut for this action.
@@ -71,42 +70,6 @@ public abstract class JosmAction extends AbstractAction implements Destroyable {
      * @param registerInToolbar register this action for the toolbar preferences?
      * @param toolbarId identifier for the toolbar preferences. The iconName is used, if this parameter is null
      * @param installAdapters false, if you don't want to install layer changed and selection changed adapters
-     * @deprecated do not pass Icon, pass ImageProvider instead
-     */
-    @Deprecated
-    public JosmAction(String name, Icon icon, String tooltip, Shortcut shortcut, boolean registerInToolbar, String toolbarId, boolean installAdapters) {
-        super(name, icon);
-        setHelpId();
-        sc = shortcut;
-        if (sc != null) {
-            Main.registerActionShortcut(this, sc);
-        }
-        setTooltip(tooltip);
-        if (getValue("toolbar") == null) {
-            putValue("toolbar", toolbarId);
-        }
-        if (registerInToolbar && Main.toolbar != null) {
-            Main.toolbar.register(this);
-        }
-        if (installAdapters) {
-            installAdapters();
-        }
-    }
-
-    /**
-     * Constructs a {@code JosmAction}.
-     *
-     * @param name the action's text as displayed on the menu (if it is added to a menu)
-     * @param icon the icon to use
-     * @param tooltip  a longer description of the action that will be displayed in the tooltip. Please note
-     *           that html is not supported for menu actions on some platforms.
-     * @param shortcut a ready-created shortcut object or null if you don't want a shortcut. But you always
-     *            do want a shortcut, remember you can always register it with group=none, so you
-     *            won't be assigned a shortcut unless the user configures one. If you pass null here,
-     *            the user CANNOT configure a shortcut for your action.
-     * @param registerInToolbar register this action for the toolbar preferences?
-     * @param toolbarId identifier for the toolbar preferences. The iconName is used, if this parameter is null
-     * @param installAdapters false, if you don't want to install layer changed and selection changed adapters
      * TODO: do not pass Icon, pass ImageProvider instead
      */
     public JosmAction(String name, ImageProvider icon, String tooltip, Shortcut shortcut, boolean registerInToolbar, String toolbarId, boolean installAdapters) {
diff --git a/src/org/openstreetmap/josm/actions/MapRectifierWMSmenuAction.java b/src/org/openstreetmap/josm/actions/MapRectifierWMSmenuAction.java
index 4f1ecd5..135c5ca 100644
--- a/src/org/openstreetmap/josm/actions/MapRectifierWMSmenuAction.java
+++ b/src/org/openstreetmap/josm/actions/MapRectifierWMSmenuAction.java
@@ -69,7 +69,7 @@ public class MapRectifierWMSmenuAction extends JosmAction {
     /**
      * List of available rectifier services.
      */
-    private final List<RectifierService> services = new ArrayList<>();
+    private final transient List<RectifierService> services = new ArrayList<>();
 
     /**
      * Constructs a new {@code MapRectifierWMSmenuAction}.
diff --git a/src/org/openstreetmap/josm/actions/MergeNodesAction.java b/src/org/openstreetmap/josm/actions/MergeNodesAction.java
index 9547eab..e40ea01 100644
--- a/src/org/openstreetmap/josm/actions/MergeNodesAction.java
+++ b/src/org/openstreetmap/josm/actions/MergeNodesAction.java
@@ -253,7 +253,7 @@ public class MergeNodesAction extends JosmAction {
      * @param layer layer the reference data layer. Must not be null
      * @param nodes the collection of nodes. Ignored if null
      * @param targetLocationNode this node's location will be used for the target node
-     * @throws IllegalArgumentException thrown if {@code layer} is null
+     * @throws IllegalArgumentException if {@code layer} is null
      */
     public static void doMergeNodes(OsmDataLayer layer, Collection<Node> nodes, Node targetLocationNode) {
         if (nodes == null) {
@@ -283,7 +283,7 @@ public class MergeNodesAction extends JosmAction {
      * @param nodes the collection of nodes. Ignored if null.
      * @param targetLocationNode this node's location will be used for the targetNode.
      * @return The command necessary to run in order to perform action, or {@code null} if there is nothing to do
-     * @throws IllegalArgumentException thrown if {@code layer} is null
+     * @throws IllegalArgumentException if {@code layer} is null
      */
     public static Command mergeNodes(OsmDataLayer layer, Collection<Node> nodes, Node targetLocationNode) {
         if (nodes == null) {
@@ -303,7 +303,7 @@ public class MergeNodesAction extends JosmAction {
      * @param targetNode the target node the collection of nodes is merged to. Must not be null.
      * @param targetLocationNode this node's location will be used for the targetNode.
      * @return The command necessary to run in order to perform action, or {@code null} if there is nothing to do
-     * @throws IllegalArgumentException thrown if layer is null
+     * @throws IllegalArgumentException if layer is null
      */
     public static Command mergeNodes(OsmDataLayer layer, Collection<Node> nodes, Node targetNode, Node targetLocationNode) {
         CheckParameterUtil.ensureParameterNotNull(layer, "layer");
diff --git a/src/org/openstreetmap/josm/actions/OpenFileAction.java b/src/org/openstreetmap/josm/actions/OpenFileAction.java
index 45b2809..3e00348 100644
--- a/src/org/openstreetmap/josm/actions/OpenFileAction.java
+++ b/src/org/openstreetmap/josm/actions/OpenFileAction.java
@@ -117,7 +117,7 @@ public class OpenFileAction extends DiskAccessAction {
                             return name.startsWith(file.getName()) && fileFilter.accept(new File(dir, name));
                         }
                     });
-                    if (matchingFiles.length == 1) {
+                    if (matchingFiles != null && matchingFiles.length == 1) {
                         // use the unique match as filename
                         this.files.add(matchingFiles[0]);
                     } else {
diff --git a/src/org/openstreetmap/josm/actions/OpenLocationAction.java b/src/org/openstreetmap/josm/actions/OpenLocationAction.java
index e037eb7..7a19b12 100644
--- a/src/org/openstreetmap/josm/actions/OpenLocationAction.java
+++ b/src/org/openstreetmap/josm/actions/OpenLocationAction.java
@@ -51,7 +51,7 @@ import org.openstreetmap.josm.tools.Utils;
  */
 public class OpenLocationAction extends JosmAction {
 
-    protected final List<Class<? extends DownloadTask>> downloadTasks;
+    protected final transient List<Class<? extends DownloadTask>> downloadTasks;
 
     /**
      * Create an open action. The name is "Open a file".
diff --git a/src/org/openstreetmap/josm/actions/OrthogonalizeAction.java b/src/org/openstreetmap/josm/actions/OrthogonalizeAction.java
index f4bd065..c835a7c 100644
--- a/src/org/openstreetmap/josm/actions/OrthogonalizeAction.java
+++ b/src/org/openstreetmap/josm/actions/OrthogonalizeAction.java
@@ -282,7 +282,7 @@ public final class OrthogonalizeAction extends JosmAction {
         }
 
         // put the nodes of all ways in a set
-        final HashSet<Node> allNodes = new HashSet<>();
+        final Set<Node> allNodes = new HashSet<>();
         for (WayData w : wayDataList) {
             for (Node n : w.way.getNodes()) {
                 allNodes.add(n);
@@ -290,8 +290,8 @@ public final class OrthogonalizeAction extends JosmAction {
         }
 
         // the new x and y value for each node
-        final HashMap<Node, Double> nX = new HashMap<>();
-        final HashMap<Node, Double> nY = new HashMap<>();
+        final Map<Node, Double> nX = new HashMap<>();
+        final Map<Node, Double> nY = new HashMap<>();
 
         // calculate the centroid of all nodes
         // it is used as rotation center
@@ -313,7 +313,7 @@ public final class OrthogonalizeAction extends JosmAction {
         final Direction[] VERTICAL = {Direction.UP, Direction.DOWN};
         final Direction[][] ORIENTATIONS = {HORIZONTAL, VERTICAL};
         for (Direction[] orientation : ORIENTATIONS){
-            final HashSet<Node> s = new HashSet<>(allNodes);
+            final Set<Node> s = new HashSet<>(allNodes);
             int s_size = s.size();
             for (int dummy = 0; dummy < s_size; ++dummy) {
                 if (s.isEmpty()) {
@@ -321,8 +321,8 @@ public final class OrthogonalizeAction extends JosmAction {
                 }
                 final Node dummy_n = s.iterator().next();     // pick arbitrary element of s
 
-                final HashSet<Node> cs = new HashSet<>(); // will contain each node that can be reached from dummy_n
-                cs.add(dummy_n);                              // walking only on horizontal / vertical segments
+                final Set<Node> cs = new HashSet<>(); // will contain each node that can be reached from dummy_n
+                cs.add(dummy_n);                      // walking only on horizontal / vertical segments
 
                 boolean somethingHappened = true;
                 while (somethingHappened) {
@@ -348,7 +348,7 @@ public final class OrthogonalizeAction extends JosmAction {
                     s.remove(n);
                 }
 
-                final HashMap<Node, Double> nC = (orientation == HORIZONTAL) ? nY : nX;
+                final Map<Node, Double> nC = (orientation == HORIZONTAL) ? nY : nX;
 
                 double average = 0;
                 for (Node n : cs) {
diff --git a/src/org/openstreetmap/josm/actions/PasteTagsAction.java b/src/org/openstreetmap/josm/actions/PasteTagsAction.java
index c86e4e3..4cfe5a9 100644
--- a/src/org/openstreetmap/josm/actions/PasteTagsAction.java
+++ b/src/org/openstreetmap/josm/actions/PasteTagsAction.java
@@ -118,7 +118,7 @@ public final class PasteTagsAction extends JosmAction {
         }
 
         protected Map<OsmPrimitiveType, Integer> getSourceStatistics() {
-            HashMap<OsmPrimitiveType, Integer> ret = new HashMap<>();
+            Map<OsmPrimitiveType, Integer> ret = new HashMap<>();
             for (OsmPrimitiveType type: OsmPrimitiveType.dataValues()) {
                 if (!getSourceTagsByType(type).isEmpty()) {
                     ret.put(type, getSourcePrimitivesByType(type).size());
@@ -128,7 +128,7 @@ public final class PasteTagsAction extends JosmAction {
         }
 
         protected Map<OsmPrimitiveType, Integer> getTargetStatistics() {
-            HashMap<OsmPrimitiveType, Integer> ret = new HashMap<>();
+            Map<OsmPrimitiveType, Integer> ret = new HashMap<>();
             for (OsmPrimitiveType type: OsmPrimitiveType.dataValues()) {
                 int count = OsmPrimitive.getFilteredList(target, type.getOsmClass()).size();
                 if (count > 0) {
diff --git a/src/org/openstreetmap/josm/actions/PurgeAction.java b/src/org/openstreetmap/josm/actions/PurgeAction.java
index 1facacb..2ea561e 100644
--- a/src/org/openstreetmap/josm/actions/PurgeAction.java
+++ b/src/org/openstreetmap/josm/actions/PurgeAction.java
@@ -68,23 +68,23 @@ public class PurgeAction extends JosmAction {
         putValue("help", HelpUtil.ht("/Action/Purge"));
     }
 
-    protected OsmDataLayer layer;
-    JCheckBox cbClearUndoRedo;
+    protected transient OsmDataLayer layer;
+    protected JCheckBox cbClearUndoRedo;
 
-    protected Set<OsmPrimitive> toPurge;
+    protected transient Set<OsmPrimitive> toPurge;
     /**
      * finally, contains all objects that are purged
      */
-    protected Set<OsmPrimitive> toPurgeChecked;
+    protected transient Set<OsmPrimitive> toPurgeChecked;
     /**
      * Subset of toPurgeChecked. Marks primitives that remain in the
      * dataset, but incomplete.
      */
-    protected Set<OsmPrimitive> makeIncomplete;
+    protected transient Set<OsmPrimitive> makeIncomplete;
     /**
      * Subset of toPurgeChecked. Those that have not been in the selection.
      */
-    protected List<OsmPrimitive> toPurgeAdditionally;
+    protected transient List<OsmPrimitive> toPurgeAdditionally;
 
     @Override
     public void actionPerformed(ActionEvent e) {
@@ -100,7 +100,7 @@ public class PurgeAction extends JosmAction {
 
         // Add referrer, unless the object to purge is not new
         // and the parent is a relation
-        HashSet<OsmPrimitive> toPurgeRecursive = new HashSet<>();
+        Set<OsmPrimitive> toPurgeRecursive = new HashSet<>();
         while (!toPurge.isEmpty()) {
 
             for (OsmPrimitive osm: toPurge) {
diff --git a/src/org/openstreetmap/josm/actions/RenameLayerAction.java b/src/org/openstreetmap/josm/actions/RenameLayerAction.java
index 1e20d6d..94c1317 100644
--- a/src/org/openstreetmap/josm/actions/RenameLayerAction.java
+++ b/src/org/openstreetmap/josm/actions/RenameLayerAction.java
@@ -1,8 +1,8 @@
 // License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.actions;
 
-import static org.openstreetmap.josm.tools.I18n.tr;
 import static org.openstreetmap.josm.gui.help.HelpUtil.ht;
+import static org.openstreetmap.josm.tools.I18n.tr;
 
 import java.awt.Dialog.ModalityType;
 import java.awt.event.ActionEvent;
@@ -16,8 +16,8 @@ import javax.swing.JOptionPane;
 
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.gui.layer.Layer;
-import org.openstreetmap.josm.tools.ImageProvider;
 import org.openstreetmap.josm.gui.widgets.JosmTextField;
+import org.openstreetmap.josm.tools.ImageProvider;
 
 /**
  * Action to rename an specific layer. Provides the option to rename the
@@ -28,7 +28,7 @@ import org.openstreetmap.josm.gui.widgets.JosmTextField;
 public class RenameLayerAction extends AbstractAction {
 
     private File file;
-    private Layer layer;
+    private transient Layer layer;
 
     /**
      * @param file The file of the original location of this layer.
diff --git a/src/org/openstreetmap/josm/actions/SearchNotesDownloadAction.java b/src/org/openstreetmap/josm/actions/SearchNotesDownloadAction.java
index bf6d0e5..3c9c19c 100644
--- a/src/org/openstreetmap/josm/actions/SearchNotesDownloadAction.java
+++ b/src/org/openstreetmap/josm/actions/SearchNotesDownloadAction.java
@@ -6,8 +6,6 @@ import static org.openstreetmap.josm.tools.I18n.tr;
 import java.awt.GridBagConstraints;
 import java.awt.GridBagLayout;
 import java.awt.event.ActionEvent;
-import java.io.UnsupportedEncodingException;
-import java.net.URLEncoder;
 import java.util.Collections;
 import java.util.LinkedList;
 import java.util.List;
@@ -22,6 +20,7 @@ import org.openstreetmap.josm.gui.ExtendedDialog;
 import org.openstreetmap.josm.gui.Notification;
 import org.openstreetmap.josm.gui.widgets.HistoryComboBox;
 import org.openstreetmap.josm.io.OsmApi;
+import org.openstreetmap.josm.tools.Utils;
 
 /**
  * Action to use the Notes search API to download all notes matching a given search term.
@@ -97,12 +96,7 @@ public class SearchNotesDownloadAction extends JosmAction {
         sb.append("&closed=");
         sb.append(closedLimit);
         sb.append("&q=");
-        try {
-            sb.append(URLEncoder.encode(searchTerm, "UTF-8"));
-        } catch (UnsupportedEncodingException ex) {
-            Main.error(ex, true); // thrown if UTF-8 isn't supported which seems unlikely.
-            return;
-        }
+        sb.append(Utils.encodeUrl(searchTerm));
 
         new DownloadNotesTask().loadUrl(false, sb.toString(), null);
     }
diff --git a/src/org/openstreetmap/josm/actions/SelectByInternalPointAction.java b/src/org/openstreetmap/josm/actions/SelectByInternalPointAction.java
index 066092b..5572f2f 100644
--- a/src/org/openstreetmap/josm/actions/SelectByInternalPointAction.java
+++ b/src/org/openstreetmap/josm/actions/SelectByInternalPointAction.java
@@ -5,6 +5,7 @@ import java.awt.event.ActionEvent;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
+import java.util.Map;
 import java.util.TreeMap;
 
 import org.openstreetmap.josm.Main;
@@ -38,7 +39,7 @@ public class SelectByInternalPointAction extends JosmAction {
             return Collections.emptySet();
         }
         final Node n = new Node(internalPoint);
-        final TreeMap<Double, OsmPrimitive> found = new TreeMap<>();
+        final Map<Double, OsmPrimitive> found = new TreeMap<>();
         for (Way w : ds.getWays()) {
             if (w.isUsable() && w.isClosed() && w.isSelectable()) {
                 if (Geometry.nodeInsidePolygon(n, w.getNodes())) {
diff --git a/src/org/openstreetmap/josm/actions/SelectNonBranchingWaySequences.java b/src/org/openstreetmap/josm/actions/SelectNonBranchingWaySequences.java
index 88bb254..2ec9371 100644
--- a/src/org/openstreetmap/josm/actions/SelectNonBranchingWaySequences.java
+++ b/src/org/openstreetmap/josm/actions/SelectNonBranchingWaySequences.java
@@ -20,11 +20,11 @@ public class SelectNonBranchingWaySequences {
     /**
      * outer endpoints of selected ways
      */
-    Set<Node> outerNodes;
+    private Set<Node> outerNodes;
     /**
      * endpoints of selected ways
      */
-    Set<Node> nodes;
+    private Set<Node> nodes;
 
     /**
      * Creates a way selection
@@ -134,7 +134,7 @@ public class SelectNonBranchingWaySequences {
      */
     public void extend(DataSet data) {
         Collection<OsmPrimitive> currentSelection;
-        LinkedList<OsmPrimitive> selection;
+        Collection<OsmPrimitive> selection;
         boolean selectionChanged = false;
         Way way;
 
diff --git a/src/org/openstreetmap/josm/actions/SessionSaveAsAction.java b/src/org/openstreetmap/josm/actions/SessionSaveAsAction.java
index 96722bb..41feb41 100644
--- a/src/org/openstreetmap/josm/actions/SessionSaveAsAction.java
+++ b/src/org/openstreetmap/josm/actions/SessionSaveAsAction.java
@@ -48,9 +48,9 @@ import org.openstreetmap.josm.tools.WindowGeometry;
  */
 public class SessionSaveAsAction extends DiskAccessAction {
 
-    private List<Layer> layers;
-    private Map<Layer, SessionLayerExporter> exporters;
-    private MultiMap<Layer, Layer> dependencies;
+    private transient List<Layer> layers;
+    private transient Map<Layer, SessionLayerExporter> exporters;
+    private transient MultiMap<Layer, Layer> dependencies;
 
     /**
      * Constructs a new {@code SessionSaveAsAction}.
diff --git a/src/org/openstreetmap/josm/actions/SimplifyWayAction.java b/src/org/openstreetmap/josm/actions/SimplifyWayAction.java
index 36a4b36..3740abe 100644
--- a/src/org/openstreetmap/josm/actions/SimplifyWayAction.java
+++ b/src/org/openstreetmap/josm/actions/SimplifyWayAction.java
@@ -13,6 +13,7 @@ import java.util.Collections;
 import java.util.HashSet;
 import java.util.LinkedList;
 import java.util.List;
+import java.util.Set;
 
 import javax.swing.JOptionPane;
 
@@ -190,7 +191,7 @@ public class SimplifyWayAction extends JosmAction {
             i++;
         }
 
-        HashSet<Node> delNodes = new HashSet<>();
+        Set<Node> delNodes = new HashSet<>();
         delNodes.addAll(w.getNodes());
         delNodes.removeAll(newNodes);
 
diff --git a/src/org/openstreetmap/josm/actions/ToggleAction.java b/src/org/openstreetmap/josm/actions/ToggleAction.java
index b8c4214..c8d2adf 100644
--- a/src/org/openstreetmap/josm/actions/ToggleAction.java
+++ b/src/org/openstreetmap/josm/actions/ToggleAction.java
@@ -22,7 +22,7 @@ import org.openstreetmap.josm.tools.Shortcut;
  */
 public abstract class ToggleAction extends JosmAction {
 
-    private final List<ButtonModel> buttonModels = new ArrayList<>();
+    private final transient List<ButtonModel> buttonModels = new ArrayList<>();
 
     /**
      * Constructs a {@code ToggleAction}.
diff --git a/src/org/openstreetmap/josm/actions/ToggleUploadDiscouragedLayerAction.java b/src/org/openstreetmap/josm/actions/ToggleUploadDiscouragedLayerAction.java
index d25e460..7e6de47 100644
--- a/src/org/openstreetmap/josm/actions/ToggleUploadDiscouragedLayerAction.java
+++ b/src/org/openstreetmap/josm/actions/ToggleUploadDiscouragedLayerAction.java
@@ -10,8 +10,8 @@ import org.openstreetmap.josm.gui.layer.OsmDataLayer;
 
 public class ToggleUploadDiscouragedLayerAction extends JosmAction {
 
-    private OsmDataLayer layer;
-    
+    private transient OsmDataLayer layer;
+
     public ToggleUploadDiscouragedLayerAction(OsmDataLayer layer) {
         super(tr("Encourage/discourage upload"), null, null, null, false);
         this.layer = layer;
diff --git a/src/org/openstreetmap/josm/actions/UnGlueAction.java b/src/org/openstreetmap/josm/actions/UnGlueAction.java
index 184acb8..d91bfa3 100644
--- a/src/org/openstreetmap/josm/actions/UnGlueAction.java
+++ b/src/org/openstreetmap/josm/actions/UnGlueAction.java
@@ -46,9 +46,9 @@ import org.openstreetmap.josm.tools.Shortcut;
  */
 public class UnGlueAction extends JosmAction {
 
-    private Node selectedNode;
-    private Way selectedWay;
-    private Set<Node> selectedNodes;
+    private transient Node selectedNode;
+    private transient Way selectedWay;
+    private transient Set<Node> selectedNodes;
 
     /**
      * Create a new UnGlueAction.
@@ -120,7 +120,7 @@ public class UnGlueAction extends JosmAction {
                     tmpNodes.add(n);
                 }
             }
-            if (tmpNodes.size() < 1) {
+            if (tmpNodes.isEmpty()) {
                 if (selection.size() > 1) {
                     errMsg =  tr("None of these nodes are glued to anything else.");
                 } else {
@@ -166,7 +166,7 @@ public class UnGlueAction extends JosmAction {
      * (i.e. copy node and remove all tags from the old one. Relations will not be removed)
      */
     private void unglueNode(ActionEvent e) {
-        LinkedList<Command> cmds = new LinkedList<>();
+        List<Command> cmds = new LinkedList<>();
 
         Node c = new Node(selectedNode);
         c.removeAll();
@@ -261,7 +261,7 @@ public class UnGlueAction extends JosmAction {
      * nodes into "selectedNodes".
      */
     private boolean checkSelection2(Collection<? extends OsmPrimitive> selection) {
-        if (selection.size() < 1)
+        if (selection.isEmpty())
             return false;
 
         selectedWay = null;
@@ -285,7 +285,7 @@ public class UnGlueAction extends JosmAction {
             }
         }
 
-        if (selectedNodes.size() < 1) {
+        if (selectedNodes.isEmpty()) {
             selectedNodes.addAll(selectedWay.getNodes());
         }
 
@@ -331,7 +331,7 @@ public class UnGlueAction extends JosmAction {
                 continue;
             }
             Relation newRel = null;
-            HashMap<String, Integer> rolesToReAdd = null; // <role name, index>
+            Map<String, Integer> rolesToReAdd = null; // <role name, index>
             int i = 0;
             for (RelationMember rm : r.getMembers()) {
                 if (rm.isNode() && rm.getMember() == originalNode) {
@@ -360,8 +360,8 @@ public class UnGlueAction extends JosmAction {
      * dupe a single node once, and put the copy on the selected way
      */
     private void unglueWays() {
-        LinkedList<Command> cmds = new LinkedList<>();
-        LinkedList<Node> newNodes = new LinkedList<>();
+        List<Command> cmds = new LinkedList<>();
+        List<Node> newNodes = new LinkedList<>();
 
         if (selectedWay == null) {
             Way wayWithSelectedNode = null;
@@ -408,15 +408,15 @@ public class UnGlueAction extends JosmAction {
      */
     private boolean unglueSelfCrossingWay() {
         // According to previous check, only one valid way through that node
-        LinkedList<Command> cmds = new LinkedList<>();
+        List<Command> cmds = new LinkedList<>();
         Way way = null;
         for (Way w: OsmPrimitive.getFilteredList(selectedNode.getReferrers(), Way.class))
             if (w.isUsable() && w.getNodesCount() >= 1) {
                 way = w;
             }
         List<Node> oldNodes = way.getNodes();
-        ArrayList<Node> newNodes = new ArrayList<>(oldNodes.size());
-        ArrayList<Node> addNodes = new ArrayList<>();
+        List<Node> newNodes = new ArrayList<>(oldNodes.size());
+        List<Node> addNodes = new ArrayList<>();
         boolean seen = false;
         for (Node n: oldNodes) {
             if (n == selectedNode) {
@@ -450,7 +450,7 @@ public class UnGlueAction extends JosmAction {
      *
      */
     private void unglueWays2() {
-        LinkedList<Command> cmds = new LinkedList<>();
+        List<Command> cmds = new LinkedList<>();
         List<Node> allNewNodes = new LinkedList<>();
         Way tmpWay = selectedWay;
 
diff --git a/src/org/openstreetmap/josm/actions/UnJoinNodeWayAction.java b/src/org/openstreetmap/josm/actions/UnJoinNodeWayAction.java
index 3250e27..6ae45cd 100644
--- a/src/org/openstreetmap/josm/actions/UnJoinNodeWayAction.java
+++ b/src/org/openstreetmap/josm/actions/UnJoinNodeWayAction.java
@@ -10,6 +10,7 @@ import java.awt.event.KeyEvent;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Iterator;
+import java.util.LinkedList;
 import java.util.List;
 
 import javax.swing.JOptionPane;
@@ -19,6 +20,7 @@ import org.openstreetmap.josm.command.RemoveNodesCommand;
 import org.openstreetmap.josm.data.osm.Node;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.data.osm.Way;
+import org.openstreetmap.josm.gui.Notification;
 import org.openstreetmap.josm.tools.Shortcut;
 
 /**
@@ -38,6 +40,9 @@ public class UnJoinNodeWayAction extends JosmAction {
         putValue("help", ht("/Action/UnJoinNodeWay"));
     }
 
+    /**
+     * Called when the action is executed.
+     */
     @Override
     public void actionPerformed(ActionEvent e) {
 
@@ -45,44 +50,41 @@ public class UnJoinNodeWayAction extends JosmAction {
 
         List<Node> selectedNodes = OsmPrimitive.getFilteredList(selection, Node.class);
         List<Way> selectedWays = OsmPrimitive.getFilteredList(selection, Way.class);
+
+        selectedNodes = cleanSelectedNodes(selectedWays, selectedNodes);
+
         List<Way> applicableWays = getApplicableWays(selectedWays, selectedNodes);
 
         if (applicableWays == null) {
-            JOptionPane.showMessageDialog(
-                    Main.parent,
-                    tr("Select at least one node to be disconnected."),
-                    tr("Warning"),
-                    JOptionPane.WARNING_MESSAGE);
+            notify(tr("Select at least one node to be disconnected."),
+                   JOptionPane.WARNING_MESSAGE);
             return;
         } else if (applicableWays.isEmpty()) {
-            JOptionPane.showMessageDialog(Main.parent,
-                    trn("Selected node cannot be disconnected from anything.",
-                        "Selected nodes cannot be disconnected from anything.",
-                        selectedNodes.size()),
-                    tr("Warning"),
-                    JOptionPane.WARNING_MESSAGE);
+            notify(trn("Selected node cannot be disconnected from anything.",
+                       "Selected nodes cannot be disconnected from anything.",
+                       selectedNodes.size()),
+                   JOptionPane.WARNING_MESSAGE);
             return;
         } else if (applicableWays.size() > 1) {
-            JOptionPane.showMessageDialog(Main.parent,
-                    trn("There is more than one way using the node you selected. Please select the way also.",
-                        "There is more than one way using the nodes you selected. Please select the way also.",
-                        selectedNodes.size()),
-                    tr("Warning"),
-                    JOptionPane.WARNING_MESSAGE);
+            notify(trn("There is more than one way using the node you selected. "
+                       + "Please select the way also.",
+                       "There is more than one way using the nodes you selected. "
+                       + "Please select the way also.",
+                       selectedNodes.size()),
+                   JOptionPane.WARNING_MESSAGE);
             return;
         } else if (applicableWays.get(0).getRealNodesCount() < selectedNodes.size() + 2) {
             // there is only one affected way, but removing the selected nodes would only leave it
             // with less than 2 nodes
-            JOptionPane.showMessageDialog(Main.parent,
-                    trn("The affected way would disappear after disconnecting the selected node.",
-                        "The affected way would disappear after disconnecting the selected nodes.",
-                        selectedNodes.size()),
-                    tr("Warning"),
-                    JOptionPane.WARNING_MESSAGE);
+            notify(trn("The affected way would disappear after disconnecting the "
+                       + "selected node.",
+                       "The affected way would disappear after disconnecting the "
+                       + "selected nodes.",
+                       selectedNodes.size()),
+                   JOptionPane.WARNING_MESSAGE);
             return;
         }
 
-
         // Finally, applicableWays contains only one perfect way
         Way selectedWay = applicableWays.get(0);
 
@@ -91,8 +93,61 @@ public class UnJoinNodeWayAction extends JosmAction {
         Main.map.repaint();
     }
 
-    // Find ways to which the disconnect can be applied. This is the list of ways with more
-    // than two nodes which pass through all the given nodes, intersected with the selected ways (if any)
+    /**
+     * Send a notification message.
+     * @param msg Message to be sent.
+     * @param messageType Nature of the message.
+     */
+    public void notify(String msg, int messageType) {
+        new Notification(msg).setIcon(messageType).show();
+    }
+
+    /**
+     * Removes irrelevant nodes from user selection.
+     *
+     * The action can be performed reliably even if we remove :
+     *   * Nodes not referenced by any ways
+     *   * When only one way is selected, nodes not part of this way (#10396).
+     *
+     * @param selectedWays  List of user selected way.
+     * @param selectedNodes List of user selected nodes.
+     * @return New list of nodes cleaned of irrelevant nodes.
+     */
+    private List<Node> cleanSelectedNodes(List<Way> selectedWays,
+                                          List<Node> selectedNodes) {
+        List<Node> resultingNodes = new LinkedList<>();
+
+        // List of node referenced by a route
+        for (Node n: selectedNodes) {
+            if (n.isReferredByWays(1)) {
+                resultingNodes.add(n);
+            }
+        }
+        // If exactly one selected way, remove node not referencing par this way.
+        if (selectedWays.size() == 1) {
+            Way w = selectedWays.get(0);
+            for (Node n: new ArrayList<Node>(resultingNodes)) {
+                if (!w.containsNode(n)) {
+                    resultingNodes.remove(n);
+                }
+            }
+        }
+        // Warn if nodes were removed
+        if (resultingNodes.size() != selectedNodes.size()) {
+            notify(tr("Some irrelevant nodes have been removed from the selection"),
+                   JOptionPane.INFORMATION_MESSAGE);
+        }
+        return resultingNodes;
+    }
+
+    /**
+     * Find ways to which the disconnect can be applied. This is the list of ways
+     * with more than two nodes which pass through all the given nodes, intersected
+     * with the selected ways (if any)
+     * @param selectedWays List of user selected ways.
+     * @param selectedNodes List of user selected nodes.
+     * @return List of relevant ways
+     */
     private List<Way> getApplicableWays(List<Way> selectedWays, List<Node> selectedNodes) {
         if (selectedNodes.isEmpty())
             return null;
diff --git a/src/org/openstreetmap/josm/actions/UpdateSelectionAction.java b/src/org/openstreetmap/josm/actions/UpdateSelectionAction.java
index dc2d973..d904af3 100644
--- a/src/org/openstreetmap/josm/actions/UpdateSelectionAction.java
+++ b/src/org/openstreetmap/josm/actions/UpdateSelectionAction.java
@@ -64,13 +64,11 @@ public class UpdateSelectionAction extends JosmAction {
      * with the data currently kept on the server.
      *
      * @param id  the id of a primitive in the {@link DataSet} of the current edit layer. Must not be null.
-     * @throws IllegalArgumentException thrown if id is null
-     * @exception IllegalStateException thrown if there is no primitive with <code>id</code> in
-     *   the current dataset
-     * @exception IllegalStateException thrown if there is no current dataset
-     *
+     * @throws IllegalArgumentException if id is null
+     * @throws IllegalStateException if there is no primitive with <code>id</code> in the current dataset
+     * @throws IllegalStateException if there is no current dataset
      */
-    public static void updatePrimitive(PrimitiveId id) throws IllegalStateException, IllegalArgumentException{
+    public static void updatePrimitive(PrimitiveId id) {
         ensureParameterNotNull(id, "id");
         if (getEditLayer() == null)
             throw new IllegalStateException(tr("No current dataset found"));
diff --git a/src/org/openstreetmap/josm/actions/UploadAction.java b/src/org/openstreetmap/josm/actions/UploadAction.java
index 9440af2..afc06e0 100644
--- a/src/org/openstreetmap/josm/actions/UploadAction.java
+++ b/src/org/openstreetmap/josm/actions/UploadAction.java
@@ -9,6 +9,7 @@ import java.awt.event.KeyEvent;
 import java.util.HashMap;
 import java.util.LinkedList;
 import java.util.List;
+import java.util.Map;
 
 import javax.swing.JOptionPane;
 import javax.swing.SwingUtilities;
@@ -238,7 +239,7 @@ public class UploadAction extends JosmAction{
         SwingUtilities.invokeLater(new Runnable() {
             @Override
             public void run() {
-                final HashMap<String, String> tags = new HashMap<>(layer.data.getChangeSetTags());
+                final Map<String, String> tags = new HashMap<>(layer.data.getChangeSetTags());
                 if (!tags.containsKey("source")) {
                     tags.put("source", dialog.getLastChangesetSourceFromHistory());
                 }
diff --git a/src/org/openstreetmap/josm/actions/UploadNotesAction.java b/src/org/openstreetmap/josm/actions/UploadNotesAction.java
index 5de536e..188777d 100644
--- a/src/org/openstreetmap/josm/actions/UploadNotesAction.java
+++ b/src/org/openstreetmap/josm/actions/UploadNotesAction.java
@@ -35,7 +35,7 @@ public class UploadNotesAction extends JosmAction {
             noteLayers = Main.map.mapView.getLayersOfType(NoteLayer.class);
         }
         NoteLayer layer;
-        if (noteLayers != null && noteLayers.size() > 0) {
+        if (noteLayers != null && !noteLayers.isEmpty()) {
             layer = noteLayers.get(0);
         } else {
             Main.error("No note layer found");
diff --git a/src/org/openstreetmap/josm/actions/UploadSelectionAction.java b/src/org/openstreetmap/josm/actions/UploadSelectionAction.java
index 35c6468..7bbeec5 100644
--- a/src/org/openstreetmap/josm/actions/UploadSelectionAction.java
+++ b/src/org/openstreetmap/josm/actions/UploadSelectionAction.java
@@ -37,9 +37,12 @@ import org.xml.sax.SAXException;
 
 /**
  * Uploads the current selection to the server.
- *
+ * @since 2250
  */
-public class UploadSelectionAction extends JosmAction{
+public class UploadSelectionAction extends JosmAction {
+    /**
+     * Constructs a new {@code UploadSelectionAction}.
+     */
     public UploadSelectionAction() {
         super(
                 tr("Upload selection"),
@@ -65,7 +68,7 @@ public class UploadSelectionAction extends JosmAction{
     }
 
     protected Set<OsmPrimitive> getDeletedPrimitives(DataSet ds) {
-        HashSet<OsmPrimitive> ret = new HashSet<>();
+        Set<OsmPrimitive> ret = new HashSet<>();
         for (OsmPrimitive p: ds.allPrimitives()) {
             if (p.isDeleted() && !p.isNew() && p.isVisible() && p.isModified()) {
                 ret.add(p);
@@ -75,7 +78,7 @@ public class UploadSelectionAction extends JosmAction{
     }
 
     protected Set<OsmPrimitive> getModifiedPrimitives(Collection<OsmPrimitive> primitives) {
-        HashSet<OsmPrimitive> ret = new HashSet<>();
+        Set<OsmPrimitive> ret = new HashSet<>();
         for (OsmPrimitive p: primitives) {
             if (p.isNewOrUndeleted()) {
                 ret.add(p);
@@ -238,9 +241,9 @@ public class UploadSelectionAction extends JosmAction{
          *
          * @param base the base collection. Must not be null.
          * @return the "hull"
-         * @throws IllegalArgumentException thrown if base is null
+         * @throws IllegalArgumentException if base is null
          */
-        public Set<OsmPrimitive> build(Collection<OsmPrimitive> base) throws IllegalArgumentException{
+        public Set<OsmPrimitive> build(Collection<OsmPrimitive> base) {
             CheckParameterUtil.ensureParameterNotNull(base, "base");
             hull = new HashSet<>();
             for (OsmPrimitive p: base) {
@@ -302,7 +305,7 @@ public class UploadSelectionAction extends JosmAction{
          * @return primitives to check
          */
         protected Set<OsmPrimitive> getPrimitivesToCheckForParents() {
-            HashSet<OsmPrimitive> ret = new HashSet<>();
+            Set<OsmPrimitive> ret = new HashSet<>();
             for (OsmPrimitive p: toUpload) {
                 if (p.isDeleted() && !p.isNewOrUndeleted()) {
                     ret.add(p);
diff --git a/src/org/openstreetmap/josm/actions/ValidateAction.java b/src/org/openstreetmap/josm/actions/ValidateAction.java
index 3e826bc..3c9bcdb 100644
--- a/src/org/openstreetmap/josm/actions/ValidateAction.java
+++ b/src/org/openstreetmap/josm/actions/ValidateAction.java
@@ -34,7 +34,7 @@ import org.xml.sax.SAXException;
 public class ValidateAction extends JosmAction {
 
     /** Last selection used to validate */
-    private Collection<OsmPrimitive> lastSelection;
+    private transient Collection<OsmPrimitive> lastSelection;
 
     /**
      * Constructor
diff --git a/src/org/openstreetmap/josm/actions/downloadtasks/DownloadNotesTask.java b/src/org/openstreetmap/josm/actions/downloadtasks/DownloadNotesTask.java
index 9f10e31..adc2ba2 100644
--- a/src/org/openstreetmap/josm/actions/downloadtasks/DownloadNotesTask.java
+++ b/src/org/openstreetmap/josm/actions/downloadtasks/DownloadNotesTask.java
@@ -113,7 +113,7 @@ public class DownloadNotesTask extends AbstractDownloadTask {
                 noteLayers = Main.map.mapView.getLayersOfType(NoteLayer.class);
             }
             NoteLayer layer;
-            if (noteLayers != null && noteLayers.size() > 0) {
+            if (noteLayers != null && !noteLayers.isEmpty()) {
                 layer = noteLayers.get(0);
                 layer.getNoteData().addNotes(notesData);
             } else {
diff --git a/src/org/openstreetmap/josm/actions/downloadtasks/DownloadNotesUrlIdTask.java b/src/org/openstreetmap/josm/actions/downloadtasks/DownloadNotesUrlIdTask.java
index d7f3f36..5fc6be5 100644
--- a/src/org/openstreetmap/josm/actions/downloadtasks/DownloadNotesUrlIdTask.java
+++ b/src/org/openstreetmap/josm/actions/downloadtasks/DownloadNotesUrlIdTask.java
@@ -1,13 +1,13 @@
 // License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.actions.downloadtasks;
 
-import org.openstreetmap.josm.gui.progress.ProgressMonitor;
+import static org.openstreetmap.josm.tools.I18n.tr;
 
 import java.util.concurrent.Future;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
-import static org.openstreetmap.josm.tools.I18n.tr;
+import org.openstreetmap.josm.gui.progress.ProgressMonitor;
 
 public class DownloadNotesUrlIdTask extends DownloadNotesTask {
 
@@ -28,10 +28,6 @@ public class DownloadNotesUrlIdTask extends DownloadNotesTask {
         return new String[]{URL_ID_PATTERN};
     }
 
-    public boolean acceptsUrl(String url) {
-        return super.acceptsUrl(url);
-    }
-
     @Override
     public String getTitle() {
         return tr("Download OSM Note by ID");
diff --git a/src/org/openstreetmap/josm/actions/downloadtasks/DownloadOsmChangeTask.java b/src/org/openstreetmap/josm/actions/downloadtasks/DownloadOsmChangeTask.java
index be84e00..f0d3ea8 100644
--- a/src/org/openstreetmap/josm/actions/downloadtasks/DownloadOsmChangeTask.java
+++ b/src/org/openstreetmap/josm/actions/downloadtasks/DownloadOsmChangeTask.java
@@ -8,6 +8,7 @@ import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
+import java.util.Map.Entry;
 import java.util.concurrent.Future;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
@@ -127,7 +128,7 @@ public class DownloadOsmChangeTask extends DownloadOsmTask {
 
         private final Map<OsmPrimitive, Date> toLoad;
 
-        public HistoryLoaderAndListener(Map<OsmPrimitive, Date> toLoad) {
+        private HistoryLoaderAndListener(Map<OsmPrimitive, Date> toLoad) {
             this.toLoad = toLoad;
             add(toLoad.keySet());
             // Updating process is done after all history requests have been made
@@ -137,10 +138,11 @@ public class DownloadOsmChangeTask extends DownloadOsmTask {
         @Override
         public void historyUpdated(HistoryDataSet source, PrimitiveId id) {
             Map<OsmPrimitive, Date> toLoadNext = new HashMap<>();
-            for (Iterator<OsmPrimitive> it = toLoad.keySet().iterator(); it.hasNext();) {
-                OsmPrimitive p = it.next();
+            for (Iterator<Entry<OsmPrimitive, Date>> it = toLoad.entrySet().iterator(); it.hasNext();) {
+                Entry<OsmPrimitive, Date> entry = it.next();
+                OsmPrimitive p = entry.getKey();
                 History history = source.getHistory(p.getPrimitiveId());
-                Date date = toLoad.get(p);
+                Date date = entry.getValue();
                 // If the history has been loaded and a timestamp is known
                 if (history != null && date != null) {
                     // Lookup for the primitive version at the specified timestamp
diff --git a/src/org/openstreetmap/josm/actions/downloadtasks/DownloadOsmCompressedTask.java b/src/org/openstreetmap/josm/actions/downloadtasks/DownloadOsmCompressedTask.java
index cbb1a72..3ad0ebf 100644
--- a/src/org/openstreetmap/josm/actions/downloadtasks/DownloadOsmCompressedTask.java
+++ b/src/org/openstreetmap/josm/actions/downloadtasks/DownloadOsmCompressedTask.java
@@ -1,10 +1,10 @@
 // License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.actions.downloadtasks;
 
-import java.util.concurrent.Future;
-
 import static org.openstreetmap.josm.tools.I18n.tr;
 
+import java.util.concurrent.Future;
+
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.data.Bounds;
 import org.openstreetmap.josm.data.osm.DataSet;
@@ -18,7 +18,7 @@ import org.openstreetmap.josm.io.OsmTransferException;
  */
 public class DownloadOsmCompressedTask extends DownloadOsmTask {
 
-    static final String PATTERN_COMPRESS =  "https?://.*/.*\\.osm.(gz|bz2?|zip)";
+    private static final String PATTERN_COMPRESS =  "https?://.*/.*\\.osm.(gz|bz2?|zip)";
 
     @Override
     public String[] getPatterns() {
@@ -29,13 +29,13 @@ public class DownloadOsmCompressedTask extends DownloadOsmTask {
     public String getTitle() {
         return tr("Download Compressed OSM");
     }
-    
+
     @Override
     public Future<?> download(boolean newLayer, Bounds downloadArea,
             ProgressMonitor progressMonitor) {
         return null;
     }
-    
+
     /**
      * Loads a given URL
      * @param new_layer {@code true} if the data should be saved to a new layer
diff --git a/src/org/openstreetmap/josm/actions/downloadtasks/DownloadReferrersTask.java b/src/org/openstreetmap/josm/actions/downloadtasks/DownloadReferrersTask.java
index 7d36373..8c34351 100644
--- a/src/org/openstreetmap/josm/actions/downloadtasks/DownloadReferrersTask.java
+++ b/src/org/openstreetmap/josm/actions/downloadtasks/DownloadReferrersTask.java
@@ -37,7 +37,7 @@ import org.xml.sax.SAXException;
 
 /**
  * The asynchronous task for downloading referring primitives
- *
+ * @since 2923
  */
 public class DownloadReferrersTask extends PleaseWaitRunnable {
     private boolean canceled;
@@ -55,7 +55,6 @@ public class DownloadReferrersTask extends PleaseWaitRunnable {
      *
      * @param targetLayer  the target layer for the downloaded primitives. Must not be null.
      * @param children the collection of child primitives for which parents are to be downloaded
-     *
      */
     public DownloadReferrersTask(OsmDataLayer targetLayer, Collection<OsmPrimitive> children) {
         super("Download referrers", false /* don't ignore exception*/);
@@ -102,12 +101,11 @@ public class DownloadReferrersTask extends PleaseWaitRunnable {
      * @param targetLayer  the target layer. Must not be null.
      * @param id the primitive id. id > 0 required.
      * @param type the primitive type. type != null required
-     * @exception IllegalArgumentException thrown if id <= 0
-     * @exception IllegalArgumentException thrown if type == null
-     * @exception IllegalArgumentException thrown if targetLayer == null
-     *
+     * @throws IllegalArgumentException if id <= 0
+     * @throws IllegalArgumentException if type == null
+     * @throws IllegalArgumentException if targetLayer == null
      */
-    public DownloadReferrersTask(OsmDataLayer targetLayer, long id, OsmPrimitiveType type) throws IllegalArgumentException {
+    public DownloadReferrersTask(OsmDataLayer targetLayer, long id, OsmPrimitiveType type) {
         super("Download referrers", false /* don't ignore exception*/);
         CheckParameterUtil.ensureParameterNotNull(targetLayer, "targetLayer");
         if (id <= 0)
@@ -125,11 +123,10 @@ public class DownloadReferrersTask extends PleaseWaitRunnable {
      *
      * @param targetLayer the target layer. Must not be null.
      * @param primitiveId a PrimitiveId object.
-     * @exception IllegalArgumentException thrown if id <= 0
-     * @exception IllegalArgumentException thrown if targetLayer == null
-     *
+     * @throws IllegalArgumentException if id <= 0
+     * @throws IllegalArgumentException if targetLayer == null
      */
-    public DownloadReferrersTask(OsmDataLayer targetLayer, PrimitiveId primitiveId) throws IllegalArgumentException {
+    public DownloadReferrersTask(OsmDataLayer targetLayer, PrimitiveId primitiveId) {
         this(targetLayer,  primitiveId, null);
     }
 
@@ -139,16 +136,16 @@ public class DownloadReferrersTask extends PleaseWaitRunnable {
      * @param targetLayer the target layer. Must not be null.
      * @param primitiveId a PrimitiveId object.
      * @param progressMonitor ProgressMonitor to use or null to create a new one.
-     * @exception IllegalArgumentException thrown if id <= 0
-     * @exception IllegalArgumentException thrown if targetLayer == null
-     *
+     * @throws IllegalArgumentException if id <= 0
+     * @throws IllegalArgumentException if targetLayer == null
      */
     public DownloadReferrersTask(OsmDataLayer targetLayer, PrimitiveId primitiveId,
-            ProgressMonitor progressMonitor) throws IllegalArgumentException {
+            ProgressMonitor progressMonitor) {
         super("Download referrers", progressMonitor, false /* don't ignore exception*/);
         CheckParameterUtil.ensureParameterNotNull(targetLayer, "targetLayer");
         if (primitiveId.isNew())
-            throw new IllegalArgumentException(MessageFormat.format("Cannot download referrers for new primitives (ID {0})", primitiveId.getUniqueId()));
+            throw new IllegalArgumentException(MessageFormat.format(
+                    "Cannot download referrers for new primitives (ID {0})", primitiveId.getUniqueId()));
         canceled = false;
         this.children = new HashMap<>();
         this.children.put(primitiveId.getUniqueId(), primitiveId.getType());
diff --git a/src/org/openstreetmap/josm/actions/downloadtasks/DownloadTaskList.java b/src/org/openstreetmap/josm/actions/downloadtasks/DownloadTaskList.java
index 59d9f77..dc36687 100644
--- a/src/org/openstreetmap/josm/actions/downloadtasks/DownloadTaskList.java
+++ b/src/org/openstreetmap/josm/actions/downloadtasks/DownloadTaskList.java
@@ -125,7 +125,7 @@ public class DownloadTaskList {
      * @return the set of ids of all complete, non-new primitives
      */
     protected Set<OsmPrimitive> getCompletePrimitives(DataSet ds) {
-        HashSet<OsmPrimitive> ret = new HashSet<>();
+        Set<OsmPrimitive> ret = new HashSet<>();
         for (OsmPrimitive primitive : ds.allPrimitives()) {
             if (!primitive.isIncomplete() && !primitive.isNew()) {
                 ret.add(primitive);
@@ -215,7 +215,7 @@ public class DownloadTaskList {
      * @return the set of primitive ids which have been downloaded by this task list
      */
     public Set<OsmPrimitive> getDownloadedPrimitives() {
-        HashSet<OsmPrimitive> ret = new HashSet<>();
+        Set<OsmPrimitive> ret = new HashSet<>();
         for (DownloadTask task : tasks) {
             if (task instanceof DownloadOsmTask) {
                 DataSet ds = ((DownloadOsmTask) task).getDownloadedData();
@@ -252,7 +252,7 @@ public class DownloadTaskList {
                     return;
                 }
             }
-            LinkedHashSet<Object> errors = new LinkedHashSet<>();
+            Set<Object> errors = new LinkedHashSet<>();
             for (DownloadTask dt : tasks) {
                 errors.addAll(dt.getErrorObjects());
             }
diff --git a/src/org/openstreetmap/josm/actions/downloadtasks/PostDownloadHandler.java b/src/org/openstreetmap/josm/actions/downloadtasks/PostDownloadHandler.java
index b9b59a3..359a4f5 100644
--- a/src/org/openstreetmap/josm/actions/downloadtasks/PostDownloadHandler.java
+++ b/src/org/openstreetmap/josm/actions/downloadtasks/PostDownloadHandler.java
@@ -7,6 +7,7 @@ import java.util.ArrayList;
 import java.util.Collection;
 import java.util.LinkedHashSet;
 import java.util.List;
+import java.util.Set;
 import java.util.concurrent.Future;
 
 import javax.swing.JOptionPane;
@@ -76,7 +77,7 @@ public class PostDownloadHandler implements Runnable {
 
         // make sure errors are reported only once
         //
-        LinkedHashSet<Object> errors = new LinkedHashSet<>();
+        Set<Object> errors = new LinkedHashSet<>();
         errors.addAll(task.getErrorObjects());
         if (errors.isEmpty())
             return;
diff --git a/src/org/openstreetmap/josm/actions/mapmode/AddNoteAction.java b/src/org/openstreetmap/josm/actions/mapmode/AddNoteAction.java
index 442dffe..1758432 100644
--- a/src/org/openstreetmap/josm/actions/mapmode/AddNoteAction.java
+++ b/src/org/openstreetmap/josm/actions/mapmode/AddNoteAction.java
@@ -26,7 +26,7 @@ import org.openstreetmap.josm.tools.ImageProvider;
  */
 public class AddNoteAction extends MapMode implements KeyPressReleaseListener {
 
-    private NoteData noteData;
+    private transient NoteData noteData;
 
     /**
      * Construct a new map mode.
diff --git a/src/org/openstreetmap/josm/actions/mapmode/DeleteAction.java b/src/org/openstreetmap/josm/actions/mapmode/DeleteAction.java
index 91b1125..1b7902a 100644
--- a/src/org/openstreetmap/josm/actions/mapmode/DeleteAction.java
+++ b/src/org/openstreetmap/josm/actions/mapmode/DeleteAction.java
@@ -55,7 +55,7 @@ public class DeleteAction extends MapMode implements ModifierListener {
      * to remove the highlight from them again as otherwise the whole data
      * set would have to be checked.
      */
-    private WaySegment oldHighlightedWaySegment = null;
+    private transient WaySegment oldHighlightedWaySegment = null;
 
     private static final HighlightHelper highlightHelper = new HighlightHelper();
     private boolean drawTargetHighlight;
@@ -81,9 +81,9 @@ public class DeleteAction extends MapMode implements ModifierListener {
     }
 
     private static class DeleteParameters {
-        DeleteMode mode;
-        Node nearestNode;
-        WaySegment nearestSegment;
+        private DeleteMode mode;
+        private Node nearestNode;
+        private WaySegment nearestSegment;
     }
 
     /**
@@ -320,8 +320,8 @@ public class DeleteAction extends MapMode implements ModifierListener {
      *
      * @param layer the layer in whose context the relation is deleted. Must not be null.
      * @param toDelete  the relation to be deleted. Must  not be null.
-     * @exception IllegalArgumentException thrown if layer is null
-     * @exception IllegalArgumentException thrown if toDelete is nul
+     * @throws IllegalArgumentException if layer is null
+     * @throws IllegalArgumentException if toDelete is nul
      */
     public static void deleteRelation(OsmDataLayer layer, Relation toDelete) {
         CheckParameterUtil.ensureParameterNotNull(layer, "layer");
diff --git a/src/org/openstreetmap/josm/actions/mapmode/DrawAction.java b/src/org/openstreetmap/josm/actions/mapmode/DrawAction.java
index 5e3cc60..c349e89 100644
--- a/src/org/openstreetmap/josm/actions/mapmode/DrawAction.java
+++ b/src/org/openstreetmap/josm/actions/mapmode/DrawAction.java
@@ -75,20 +75,20 @@ public class DrawAction extends MapMode implements MapViewPaintable, SelectionCh
     private final Cursor cursorJoinNode;
     private final Cursor cursorJoinWay;
 
-    private Node lastUsedNode = null;
+    private transient Node lastUsedNode = null;
     private static final double PHI = Math.toRadians(90);
     private double toleranceMultiplier;
 
-    private Node mouseOnExistingNode;
-    private Set<Way> mouseOnExistingWays = new HashSet<>();
+    private transient Node mouseOnExistingNode;
+    private transient Set<Way> mouseOnExistingWays = new HashSet<>();
     // old highlights store which primitives are currently highlighted. This
     // is true, even if target highlighting is disabled since the status bar
     // derives its information from this list as well.
-    private Set<OsmPrimitive> oldHighlights = new HashSet<>();
+    private transient Set<OsmPrimitive> oldHighlights = new HashSet<>();
     // new highlights contains a list of primitives that should be highlighted
     // but haven’t been so far. The idea is to compare old and new and only
     // repaint if there are changes.
-    private Set<OsmPrimitive> newHighlights = new HashSet<>();
+    private transient Set<OsmPrimitive> newHighlights = new HashSet<>();
     private boolean drawHelperLine;
     private boolean wayIsFinished = false;
     private boolean drawTargetHighlight;
@@ -96,21 +96,21 @@ public class DrawAction extends MapMode implements MapViewPaintable, SelectionCh
     private Point oldMousePos;
     private Color rubberLineColor;
 
-    private Node currentBaseNode;
-    private Node previousNode;
+    private transient Node currentBaseNode;
+    private transient Node previousNode;
     private EastNorth currentMouseEastNorth;
 
-    private final SnapHelper snapHelper = new SnapHelper();
+    private final transient SnapHelper snapHelper = new SnapHelper();
 
-    private final Shortcut backspaceShortcut;
+    private final transient Shortcut backspaceShortcut;
     private final BackSpaceAction backspaceAction;
-    private final Shortcut snappingShortcut;
+    private final transient Shortcut snappingShortcut;
     private boolean ignoreNextKeyRelease;
 
     private final SnapChangeAction snapChangeAction;
     private final JCheckBoxMenuItem snapCheckboxMenuItem;
     private boolean useRepeatedShortcut;
-    private Stroke rubberLineStroke;
+    private transient Stroke rubberLineStroke;
     private static final BasicStroke BASIC_STROKE = new BasicStroke(1);
 
     private static int snapToIntersectionThreshold;
@@ -949,7 +949,7 @@ public class DrawAction extends MapMode implements MapViewPaintable, SelectionCh
     }
 
     private static void pruneSuccsAndReverse(List<Integer> is) {
-        HashSet<Integer> is2 = new HashSet<>();
+        Set<Integer> is2 = new HashSet<>();
         for (int i : is) {
             if (!is2.contains(i - 1) && !is2.contains(i + 1)) {
                 is2.add(i);
@@ -1285,7 +1285,7 @@ public class DrawAction extends MapMode implements MapViewPaintable, SelectionCh
     }
 
     private class SnapHelper {
-        boolean snapOn; // snapping is turned on
+        private boolean snapOn; // snapping is turned on
 
         private boolean active; // snapping is active for current mouse position
         private boolean fixed; // snap angle is fixed
@@ -1297,31 +1297,31 @@ public class DrawAction extends MapMode implements MapViewPaintable, SelectionCh
 
         private boolean snapToProjections;
 
-        EastNorth dir2;
-        EastNorth projected;
-        String labelText;
-        double lastAngle;
+        private EastNorth dir2;
+        private EastNorth projected;
+        private String labelText;
+        private double lastAngle;
 
-        double customBaseHeading=-1; // angle of base line, if not last segment)
+        private double customBaseHeading=-1; // angle of base line, if not last segment)
         private EastNorth segmentPoint1; // remembered first point of base segment
         private EastNorth segmentPoint2; // remembered second point of base segment
         private EastNorth projectionSource; // point that we are projecting to the line
 
-        double[] snapAngles;
-        double snapAngleTolerance;
+        private double[] snapAngles;
+        private double snapAngleTolerance;
 
-        double pe,pn; // (pe,pn) - direction of snapping line
-        double e0,n0; // (e0,n0) - origin of snapping line
+        private double pe,pn; // (pe,pn) - direction of snapping line
+        private double e0,n0; // (e0,n0) - origin of snapping line
 
-        final String fixFmt="%d "+tr("FIX");
-        Color snapHelperColor;
+        private final String fixFmt="%d "+tr("FIX");
+        private Color snapHelperColor;
         private Color highlightColor;
 
         private Stroke normalStroke;
         private Stroke helperStroke;
         private Stroke highlightStroke;
 
-        JCheckBoxMenuItem checkBox;
+        private JCheckBoxMenuItem checkBox;
         public final Color ORANGE_TRANSPARENT = new Color(Color.ORANGE.getRed(),Color.ORANGE.getGreen(),Color.ORANGE.getBlue(),128);
 
         public void init() {
@@ -1671,15 +1671,17 @@ public class DrawAction extends MapMode implements MapViewPaintable, SelectionCh
             }
         }
 
-        MouseListener anglePopupListener = new PopupMenuLauncher( new JPopupMenu() {
-            JCheckBoxMenuItem repeatedCb = new JCheckBoxMenuItem(new AbstractAction(tr("Toggle snapping by {0}", getShortcut().getKeyText())){
+        private MouseListener anglePopupListener = new PopupMenuLauncher(new JPopupMenu() {
+            private JCheckBoxMenuItem repeatedCb = new JCheckBoxMenuItem(
+                    new AbstractAction(tr("Toggle snapping by {0}", getShortcut().getKeyText())) {
                 @Override public void actionPerformed(ActionEvent e) {
                     boolean sel=((JCheckBoxMenuItem) e.getSource()).getState();
                     Main.pref.put("draw.anglesnap.toggleOnRepeatedA", sel);
                     init();
                 }
             });
-            JCheckBoxMenuItem helperCb = new JCheckBoxMenuItem(new AbstractAction(tr("Show helper geometry")){
+            private JCheckBoxMenuItem helperCb = new JCheckBoxMenuItem(
+                    new AbstractAction(tr("Show helper geometry")) {
                 @Override public void actionPerformed(ActionEvent e) {
                     boolean sel=((JCheckBoxMenuItem) e.getSource()).getState();
                     Main.pref.put("draw.anglesnap.drawConstructionGeometry", sel);
@@ -1689,7 +1691,8 @@ public class DrawAction extends MapMode implements MapViewPaintable, SelectionCh
                     enableSnapping();
                 }
             });
-            JCheckBoxMenuItem projectionCb = new JCheckBoxMenuItem(new AbstractAction(tr("Snap to node projections")){
+            private JCheckBoxMenuItem projectionCb = new JCheckBoxMenuItem(
+                    new AbstractAction(tr("Snap to node projections")) {
                 @Override public void actionPerformed(ActionEvent e) {
                     boolean sel=((JCheckBoxMenuItem) e.getSource()).getState();
                     Main.pref.put("draw.anglesnap.projectionsnap", sel);
diff --git a/src/org/openstreetmap/josm/actions/mapmode/ExtrudeAction.java b/src/org/openstreetmap/josm/actions/mapmode/ExtrudeAction.java
index b2b303f..bdd244c 100644
--- a/src/org/openstreetmap/josm/actions/mapmode/ExtrudeAction.java
+++ b/src/org/openstreetmap/josm/actions/mapmode/ExtrudeAction.java
@@ -24,6 +24,7 @@ import java.util.ArrayList;
 import java.util.Collection;
 import java.util.LinkedList;
 import java.util.List;
+
 import javax.swing.JCheckBoxMenuItem;
 import javax.swing.JMenuItem;
 
@@ -48,8 +49,8 @@ import org.openstreetmap.josm.gui.MapView;
 import org.openstreetmap.josm.gui.layer.Layer;
 import org.openstreetmap.josm.gui.layer.MapViewPaintable;
 import org.openstreetmap.josm.gui.layer.OsmDataLayer;
-import org.openstreetmap.josm.gui.util.KeyPressReleaseListener;
 import org.openstreetmap.josm.gui.util.GuiHelper;
+import org.openstreetmap.josm.gui.util.KeyPressReleaseListener;
 import org.openstreetmap.josm.gui.util.ModifierListener;
 import org.openstreetmap.josm.tools.Geometry;
 import org.openstreetmap.josm.tools.ImageProvider;
@@ -71,10 +72,10 @@ public class ExtrudeAction extends MapMode implements MapViewPaintable, KeyPress
     private boolean nodeDragWithoutCtrl;
 
     private long mouseDownTime = 0;
-    private WaySegment selectedSegment = null;
-    private Node selectedNode = null;
+    private transient WaySegment selectedSegment = null;
+    private transient Node selectedNode = null;
     private Color mainColor;
-    private Stroke mainStroke;
+    private transient Stroke mainStroke;
 
     /** settings value whether shared nodes should be ignored or not */
     private boolean ignoreSharedNodes;
@@ -85,26 +86,26 @@ public class ExtrudeAction extends MapMode implements MapViewPaintable, KeyPress
      * drawing settings for helper lines
      */
     private Color helperColor;
-    private Stroke helperStrokeDash;
-    private Stroke helperStrokeRA;
+    private transient Stroke helperStrokeDash;
+    private transient Stroke helperStrokeRA;
 
-    private Stroke oldLineStroke;
+    private transient Stroke oldLineStroke;
     private double symbolSize;
     /**
      * Possible directions to move to.
      */
-    private List<ReferenceSegment> possibleMoveDirections;
+    private transient List<ReferenceSegment> possibleMoveDirections;
 
 
     /**
      * Collection of nodes that is moved
      */
-    private ArrayList<Node> movingNodeList;
+    private List<Node> movingNodeList;
 
     /**
      * The direction that is currently active.
      */
-    private ReferenceSegment activeMoveDirection;
+    private transient ReferenceSegment activeMoveDirection;
 
     /**
      * The position of the mouse cursor when the drag action was initiated.
@@ -134,12 +135,12 @@ public class ExtrudeAction extends MapMode implements MapViewPaintable, KeyPress
     /**
      * the command that performed last move.
      */
-    private MoveCommand moveCommand;
+    private transient MoveCommand moveCommand;
     /**
      *  The command used for dual alignment movement.
      *  Needs to be separate, due to two nodes moving in different directions.
      */
-    private MoveCommand moveCommand2;
+    private transient MoveCommand moveCommand2;
 
     /** The cursor for the 'create_new' mode. */
     private final Cursor cursorCreateNew;
@@ -175,13 +176,13 @@ public class ExtrudeAction extends MapMode implements MapViewPaintable, KeyPress
     /** {@code true}, if dual alignment is active. User is dragging the mouse, required conditions are met. Treat {@link #mode} (extrude/translate/create_new) as dual aligned. */
     private boolean dualAlignActive;
     /** Dual alignment reference segments */
-    private ReferenceSegment dualAlignSegment1, dualAlignSegment2;
+    private transient ReferenceSegment dualAlignSegment1, dualAlignSegment2;
     /** {@code true}, if new segment was collapsed */
     private boolean dualAlignSegmentCollapsed = false;
     // Dual alignment UI stuff
     private final DualAlignChangeAction dualAlignChangeAction;
     private final JCheckBoxMenuItem dualAlignCheckboxMenuItem;
-    private final Shortcut dualAlignShortcut;
+    private final transient Shortcut dualAlignShortcut;
     private boolean useRepeatedShortcut;
     private boolean ignoreNextKeyRelease;
 
@@ -624,7 +625,7 @@ public class ExtrudeAction extends MapMode implements MapViewPaintable, KeyPress
         // segmentAngleZero marks subset of nodeOverlapsSegment. nodeOverlapsSegment is true if angle between segments is 0 or PI, segmentAngleZero only if angle is 0
         boolean segmentAngleZero = prevNode != null && Math.abs(Geometry.getCornerAngle(prevNode.getEastNorth(), initialN1en, newN1en)) < 1e-5;
         boolean hasOtherWays = hasNodeOtherWays(selectedSegment.getFirstNode(), selectedSegment.way);
-        ArrayList<Node> changedNodes = new ArrayList<>();
+        List<Node> changedNodes = new ArrayList<>();
         if (nodeOverlapsSegment && !alwaysCreateNodes && !hasOtherWays) {
             //move existing node
             Node n1Old = selectedSegment.getFirstNode();
diff --git a/src/org/openstreetmap/josm/actions/mapmode/ImproveWayAccuracyAction.java b/src/org/openstreetmap/josm/actions/mapmode/ImproveWayAccuracyAction.java
index fc1785c..99efc4b 100644
--- a/src/org/openstreetmap/josm/actions/mapmode/ImproveWayAccuracyAction.java
+++ b/src/org/openstreetmap/josm/actions/mapmode/ImproveWayAccuracyAction.java
@@ -63,9 +63,9 @@ public class ImproveWayAccuracyAction extends MapMode implements MapViewPaintabl
 
     private static final long serialVersionUID = 42L;
 
-    private Way targetWay;
-    private Node candidateNode = null;
-    private WaySegment candidateSegment = null;
+    private transient Way targetWay;
+    private transient Node candidateNode = null;
+    private transient WaySegment candidateSegment = null;
 
     private Point mousePos = null;
     private boolean dragging = false;
@@ -79,10 +79,10 @@ public class ImproveWayAccuracyAction extends MapMode implements MapViewPaintabl
     private final Cursor cursorImproveLock;
 
     private Color guideColor;
-    private Stroke selectTargetWayStroke;
-    private Stroke moveNodeStroke;
-    private Stroke addNodeStroke;
-    private Stroke deleteNodeStroke;
+    private transient Stroke selectTargetWayStroke;
+    private transient Stroke moveNodeStroke;
+    private transient Stroke addNodeStroke;
+    private transient Stroke deleteNodeStroke;
     private int dotSize;
 
     private boolean selectionChangedBlocked = false;
@@ -611,14 +611,12 @@ public class ImproveWayAccuracyAction extends MapMode implements MapViewPaintabl
             // Starting improving the single selected way
             startImproving(wayList.get(0));
             return;
-        } else if (nodeList.size() > 0) {
+        } else if (nodeList.size() == 1) {
             // Starting improving the only way of the single selected node
-            if (nodeList.size() == 1) {
-                List<OsmPrimitive> r = nodeList.get(0).getReferrers();
-                if (r.size() == 1 && (r.get(0) instanceof Way)) {
-                    startImproving((Way) r.get(0));
-                    return;
-                }
+            List<OsmPrimitive> r = nodeList.get(0).getReferrers();
+            if (r.size() == 1 && (r.get(0) instanceof Way)) {
+                startImproving((Way) r.get(0));
+                return;
             }
         }
 
diff --git a/src/org/openstreetmap/josm/actions/mapmode/ParallelWayAction.java b/src/org/openstreetmap/josm/actions/mapmode/ParallelWayAction.java
index b49a1d1..ffecc43 100644
--- a/src/org/openstreetmap/josm/actions/mapmode/ParallelWayAction.java
+++ b/src/org/openstreetmap/josm/actions/mapmode/ParallelWayAction.java
@@ -20,9 +20,9 @@ import javax.swing.JOptionPane;
 
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.data.Bounds;
-import org.openstreetmap.josm.data.SystemOfMeasurement;
 import org.openstreetmap.josm.data.Preferences.PreferenceChangeEvent;
 import org.openstreetmap.josm.data.Preferences.PreferenceChangedListener;
+import org.openstreetmap.josm.data.SystemOfMeasurement;
 import org.openstreetmap.josm.data.coor.EastNorth;
 import org.openstreetmap.josm.data.osm.Node;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
@@ -101,11 +101,11 @@ public class ParallelWayAction extends MapMode implements ModifierListener, MapV
     private double snapDistanceChinese;
     private double snapDistanceNautical;
 
-    private ModifiersSpec snapModifierCombo;
-    private ModifiersSpec copyTagsModifierCombo;
-    private ModifiersSpec addToSelectionModifierCombo;
-    private ModifiersSpec toggleSelectedModifierCombo;
-    private ModifiersSpec setSelectedModifierCombo;
+    private transient ModifiersSpec snapModifierCombo;
+    private transient ModifiersSpec copyTagsModifierCombo;
+    private transient ModifiersSpec addToSelectionModifierCombo;
+    private transient ModifiersSpec toggleSelectedModifierCombo;
+    private transient ModifiersSpec setSelectedModifierCombo;
 
     private int initialMoveDelay;
 
@@ -117,16 +117,20 @@ public class ParallelWayAction extends MapMode implements ModifierListener, MapV
     private long mousePressedTime;
     private boolean mouseHasBeenDragged;
 
-    private WaySegment referenceSegment;
-    private ParallelWays pWays;
-    private Set<Way> sourceWays;
+    private transient WaySegment referenceSegment;
+    private transient ParallelWays pWays;
+    private transient Set<Way> sourceWays;
     private EastNorth helperLineStart;
     private EastNorth helperLineEnd;
 
-    Stroke helpLineStroke;
-    Stroke refLineStroke;
-    Color mainColor;
+    private transient Stroke helpLineStroke;
+    private transient Stroke refLineStroke;
+    private Color mainColor;
 
+    /**
+     * Constructs a new {@code ParallelWayAction}.
+     * @param mapFrame Map frame
+     */
     public ParallelWayAction(MapFrame mapFrame) {
         super(tr("Parallel"), "parallel", tr("Make parallel copies of ways"),
             Shortcut.registerShortcut("mapmode:parallel", tr("Mode: {0}",
@@ -302,8 +306,8 @@ public class ParallelWayAction extends MapMode implements ModifierListener, MapV
         updateFlagsChangeableAlways();
 
         // Since the created way is left selected, we need to unselect again here
-        if (pWays != null && pWays.ways != null) {
-            getCurrentDataSet().clearSelection(pWays.ways);
+        if (pWays != null && pWays.getWays() != null) {
+            getCurrentDataSet().clearSelection(pWays.getWays());
             pWays = null;
         }
 
@@ -544,7 +548,7 @@ public class ParallelWayAction extends MapMode implements ModifierListener, MapV
             }
             pWays = new ParallelWays(sourceWays, copyTags, referenceWayIndex);
             pWays.commit();
-            getCurrentDataSet().setSelected(pWays.ways);
+            getCurrentDataSet().setSelected(pWays.getWays());
             return true;
         } catch (IllegalArgumentException e) {
             // TODO: Not ideal feedback. Maybe changing the cursor could be a good mechanism?
diff --git a/src/org/openstreetmap/josm/actions/mapmode/ParallelWays.java b/src/org/openstreetmap/josm/actions/mapmode/ParallelWays.java
index 36003ac..dabf145 100644
--- a/src/org/openstreetmap/josm/actions/mapmode/ParallelWays.java
+++ b/src/org/openstreetmap/josm/actions/mapmode/ParallelWays.java
@@ -7,6 +7,7 @@ import java.util.Collections;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
+import java.util.Map;
 import java.util.Set;
 
 import org.openstreetmap.josm.Main;
@@ -25,7 +26,7 @@ import org.openstreetmap.josm.tools.Geometry;
  * @author Ole Jørgen Brønner (olejorgenb)
  */
 public class ParallelWays {
-    final List<Way> ways;
+    private final List<Way> ways;
     private final List<Node> sortedNodes;
 
     private final int nodeCount;
@@ -39,7 +40,7 @@ public class ParallelWays {
 
         // Make a deep copy of the ways, keeping the copied ways connected
         // TODO: This assumes the first/last nodes of the ways are the only possible shared nodes.
-        HashMap<Node, Node> splitNodeMap = new HashMap<>(sourceWays.size());
+        Map<Node, Node> splitNodeMap = new HashMap<>(sourceWays.size());
         for (Way w : sourceWays) {
             if (!splitNodeMap.containsKey(w.firstNode())) {
                 splitNodeMap.put(w.firstNode(), copyNode(w.firstNode(), copyTags));
@@ -194,4 +195,8 @@ public class ParallelWays {
             return n;
         }
     }
+
+    public final List<Way> getWays() {
+        return ways;
+    }
 }
diff --git a/src/org/openstreetmap/josm/actions/mapmode/PlayHeadDragMode.java b/src/org/openstreetmap/josm/actions/mapmode/PlayHeadDragMode.java
index a5755c4..258ad6b 100644
--- a/src/org/openstreetmap/josm/actions/mapmode/PlayHeadDragMode.java
+++ b/src/org/openstreetmap/josm/actions/mapmode/PlayHeadDragMode.java
@@ -22,7 +22,7 @@ public class PlayHeadDragMode extends MapMode {
     private boolean dragging = false;
     private Point mousePos = null;
     private Point mouseStart = null;
-    private PlayHeadMarker playHeadMarker = null;
+    private transient PlayHeadMarker playHeadMarker = null;
 
     /**
      * Constructs a new {@code PlayHeadDragMode}.
diff --git a/src/org/openstreetmap/josm/actions/mapmode/SelectAction.java b/src/org/openstreetmap/josm/actions/mapmode/SelectAction.java
index d6bbd55..8e5077f 100644
--- a/src/org/openstreetmap/josm/actions/mapmode/SelectAction.java
+++ b/src/org/openstreetmap/josm/actions/mapmode/SelectAction.java
@@ -121,7 +121,7 @@ public class SelectAction extends MapMode implements ModifierListener, KeyPressR
     private MouseEvent oldEvent = null;
 
     private Mode mode = null;
-    private final SelectionManager selectionManager;
+    private final transient SelectionManager selectionManager;
     private boolean cancelDrawMode = false;
     private boolean drawTargetHighlight;
     private boolean didMouseDrag = false;
@@ -136,7 +136,7 @@ public class SelectAction extends MapMode implements ModifierListener, KeyPressR
     /**
      * point where user pressed the mouse to start movement
      */
-    EastNorth startEN;
+    private EastNorth startEN;
     /**
      * The last known position of the mouse.
      */
@@ -170,7 +170,7 @@ public class SelectAction extends MapMode implements ModifierListener, KeyPressR
      * to remove the highlight from them again as otherwise the whole data
      * set would have to be checked.
      */
-    private Set<OsmPrimitive> oldHighlights = new HashSet<>();
+    private transient Set<OsmPrimitive> oldHighlights = new HashSet<>();
 
     /**
      * Create a new SelectAction
@@ -215,8 +215,6 @@ public class SelectAction extends MapMode implements ModifierListener, KeyPressR
         removeHighlighting();
     }
 
-    int previousModifiers;
-
     @Override
     public void modifiersChanged(int modifiers) {
         if (!Main.isDisplayingMapView() || oldEvent==null) return;
@@ -249,7 +247,7 @@ public class SelectAction extends MapMode implements ModifierListener, KeyPressR
         updateKeyModifiers(modifiers);
         determineMapMode(!c.isEmpty());
 
-        HashSet<OsmPrimitive> newHighlights = new HashSet<>();
+        Set<OsmPrimitive> newHighlights = new HashSet<>();
 
         virtualManager.clear();
         if(mode == Mode.MOVE) {
@@ -520,7 +518,7 @@ public class SelectAction extends MapMode implements ModifierListener, KeyPressR
             // If ctrl is pressed we are in merge mode. Look for a nearby node,
             // highlight it and adjust the cursor accordingly.
             final boolean canMerge = ctrl && !getCurrentDataSet().getSelectedNodes().isEmpty();
-            final OsmPrimitive p = canMerge ? (OsmPrimitive)findNodeToMergeTo(e.getPoint()) : null;
+            final OsmPrimitive p = canMerge ? findNodeToMergeTo(e.getPoint()) : null;
             boolean needsRepaint = removeHighlighting();
             if(p != null) {
                 p.setHighlighted(true);
@@ -948,8 +946,8 @@ public class SelectAction extends MapMode implements ModifierListener, KeyPressR
         this.lassoMode = lassoMode;
     }
 
-    CycleManager cycleManager = new CycleManager();
-    VirtualManager virtualManager = new VirtualManager();
+    private transient CycleManager cycleManager = new CycleManager();
+    private transient VirtualManager virtualManager = new VirtualManager();
 
     private class CycleManager {
 
diff --git a/src/org/openstreetmap/josm/actions/mapmode/ZoomAction.java b/src/org/openstreetmap/josm/actions/mapmode/ZoomAction.java
index ad7febf..3d0a9f1 100644
--- a/src/org/openstreetmap/josm/actions/mapmode/ZoomAction.java
+++ b/src/org/openstreetmap/josm/actions/mapmode/ZoomAction.java
@@ -31,10 +31,9 @@ import org.openstreetmap.josm.tools.Shortcut;
 public class ZoomAction extends MapMode implements SelectionEnded {
 
     /**
-     * Manager that manages the selection rectangle with the aspect ratio of the
-     * MapView.
+     * Manager that manages the selection rectangle with the aspect ratio of the MapView.
      */
-    private final SelectionManager selectionManager;
+    private final transient SelectionManager selectionManager;
 
     /**
      * Construct a ZoomAction without a label.
diff --git a/src/org/openstreetmap/josm/actions/relation/AbstractRelationAction.java b/src/org/openstreetmap/josm/actions/relation/AbstractRelationAction.java
index 8f9653f..afde66d 100644
--- a/src/org/openstreetmap/josm/actions/relation/AbstractRelationAction.java
+++ b/src/org/openstreetmap/josm/actions/relation/AbstractRelationAction.java
@@ -12,12 +12,12 @@ import org.openstreetmap.josm.data.osm.Relation;
 import org.openstreetmap.josm.tools.SubclassFilteredCollection;
 
 /**
- * Ancestor for all actions that want to work with relation collection and 
+ * Ancestor for all actions that want to work with relation collection and
  * to be disabled if the collection is empty
  * @since 5793
  */
 public abstract class AbstractRelationAction extends AbstractAction implements OsmPrimitiveAction {
-    protected Collection<Relation> relations = Collections.<Relation>emptySet();
+    protected transient Collection<Relation> relations = Collections.<Relation>emptySet();
 
     protected static final Collection<Relation> getRelations(Collection<? extends OsmPrimitive> primitives) {
         if (primitives == null || primitives.isEmpty()) {
@@ -27,13 +27,13 @@ public abstract class AbstractRelationAction extends AbstractAction implements O
                     primitives, OsmPrimitive.relationPredicate);
         }
     }
-    
+
     @Override
     public void setPrimitives(Collection<? extends OsmPrimitive> primitives) {
         this.relations = getRelations(primitives);
         updateEnabledState();
     }
-    
+
     protected void updateEnabledState() {
         setEnabled(!relations.isEmpty());
     }
diff --git a/src/org/openstreetmap/josm/actions/relation/DownloadSelectedIncompleteMembersAction.java b/src/org/openstreetmap/josm/actions/relation/DownloadSelectedIncompleteMembersAction.java
index edfa691..8898b38 100644
--- a/src/org/openstreetmap/josm/actions/relation/DownloadSelectedIncompleteMembersAction.java
+++ b/src/org/openstreetmap/josm/actions/relation/DownloadSelectedIncompleteMembersAction.java
@@ -23,7 +23,7 @@ import org.openstreetmap.josm.tools.Utils;
  */
 public class DownloadSelectedIncompleteMembersAction extends AbstractRelationAction {
 
-    private Collection<OsmPrimitive> incompleteMembers;
+    private transient Collection<OsmPrimitive> incompleteMembers;
 
     /**
      * Constructs a new <code>DownloadSelectedIncompleteMembersAction</code>.
diff --git a/src/org/openstreetmap/josm/actions/relation/SelectMembersAction.java b/src/org/openstreetmap/josm/actions/relation/SelectMembersAction.java
index de7e3da..5e3d83c 100644
--- a/src/org/openstreetmap/josm/actions/relation/SelectMembersAction.java
+++ b/src/org/openstreetmap/josm/actions/relation/SelectMembersAction.java
@@ -5,6 +5,7 @@ import static org.openstreetmap.josm.tools.I18n.tr;
 
 import java.awt.event.ActionEvent;
 import java.util.HashSet;
+import java.util.Set;
 
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
@@ -16,7 +17,7 @@ import org.openstreetmap.josm.tools.ImageProvider;
  * @since 5793
  */
 public class SelectMembersAction extends AbstractRelationAction {
-    
+
     private final boolean add;
 
     /**
@@ -34,8 +35,8 @@ public class SelectMembersAction extends AbstractRelationAction {
     @Override
     public void actionPerformed(ActionEvent e) {
         if (!isEnabled() || relations.isEmpty() || !Main.isDisplayingMapView()) return;
-        
-        HashSet<OsmPrimitive> members = new HashSet<>();
+
+        Set<OsmPrimitive> members = new HashSet<>();
         for (Relation r: relations) {
             members.addAll(r.getMemberPrimitives());
         }
diff --git a/src/org/openstreetmap/josm/actions/search/SearchAction.java b/src/org/openstreetmap/josm/actions/search/SearchAction.java
index a9e4266..5c782cb 100644
--- a/src/org/openstreetmap/josm/actions/search/SearchAction.java
+++ b/src/org/openstreetmap/josm/actions/search/SearchAction.java
@@ -8,7 +8,6 @@ import static org.openstreetmap.josm.tools.I18n.trc;
 import java.awt.Cursor;
 import java.awt.Dimension;
 import java.awt.FlowLayout;
-import java.awt.Font;
 import java.awt.GridBagLayout;
 import java.awt.event.ActionEvent;
 import java.awt.event.KeyEvent;
@@ -23,6 +22,7 @@ import java.util.LinkedHashSet;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 
 import javax.swing.ButtonGroup;
 import javax.swing.JCheckBox;
@@ -109,7 +109,7 @@ public class SearchAction extends JosmAction implements ParameterizedAction {
         while (searchHistory.size() > maxsize) {
             searchHistory.removeLast();
         }
-        LinkedHashSet<String> savedHistory = new LinkedHashSet<>(searchHistory.size());
+        Set<String> savedHistory = new LinkedHashSet<>(searchHistory.size());
         for (SearchSetting item: searchHistory) {
             savedHistory.add(item.writeToString());
         }
@@ -153,7 +153,7 @@ public class SearchAction extends JosmAction implements ParameterizedAction {
 
     private static class DescriptionTextBuilder {
 
-        StringBuilder s = new StringBuilder(4096);
+        private final StringBuilder s = new StringBuilder(4096);
 
         public StringBuilder append(String string) {
             return s.append(string);
@@ -573,6 +573,9 @@ public class SearchAction extends JosmAction implements ParameterizedAction {
         public boolean regexSearch;
         public boolean allElements;
 
+        /**
+         * Constructs a new {@code SearchSetting}.
+         */
         public SearchSetting() {
             this("", SearchMode.replace, false /* case insensitive */,
                     false /* no regexp */, false /* only useful primitives */);
diff --git a/src/org/openstreetmap/josm/actions/upload/DiscardTagsHook.java b/src/org/openstreetmap/josm/actions/upload/DiscardTagsHook.java
index 16cc2d0..e731142 100644
--- a/src/org/openstreetmap/josm/actions/upload/DiscardTagsHook.java
+++ b/src/org/openstreetmap/josm/actions/upload/DiscardTagsHook.java
@@ -3,11 +3,11 @@ package org.openstreetmap.josm.actions.upload;
 
 import static org.openstreetmap.josm.tools.I18n.tr;
 
-import java.util.AbstractMap;
 import java.util.Collection;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
+import java.util.Map;
 
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.command.ChangePropertyCommand;
@@ -36,7 +36,7 @@ public class DiscardTagsHook implements UploadHook {
         }
 
         if (needsChange) {
-            AbstractMap<String, String> map = new HashMap<>();
+            Map<String, String> map = new HashMap<>();
             for (String key : discardableKeys) {
                 map.put(key, null);
             }
diff --git a/src/org/openstreetmap/josm/actions/upload/FixDataHook.java b/src/org/openstreetmap/josm/actions/upload/FixDataHook.java
index 453ac6c..60fb5e8 100644
--- a/src/org/openstreetmap/josm/actions/upload/FixDataHook.java
+++ b/src/org/openstreetmap/josm/actions/upload/FixDataHook.java
@@ -106,9 +106,9 @@ public class FixDataHook implements UploadHook {
      */
     public static class FixDataKey implements FixData {
         /** key of wrong data */
-        String oldKey;
+        private String oldKey;
         /** key of correct data */
-        String newKey;
+        private String newKey;
 
         /**
          * Setup key check for wrong spelled keys
@@ -140,13 +140,13 @@ public class FixDataHook implements UploadHook {
      */
     public static class FixDataTag implements FixData {
         /** key of wrong data */
-        String oldKey;
+        private String oldKey;
         /** value of wrong data */
-        String oldValue;
+        private String oldValue;
         /** key of correct data */
-        String newKey;
+        private String newKey;
         /** value of correct data */
-        String newValue;
+        private String newValue;
 
         /**
          * Setup key check for wrong spelled keys
@@ -189,7 +189,7 @@ public class FixDataHook implements UploadHook {
         Collection<Command> cmds = new LinkedList<>();
 
         for (OsmPrimitive osm : objectsToUpload) {
-            HashMap<String, String> keys = new HashMap<>(osm.getKeys());
+            Map<String, String> keys = new HashMap<>(osm.getKeys());
             if(!keys.isEmpty()) {
                 boolean modified = false;
                 for (FixData fix : deprecated) {
diff --git a/src/org/openstreetmap/josm/actions/upload/UploadNotesTask.java b/src/org/openstreetmap/josm/actions/upload/UploadNotesTask.java
index 92e3c54..3783edd 100644
--- a/src/org/openstreetmap/josm/actions/upload/UploadNotesTask.java
+++ b/src/org/openstreetmap/josm/actions/upload/UploadNotesTask.java
@@ -41,8 +41,8 @@ public class UploadNotesTask {
     private class UploadTask extends PleaseWaitRunnable {
 
         private boolean isCanceled = false;
-        Map<Note, Note> updatedNotes = new HashMap<>();
-        Map<Note, Exception> failedNotes = new HashMap<>();
+        private Map<Note, Note> updatedNotes = new HashMap<>();
+        private Map<Note, Exception> failedNotes = new HashMap<>();
 
         /**
          * Constructs a new {@code UploadTask}.
diff --git a/src/org/openstreetmap/josm/command/ChangePropertyCommand.java b/src/org/openstreetmap/josm/command/ChangePropertyCommand.java
index 464e576..0efa609 100644
--- a/src/org/openstreetmap/josm/command/ChangePropertyCommand.java
+++ b/src/org/openstreetmap/josm/command/ChangePropertyCommand.java
@@ -5,7 +5,6 @@ import static org.openstreetmap.josm.tools.I18n.marktr;
 import static org.openstreetmap.josm.tools.I18n.tr;
 import static org.openstreetmap.josm.tools.I18n.trn;
 
-import java.util.AbstractMap;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
@@ -39,7 +38,7 @@ public class ChangePropertyCommand extends Command {
      * key. Otherwise, change the tags of all objects to the given value or create keys of
      * those objects that do not have the key yet.
      */
-    private final AbstractMap<String, String> tags;
+    private final Map<String, String> tags;
 
     /**
      * Creates a command to change multiple tags of multiple objects
@@ -47,7 +46,7 @@ public class ChangePropertyCommand extends Command {
      * @param objects the objects to modify
      * @param tags the tags to set
      */
-    public ChangePropertyCommand(Collection<? extends OsmPrimitive> objects, AbstractMap<String, String> tags) {
+    public ChangePropertyCommand(Collection<? extends OsmPrimitive> objects, Map<String, String> tags) {
         this.objects = new LinkedList<>();
         this.tags = tags;
         init(objects);
diff --git a/src/org/openstreetmap/josm/command/Command.java b/src/org/openstreetmap/josm/command/Command.java
index ff4b217..aae9f60 100644
--- a/src/org/openstreetmap/josm/command/Command.java
+++ b/src/org/openstreetmap/josm/command/Command.java
@@ -59,9 +59,9 @@ public abstract class Command extends PseudoCommand {
      */
     public static class OldNodeState {
 
-        final LatLon latlon;
-        final EastNorth eastNorth; // cached EastNorth to be used for applying exact displacement
-        final boolean modified;
+        private final LatLon latlon;
+        private final EastNorth eastNorth; // cached EastNorth to be used for applying exact displacement
+        private final boolean modified;
 
         /**
          * Constructs a new {@code OldNodeState} for the given node.
@@ -72,6 +72,33 @@ public abstract class Command extends PseudoCommand {
             eastNorth = node.getEastNorth();
             modified = node.isModified();
         }
+
+        /**
+         * Returns old lat/lon.
+         * @return old lat/lon
+         * @see Node#getCoor()
+         */
+        public final LatLon getLatlon() {
+            return latlon;
+        }
+
+        /**
+         * Returns old east/north.
+         * @return old east/north
+         * @see Node#getEastNorth()
+         */
+        public final EastNorth getEastNorth() {
+            return eastNorth;
+        }
+
+        /**
+         * Returns old modified state.
+         * @return old modified state
+         * @see Node #isModified()
+         */
+        public final boolean isModified() {
+            return modified;
+        }
     }
 
     /** the map of OsmPrimitives in the original state to OsmPrimitives in cloned state */
@@ -91,9 +118,9 @@ public abstract class Command extends PseudoCommand {
      * Creates a new command in the context of a specific data layer
      *
      * @param layer the data layer. Must not be null.
-     * @throws IllegalArgumentException thrown if layer is null
+     * @throws IllegalArgumentException if layer is null
      */
-    public Command(OsmDataLayer layer) throws IllegalArgumentException {
+    public Command(OsmDataLayer layer) {
         CheckParameterUtil.ensureParameterNotNull(layer, "layer");
         this.layer = layer;
     }
diff --git a/src/org/openstreetmap/josm/command/DeleteCommand.java b/src/org/openstreetmap/josm/command/DeleteCommand.java
index defa3b3..d60e0a0 100644
--- a/src/org/openstreetmap/josm/command/DeleteCommand.java
+++ b/src/org/openstreetmap/josm/command/DeleteCommand.java
@@ -56,9 +56,9 @@ public class DeleteCommand extends Command {
      * Constructor. Deletes a collection of primitives in the current edit layer.
      *
      * @param data the primitives to delete. Must neither be null nor empty.
-     * @throws IllegalArgumentException thrown if data is null or empty
+     * @throws IllegalArgumentException if data is null or empty
      */
-    public DeleteCommand(Collection<? extends OsmPrimitive> data) throws IllegalArgumentException {
+    public DeleteCommand(Collection<? extends OsmPrimitive> data) {
         CheckParameterUtil.ensureParameterNotNull(data, "data");
         if (data.isEmpty())
             throw new IllegalArgumentException(tr("At least one object to delete required, got empty collection"));
@@ -70,9 +70,9 @@ public class DeleteCommand extends Command {
      * Constructor. Deletes a single primitive in the current edit layer.
      *
      * @param data  the primitive to delete. Must not be null.
-     * @throws IllegalArgumentException thrown if data is null
+     * @throws IllegalArgumentException if data is null
      */
-    public DeleteCommand(OsmPrimitive data) throws IllegalArgumentException {
+    public DeleteCommand(OsmPrimitive data) {
         this(Collections.singleton(data));
     }
 
@@ -82,10 +82,10 @@ public class DeleteCommand extends Command {
      *
      * @param layer the layer context for deleting this primitive. Must not be null.
      * @param data the primitive to delete. Must not be null.
-     * @throws IllegalArgumentException thrown if data is null
-     * @throws IllegalArgumentException thrown if layer is null
+     * @throws IllegalArgumentException if data is null
+     * @throws IllegalArgumentException if layer is null
      */
-    public DeleteCommand(OsmDataLayer layer, OsmPrimitive data) throws IllegalArgumentException {
+    public DeleteCommand(OsmDataLayer layer, OsmPrimitive data) {
         this(layer, Collections.singleton(data));
     }
 
@@ -95,10 +95,10 @@ public class DeleteCommand extends Command {
      *
      * @param layer the layer context for deleting these primitives. Must not be null.
      * @param data the primitives to delete. Must neither be null nor empty.
-     * @throws IllegalArgumentException thrown if layer is null
-     * @throws IllegalArgumentException thrown if data is null or empty
+     * @throws IllegalArgumentException if layer is null
+     * @throws IllegalArgumentException if data is null or empty
      */
-    public DeleteCommand(OsmDataLayer layer, Collection<? extends OsmPrimitive> data) throws IllegalArgumentException{
+    public DeleteCommand(OsmDataLayer layer, Collection<? extends OsmPrimitive> data) {
         super(layer);
         CheckParameterUtil.ensureParameterNotNull(data, "data");
         if (data.isEmpty())
@@ -245,9 +245,9 @@ public class DeleteCommand extends Command {
      * @param selection The list of all object to be deleted.
      * @param silent  Set to true if the user should not be bugged with additional dialogs
      * @return command A command to perform the deletions, or null of there is nothing to delete.
-     * @throws IllegalArgumentException thrown if layer is null
+     * @throws IllegalArgumentException if layer is null
      */
-    public static Command deleteWithReferences(OsmDataLayer layer, Collection<? extends OsmPrimitive> selection, boolean silent) throws IllegalArgumentException {
+    public static Command deleteWithReferences(OsmDataLayer layer, Collection<? extends OsmPrimitive> selection, boolean silent) {
         CheckParameterUtil.ensureParameterNotNull(layer, "layer");
         if (selection == null || selection.isEmpty()) return null;
         Set<OsmPrimitive> parents = OsmPrimitive.getReferrer(selection);
@@ -270,7 +270,7 @@ public class DeleteCommand extends Command {
      * @param layer the {@link OsmDataLayer} in whose context primitives are deleted. Must not be null.
      * @param selection The list of all object to be deleted.
      * @return command A command to perform the deletions, or null of there is nothing to delete.
-     * @throws IllegalArgumentException thrown if layer is null
+     * @throws IllegalArgumentException if layer is null
      */
     public static Command deleteWithReferences(OsmDataLayer layer, Collection<? extends OsmPrimitive> selection) {
         return deleteWithReferences(layer, selection, false);
diff --git a/src/org/openstreetmap/josm/command/MoveCommand.java b/src/org/openstreetmap/josm/command/MoveCommand.java
index 4166921..aae3996 100644
--- a/src/org/openstreetmap/josm/command/MoveCommand.java
+++ b/src/org/openstreetmap/josm/command/MoveCommand.java
@@ -170,8 +170,8 @@ public class MoveCommand extends Command {
         Iterator<OldNodeState> it = oldState.iterator();
         for (Node n : nodes) {
             OldNodeState os = it.next();
-            if (os.eastNorth != null) {
-                n.setEastNorth(os.eastNorth.add(x, y));
+            if (os.getEastNorth() != null) {
+                n.setEastNorth(os.getEastNorth().add(x, y));
             }
         }
     }
@@ -196,8 +196,8 @@ public class MoveCommand extends Command {
         Iterator<OldNodeState> it = oldState.iterator();
         for (Node n : nodes) {
             OldNodeState os = it.next();
-            n.setCoor(os.latlon);
-            n.setModified(os.modified);
+            n.setCoor(os.getLatlon());
+            n.setModified(os.isModified());
         }
     }
 
diff --git a/src/org/openstreetmap/josm/command/PurgeCommand.java b/src/org/openstreetmap/josm/command/PurgeCommand.java
index 106d161..7a2ba4d 100644
--- a/src/org/openstreetmap/josm/command/PurgeCommand.java
+++ b/src/org/openstreetmap/josm/command/PurgeCommand.java
@@ -200,7 +200,7 @@ public class PurgeCommand extends Command {
         Set<Relation> childlessR = new HashSet<>();
         List<Relation> outR = new ArrayList<>(inR.size());
 
-        HashMap<Relation, Integer> numChilds = new HashMap<>();
+        Map<Relation, Integer> numChilds = new HashMap<>();
 
         // calculate initial number of childs
         for (Relation r : inR) {
diff --git a/src/org/openstreetmap/josm/command/RotateCommand.java b/src/org/openstreetmap/josm/command/RotateCommand.java
index 0fcf06a..e66c8ec 100644
--- a/src/org/openstreetmap/josm/command/RotateCommand.java
+++ b/src/org/openstreetmap/josm/command/RotateCommand.java
@@ -75,7 +75,7 @@ public class RotateCommand extends TransformNodesCommand {
         for (Node n : nodes) {
             double cosPhi = Math.cos(rotationAngle);
             double sinPhi = Math.sin(rotationAngle);
-            EastNorth oldEastNorth = oldStates.get(n).eastNorth;
+            EastNorth oldEastNorth = oldStates.get(n).getEastNorth();
             double x = oldEastNorth.east() - pivot.east();
             double y = oldEastNorth.north() - pivot.north();
             double nx =  cosPhi * x + sinPhi * y + pivot.east();
diff --git a/src/org/openstreetmap/josm/command/ScaleCommand.java b/src/org/openstreetmap/josm/command/ScaleCommand.java
index a11363c..601cd65 100644
--- a/src/org/openstreetmap/josm/command/ScaleCommand.java
+++ b/src/org/openstreetmap/josm/command/ScaleCommand.java
@@ -25,9 +25,8 @@ public class ScaleCommand extends TransformNodesCommand {
 
     /**
      * World position of the mouse when the user started the command.
-     *
      */
-    EastNorth startEN = null;
+    private EastNorth startEN = null;
 
     /**
      * Creates a ScaleCommand.
@@ -68,7 +67,7 @@ public class ScaleCommand extends TransformNodesCommand {
     @Override
     protected void transformNodes() {
         for (Node n : nodes) {
-            EastNorth oldEastNorth = oldStates.get(n).eastNorth;
+            EastNorth oldEastNorth = oldStates.get(n).getEastNorth();
             double dx = oldEastNorth.east() - pivot.east();
             double dy = oldEastNorth.north() - pivot.north();
             double nx = pivot.east() + scalingFactor * dx;
diff --git a/src/org/openstreetmap/josm/command/TransformNodesCommand.java b/src/org/openstreetmap/josm/command/TransformNodesCommand.java
index 0053c1d..45b0d2b 100644
--- a/src/org/openstreetmap/josm/command/TransformNodesCommand.java
+++ b/src/org/openstreetmap/josm/command/TransformNodesCommand.java
@@ -93,8 +93,8 @@ public abstract class TransformNodesCommand extends Command {
     public void undoCommand() {
         for (Node n : nodes) {
             OldNodeState os = oldStates.get(n);
-            n.setCoor(os.latlon);
-            n.setModified(os.modified);
+            n.setCoor(os.getLatlon());
+            n.setModified(os.isModified());
         }
     }
 
diff --git a/src/org/openstreetmap/josm/corrector/CorrectionTableModel.java b/src/org/openstreetmap/josm/corrector/CorrectionTableModel.java
index c190ee9..fe2cc58 100644
--- a/src/org/openstreetmap/josm/corrector/CorrectionTableModel.java
+++ b/src/org/openstreetmap/josm/corrector/CorrectionTableModel.java
@@ -10,7 +10,7 @@ import javax.swing.table.AbstractTableModel;
 
 public abstract class CorrectionTableModel<C extends Correction> extends AbstractTableModel {
 
-    private List<C> corrections;
+    private transient List<C> corrections;
     private boolean[] apply;
     private int applyColumn;
 
diff --git a/src/org/openstreetmap/josm/data/APIDataSet.java b/src/org/openstreetmap/josm/data/APIDataSet.java
index 1958e69..02b777b 100644
--- a/src/org/openstreetmap/josm/data/APIDataSet.java
+++ b/src/org/openstreetmap/josm/data/APIDataSet.java
@@ -184,7 +184,7 @@ public class APIDataSet {
      * @return all primitives
      */
     public List<OsmPrimitive> getPrimitives() {
-        LinkedList<OsmPrimitive> ret = new LinkedList<>();
+        List<OsmPrimitive> ret = new LinkedList<>();
         ret.addAll(toAdd);
         ret.addAll(toUpdate);
         ret.addAll(toDelete);
@@ -214,10 +214,10 @@ public class APIDataSet {
      * This method detects cyclic dependencies in new relation. Relations with cyclic
      * dependencies can't be uploaded.
      *
-     * @throws CyclicUploadDependencyException thrown, if a cyclic dependency is detected
+     * @throws CyclicUploadDependencyException if a cyclic dependency is detected
      */
     public void adjustRelationUploadOrder() throws CyclicUploadDependencyException{
-        LinkedList<OsmPrimitive> newToAdd = new LinkedList<>();
+        List<OsmPrimitive> newToAdd = new LinkedList<>();
         newToAdd.addAll(Utils.filteredCollection(toAdd, Node.class));
         newToAdd.addAll(Utils.filteredCollection(toAdd, Way.class));
 
@@ -230,7 +230,7 @@ public class APIDataSet {
         newToAdd.addAll(graph.computeUploadOrder());
         toAdd = newToAdd;
 
-        LinkedList<OsmPrimitive> newToDelete = new LinkedList<>();
+        List<OsmPrimitive> newToDelete = new LinkedList<>();
         graph = new RelationUploadDependencyGraph(Utils.filteredCollection(toDelete, Relation.class), false);
         newToDelete.addAll(graph.computeUploadOrder());
         newToDelete.addAll(Utils.filteredCollection(toDelete, Way.class));
diff --git a/src/org/openstreetmap/josm/data/AutosaveTask.java b/src/org/openstreetmap/josm/data/AutosaveTask.java
index a45c3ea..3bab840 100644
--- a/src/org/openstreetmap/josm/data/AutosaveTask.java
+++ b/src/org/openstreetmap/josm/data/AutosaveTask.java
@@ -71,10 +71,10 @@ public class AutosaveTask extends TimerTask implements LayerChangeListener, List
     public static final BooleanProperty PROP_NOTIFICATION = new BooleanProperty("autosave.notification", false);
 
     private static class AutosaveLayerInfo {
-        OsmDataLayer layer;
-        String layerName;
-        String layerFileName;
-        final Deque<File> backupFiles = new LinkedList<>();
+        private OsmDataLayer layer;
+        private String layerName;
+        private String layerFileName;
+        private final Deque<File> backupFiles = new LinkedList<>();
     }
 
     private final DataSetListenerAdapter datasetAdapter = new DataSetListenerAdapter(this);
@@ -99,8 +99,11 @@ public class AutosaveTask extends TimerTask implements LayerChangeListener, List
                 return;
             }
 
-            for (File f: deletedLayersDir.listFiles()) {
-                deletedLayers.add(f); // FIXME: sort by mtime
+            File[] files = deletedLayersDir.listFiles();
+            if (files != null) {
+                for (File f: files) {
+                    deletedLayers.add(f); // FIXME: sort by mtime
+                }
             }
 
             timer = new Timer(true);
diff --git a/src/org/openstreetmap/josm/data/Bounds.java b/src/org/openstreetmap/josm/data/Bounds.java
index 36e17e2..209e08d 100644
--- a/src/org/openstreetmap/josm/data/Bounds.java
+++ b/src/org/openstreetmap/josm/data/Bounds.java
@@ -163,15 +163,15 @@ public class Bounds {
         }
     }
 
-    public Bounds(String asString, String separator) throws IllegalArgumentException {
+    public Bounds(String asString, String separator) {
         this(asString, separator, ParseMethod.MINLAT_MINLON_MAXLAT_MAXLON);
     }
 
-    public Bounds(String asString, String separator, ParseMethod parseMethod) throws IllegalArgumentException {
+    public Bounds(String asString, String separator, ParseMethod parseMethod) {
         this(asString, separator, parseMethod, true);
     }
 
-    public Bounds(String asString, String separator, ParseMethod parseMethod, boolean roundToOsmPrecision) throws IllegalArgumentException {
+    public Bounds(String asString, String separator, ParseMethod parseMethod, boolean roundToOsmPrecision) {
         CheckParameterUtil.ensureParameterNotNull(asString, "asString");
         String[] components = asString.split(separator);
         if (components.length != 4)
@@ -233,9 +233,9 @@ public class Bounds {
      * @param center  the center coordinate pair. Must not be null.
      * @param latExtent the latitude extent. > 0 required.
      * @param lonExtent the longitude extent. > 0 required.
-     * @throws IllegalArgumentException thrown if center is null
-     * @throws IllegalArgumentException thrown if latExtent <= 0
-     * @throws IllegalArgumentException thrown if lonExtent <= 0
+     * @throws IllegalArgumentException if center is null
+     * @throws IllegalArgumentException if latExtent <= 0
+     * @throws IllegalArgumentException if lonExtent <= 0
      */
     public Bounds(LatLon center, double latExtent, double lonExtent) {
         CheckParameterUtil.ensureParameterNotNull(center, "center");
diff --git a/src/org/openstreetmap/josm/data/CustomConfigurator.java b/src/org/openstreetmap/josm/data/CustomConfigurator.java
index ea3fc24..eb76773 100644
--- a/src/org/openstreetmap/josm/data/CustomConfigurator.java
+++ b/src/org/openstreetmap/josm/data/CustomConfigurator.java
@@ -20,6 +20,7 @@ import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 import java.util.Map.Entry;
+import java.util.Set;
 import java.util.SortedMap;
 import java.util.TreeMap;
 import java.util.regex.Matcher;
@@ -201,7 +202,7 @@ public final class CustomConfigurator {
      * @param keys - which preferences keys you need to export ("imagery.entries", for example)
      */
     public static void exportPreferencesKeysToFile(String filename, boolean append, String... keys) {
-        HashSet<String> keySet = new HashSet<>();
+        Set<String> keySet = new HashSet<>();
         Collections.addAll(keySet, keys);
         exportPreferencesKeysToFile(filename, append, keySet);
     }
@@ -302,14 +303,17 @@ public final class CustomConfigurator {
 
     public static void deleteFileOrDirectory(File f) {
         if (f.isDirectory()) {
-            for (File f1: f.listFiles()) {
-                deleteFileOrDirectory(f1);
+            File[] files = f.listFiles();
+            if (files != null) {
+                for (File f1: files) {
+                    deleteFileOrDirectory(f1);
+                }
             }
         }
         try {
             f.delete();
         } catch (Exception e) {
-            log("Warning: Can not delete file "+f.getPath());
+            log("Warning: Can not delete file "+f.getPath()+": "+e.getMessage());
         }
     }
 
@@ -414,13 +418,12 @@ public final class CustomConfigurator {
 
     public static class XMLCommandProcessor {
 
-        Preferences mainPrefs;
-        Map<String,Element> tasksMap = new HashMap<>();
+        private Preferences mainPrefs;
+        private Map<String,Element> tasksMap = new HashMap<>();
 
         private boolean lastV; // last If condition result
 
-
-        ScriptEngine engine ;
+        private ScriptEngine engine;
 
         public void openAndReadXML(File file) {
             log("-- Reading custom preferences from " + file.getAbsolutePath() + " --");
diff --git a/src/org/openstreetmap/josm/data/Preferences.java b/src/org/openstreetmap/josm/data/Preferences.java
index 4a05cc7..a686728 100644
--- a/src/org/openstreetmap/josm/data/Preferences.java
+++ b/src/org/openstreetmap/josm/data/Preferences.java
@@ -534,20 +534,6 @@ public class Preferences {
     }
 
     /**
-     * Returns the location of the user defined preferences directory
-     * @return The location of the user defined preferences directory
-     * @deprecated use #getPreferencesDirectory() to access preferences directory
-     * or #getUserDataDirectory to access user data directory
-     */
-    @Deprecated
-    public String getPreferencesDir() {
-        final String path = getPreferencesDirectory().getPath();
-        if (path.endsWith(File.separator))
-            return path;
-        return path + File.separator;
-    }
-
-    /**
      * Returns the user defined preferences directory, containing the preferences.xml file
      * @return The user defined preferences directory, containing the preferences.xml file
      * @since 7834
@@ -1372,9 +1358,11 @@ public class Preferences {
      *
      */
     public void updateSystemProperties() {
-        if(getBoolean("prefer.ipv6", false)) {
+        if("true".equals(get("prefer.ipv6", "auto"))) {
             // never set this to false, only true!
-            Utils.updateSystemProperty("java.net.preferIPv6Addresses", "true");
+            if(!"true".equals(Utils.updateSystemProperty("java.net.preferIPv6Addresses", "true"))) {
+                Main.info(tr("Try enabling IPv6 network, prefering IPv6 over IPv4 (only works on early startup)."));
+            }
         }
         Utils.updateSystemProperty("http.agent", Version.getInstance().getAgentString());
         Utils.updateSystemProperty("user.language", get("language"));
@@ -1692,7 +1680,7 @@ public class Preferences {
                              if ("url".equals(mkey) && val.contains("josm.openstreetmap.de/josmfile") && !val.contains("zip=1")) {
                                  val += "&zip=1";
                                  modified = true;
-                                 
+
                              }
                              newmap.put(mkey, val);
                          }
@@ -1706,7 +1694,10 @@ public class Preferences {
         }
 
         String[] obsolete = {
-                "osm.notes.enableDownload" // was used prior to r8071 when notes was an hidden feature. To remove end of 2015
+                "remote.control.host", // replaced by individual values for IPv4 and IPv6. To remove end of 2015
+                "osm.notes.enableDownload", // was used prior to r8071 when notes was an hidden feature. To remove end of 2015
+                "mappaint.style.migration.switchedToMapCSS", // was used prior to 8315 for MapCSS switch. To remove end of 2015
+                "mappaint.style.migration.changedXmlName" // was used prior to 8315 for MapCSS switch. To remove end of 2015
         };
         for (String key : obsolete) {
             if (settingsMap.containsKey(key)) {
diff --git a/src/org/openstreetmap/josm/data/cache/CacheEntryAttributes.java b/src/org/openstreetmap/josm/data/cache/CacheEntryAttributes.java
index 94e7b1b..673f3d9 100644
--- a/src/org/openstreetmap/josm/data/cache/CacheEntryAttributes.java
+++ b/src/org/openstreetmap/josm/data/cache/CacheEntryAttributes.java
@@ -8,18 +8,21 @@ import org.apache.commons.jcs.engine.ElementAttributes;
 
 /**
  * Class that contains attirubtes for JCS cache entries. Parameters are used to properly handle HTTP caching
- * 
- * @author Wiktor Niesiobędzki
  *
+ * @author Wiktor Niesiobędzki
+ * @since 8168
  */
 public class CacheEntryAttributes extends ElementAttributes {
     private static final long serialVersionUID = 1L; //version
-    private Map<String, String> attrs = new HashMap<String, String>();
-    private final static String NO_TILE_AT_ZOOM = "noTileAtZoom";
-    private final static String ETAG = "Etag";
-    private final static String LAST_MODIFICATION = "lastModification";
-    private final static String EXPIRATION_TIME = "expirationTime";
+    private final Map<String, String> attrs = new HashMap<String, String>();
+    private static final String NO_TILE_AT_ZOOM = "noTileAtZoom";
+    private static final String ETAG = "Etag";
+    private static final String LAST_MODIFICATION = "lastModification";
+    private static final String EXPIRATION_TIME = "expirationTime";
 
+    /**
+     * Constructs a new {@code CacheEntryAttributes}.
+     */
     public CacheEntryAttributes() {
         super();
         attrs.put(NO_TILE_AT_ZOOM, "false");
diff --git a/src/org/openstreetmap/josm/data/cache/JCSCacheManager.java b/src/org/openstreetmap/josm/data/cache/JCSCacheManager.java
index 8f3f70d..234b128 100644
--- a/src/org/openstreetmap/josm/data/cache/JCSCacheManager.java
+++ b/src/org/openstreetmap/josm/data/cache/JCSCacheManager.java
@@ -26,21 +26,20 @@ import org.openstreetmap.gui.jmapviewer.FeatureAdapter;
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.data.preferences.IntegerProperty;
 
-
 /**
  * @author Wiktor Niesiobędzki
  *
  * Wrapper class for JCS Cache. Sets some sane environment and returns instances of cache objects.
  * Static configuration for now assumes some small LRU cache in memory and larger LRU cache on disk
- *
+ * @since 8168
  */
 public class JCSCacheManager {
     private static final Logger log = FeatureAdapter.getLogger(JCSCacheManager.class.getCanonicalName());
 
     private static volatile CompositeCacheManager cacheManager = null;
     private static long maxObjectTTL        = Long.MAX_VALUE;
-    private final static String PREFERENCE_PREFIX = "jcs.cache";
-    private final static IndexedDiskCacheFactory diskCacheFactory = new IndexedDiskCacheFactory();
+    private static final String PREFERENCE_PREFIX = "jcs.cache";
+    private static final IndexedDiskCacheFactory diskCacheFactory = new IndexedDiskCacheFactory();
     private static FileLock cacheDirLock = null;
 
     /**
@@ -91,7 +90,7 @@ public class JCSCacheManager {
             }
 
             @Override
-            public void close() throws SecurityException {
+            public void close() {
             }
         });
 
diff --git a/src/org/openstreetmap/josm/data/cache/JCSCachedTileLoaderJob.java b/src/org/openstreetmap/josm/data/cache/JCSCachedTileLoaderJob.java
index 478004b..b4a0fbd 100644
--- a/src/org/openstreetmap/josm/data/cache/JCSCachedTileLoaderJob.java
+++ b/src/org/openstreetmap/josm/data/cache/JCSCachedTileLoaderJob.java
@@ -6,7 +6,6 @@ import java.io.FileNotFoundException;
 import java.io.IOException;
 import java.io.InputStream;
 import java.net.HttpURLConnection;
-import java.net.MalformedURLException;
 import java.net.URL;
 import java.net.URLConnection;
 import java.util.HashSet;
@@ -26,6 +25,7 @@ import java.util.logging.Logger;
 import org.apache.commons.jcs.access.behavior.ICacheAccess;
 import org.apache.commons.jcs.engine.behavior.ICacheElement;
 import org.openstreetmap.gui.jmapviewer.FeatureAdapter;
+import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.data.cache.ICachedLoaderListener.LoadResult;
 import org.openstreetmap.josm.data.preferences.IntegerProperty;
 
@@ -43,6 +43,8 @@ import org.openstreetmap.josm.data.preferences.IntegerProperty;
  *
  * This class will keep only one Job running for specified tile. All others will just finish, but
  * listeners will be gathered and notified, once download job will be finished
+ *
+ * @since 8168
  */
 public abstract class JCSCachedTileLoaderJob<K, V extends CacheEntry> implements ICachedLoaderJob<K>, Runnable {
     private static final Logger log = FeatureAdapter.getLogger(JCSCachedTileLoaderJob.class.getCanonicalName());
@@ -56,27 +58,46 @@ public abstract class JCSCachedTileLoaderJob<K, V extends CacheEntry> implements
     /**
      * maximum download threads that will be started
      */
-    public static IntegerProperty THREAD_LIMIT = new IntegerProperty("cache.jcs.max_threads", 10);
+    public static final IntegerProperty THREAD_LIMIT = new IntegerProperty("cache.jcs.max_threads", 10);
+
+    public static class LIFOQueue extends LinkedBlockingDeque<Runnable> {
+        public LIFOQueue(int capacity) {
+            super(capacity);
+        }
+
+        @Override
+        public boolean offer(Runnable t) {
+            return super.offerFirst(t);
+        }
+
+        @Override
+        public Runnable remove() {
+            return super.removeFirst();
+        }
+    }
+
+
+    /*
+     * ThreadPoolExecutor starts new threads, until THREAD_LIMIT is reached. Then it puts tasks into LIFOQueue, which is fairly
+     * small, but we do not want a lot of outstanding tasks queued, but rather prefer the class consumer to resubmit the task, which are
+     * important right now.
+     *
+     * This way, if some task gets outdated (for example - user paned the map, and we do not want to download this tile any more),
+     * the task will not be resubmitted, and thus - never queued.
+     *
+     * There is no point in canceling tasks, that are already taken by worker threads (if we made so much effort, we can at least cache
+     * the response, so later it could be used). We could actually cancel what is in LIFOQueue, but this is a tradeoff between simplicity
+     * and performance (we do want to have something to offer to worker threads before tasks will be resubmitted by class consumer)
+     */
     private static Executor DOWNLOAD_JOB_DISPATCHER = new ThreadPoolExecutor(
             2, // we have a small queue, so threads will be quickly started (threads are started only, when queue is full)
             THREAD_LIMIT.get().intValue(), // do not this number of threads
             30, // keepalive for thread
             TimeUnit.SECONDS,
             // make queue of LIFO type - so recently requested tiles will be loaded first (assuming that these are which user is waiting to see)
-            new LinkedBlockingDeque<Runnable>(5) {
-                /* keep the queue size fairly small, we do not want to
-                 download a lot of tiles, that user is not seeing anyway */
-                @Override
-                public boolean offer(Runnable t) {
-                    return super.offerFirst(t);
-                }
-
-                @Override
-                public Runnable remove() {
-                    return super.removeFirst();
-                }
-            }
+            new LIFOQueue(5)
             );
+
     private static ConcurrentMap<String,Set<ICachedLoaderListener>> inProgress = new ConcurrentHashMap<>();
     private static ConcurrentMap<String, Boolean> useHead = new ConcurrentHashMap<>();
 
@@ -157,8 +178,13 @@ public abstract class JCSCachedTileLoaderJob<K, V extends CacheEntry> implements
             }
             // object not in cache, so submit work to separate thread
             try {
-                // use getter method, so subclasses may override executors, to get separate thread pool
-                getDownloadExecutor().execute(JCSCachedTileLoaderJob.this);
+                if (executionGuard()) {
+                    // use getter method, so subclasses may override executors, to get separate thread pool
+                    getDownloadExecutor().execute(this);
+                } else {
+                    log.log(Level.FINE, "JCS - guard rejected job for: {0}", getCacheKey());
+                    finishLoading(LoadResult.REJECTED);
+                }
             } catch (RejectedExecutionException e) {
                 // queue was full, try again later
                 log.log(Level.FINE, "JCS - rejected job for: {0}", getCacheKey());
@@ -168,6 +194,23 @@ public abstract class JCSCachedTileLoaderJob<K, V extends CacheEntry> implements
     }
 
     /**
+     * Guard method for execution. If guard returns true, the execution of download task will commence
+     * otherwise, execution will finish with result LoadResult.REJECTED
+     *
+     * It is responsibility of the overriding class, to handle properly situation in finishLoading class
+     * @return
+     */
+    protected boolean executionGuard() {
+        return true;
+    }
+
+    /**
+     * This method is run when job has finished
+     */
+    protected void executionFinished() {
+    }
+
+    /**
      *
      * @return checks if object from cache has sufficient data to be returned
      */
@@ -219,6 +262,7 @@ public abstract class JCSCachedTileLoaderJob<K, V extends CacheEntry> implements
                 }
             }
         } finally {
+            executionFinished();
             currentThread.setName(oldName);
         }
     }
@@ -239,7 +283,7 @@ public abstract class JCSCachedTileLoaderJob<K, V extends CacheEntry> implements
             }
         } catch (Exception e) {
             log.log(Level.WARNING, "JCS - Error while loading object from cache: {0}; {1}", new Object[]{e.getMessage(), getUrl()});
-            log.log(Level.FINE, "Stacktrace", e);
+            Main.warn(e);
             for (ICachedLoaderListener l: listeners) {
                 l.loadingFinished(cacheData, LoadResult.FAILURE);
             }
@@ -338,7 +382,8 @@ public abstract class JCSCachedTileLoaderJob<K, V extends CacheEntry> implements
             cache.put(getCacheKey(), createCacheEntry(new byte[]{}), attributes);
             return handleNotFound();
         } catch (Exception e) {
-            log.log(Level.WARNING, "JCS - Exception during download " + getUrl(), e);
+            log.log(Level.WARNING, "JCS - Exception during download {0}",  getUrl());
+            Main.warn(e);
         }
         log.log(Level.WARNING, "JCS - Silent failure during download: {0}", getUrl());
         return false;
@@ -377,7 +422,7 @@ public abstract class JCSCachedTileLoaderJob<K, V extends CacheEntry> implements
         return ret;
     }
 
-    private HttpURLConnection getURLConnection() throws IOException, MalformedURLException {
+    private HttpURLConnection getURLConnection() throws IOException {
         HttpURLConnection urlConn = (HttpURLConnection) getUrl().openConnection();
         urlConn.setRequestProperty("Accept", "text/html, image/png, image/jpeg, image/gif, */*");
         urlConn.setReadTimeout(readTimeout); // 30 seconds read timeout
diff --git a/src/org/openstreetmap/josm/data/conflict/ConflictCollection.java b/src/org/openstreetmap/josm/data/conflict/ConflictCollection.java
index e549b65..e8a97c9 100644
--- a/src/org/openstreetmap/josm/data/conflict/ConflictCollection.java
+++ b/src/org/openstreetmap/josm/data/conflict/ConflictCollection.java
@@ -101,10 +101,9 @@ public class ConflictCollection implements Iterable<Conflict<? extends OsmPrimit
      * Adds a conflict to the collection
      *
      * @param conflict the conflict
-     * @exception IllegalStateException thrown, if this collection already includes a
-     * conflict for conflict.getMy()
+     * @throws IllegalStateException if this collection already includes a conflict for conflict.getMy()
      */
-    protected void addConflict(Conflict<?> conflict) throws IllegalStateException {
+    protected void addConflict(Conflict<?> conflict) {
         if (hasConflictForMy(conflict.getMy()))
             throw new IllegalStateException(tr("Already registered a conflict for primitive ''{0}''.", conflict.getMy().toString()));
         if (!conflicts.contains(conflict)) {
@@ -116,11 +115,10 @@ public class ConflictCollection implements Iterable<Conflict<? extends OsmPrimit
      * Adds a conflict to the collection of conflicts.
      *
      * @param conflict the conflict to add. Must not be null.
-     * @throws IllegalArgumentException thrown, if conflict is null
-     * @throws IllegalStateException thrown if this collection already includes a conflict for conflict.getMy()
-     *
+     * @throws IllegalArgumentException if conflict is null
+     * @throws IllegalStateException if this collection already includes a conflict for conflict.getMy()
      */
-    public void add(Conflict<?> conflict) throws IllegalStateException {
+    public void add(Conflict<?> conflict) {
         CheckParameterUtil.ensureParameterNotNull(conflict, "conflict");
         addConflict(conflict);
         fireConflictAdded();
@@ -321,12 +319,13 @@ public class ConflictCollection implements Iterable<Conflict<? extends OsmPrimit
      * of "my" in the conflicts managed by this collection.
      */
     public Set<OsmPrimitive> getMyConflictParties() {
-        HashSet<OsmPrimitive> ret = new HashSet<>();
+        Set<OsmPrimitive> ret = new HashSet<>();
         for (Conflict<?> c: conflicts) {
             ret.add(c.getMy());
         }
         return ret;
     }
+
     /**
      * Replies the set of  {@link OsmPrimitive} which participate in the role
      * of "their" in the conflicts managed by this collection.
@@ -335,7 +334,7 @@ public class ConflictCollection implements Iterable<Conflict<? extends OsmPrimit
      * of "their" in the conflicts managed by this collection.
      */
     public Set<OsmPrimitive> getTheirConflictParties() {
-        HashSet<OsmPrimitive> ret = new HashSet<>();
+        Set<OsmPrimitive> ret = new HashSet<>();
         for (Conflict<?> c: conflicts) {
             ret.add(c.getTheir());
         }
diff --git a/src/org/openstreetmap/josm/data/coor/CachedLatLon.java b/src/org/openstreetmap/josm/data/coor/CachedLatLon.java
index efe07c7..4f318f9 100644
--- a/src/org/openstreetmap/josm/data/coor/CachedLatLon.java
+++ b/src/org/openstreetmap/josm/data/coor/CachedLatLon.java
@@ -15,7 +15,7 @@ import org.openstreetmap.josm.data.projection.Projection;
  */
 public class CachedLatLon extends LatLon {
     private EastNorth eastNorth;
-    private Projection proj;
+    private transient Projection proj;
 
     public CachedLatLon(double lat, double lon) {
         super(lat, lon);
diff --git a/src/org/openstreetmap/josm/data/coor/EastNorth.java b/src/org/openstreetmap/josm/data/coor/EastNorth.java
index 8d9267c..fad7c92 100644
--- a/src/org/openstreetmap/josm/data/coor/EastNorth.java
+++ b/src/org/openstreetmap/josm/data/coor/EastNorth.java
@@ -10,6 +10,8 @@ package org.openstreetmap.josm.data.coor;
  */
 public class EastNorth extends Coordinate {
 
+    private static final long serialVersionUID = 1L;
+
     public EastNorth(double east, double north) {
         super(east,north);
     }
diff --git a/src/org/openstreetmap/josm/data/coor/LatLon.java b/src/org/openstreetmap/josm/data/coor/LatLon.java
index e5c8ca4..7a0aeb0 100644
--- a/src/org/openstreetmap/josm/data/coor/LatLon.java
+++ b/src/org/openstreetmap/josm/data/coor/LatLon.java
@@ -37,6 +37,8 @@ import org.openstreetmap.josm.tools.Utils;
  */
 public class LatLon extends Coordinate {
 
+    private static final long serialVersionUID = 1L;
+
     /**
      * Minimum difference in location to not be represented as the same position.
      * The API returns 7 decimals.
diff --git a/src/org/openstreetmap/josm/data/gpx/Extensions.java b/src/org/openstreetmap/josm/data/gpx/Extensions.java
index 1b8023b..619d6a7 100644
--- a/src/org/openstreetmap/josm/data/gpx/Extensions.java
+++ b/src/org/openstreetmap/josm/data/gpx/Extensions.java
@@ -9,6 +9,8 @@ import java.util.Map;
  */
 public class Extensions extends LinkedHashMap<String, String> {
 
+    private static final long serialVersionUID = 1L;
+
     public Extensions(Map<? extends String, ? extends String> m) {
         super(m);
     }
diff --git a/src/org/openstreetmap/josm/data/imagery/OffsetBookmark.java b/src/org/openstreetmap/josm/data/imagery/OffsetBookmark.java
index 7f58fa0..614b343 100644
--- a/src/org/openstreetmap/josm/data/imagery/OffsetBookmark.java
+++ b/src/org/openstreetmap/josm/data/imagery/OffsetBookmark.java
@@ -85,7 +85,7 @@ public class OffsetBookmark {
     }
 
     public static void saveBookmarks() {
-        LinkedList<Collection<String>> coll = new LinkedList<>();
+        List<Collection<String>> coll = new LinkedList<>();
         for (OffsetBookmark b : allBookmarks) {
             coll.add(b.getInfoArray());
         }
diff --git a/src/org/openstreetmap/josm/data/imagery/Shape.java b/src/org/openstreetmap/josm/data/imagery/Shape.java
index 8de9058..1e3f267 100644
--- a/src/org/openstreetmap/josm/data/imagery/Shape.java
+++ b/src/org/openstreetmap/josm/data/imagery/Shape.java
@@ -22,7 +22,7 @@ public class Shape {
 
     private List<Coordinate> coords = new ArrayList<>();
 
-    public Shape(String asString, String separator) throws IllegalArgumentException {
+    public Shape(String asString, String separator) {
         CheckParameterUtil.ensureParameterNotNull(asString, "asString");
         String[] components = asString.split(separator);
         if (components.length % 2 != 0)
@@ -60,7 +60,7 @@ public class Shape {
         return Geometry.nodeInsidePolygon(new Node(latlon), nodes);
     }
 
-    public void addPoint(String sLat, String sLon) throws IllegalArgumentException {
+    public void addPoint(String sLat, String sLon) {
         CheckParameterUtil.ensureParameterNotNull(sLat, "sLat");
         CheckParameterUtil.ensureParameterNotNull(sLon, "sLon");
 
diff --git a/src/org/openstreetmap/josm/data/imagery/TMSCachedTileLoader.java b/src/org/openstreetmap/josm/data/imagery/TMSCachedTileLoader.java
index 6b612e9..3fd09b4 100644
--- a/src/org/openstreetmap/josm/data/imagery/TMSCachedTileLoader.java
+++ b/src/org/openstreetmap/josm/data/imagery/TMSCachedTileLoader.java
@@ -31,7 +31,7 @@ public class TMSCachedTileLoader implements TileLoader, CachedTileLoader, TileCa
     private TileLoaderListener listener;
     public static final String PREFERENCE_PREFIX   = "imagery.tms.cache.";
     // average tile size is about 20kb
-    public static IntegerProperty MAX_OBJECTS_ON_DISK = new IntegerProperty(PREFERENCE_PREFIX + "max_objects_disk", 25000); // 25000 is around 500MB under this assumptions
+    public static final IntegerProperty MAX_OBJECTS_ON_DISK = new IntegerProperty(PREFERENCE_PREFIX + "max_objects_disk", 25000); // 25000 is around 500MB under this assumptions
 
 
     /**
@@ -46,7 +46,7 @@ public class TMSCachedTileLoader implements TileLoader, CachedTileLoader, TileCa
      */
     public TMSCachedTileLoader(TileLoaderListener listener, String name, int connectTimeout, int readTimeout, Map<String, String> headers, String cacheDir) throws IOException {
         this.cache = JCSCacheManager.getCache(name,
-                1000, // use JCS memory cache instead of MemoryTileCache
+                200, // use fairly small memory cache, as cached objects are quite big, as they contain BufferedImages
                 MAX_OBJECTS_ON_DISK.get(),
                 cacheDir);
         this.connectTimeout = connectTimeout;
diff --git a/src/org/openstreetmap/josm/data/imagery/TMSCachedTileLoaderJob.java b/src/org/openstreetmap/josm/data/imagery/TMSCachedTileLoaderJob.java
index 44e8467..a627c90 100644
--- a/src/org/openstreetmap/josm/data/imagery/TMSCachedTileLoaderJob.java
+++ b/src/org/openstreetmap/josm/data/imagery/TMSCachedTileLoaderJob.java
@@ -4,9 +4,13 @@ package org.openstreetmap.josm.data.imagery;
 import java.io.ByteArrayInputStream;
 import java.io.IOException;
 import java.net.URL;
+import java.util.HashSet;
 import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
 import java.util.concurrent.Executor;
-import java.util.concurrent.LinkedBlockingDeque;
+import java.util.concurrent.Semaphore;
 import java.util.concurrent.ThreadPoolExecutor;
 import java.util.concurrent.TimeUnit;
 import java.util.logging.Level;
@@ -19,6 +23,7 @@ import org.openstreetmap.gui.jmapviewer.interfaces.TileJob;
 import org.openstreetmap.gui.jmapviewer.interfaces.TileLoaderListener;
 import org.openstreetmap.gui.jmapviewer.interfaces.TileSource;
 import org.openstreetmap.gui.jmapviewer.tilesources.AbstractTMSTileSource;
+import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.data.cache.BufferedImageCacheEntry;
 import org.openstreetmap.josm.data.cache.CacheEntry;
 import org.openstreetmap.josm.data.cache.ICachedLoaderListener;
@@ -29,42 +34,96 @@ import org.openstreetmap.josm.data.preferences.IntegerProperty;
  * @author Wiktor Niesiobędzki
  *
  * Class bridging TMS requests to JCS cache requests
- *
+ * @since 8168
  */
 public class TMSCachedTileLoaderJob extends JCSCachedTileLoaderJob<String, BufferedImageCacheEntry> implements TileJob, ICachedLoaderListener  {
     private static final Logger log = FeatureAdapter.getLogger(TMSCachedTileLoaderJob.class.getCanonicalName());
     private Tile tile;
-    private TileLoaderListener listener;
     private volatile URL url;
 
+    // we need another deduplication of Tile Loader listeners, as for each submit, new TMSCachedTileLoaderJob was created
+    // that way, we reduce calls to tileLoadingFinished, and general CPU load due to surplus Map repaints
+    private static final ConcurrentMap<String,Set<TileLoaderListener>> inProgress = new ConcurrentHashMap<>();
+
+    /**
+     * Limit definition for per host concurrent connections
+     */
+    public static final IntegerProperty HOST_LIMIT = new IntegerProperty("imagery.tms.tmsloader.maxjobsperhost", 6);
+
+     /*
+     * Host limit guards the area - between submission to the queue up to loading is finished. It uses executionGuard method
+     * from JCSCachedTileLoaderJob to acquire the semaphore, and releases it - when loadingFinished is called (but not when
+     * LoadResult.GUARD_REJECTED is set)
+     *
+     */
+
+    private Semaphore getSemaphore() {
+        String host = getUrl().getHost();
+        Semaphore limit = HOST_LIMITS.get(host);
+        if (limit == null) {
+            synchronized(HOST_LIMITS) {
+                limit = HOST_LIMITS.get(host);
+                if (limit == null) {
+                    limit = new Semaphore(HOST_LIMIT.get().intValue());
+                    HOST_LIMITS.put(host, limit);
+                }
+            }
+        }
+        return limit;
+    }
+
+    private boolean acquireSemaphore() {
+        boolean ret = true;
+        Semaphore limit = getSemaphore();
+        if (limit != null) {
+            ret = limit.tryAcquire();
+            if (!ret) {
+                Main.debug("rejecting job because of per host limit");
+            }
+        }
+        return ret;
+    }
+
+    private void releaseSemaphore() {
+        Semaphore limit = getSemaphore();
+        if (limit != null) {
+            limit.release();
+        }
+    }
+
+    private static Map<String, Semaphore> HOST_LIMITS = new ConcurrentHashMap<>();
+
     /**
      * overrides the THREAD_LIMIT in superclass, as we want to have separate limit and pool for TMS
      */
-    public static IntegerProperty THREAD_LIMIT = new IntegerProperty("imagery.tms.tmsloader.maxjobs", 25);
+    public static final IntegerProperty THREAD_LIMIT = new IntegerProperty("imagery.tms.tmsloader.maxjobs", 25);
+
     /**
      * separate from JCS thread pool for TMS loader, so we can have different thread pools for default JCS
      * and for TMS imagery
      */
-    private static ThreadPoolExecutor DOWNLOAD_JOB_DISPATCHER = new ThreadPoolExecutor(
-            THREAD_LIMIT.get().intValue(), // keep the thread number constant
-            THREAD_LIMIT.get().intValue(), // do not this number of threads
-            30, // keepalive for thread
-            TimeUnit.SECONDS,
-            // make queue of LIFO type - so recently requested tiles will be loaded first (assuming that these are which user is waiting to see)
-            new LinkedBlockingDeque<Runnable>(5) {
-                /* keep the queue size fairly small, we do not want to
-                 download a lot of tiles, that user is not seeing anyway */
-                @Override
-                public boolean offer(Runnable t) {
-                    return super.offerFirst(t);
-                }
+    private static ThreadPoolExecutor DOWNLOAD_JOB_DISPATCHER = getThreadPoolExecutor();
 
-                @Override
-                public Runnable remove() {
-                    return super.removeFirst();
-                }
-            }
-            );
+    private static ThreadPoolExecutor getThreadPoolExecutor() {
+        return new ThreadPoolExecutor(
+                THREAD_LIMIT.get().intValue(), // keep the thread number constant
+                THREAD_LIMIT.get().intValue(), // do not this number of threads
+                30, // keepalive for thread
+                TimeUnit.SECONDS,
+                // make queue of LIFO type - so recently requested tiles will be loaded first (assuming that these are which user is waiting to see)
+                new LIFOQueue(5)
+                    /* keep the queue size fairly small, we do not want to
+                     download a lot of tiles, that user is not seeing anyway */
+                );
+    }
+
+    /**
+     * Reconfigures download dispatcher using current values of THREAD_LIMIT and HOST_LIMIT
+     */
+    public static final void reconfigureDownloadDispatcher() {
+        HOST_LIMITS = new ConcurrentHashMap<>();
+        DOWNLOAD_JOB_DISPATCHER = getThreadPoolExecutor();
+    }
 
     /**
      * Constructor for creating a job, to get a specific tile from cache
@@ -79,7 +138,17 @@ public class TMSCachedTileLoaderJob extends JCSCachedTileLoaderJob<String, Buffe
             Map<String, String> headers) {
         super(cache, connectTimeout, readTimeout, headers);
         this.tile = tile;
-        this.listener = listener;
+        if (listener != null) {
+            String deduplicationKey = getCacheKey();
+            synchronized (inProgress) {
+                Set<TileLoaderListener> newListeners = inProgress.get(deduplicationKey);
+                if (newListeners == null) {
+                    newListeners = new HashSet<>();
+                    inProgress.put(deduplicationKey, newListeners);
+                }
+                newListeners.add(listener);
+            }
+        }
     }
 
     @Override
@@ -97,7 +166,7 @@ public class TMSCachedTileLoaderJob extends JCSCachedTileLoaderJob<String, Buffe
     /*
      *  this doesn't needs to be synchronized, as it's not that costly to keep only one execution
      *  in parallel, but URL creation and Tile.getUrl() are costly and are not needed when fetching
-     *  data from cache
+     *  data from cache, that's why URL creation is postponed until it's needed
      *
      *  We need to have static url value for TileLoaderJob, as for some TileSources we might get different
      *  URL's each call we made (servers switching), and URL's are used below as a key for duplicate detection
@@ -156,6 +225,16 @@ public class TMSCachedTileLoaderJob extends JCSCachedTileLoaderJob<String, Buffe
         return DOWNLOAD_JOB_DISPATCHER;
     }
 
+    @Override
+    protected boolean executionGuard() {
+        return acquireSemaphore();
+    }
+
+    @Override
+    protected void executionFinished() {
+        releaseSemaphore();
+    }
+
     public void submit() {
         tile.initLoading();
         super.submit(this);
@@ -163,31 +242,46 @@ public class TMSCachedTileLoaderJob extends JCSCachedTileLoaderJob<String, Buffe
 
     @Override
     public void loadingFinished(CacheEntry object, LoadResult result) {
+        Set<TileLoaderListener> listeners;
+        synchronized (inProgress) {
+            listeners = inProgress.remove(getCacheKey());
+        }
+
         try {
-            tile.finishLoading(); // whatever happened set that loading has finished
-            switch(result){
-            case FAILURE:
-                tile.setError("Problem loading tile");
-            case SUCCESS:
-                handleNoTileAtZoom();
-                if (object != null) {
-                    byte[] content = object.getContent();
-                    if (content != null && content.length > 0) {
-                        tile.loadImage(new ByteArrayInputStream(content));
+            if(!tile.isLoaded()) { //if someone else already loaded tile, skip all the handling
+                tile.finishLoading(); // whatever happened set that loading has finished
+                switch(result){
+                case FAILURE:
+                    tile.setError("Problem loading tile");
+                    // no break intentional here
+                case SUCCESS:
+                    handleNoTileAtZoom();
+                    if (object != null) {
+                        byte[] content = object.getContent();
+                        if (content != null && content.length > 0) {
+                            tile.loadImage(new ByteArrayInputStream(content));
+                        }
                     }
+                    // no break intentional here
+                case REJECTED:
+                    // do nothing
                 }
-            case REJECTED:
-                // do not set anything here, leave waiting sign
             }
-            if (listener != null) {
-                listener.tileLoadingFinished(tile, result.equals(LoadResult.SUCCESS));
+
+            // always check, if there is some listener interested in fact, that tile has finished loading
+            if (listeners != null) { // listeners might be null, if some other thread notified already about success
+                for(TileLoaderListener l: listeners) {
+                    l.tileLoadingFinished(tile, result.equals(LoadResult.SUCCESS));
+                }
             }
         } catch (IOException e) {
             log.log(Level.WARNING, "JCS TMS - error loading object for tile {0}: {1}", new Object[] {tile.getKey(), e.getMessage()});
             tile.setError(e.getMessage());
             tile.setLoaded(false);
-            if (listener != null) {
-                listener.tileLoadingFinished(tile, false);
+            if (listeners != null) { // listeners might be null, if some other thread notified already about success
+                for(TileLoaderListener l: listeners) {
+                    l.tileLoadingFinished(tile, false);
+                }
             }
         }
     }
diff --git a/src/org/openstreetmap/josm/data/imagery/WmsCache.java b/src/org/openstreetmap/josm/data/imagery/WmsCache.java
index 94b8073..e7fa2d7 100644
--- a/src/org/openstreetmap/josm/data/imagery/WmsCache.java
+++ b/src/org/openstreetmap/josm/data/imagery/WmsCache.java
@@ -56,14 +56,14 @@ public class WmsCache {
     private static final String LAYERS_INDEX_FILENAME = "layers.properties";
 
     private static class CacheEntry {
-        final double pixelPerDegree;
-        final double east;
-        final double north;
-        final ProjectionBounds bounds;
-        final String filename;
+        private final double pixelPerDegree;
+        private final double east;
+        private final double north;
+        private final ProjectionBounds bounds;
+        private final String filename;
 
-        long lastUsed;
-        long lastModified;
+        private long lastUsed;
+        private long lastModified;
 
         CacheEntry(double pixelPerDegree, double east, double north, int tileSize, String filename) {
             this.pixelPerDegree = pixelPerDegree;
@@ -82,9 +82,9 @@ public class WmsCache {
     }
 
     private static class ProjectionEntries {
-        final String projection;
-        final String cacheDirectory;
-        final List<CacheEntry> entries = new ArrayList<>();
+        private final String projection;
+        private final String cacheDirectory;
+        private final List<CacheEntry> entries = new ArrayList<>();
 
         ProjectionEntries(String projection, String cacheDirectory) {
             this.projection = projection;
@@ -226,17 +226,23 @@ public class WmsCache {
                     referencedFiles.add(ce.filename);
                 }
 
-                for (File file: projectionDir.listFiles()) {
-                    if (!referencedFiles.contains(file.getName())) {
-                        file.delete();
+                File[] files = projectionDir.listFiles();
+                if (files != null) {
+                    for (File file: files) {
+                        if (!referencedFiles.contains(file.getName())) {
+                            file.delete();
+                        }
                     }
                 }
             }
         }
 
-        for (File projectionDir: cacheDir.listFiles()) {
-            if (projectionDir.isDirectory() && !usedProjections.contains(projectionDir.getName())) {
-                Utils.deleteDirectory(projectionDir);
+        File[] files = cacheDir.listFiles();
+        if (files != null) {
+            for (File projectionDir: files) {
+                if (projectionDir.isDirectory() && !usedProjections.contains(projectionDir.getName())) {
+                    Utils.deleteDirectory(projectionDir);
+                }
             }
         }
     }
diff --git a/src/org/openstreetmap/josm/data/oauth/OAuthParameters.java b/src/org/openstreetmap/josm/data/oauth/OAuthParameters.java
index 17be41f..23777cb 100644
--- a/src/org/openstreetmap/josm/data/oauth/OAuthParameters.java
+++ b/src/org/openstreetmap/josm/data/oauth/OAuthParameters.java
@@ -118,9 +118,9 @@ public class OAuthParameters {
      * Creates a clone of the parameters in <code>other</code>.
      *
      * @param other the other parameters. Must not be null.
-     * @throws IllegalArgumentException thrown if other is null
+     * @throws IllegalArgumentException if other is null
      */
-    public OAuthParameters(OAuthParameters other) throws IllegalArgumentException{
+    public OAuthParameters(OAuthParameters other) {
         CheckParameterUtil.ensureParameterNotNull(other, "other");
         this.consumerKey = other.consumerKey;
         this.consumerSecret = other.consumerSecret;
@@ -225,7 +225,7 @@ public class OAuthParameters {
      * @return the provider
      * @throws IllegalArgumentException if consumer is null
      */
-    public OAuthProvider buildProvider(OAuthConsumer consumer) throws IllegalArgumentException {
+    public OAuthProvider buildProvider(OAuthConsumer consumer) {
         CheckParameterUtil.ensureParameterNotNull(consumer, "consumer");
         return new DefaultOAuthProvider(
                 requestTokenUrl,
diff --git a/src/org/openstreetmap/josm/data/oauth/OAuthToken.java b/src/org/openstreetmap/josm/data/oauth/OAuthToken.java
index 642b811..4533302 100644
--- a/src/org/openstreetmap/josm/data/oauth/OAuthToken.java
+++ b/src/org/openstreetmap/josm/data/oauth/OAuthToken.java
@@ -35,9 +35,9 @@ public class OAuthToken {
      * Creates a clone of another token
      *
      * @param other the other token. Must not be null.
-     * @throws IllegalArgumentException thrown if other is null
+     * @throws IllegalArgumentException if other is null
      */
-    public OAuthToken(OAuthToken other) throws IllegalArgumentException {
+    public OAuthToken(OAuthToken other) {
         CheckParameterUtil.ensureParameterNotNull(other, "other");
         this.key = other.key;
         this.secret = other.secret;
diff --git a/src/org/openstreetmap/josm/data/osm/AbstractPrimitive.java b/src/org/openstreetmap/josm/data/osm/AbstractPrimitive.java
index 455c45b..678366f 100644
--- a/src/org/openstreetmap/josm/data/osm/AbstractPrimitive.java
+++ b/src/org/openstreetmap/josm/data/osm/AbstractPrimitive.java
@@ -10,13 +10,13 @@ import java.util.Collections;
 import java.util.Date;
 import java.util.HashMap;
 import java.util.HashSet;
-import java.util.Locale;
 import java.util.Map;
 import java.util.Map.Entry;
 import java.util.Objects;
 import java.util.Set;
 import java.util.concurrent.atomic.AtomicLong;
 
+import org.openstreetmap.josm.tools.LanguageInfo;
 import org.openstreetmap.josm.tools.Utils;
 
 /**
@@ -186,9 +186,9 @@ public abstract class AbstractPrimitive implements IPrimitive {
      *
      * @param id the id. > 0 required
      * @param version the version > 0 required
-     * @throws IllegalArgumentException thrown if id <= 0
-     * @throws IllegalArgumentException thrown if version <= 0
-     * @throws DataIntegrityProblemException If id is changed and primitive was already added to the dataset
+     * @throws IllegalArgumentException if id <= 0
+     * @throws IllegalArgumentException if version <= 0
+     * @throws DataIntegrityProblemException if id is changed and primitive was already added to the dataset
      */
     @Override
     public void setOsmId(long id, int version) {
@@ -257,11 +257,11 @@ public abstract class AbstractPrimitive implements IPrimitive {
      * primitive.
      *
      * @param changesetId the id. >= 0 required.
-     * @throws IllegalStateException thrown if this primitive is new.
-     * @throws IllegalArgumentException thrown if id < 0
+     * @throws IllegalStateException if this primitive is new.
+     * @throws IllegalArgumentException if id < 0
      */
     @Override
-    public void setChangesetId(int changesetId) throws IllegalStateException, IllegalArgumentException {
+    public void setChangesetId(int changesetId) {
         if (this.changesetId == changesetId)
             return;
         if (changesetId < 0)
@@ -395,11 +395,10 @@ public abstract class AbstractPrimitive implements IPrimitive {
      * and not deleted on the server.
      *
      * @see #isVisible()
-     * @throws IllegalStateException thrown if visible is set to false on an primitive with
-     * id==0
+     * @throws IllegalStateException if visible is set to false on an primitive with id==0
      */
     @Override
-    public void setVisible(boolean visible) throws IllegalStateException{
+    public void setVisible(boolean visible) {
         if (isNew() && !visible)
             throw new IllegalStateException(tr("A primitive with ID = 0 cannot be invisible."));
         updateFlags(FLAG_VISIBLE, visible);
@@ -693,36 +692,19 @@ public abstract class AbstractPrimitive implements IPrimitive {
     }
 
     /**
-     * Replies the a localized name for this primitive given by the value of the tags (in this order)
-     * <ul>
-     *   <li>name:lang_COUNTRY_Variant  of the current locale</li>
-     *   <li>name:lang_COUNTRY of the current locale</li>
-     *   <li>name:lang of the current locale</li>
-     *   <li>name of the current locale</li>
-     * </ul>
+     * Replies a localized name for this primitive given by the value of the name tags
+     * accessed from very specific (language variant) to more generic (default name).
      *
-     * null, if no such tag exists
-     *
-     * @return the name of this primitive
+     * @see LanguageInfo#getLanguageCodes()
+     * @return the name of this primitive, <code>null</code> if no name exists
      */
     @Override
     public String getLocalName() {
-        final Locale locale = Locale.getDefault();
-        String key = "name:" + locale.toString();
-        String val = get(key);
-        if (val != null)
-            return val;
-
-        final String language = locale.getLanguage();
-        key = "name:" + language + "_" + locale.getCountry();
-        val = get(key);
-        if (val != null)
-            return val;
-
-        key = "name:" + language;
-        val = get(key);
-        if (val != null)
-            return val;
+        for(String s : LanguageInfo.getLanguageCodes(null)) {
+            String val = get("name:" + s);
+            if (val != null)
+                return val;
+        }
 
         return getName();
     }
diff --git a/src/org/openstreetmap/josm/data/osm/ChangesetCache.java b/src/org/openstreetmap/josm/data/osm/ChangesetCache.java
index 1617988..57d9be2 100644
--- a/src/org/openstreetmap/josm/data/osm/ChangesetCache.java
+++ b/src/org/openstreetmap/josm/data/osm/ChangesetCache.java
@@ -47,8 +47,7 @@ public final class ChangesetCache implements PreferenceChangedListener{
     /** the cached changesets */
     private final Map<Integer, Changeset> cache = new HashMap<>();
 
-    private final CopyOnWriteArrayList<ChangesetCacheListener> listeners =
-        new CopyOnWriteArrayList<>();
+    private final CopyOnWriteArrayList<ChangesetCacheListener> listeners = new CopyOnWriteArrayList<>();
 
     private ChangesetCache() {
         Main.pref.addPreferenceChangeListener(this);
diff --git a/src/org/openstreetmap/josm/data/osm/ChangesetDataSet.java b/src/org/openstreetmap/josm/data/osm/ChangesetDataSet.java
index a28d391..cf6bd07 100644
--- a/src/org/openstreetmap/josm/data/osm/ChangesetDataSet.java
+++ b/src/org/openstreetmap/josm/data/osm/ChangesetDataSet.java
@@ -5,8 +5,8 @@ import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Iterator;
 import java.util.Map;
-import java.util.Set;
 import java.util.Map.Entry;
+import java.util.Set;
 
 import org.openstreetmap.josm.data.osm.history.HistoryOsmPrimitive;
 import org.openstreetmap.josm.tools.CheckParameterUtil;
@@ -35,10 +35,10 @@ public class ChangesetDataSet {
      *
      * @param primitive the primitive. Must not be null.
      * @param cmt the modification type. Must not be null.
-     * @throws IllegalArgumentException thrown if primitive is null
-     * @throws IllegalArgumentException thrown if cmt is null
+     * @throws IllegalArgumentException if primitive is null
+     * @throws IllegalArgumentException if cmt is null
      */
-    public void put(HistoryOsmPrimitive primitive, ChangesetModificationType cmt) throws IllegalArgumentException{
+    public void put(HistoryOsmPrimitive primitive, ChangesetModificationType cmt) {
         CheckParameterUtil.ensureParameterNotNull(primitive,"primitive");
         CheckParameterUtil.ensureParameterNotNull(cmt,"cmt");
         primitives.put(primitive.getPrimitiveId(), primitive);
@@ -111,11 +111,11 @@ public class ChangesetDataSet {
      *
      * @param cmt the modification type. Must not be null.
      * @return the set of primitives
-     * @throws IllegalArgumentException thrown if cmt is null
+     * @throws IllegalArgumentException if cmt is null
      */
-    public Set<HistoryOsmPrimitive> getPrimitivesByModificationType(ChangesetModificationType cmt) throws IllegalArgumentException {
+    public Set<HistoryOsmPrimitive> getPrimitivesByModificationType(ChangesetModificationType cmt) {
         CheckParameterUtil.ensureParameterNotNull(cmt,"cmt");
-        HashSet<HistoryOsmPrimitive> ret = new HashSet<>();
+        Set<HistoryOsmPrimitive> ret = new HashSet<>();
         for (Entry<PrimitiveId, ChangesetModificationType> entry: modificationTypes.entrySet()) {
             if (entry.getValue().equals(cmt)) {
                 ret.add(primitives.get(entry.getKey()));
diff --git a/src/org/openstreetmap/josm/data/osm/DataSet.java b/src/org/openstreetmap/josm/data/osm/DataSet.java
index 18a6bfa..495ae46 100644
--- a/src/org/openstreetmap/josm/data/osm/DataSet.java
+++ b/src/org/openstreetmap/josm/data/osm/DataSet.java
@@ -728,7 +728,7 @@ public final class DataSet implements Data, Cloneable, ProjectionChangeListener
     public void setSelected(Collection<? extends PrimitiveId> selection, boolean fireSelectionChangeEvent) {
         boolean changed;
         synchronized (selectionLock) {
-            LinkedHashSet<OsmPrimitive> oldSelection = new LinkedHashSet<>(selectedPrimitives);
+            Set<OsmPrimitive> oldSelection = new LinkedHashSet<>(selectedPrimitives);
             selectedPrimitives = new LinkedHashSet<>();
             addSelected(selection, false);
             changed = !oldSelection.equals(selectedPrimitives);
@@ -877,7 +877,7 @@ public final class DataSet implements Data, Cloneable, ProjectionChangeListener
         getReadLock().lock();
         try {
             DataSet ds = new DataSet();
-            HashMap<OsmPrimitive, OsmPrimitive> primMap = new HashMap<>();
+            Map<OsmPrimitive, OsmPrimitive> primMap = new HashMap<>();
             for (Node n : nodes) {
                 Node newNode = new Node(n);
                 primMap.put(n, newNode);
@@ -935,7 +935,7 @@ public final class DataSet implements Data, Cloneable, ProjectionChangeListener
      * @param id  uniqueId of the primitive. Might be < 0 for newly created primitives
      * @param type the type of  the primitive. Must not be null.
      * @return the primitive
-     * @exception NullPointerException thrown, if type is null
+     * @throws NullPointerException if type is null
      */
     public OsmPrimitive getPrimitiveById(long id, OsmPrimitiveType type) {
         return getPrimitiveById(new SimplePrimitiveId(id, type));
diff --git a/src/org/openstreetmap/josm/data/osm/DataSetMerger.java b/src/org/openstreetmap/josm/data/osm/DataSetMerger.java
index 1668356..eecbc4c 100644
--- a/src/org/openstreetmap/josm/data/osm/DataSetMerger.java
+++ b/src/org/openstreetmap/josm/data/osm/DataSetMerger.java
@@ -51,9 +51,9 @@ public class DataSetMerger {
      *
      * @param targetDataSet dataset with my primitives. Must not be null.
      * @param sourceDataSet dataset with their primitives. Ignored, if null.
-     * @throws IllegalArgumentException thrown if myDataSet is null
+     * @throws IllegalArgumentException if myDataSet is null
      */
-    public DataSetMerger(DataSet targetDataSet, DataSet sourceDataSet) throws IllegalArgumentException {
+    public DataSetMerger(DataSet targetDataSet, DataSet sourceDataSet) {
         CheckParameterUtil.ensureParameterNotNull(targetDataSet, "targetDataSet");
         this.targetDataSet = targetDataSet;
         this.sourceDataSet = sourceDataSet;
@@ -123,7 +123,7 @@ public class DataSetMerger {
         objectsWithChildrenToMerge.add(source.getPrimitiveId());
     }
 
-    protected OsmPrimitive getMergeTarget(OsmPrimitive mergeSource) throws IllegalStateException {
+    protected OsmPrimitive getMergeTarget(OsmPrimitive mergeSource) {
         PrimitiveId targetId = mergedMap.get(mergeSource.getPrimitiveId());
         if (targetId == null)
             return null;
@@ -228,11 +228,11 @@ public class DataSetMerger {
      * Merges the node list of a source way onto its target way.
      *
      * @param source the source way
-     * @throws IllegalStateException thrown if no target way can be found for the source way
-     * @throws IllegalStateException thrown if there isn't a target node for one of the nodes in the source way
+     * @throws IllegalStateException if no target way can be found for the source way
+     * @throws IllegalStateException if there isn't a target node for one of the nodes in the source way
      *
      */
-    private void mergeNodeList(Way source) throws IllegalStateException {
+    private void mergeNodeList(Way source) {
         Way target = (Way)getMergeTarget(source);
         if (target == null)
             throw new IllegalStateException(tr("Missing merge target for way with id {0}", source.getUniqueId()));
@@ -255,15 +255,15 @@ public class DataSetMerger {
     /**
      * Merges the relation members of a source relation onto the corresponding target relation.
      * @param source the source relation
-     * @throws IllegalStateException thrown if there is no corresponding target relation
-     * @throws IllegalStateException thrown if there isn't a corresponding target object for one of the relation
+     * @throws IllegalStateException if there is no corresponding target relation
+     * @throws IllegalStateException if there isn't a corresponding target object for one of the relation
      * members in source
      */
-    private void mergeRelationMembers(Relation source) throws IllegalStateException {
+    private void mergeRelationMembers(Relation source) {
         Relation target = (Relation) getMergeTarget(source);
         if (target == null)
             throw new IllegalStateException(tr("Missing merge target for relation with id {0}", source.getUniqueId()));
-        LinkedList<RelationMember> newMembers = new LinkedList<>();
+        List<RelationMember> newMembers = new LinkedList<>();
         for (RelationMember sourceMember : source.getMembers()) {
             OsmPrimitive targetMember = getMergeTarget(sourceMember.getMember());
             if (targetMember == null)
diff --git a/src/org/openstreetmap/josm/data/osm/FilterMatcher.java b/src/org/openstreetmap/josm/data/osm/FilterMatcher.java
index 79e720e..052f68a 100644
--- a/src/org/openstreetmap/josm/data/osm/FilterMatcher.java
+++ b/src/org/openstreetmap/josm/data/osm/FilterMatcher.java
@@ -72,9 +72,9 @@ public class FilterMatcher {
     }
 
     private static class FilterInfo {
-        final Match match;
-        final boolean isDelete;
-        final boolean isInverted;
+        private final Match match;
+        private final boolean isDelete;
+        private final boolean isInverted;
 
         FilterInfo(Filter filter) throws ParseError {
             if (filter.mode == SearchMode.remove || filter.mode == SearchMode.in_selection) {
diff --git a/src/org/openstreetmap/josm/data/osm/Node.java b/src/org/openstreetmap/josm/data/osm/Node.java
index 5422325..7f01ffd 100644
--- a/src/org/openstreetmap/josm/data/osm/Node.java
+++ b/src/org/openstreetmap/josm/data/osm/Node.java
@@ -146,7 +146,7 @@ public final class Node extends OsmPrimitive implements INode {
      * @param id The id. Must be >= 0
      * @throws IllegalArgumentException if id < 0
      */
-    public Node(long id) throws IllegalArgumentException {
+    public Node(long id) {
         super(id, false);
     }
 
@@ -156,7 +156,7 @@ public final class Node extends OsmPrimitive implements INode {
      * @param version The version
      * @throws IllegalArgumentException if id < 0
      */
-    public Node(long id, int version) throws IllegalArgumentException {
+    public Node(long id, int version) {
         super(id, version, false);
     }
 
@@ -234,9 +234,9 @@ public final class Node extends OsmPrimitive implements INode {
      * have an assigend OSM id, the IDs have to be the same.
      *
      * @param other the other primitive. Must not be null.
-     * @throws IllegalArgumentException thrown if other is null.
-     * @throws DataIntegrityProblemException thrown if either this is new and other is not, or other is new and this is not
-     * @throws DataIntegrityProblemException thrown if other is new and other.getId() != this.getId()
+     * @throws IllegalArgumentException if other is null.
+     * @throws DataIntegrityProblemException if either this is new and other is not, or other is new and this is not
+     * @throws DataIntegrityProblemException if other is new and other.getId() != this.getId()
      */
     @Override
     public void mergeFrom(OsmPrimitive other) {
diff --git a/src/org/openstreetmap/josm/data/osm/NodePositionComparator.java b/src/org/openstreetmap/josm/data/osm/NodePositionComparator.java
index a5cca6a..08c02a5 100644
--- a/src/org/openstreetmap/josm/data/osm/NodePositionComparator.java
+++ b/src/org/openstreetmap/josm/data/osm/NodePositionComparator.java
@@ -1,6 +1,7 @@
 // License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.data.osm;
 
+import java.io.Serializable;
 import java.util.Comparator;
 
 /**
@@ -8,7 +9,10 @@ import java.util.Comparator;
  *
  * @author viesturs
  */
-public class NodePositionComparator implements Comparator<Node> {
+public class NodePositionComparator implements Comparator<Node>, Serializable {
+
+    private static final long serialVersionUID = 1L;
+
     @Override
     public int compare(Node n1, Node n2) {
 
diff --git a/src/org/openstreetmap/josm/data/osm/NoteData.java b/src/org/openstreetmap/josm/data/osm/NoteData.java
index 31e1e6f..dd2a814 100644
--- a/src/org/openstreetmap/josm/data/osm/NoteData.java
+++ b/src/org/openstreetmap/josm/data/osm/NoteData.java
@@ -6,6 +6,7 @@ import java.util.Collection;
 import java.util.Collections;
 import java.util.Comparator;
 import java.util.Date;
+import java.util.List;
 import java.util.Map;
 
 import org.openstreetmap.josm.Main;
@@ -112,7 +113,7 @@ public class NoteData {
      * @return sorted collection of notes
      */
     public Collection<Note> getSortedNotes() {
-        final ArrayList<Note> list = new ArrayList<>(noteList);
+        final List<Note> list = new ArrayList<>(noteList);
         Collections.sort(list, comparator);
         return list;
     }
diff --git a/src/org/openstreetmap/josm/data/osm/OsmPrimitive.java b/src/org/openstreetmap/josm/data/osm/OsmPrimitive.java
index c76d3f1..86df1e9 100644
--- a/src/org/openstreetmap/josm/data/osm/OsmPrimitive.java
+++ b/src/org/openstreetmap/josm/data/osm/OsmPrimitive.java
@@ -160,7 +160,7 @@ public abstract class OsmPrimitive extends AbstractPrimitive implements Comparab
      * empty set if primitives is null or if there are no referring primitives
      */
     public static Set<OsmPrimitive> getReferrer(Collection<? extends OsmPrimitive> primitives) {
-        HashSet<OsmPrimitive> ret = new HashSet<>();
+        Set<OsmPrimitive> ret = new HashSet<>();
         if (primitives == null || primitives.isEmpty()) return ret;
         for (OsmPrimitive p: primitives) {
             ret.addAll(p.getReferrers());
@@ -172,13 +172,15 @@ public abstract class OsmPrimitive extends AbstractPrimitive implements Comparab
      * Some predicates, that describe conditions on primitives.
      */
     public static final Predicate<OsmPrimitive> isUsablePredicate = new Predicate<OsmPrimitive>() {
-        @Override public boolean evaluate(OsmPrimitive primitive) {
+        @Override
+        public boolean evaluate(OsmPrimitive primitive) {
             return primitive.isUsable();
         }
     };
 
     public static final Predicate<OsmPrimitive> isSelectablePredicate = new Predicate<OsmPrimitive>() {
-        @Override public boolean evaluate(OsmPrimitive primitive) {
+        @Override
+        public boolean evaluate(OsmPrimitive primitive) {
             return primitive.isSelectable();
         }
     };
@@ -246,9 +248,9 @@ public abstract class OsmPrimitive extends AbstractPrimitive implements Comparab
      *
      * @param id the id
      * @param allowNegativeId
-     * @throws IllegalArgumentException thrown if id < 0 and allowNegativeId is false
+     * @throws IllegalArgumentException if id < 0 and allowNegativeId is false
      */
-    protected OsmPrimitive(long id, boolean allowNegativeId) throws IllegalArgumentException {
+    protected OsmPrimitive(long id, boolean allowNegativeId) {
         if (allowNegativeId) {
             this.id = id;
         } else {
@@ -277,9 +279,9 @@ public abstract class OsmPrimitive extends AbstractPrimitive implements Comparab
      * @param id
      * @param version
      * @param allowNegativeId
-     * @throws IllegalArgumentException thrown if id < 0 and allowNegativeId is false
+     * @throws IllegalArgumentException if id < 0 and allowNegativeId is false
      */
-    protected OsmPrimitive(long id, int version, boolean allowNegativeId) throws IllegalArgumentException {
+    protected OsmPrimitive(long id, int version, boolean allowNegativeId) {
         this(id, allowNegativeId);
         this.version = (id > 0 ? version : 0);
         setIncomplete(id > 0 && version == 0);
@@ -357,9 +359,9 @@ public abstract class OsmPrimitive extends AbstractPrimitive implements Comparab
      *
      * @param id the id. > 0 required
      * @param version the version > 0 required
-     * @throws IllegalArgumentException thrown if id <= 0
-     * @throws IllegalArgumentException thrown if version <= 0
-     * @throws DataIntegrityProblemException If id is changed and primitive was already added to the dataset
+     * @throws IllegalArgumentException if id <= 0
+     * @throws IllegalArgumentException if version <= 0
+     * @throws DataIntegrityProblemException if id is changed and primitive was already added to the dataset
      */
     @Override
     public void setOsmId(long id, int version) {
@@ -410,7 +412,7 @@ public abstract class OsmPrimitive extends AbstractPrimitive implements Comparab
     }
 
     @Override
-    public void setChangesetId(int changesetId) throws IllegalStateException, IllegalArgumentException {
+    public void setChangesetId(int changesetId) {
         boolean locked = writeLock();
         try {
             int old = this.changesetId;
@@ -542,7 +544,7 @@ public abstract class OsmPrimitive extends AbstractPrimitive implements Comparab
     }
 
     @Override
-    public void setVisible(boolean visible) throws IllegalStateException {
+    public void setVisible(boolean visible) {
         boolean locked = writeLock();
         try {
             super.setVisible(visible);
@@ -664,7 +666,7 @@ public abstract class OsmPrimitive extends AbstractPrimitive implements Comparab
      */
     public static Collection<String> getUninterestingKeys() {
         if (uninteresting == null) {
-            LinkedList<String> l = new LinkedList<>(Arrays.asList(
+            List<String> l = new LinkedList<>(Arrays.asList(
                 "source", "source_ref", "source:", "comment",
                 "converted_by", "watch", "watch:",
                 "description", "attribution"));
@@ -1131,9 +1133,9 @@ public abstract class OsmPrimitive extends AbstractPrimitive implements Comparab
      * have an assigend OSM id, the IDs have to be the same.
      *
      * @param other the other primitive. Must not be null.
-     * @throws IllegalArgumentException thrown if other is null.
-     * @throws DataIntegrityProblemException thrown if either this is new and other is not, or other is new and this is not
-     * @throws DataIntegrityProblemException thrown if other isn't new and other.getId() != this.getId()
+     * @throws IllegalArgumentException if other is null.
+     * @throws DataIntegrityProblemException if either this is new and other is not, or other is new and this is not
+     * @throws DataIntegrityProblemException if other isn't new and other.getId() != this.getId()
      */
     public void mergeFrom(OsmPrimitive other) {
         boolean locked = writeLock();
@@ -1363,7 +1365,7 @@ public abstract class OsmPrimitive extends AbstractPrimitive implements Comparab
      * @return the set of referring relations
      */
     public static Set<Relation> getParentRelations(Collection<? extends OsmPrimitive> primitives) {
-        HashSet<Relation> ret = new HashSet<>();
+        Set<Relation> ret = new HashSet<>();
         for (OsmPrimitive w : primitives) {
             ret.addAll(OsmPrimitive.getFilteredList(w.getReferrers(), Relation.class));
         }
diff --git a/src/org/openstreetmap/josm/data/osm/OsmPrimitiveComparator.java b/src/org/openstreetmap/josm/data/osm/OsmPrimitiveComparator.java
index fc839df..e36051b 100644
--- a/src/org/openstreetmap/josm/data/osm/OsmPrimitiveComparator.java
+++ b/src/org/openstreetmap/josm/data/osm/OsmPrimitiveComparator.java
@@ -1,6 +1,7 @@
 // License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.data.osm;
 
+import java.io.Serializable;
 import java.util.Comparator;
 import java.util.HashMap;
 import java.util.Map;
@@ -14,7 +15,10 @@ import org.openstreetmap.josm.gui.DefaultNameFormatter;
  * </ul>
  * @since 4113
  */
-public class OsmPrimitiveComparator implements Comparator<OsmPrimitive> {
+public class OsmPrimitiveComparator implements Comparator<OsmPrimitive>, Serializable {
+
+    private static final long serialVersionUID = 1L;
+
     private final Map<OsmPrimitive, String> cache = new HashMap<>();
     private final boolean relationsFirst;
     private final boolean quick;
diff --git a/src/org/openstreetmap/josm/data/osm/OsmUtils.java b/src/org/openstreetmap/josm/data/osm/OsmUtils.java
index 71f3b39..c752a17 100644
--- a/src/org/openstreetmap/josm/data/osm/OsmUtils.java
+++ b/src/org/openstreetmap/josm/data/osm/OsmUtils.java
@@ -17,11 +17,11 @@ public final class OsmUtils {
         // Hide default constructor for utils classes
     }
 
-    static final List<String> TRUE_VALUES = new ArrayList<>(Arrays
+    private static final List<String> TRUE_VALUES = new ArrayList<>(Arrays
             .asList(new String[] { "true", "yes", "1", "on" }));
-    static final List<String> FALSE_VALUES = new ArrayList<>(Arrays
+    private static final List<String> FALSE_VALUES = new ArrayList<>(Arrays
             .asList(new String[] { "false", "no", "0", "off" }));
-    static final List<String> REVERSE_VALUES = new ArrayList<>(Arrays
+    private static final List<String> REVERSE_VALUES = new ArrayList<>(Arrays
             .asList(new String[] { "reverse", "-1" }));
 
     public static final String trueval = "yes";
diff --git a/src/org/openstreetmap/josm/data/osm/PrimitiveDeepCopy.java b/src/org/openstreetmap/josm/data/osm/PrimitiveDeepCopy.java
index e8121ad..91f8f5c 100644
--- a/src/org/openstreetmap/josm/data/osm/PrimitiveDeepCopy.java
+++ b/src/org/openstreetmap/josm/data/osm/PrimitiveDeepCopy.java
@@ -55,7 +55,7 @@ public class PrimitiveDeepCopy {
         final Set<Long> visitedRelationIds = new HashSet<>();
 
         new AbstractVisitor() {
-            boolean firstIteration;
+            private boolean firstIteration;
 
             @Override
             public void visit(Node n) {
diff --git a/src/org/openstreetmap/josm/data/osm/QuadBuckets.java b/src/org/openstreetmap/josm/data/osm/QuadBuckets.java
index 1a1bc02..e9c836e 100644
--- a/src/org/openstreetmap/josm/data/osm/QuadBuckets.java
+++ b/src/org/openstreetmap/josm/data/osm/QuadBuckets.java
@@ -476,8 +476,8 @@ public class QuadBuckets<T extends OsmPrimitive> implements Collection<T> {
         return bucket != null && bucket.content != null && bucket.content.contains(t);
     }
 
-    public ArrayList<T> toArrayList() {
-        ArrayList<T> a = new ArrayList<>();
+    public List<T> toList() {
+        List<T> a = new ArrayList<>();
         for (T n : this) {
             a.add(n);
         }
@@ -486,18 +486,18 @@ public class QuadBuckets<T extends OsmPrimitive> implements Collection<T> {
 
     @Override
     public Object[] toArray() {
-        return this.toArrayList().toArray();
+        return this.toList().toArray();
     }
 
     @Override
     public <A> A[] toArray(A[] template) {
-        return this.toArrayList().toArray(template);
+        return this.toList().toArray(template);
     }
 
     class QuadBucketIterator implements Iterator<T> {
-        QBLevel<T> current_node;
-        int content_index;
-        int iterated_over;
+        private QBLevel<T> current_node;
+        private int content_index;
+        private int iterated_over;
 
         final QBLevel<T> next_content_node(QBLevel<T> q) {
             if (q == null)
@@ -574,30 +574,23 @@ public class QuadBuckets<T extends OsmPrimitive> implements Collection<T> {
 
     @Override
     public boolean isEmpty() {
-        if (this.size() == 0)
-            return true;
-        return false;
+        return size == 0;
     }
 
     public List<T> search(BBox search_bbox) {
         List<T> ret = new ArrayList<>();
         // Doing this cuts down search cost on a real-life data set by about 25%
-        boolean cache_searches = true;
-        if (cache_searches) {
-            if (search_cache == null) {
-                search_cache = root;
-            }
-            // Walk back up the tree when the last search spot can not cover the current search
-            while (search_cache != null && !search_cache.bbox().bounds(search_bbox)) {
-                search_cache = search_cache.parent;
-            }
+        if (search_cache == null) {
+            search_cache = root;
+        }
+        // Walk back up the tree when the last search spot can not cover the current search
+        while (search_cache != null && !search_cache.bbox().bounds(search_bbox)) {
+            search_cache = search_cache.parent;
+        }
 
-            if (search_cache == null) {
-                search_cache = root;
-                Main.info("bbox: " + search_bbox + " is out of the world");
-            }
-        } else {
+        if (search_cache == null) {
             search_cache = root;
+            Main.info("bbox: " + search_bbox + " is out of the world");
         }
 
         // Save parent because search_cache might change during search call
diff --git a/src/org/openstreetmap/josm/data/osm/Relation.java b/src/org/openstreetmap/josm/data/osm/Relation.java
index 33e0297..e7e5b01 100644
--- a/src/org/openstreetmap/josm/data/osm/Relation.java
+++ b/src/org/openstreetmap/josm/data/osm/Relation.java
@@ -209,9 +209,9 @@ public final class Relation extends OsmPrimitive implements IRelation {
      * as incomplete.
      *
      * @param id the id. > 0 required
-     * @throws IllegalArgumentException thrown if id < 0
+     * @throws IllegalArgumentException if id < 0
      */
-    public Relation(long id) throws IllegalArgumentException {
+    public Relation(long id) {
         super(id, false);
     }
 
@@ -387,7 +387,7 @@ public final class Relation extends OsmPrimitive implements IRelation {
      * member of this relation
      */
     public Set<OsmPrimitive> getMemberPrimitives() {
-        HashSet<OsmPrimitive> ret = new HashSet<>();
+        Set<OsmPrimitive> ret = new HashSet<>();
         RelationMember[] members = this.members;
         for (RelationMember m: members) {
             if (m.getMember() != null) {
diff --git a/src/org/openstreetmap/josm/data/osm/RelationMember.java b/src/org/openstreetmap/josm/data/osm/RelationMember.java
index eb0ffba..acb6f69 100644
--- a/src/org/openstreetmap/josm/data/osm/RelationMember.java
+++ b/src/org/openstreetmap/josm/data/osm/RelationMember.java
@@ -127,7 +127,7 @@ public class RelationMember implements PrimitiveId {
      * Constructs a new {@code RelationMember}.
      * @param role Can be null, in this case it's save as ""
      * @param member Cannot be null
-     * @throws IllegalArgumentException thrown if member is <code>null</code>
+     * @throws IllegalArgumentException if member is <code>null</code>
      */
     public RelationMember(String role, OsmPrimitive member) {
         CheckParameterUtil.ensureParameterNotNull(member, "member");
diff --git a/src/org/openstreetmap/josm/data/osm/SimplePrimitiveId.java b/src/org/openstreetmap/josm/data/osm/SimplePrimitiveId.java
index 4a6d833..6bf4779 100644
--- a/src/org/openstreetmap/josm/data/osm/SimplePrimitiveId.java
+++ b/src/org/openstreetmap/josm/data/osm/SimplePrimitiveId.java
@@ -8,6 +8,9 @@ import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
 public class SimplePrimitiveId implements PrimitiveId, Serializable {
+
+    private static final long serialVersionUID = 1L;
+
     private final long id;
     private final OsmPrimitiveType type;
 
@@ -93,7 +96,7 @@ public class SimplePrimitiveId implements PrimitiveId, Serializable {
      * @return the parsed list of {@code OsmPrimitiveType}s.
      */
     public static List<SimplePrimitiveId> fuzzyParse(String s) {
-        final ArrayList<SimplePrimitiveId> ids = new ArrayList<>();
+        final List<SimplePrimitiveId> ids = new ArrayList<>();
         final Matcher m = ID_PATTERN.matcher(s);
         while (m.find()) {
             final char firstChar = s.charAt(m.start());
diff --git a/src/org/openstreetmap/josm/data/osm/Storage.java b/src/org/openstreetmap/josm/data/osm/Storage.java
index 7ae4cb0..5a5cb3b 100644
--- a/src/org/openstreetmap/josm/data/osm/Storage.java
+++ b/src/org/openstreetmap/josm/data/osm/Storage.java
@@ -88,7 +88,7 @@ public class Storage<T> extends AbstractSet<T> {
     private T[] data;
     private int mask;
     private int size;
-    private transient volatile int modCount = 0;
+    private volatile int modCount = 0;
     private float loadFactor = 0.6f;
     private static final int DEFAULT_CAPACITY = 16;
     private final boolean safeIterator;
@@ -373,7 +373,7 @@ public class Storage<T> extends AbstractSet<T> {
      */
 
     private final class FMap<K> implements Map<K,T> {
-        Hash<K,? super T> fHash;
+        private Hash<K,? super T> fHash;
 
         private FMap(Hash<K,? super T> h) {
             fHash = h;
@@ -456,8 +456,8 @@ public class Storage<T> extends AbstractSet<T> {
     }
 
     private final class SafeReadonlyIter implements Iterator<T> {
-        final T[] data;
-        int slot = 0;
+        private final T[] data;
+        private int slot = 0;
 
         SafeReadonlyIter(T[] data) {
             this.data = data;
@@ -490,8 +490,8 @@ public class Storage<T> extends AbstractSet<T> {
 
     private final class Iter implements Iterator<T> {
         private final int mods;
-        int slot = 0;
-        int removeSlot = -1;
+        private int slot = 0;
+        private int removeSlot = -1;
 
         Iter() {
             mods = modCount;
diff --git a/src/org/openstreetmap/josm/data/osm/TagCollection.java b/src/org/openstreetmap/josm/data/osm/TagCollection.java
index 9b16407..7976178 100644
--- a/src/org/openstreetmap/josm/data/osm/TagCollection.java
+++ b/src/org/openstreetmap/josm/data/osm/TagCollection.java
@@ -498,7 +498,7 @@ public class TagCollection implements Iterable<Tag> {
      * @return the set of keys of this tag collection
      */
     public Set<String> getKeys() {
-        HashSet<String> ret = new HashSet<>();
+        Set<String> ret = new HashSet<>();
         for (Tag tag: tags) {
             ret.add(tag.getKey());
         }
@@ -511,7 +511,7 @@ public class TagCollection implements Iterable<Tag> {
      * @return the set of keys which have at least 2 matching tags.
      */
     public Set<String> getKeysWithMultipleValues() {
-        HashMap<String, Integer> counters = new HashMap<>();
+        Map<String, Integer> counters = new HashMap<>();
         for (Tag tag: tags) {
             Integer v = counters.get(tag.getKey());
             counters.put(tag.getKey(),(v==null) ? 1 : v+1);
@@ -556,7 +556,7 @@ public class TagCollection implements Iterable<Tag> {
      * @return the set of values
      */
     public Set<String> getValues() {
-        HashSet<String> ret = new HashSet<>();
+        Set<String> ret = new HashSet<>();
         for (Tag tag: tags) {
             ret.add(tag.getValue());
         }
@@ -572,7 +572,7 @@ public class TagCollection implements Iterable<Tag> {
      * are no values for the given key
      */
     public Set<String> getValues(String key) {
-        HashSet<String> ret = new HashSet<>();
+        Set<String> ret = new HashSet<>();
         if (key == null) return ret;
         for (Tag tag: tags) {
             if (tag.matchesKey(key)) {
@@ -596,10 +596,10 @@ public class TagCollection implements Iterable<Tag> {
      * primitive is null
      *
      * @param primitive  the primitive
-     * @throws IllegalStateException thrown if this tag collection can't be applied
+     * @throws IllegalStateException if this tag collection can't be applied
      * because there are keys with multiple values
      */
-    public void applyTo(Tagged primitive) throws IllegalStateException {
+    public void applyTo(Tagged primitive) {
         if (primitive == null) return;
         if (! isApplicableToPrimitive())
             throw new IllegalStateException(tr("Tag collection cannot be applied to a primitive because there are keys with multiple values."));
@@ -616,11 +616,11 @@ public class TagCollection implements Iterable<Tag> {
      * Applies this tag collection to a collection of {@link org.openstreetmap.josm.data.osm.OsmPrimitive}s. Does nothing if
      * primitives is null
      *
-     * @param primitives  the collection of primitives
-     * @throws IllegalStateException thrown if this tag collection can't be applied
+     * @param primitives the collection of primitives
+     * @throws IllegalStateException if this tag collection can't be applied
      * because there are keys with multiple values
      */
-    public void applyTo(Collection<? extends Tagged> primitives) throws IllegalStateException{
+    public void applyTo(Collection<? extends Tagged> primitives) {
         if (primitives == null) return;
         if (! isApplicableToPrimitive())
             throw new IllegalStateException(tr("Tag collection cannot be applied to a primitive because there are keys with multiple values."));
@@ -634,10 +634,10 @@ public class TagCollection implements Iterable<Tag> {
      * primitive is null
      *
      * @param primitive  the primitive
-     * @throws IllegalStateException thrown if this tag collection can't be applied
+     * @throws IllegalStateException if this tag collection can't be applied
      * because there are keys with multiple values
      */
-    public void replaceTagsOf(Tagged primitive) throws IllegalStateException {
+    public void replaceTagsOf(Tagged primitive) {
         if (primitive == null) return;
         if (! isApplicableToPrimitive())
             throw new IllegalStateException(tr("Tag collection cannot be applied to a primitive because there are keys with multiple values."));
@@ -652,10 +652,10 @@ public class TagCollection implements Iterable<Tag> {
      * Does nothing if primitives is null
      *
      * @param primitives the collection of primitives
-     * @throws IllegalStateException thrown if this tag collection can't be applied
+     * @throws IllegalStateException if this tag collection can't be applied
      * because there are keys with multiple values
      */
-    public void replaceTagsOf(Collection<? extends Tagged> primitives) throws IllegalStateException {
+    public void replaceTagsOf(Collection<? extends Tagged> primitives) {
         if (primitives == null) return;
         if (! isApplicableToPrimitive())
             throw new IllegalStateException(tr("Tag collection cannot be applied to a primitive because there are keys with multiple values."));
diff --git a/src/org/openstreetmap/josm/data/osm/TigerUtils.java b/src/org/openstreetmap/josm/data/osm/TigerUtils.java
index 270a6fb..8722257 100644
--- a/src/org/openstreetmap/josm/data/osm/TigerUtils.java
+++ b/src/org/openstreetmap/josm/data/osm/TigerUtils.java
@@ -45,7 +45,7 @@ public final class TigerUtils {
     }
 
     public static String combineTags(String name, Set<String> values) {
-        TreeSet<Object> resultSet = new TreeSet<>();
+        Set<Object> resultSet = new TreeSet<>();
         for (String value: values) {
             String[] parts = value.split(":");
             for (String part: parts) {
diff --git a/src/org/openstreetmap/josm/data/osm/Way.java b/src/org/openstreetmap/josm/data/osm/Way.java
index 386f27c..41c2c2c 100644
--- a/src/org/openstreetmap/josm/data/osm/Way.java
+++ b/src/org/openstreetmap/josm/data/osm/Way.java
@@ -126,7 +126,7 @@ public final class Way extends OsmPrimitive implements IWay {
      *
      * @param index the position
      * @return  the node at position <code>index</code>
-     * @exception IndexOutOfBoundsException thrown if <code>index</code> < 0
+     * @throws IndexOutOfBoundsException if <code>index</code> < 0
      * or <code>index</code> >= {@link #getNodesCount()}
      * @since 1862
      */
@@ -167,7 +167,7 @@ public final class Way extends OsmPrimitive implements IWay {
      * @since 4671
      */
     public Set<Node> getNeighbours(Node node) {
-        HashSet<Node> neigh = new HashSet<>();
+        Set<Node> neigh = new HashSet<>();
 
         if (node == null) return neigh;
 
@@ -261,7 +261,7 @@ public final class Way extends OsmPrimitive implements IWay {
      * @throws IllegalArgumentException if id < 0
      * @since 343
      */
-    public Way(long id) throws IllegalArgumentException {
+    public Way(long id) {
         super(id, false);
     }
 
@@ -272,7 +272,7 @@ public final class Way extends OsmPrimitive implements IWay {
      * @throws IllegalArgumentException if id < 0
      * @since 2620
      */
-    public Way(long id, int version) throws IllegalArgumentException {
+    public Way(long id, int version) {
         super(id, version, false);
     }
 
@@ -418,11 +418,11 @@ public final class Way extends OsmPrimitive implements IWay {
      * Adds a node to the end of the list of nodes. Ignored, if n is null.
      *
      * @param n the node. Ignored, if null
-     * @throws IllegalStateException thrown, if this way is marked as incomplete. We can't add a node
+     * @throws IllegalStateException if this way is marked as incomplete. We can't add a node
      * to an incomplete way
      * @since 1313
      */
-    public void addNode(Node n) throws IllegalStateException {
+    public void addNode(Node n) {
         if (n==null) return;
 
         boolean locked = writeLock();
@@ -444,12 +444,12 @@ public final class Way extends OsmPrimitive implements IWay {
      *
      * @param offs the offset
      * @param n the node. Ignored, if null.
-     * @throws IllegalStateException thrown, if this way is marked as incomplete. We can't add a node
+     * @throws IllegalStateException if this way is marked as incomplete. We can't add a node
      * to an incomplete way
-     * @throws IndexOutOfBoundsException thrown if offs is out of bounds
+     * @throws IndexOutOfBoundsException if offs is out of bounds
      * @since 1313
      */
-    public void addNode(int offs, Node n) throws IllegalStateException, IndexOutOfBoundsException {
+    public void addNode(int offs, Node n) throws IndexOutOfBoundsException {
         if (n==null) return;
 
         boolean locked = writeLock();
@@ -684,6 +684,30 @@ public final class Way extends OsmPrimitive implements IWay {
     }
 
     /**
+     * Replies the length of the longest segment of the way, in metres, as computed by {@link LatLon#greatCircleDistance}.
+     * @return The length of the segment, in metres
+     * @since 8320
+     */
+    public double getLongestSegmentLength() {
+        double length = 0;
+        Node lastN = null;
+        for (Node n:nodes) {
+            if (lastN != null) {
+                LatLon lastNcoor = lastN.getCoor();
+                LatLon coor = n.getCoor();
+                if (lastNcoor != null && coor != null) {
+                    double l = coor.greatCircleDistance(lastNcoor);
+                    if (l > length) {
+                        length = l;
+                    }
+                }
+            }
+            lastN = n;
+        }
+        return length;
+    }
+
+    /**
      * Tests if this way is a oneway.
      * @return {@code 1} if the way is a oneway,
      *         {@code -1} if the way is a reversed oneway,
diff --git a/src/org/openstreetmap/josm/data/osm/event/DatasetEventManager.java b/src/org/openstreetmap/josm/data/osm/event/DatasetEventManager.java
index 53396e5..a1fd461 100644
--- a/src/org/openstreetmap/josm/data/osm/event/DatasetEventManager.java
+++ b/src/org/openstreetmap/josm/data/osm/event/DatasetEventManager.java
@@ -44,8 +44,8 @@ public class DatasetEventManager implements MapView.EditLayerChangeListener, Lis
         IN_EDT_CONSOLIDATED}
 
     private static class ListenerInfo {
-        final DataSetListener listener;
-        final boolean consolidate;
+        private final DataSetListener listener;
+        private final boolean consolidate;
 
         public ListenerInfo(DataSetListener listener, boolean consolidate) {
             this.listener = listener;
diff --git a/src/org/openstreetmap/josm/data/osm/event/SelectionEventManager.java b/src/org/openstreetmap/josm/data/osm/event/SelectionEventManager.java
index bddc2b8..0797b72 100644
--- a/src/org/openstreetmap/josm/data/osm/event/SelectionEventManager.java
+++ b/src/org/openstreetmap/josm/data/osm/event/SelectionEventManager.java
@@ -26,7 +26,7 @@ public class SelectionEventManager implements SelectionChangedListener {
     }
 
     private static class ListenerInfo {
-        final SelectionChangedListener listener;
+        private final SelectionChangedListener listener;
 
         public ListenerInfo(SelectionChangedListener listener) {
             this.listener = listener;
diff --git a/src/org/openstreetmap/josm/data/osm/history/History.java b/src/org/openstreetmap/josm/data/osm/history/History.java
index 105c64f..b285843 100644
--- a/src/org/openstreetmap/josm/data/osm/history/History.java
+++ b/src/org/openstreetmap/josm/data/osm/history/History.java
@@ -47,9 +47,8 @@ public class History {
      * @param id the id. > 0 required.
      * @param type the primitive type. Must not be null.
      * @param versions a list of versions. Can be null.
-     * @throws IllegalArgumentException thrown if id <= 0
+     * @throws IllegalArgumentException if id <= 0
      * @throws IllegalArgumentException if type is null
-     *
      */
     protected History(long id, OsmPrimitiveType type, List<HistoryOsmPrimitive> versions) {
         if (id <= 0)
diff --git a/src/org/openstreetmap/josm/data/osm/history/HistoryDataSet.java b/src/org/openstreetmap/josm/data/osm/history/HistoryDataSet.java
index fdbd3cb..d3a57c5 100644
--- a/src/org/openstreetmap/josm/data/osm/history/HistoryDataSet.java
+++ b/src/org/openstreetmap/josm/data/osm/history/HistoryDataSet.java
@@ -8,6 +8,7 @@ import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 import java.util.concurrent.CopyOnWriteArrayList;
 
 import org.openstreetmap.josm.Main;
@@ -138,10 +139,10 @@ public class HistoryDataSet implements LayerChangeListener{
      * @param type the type of the primitive. Must not be null.
      * @return the history. null, if there isn't a history for <code>id</code> and
      * <code>type</code>.
-     * @throws IllegalArgumentException thrown if id <= 0
-     * @throws IllegalArgumentException thrown if type is null
+     * @throws IllegalArgumentException if id <= 0
+     * @throws IllegalArgumentException if type is null
      */
-    public History getHistory(long id, OsmPrimitiveType type) throws IllegalArgumentException{
+    public History getHistory(long id, OsmPrimitiveType type) {
         if (id <= 0)
             throw new IllegalArgumentException(MessageFormat.format("Parameter ''{0}'' > 0 expected, got {1}", "id", id));
         CheckParameterUtil.ensureParameterNotNull(type, "type");
@@ -156,9 +157,9 @@ public class HistoryDataSet implements LayerChangeListener{
      * @param pid the primitive id. Must not be null.
      * @return the history for a primitive with id <code>id</code>. null, if no
      * such history exists
-     * @throws IllegalArgumentException thrown if pid is null
+     * @throws IllegalArgumentException if pid is null
      */
-    public History getHistory(PrimitiveId pid) throws IllegalArgumentException{
+    public History getHistory(PrimitiveId pid) {
         CheckParameterUtil.ensureParameterNotNull(pid, "pid");
         List<HistoryOsmPrimitive> versions = data.get(pid);
         if (versions == null && pid instanceof IPrimitive) {
@@ -186,7 +187,7 @@ public class HistoryDataSet implements LayerChangeListener{
     }
 
     public Collection<Long> getChangesetIds() {
-        final HashSet<Long> ids = new HashSet<>();
+        final Set<Long> ids = new HashSet<>();
         for (Collection<HistoryOsmPrimitive> i : data.values()) {
             for (HistoryOsmPrimitive j : i) {
                 ids.add(j.getChangesetId());
diff --git a/src/org/openstreetmap/josm/data/osm/history/HistoryNode.java b/src/org/openstreetmap/josm/data/osm/history/HistoryNode.java
index 1eae6d3..e77be9c 100644
--- a/src/org/openstreetmap/josm/data/osm/history/HistoryNode.java
+++ b/src/org/openstreetmap/josm/data/osm/history/HistoryNode.java
@@ -30,7 +30,7 @@ public class HistoryNode extends HistoryOsmPrimitive {
      * @param coords the coordinates
      * @throws IllegalArgumentException if preconditions are violated
      */
-    public HistoryNode(long id, long version, boolean visible, User user, long changesetId, Date timestamp, LatLon coords) throws IllegalArgumentException {
+    public HistoryNode(long id, long version, boolean visible, User user, long changesetId, Date timestamp, LatLon coords) {
         this(id, version, visible, user, changesetId, timestamp, coords, true);
     }
 
@@ -49,7 +49,7 @@ public class HistoryNode extends HistoryOsmPrimitive {
      * @throws IllegalArgumentException if preconditions are violated
      * @since 5440
      */
-    public HistoryNode(long id, long version, boolean visible, User user, long changesetId, Date timestamp, LatLon coords, boolean checkHistoricParams) throws IllegalArgumentException {
+    public HistoryNode(long id, long version, boolean visible, User user, long changesetId, Date timestamp, LatLon coords, boolean checkHistoricParams) {
         super(id, version, visible, user, changesetId, timestamp, checkHistoricParams);
         setCoords(coords);
     }
diff --git a/src/org/openstreetmap/josm/data/osm/history/HistoryOsmPrimitive.java b/src/org/openstreetmap/josm/data/osm/history/HistoryOsmPrimitive.java
index 190a2ed..3f26e6e 100644
--- a/src/org/openstreetmap/josm/data/osm/history/HistoryOsmPrimitive.java
+++ b/src/org/openstreetmap/josm/data/osm/history/HistoryOsmPrimitive.java
@@ -55,7 +55,7 @@ public abstract class HistoryOsmPrimitive implements Comparable<HistoryOsmPrimit
      *
      * @throws IllegalArgumentException if preconditions are violated
      */
-    public HistoryOsmPrimitive(long id, long version, boolean visible, User user, long changesetId, Date timestamp) throws IllegalArgumentException {
+    public HistoryOsmPrimitive(long id, long version, boolean visible, User user, long changesetId, Date timestamp) {
         this(id, version, visible, user, changesetId, timestamp, true);
     }
 
@@ -74,7 +74,7 @@ public abstract class HistoryOsmPrimitive implements Comparable<HistoryOsmPrimit
      * @throws IllegalArgumentException if preconditions are violated
      * @since 5440
      */
-    public HistoryOsmPrimitive(long id, long version, boolean visible, User user, long changesetId, Date timestamp, boolean checkHistoricParams) throws IllegalArgumentException {
+    public HistoryOsmPrimitive(long id, long version, boolean visible, User user, long changesetId, Date timestamp, boolean checkHistoricParams) {
         ensurePositiveLong(id, "id");
         ensurePositiveLong(version, "version");
         CheckParameterUtil.ensureParameterNotNull(user, "user");
diff --git a/src/org/openstreetmap/josm/data/osm/history/HistoryRelation.java b/src/org/openstreetmap/josm/data/osm/history/HistoryRelation.java
index 1177056..83ff159 100644
--- a/src/org/openstreetmap/josm/data/osm/history/HistoryRelation.java
+++ b/src/org/openstreetmap/josm/data/osm/history/HistoryRelation.java
@@ -34,7 +34,7 @@ public class HistoryRelation extends HistoryOsmPrimitive{
      *
      * @throws IllegalArgumentException if preconditions are violated
      */
-    public HistoryRelation(long id, long version, boolean visible, User user, long changesetId, Date timestamp) throws IllegalArgumentException {
+    public HistoryRelation(long id, long version, boolean visible, User user, long changesetId, Date timestamp) {
         super(id, version, visible, user, changesetId, timestamp);
     }
 
@@ -52,7 +52,7 @@ public class HistoryRelation extends HistoryOsmPrimitive{
      * @throws IllegalArgumentException if preconditions are violated
      * @since 5440
      */
-    public HistoryRelation(long id, long version, boolean visible, User user, long changesetId, Date timestamp, boolean checkHistoricParams) throws IllegalArgumentException {
+    public HistoryRelation(long id, long version, boolean visible, User user, long changesetId, Date timestamp, boolean checkHistoricParams) {
         super(id, version, visible, user, changesetId, timestamp, checkHistoricParams);
     }
 
@@ -67,7 +67,7 @@ public class HistoryRelation extends HistoryOsmPrimitive{
      * @param timestamp the timestamp (!= null required)
      * @param members list of members for this relation
      *
-     * @throws IllegalArgumentException thrown if preconditions are violated
+     * @throws IllegalArgumentException if preconditions are violated
      */
     public HistoryRelation(long id, long version, boolean visible, User user, long changesetId, Date timestamp, List<RelationMemberData> members) {
         this(id, version, visible, user, changesetId, timestamp);
@@ -107,7 +107,7 @@ public class HistoryRelation extends HistoryOsmPrimitive{
      * replies the idx-th member
      * @param idx the index
      * @return the idx-th member
-     * @throws IndexOutOfBoundsException thrown, if idx is out of bounds
+     * @throws IndexOutOfBoundsException if idx is out of bounds
      */
     public RelationMemberData getRelationMember(int idx) throws IndexOutOfBoundsException  {
         if (idx < 0 || idx >= members.size())
@@ -128,9 +128,9 @@ public class HistoryRelation extends HistoryOsmPrimitive{
      * adds a member to the list of members
      *
      * @param member the member (must not be null)
-     * @exception IllegalArgumentException thrown, if member is null
+     * @throws IllegalArgumentException if member is null
      */
-    public void addMember(RelationMemberData member) throws IllegalArgumentException {
+    public void addMember(RelationMemberData member) {
         CheckParameterUtil.ensureParameterNotNull(member, "member");
         members.add(member);
     }
diff --git a/src/org/openstreetmap/josm/data/osm/history/HistoryWay.java b/src/org/openstreetmap/josm/data/osm/history/HistoryWay.java
index 9afd56c..b52595d 100644
--- a/src/org/openstreetmap/josm/data/osm/history/HistoryWay.java
+++ b/src/org/openstreetmap/josm/data/osm/history/HistoryWay.java
@@ -33,7 +33,7 @@ public class HistoryWay extends HistoryOsmPrimitive {
      * @param timestamp the timestamp (!= null required if {@code checkHistoricParams} is true)
      * @throws IllegalArgumentException if preconditions are violated
      */
-    public HistoryWay(long id, long version, boolean visible, User user, long changesetId, Date timestamp) throws IllegalArgumentException {
+    public HistoryWay(long id, long version, boolean visible, User user, long changesetId, Date timestamp) {
         super(id, version, visible, user, changesetId, timestamp);
     }
 
@@ -51,7 +51,7 @@ public class HistoryWay extends HistoryOsmPrimitive {
      * @throws IllegalArgumentException if preconditions are violated
      * @since 5440
      */
-    public HistoryWay(long id, long version, boolean visible, User user, long changesetId, Date timestamp, boolean checkHistoricParams) throws IllegalArgumentException {
+    public HistoryWay(long id, long version, boolean visible, User user, long changesetId, Date timestamp, boolean checkHistoricParams) {
         super(id, version, visible, user, changesetId, timestamp, checkHistoricParams);
     }
 
@@ -67,7 +67,7 @@ public class HistoryWay extends HistoryOsmPrimitive {
      * @param nodeIdList the node ids (!= null required)
      * @throws IllegalArgumentException if preconditions are violated
      */
-    public HistoryWay(long id, long version, boolean visible, User user, long changesetId, Date timestamp, List<Long> nodeIdList) throws IllegalArgumentException {
+    public HistoryWay(long id, long version, boolean visible, User user, long changesetId, Date timestamp, List<Long> nodeIdList) {
         this(id, version, visible, user, changesetId, timestamp);
         CheckParameterUtil.ensureParameterNotNull(nodeIdList, "nodeIdList");
         this.nodeIds.addAll(nodeIdList);
@@ -94,7 +94,7 @@ public class HistoryWay extends HistoryOsmPrimitive {
      *
      * @param idx the index
      * @return the idx-th node id
-     * @exception IndexOutOfBoundsException thrown, if  idx < 0 || idx >= {#see {@link #getNumNodes()}
+     * @throws IndexOutOfBoundsException if  idx < 0 || idx >= {#see {@link #getNumNodes()}
      */
     public long getNodeId(int idx) throws IndexOutOfBoundsException {
         if (idx < 0 || idx >= nodeIds.size())
diff --git a/src/org/openstreetmap/josm/data/osm/visitor/MergeSourceBuildingVisitor.java b/src/org/openstreetmap/josm/data/osm/visitor/MergeSourceBuildingVisitor.java
index 7564041..ff01fe2 100644
--- a/src/org/openstreetmap/josm/data/osm/visitor/MergeSourceBuildingVisitor.java
+++ b/src/org/openstreetmap/josm/data/osm/visitor/MergeSourceBuildingVisitor.java
@@ -41,10 +41,9 @@ public class MergeSourceBuildingVisitor extends AbstractVisitor {
      * i.e. from {@link DataSet#getSelected()}.
      *
      * @param selectionBase the dataset. Must not be null.
-     * @exception IllegalArgumentException thrown if selectionBase is null
-     *
+     * @throws IllegalArgumentException if selectionBase is null
      */
-    public MergeSourceBuildingVisitor(DataSet selectionBase) throws IllegalArgumentException {
+    public MergeSourceBuildingVisitor(DataSet selectionBase) {
         CheckParameterUtil.ensureParameterNotNull(selectionBase, "selectionBase");
         this.selectionBase = selectionBase;
         this.hull = new DataSet();
diff --git a/src/org/openstreetmap/josm/data/osm/visitor/paint/AbstractMapRenderer.java b/src/org/openstreetmap/josm/data/osm/visitor/paint/AbstractMapRenderer.java
index 538c771..c2317b9 100644
--- a/src/org/openstreetmap/josm/data/osm/visitor/paint/AbstractMapRenderer.java
+++ b/src/org/openstreetmap/josm/data/osm/visitor/paint/AbstractMapRenderer.java
@@ -59,10 +59,10 @@ public abstract class AbstractMapRenderer implements Rendering {
      * @param nc the map viewport. Must not be null.
      * @param isInactiveMode if true, the paint visitor shall render OSM objects such that they
      * look inactive. Example: rendering of data in an inactive layer using light gray as color only.
-     * @throws IllegalArgumentException thrown if {@code g} is null
-     * @throws IllegalArgumentException thrown if {@code nc} is null
+     * @throws IllegalArgumentException if {@code g} is null
+     * @throws IllegalArgumentException if {@code nc} is null
      */
-    public AbstractMapRenderer(Graphics2D g, NavigatableComponent nc, boolean isInactiveMode) throws IllegalArgumentException{
+    public AbstractMapRenderer(Graphics2D g, NavigatableComponent nc, boolean isInactiveMode) {
         CheckParameterUtil.ensureParameterNotNull(g);
         CheckParameterUtil.ensureParameterNotNull(nc);
         this.g = g;
diff --git a/src/org/openstreetmap/josm/data/osm/visitor/paint/MapPaintSettings.java b/src/org/openstreetmap/josm/data/osm/visitor/paint/MapPaintSettings.java
index c4bb639..f6bf8d4 100644
--- a/src/org/openstreetmap/josm/data/osm/visitor/paint/MapPaintSettings.java
+++ b/src/org/openstreetmap/josm/data/osm/visitor/paint/MapPaintSettings.java
@@ -17,7 +17,7 @@ public final class MapPaintSettings implements PreferenceChangedListener {
     /** Preference: should arrows for oneways be displayed */
     private boolean showOnewayArrow;
     private int defaultSegmentWidth;
-    /** Preference: should the segement numbers of ways be displayed */
+    /** Preference: should the segment numbers of ways be displayed */
     private boolean showOrderNumber;
     /** Preference: should only the last arrow of a way be displayed */
     private boolean showHeadArrowOnly;
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 2d7398a..efbb6be 100644
--- a/src/org/openstreetmap/josm/data/osm/visitor/paint/MapRendererFactory.java
+++ b/src/org/openstreetmap/josm/data/osm/visitor/paint/MapRendererFactory.java
@@ -164,9 +164,9 @@ public final class MapRendererFactory {
      * @param renderer the map renderer class. Must not be null.
      * @return true, if {@code Renderer} is already a registered map renderer
      * class
-     * @throws IllegalArgumentException thrown if {@code renderer} is null
+     * @throws IllegalArgumentException if {@code renderer} is null
      */
-    public boolean isRegistered(Class<? extends AbstractMapRenderer> renderer) throws IllegalArgumentException {
+    public boolean isRegistered(Class<? extends AbstractMapRenderer> renderer) {
         CheckParameterUtil.ensureParameterNotNull(renderer);
         for (Descriptor d: descriptors) {
             if (d.getRenderer().getName().equals(renderer.getName())) return true;
@@ -180,10 +180,10 @@ public final class MapRendererFactory {
      * @param renderer the map renderer class. Must not be null.
      * @param displayName the display name to be displayed in UIs (i.e. in the preference dialog)
      * @param description the description
-     * @throws IllegalArgumentException thrown if {@code renderer} is null
-     * @throws IllegalStateException thrown if {@code renderer} is already registered
+     * @throws IllegalArgumentException if {@code renderer} is null
+     * @throws IllegalStateException if {@code renderer} is already registered
      */
-    public void register(Class<? extends AbstractMapRenderer> renderer, String displayName, String description) throws IllegalArgumentException, IllegalStateException{
+    public void register(Class<? extends AbstractMapRenderer> renderer, String displayName, String description) {
         CheckParameterUtil.ensureParameterNotNull(renderer);
         if (isRegistered(renderer))
             throw new IllegalStateException(
@@ -226,11 +226,10 @@ public final class MapRendererFactory {
      * <p>The renderer class must already be registered.</p>
      *
      * @param renderer the map renderer class. Must not be null.
-     * @throws IllegalArgumentException thrown if {@code renderer} is null
-     * @throws IllegalStateException thrown if {@code renderer} isn't registered yet
-     *
+     * @throws IllegalArgumentException if {@code renderer} is null
+     * @throws IllegalStateException if {@code renderer} isn't registered yet
      */
-    public void activate(Class<? extends AbstractMapRenderer> renderer) throws IllegalArgumentException, IllegalStateException{
+    public void activate(Class<? extends AbstractMapRenderer> renderer) {
         CheckParameterUtil.ensureParameterNotNull(renderer);
         if (!isRegistered(renderer))
             throw new IllegalStateException(
@@ -245,10 +244,9 @@ public final class MapRendererFactory {
     /**
      * <p>Activates the default map renderer.</p>
      *
-     * @throws IllegalStateException thrown if the default renderer {@link StyledMapRenderer} isn't registered
-     *
+     * @throws IllegalStateException if the default renderer {@link StyledMapRenderer} isn't registered
      */
-    public void activateDefault() throws IllegalStateException{
+    public void activateDefault() {
         Class<? extends AbstractMapRenderer> defaultRenderer = StyledMapRenderer.class;
         if (!isRegistered(defaultRenderer))
             throw new IllegalStateException(
@@ -260,7 +258,7 @@ public final class MapRendererFactory {
     /**
      * <p>Creates an instance of the currently active renderer.</p>
      *
-     * @throws MapRendererFactoryException thrown if creating an instance fails
+     * @throws MapRendererFactoryException if creating an instance fails
      * @see AbstractMapRenderer#AbstractMapRenderer(Graphics2D, NavigatableComponent, boolean)
      */
     public AbstractMapRenderer createActiveRenderer(Graphics2D g, NavigatableComponent viewport, boolean isInactiveMode) throws MapRendererFactoryException{
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 d77a9da..3df88d8 100644
--- a/src/org/openstreetmap/josm/data/osm/visitor/paint/StyledMapRenderer.java
+++ b/src/org/openstreetmap/josm/data/osm/visitor/paint/StyledMapRenderer.java
@@ -189,9 +189,9 @@ public class StyledMapRenderer extends AbstractMapRenderer {
     }
 
     private static class StyleRecord implements Comparable<StyleRecord> {
-        final ElemStyle style;
-        final OsmPrimitive osm;
-        final int flags;
+        private final ElemStyle style;
+        private final OsmPrimitive osm;
+        private final int flags;
 
         public StyleRecord(ElemStyle style, OsmPrimitive osm, int flags) {
             this.style = style;
@@ -329,8 +329,8 @@ public class StyledMapRenderer extends AbstractMapRenderer {
      * @param nc the map viewport. Must not be null.
      * @param isInactiveMode if true, the paint visitor shall render OSM objects such that they
      * look inactive. Example: rendering of data in an inactive layer using light gray as color only.
-     * @throws IllegalArgumentException thrown if {@code g} is null
-     * @throws IllegalArgumentException thrown if {@code nc} is null
+     * @throws IllegalArgumentException if {@code g} is null
+     * @throws IllegalArgumentException if {@code nc} is null
      */
     public StyledMapRenderer(Graphics2D g, NavigatableComponent nc, boolean isInactiveMode) {
         super(g, nc, isInactiveMode);
@@ -1598,11 +1598,9 @@ public class StyledMapRenderer extends AbstractMapRenderer {
     private class ConcurrentTasksHelper {
 
         private final List<StyleRecord> allStyleElems;
-        private final DataSet data;
 
-        public ConcurrentTasksHelper(List<StyleRecord> allStyleElems, DataSet data) {
+        public ConcurrentTasksHelper(List<StyleRecord> allStyleElems) {
             this.allStyleElems = allStyleElems;
-            this.data = data;
         }
 
         void process(List<? extends OsmPrimitive> prims) {
@@ -1657,7 +1655,7 @@ public class StyledMapRenderer extends AbstractMapRenderer {
 
             final List<StyleRecord> allStyleElems = new ArrayList<>(nodes.size()+ways.size()+relations.size());
 
-            ConcurrentTasksHelper helper = new ConcurrentTasksHelper(allStyleElems, data);
+            ConcurrentTasksHelper helper = new ConcurrentTasksHelper(allStyleElems);
 
             // Need to process all relations first.
             // Reason: Make sure, ElemStyles.getStyleCacheWithRange is
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 46c6c56..46e4df2 100644
--- a/src/org/openstreetmap/josm/data/osm/visitor/paint/WireframeMapRenderer.java
+++ b/src/org/openstreetmap/josm/data/osm/visitor/paint/WireframeMapRenderer.java
@@ -53,7 +53,7 @@ public class WireframeMapRenderer extends AbstractMapRenderer implements Visitor
     protected boolean showOnewayArrow;
     /** Preference: should only the last arrow of a way be displayed */
     protected boolean showHeadArrowOnly;
-    /** Preference: should the segement numbers of ways be displayed */
+    /** Preference: should the segment numbers of ways be displayed */
     protected boolean showOrderNumber;
     /** Preference: should selected nodes be filled */
     protected boolean fillSelectedNode;
@@ -100,8 +100,8 @@ public class WireframeMapRenderer extends AbstractMapRenderer implements Visitor
      * @param nc the map viewport. Must not be null.
      * @param isInactiveMode if true, the paint visitor shall render OSM objects such that they
      * look inactive. Example: rendering of data in an inactive layer using light gray as color only.
-     * @throws IllegalArgumentException thrown if {@code g} is null
-     * @throws IllegalArgumentException thrown if {@code nc} is null
+     * @throws IllegalArgumentException if {@code g} is null
+     * @throws IllegalArgumentException if {@code nc} is null
      */
     public WireframeMapRenderer(Graphics2D g, NavigatableComponent nc, boolean isInactiveMode) {
         super(g, nc, isInactiveMode);
diff --git a/src/org/openstreetmap/josm/data/projection/datum/NTV2GridShift.java b/src/org/openstreetmap/josm/data/projection/datum/NTV2GridShift.java
index 43b9934..0eb7195 100644
--- a/src/org/openstreetmap/josm/data/projection/datum/NTV2GridShift.java
+++ b/src/org/openstreetmap/josm/data/projection/datum/NTV2GridShift.java
@@ -36,6 +36,8 @@ import org.openstreetmap.josm.data.coor.LatLon;
  */
 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 RADIANS_PER_SECOND = 2.0 * Math.PI / 3600.0 / 360.0;
     private double lon;
@@ -44,8 +46,8 @@ public class NTV2GridShift implements Serializable {
     private double latShift;
     private double lonAccuracy;
     private double latAccuracy;
-    boolean latAccuracyAvailable;
-    boolean lonAccuracyAvailable;
+    private boolean latAccuracyAvailable;
+    private boolean lonAccuracyAvailable;
     private String subGridName;
 
     /**
diff --git a/src/org/openstreetmap/josm/data/projection/datum/NTV2GridShiftFile.java b/src/org/openstreetmap/josm/data/projection/datum/NTV2GridShiftFile.java
index 47f0995..fb8efd4 100644
--- a/src/org/openstreetmap/josm/data/projection/datum/NTV2GridShiftFile.java
+++ b/src/org/openstreetmap/josm/data/projection/datum/NTV2GridShiftFile.java
@@ -26,6 +26,9 @@ import java.nio.charset.StandardCharsets;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
+
+import org.openstreetmap.josm.Main;
 
 /**
  * Models the NTv2 format Grid Shift File and exposes methods to shift
@@ -62,6 +65,8 @@ import java.util.List;
  */
 public class NTV2GridShiftFile implements Serializable {
 
+    private static final long serialVersionUID = 1L;
+
     private int overviewHeaderCount;
     private int subGridHeaderCount;
     private int subGridCount;
@@ -83,6 +88,12 @@ public class NTV2GridShiftFile implements Serializable {
     public NTV2GridShiftFile() {
     }
 
+    private void readBytes(InputStream in, byte[] b) throws IOException {
+        if (in.read(b) < b.length) {
+            Main.error("Failed to read expected amount of bytes ("+ b.length +") from stream");
+        }
+    }
+
     /**
      * Load a Grid Shift File from an InputStream. The Grid Shift node
      * data is stored in Java arrays, which will occupy about the same memory
@@ -95,17 +106,17 @@ public class NTV2GridShiftFile implements Serializable {
      * @param loadAccuracy is Accuracy data to be loaded as well as shift data?
      * @throws IOException
      */
-    public void loadGridShiftFile(InputStream in, boolean loadAccuracy ) throws IOException {
+    public void loadGridShiftFile(InputStream in, boolean loadAccuracy) throws IOException {
         byte[] b8 = new byte[8];
         boolean bigEndian = true;
         fromEllipsoid = "";
         toEllipsoid = "";
         topLevelSubGrid = null;
-        in.read(b8);
+        readBytes(in, b8);
         String overviewHeaderCountId = new String(b8, StandardCharsets.UTF_8);
         if (!"NUM_OREC".equals(overviewHeaderCountId))
             throw new IllegalArgumentException("Input file is not an NTv2 grid shift file");
-        in.read(b8);
+        readBytes(in, b8);
         overviewHeaderCount = NTV2Util.getIntBE(b8, 0);
         if (overviewHeaderCount == 11) {
             bigEndian = true;
@@ -116,36 +127,36 @@ public class NTV2GridShiftFile implements Serializable {
             } else
                 throw new IllegalArgumentException("Input file is not an NTv2 grid shift file");
         }
-        in.read(b8);
-        in.read(b8);
+        readBytes(in, b8);
+        readBytes(in, b8);
         subGridHeaderCount = NTV2Util.getInt(b8, bigEndian);
-        in.read(b8);
-        in.read(b8);
+        readBytes(in, b8);
+        readBytes(in, b8);
         subGridCount = NTV2Util.getInt(b8, bigEndian);
         NTV2SubGrid[] subGrid = new NTV2SubGrid[subGridCount];
-        in.read(b8);
-        in.read(b8);
+        readBytes(in, b8);
+        readBytes(in, b8);
         shiftType = new String(b8, StandardCharsets.UTF_8);
-        in.read(b8);
-        in.read(b8);
+        readBytes(in, b8);
+        readBytes(in, b8);
         version = new String(b8, StandardCharsets.UTF_8);
-        in.read(b8);
-        in.read(b8);
+        readBytes(in, b8);
+        readBytes(in, b8);
         fromEllipsoid = new String(b8, StandardCharsets.UTF_8);
-        in.read(b8);
-        in.read(b8);
+        readBytes(in, b8);
+        readBytes(in, b8);
         toEllipsoid = new String(b8, StandardCharsets.UTF_8);
-        in.read(b8);
-        in.read(b8);
+        readBytes(in, b8);
+        readBytes(in, b8);
         fromSemiMajorAxis = NTV2Util.getDouble(b8, bigEndian);
-        in.read(b8);
-        in.read(b8);
+        readBytes(in, b8);
+        readBytes(in, b8);
         fromSemiMinorAxis = NTV2Util.getDouble(b8, bigEndian);
-        in.read(b8);
-        in.read(b8);
+        readBytes(in, b8);
+        readBytes(in, b8);
         toSemiMajorAxis = NTV2Util.getDouble(b8, bigEndian);
-        in.read(b8);
-        in.read(b8);
+        readBytes(in, b8);
+        readBytes(in, b8);
         toSemiMinorAxis = NTV2Util.getDouble(b8, bigEndian);
 
         for (int i = 0; i < subGridCount; i++) {
@@ -163,7 +174,7 @@ public class NTV2GridShiftFile implements Serializable {
      */
     private NTV2SubGrid[] createSubGridTree(NTV2SubGrid[] subGrid) {
         int topLevelCount = 0;
-        HashMap<String, List<NTV2SubGrid>> subGridMap = new HashMap<>();
+        Map<String, List<NTV2SubGrid>> subGridMap = new HashMap<>();
         for (int i = 0; i < subGrid.length; i++) {
             if ("NONE".equalsIgnoreCase(subGrid[i].getParentSubGridName())) {
                 topLevelCount++;
@@ -318,5 +329,4 @@ public class NTV2GridShiftFile implements Serializable {
     public String getToEllipsoid() {
         return toEllipsoid;
     }
-
 }
diff --git a/src/org/openstreetmap/josm/data/projection/datum/NTV2SubGrid.java b/src/org/openstreetmap/josm/data/projection/datum/NTV2SubGrid.java
index a3d7680..bd7c3f7 100644
--- a/src/org/openstreetmap/josm/data/projection/datum/NTV2SubGrid.java
+++ b/src/org/openstreetmap/josm/data/projection/datum/NTV2SubGrid.java
@@ -38,6 +38,8 @@ import org.openstreetmap.josm.tools.Utils;
  */
 public class NTV2SubGrid implements Cloneable, Serializable {
 
+    private static final long serialVersionUID = 1L;
+
     private String subGridName;
     private String parentSubGridName;
     private String created;
@@ -57,7 +59,6 @@ public class NTV2SubGrid implements Cloneable, Serializable {
     private float[] latAccuracy;
     private float[] lonAccuracy;
 
-    boolean bigEndian;
     private NTV2SubGrid[] subGrid;
 
     /**
@@ -73,40 +74,40 @@ public class NTV2SubGrid implements Cloneable, Serializable {
         byte[] b8 = new byte[8];
         byte[] b4 = new byte[4];
         byte[] b1 = new byte[1];
-        in.read(b8);
-        in.read(b8);
+        readBytes(in, b8);
+        readBytes(in, b8);
         subGridName = new String(b8, StandardCharsets.UTF_8).trim();
-        in.read(b8);
-        in.read(b8);
+        readBytes(in, b8);
+        readBytes(in, b8);
         parentSubGridName = new String(b8, StandardCharsets.UTF_8).trim();
-        in.read(b8);
-        in.read(b8);
+        readBytes(in, b8);
+        readBytes(in, b8);
         created = new String(b8, StandardCharsets.UTF_8);
-        in.read(b8);
-        in.read(b8);
+        readBytes(in, b8);
+        readBytes(in, b8);
         updated = new String(b8, StandardCharsets.UTF_8);
-        in.read(b8);
-        in.read(b8);
+        readBytes(in, b8);
+        readBytes(in, b8);
         minLat = NTV2Util.getDouble(b8, bigEndian);
-        in.read(b8);
-        in.read(b8);
+        readBytes(in, b8);
+        readBytes(in, b8);
         maxLat = NTV2Util.getDouble(b8, bigEndian);
-        in.read(b8);
-        in.read(b8);
+        readBytes(in, b8);
+        readBytes(in, b8);
         minLon = NTV2Util.getDouble(b8, bigEndian);
-        in.read(b8);
-        in.read(b8);
+        readBytes(in, b8);
+        readBytes(in, b8);
         maxLon = NTV2Util.getDouble(b8, bigEndian);
-        in.read(b8);
-        in.read(b8);
+        readBytes(in, b8);
+        readBytes(in, b8);
         latInterval = NTV2Util.getDouble(b8, bigEndian);
-        in.read(b8);
-        in.read(b8);
+        readBytes(in, b8);
+        readBytes(in, b8);
         lonInterval = NTV2Util.getDouble(b8, bigEndian);
         lonColumnCount = 1 + (int)((maxLon - minLon) / lonInterval);
         latRowCount = 1 + (int)((maxLat - minLat) / latInterval);
-        in.read(b8);
-        in.read(b8);
+        readBytes(in, b8);
+        readBytes(in, b8);
         nodeCount = NTV2Util.getInt(b8, bigEndian);
         if (nodeCount != lonColumnCount * latRowCount)
             throw new IllegalStateException("SubGrid " + subGridName + " has inconsistent grid dimesions");
@@ -121,33 +122,39 @@ public class NTV2SubGrid implements Cloneable, Serializable {
             // Read the grid file byte after byte. This is a workaround about a bug in
             // certain VM which are not able to read byte blocks when the resource file is
             // in a .jar file (Pieren)
-            in.read(b1); b4[0] = b1[0];
-            in.read(b1); b4[1] = b1[0];
-            in.read(b1); b4[2] = b1[0];
-            in.read(b1); b4[3] = b1[0];
+            readBytes(in, b1); b4[0] = b1[0];
+            readBytes(in, b1); b4[1] = b1[0];
+            readBytes(in, b1); b4[2] = b1[0];
+            readBytes(in, b1); b4[3] = b1[0];
             latShift[i] = NTV2Util.getFloat(b4, bigEndian);
-            in.read(b1); b4[0] = b1[0];
-            in.read(b1); b4[1] = b1[0];
-            in.read(b1); b4[2] = b1[0];
-            in.read(b1); b4[3] = b1[0];
+            readBytes(in, b1); b4[0] = b1[0];
+            readBytes(in, b1); b4[1] = b1[0];
+            readBytes(in, b1); b4[2] = b1[0];
+            readBytes(in, b1); b4[3] = b1[0];
             lonShift[i] = NTV2Util.getFloat(b4, bigEndian);
-            in.read(b1); b4[0] = b1[0];
-            in.read(b1); b4[1] = b1[0];
-            in.read(b1); b4[2] = b1[0];
-            in.read(b1); b4[3] = b1[0];
+            readBytes(in, b1); b4[0] = b1[0];
+            readBytes(in, b1); b4[1] = b1[0];
+            readBytes(in, b1); b4[2] = b1[0];
+            readBytes(in, b1); b4[3] = b1[0];
             if (loadAccuracy) {
                 latAccuracy[i] = NTV2Util.getFloat(b4, bigEndian);
             }
-            in.read(b1); b4[0] = b1[0];
-            in.read(b1); b4[1] = b1[0];
-            in.read(b1); b4[2] = b1[0];
-            in.read(b1); b4[3] = b1[0];
+            readBytes(in, b1); b4[0] = b1[0];
+            readBytes(in, b1); b4[1] = b1[0];
+            readBytes(in, b1); b4[2] = b1[0];
+            readBytes(in, b1); b4[3] = b1[0];
             if (loadAccuracy) {
                 lonAccuracy[i] = NTV2Util.getFloat(b4, bigEndian);
             }
         }
     }
 
+    private void readBytes(InputStream in, byte[] b) throws IOException {
+        if (in.read(b) < b.length) {
+            Main.error("Failed to read expected amount of bytes ("+ b.length +") from stream");
+        }
+    }
+
     /**
      * Tests if a specified coordinate is within this Sub Grid
      * or one of its Sub Grids. If the coordinate is outside
@@ -192,27 +199,27 @@ public class NTV2SubGrid implements Cloneable, Serializable {
     /**
      * Bi-Linear interpolation of four nearest node values as described in
      * 'GDAit Software Architecture Manual' produced by the <a
-     * href='http://www.sli.unimelb.edu.au/gda94'>Geomatics
-     * Department of the University of Melbourne</a>
+     * href='http://www.dtpli.vic.gov.au/property-and-land-titles/geodesy/geocentric-datum-of-australia-1994-gda94/gda94-useful-tools'>
+     * Geomatics Department of the University of Melbourne</a>
      * @param a value at the A node
      * @param b value at the B node
      * @param c value at the C node
      * @param d value at the D node
-     * @param X Longitude factor
-     * @param Y Latitude factor
+     * @param x Longitude factor
+     * @param y Latitude factor
      * @return interpolated value
      */
-    private final double interpolate(float a, float b, float c, float d, double X, double Y) {
-        return a + (((double)b - (double)a) * X) + (((double)c - (double)a) * Y) +
-        (((double)a + (double)d - b - c) * X * Y);
+    private final double interpolate(float a, float b, float c, float d, double x, double y) {
+        return a + (((double)b - (double)a) * x) + (((double)c - (double)a) * y) +
+        (((double)a + (double)d - b - c) * x * y);
     }
 
     /**
      * Interpolate shift and accuracy values for a coordinate in the 'from' datum
      * of the GridShiftFile. The algorithm is described in
      * 'GDAit Software Architecture Manual' produced by the <a
-     * href='http://www.sli.unimelb.edu.au/gda94'>Geomatics
-     * Department of the University of Melbourne</a>
+     * href='http://www.dtpli.vic.gov.au/property-and-land-titles/geodesy/geocentric-datum-of-australia-1994-gda94/gda94-useful-tools'>
+     * Geomatics Department of the University of Melbourne</a>
      * <p>This method is thread safe for both memory based and file based node data.
      * @param gs GridShift object containing the coordinate to shift and the shift values
      * @return the GridShift object supplied, with values updated.
diff --git a/src/org/openstreetmap/josm/data/validation/OsmValidator.java b/src/org/openstreetmap/josm/data/validation/OsmValidator.java
index 80ffd91..0ed6ffb 100644
--- a/src/org/openstreetmap/josm/data/validation/OsmValidator.java
+++ b/src/org/openstreetmap/josm/data/validation/OsmValidator.java
@@ -39,6 +39,7 @@ import org.openstreetmap.josm.data.validation.tests.DuplicatedWayNodes;
 import org.openstreetmap.josm.data.validation.tests.Highways;
 import org.openstreetmap.josm.data.validation.tests.InternetTags;
 import org.openstreetmap.josm.data.validation.tests.Lanes;
+import org.openstreetmap.josm.data.validation.tests.LongSegment;
 import org.openstreetmap.josm.data.validation.tests.MapCSSTagChecker;
 import org.openstreetmap.josm.data.validation.tests.MultipolygonTest;
 import org.openstreetmap.josm.data.validation.tests.NameMismatch;
@@ -124,6 +125,7 @@ public class OsmValidator implements LayerChangeListener {
         ConditionalKeys.class, // 3200 .. 3299
         InternetTags.class, // 3300 .. 3399
         ApiCapabilitiesTest.class, // 3400 .. 3499
+        LongSegment.class, // 3500 .. 3599
     };
 
     private static Map<String, Test> allTestsMap;
diff --git a/src/org/openstreetmap/josm/data/validation/PaintVisitor.java b/src/org/openstreetmap/josm/data/validation/PaintVisitor.java
index 33e6097..e6b9344 100644
--- a/src/org/openstreetmap/josm/data/validation/PaintVisitor.java
+++ b/src/org/openstreetmap/josm/data/validation/PaintVisitor.java
@@ -32,7 +32,7 @@ public class PaintVisitor extends AbstractVisitor implements ValidatorVisitor {
     private Color color;
     /** Is the error selected ? */
     private boolean selected;
-    
+
     private final Set<PaintedPoint> paintedPoints = new HashSet<>();
     private final Set<PaintedSegment> paintedSegments = new HashSet<>();
 
@@ -54,7 +54,7 @@ public class PaintVisitor extends AbstractVisitor implements ValidatorVisitor {
             this.p1 = p1;
             this.color = color;
         }
-        
+
         @Override
         public int hashCode() {
             final int prime = 31;
@@ -63,7 +63,7 @@ public class PaintVisitor extends AbstractVisitor implements ValidatorVisitor {
             result = prime * result + color.hashCode();
             return result;
         }
-        
+
         @Override
         public boolean equals(Object obj) {
             if (this == obj)
@@ -82,8 +82,8 @@ public class PaintVisitor extends AbstractVisitor implements ValidatorVisitor {
     }
 
     protected static class PaintedSegment extends PaintedPoint {
-        final LatLon p2;
-        
+        private final LatLon p2;
+
         public PaintedSegment(LatLon p1, LatLon p2, Color color) {
             super(p1, color);
             this.p2 = p2;
@@ -132,11 +132,11 @@ public class PaintVisitor extends AbstractVisitor implements ValidatorVisitor {
      */
     protected void drawNode(Node n, Color color) {
         PaintedPoint pp = new PaintedPoint(n.getCoor(), color);
-        
+
         if (!paintedPoints.contains(pp)) {
             Point p = mv.getPoint(n);
             g.setColor(color);
-            
+
             if (selected) {
                 g.fillOval(p.x - 5, p.y - 5, 10, 10);
             } else {
@@ -155,7 +155,7 @@ public class PaintVisitor extends AbstractVisitor implements ValidatorVisitor {
      */
     protected void drawSegment(Point p1, Point p2, Color color) {
         g.setColor(color);
-        
+
         double t = Math.atan2(p2.x - p1.x, p2.y - p1.y);
         double cosT = 5 * Math.cos(t);
         double sinT = 5 * Math.sin(t);
@@ -271,7 +271,7 @@ public class PaintVisitor extends AbstractVisitor implements ValidatorVisitor {
             lastN = n;
         }
     }
-    
+
     /**
      * Clears the internal painted objects collections.
      */
diff --git a/src/org/openstreetmap/josm/data/validation/routines/DomainValidator.java b/src/org/openstreetmap/josm/data/validation/routines/DomainValidator.java
index a5d45fa..3b7b804 100644
--- a/src/org/openstreetmap/josm/data/validation/routines/DomainValidator.java
+++ b/src/org/openstreetmap/josm/data/validation/routines/DomainValidator.java
@@ -1001,4 +1001,4 @@ public class DomainValidator extends AbstractValidator {
         Arrays.sort(IDN_TLDS);
         Arrays.sort(LOCAL_TLDS);
     }
-}
\ No newline at end of file
+}
diff --git a/src/org/openstreetmap/josm/data/validation/tests/ConditionalKeys.java b/src/org/openstreetmap/josm/data/validation/tests/ConditionalKeys.java
index 8d215eb..d4f0eb2 100644
--- a/src/org/openstreetmap/josm/data/validation/tests/ConditionalKeys.java
+++ b/src/org/openstreetmap/josm/data/validation/tests/ConditionalKeys.java
@@ -25,12 +25,12 @@ import org.openstreetmap.josm.tools.Utils;
  */
 public class ConditionalKeys extends Test.TagTest {
 
-    final OpeningHourTest openingHourTest = new OpeningHourTest();
-    static final Set<String> RESTRICTION_TYPES = new HashSet<>(Arrays.asList("oneway", "toll", "noexit", "maxspeed", "minspeed", "maxstay",
+    private final OpeningHourTest openingHourTest = new OpeningHourTest();
+    private static final Set<String> RESTRICTION_TYPES = new HashSet<>(Arrays.asList("oneway", "toll", "noexit", "maxspeed", "minspeed", "maxstay",
             "maxweight", "maxaxleload", "maxheight", "maxwidth", "maxlength", "overtaking", "maxgcweight", "maxgcweightrating", "fee"));
-    static final Set<String> RESTRICTION_VALUES = new HashSet<>(Arrays.asList("yes", "official", "designated", "destination",
+    private static final Set<String> RESTRICTION_VALUES = new HashSet<>(Arrays.asList("yes", "official", "designated", "destination",
             "delivery", "permissive", "private", "agricultural", "forestry", "no"));
-    static final Set<String> TRANSPORT_MODES = new HashSet<>(Arrays.asList("access", "foot", "ski", "inline_skates", "ice_skates",
+    private static final Set<String> TRANSPORT_MODES = new HashSet<>(Arrays.asList("access", "foot", "ski", "inline_skates", "ice_skates",
             "horse", "vehicle", "bicycle", "carriage", "trailer", "caravan", "motor_vehicle", "motorcycle", "moped", "mofa",
             "motorcar", "motorhome", "psv", "bus", "taxi", "tourist_bus", "goods", "hgv", "agricultural", "atv", "snowmobile"
             /*,"hov","emergency","hazmat","disabled"*/));
diff --git a/src/org/openstreetmap/josm/data/validation/tests/DuplicateNode.java b/src/org/openstreetmap/josm/data/validation/tests/DuplicateNode.java
index 2d9a365..6c9ed09 100644
--- a/src/org/openstreetmap/josm/data/validation/tests/DuplicateNode.java
+++ b/src/org/openstreetmap/josm/data/validation/tests/DuplicateNode.java
@@ -385,7 +385,7 @@ public class DuplicateNode extends Test {
     public Command fixError(TestError testError) {
         if (!isFixable(testError)) return null;
         Collection<OsmPrimitive> sel = new LinkedList<>(testError.getPrimitives());
-        LinkedHashSet<Node> nodes = new LinkedHashSet<>(OsmPrimitive.getFilteredList(sel, Node.class));
+        Set<Node> nodes = new LinkedHashSet<>(OsmPrimitive.getFilteredList(sel, Node.class));
 
         // Filter nodes that have already been deleted (see #5764 and #5773)
         for (Iterator<Node> it = nodes.iterator(); it.hasNext();) {
diff --git a/src/org/openstreetmap/josm/data/validation/tests/DuplicateRelation.java b/src/org/openstreetmap/josm/data/validation/tests/DuplicateRelation.java
index b1f7b93..86cd489 100644
--- a/src/org/openstreetmap/josm/data/validation/tests/DuplicateRelation.java
+++ b/src/org/openstreetmap/josm/data/validation/tests/DuplicateRelation.java
@@ -228,7 +228,7 @@ public class DuplicateRelation extends Test {
     public Command fixError(TestError testError) {
         if (testError.getCode() == SAME_RELATION) return null;
         Collection<? extends OsmPrimitive> sel = testError.getPrimitives();
-        HashSet<Relation> relFix = new HashSet<>();
+        Set<Relation> relFix = new HashSet<>();
 
         for (OsmPrimitive osm : sel)
             if (osm instanceof Relation && !osm.isDeleted()) {
@@ -291,7 +291,7 @@ public class DuplicateRelation extends Test {
 
         // We fix it only if there is no more than one relation that is relation member.
         Collection<? extends OsmPrimitive> sel = testError.getPrimitives();
-        HashSet<Relation> relations = new HashSet<>();
+        Set<Relation> relations = new HashSet<>();
 
         for (OsmPrimitive osm : sel)
             if (osm instanceof Relation) {
diff --git a/src/org/openstreetmap/josm/data/validation/tests/DuplicateWay.java b/src/org/openstreetmap/josm/data/validation/tests/DuplicateWay.java
index f8af0f3..3d3e34d 100644
--- a/src/org/openstreetmap/josm/data/validation/tests/DuplicateWay.java
+++ b/src/org/openstreetmap/josm/data/validation/tests/DuplicateWay.java
@@ -236,7 +236,7 @@ public class DuplicateWay extends Test {
     @Override
     public Command fixError(TestError testError) {
         Collection<? extends OsmPrimitive> sel = testError.getPrimitives();
-        HashSet<Way> ways = new HashSet<>();
+        Set<Way> ways = new HashSet<>();
 
         for (OsmPrimitive osm : sel) {
             if (osm instanceof Way && !osm.isDeleted()) {
@@ -304,7 +304,7 @@ public class DuplicateWay extends Test {
 
         // We fix it only if there is no more than one way that is relation member.
         Collection<? extends OsmPrimitive> sel = testError.getPrimitives();
-        HashSet<Way> ways = new HashSet<>();
+        Set<Way> ways = new HashSet<>();
 
         for (OsmPrimitive osm : sel) {
             if (osm instanceof Way) {
diff --git a/src/org/openstreetmap/josm/data/validation/tests/Highways.java b/src/org/openstreetmap/josm/data/validation/tests/Highways.java
index 767c4dc..a692b70 100644
--- a/src/org/openstreetmap/josm/data/validation/tests/Highways.java
+++ b/src/org/openstreetmap/josm/data/validation/tests/Highways.java
@@ -11,6 +11,7 @@ import java.util.Iterator;
 import java.util.List;
 import java.util.Locale;
 import java.util.Map;
+import java.util.Set;
 
 import org.openstreetmap.josm.command.ChangePropertyCommand;
 import org.openstreetmap.josm.command.Command;
@@ -56,12 +57,12 @@ public class Highways extends Test {
 
     protected static final List<String> ISO_COUNTRIES = Arrays.asList(Locale.getISOCountries());
 
-    boolean leftByPedestrians = false;
-    boolean leftByCyclists = false;
-    boolean leftByCars = false;
-    int pedestrianWays = 0;
-    int cyclistWays = 0;
-    int carsWays = 0;
+    private boolean leftByPedestrians = false;
+    private boolean leftByCyclists = false;
+    private boolean leftByCars = false;
+    private int pedestrianWays = 0;
+    private int cyclistWays = 0;
+    private int carsWays = 0;
 
     /**
      * Constructs a new {@code Highways} test.
@@ -151,7 +152,7 @@ public class Highways extends Test {
             return true;
         }
 
-        final HashSet<OsmPrimitive> referrers = new HashSet<>();
+        final Set<OsmPrimitive> referrers = new HashSet<>();
 
         if (way.isClosed()) {
             // for closed way we need to check all adjacent ways
diff --git a/src/org/openstreetmap/josm/data/validation/tests/Lanes.java b/src/org/openstreetmap/josm/data/validation/tests/Lanes.java
index 3c0af87..aadc8cf 100644
--- a/src/org/openstreetmap/josm/data/validation/tests/Lanes.java
+++ b/src/org/openstreetmap/josm/data/validation/tests/Lanes.java
@@ -46,7 +46,7 @@ public class Lanes extends Test.TagTest {
         final Collection<String> keysForPattern = new ArrayList<>(Utils.filter(p.keySet(),
                 Predicates.stringContainsPattern(Pattern.compile(":" + lanesKey + "$"))));
         keysForPattern.removeAll(Arrays.asList(BLACKLIST));
-        if (keysForPattern.size() < 1) {
+        if (keysForPattern.isEmpty()) {
             // nothing to check
             return;
         }
diff --git a/src/org/openstreetmap/josm/data/validation/tests/LongSegment.java b/src/org/openstreetmap/josm/data/validation/tests/LongSegment.java
new file mode 100644
index 0000000..a297a9a
--- /dev/null
+++ b/src/org/openstreetmap/josm/data/validation/tests/LongSegment.java
@@ -0,0 +1,53 @@
+// License: GPL. See LICENSE file for details.
+package org.openstreetmap.josm.data.validation.tests;
+
+import static org.openstreetmap.josm.tools.I18n.tr;
+
+import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.data.osm.OsmPrimitive;
+import org.openstreetmap.josm.data.osm.Way;
+import org.openstreetmap.josm.data.validation.Severity;
+import org.openstreetmap.josm.data.validation.Test;
+import org.openstreetmap.josm.data.validation.TestError;
+import org.openstreetmap.josm.gui.progress.ProgressMonitor;
+
+/**
+ * Checks for untagged ways
+ *
+ * @since 8320
+ */
+public class LongSegment extends Test {
+
+    /** Long segment error */
+    protected static final int LONG_SEGMENT    = 3501;
+    /** Maximum segment length for this test */
+    protected int maxlength;
+
+    /**
+     * Constructor
+     */
+    public LongSegment() {
+        super(tr("Long segments"),
+              tr("This tests for long way segments, which are usually errors."));
+    }
+
+    @Override
+    public void visit(Way w) {
+        Double length = w.getLongestSegmentLength();
+        if(length > maxlength) {
+            length /= 1000.0;
+            errors.add(new TestError(this, Severity.WARNING, tr("Very long segment of {0} kilometers", length.intValue()), LONG_SEGMENT, w));
+        }
+    }
+
+    @Override
+    public void startTest(ProgressMonitor monitor) {
+        super.startTest(monitor);
+        maxlength = Main.pref.getInteger("validator.maximum.segment.length", 15000);
+    }
+
+    @Override
+    public boolean isPrimitiveUsable(OsmPrimitive p) {
+        return p.isUsable() && p instanceof Way && ((Way) p).getNodesCount() > 1; // test only Ways with at least 2 nodes
+    }
+}
diff --git a/src/org/openstreetmap/josm/data/validation/tests/MapCSSTagChecker.java b/src/org/openstreetmap/josm/data/validation/tests/MapCSSTagChecker.java
index 29b36c6..f3af884 100644
--- a/src/org/openstreetmap/josm/data/validation/tests/MapCSSTagChecker.java
+++ b/src/org/openstreetmap/josm/data/validation/tests/MapCSSTagChecker.java
@@ -7,6 +7,7 @@ import java.io.BufferedReader;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.Reader;
+import java.io.StringReader;
 import java.text.MessageFormat;
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -143,7 +144,7 @@ public class MapCSSTagChecker extends Test.TagTest {
     /**
      * Represents a fix to a validation test. The fixing {@link Command} can be obtained by {@link #createCommand(OsmPrimitive, Selector)}.
      */
-    static abstract class FixCommand {
+    abstract static class FixCommand {
         /**
          * Creates the fixing {@link Command} for the given primitive. The {@code matchingSelector} is used to
          * evaluate placeholders (cf. {@link org.openstreetmap.josm.data.validation.tests.MapCSSTagChecker.TagCheck#insertArguments(Selector, String, OsmPrimitive)}).
@@ -241,7 +242,7 @@ public class MapCSSTagChecker extends Test.TagTest {
             this.rule = rule;
         }
 
-        static final String POSSIBLE_THROWS = possibleThrows();
+        private static final String POSSIBLE_THROWS = possibleThrows();
 
         static final String possibleThrows() {
             StringBuffer sb = new StringBuffer();
@@ -316,13 +317,13 @@ public class MapCSSTagChecker extends Test.TagTest {
 
         static List<TagCheck> readMapCSS(Reader css) throws ParseException {
             CheckParameterUtil.ensureParameterNotNull(css, "css");
-            return readMapCSS(new MapCSSParser(css));
-        }
 
-        static List<TagCheck> readMapCSS(MapCSSParser css) throws ParseException {
-            CheckParameterUtil.ensureParameterNotNull(css, "css");
             final MapCSSStyleSource source = new MapCSSStyleSource("");
-            css.sheet(source);
+            final MapCSSParser preprocessor = new MapCSSParser(css, MapCSSParser.LexicalState.PREPROCESSOR);
+
+            css = new StringReader(preprocessor.pp_root(source));
+            final MapCSSParser parser = new MapCSSParser(css, MapCSSParser.LexicalState.DEFAULT);
+            parser.sheet(source);
             assert source.getErrors().isEmpty();
             // Ignore "meta" rule(s) from external rules of JOSM wiki
             removeMetaRules(source);
diff --git a/src/org/openstreetmap/josm/data/validation/tests/MultipolygonTest.java b/src/org/openstreetmap/josm/data/validation/tests/MultipolygonTest.java
index 961f3c8..552ba38 100644
--- a/src/org/openstreetmap/josm/data/validation/tests/MultipolygonTest.java
+++ b/src/org/openstreetmap/josm/data/validation/tests/MultipolygonTest.java
@@ -128,7 +128,7 @@ public class MultipolygonTest extends Test {
     public void visit(Way w) {
         if (!w.isArea() && ElemStyles.hasOnlyAreaElemStyle(w)) {
             List<Node> nodes = w.getNodes();
-            if (nodes.size()<1) return; // fix zero nodes bug
+            if (nodes.isEmpty()) return; // fix zero nodes bug
             for (String key : keysCheckedByAnotherTest) {
                 if (w.hasKey(key)) {
                     return;
diff --git a/src/org/openstreetmap/josm/data/validation/tests/NameMismatch.java b/src/org/openstreetmap/josm/data/validation/tests/NameMismatch.java
index 9363187..7d6fe75 100644
--- a/src/org/openstreetmap/josm/data/validation/tests/NameMismatch.java
+++ b/src/org/openstreetmap/josm/data/validation/tests/NameMismatch.java
@@ -5,6 +5,7 @@ import static org.openstreetmap.josm.tools.I18n.tr;
 
 import java.util.HashSet;
 import java.util.Map.Entry;
+import java.util.Set;
 import java.util.regex.Pattern;
 
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
@@ -59,7 +60,7 @@ public class NameMismatch extends Test.TagTest {
      */
     @Override
     public void check(OsmPrimitive p) {
-        HashSet<String> names = new HashSet<>();
+        Set<String> names = new HashSet<>();
 
         for (Entry<String, String> entry : p.getKeys().entrySet()) {
             if (entry.getKey().startsWith("name:")) {
diff --git a/src/org/openstreetmap/josm/data/validation/tests/OpeningHourTest.java b/src/org/openstreetmap/josm/data/validation/tests/OpeningHourTest.java
index aeede47..e0c7326 100644
--- a/src/org/openstreetmap/josm/data/validation/tests/OpeningHourTest.java
+++ b/src/org/openstreetmap/josm/data/validation/tests/OpeningHourTest.java
@@ -77,7 +77,7 @@ public class OpeningHourTest extends Test.TagTest {
 
     static enum CheckMode {
         TIME_RANGE(0), POINTS_IN_TIME(1), BOTH(2);
-        final int code;
+        private final int code;
 
         CheckMode(int code) {
             this.code = code;
@@ -107,8 +107,9 @@ public class OpeningHourTest extends Test.TagTest {
      * An error concerning invalid syntax for an "opening_hours"-like tag.
      */
     public class OpeningHoursTestError {
-        final Severity severity;
-        final String message, prettifiedValue;
+        private final Severity severity;
+        private final String message;
+        private final String prettifiedValue;
 
         /**
          * Constructs a new {@code OpeningHoursTestError} with a known pretiffied value.
diff --git a/src/org/openstreetmap/josm/data/validation/tests/RelationChecker.java b/src/org/openstreetmap/josm/data/validation/tests/RelationChecker.java
index 17141c3..403f47d 100644
--- a/src/org/openstreetmap/josm/data/validation/tests/RelationChecker.java
+++ b/src/org/openstreetmap/josm/data/validation/tests/RelationChecker.java
@@ -9,6 +9,7 @@ import java.util.Collection;
 import java.util.EnumSet;
 import java.util.HashMap;
 import java.util.LinkedList;
+import java.util.List;
 import java.util.Map;
 
 import org.openstreetmap.josm.command.Command;
@@ -83,11 +84,11 @@ public class RelationChecker extends Test {
     }
 
     private static class RolePreset {
-        public RolePreset(LinkedList<Role> roles, String name) {
+        public RolePreset(List<Role> roles, String name) {
             this.roles = roles;
             this.name = name;
         }
-        private final LinkedList<Role> roles;
+        private final List<Role> roles;
         private final String name;
     }
 
@@ -150,7 +151,7 @@ public class RelationChecker extends Test {
             if (matches && r != null) {
                 for(Role role: r.roles) {
                     String key = role.key;
-                    LinkedList<Role> roleGroup = null;
+                    List<Role> roleGroup = null;
                     if (allroles.containsKey(key)) {
                         roleGroup = allroles.get(key).roles;
                     } else {
diff --git a/src/org/openstreetmap/josm/data/validation/tests/SelfIntersectingWay.java b/src/org/openstreetmap/josm/data/validation/tests/SelfIntersectingWay.java
index 2ea0c83..447e4c9 100644
--- a/src/org/openstreetmap/josm/data/validation/tests/SelfIntersectingWay.java
+++ b/src/org/openstreetmap/josm/data/validation/tests/SelfIntersectingWay.java
@@ -5,6 +5,7 @@ import static org.openstreetmap.josm.tools.I18n.tr;
 
 import java.util.Arrays;
 import java.util.HashSet;
+import java.util.Set;
 
 import org.openstreetmap.josm.data.osm.Node;
 import org.openstreetmap.josm.data.osm.Way;
@@ -28,8 +29,9 @@ public class SelfIntersectingWay extends Test {
                         "that contain some of their nodes more than once."));
     }
 
-    @Override public void visit(Way w) {
-        HashSet<Node> nodes = new HashSet<>();
+    @Override
+    public void visit(Way w) {
+        Set<Node> nodes = new HashSet<>();
 
         for (int i = 1; i < w.getNodesCount() - 1; i++) {
             Node n = w.getNode(i);
diff --git a/src/org/openstreetmap/josm/data/validation/tests/SimilarNamedWays.java b/src/org/openstreetmap/josm/data/validation/tests/SimilarNamedWays.java
index cd032db..8c89d3d 100644
--- a/src/org/openstreetmap/josm/data/validation/tests/SimilarNamedWays.java
+++ b/src/org/openstreetmap/josm/data/validation/tests/SimilarNamedWays.java
@@ -39,7 +39,7 @@ public class SimilarNamedWays extends Test {
     /** The already detected errors */
     private MultiMap<Way, Way> errorWays;
 
-    private ArrayList<NormalizeRule> rules = new ArrayList<NormalizeRule>();
+    private List<NormalizeRule> rules = new ArrayList<NormalizeRule>();
 
     /**
      * Constructor
diff --git a/src/org/openstreetmap/josm/data/validation/tests/TagChecker.java b/src/org/openstreetmap/josm/data/validation/tests/TagChecker.java
index 266f28a..450a101 100644
--- a/src/org/openstreetmap/josm/data/validation/tests/TagChecker.java
+++ b/src/org/openstreetmap/josm/data/validation/tests/TagChecker.java
@@ -63,7 +63,7 @@ import org.openstreetmap.josm.tools.MultiMap;
 public class TagChecker extends Test.TagTest {
 
     /** The default data file of tagchecker rules */
-    public static final String DATA_FILE = "resource://data/validator/tagchecker.cfg";
+    //public static final String DATA_FILE = "resource://data/validator/tagchecker.cfg";
     /** The config file of ignored tags */
     public static final String IGNORE_FILE = "resource://data/validator/ignoretags.cfg";
     /** The config file of dictionary words */
@@ -129,7 +129,7 @@ public class TagChecker extends Test.TagTest {
 
     protected static final Entities entities = new Entities();
 
-    static final List<String> DEFAULT_SOURCES = Arrays.asList(DATA_FILE, IGNORE_FILE, SPELL_FILE);
+    private static final List<String> DEFAULT_SOURCES = Arrays.asList(/*DATA_FILE, */IGNORE_FILE, SPELL_FILE);
 
     /**
      * Constructor
@@ -489,7 +489,7 @@ public class TagChecker extends Test.TagTest {
         prefCheckComplexBeforeUpload.setSelected(Main.pref.getBoolean(PREF_CHECK_COMPLEX_BEFORE_UPLOAD, true));
         testPanel.add(prefCheckComplexBeforeUpload, a);
 
-        final Collection<String> sources = Main.pref.getCollection(PREF_SOURCES, Arrays.asList(DATA_FILE, IGNORE_FILE, SPELL_FILE));
+        final Collection<String> sources = Main.pref.getCollection(PREF_SOURCES, DEFAULT_SOURCES);
         sourcesList = new EditableList(tr("TagChecker source"));
         sourcesList.setItems(sources);
         testPanel.add(new JLabel(tr("Data sources ({0})", "*.cfg")), GBC.eol().insets(23, 0, 0, 0));
@@ -623,7 +623,7 @@ public class TagChecker extends Test.TagTest {
             public boolean valueAll = false;
             public boolean valueBool = false;
 
-            private Pattern getPattern(String str) throws IllegalStateException, PatternSyntaxException {
+            private Pattern getPattern(String str) throws PatternSyntaxException {
                 if (str.endsWith("/i"))
                     return Pattern.compile(str.substring(1,str.length()-2), Pattern.CASE_INSENSITIVE);
                 if (str.endsWith("/"))
@@ -631,7 +631,7 @@ public class TagChecker extends Test.TagTest {
 
                 throw new IllegalStateException();
             }
-            public CheckerElement(String exp) throws IllegalStateException, PatternSyntaxException {
+            public CheckerElement(String exp) throws PatternSyntaxException {
                 Matcher m = Pattern.compile("(.+)([!=]=)(.+)").matcher(exp);
                 m.matches();
 
diff --git a/src/org/openstreetmap/josm/data/validation/tests/UnconnectedWays.java b/src/org/openstreetmap/josm/data/validation/tests/UnconnectedWays.java
index 3b499fe..b4305bb 100644
--- a/src/org/openstreetmap/josm/data/validation/tests/UnconnectedWays.java
+++ b/src/org/openstreetmap/josm/data/validation/tests/UnconnectedWays.java
@@ -292,9 +292,9 @@ public abstract class UnconnectedWays extends Test {
         public final boolean highway;
         private final double len;
         private Set<Node> nearbyNodeCache;
-        double nearbyNodeCacheDist = -1.0;
-        final Node n1;
-        final Node n2;
+        private double nearbyNodeCacheDist = -1.0;
+        private final Node n1;
+        private final Node n2;
 
         public MyWaySegment(Way w, Node n1, Node n2) {
             this.w = w;
diff --git a/src/org/openstreetmap/josm/data/validation/util/AggregatePrimitivesVisitor.java b/src/org/openstreetmap/josm/data/validation/util/AggregatePrimitivesVisitor.java
index 9592d87..324a127 100644
--- a/src/org/openstreetmap/josm/data/validation/util/AggregatePrimitivesVisitor.java
+++ b/src/org/openstreetmap/josm/data/validation/util/AggregatePrimitivesVisitor.java
@@ -20,7 +20,7 @@ import org.openstreetmap.josm.data.osm.visitor.AbstractVisitor;
  */
 public class AggregatePrimitivesVisitor extends AbstractVisitor {
     /** Aggregated data */
-    final Collection<OsmPrimitive> aggregatedData = new HashSet<>();
+    private final Collection<OsmPrimitive> aggregatedData = new HashSet<>();
 
     /**
      * Visits a collection of primitives
diff --git a/src/org/openstreetmap/josm/data/validation/util/ValUtil.java b/src/org/openstreetmap/josm/data/validation/util/ValUtil.java
index 2718751..19d8adf 100644
--- a/src/org/openstreetmap/josm/data/validation/util/ValUtil.java
+++ b/src/org/openstreetmap/josm/data/validation/util/ValUtil.java
@@ -113,7 +113,7 @@ public final class ValUtil {
      * @return A list with the coordinates of all cells
      * @throws IllegalArgumentException if n1 or n2 is {@code null} or without coordinates
      */
-    public static List<Point2D> getSegmentCells(Node n1, Node n2, double gridDetail) throws IllegalArgumentException {
+    public static List<Point2D> getSegmentCells(Node n1, Node n2, double gridDetail) {
         CheckParameterUtil.ensureParameterNotNull(n1, "n1");
         CheckParameterUtil.ensureParameterNotNull(n1, "n2");
         return getSegmentCells(n1.getEastNorth(), n2.getEastNorth(), gridDetail);
@@ -130,7 +130,7 @@ public final class ValUtil {
      * @throws IllegalArgumentException if en1 or en2 is {@code null}
      * @since 6869
      */
-    public static List<Point2D> getSegmentCells(EastNorth en1, EastNorth en2, double gridDetail) throws IllegalArgumentException {
+    public static List<Point2D> getSegmentCells(EastNorth en1, EastNorth en2, double gridDetail) {
         CheckParameterUtil.ensureParameterNotNull(en1, "en1");
         CheckParameterUtil.ensureParameterNotNull(en2, "en2");
         List<Point2D> cells = new ArrayList<>();
diff --git a/src/org/openstreetmap/josm/gui/ExtendedDialog.java b/src/org/openstreetmap/josm/gui/ExtendedDialog.java
index 39ef2f4..a8e316d 100644
--- a/src/org/openstreetmap/josm/gui/ExtendedDialog.java
+++ b/src/org/openstreetmap/josm/gui/ExtendedDialog.java
@@ -76,7 +76,7 @@ public class ExtendedDialog extends JDialog {
     public static final int DialogClosedOtherwise = 0;
     private boolean toggleable = false;
     private String rememberSizePref = "";
-    private WindowGeometry defaultWindowGeometry = null;
+    private transient WindowGeometry defaultWindowGeometry = null;
     private String togglePref = "";
     private int toggleValue = -1;
     private ConditionalOptionPaneUtil.MessagePanel togglePanel;
@@ -84,11 +84,11 @@ public class ExtendedDialog extends JDialog {
     private Component content;
     private final String[] bTexts;
     private String[] bToolTipTexts;
-    private Icon[] bIcons;
-    private List<Integer> cancelButtonIdx = Collections.emptyList();
+    private transient Icon[] bIcons;
+    private transient List<Integer> cancelButtonIdx = Collections.emptyList();
     private int defaultButtonIdx = 1;
     protected JButton defaultButton = null;
-    private Icon icon;
+    private transient Icon icon;
     private boolean modal;
     private boolean focusOnDefaultButton = false;
 
@@ -104,8 +104,8 @@ public class ExtendedDialog extends JDialog {
     private boolean placeContentInScrollPane;
 
     // For easy access when inherited
-    protected Insets contentInsets = new Insets(10,5,0,5);
-    protected List<JButton> buttons = new ArrayList<>();
+    protected transient Insets contentInsets = new Insets(10,5,0,5);
+    protected transient List<JButton> buttons = new ArrayList<>();
 
     /**
      * This method sets up the most basic options for the dialog. Add more
diff --git a/src/org/openstreetmap/josm/gui/FileDrop.java b/src/org/openstreetmap/josm/gui/FileDrop.java
index 2720350..edef7c2 100644
--- a/src/org/openstreetmap/josm/gui/FileDrop.java
+++ b/src/org/openstreetmap/josm/gui/FileDrop.java
@@ -76,8 +76,8 @@ import org.openstreetmap.josm.actions.OpenFileAction;
  */
 public class FileDrop
 {
-    private transient Border normalBorder;
-    private transient DropTargetListener dropListener;
+    private Border normalBorder;
+    private DropTargetListener dropListener;
 
     /** Discover if the running JVM is modern enough to have drag and drop. */
     private static Boolean supportsDnD;
diff --git a/src/org/openstreetmap/josm/gui/IconToggleButton.java b/src/org/openstreetmap/josm/gui/IconToggleButton.java
index 6d2fc79..5284c13 100644
--- a/src/org/openstreetmap/josm/gui/IconToggleButton.java
+++ b/src/org/openstreetmap/josm/gui/IconToggleButton.java
@@ -24,7 +24,7 @@ import org.openstreetmap.josm.tools.Destroyable;
 public class IconToggleButton extends JToggleButton implements HideableButton, PropertyChangeListener, Destroyable, ExpertModeChangeListener {
 
     public boolean groupbutton;
-    private ShowHideButtonListener listener;
+    private transient ShowHideButtonListener listener;
     private boolean hideIfDisabled = false;
     private boolean isExpert;
 
diff --git a/src/org/openstreetmap/josm/gui/ImageryMenu.java b/src/org/openstreetmap/josm/gui/ImageryMenu.java
index cc14fd0..023d478 100644
--- a/src/org/openstreetmap/josm/gui/ImageryMenu.java
+++ b/src/org/openstreetmap/josm/gui/ImageryMenu.java
@@ -14,6 +14,7 @@ import java.util.Collections;
 import java.util.Comparator;
 import java.util.Iterator;
 import java.util.List;
+
 import javax.swing.Action;
 import javax.swing.JComponent;
 import javax.swing.JMenu;
@@ -21,6 +22,7 @@ import javax.swing.JMenuItem;
 import javax.swing.JPopupMenu;
 import javax.swing.event.MenuEvent;
 import javax.swing.event.MenuListener;
+
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.actions.AddImageryLayerAction;
 import org.openstreetmap.josm.actions.JosmAction;
@@ -48,14 +50,14 @@ public class ImageryMenu extends JMenu implements LayerChangeListener {
      * ImageryInfo objects are normally sorted by country code first
      * (for the preferences). We don't want this in the imagery menu.
      */
-    public static Comparator<ImageryInfo> alphabeticImageryComparator = new Comparator<ImageryInfo>() {
+    public static final Comparator<ImageryInfo> alphabeticImageryComparator = new Comparator<ImageryInfo>() {
         @Override
         public int compare(ImageryInfo ii1, ImageryInfo ii2) {
             return ii1.getName().toLowerCase().compareTo(ii2.getName().toLowerCase());
         }
     };
 
-    private Action offsetAction = new JosmAction(
+    private transient Action offsetAction = new JosmAction(
             tr("Imagery offset"), "mapmode/adjustimg", tr("Adjust imagery offset"), null, false, false) {
         {
             putValue("toolbar", "imagery-offset");
@@ -253,7 +255,7 @@ public class ImageryMenu extends JMenu implements LayerChangeListener {
      * (and possibly recreated) when refreshImageryMenu() is called.
      * @since 5803
      */
-    private List <Object> dynamicItems = new ArrayList<>(20);
+    private transient List <Object> dynamicItems = new ArrayList<>(20);
 
     /**
      * Remove all the items in @field dynamicItems collection
diff --git a/src/org/openstreetmap/josm/gui/JosmUserIdentityManager.java b/src/org/openstreetmap/josm/gui/JosmUserIdentityManager.java
index 9e4794c..faacda2 100644
--- a/src/org/openstreetmap/josm/gui/JosmUserIdentityManager.java
+++ b/src/org/openstreetmap/josm/gui/JosmUserIdentityManager.java
@@ -99,10 +99,10 @@ public final class JosmUserIdentityManager implements PreferenceChangedListener{
      * by the user name of its OSM account.
      *
      * @param userName the user name. Must not be null. Must not be empty (whitespace only).
-     * @throws IllegalArgumentException thrown if userName is null
-     * @throws IllegalArgumentException thrown if userName is empty
+     * @throws IllegalArgumentException if userName is null
+     * @throws IllegalArgumentException if userName is empty
      */
-    public void setPartiallyIdentified(String userName) throws IllegalArgumentException {
+    public void setPartiallyIdentified(String userName) {
         CheckParameterUtil.ensureParameterNotNull(userName, "userName");
         if (userName.trim().isEmpty())
             throw new IllegalArgumentException(MessageFormat.format("Expected non-empty value for parameter ''{0}'', got ''{1}''", "userName", userName));
@@ -116,11 +116,11 @@ public final class JosmUserIdentityManager implements PreferenceChangedListener{
      *
      * @param username the user name. Must not be null. Must not be empty.
      * @param userinfo additional information about the user, retrieved from the OSM server and including the user id
-     * @throws IllegalArgumentException thrown if userName is null
-     * @throws IllegalArgumentException thrown if userName is empty
-     * @throws IllegalArgumentException thrown if userinfo is null
+     * @throws IllegalArgumentException if userName is null
+     * @throws IllegalArgumentException if userName is empty
+     * @throws IllegalArgumentException if userinfo is null
      */
-    public void setFullyIdentified(String username, UserInfo userinfo) throws IllegalArgumentException {
+    public void setFullyIdentified(String username, UserInfo userinfo) {
         CheckParameterUtil.ensureParameterNotNull(username, "username");
         if (username.trim().isEmpty())
             throw new IllegalArgumentException(tr("Expected non-empty value for parameter ''{0}'', got ''{1}''", "userName", userName));
diff --git a/src/org/openstreetmap/josm/gui/MainApplication.java b/src/org/openstreetmap/josm/gui/MainApplication.java
index 8568f7e..876048f 100644
--- a/src/org/openstreetmap/josm/gui/MainApplication.java
+++ b/src/org/openstreetmap/josm/gui/MainApplication.java
@@ -7,7 +7,6 @@ import gnu.getopt.Getopt;
 import gnu.getopt.LongOpt;
 
 import java.awt.Dimension;
-import java.awt.GraphicsEnvironment;
 import java.awt.Image;
 import java.awt.Toolkit;
 import java.awt.event.WindowAdapter;
@@ -16,6 +15,8 @@ import java.io.File;
 import java.io.IOException;
 import java.io.InputStream;
 import java.net.Authenticator;
+import java.net.InetAddress;
+import java.net.Inet6Address;
 import java.net.ProxySelector;
 import java.net.URL;
 import java.security.AllPermission;
@@ -196,7 +197,7 @@ public class MainApplication extends Main {
         SELECTION(true),
         /** --offline=<osm_api|josm_website|all> Disable access to the given resource(s), delimited by comma */
         OFFLINE(true),
-        /* --skip-plugins */
+        /** --skip-plugins */
         SKIP_PLUGINS(false),
         ;
 
@@ -363,11 +364,20 @@ public class MainApplication extends Main {
 
         Main.pref.init(args.containsKey(Option.RESET_PREFERENCES));
 
+        if (args.containsKey(Option.SET)) {
+            for (String i : args.get(Option.SET)) {
+                String[] kv = i.split("=", 2);
+                Main.pref.put(kv[0], "null".equals(kv[1]) ? null : kv[1]);
+            }
+        }
+
         if (!languageGiven) {
             I18n.set(Main.pref.get("language", null));
         }
         Main.pref.updateSystemProperties();
 
+        checkIPv6();
+
         // asking for help? show help and exit
         if (args.containsKey(Option.HELP)) {
             showHelp();
@@ -380,7 +390,7 @@ public class MainApplication extends Main {
 
         FontsManager.initialize();
 
-        handleSpecialLanguages();
+        I18n.setupLanguageFonts();
 
         final JFrame mainFrame = new JFrame(tr("Java OpenStreetMap Editor"));
         Main.parent = mainFrame;
@@ -397,13 +407,6 @@ public class MainApplication extends Main {
             }
         }
 
-        if (args.containsKey(Option.SET)) {
-            for (String i : args.get(Option.SET)) {
-                String[] kv = i.split("=", 2);
-                Main.pref.put(kv[0], "null".equals(kv[1]) ? null : kv[1]);
-            }
-        }
-
         DefaultAuthenticator.createInstance();
         Authenticator.setDefault(DefaultAuthenticator.getInstance());
         DefaultProxySelector proxySelector = new DefaultProxySelector(ProxySelector.getDefault());
@@ -504,20 +507,6 @@ public class MainApplication extends Main {
         }
     }
 
-    private static void handleSpecialLanguages() {
-        // Use special font for Khmer script, as the default Java font do not display these characters
-        if ("km".equals(Main.pref.get("language"))) {
-            Collection<String> fonts = Arrays.asList(
-                    GraphicsEnvironment.getLocalGraphicsEnvironment().getAvailableFontFamilyNames());
-            for (String f : new String[]{"Khmer UI", "DaunPenh", "MoolBoran"}) {
-                if (fonts.contains(f)) {
-                    GuiHelper.setUIFont(f);
-                    break;
-                }
-            }
-        }
-    }
-
     private static void processOffline(Map<Option, Collection<String>> args) {
         if (args.containsKey(Option.OFFLINE)) {
             for (String s : args.get(Option.OFFLINE).iterator().next().split(",")) {
@@ -539,6 +528,47 @@ public class MainApplication extends Main {
         }
     }
 
+    /**
+     * Check if IPv6 can be safely enabled and do so. Because this cannot be done after network activation,
+     * disabling or enabling IPV6 may only be done with next start.
+     */
+    private static void checkIPv6() {
+        if("auto".equals(Main.pref.get("prefer.ipv6", "auto"))) {
+             new Thread(new Runnable() { /* this may take some time (DNS, Connect) */
+                public void run() {
+                    boolean hasv6 = false;
+                    boolean wasv6 = Main.pref.getBoolean("validated.ipv6", false);
+                    try {
+                        /* Use the check result from last run of the software, as after the test, value
+                           changes have no effect anymore */
+                        if(wasv6) {
+                            Utils.updateSystemProperty("java.net.preferIPv6Addresses", "true");
+                        }
+                        for(InetAddress a : InetAddress.getAllByName("josm.openstreetmap.de")) {
+                            if(a instanceof Inet6Address) {
+                                if(a.isReachable(1000)) {
+                                    Utils.updateSystemProperty("java.net.preferIPv6Addresses", "true");
+                                    if(!wasv6) {
+                                        Main.info(tr("Detected useable IPv6 network, prefering IPv6 over IPv4 after next restart."));
+                                    } else {
+                                        Main.info(tr("Detected useable IPv6 network, prefering IPv6 over IPv4."));
+                                    }
+                                    hasv6 = true;
+                                }
+                                break; /* we're done */
+                            }
+                        }
+                    } catch (Exception e) {
+                    }
+                    if(wasv6 && !hasv6) {
+                        Main.info(tr("Detected no useable IPv6 network, prefering IPv4 over IPv6 after next restart."));
+                    }
+                    Main.pref.put("validated.ipv6", hasv6);
+                }
+            }).start();
+        }
+    }
+    
     private static class GuiFinalizationWorker implements Runnable {
 
         private final Map<Option, Collection<String>> args;
diff --git a/src/org/openstreetmap/josm/gui/MainMenu.java b/src/org/openstreetmap/josm/gui/MainMenu.java
index fdbd914..62cce67 100644
--- a/src/org/openstreetmap/josm/gui/MainMenu.java
+++ b/src/org/openstreetmap/josm/gui/MainMenu.java
@@ -231,7 +231,7 @@ public class MainMenu extends JMenuBar {
     /** View / History (web) */
     public final HistoryInfoWebAction historyinfoweb = new HistoryInfoWebAction();
     /** View / "Zoom to"... actions */
-    public final Map<String, AutoScaleAction> autoScaleActions = new HashMap<>();
+    public final transient Map<String, AutoScaleAction> autoScaleActions = new HashMap<>();
     /** View / Jump to position */
     public final JumpToAction jumpToAct = new JumpToAction();
 
@@ -1015,7 +1015,7 @@ public class MainMenu extends JMenuBar {
             }
 
             List<JMenuItem> searchResult = mainMenu.findMenuItems(currentSearchText);
-            if(searchResult.size() == 0) {
+            if(searchResult.isEmpty()) {
                 // Nothing found
                 hideMenu();
                 return;
diff --git a/src/org/openstreetmap/josm/gui/MapFrame.java b/src/org/openstreetmap/josm/gui/MapFrame.java
index 64dba35..9aeec0a 100644
--- a/src/org/openstreetmap/josm/gui/MapFrame.java
+++ b/src/org/openstreetmap/josm/gui/MapFrame.java
@@ -102,7 +102,7 @@ public class MapFrame extends JPanel implements Destroyable, LayerChangeListener
     /**
      * This object allows to detect key press and release events
      */
-    public final AdvancedKeyPressDetector keyDetector = new AdvancedKeyPressDetector();
+    public final transient AdvancedKeyPressDetector keyDetector = new AdvancedKeyPressDetector();
 
     /**
      * The toolbar with the action icons. To add new toggle dialog buttons,
@@ -113,10 +113,10 @@ public class MapFrame extends JPanel implements Destroyable, LayerChangeListener
     private final JToolBar toolBarActions = new JToolBar(JToolBar.VERTICAL);
     private final JToolBar toolBarToggle = new JToolBar(JToolBar.VERTICAL);
 
-    private final List<ToggleDialog> allDialogs = new ArrayList<>();
-    private final List<MapMode> mapModes = new ArrayList<>();
-    private final List<IconToggleButton> allDialogButtons = new ArrayList<>();
-    public final List<IconToggleButton> allMapModeButtons = new ArrayList<>();
+    private final transient List<ToggleDialog> allDialogs = new ArrayList<>();
+    private final transient List<MapMode> mapModes = new ArrayList<>();
+    private final transient List<IconToggleButton> allDialogButtons = new ArrayList<>();
+    public final transient List<IconToggleButton> allMapModeButtons = new ArrayList<>();
 
     private final ListAllButtonsAction listAllDialogsAction = new ListAllButtonsAction(allDialogButtons);
     private final ListAllButtonsAction listAllMapModesAction = new ListAllButtonsAction(allMapModeButtons);
@@ -140,7 +140,7 @@ public class MapFrame extends JPanel implements Destroyable, LayerChangeListener
     public final SelectAction mapModeSelect;
     public LassoModeAction mapModeSelectLasso;
 
-    private final Map<Layer, MapMode> lastMapMode = new HashMap<>();
+    private final transient Map<Layer, MapMode> lastMapMode = new HashMap<>();
     private final MapMode mapModeDraw;
     private final MapMode mapModeZoom;
 
@@ -446,8 +446,8 @@ public class MapFrame extends JPanel implements Destroyable, LayerChangeListener
          * sideToolBar: add dynamic popup menu
          */
         sideToolBar.setComponentPopupMenu(new JPopupMenu() {
-            static final int staticMenuEntryCount = 2;
-            JCheckBoxMenuItem doNotHide = new JCheckBoxMenuItem(new AbstractAction(tr("Do not hide toolbar")) {
+            private static final int staticMenuEntryCount = 2;
+            private JCheckBoxMenuItem doNotHide = new JCheckBoxMenuItem(new AbstractAction(tr("Do not hide toolbar")) {
                 @Override
                 public void actionPerformed(ActionEvent e) {
                     boolean sel = ((JCheckBoxMenuItem) e.getSource()).getState();
@@ -537,7 +537,7 @@ public class MapFrame extends JPanel implements Destroyable, LayerChangeListener
     class ListAllButtonsAction extends AbstractAction {
 
         private JButton button;
-        private Collection<? extends HideableButton> buttons;
+        private transient Collection<? extends HideableButton> buttons;
 
 
         public ListAllButtonsAction(Collection<? extends HideableButton> buttons) {
@@ -669,7 +669,7 @@ public class MapFrame extends JPanel implements Destroyable, LayerChangeListener
      */
     private static final CopyOnWriteArrayList<MapModeChangeListener> mapModeChangeListeners = new CopyOnWriteArrayList<>();
 
-    private PreferenceChangedListener sidetoolbarPreferencesChangedListener;
+    private transient PreferenceChangedListener sidetoolbarPreferencesChangedListener;
     /**
      * Adds a mapMode change listener
      *
diff --git a/src/org/openstreetmap/josm/gui/MapSlider.java b/src/org/openstreetmap/josm/gui/MapSlider.java
index 9773e38..8c42df6 100644
--- a/src/org/openstreetmap/josm/gui/MapSlider.java
+++ b/src/org/openstreetmap/josm/gui/MapSlider.java
@@ -16,7 +16,7 @@ import org.openstreetmap.josm.gui.help.Helpful;
 class MapSlider extends JSlider implements PropertyChangeListener, ChangeListener, Helpful {
 
     private final MapView mv;
-    boolean preventChange = false;
+    private boolean preventChange = false;
 
     public MapSlider(MapView mv) {
         super(35, 150);
diff --git a/src/org/openstreetmap/josm/gui/MapStatus.java b/src/org/openstreetmap/josm/gui/MapStatus.java
index 390518c..d9d015d 100644
--- a/src/org/openstreetmap/josm/gui/MapStatus.java
+++ b/src/org/openstreetmap/josm/gui/MapStatus.java
@@ -120,7 +120,7 @@ public class MapStatus extends JPanel implements Helpful, Destroyable, Preferenc
      * The MapView this status belongs to.
      */
     private final MapView mv;
-    private final Collector collector;
+    private final transient Collector collector;
 
     public class BackgroundProgressMonitor implements ProgressMonitorDialog {
 
@@ -174,17 +174,23 @@ public class MapStatus extends JPanel implements Helpful, Destroyable, Preferenc
 
     }
 
-    final ImageLabel latText = new ImageLabel("lat", tr("The geographic latitude at the mouse pointer."), 11, PROP_BACKGROUND_COLOR.get());
-    final ImageLabel lonText = new ImageLabel("lon", tr("The geographic longitude at the mouse pointer."), 11, PROP_BACKGROUND_COLOR.get());
-    final ImageLabel headingText = new ImageLabel("heading", tr("The (compass) heading of the line segment being drawn."), 6, PROP_BACKGROUND_COLOR.get());
-    final ImageLabel angleText = new ImageLabel("angle", tr("The angle between the previous and the current way segment."), 6, PROP_BACKGROUND_COLOR.get());
-    final ImageLabel distText = new ImageLabel("dist", tr("The length of the new way segment being drawn."), 10, PROP_BACKGROUND_COLOR.get());
-    final ImageLabel nameText = new ImageLabel("name", tr("The name of the object at the mouse pointer."), 20, PROP_BACKGROUND_COLOR.get());
-    final JosmTextField helpText = new JosmTextField();
-    final JProgressBar progressBar = new JProgressBar();
-    public final BackgroundProgressMonitor progressMonitor = new BackgroundProgressMonitor();
-
-    private final SoMChangeListener somListener;
+    private final ImageLabel latText = new ImageLabel("lat",
+            tr("The geographic latitude at the mouse pointer."), 11, PROP_BACKGROUND_COLOR.get());
+    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());
+    private final ImageLabel angleText = new ImageLabel("angle",
+            tr("The angle between the previous and the current way segment."), 6, 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",
+            tr("The name of the object at the mouse pointer."), 20, PROP_BACKGROUND_COLOR.get());
+    private final JosmTextField helpText = new JosmTextField();
+    private final JProgressBar progressBar = new JProgressBar();
+    public final transient BackgroundProgressMonitor progressMonitor = new BackgroundProgressMonitor();
+
+    private final transient SoMChangeListener somListener;
 
     // Distance value displayed in distText, stored if refresh needed after a change of system of measurement
     private double distValue;
@@ -196,13 +202,13 @@ public class MapStatus extends JPanel implements Helpful, Destroyable, Preferenc
      * This is the thread that runs in the background and collects the information displayed.
      * It gets destroyed by destroy() when the MapFrame itself is destroyed.
      */
-    private Thread thread;
+    private transient Thread thread;
 
-    private final List<StatusTextHistory> statusText = new ArrayList<>();
+    private final transient List<StatusTextHistory> statusText = new ArrayList<>();
 
     private static class StatusTextHistory {
-        final Object id;
-        final String text;
+        private final Object id;
+        private final String text;
 
         public StatusTextHistory(Object id, String text) {
             this.id = id;
@@ -642,15 +648,15 @@ public class MapStatus extends JPanel implements Helpful, Destroyable, Preferenc
      * @author imi
      */
     static class MouseState {
-        Point mousePos;
-        int modifiers;
+        private Point mousePos;
+        private int modifiers;
     }
     /**
      * The last sent mouse movement event.
      */
-    MouseState mouseState = new MouseState();
+    private transient MouseState mouseState = new MouseState();
 
-    private AWTEventListener awtListener = new AWTEventListener() {
+    private transient AWTEventListener awtListener = new AWTEventListener() {
          @Override
          public void eventDispatched(AWTEvent event) {
             if (event instanceof InputEvent &&
@@ -666,7 +672,7 @@ public class MapStatus extends JPanel implements Helpful, Destroyable, Preferenc
         }
     };
 
-    private MouseMotionListener mouseMotionListener = new MouseMotionListener() {
+    private transient MouseMotionListener mouseMotionListener = new MouseMotionListener() {
         @Override
         public void mouseMoved(MouseEvent e) {
             synchronized (collector) {
@@ -682,7 +688,7 @@ public class MapStatus extends JPanel implements Helpful, Destroyable, Preferenc
         }
     };
 
-    private KeyAdapter keyAdapter = new KeyAdapter() {
+    private transient KeyAdapter keyAdapter = new KeyAdapter() {
         @Override public void keyPressed(KeyEvent e) {
             synchronized (collector) {
                 mouseState.modifiers = e.getModifiersEx();
@@ -721,7 +727,7 @@ public class MapStatus extends JPanel implements Helpful, Destroyable, Preferenc
 
         private final JMenuItem jumpButton = add(Main.main.menu.jumpToAct);
 
-        private final Collection<JCheckBoxMenuItem> somItems = new ArrayList<>();
+        private final transient Collection<JCheckBoxMenuItem> somItems = new ArrayList<>();
 
         private final JSeparator separator = new JSeparator();
 
diff --git a/src/org/openstreetmap/josm/gui/MapView.java b/src/org/openstreetmap/josm/gui/MapView.java
index a561f9a..280d2d0 100644
--- a/src/org/openstreetmap/josm/gui/MapView.java
+++ b/src/org/openstreetmap/josm/gui/MapView.java
@@ -47,7 +47,6 @@ import org.openstreetmap.josm.data.coor.LatLon;
 import org.openstreetmap.josm.data.imagery.ImageryInfo;
 import org.openstreetmap.josm.data.osm.DataSet;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
-import org.openstreetmap.josm.data.osm.visitor.BoundingXYVisitor;
 import org.openstreetmap.josm.data.osm.visitor.paint.PaintColors;
 import org.openstreetmap.josm.data.osm.visitor.paint.relations.MultipolygonCache;
 import org.openstreetmap.josm.gui.layer.GpxLayer;
@@ -206,35 +205,35 @@ public class MapView extends NavigatableComponent implements PropertyChangeListe
     /**
      * A list of all layers currently loaded.
      */
-    private final List<Layer> layers = new ArrayList<>();
+    private final transient List<Layer> layers = new ArrayList<>();
     /**
      * The play head marker: there is only one of these so it isn't in any specific layer
      */
-    public PlayHeadMarker playHeadMarker = null;
+    public transient PlayHeadMarker playHeadMarker = null;
 
     /**
      * The layer from the layers list that is currently active.
      */
-    private Layer activeLayer;
+    private transient Layer activeLayer;
 
-    private OsmDataLayer editLayer;
+    private transient OsmDataLayer editLayer;
 
     /**
      * The last event performed by mouse.
      */
     public MouseEvent lastMEvent = new MouseEvent(this, 0, 0, 0, 0, 0, 0, false); // In case somebody reads it before first mouse move
 
-    private final List<MapViewPaintable> temporaryLayers = new LinkedList<>();
+    private final transient List<MapViewPaintable> temporaryLayers = new LinkedList<>();
 
-    private BufferedImage nonChangedLayersBuffer;
-    private BufferedImage offscreenBuffer;
+    private transient BufferedImage nonChangedLayersBuffer;
+    private transient BufferedImage offscreenBuffer;
     // Layers that wasn't changed since last paint
-    private final List<Layer> nonChangedLayers = new ArrayList<>();
-    private Layer changedLayer;
+    private final transient List<Layer> nonChangedLayers = new ArrayList<>();
+    private transient Layer changedLayer;
     private int lastViewID;
     private boolean paintPreferencesChanged = true;
     private Rectangle lastClipBounds = new Rectangle();
-    private MapMover mapMover;
+    private transient MapMover mapMover;
 
     /**
      * Constructs a new {@code MapView}.
@@ -699,16 +698,6 @@ public class MapView extends NavigatableComponent implements PropertyChangeListe
     }
 
     /**
-     * Set the new dimension to the view.
-     * 
-     * @deprecated use #zoomTo(BoundingXYVisitor)
-     */
-    @Deprecated
-    public void recalculateCenterScale(BoundingXYVisitor box) {
-        zoomTo(box);
-    }
-
-    /**
      * @return An unmodifiable collection of all layers
      */
     public Collection<Layer> getAllLayers() {
@@ -732,7 +721,7 @@ public class MapView extends NavigatableComponent implements PropertyChangeListe
      *
      * @return an unmodifiable list of layers of a certain type.
      */
-    public <T extends Layer> List<T>  getLayersOfType(Class<T> ofType) {
+    public <T extends Layer> List<T> getLayersOfType(Class<T> ofType) {
         return new ArrayList<>(Utils.filteredCollection(getAllLayers(), ofType));
     }
 
@@ -790,7 +779,7 @@ public class MapView extends NavigatableComponent implements PropertyChangeListe
      * of {@link OsmDataLayer} also sets {@link #editLayer} to <code>layer</code>.
      *
      * @param layer the layer to be activate; must be one of the layers in the list of layers
-     * @exception IllegalArgumentException thrown if layer is not in the lis of layers
+     * @throws IllegalArgumentException if layer is not in the lis of layers
      */
     public void setActiveLayer(Layer layer) {
         setActiveLayer(layer, true);
@@ -908,8 +897,9 @@ public class MapView extends NavigatableComponent implements PropertyChangeListe
         }
     }
 
-    private SelectionChangedListener repaintSelectionChangedListener = new SelectionChangedListener(){
-        @Override public void selectionChanged(Collection<? extends OsmPrimitive> newSelection) {
+    private transient SelectionChangedListener repaintSelectionChangedListener = new SelectionChangedListener(){
+        @Override
+        public void selectionChanged(Collection<? extends OsmPrimitive> newSelection) {
             repaint();
         }
     };
diff --git a/src/org/openstreetmap/josm/gui/MenuScroller.java b/src/org/openstreetmap/josm/gui/MenuScroller.java
index f29c5d5..7c28db1 100644
--- a/src/org/openstreetmap/josm/gui/MenuScroller.java
+++ b/src/org/openstreetmap/josm/gui/MenuScroller.java
@@ -333,7 +333,7 @@ public class MenuScroller {
      * Ensures that the <code>dispose</code> method of this MenuScroller is
      * called when there are no more refrences to it.
      *
-     * @exception  Throwable if an error occurs.
+     * @throws Throwable if an error occurs.
      * @see MenuScroller#dispose()
      */
     @Override
@@ -470,8 +470,8 @@ public class MenuScroller {
 
         UP(9, 1, 9),
         DOWN(1, 9, 1);
-        static final int[] XPOINTS = {1, 5, 9};
-        final int[] yPoints;
+        private static final int[] XPOINTS = {1, 5, 9};
+        private final int[] yPoints;
 
         MenuIcon(int... yPoints) {
             this.yPoints = yPoints;
diff --git a/src/org/openstreetmap/josm/gui/NavigatableComponent.java b/src/org/openstreetmap/josm/gui/NavigatableComponent.java
index 891d7b4..3fe62c0 100644
--- a/src/org/openstreetmap/josm/gui/NavigatableComponent.java
+++ b/src/org/openstreetmap/josm/gui/NavigatableComponent.java
@@ -87,7 +87,7 @@ public class NavigatableComponent extends JComponent implements Helpful {
         void systemOfMeasurementChanged(String oldSoM, String newSoM);
     }
 
-    public Predicate<OsmPrimitive> isSelectablePredicate = new Predicate<OsmPrimitive>() {
+    public transient Predicate<OsmPrimitive> isSelectablePredicate = new Predicate<OsmPrimitive>() {
         @Override
         public boolean evaluate(OsmPrimitive prim) {
             if (!prim.isSelectable()) return false;
@@ -179,11 +179,11 @@ public class NavigatableComponent extends JComponent implements Helpful {
      */
     protected EastNorth center = calculateDefaultCenter();
 
-    private final Object paintRequestLock = new Object();
+    private final transient Object paintRequestLock = new Object();
     private Rectangle paintRect = null;
     private Polygon paintPoly = null;
 
-    protected ViewportData initialViewport;
+    protected transient ViewportData initialViewport;
 
     /**
      * Constructs a new {@code NavigatableComponent}.
@@ -611,8 +611,8 @@ public class NavigatableComponent extends JComponent implements Helpful {
     }
 
     private class ZoomData {
-        final LatLon center;
-        final double scale;
+        private final LatLon center;
+        private final double scale;
 
         public ZoomData(EastNorth center, double scale) {
             this.center = Projections.inverseProject(center);
@@ -683,7 +683,7 @@ public class NavigatableComponent extends JComponent implements Helpful {
      */
     private Map<Double, List<Node>> getNearestNodesImpl(Point p,
             Predicate<OsmPrimitive> predicate) {
-        TreeMap<Double, List<Node>> nearestMap = new TreeMap<>();
+        Map<Double, List<Node>> nearestMap = new TreeMap<>();
         DataSet ds = getCurrentDataSet();
 
         if (ds != null) {
@@ -1456,8 +1456,8 @@ public class NavigatableComponent extends JComponent implements Helpful {
     }
 
     private static class CursorInfo {
-        final Cursor cursor;
-        final Object object;
+        private final Cursor cursor;
+        private final Object object;
         public CursorInfo(Cursor c, Object o) {
             cursor = c;
             object = o;
diff --git a/src/org/openstreetmap/josm/gui/PleaseWaitDialog.java b/src/org/openstreetmap/josm/gui/PleaseWaitDialog.java
index f1af64f..80f1327 100644
--- a/src/org/openstreetmap/josm/gui/PleaseWaitDialog.java
+++ b/src/org/openstreetmap/josm/gui/PleaseWaitDialog.java
@@ -33,7 +33,7 @@ public class PleaseWaitDialog extends JDialog implements ProgressMonitorDialog {
 
     public final JLabel currentAction = new JLabel("");
     private final JLabel customText = new JLabel("");
-    public final BoundedRangeModel progress = progressBar.getModel();
+    public final transient BoundedRangeModel progress = progressBar.getModel();
     private JButton btnCancel;
     private JButton btnInBackground;
     /** the text area and the scroll pane for the log */
diff --git a/src/org/openstreetmap/josm/gui/PleaseWaitRunnable.java b/src/org/openstreetmap/josm/gui/PleaseWaitRunnable.java
index 82724f5..2ef62f7 100644
--- a/src/org/openstreetmap/josm/gui/PleaseWaitRunnable.java
+++ b/src/org/openstreetmap/josm/gui/PleaseWaitRunnable.java
@@ -57,9 +57,9 @@ public abstract class PleaseWaitRunnable implements Runnable, CancelListener {
      * @param ignoreException If true, exception will be silently ignored. If false then
      * exception will be handled by showing a dialog. When this runnable is executed using executor framework
      * then use false unless you read result of task (because exception will get lost if you don't)
-     * @throws IllegalArgumentException thrown if parent is null
+     * @throws IllegalArgumentException if parent is null
      */
-    public PleaseWaitRunnable(Component parent, String title, boolean ignoreException) throws IllegalArgumentException{
+    public PleaseWaitRunnable(Component parent, String title, boolean ignoreException) {
         CheckParameterUtil.ensureParameterNotNull(parent, "parent");
         this.title = title;
         this.progressMonitor = new PleaseWaitProgressMonitor(parent, title);
diff --git a/src/org/openstreetmap/josm/gui/ScrollViewport.java b/src/org/openstreetmap/josm/gui/ScrollViewport.java
index 969ff69..ce950b5 100644
--- a/src/org/openstreetmap/josm/gui/ScrollViewport.java
+++ b/src/org/openstreetmap/josm/gui/ScrollViewport.java
@@ -65,7 +65,7 @@ public class ScrollViewport extends JPanel {
     private JViewport vp = new JViewport();
     private JComponent component = null;
 
-    private List<JButton> buttons = new ArrayList<>();
+    private transient List<JButton> buttons = new ArrayList<>();
 
     private Timer timer = new Timer(100, new ActionListener() {
         @Override
diff --git a/src/org/openstreetmap/josm/gui/SideButton.java b/src/org/openstreetmap/josm/gui/SideButton.java
index 1c15010..5885c07 100644
--- a/src/org/openstreetmap/josm/gui/SideButton.java
+++ b/src/org/openstreetmap/josm/gui/SideButton.java
@@ -26,7 +26,7 @@ import org.openstreetmap.josm.tools.ImageProvider;
 public class SideButton extends JButton implements Destroyable {
     private static final int iconHeight = 20;
 
-    private PropertyChangeListener propertyChangeListener;
+    private transient PropertyChangeListener propertyChangeListener;
 
     public SideButton(Action action) {
         super(action);
diff --git a/src/org/openstreetmap/josm/gui/SplashScreen.java b/src/org/openstreetmap/josm/gui/SplashScreen.java
index 1336867..7cdcf37 100644
--- a/src/org/openstreetmap/josm/gui/SplashScreen.java
+++ b/src/org/openstreetmap/josm/gui/SplashScreen.java
@@ -39,7 +39,7 @@ import org.openstreetmap.josm.tools.WindowGeometry;
  */
 public class SplashScreen extends JFrame {
 
-    private final SwingRenderingProgressMonitor progressMonitor;
+    private final transient SwingRenderingProgressMonitor progressMonitor;
 
     /**
      * Constructs a new {@code SplashScreen}.
diff --git a/src/org/openstreetmap/josm/gui/actionsupport/DeleteFromRelationConfirmationDialog.java b/src/org/openstreetmap/josm/gui/actionsupport/DeleteFromRelationConfirmationDialog.java
index b88e277..a4585d8 100644
--- a/src/org/openstreetmap/josm/gui/actionsupport/DeleteFromRelationConfirmationDialog.java
+++ b/src/org/openstreetmap/josm/gui/actionsupport/DeleteFromRelationConfirmationDialog.java
@@ -186,7 +186,7 @@ public class DeleteFromRelationConfirmationDialog extends JDialog implements Tab
      *
      */
     public static class RelationMemberTableModel extends DefaultTableModel {
-        private List<RelationToChildReference> data;
+        private transient List<RelationToChildReference> data;
 
         /**
          * Constructs a new {@code RelationMemberTableModel}.
@@ -228,7 +228,7 @@ public class DeleteFromRelationConfirmationDialog extends JDialog implements Tab
         }
 
         public Set<OsmPrimitive> getObjectsToDelete() {
-            HashSet<OsmPrimitive> ret = new HashSet<>();
+            Set<OsmPrimitive> ret = new HashSet<>();
             for (RelationToChildReference ref: data) {
                 ret.add(ref.getChild());
             }
@@ -240,7 +240,7 @@ public class DeleteFromRelationConfirmationDialog extends JDialog implements Tab
         }
 
         public Set<OsmPrimitive> getParentRelations() {
-            HashSet<OsmPrimitive> ret = new HashSet<>();
+            Set<OsmPrimitive> ret = new HashSet<>();
             for (RelationToChildReference ref: data) {
                 ret.add(ref.getParent());
             }
diff --git a/src/org/openstreetmap/josm/gui/bbox/SizeButton.java b/src/org/openstreetmap/josm/gui/bbox/SizeButton.java
index fdbdb44..01897c9 100644
--- a/src/org/openstreetmap/josm/gui/bbox/SizeButton.java
+++ b/src/org/openstreetmap/josm/gui/bbox/SizeButton.java
@@ -34,7 +34,7 @@ public class SizeButton extends JComponent {
         addMouseListener(mouseListener);
     }
 
-    private final MouseAdapter mouseListener = new MouseAdapter() {
+    private final transient MouseAdapter mouseListener = new MouseAdapter() {
         @Override
         public void mouseReleased(MouseEvent e) {
             if (e.getButton() == MouseEvent.BUTTON1) {
diff --git a/src/org/openstreetmap/josm/gui/bbox/SlippyMapBBoxChooser.java b/src/org/openstreetmap/josm/gui/bbox/SlippyMapBBoxChooser.java
index 6116ee1..7b41c59 100644
--- a/src/org/openstreetmap/josm/gui/bbox/SlippyMapBBoxChooser.java
+++ b/src/org/openstreetmap/josm/gui/bbox/SlippyMapBBoxChooser.java
@@ -51,7 +51,7 @@ public class SlippyMapBBoxChooser extends JMapViewer implements BBoxChooser {
      * TMS TileSource provider for the slippymap chooser
      */
     public static class TMSTileSourceProvider implements TileSourceProvider {
-        static final Set<String> existingSlippyMapUrls = new HashSet<>();
+        private static final Set<String> existingSlippyMapUrls = new HashSet<>();
         static {
             // Urls that already exist in the slippymap chooser and shouldn't be copied from TMS layer list
             existingSlippyMapUrls.add("https://{switch:a,b,c}.tile.openstreetmap.org/{zoom}/{x}/{y}.png");      // Mapnik
@@ -116,16 +116,16 @@ public class SlippyMapBBoxChooser extends JMapViewer implements BBoxChooser {
     private static final StringProperty PROP_MAPSTYLE = new StringProperty("slippy_map_chooser.mapstyle", "Mapnik");
     public static final String RESIZE_PROP = SlippyMapBBoxChooser.class.getName() + ".resize";
 
-    private TileLoader cachedLoader;
-    private OsmTileLoader uncachedLoader;
+    private transient TileLoader cachedLoader;
+    private transient OsmTileLoader uncachedLoader;
 
     private final SizeButton iSizeButton;
     private final SourceButton iSourceButton;
-    private Bounds bbox;
+    private transient Bounds bbox;
 
     // upper left and lower right corners of the selection rectangle (x/y on ZOOM_MAX)
-    Point iSelectionRectStart;
-    Point iSelectionRectEnd;
+    private Point iSelectionRectStart;
+    private Point iSelectionRectEnd;
 
     /**
      * Constructs a new {@code SlippyMapBBoxChooser}.
diff --git a/src/org/openstreetmap/josm/gui/bbox/SlippyMapControler.java b/src/org/openstreetmap/josm/gui/bbox/SlippyMapControler.java
index c4c4aa9..efa5789 100644
--- a/src/org/openstreetmap/josm/gui/bbox/SlippyMapControler.java
+++ b/src/org/openstreetmap/josm/gui/bbox/SlippyMapControler.java
@@ -18,6 +18,7 @@ import javax.swing.InputMap;
 import javax.swing.JComponent;
 import javax.swing.JPanel;
 import javax.swing.KeyStroke;
+
 import org.openstreetmap.josm.Main;
 
 /**
@@ -167,7 +168,7 @@ public class SlippyMapControler extends MouseAdapter implements MouseMotionListe
 
     private class MoveXAction extends AbstractAction {
 
-        int direction;
+        private int direction;
 
         public MoveXAction(int direction) {
             this.direction = direction;
@@ -181,7 +182,7 @@ public class SlippyMapControler extends MouseAdapter implements MouseMotionListe
 
     private class MoveYAction extends AbstractAction {
 
-        int direction;
+        private int direction;
 
         public MoveYAction(int direction) {
             this.direction = direction;
diff --git a/src/org/openstreetmap/josm/gui/bbox/SourceButton.java b/src/org/openstreetmap/josm/gui/bbox/SourceButton.java
index 4884d33..4feebfa 100644
--- a/src/org/openstreetmap/josm/gui/bbox/SourceButton.java
+++ b/src/org/openstreetmap/josm/gui/bbox/SourceButton.java
@@ -28,7 +28,7 @@ public class SourceButton extends JComponent {
     private static final int TOP_PADDING = 5;
     private static final int BOTTOM_PADDING = 5;
 
-    private TileSource[] sources;
+    private transient TileSource[] sources;
 
     private final ImageIcon enlargeImage;
     private final ImageIcon shrinkImage;
@@ -56,7 +56,7 @@ public class SourceButton extends JComponent {
         addMouseListener(mouseListener);
     }
 
-    private final MouseListener mouseListener = new MouseAdapter() {
+    private final transient MouseListener mouseListener = new MouseAdapter() {
         @Override
         public void mouseReleased(MouseEvent e) {
             if (e.getButton() == MouseEvent.BUTTON1) {
diff --git a/src/org/openstreetmap/josm/gui/bbox/TileSelectionBBoxChooser.java b/src/org/openstreetmap/josm/gui/bbox/TileSelectionBBoxChooser.java
index 4d0309b..d0fca92 100644
--- a/src/org/openstreetmap/josm/gui/bbox/TileSelectionBBoxChooser.java
+++ b/src/org/openstreetmap/josm/gui/bbox/TileSelectionBBoxChooser.java
@@ -82,7 +82,7 @@ import org.openstreetmap.josm.tools.ImageProvider;
 public class TileSelectionBBoxChooser extends JPanel implements BBoxChooser{
 
     /** the current bounding box */
-    private Bounds bbox;
+    private transient Bounds bbox;
     /** the map viewer showing the selected bounding box */
     private TileBoundsMapView mapViewer;
     /** a panel for entering a bounding box given by a  tile grid and a zoom level */
@@ -223,12 +223,12 @@ public class TileSelectionBBoxChooser extends JPanel implements BBoxChooser{
         private JosmTextField tfMinY;
         private JosmTextField tfMaxX;
         private JosmTextField tfMinX;
-        private TileCoordinateValidator valMaxY;
-        private TileCoordinateValidator valMinY;
-        private TileCoordinateValidator valMaxX;
-        private TileCoordinateValidator valMinX;
+        private transient TileCoordinateValidator valMaxY;
+        private transient TileCoordinateValidator valMinY;
+        private transient TileCoordinateValidator valMaxX;
+        private transient TileCoordinateValidator valMinX;
         private JSpinner spZoomLevel;
-        private TileBoundsBuilder tileBoundsBuilder = new TileBoundsBuilder();
+        private transient TileBoundsBuilder tileBoundsBuilder = new TileBoundsBuilder();
         private boolean doFireTileBoundChanged = true;
 
         protected JPanel buildTextPanel() {
@@ -441,7 +441,7 @@ public class TileSelectionBBoxChooser extends JPanel implements BBoxChooser{
         public static final String TILE_BOUNDS_PROP = TileAddressInputPanel.class.getName() + ".tileBounds";
 
         private JosmTextField tfTileAddress;
-        private TileAddressValidator valTileAddress;
+        private transient TileAddressValidator valTileAddress;
 
         protected JPanel buildTextPanel() {
             JPanel pnl = new JPanel(new BorderLayout());
@@ -529,7 +529,7 @@ public class TileSelectionBBoxChooser extends JPanel implements BBoxChooser{
 
         private TileBounds tileBounds = null;
 
-        public TileAddressValidator(JTextComponent tc) throws IllegalArgumentException {
+        public TileAddressValidator(JTextComponent tc) {
             super(tc);
         }
 
@@ -588,7 +588,7 @@ public class TileSelectionBBoxChooser extends JPanel implements BBoxChooser{
         private int zoomLevel;
         private int tileIndex;
 
-        public TileCoordinateValidator(JTextComponent tc) throws IllegalArgumentException {
+        public TileCoordinateValidator(JTextComponent tc) {
             super(tc);
         }
 
diff --git a/src/org/openstreetmap/josm/gui/conflict/pair/ComparePairType.java b/src/org/openstreetmap/josm/gui/conflict/pair/ComparePairType.java
index 0c8b861..b2bd5fa 100644
--- a/src/org/openstreetmap/josm/gui/conflict/pair/ComparePairType.java
+++ b/src/org/openstreetmap/josm/gui/conflict/pair/ComparePairType.java
@@ -77,7 +77,7 @@ public enum ComparePairType {
      *
      * @param role one of the two roles in this pair
      * @return the opposite role
-     * @exception IllegalStateException  if role is not participating in this pair
+     * @throws IllegalStateException  if role is not participating in this pair
      */
     public ListRole getOppositeRole(ListRole role) {
         if (!isParticipatingIn(role))
diff --git a/src/org/openstreetmap/josm/gui/conflict/pair/ConflictResolver.java b/src/org/openstreetmap/josm/gui/conflict/pair/ConflictResolver.java
index f450597..5794a01 100644
--- a/src/org/openstreetmap/josm/gui/conflict/pair/ConflictResolver.java
+++ b/src/org/openstreetmap/josm/gui/conflict/pair/ConflictResolver.java
@@ -71,10 +71,10 @@ public class ConflictResolver extends JPanel implements PropertyChangeListener
     private NodeListMerger nodeListMerger;
     private RelationMemberMerger relationMemberMerger;
     private PropertiesMerger propertiesMerger;
-    private final List<IConflictResolver> conflictResolvers = new ArrayList<>();
-    private OsmPrimitive my;
-    private OsmPrimitive their;
-    private Conflict<? extends OsmPrimitive> conflict;
+    private final transient List<IConflictResolver> conflictResolvers = new ArrayList<>();
+    private transient OsmPrimitive my;
+    private transient OsmPrimitive their;
+    private transient Conflict<? extends OsmPrimitive> conflict;
 
     private ImageIcon mergeComplete;
     private ImageIcon mergeIncomplete;
diff --git a/src/org/openstreetmap/josm/gui/conflict/pair/ListMergeModel.java b/src/org/openstreetmap/josm/gui/conflict/pair/ListMergeModel.java
index 704702f..053b3a0 100644
--- a/src/org/openstreetmap/josm/gui/conflict/pair/ListMergeModel.java
+++ b/src/org/openstreetmap/josm/gui/conflict/pair/ListMergeModel.java
@@ -409,8 +409,7 @@ public abstract class ListMergeModel<T extends PrimitiveId> extends Observable {
      * @param source the list of nodes to copy from
      * @param rows the indices
      * @param current the row index before which the nodes are inserted
-     * @exception IllegalArgumentException thrown, if current < 0 or >= #nodes in list of merged nodes
-     *
+     * @throws IllegalArgumentException if current < 0 or >= #nodes in list of merged nodes
      */
     protected void copyBeforeCurrent(ListRole source, int [] rows, int current) {
         copy(source, rows, current);
@@ -423,8 +422,7 @@ public abstract class ListMergeModel<T extends PrimitiveId> extends Observable {
      *
      * @param rows the indices
      * @param current the row index before which the nodes are inserted
-     * @exception IllegalArgumentException thrown, if current < 0 or >= #nodes in list of merged nodes
-     *
+     * @throws IllegalArgumentException if current < 0 or >= #nodes in list of merged nodes
      */
     public void copyMyBeforeCurrent(int [] rows, int current) {
         copyBeforeCurrent(MY_ENTRIES,rows,current);
@@ -436,8 +434,7 @@ public abstract class ListMergeModel<T extends PrimitiveId> extends Observable {
      *
      * @param rows the indices
      * @param current the row index before which the nodes are inserted
-     * @exception IllegalArgumentException thrown, if current < 0 or >= #nodes in list of merged nodes
-     *
+     * @throws IllegalArgumentException if current < 0 or >= #nodes in list of merged nodes
      */
     public void copyTheirBeforeCurrent(int [] rows, int current) {
         copyBeforeCurrent(THEIR_ENTRIES,rows,current);
@@ -450,8 +447,7 @@ public abstract class ListMergeModel<T extends PrimitiveId> extends Observable {
      * @param source the list of nodes to copy from
      * @param rows the indices
      * @param current the row index after which the nodes are inserted
-     * @exception IllegalArgumentException thrown, if current < 0 or >= #nodes in list of merged nodes
-     *
+     * @throws IllegalArgumentException if current < 0 or >= #nodes in list of merged nodes
      */
     protected void copyAfterCurrent(ListRole source, int [] rows, int current) {
         copy(source, rows, current + 1);
@@ -465,8 +461,7 @@ public abstract class ListMergeModel<T extends PrimitiveId> extends Observable {
      *
      * @param rows the indices
      * @param current the row index after which the nodes are inserted
-     * @exception IllegalArgumentException thrown, if current < 0 or >= #nodes in list of merged nodes
-     *
+     * @throws IllegalArgumentException if current < 0 or >= #nodes in list of merged nodes
      */
     public void copyMyAfterCurrent(int [] rows, int current) {
         copyAfterCurrent(MY_ENTRIES, rows, current);
@@ -478,8 +473,7 @@ public abstract class ListMergeModel<T extends PrimitiveId> extends Observable {
      *
      * @param rows the indices
      * @param current the row index after which the nodes are inserted
-     * @exception IllegalArgumentException thrown, if current < 0 or >= #nodes in list of merged nodes
-     *
+     * @throws IllegalArgumentException if current < 0 or >= #nodes in list of merged nodes
      */
     public void copyTheirAfterCurrent(int [] rows, int current) {
         copyAfterCurrent(THEIR_ENTRIES, rows, current);
@@ -647,7 +641,7 @@ public abstract class ListMergeModel<T extends PrimitiveId> extends Observable {
          * @param row  the row number
          * @return true if the entry at <code>row</code> is equal to the entry at the
          * same position in the opposite list of the current {@link ComparePairType}
-         * @exception IllegalStateException thrown, if this model is not participating in the
+         * @throws IllegalStateException if this model is not participating in the
          *   current  {@link ComparePairType}
          * @see ComparePairType#getOppositeRole(ListRole)
          * @see #getRole()
@@ -671,8 +665,8 @@ public abstract class ListMergeModel<T extends PrimitiveId> extends Observable {
          * @param row the current row
          * @return true if the entry at the current position is present in the opposite list
          * of the current {@link ComparePairType}.
-         * @exception IllegalStateException thrown, if this model is not participating in the
-         *   current  {@link ComparePairType}
+         * @throws IllegalStateException if this model is not participating in the
+         *   current {@link ComparePairType}
          * @see ComparePairType#getOppositeRole(ListRole)
          * @see #getRole()
          * @see #getOppositeEntries()
@@ -734,9 +728,9 @@ public abstract class ListMergeModel<T extends PrimitiveId> extends Observable {
      *
      */
     protected class EntriesSelectionModel extends DefaultListSelectionModel {
-        private final List<T> entries;
+        private final transient List<T> entries;
 
-        public EntriesSelectionModel(ArrayList<T> nodes) {
+        public EntriesSelectionModel(List<T> nodes) {
             this.entries = nodes;
         }
 
@@ -828,7 +822,7 @@ public abstract class ListMergeModel<T extends PrimitiveId> extends Observable {
     public class ComparePairListModel extends AbstractListModel<ComparePairType> implements ComboBoxModel<ComparePairType> {
 
         private int selectedIdx;
-        private final List<ComparePairType> compareModes;
+        private final transient List<ComparePairType> compareModes;
 
         /**
          * Constructs a new {@code ComparePairListModel}.
diff --git a/src/org/openstreetmap/josm/gui/conflict/pair/ListMerger.java b/src/org/openstreetmap/josm/gui/conflict/pair/ListMerger.java
index 6ab0c70..5ccc7f7 100644
--- a/src/org/openstreetmap/josm/gui/conflict/pair/ListMerger.java
+++ b/src/org/openstreetmap/josm/gui/conflict/pair/ListMerger.java
@@ -52,7 +52,7 @@ public abstract class ListMerger<T extends PrimitiveId> extends JPanel implement
     protected OsmPrimitivesTable mergedEntriesTable;
     protected OsmPrimitivesTable theirEntriesTable;
 
-    protected ListMergeModel<T> model;
+    protected transient ListMergeModel<T> model;
 
     private CopyStartLeftAction copyStartLeftAction;
     private CopyBeforeCurrentLeftAction copyBeforeCurrentLeftAction;
@@ -71,7 +71,7 @@ public abstract class ListMerger<T extends PrimitiveId> extends JPanel implement
     private RemoveMergedAction removeMergedAction;
     private FreezeAction freezeAction;
 
-    private AdjustmentSynchronizer adjustmentSynchronizer;
+    private transient AdjustmentSynchronizer adjustmentSynchronizer;
 
     private  JLabel lblMyVersion;
     private  JLabel lblMergedVersion;
diff --git a/src/org/openstreetmap/josm/gui/conflict/pair/PairTable.java b/src/org/openstreetmap/josm/gui/conflict/pair/PairTable.java
index ac952dd..e28af69 100644
--- a/src/org/openstreetmap/josm/gui/conflict/pair/PairTable.java
+++ b/src/org/openstreetmap/josm/gui/conflict/pair/PairTable.java
@@ -13,8 +13,8 @@ import org.openstreetmap.josm.gui.widgets.OsmPrimitivesTableModel;
 
 public abstract class PairTable extends OsmPrimitivesTable {
 
-    private final ListMergeModel<? extends PrimitiveId> model;
-    
+    private final transient ListMergeModel<? extends PrimitiveId> model;
+
     public PairTable(String name, ListMergeModel<? extends PrimitiveId> model, OsmPrimitivesTableModel dm, TableColumnModel cm, ListSelectionModel sm) {
         super(dm, cm, sm);
         this.model = model;
diff --git a/src/org/openstreetmap/josm/gui/conflict/pair/nodes/NodeListMergeModel.java b/src/org/openstreetmap/josm/gui/conflict/pair/nodes/NodeListMergeModel.java
index c8bb7f7..a584c10 100644
--- a/src/org/openstreetmap/josm/gui/conflict/pair/nodes/NodeListMergeModel.java
+++ b/src/org/openstreetmap/josm/gui/conflict/pair/nodes/NodeListMergeModel.java
@@ -26,8 +26,8 @@ public class NodeListMergeModel extends ListMergeModel<Node>{
      * @param my  my way (i.e. the way in the local dataset)
      * @param their their way (i.e. the way in the server dataset)
      * @param mergedMap The map of merged primitives if the conflict results from merging two layers
-     * @exception IllegalArgumentException thrown, if my is null
-     * @exception IllegalArgumentException  thrown, if their is null
+     * @throws IllegalArgumentException if my is null
+     * @throws IllegalArgumentException if their is null
      */
     public void populate(Way my, Way their, Map<PrimitiveId, PrimitiveId> mergedMap) {
         initPopulate(my, their, mergedMap);
@@ -53,7 +53,7 @@ public class NodeListMergeModel extends ListMergeModel<Node>{
      *
      * @param conflict the conflict data set
      * @return the command
-     * @exception IllegalStateException thrown, if the merge is not yet frozen
+     * @throws IllegalStateException if the merge is not yet frozen
      */
     public WayNodesConflictResolverCommand buildResolveCommand(Conflict<? extends OsmPrimitive> conflict) {
         if (! isFrozen())
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 e04921d..77ef071 100644
--- a/src/org/openstreetmap/josm/gui/conflict/pair/nodes/NodeListTableCellRenderer.java
+++ b/src/org/openstreetmap/josm/gui/conflict/pair/nodes/NodeListTableCellRenderer.java
@@ -24,7 +24,7 @@ import org.openstreetmap.josm.tools.ImageProvider;
 public  class NodeListTableCellRenderer extends JLabel implements TableCellRenderer {
 
     private final ImageIcon icon;
-    private final Border rowNumberBorder;
+    private final transient Border rowNumberBorder;
 
     /**
      * constructor
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 051f3c5..a614921 100644
--- a/src/org/openstreetmap/josm/gui/conflict/pair/properties/PropertiesMergeModel.java
+++ b/src/org/openstreetmap/josm/gui/conflict/pair/properties/PropertiesMergeModel.java
@@ -259,9 +259,9 @@ public class PropertiesMergeModel extends Observable {
      * decides the conflict between two deleted states
      * @param decision the decision (must not be null)
      *
-     * @throws IllegalArgumentException thrown, if decision is null
+     * @throws IllegalArgumentException if decision is null
      */
-    public void decideDeletedStateConflict(MergeDecisionType decision) throws IllegalArgumentException{
+    public void decideDeletedStateConflict(MergeDecisionType decision) {
         CheckParameterUtil.ensureParameterNotNull(decision, "decision");
 
         boolean oldMergedDeletedState = getMergedDeletedState(this.deletedMergeDecision);
@@ -288,7 +288,7 @@ public class PropertiesMergeModel extends Observable {
         if (myCoords == null && theirCoords != null) return true;
         if (myCoords != null && theirCoords == null) return true;
         if (myCoords == null && theirCoords == null) return false;
-        return !myCoords.equalsEpsilon(theirCoords);
+        return myCoords != null && !myCoords.equalsEpsilon(theirCoords);
     }
 
     /**
diff --git a/src/org/openstreetmap/josm/gui/conflict/pair/properties/PropertiesMerger.java b/src/org/openstreetmap/josm/gui/conflict/pair/properties/PropertiesMerger.java
index 451c965..4461466 100644
--- a/src/org/openstreetmap/josm/gui/conflict/pair/properties/PropertiesMerger.java
+++ b/src/org/openstreetmap/josm/gui/conflict/pair/properties/PropertiesMerger.java
@@ -47,7 +47,7 @@ public class PropertiesMerger extends JPanel implements Observer, IConflictResol
     private JLabel lblMyReferrers;
     private JLabel lblTheirReferrers;
 
-    private final PropertiesMergeModel model;
+    private final transient PropertiesMergeModel model;
 
     protected JLabel buildValueLabel(String name) {
         JLabel lbl = new JLabel();
diff --git a/src/org/openstreetmap/josm/gui/conflict/pair/relation/RelationMemberListMergeModel.java b/src/org/openstreetmap/josm/gui/conflict/pair/relation/RelationMemberListMergeModel.java
index 3c3f7aa..5726617 100644
--- a/src/org/openstreetmap/josm/gui/conflict/pair/relation/RelationMemberListMergeModel.java
+++ b/src/org/openstreetmap/josm/gui/conflict/pair/relation/RelationMemberListMergeModel.java
@@ -101,9 +101,9 @@ public class RelationMemberListMergeModel extends ListMergeModel<RelationMember>
      * @param my  my relation. Must not be null.
      * @param their  their relation. Must not be null
      * @return the command
-     * @exception IllegalArgumentException thrown, if my is null
-     * @exception IllegalArgumentException thrown, if their is null
-     * @exception IllegalStateException thrown, if the merge is not yet frozen
+     * @throws IllegalArgumentException if my is null
+     * @throws IllegalArgumentException if their is null
+     * @throws IllegalStateException if the merge is not yet frozen
      */
     public RelationMemberConflictResolverCommand buildResolveCommand(Relation my, Relation their) {
         CheckParameterUtil.ensureParameterNotNull(my, "my");
diff --git a/src/org/openstreetmap/josm/gui/conflict/pair/relation/RelationMemberTableCellRenderer.java b/src/org/openstreetmap/josm/gui/conflict/pair/relation/RelationMemberTableCellRenderer.java
index b2d1b42..7d2e2d1 100644
--- a/src/org/openstreetmap/josm/gui/conflict/pair/relation/RelationMemberTableCellRenderer.java
+++ b/src/org/openstreetmap/josm/gui/conflict/pair/relation/RelationMemberTableCellRenderer.java
@@ -22,7 +22,7 @@ import org.openstreetmap.josm.tools.ImageProvider;
  *
  */
 public  class RelationMemberTableCellRenderer extends JLabel implements TableCellRenderer {
-    private  Border rowNumberBorder = null;
+    private transient Border rowNumberBorder = null;
 
     /**
      * constructor
diff --git a/src/org/openstreetmap/josm/gui/conflict/pair/tags/TagMergeItem.java b/src/org/openstreetmap/josm/gui/conflict/pair/tags/TagMergeItem.java
index 12c2663..581673f 100644
--- a/src/org/openstreetmap/josm/gui/conflict/pair/tags/TagMergeItem.java
+++ b/src/org/openstreetmap/josm/gui/conflict/pair/tags/TagMergeItem.java
@@ -43,9 +43,9 @@ public class TagMergeItem {
      * @param key  the tag key common to the merged OSM primitives. Must not be null.
      * @param my  my version of the OSM primitive (i.e. the version known in the local dataset). Must not be null.
      * @param their their version of the OSM primitive (i.e. the version known on the server). Must not be null.
-     * @throws IllegalArgumentException thrown if key is null
-     * @throws IllegalArgumentException thrown if my is null
-     * @throws IllegalArgumentException thrown if their is null
+     * @throws IllegalArgumentException if key is null
+     * @throws IllegalArgumentException if my is null
+     * @throws IllegalArgumentException if their is null
      */
     public TagMergeItem(String key, OsmPrimitive my, OsmPrimitive their) {
         CheckParameterUtil.ensureParameterNotNull(key, "key");
@@ -60,10 +60,9 @@ public class TagMergeItem {
      * applies a merge decision to this merge item
      *
      * @param decision the merge decision. Must not be null.
-     * @exception IllegalArgumentException thrown if decision is null
-     *
+     * @throws IllegalArgumentException if decision is null
      */
-    public void decide(MergeDecisionType decision) throws IllegalArgumentException {
+    public void decide(MergeDecisionType decision) {
         CheckParameterUtil.ensureParameterNotNull(decision, "decision");
         this.mergeDecision = decision;
     }
@@ -90,10 +89,10 @@ public class TagMergeItem {
      * not 'their' primitive)
      *
      * @param primitive the OSM primitive. Must not be null.
-     * @exception IllegalArgumentException thrown, if primitive is null
-     * @exception IllegalStateException  thrown, if this merge item is undecided
+     * @throws IllegalArgumentException if primitive is null
+     * @throws IllegalStateException if this merge item is undecided
      */
-    public void applyToMyPrimitive(OsmPrimitive primitive) throws IllegalArgumentException, IllegalStateException {
+    public void applyToMyPrimitive(OsmPrimitive primitive) {
         CheckParameterUtil.ensureParameterNotNull(primitive, "primitive");
         if (mergeDecision == MergeDecisionType.UNDECIDED) {
             throw new IllegalStateException(tr("Cannot apply undecided tag merge item."));
diff --git a/src/org/openstreetmap/josm/gui/conflict/pair/tags/TagMergeModel.java b/src/org/openstreetmap/josm/gui/conflict/pair/tags/TagMergeModel.java
index d23e5ad..1a66a93 100644
--- a/src/org/openstreetmap/josm/gui/conflict/pair/tags/TagMergeModel.java
+++ b/src/org/openstreetmap/josm/gui/conflict/pair/tags/TagMergeModel.java
@@ -32,13 +32,16 @@ public class TagMergeModel extends DefaultTableModel {
     public static final String PROP_NUM_UNDECIDED_TAGS = TagMergeModel.class.getName() + ".numUndecidedTags";
 
     /** the list of tag merge items */
-    private final List<TagMergeItem> tagMergeItems;
+    private final transient List<TagMergeItem> tagMergeItems;
 
     /** the property change listeners */
-    private final List<PropertyChangeListener> listeners;
+    private final transient List<PropertyChangeListener> listeners;
 
     private int numUndecidedTags = 0;
 
+    /**
+     * Constructs a new {@code TagMergeModel}.
+     */
     public TagMergeModel() {
         tagMergeItems = new ArrayList<>();
         listeners = new ArrayList<>();
diff --git a/src/org/openstreetmap/josm/gui/conflict/pair/tags/TagMerger.java b/src/org/openstreetmap/josm/gui/conflict/pair/tags/TagMerger.java
index 9efde3d..4d8349d 100644
--- a/src/org/openstreetmap/josm/gui/conflict/pair/tags/TagMerger.java
+++ b/src/org/openstreetmap/josm/gui/conflict/pair/tags/TagMerger.java
@@ -41,7 +41,7 @@ public class TagMerger extends JPanel implements IConflictResolver {
     private JTable mergedTable;
     private JTable theirTable;
     private final TagMergeModel model;
-    AdjustmentSynchronizer adjustmentSynchronizer;
+    private transient AdjustmentSynchronizer adjustmentSynchronizer;
 
     /**
      * embeds table in a new {@link JScrollPane} and returns th scroll pane
diff --git a/src/org/openstreetmap/josm/gui/conflict/tags/CombinePrimitiveResolverDialog.java b/src/org/openstreetmap/josm/gui/conflict/tags/CombinePrimitiveResolverDialog.java
index b82af47..e7133993 100644
--- a/src/org/openstreetmap/josm/gui/conflict/tags/CombinePrimitiveResolverDialog.java
+++ b/src/org/openstreetmap/josm/gui/conflict/tags/CombinePrimitiveResolverDialog.java
@@ -115,7 +115,7 @@ public class CombinePrimitiveResolverDialog extends JDialog {
     protected RelationMemberConflictResolver pnlRelationMemberConflictResolver;
     private boolean canceled;
     private JPanel pnlButtons;
-    protected OsmPrimitive targetPrimitive;
+    protected transient OsmPrimitive targetPrimitive;
 
     /** the private help action */
     private ContextSensitiveHelpAction helpAction;
@@ -252,7 +252,7 @@ public class CombinePrimitiveResolverDialog extends JDialog {
     }
 
     protected List<Command> buildTagChangeCommand(OsmPrimitive primitive, TagCollection tc) {
-        LinkedList<Command> cmds = new LinkedList<>();
+        List<Command> cmds = new LinkedList<>();
         for (String key : tc.getKeys()) {
             if (tc.hasUniqueEmptyValue(key)) {
                 if (primitive.get(key) != null) {
diff --git a/src/org/openstreetmap/josm/gui/conflict/tags/MultiValueResolutionDecision.java b/src/org/openstreetmap/josm/gui/conflict/tags/MultiValueResolutionDecision.java
index e4d37a4..9af8a27 100644
--- a/src/org/openstreetmap/josm/gui/conflict/tags/MultiValueResolutionDecision.java
+++ b/src/org/openstreetmap/josm/gui/conflict/tags/MultiValueResolutionDecision.java
@@ -47,11 +47,11 @@ public class MultiValueResolutionDecision {
      * All tags must have the same key.
      *
      * @param tags the tags. Must not be null.
-     * @exception IllegalArgumentException  thrown if tags is null
-     * @exception IllegalArgumentException thrown if there are more than one keys
-     * @exception IllegalArgumentException thrown if tags is empty
+     * @throws IllegalArgumentException if tags is null
+     * @throws IllegalArgumentException if there are more than one keys
+     * @throws IllegalArgumentException if tags is empty
      */
-    public MultiValueResolutionDecision(TagCollection tags) throws IllegalArgumentException {
+    public MultiValueResolutionDecision(TagCollection tags) {
         CheckParameterUtil.ensureParameterNotNull(tags, "tags");
         if (tags.isEmpty())
             throw new IllegalArgumentException(MessageFormat.format("Parameter ''{0}'' must not be empty.", "tags"));
@@ -103,10 +103,10 @@ public class MultiValueResolutionDecision {
      * Apply the decision to keep exactly one value
      *
      * @param value  the value to keep
-     * @throws IllegalArgumentException thrown if value is null
-     * @throws IllegalStateException thrown if value is not in the list of known values for this tag
+     * @throws IllegalArgumentException if value is null
+     * @throws IllegalStateException if value is not in the list of known values for this tag
      */
-    public void keepOne(String value) throws IllegalArgumentException, IllegalStateException {
+    public void keepOne(String value) {
         CheckParameterUtil.ensureParameterNotNull(value, "value");
         if (!tags.getValues().contains(value))
             throw new IllegalStateException(tr("Tag collection does not include the selected value ''{0}''.", value));
@@ -140,9 +140,9 @@ public class MultiValueResolutionDecision {
      * Replies the chosen value
      *
      * @return the chosen value
-     * @throws IllegalStateException thrown if this resolution is not yet decided
+     * @throws IllegalStateException if this resolution is not yet decided
      */
-    public String getChosenValue() throws IllegalStateException {
+    public String getChosenValue() {
         switch(type) {
         case UNDECIDED: throw new IllegalStateException(tr("Not decided yet."));
         case KEEP_ONE: return value;
@@ -233,7 +233,7 @@ public class MultiValueResolutionDecision {
      * Applies the resolution to an {@link OsmPrimitive}
      *
      * @param primitive the primitive
-     * @throws IllegalStateException thrown if this resolution is not resolved yet
+     * @throws IllegalStateException if this resolution is not resolved yet
      *
      */
     public void applyTo(OsmPrimitive primitive) {
@@ -252,7 +252,7 @@ public class MultiValueResolutionDecision {
      * Applies this resolution to a collection of primitives
      *
      * @param primitives the collection of primitives
-     * @throws IllegalStateException thrown if this resolution is not resolved yet
+     * @throws IllegalStateException if this resolution is not resolved yet
      */
     public void applyTo(Collection<? extends OsmPrimitive> primitives) {
         if (primitives == null) return;
@@ -269,8 +269,8 @@ public class MultiValueResolutionDecision {
      *
      * @param primitive  the primitive
      * @return the change command
-     * @throws IllegalArgumentException thrown if primitive is null
-     * @throws IllegalStateException thrown if this resolution is not resolved yet
+     * @throws IllegalArgumentException if primitive is null
+     * @throws IllegalStateException if this resolution is not resolved yet
      */
     public Command buildChangeCommand(OsmPrimitive primitive) {
         CheckParameterUtil.ensureParameterNotNull(primitive, "primitive");
@@ -283,10 +283,10 @@ public class MultiValueResolutionDecision {
     /**
      * Builds a change command for applying this resolution to a collection of primitives
      *
-     * @param primitives  the collection of primitives
+     * @param primitives the collection of primitives
      * @return the change command
-     * @throws IllegalArgumentException thrown if primitives is null
-     * @throws IllegalStateException thrown if this resolution is not resolved yet
+     * @throws IllegalArgumentException if primitives is null
+     * @throws IllegalStateException if this resolution is not resolved yet
      */
     public Command buildChangeCommand(Collection<? extends OsmPrimitive> primitives) {
         CheckParameterUtil.ensureParameterNotNull(primitives, "primitives");
diff --git a/src/org/openstreetmap/josm/gui/conflict/tags/PasteTagsConflictResolverDialog.java b/src/org/openstreetmap/josm/gui/conflict/tags/PasteTagsConflictResolverDialog.java
index f03786f..b70181e 100644
--- a/src/org/openstreetmap/josm/gui/conflict/tags/PasteTagsConflictResolverDialog.java
+++ b/src/org/openstreetmap/josm/gui/conflict/tags/PasteTagsConflictResolverDialog.java
@@ -57,7 +57,7 @@ public class PasteTagsConflictResolverDialog extends JDialog  implements Propert
     }
 
     private TagConflictResolver allPrimitivesResolver;
-    private Map<OsmPrimitiveType, TagConflictResolver> resolvers;
+    private transient Map<OsmPrimitiveType, TagConflictResolver> resolvers;
     private JTabbedPane tpResolvers;
     private Mode mode;
     private boolean canceled = false;
@@ -67,6 +67,10 @@ public class PasteTagsConflictResolverDialog extends JDialog  implements Propert
     private StatisticsTableModel statisticsModel;
     private JPanel pnlTagResolver;
 
+    /**
+     * Constructs a new {@code PasteTagsConflictResolverDialog}.
+     * @param owner parent component
+     */
     public PasteTagsConflictResolverDialog(Component owner) {
         super(JOptionPane.getFrameForComponent(owner), ModalityType.DOCUMENT_MODAL);
         build();
@@ -113,8 +117,8 @@ public class PasteTagsConflictResolverDialog extends JDialog  implements Propert
         // -- apply button
         ApplyAction applyAction = new ApplyAction();
         allPrimitivesResolver.getModel().addPropertyChangeListener(applyAction);
-        for (OsmPrimitiveType type: resolvers.keySet()) {
-            resolvers.get(type).getModel().addPropertyChangeListener(applyAction);
+        for (TagConflictResolver r : resolvers.values()) {
+            r.getModel().addPropertyChangeListener(applyAction);
         }
         pnl.add(new SideButton(applyAction));
 
@@ -265,7 +269,7 @@ public class PasteTagsConflictResolverDialog extends JDialog  implements Propert
 
     class CancelAction extends AbstractAction {
 
-        public CancelAction() {
+        private CancelAction() {
             putValue(Action.SHORT_DESCRIPTION, tr("Cancel conflict resolution"));
             putValue(Action.NAME, tr("Cancel"));
             putValue(Action.SMALL_ICON, ImageProvider.get("", "cancel"));
@@ -281,7 +285,7 @@ public class PasteTagsConflictResolverDialog extends JDialog  implements Propert
 
     class ApplyAction extends AbstractAction implements PropertyChangeListener {
 
-        public ApplyAction() {
+        private ApplyAction() {
             putValue(Action.SHORT_DESCRIPTION, tr("Apply resolved conflicts"));
             putValue(Action.NAME, tr("Apply"));
             putValue(Action.SMALL_ICON, ImageProvider.get("ok"));
@@ -353,19 +357,19 @@ public class PasteTagsConflictResolverDialog extends JDialog  implements Propert
         }
     }
 
-    public static class StatisticsInfo {
+    private static class StatisticsInfo {
         public int numTags;
         public Map<OsmPrimitiveType, Integer> sourceInfo;
         public Map<OsmPrimitiveType, Integer> targetInfo;
 
-        public StatisticsInfo() {
+        private StatisticsInfo() {
             sourceInfo = new HashMap<>();
             targetInfo = new HashMap<>();
         }
     }
 
     private static class StatisticsTableColumnModel extends DefaultTableColumnModel {
-        public StatisticsTableColumnModel() {
+        private StatisticsTableColumnModel() {
             TableCellRenderer renderer = new StatisticsInfoRenderer();
             TableColumn col = null;
 
@@ -394,9 +398,9 @@ public class PasteTagsConflictResolverDialog extends JDialog  implements Propert
 
     private static class StatisticsTableModel extends DefaultTableModel {
         private static final String[] HEADERS = new String[] {tr("Paste ..."), tr("From ..."), tr("To ...") };
-        private List<StatisticsInfo> data;
+        private transient List<StatisticsInfo> data;
 
-        public StatisticsTableModel() {
+        private StatisticsTableModel() {
             data = new ArrayList<>();
         }
 
@@ -515,7 +519,7 @@ public class PasteTagsConflictResolverDialog extends JDialog  implements Propert
             add(infoTable, BorderLayout.CENTER);
         }
 
-        public StatisticsInfoTable(StatisticsTableModel model) {
+        private StatisticsInfoTable(StatisticsTableModel model) {
             build(model);
         }
 
diff --git a/src/org/openstreetmap/josm/gui/conflict/tags/RelationMemberConflictDecision.java b/src/org/openstreetmap/josm/gui/conflict/tags/RelationMemberConflictDecision.java
index eff56ec..9e794ea 100644
--- a/src/org/openstreetmap/josm/gui/conflict/tags/RelationMemberConflictDecision.java
+++ b/src/org/openstreetmap/josm/gui/conflict/tags/RelationMemberConflictDecision.java
@@ -17,7 +17,7 @@ public class RelationMemberConflictDecision {
     private String role;
     private RelationMemberConflictDecisionType decision;
 
-    public RelationMemberConflictDecision(Relation relation, int pos) throws IllegalArgumentException {
+    public RelationMemberConflictDecision(Relation relation, int pos) {
         CheckParameterUtil.ensureParameterNotNull(relation, "relation");
         RelationMember member = relation.getMember(pos);
         if (member == null)
diff --git a/src/org/openstreetmap/josm/gui/conflict/tags/RelationMemberConflictDecisionEditor.java b/src/org/openstreetmap/josm/gui/conflict/tags/RelationMemberConflictDecisionEditor.java
index a44c8d9..d1872c9 100644
--- a/src/org/openstreetmap/josm/gui/conflict/tags/RelationMemberConflictDecisionEditor.java
+++ b/src/org/openstreetmap/josm/gui/conflict/tags/RelationMemberConflictDecisionEditor.java
@@ -33,7 +33,7 @@ public class RelationMemberConflictDecisionEditor extends JosmComboBox<RelationM
         return this;
     }
 
-    private final CellEditorSupport tableCellEditorSupport;
+    private final transient CellEditorSupport tableCellEditorSupport;
     private RelationMemberConflictDecisionType originalValue;
 
     @Override
diff --git a/src/org/openstreetmap/josm/gui/conflict/tags/RelationMemberConflictResolverColumnModel.java b/src/org/openstreetmap/josm/gui/conflict/tags/RelationMemberConflictResolverColumnModel.java
index 140a227..0abb864 100644
--- a/src/org/openstreetmap/josm/gui/conflict/tags/RelationMemberConflictResolverColumnModel.java
+++ b/src/org/openstreetmap/josm/gui/conflict/tags/RelationMemberConflictResolverColumnModel.java
@@ -19,7 +19,7 @@ public class RelationMemberConflictResolverColumnModel extends DefaultTableColum
 
     private final DefaultTableCellRenderer defaultTableCellRenderer = new DefaultTableCellRenderer();
 
-    private final OsmPrimitivRenderer primitiveRenderer = new OsmPrimitivRenderer() {
+    private final transient OsmPrimitivRenderer primitiveRenderer = new OsmPrimitivRenderer() {
         @Override
         public Component getTableCellRendererComponent(JTable table,
                 Object value, boolean isSelected, boolean hasFocus, int row, int column) {
@@ -28,7 +28,7 @@ public class RelationMemberConflictResolverColumnModel extends DefaultTableColum
         }
     };
 
-    private final TableCellRenderer tableRenderer = new TableCellRenderer() {
+    private final transient TableCellRenderer tableRenderer = new TableCellRenderer() {
         @Override
         public Component getTableCellRendererComponent(JTable table, Object value,
                 boolean isSelected, boolean hasFocus, int row, int column) {
diff --git a/src/org/openstreetmap/josm/gui/conflict/tags/RelationMemberConflictResolverModel.java b/src/org/openstreetmap/josm/gui/conflict/tags/RelationMemberConflictResolverModel.java
index bf0724d..19ef1b0 100644
--- a/src/org/openstreetmap/josm/gui/conflict/tags/RelationMemberConflictResolverModel.java
+++ b/src/org/openstreetmap/josm/gui/conflict/tags/RelationMemberConflictResolverModel.java
@@ -30,9 +30,9 @@ public class RelationMemberConflictResolverModel extends DefaultTableModel {
     public static final String NUM_CONFLICTS_PROP = RelationMemberConflictResolverModel.class.getName() + ".numConflicts";
 
     /** the list of conflict decisions */
-    protected final List<RelationMemberConflictDecision> decisions;
+    protected final transient List<RelationMemberConflictDecision> decisions;
     /** the collection of relations for which we manage conflicts */
-    protected Collection<Relation> relations;
+    protected transient Collection<Relation> relations;
     /** the number of conflicts */
     private int numConflicts;
     private final PropertyChangeSupport support;
diff --git a/src/org/openstreetmap/josm/gui/conflict/tags/TagConflictResolverModel.java b/src/org/openstreetmap/josm/gui/conflict/tags/TagConflictResolverModel.java
index 28061f5..fba2775 100644
--- a/src/org/openstreetmap/josm/gui/conflict/tags/TagConflictResolverModel.java
+++ b/src/org/openstreetmap/josm/gui/conflict/tags/TagConflictResolverModel.java
@@ -21,10 +21,10 @@ import org.openstreetmap.josm.tools.CheckParameterUtil;
 public class TagConflictResolverModel extends DefaultTableModel {
     public static final String NUM_CONFLICTS_PROP = TagConflictResolverModel.class.getName() + ".numConflicts";
 
-    private TagCollection tags;
-    private List<String> displayedKeys;
-    private Set<String> keysWithConflicts;
-    private Map<String, MultiValueResolutionDecision> decisions;
+    private transient TagCollection tags;
+    private transient List<String> displayedKeys;
+    private transient Set<String> keysWithConflicts;
+    private transient Map<String, MultiValueResolutionDecision> decisions;
     private int numConflicts;
     private PropertyChangeSupport support;
     private boolean showTagsWithConflictsOnly = false;
@@ -126,7 +126,7 @@ public class TagConflictResolverModel extends DefaultTableModel {
      *
      * @param tags  the tag collection with the tags. Must not be null.
      * @param keysWithConflicts the set of tag keys with conflicts
-     * @throws IllegalArgumentException thrown if tags is null
+     * @throws IllegalArgumentException if tags is null
      */
     public void populate(TagCollection tags, Set<String> keysWithConflicts) {
         CheckParameterUtil.ensureParameterNotNull(tags, "tags");
diff --git a/src/org/openstreetmap/josm/gui/dialogs/CommandListMutableTreeNode.java b/src/org/openstreetmap/josm/gui/dialogs/CommandListMutableTreeNode.java
index c44bc91..5c23368 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/CommandListMutableTreeNode.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/CommandListMutableTreeNode.java
@@ -11,7 +11,7 @@ import org.openstreetmap.josm.command.PseudoCommand;
  */
 public class CommandListMutableTreeNode extends DefaultMutableTreeNode {
 
-    protected PseudoCommand cmd;
+    protected transient PseudoCommand cmd;
     protected int idx;
 
     public CommandListMutableTreeNode(PseudoCommand cmd, int idx) {
diff --git a/src/org/openstreetmap/josm/gui/dialogs/CommandStackDialog.java b/src/org/openstreetmap/josm/gui/dialogs/CommandStackDialog.java
index 85cb56a..159447a 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/CommandStackDialog.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/CommandStackDialog.java
@@ -62,8 +62,8 @@ public class CommandStackDialog extends ToggleDialog implements CommandQueueList
     private final JTree undoTree = new JTree(undoTreeModel);
     private final JTree redoTree = new JTree(redoTreeModel);
 
-    private UndoRedoSelectionListener undoSelectionListener;
-    private UndoRedoSelectionListener redoSelectionListener;
+    private transient UndoRedoSelectionListener undoSelectionListener;
+    private transient UndoRedoSelectionListener redoSelectionListener;
 
     private JScrollPane scrollPane;
     private JSeparator separator = new JSeparator();
@@ -245,7 +245,7 @@ public class CommandStackDialog extends ToggleDialog implements CommandQueueList
     /**
      * Simple listener setup to update the button enabled state when the side dialog shows.
      */
-    Set<IEnabledStateUpdating> showNotifyListener = new LinkedHashSet<>();
+    private transient Set<IEnabledStateUpdating> showNotifyListener = new LinkedHashSet<>();
 
     private void addShowNotifyListener(IEnabledStateUpdating listener) {
         showNotifyListener.add(listener);
diff --git a/src/org/openstreetmap/josm/gui/dialogs/ConflictDialog.java b/src/org/openstreetmap/josm/gui/dialogs/ConflictDialog.java
index 3bb1a3b..e163122 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/ConflictDialog.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/ConflictDialog.java
@@ -76,15 +76,15 @@ public final class ConflictDialog extends ToggleDialog implements MapView.EditLa
     }
 
     /** the collection of conflicts displayed by this conflict dialog */
-    private ConflictCollection conflicts;
+    private transient ConflictCollection conflicts;
 
     /** the model for the list of conflicts */
-    private ConflictListModel model;
+    private transient ConflictListModel model;
     /** the list widget for the list of conflicts */
     private JList<OsmPrimitive> lstConflicts;
 
     private final JPopupMenu popupMenu = new JPopupMenu();
-    private final PopupMenuHandler popupMenuHandler = new PopupMenuHandler(popupMenu);
+    private final transient PopupMenuHandler popupMenuHandler = new PopupMenuHandler(popupMenu);
 
     private ResolveAction actResolve;
     private SelectAction actSelect;
diff --git a/src/org/openstreetmap/josm/gui/dialogs/DialogsPanel.java b/src/org/openstreetmap/josm/gui/dialogs/DialogsPanel.java
index bcf1e98..54a2462 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/DialogsPanel.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/DialogsPanel.java
@@ -18,14 +18,14 @@ import org.openstreetmap.josm.tools.CheckParameterUtil;
 import org.openstreetmap.josm.tools.Destroyable;
 
 public class DialogsPanel extends JPanel implements Destroyable {
-    protected List<ToggleDialog> allDialogs = new ArrayList<>();
+    protected transient List<ToggleDialog> allDialogs = new ArrayList<>();
     protected MultiSplitPane mSpltPane = new MultiSplitPane();
     protected static final int DIVIDER_SIZE = 5;
 
     /**
      * Panels that are added to the multisplitpane.
      */
-    private List<JPanel> panels = new ArrayList<>();
+    private transient List<JPanel> panels = new ArrayList<>();
 
     private final JSplitPane parent;
     public DialogsPanel(JSplitPane parent) {
diff --git a/src/org/openstreetmap/josm/gui/dialogs/FilterDialog.java b/src/org/openstreetmap/josm/gui/dialogs/FilterDialog.java
index 6897716..3973c01 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/FilterDialog.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/FilterDialog.java
@@ -367,7 +367,7 @@ public class FilterDialog extends ToggleDialog implements DataSetListener {
 
     abstract class AbstractFilterAction extends AbstractAction implements MultikeyShortcutAction {
 
-        protected Filter lastFilter;
+        protected transient Filter lastFilter;
 
         @Override
         public void actionPerformed(ActionEvent e) {
diff --git a/src/org/openstreetmap/josm/gui/dialogs/FilterTableModel.java b/src/org/openstreetmap/josm/gui/dialogs/FilterTableModel.java
index d6fb30b..2f0720c 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/FilterTableModel.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/FilterTableModel.java
@@ -53,8 +53,8 @@ public class FilterTableModel extends AbstractTableModel {
         loadPrefs();
     }
 
-    private final List<Filter> filters = new LinkedList<>();
-    private final FilterMatcher filterMatcher = new FilterMatcher();
+    private final transient List<Filter> filters = new LinkedList<>();
+    private final transient FilterMatcher filterMatcher = new FilterMatcher();
 
     private void updateFilters() {
         try {
diff --git a/src/org/openstreetmap/josm/gui/dialogs/InspectPrimitiveDialog.java b/src/org/openstreetmap/josm/gui/dialogs/InspectPrimitiveDialog.java
index f1de07c..5c16369 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/InspectPrimitiveDialog.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/InspectPrimitiveDialog.java
@@ -59,10 +59,10 @@ import org.openstreetmap.josm.tools.date.DateUtils;
  */
 public class InspectPrimitiveDialog extends ExtendedDialog {
 
-    protected List<OsmPrimitive> primitives;
-    protected OsmDataLayer layer;
+    protected transient List<OsmPrimitive> primitives;
+    protected transient OsmDataLayer layer;
     private JosmTextArea txtMappaint;
-    boolean mappaintTabLoaded;
+    private boolean mappaintTabLoaded;
 
     public InspectPrimitiveDialog(Collection<OsmPrimitive> primitives, OsmDataLayer layer) {
         super(Main.parent, tr("Advanced object info"), new String[] {tr("Close")});
@@ -116,8 +116,8 @@ public class InspectPrimitiveDialog extends ExtendedDialog {
     }
 
     class DataText {
-        static final String INDENT = "  ";
-        static final String NL = "\n";
+        private static final String INDENT = "  ";
+        private static final String NL = "\n";
 
         private StringBuilder s = new StringBuilder();
 
diff --git a/src/org/openstreetmap/josm/gui/dialogs/LatLonDialog.java b/src/org/openstreetmap/josm/gui/dialogs/LatLonDialog.java
index d78218f..521caaf 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/LatLonDialog.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/LatLonDialog.java
@@ -434,7 +434,8 @@ public class LatLonDialog extends ExtendedDialog {
     }
 
     private static class LatLonHolder {
-        double lat, lon;
+        private double lat;
+        private double lon;
     }
 
     private static void setLatLonObj(final LatLonHolder latLon,
diff --git a/src/org/openstreetmap/josm/gui/dialogs/LayerListDialog.java b/src/org/openstreetmap/josm/gui/dialogs/LayerListDialog.java
index 334979c..ed5ba3b 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/LayerListDialog.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/LayerListDialog.java
@@ -96,10 +96,10 @@ public class LayerListDialog extends ToggleDialog {
      * Replies the instance of the dialog
      *
      * @return the instance of the dialog
-     * @throws IllegalStateException thrown, if the dialog is not created yet
+     * @throws IllegalStateException if the dialog is not created yet
      * @see #createInstance(MapFrame)
      */
-    public static LayerListDialog getInstance() throws IllegalStateException {
+    public static LayerListDialog getInstance() {
         if (instance == null)
             throw new IllegalStateException("Dialog not created yet. Invoke createInstance() first");
         return instance;
@@ -113,13 +113,13 @@ public class LayerListDialog extends ToggleDialog {
 
     private SideButton opacityButton;
 
-    ActivateLayerAction activateLayerAction;
-    ShowHideLayerAction showHideLayerAction;
+    private ActivateLayerAction activateLayerAction;
+    private ShowHideLayerAction showHideLayerAction;
 
     //TODO This duplicates ShowHide actions functionality
     /** stores which layer index to toggle and executes the ShowHide action if the layer is present */
     private final class ToggleLayerIndexVisibility extends AbstractAction {
-        int layerIndex = -1;
+        private int layerIndex = -1;
         public ToggleLayerIndexVisibility(int layerIndex) {
             this.layerIndex = layerIndex;
         }
@@ -132,7 +132,7 @@ public class LayerListDialog extends ToggleDialog {
         }
     }
 
-    private final Shortcut[] visibilityToggleShortcuts = new Shortcut[10];
+    private final transient Shortcut[] visibilityToggleShortcuts = new Shortcut[10];
     private final ToggleLayerIndexVisibility[] visibilityToggleActions = new ToggleLayerIndexVisibility[10];
 
     /**
@@ -439,8 +439,8 @@ public class LayerListDialog extends ToggleDialog {
      */
     public final class ShowHideLayerAction extends AbstractAction implements IEnabledStateUpdating, LayerAction, MultikeyShortcutAction {
 
-        private WeakReference<Layer> lastLayer;
-        private Shortcut multikeyShortcut;
+        private transient WeakReference<Layer> lastLayer;
+        private transient Shortcut multikeyShortcut;
 
         /**
          * Creates a {@link ShowHideLayerAction} which will toggle the visibility of
@@ -525,7 +525,7 @@ public class LayerListDialog extends ToggleDialog {
      * Action which allows to change the opacity of one or more layers.
      */
     public final class LayerOpacityAction extends AbstractAction implements IEnabledStateUpdating, LayerAction {
-        private Layer layer;
+        private transient Layer layer;
         private JPopupMenu popup;
         private JSlider slider = new JSlider(JSlider.VERTICAL);
 
@@ -534,9 +534,9 @@ public class LayerListDialog extends ToggleDialog {
          * opacity of one or more layers.
          *
          * @param layer  the layer. Must not be null.
-         * @exception IllegalArgumentException thrown, if layer is null
+         * @throws IllegalArgumentException if layer is null
          */
-        public LayerOpacityAction(Layer layer) throws IllegalArgumentException {
+        public LayerOpacityAction(Layer layer) {
             this();
             putValue(NAME, tr("Opacity"));
             CheckParameterUtil.ensureParameterNotNull(layer, "layer");
@@ -636,8 +636,8 @@ public class LayerListDialog extends ToggleDialog {
      */
 
     public final class ActivateLayerAction extends AbstractAction implements IEnabledStateUpdating, MapView.LayerChangeListener, MultikeyShortcutAction{
-        private  Layer layer;
-        private Shortcut multikeyShortcut;
+        private transient Layer layer;
+        private transient Shortcut multikeyShortcut;
 
         /**
          * Constructs a new {@code ActivateLayerAction}.
@@ -748,14 +748,14 @@ public class LayerListDialog extends ToggleDialog {
      * The action to merge the currently selected layer into another layer.
      */
     public final class MergeAction extends AbstractAction implements IEnabledStateUpdating {
-        private  Layer layer;
+        private transient Layer layer;
 
         /**
          * Constructs a new {@code MergeAction}.
          * @param layer the layer
          * @throws IllegalArgumentException if {@code layer} is null
          */
-        public MergeAction(Layer layer) throws IllegalArgumentException {
+        public MergeAction(Layer layer) {
             this();
             CheckParameterUtil.ensureParameterNotNull(layer, "layer");
             this.layer = layer;
@@ -823,14 +823,14 @@ public class LayerListDialog extends ToggleDialog {
      * The action to merge the currently selected layer into another layer.
      */
     public final class DuplicateAction extends AbstractAction implements IEnabledStateUpdating {
-        private Layer layer;
+        private transient Layer layer;
 
         /**
          * Constructs a new {@code DuplicateAction}.
          * @param layer the layer
          * @throws IllegalArgumentException if {@code layer} is null
          */
-        public DuplicateAction(Layer layer) throws IllegalArgumentException {
+        public DuplicateAction(Layer layer) {
             this();
             CheckParameterUtil.ensureParameterNotNull(layer, "layer");
             this.layer = layer;
@@ -945,7 +945,7 @@ public class LayerListDialog extends ToggleDialog {
     }
 
     private static class ActiveLayerCellRenderer implements TableCellRenderer {
-        final JCheckBox cb;
+        private final JCheckBox cb;
         public ActiveLayerCellRenderer() {
             cb = new ActiveLayerCheckBox();
         }
@@ -960,7 +960,7 @@ public class LayerListDialog extends ToggleDialog {
     }
 
     private static class LayerVisibleCellRenderer implements TableCellRenderer {
-        final LayerVisibleCheckBox cb;
+        private final LayerVisibleCheckBox cb;
         public LayerVisibleCellRenderer() {
             this.cb = new LayerVisibleCheckBox();
         }
@@ -975,7 +975,7 @@ public class LayerListDialog extends ToggleDialog {
     }
 
     private static class LayerVisibleCellEditor extends DefaultCellEditor {
-        final LayerVisibleCheckBox cb;
+        private final LayerVisibleCheckBox cb;
         public LayerVisibleCellEditor(LayerVisibleCheckBox cb) {
             super(cb);
             this.cb = cb;
@@ -1227,9 +1227,10 @@ public class LayerListDialog extends ToggleDialog {
          */
         public List<Layer> getSelectedLayers() {
             List<Layer> selected = new ArrayList<>();
-            for (int i=0; i<getLayers().size(); i++) {
+            List<Layer> layers = getLayers();
+            for (int i=0; i<layers.size(); i++) {
                 if (selectionModel.isSelectedIndex(i)) {
-                    selected.add(getLayers().get(i));
+                    selected.add(layers.get(i));
                 }
             }
             return selected;
@@ -1315,11 +1316,9 @@ public class LayerListDialog extends ToggleDialog {
         }
 
         /**
-         * Replies true if the currently selected layers can move up
-         * by one position
+         * Replies true if the currently selected layers can move up by one position
          *
-         * @return true if the currently selected layers can move up
-         * by one position
+         * @return true if the currently selected layers can move up by one position
          */
         public boolean canMoveUp() {
             List<Integer> sel = getSelectedRows();
@@ -1333,10 +1332,11 @@ public class LayerListDialog extends ToggleDialog {
         public void moveUp() {
             if (!canMoveUp()) return;
             List<Integer> sel = getSelectedRows();
+            List<Layer> layers = getLayers();
             for (int row : sel) {
-                Layer l1 = getLayers().get(row);
-                Layer l2 = getLayers().get(row-1);
-                Main.map.mapView.moveLayer(l2,row);
+                Layer l1 = layers.get(row);
+                Layer l2 = layers.get(row-1);
+                Main.map.mapView.moveLayer(l2, row);
                 Main.map.mapView.moveLayer(l1, row-1);
             }
             fireTableDataChanged();
@@ -1348,11 +1348,9 @@ public class LayerListDialog extends ToggleDialog {
         }
 
         /**
-         * Replies true if the currently selected layers can move down
-         * by one position
+         * Replies true if the currently selected layers can move down by one position
          *
-         * @return true if the currently selected layers can move down
-         * by one position
+         * @return true if the currently selected layers can move down by one position
          */
         public boolean canMoveDown() {
             List<Integer> sel = getSelectedRows();
@@ -1367,9 +1365,10 @@ public class LayerListDialog extends ToggleDialog {
             if (!canMoveDown()) return;
             List<Integer> sel = getSelectedRows();
             Collections.reverse(sel);
+            List<Layer> layers = getLayers();
             for (int row : sel) {
-                Layer l1 = getLayers().get(row);
-                Layer l2 = getLayers().get(row+1);
+                Layer l1 = layers.get(row);
+                Layer l2 = layers.get(row+1);
                 Main.map.mapView.moveLayer(l1, row+1);
                 Main.map.mapView.moveLayer(l2, row);
             }
@@ -1389,8 +1388,9 @@ public class LayerListDialog extends ToggleDialog {
         protected void ensureSelectedIsVisible() {
             int index = selectionModel.getMinSelectionIndex();
             if (index < 0) return;
-            if (index >= getLayers().size()) return;
-            Layer layer = getLayers().get(index);
+            List<Layer> layers = getLayers();
+            if (index >= layers.size()) return;
+            Layer layer = layers.get(index);
             fireMakeVisible(index, layer);
         }
 
@@ -1435,12 +1435,13 @@ public class LayerListDialog extends ToggleDialog {
          *
          */
         protected void ensureActiveSelected() {
-            if (getLayers().isEmpty())
+            List<Layer> layers = getLayers();
+            if (layers.isEmpty())
                 return;
             final Layer activeLayer = getActiveLayer();
             if (activeLayer != null) {
                 // there's an active layer - select it and make it visible
-                int idx = getLayers().indexOf(activeLayer);
+                int idx = layers.indexOf(activeLayer);
                 selectionModel.setSelectionInterval(idx, idx);
                 ensureSelectedIsVisible();
             } else {
@@ -1478,11 +1479,12 @@ public class LayerListDialog extends ToggleDialog {
 
         @Override
         public Object getValueAt(int row, int col) {
-            if (row >= 0 && row < getLayers().size()) {
+            List<Layer> layers = getLayers();
+            if (row >= 0 && row < layers.size()) {
                 switch (col) {
-                case 0: return getLayers().get(row) == getActiveLayer();
-                case 1: return getLayers().get(row);
-                case 2: return getLayers().get(row);
+                case 0: return layers.get(row) == getActiveLayer();
+                case 1: return layers.get(row);
+                case 2: return layers.get(row);
                 default: throw new RuntimeException();
                 }
             }
@@ -1498,21 +1500,24 @@ public class LayerListDialog extends ToggleDialog {
 
         @Override
         public void setValueAt(Object value, int row, int col) {
-            Layer l = getLayers().get(row);
-            switch (col) {
-            case 0:
-                Main.map.mapView.setActiveLayer(l);
-                l.setVisible(true);
-                break;
-            case 1:
-                l.setVisible((Boolean) value);
-                break;
-            case 2:
-                l.setName((String) value);
-                break;
-            default: throw new RuntimeException();
+            List<Layer> layers = getLayers();
+            if (row < layers.size()) {
+                Layer l = layers.get(row);
+                switch (col) {
+                case 0:
+                    Main.map.mapView.setActiveLayer(l);
+                    l.setVisible(true);
+                    break;
+                case 1:
+                    l.setVisible((Boolean) value);
+                    break;
+                case 2:
+                    l.setName((String) value);
+                    break;
+                default: throw new RuntimeException();
+                }
+                fireTableCellUpdated(row, col);
             }
-            fireTableCellUpdated(row, col);
         }
 
         /* ------------------------------------------------------------------------------ */
diff --git a/src/org/openstreetmap/josm/gui/dialogs/LayerListPopup.java b/src/org/openstreetmap/josm/gui/dialogs/LayerListPopup.java
index b0e05f3..e761034 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/LayerListPopup.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/LayerListPopup.java
@@ -31,7 +31,7 @@ import org.openstreetmap.josm.tools.ImageProvider;
 public class LayerListPopup extends JPopupMenu {
 
     public static final class InfoAction extends AbstractAction {
-        private final Layer layer;
+        private final transient Layer layer;
 
         /**
          * Constructs a new {@code InfoAction} for the given layer.
diff --git a/src/org/openstreetmap/josm/gui/dialogs/MapPaintDialog.java b/src/org/openstreetmap/josm/gui/dialogs/MapPaintDialog.java
index 72f42b2..ea8a8f9 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/MapPaintDialog.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/MapPaintDialog.java
@@ -79,7 +79,9 @@ import org.openstreetmap.josm.gui.widgets.HtmlPanel;
 import org.openstreetmap.josm.gui.widgets.JosmTextArea;
 import org.openstreetmap.josm.gui.widgets.PopupMenuLauncher;
 import org.openstreetmap.josm.tools.GBC;
+import org.openstreetmap.josm.tools.ImageOverlay;
 import org.openstreetmap.josm.tools.ImageProvider;
+import org.openstreetmap.josm.tools.ImageProvider.ImageSizes;
 import org.openstreetmap.josm.tools.InputMapUtils;
 import org.openstreetmap.josm.tools.Shortcut;
 import org.openstreetmap.josm.tools.Utils;
@@ -205,7 +207,7 @@ public class MapPaintDialog extends ToggleDialog {
 
     protected class StylesModel extends AbstractTableModel implements MapPaintSylesUpdateListener {
 
-        List<StyleSource> data = new ArrayList<>();
+        private transient List<StyleSource> data = new ArrayList<>();
 
         public StylesModel() {
             data = new ArrayList<>(MapPaintStyles.getStyles().getStyleSources());
@@ -238,7 +240,7 @@ public class MapPaintDialog extends ToggleDialog {
             return column == 0;
         }
 
-        Class<?>[] columnClasses = {Boolean.class, StyleSource.class};
+        private Class<?>[] columnClasses = {Boolean.class, StyleSource.class};
 
         @Override
         public Class<?> getColumnClass(int column) {
@@ -347,7 +349,7 @@ public class MapPaintDialog extends ToggleDialog {
      */
     protected class MoveUpDownAction extends AbstractAction implements ListSelectionListener {
 
-        final int increment;
+        private final int increment;
 
         public MoveUpDownAction(boolean isDown) {
             increment = isDown ? 1 : -1;
@@ -522,8 +524,8 @@ public class MapPaintDialog extends ToggleDialog {
 
     protected class InfoAction extends AbstractAction {
 
-        boolean errorsTabLoaded;
-        boolean sourceTabLoaded;
+        private boolean errorsTabLoaded;
+        private boolean sourceTabLoaded;
 
         public InfoAction() {
             putValue(NAME, tr("Info"));
@@ -672,9 +674,8 @@ public class MapPaintDialog extends ToggleDialog {
             add(new SaveAsAction());
 
             JMenu setMenu = new JMenu(tr("Style settings"));
-            setMenu.setIcon(ImageProvider.overlay(ImageProvider.get("preference"),
-                ImageProvider.get("dialogs/mappaint", "pencil"),
-                ImageProvider.OverlayPosition.SOUTHEAST));
+            setMenu.setIcon(new ImageProvider("preference").setMaxSize(ImageSizes.POPUPMENU).addOverlay(
+                new ImageOverlay(new ImageProvider("dialogs/mappaint", "pencil"), 0.5, 0.5, 1.0, 1.0)).get());
             setMenu.setToolTipText(tr("Customize the style"));
             add(setMenu);
 
diff --git a/src/org/openstreetmap/josm/gui/dialogs/NotesDialog.java b/src/org/openstreetmap/josm/gui/dialogs/NotesDialog.java
index 93fdc6a..c7cdec5 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/NotesDialog.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/NotesDialog.java
@@ -86,7 +86,7 @@ public class NotesDialog extends ToggleDialog implements LayerChangeListener {
     private final SortAction sortAction;
     private final UploadNotesAction uploadAction;
 
-    private NoteData noteData;
+    private transient NoteData noteData;
 
     /** Creates a new toggle dialog for notes */
     public NotesDialog() {
@@ -102,11 +102,6 @@ public class NotesDialog extends ToggleDialog implements LayerChangeListener {
         MapView.addLayerChangeListener(this);
     }
 
-    @Override
-    public void showDialog() {
-        super.showDialog();
-    }
-
     private void buildDialog() {
         model = new NoteTableModel();
         displayList = new JList<Note>(model);
@@ -260,7 +255,7 @@ public class NotesDialog extends ToggleDialog implements LayerChangeListener {
     }
 
     class NoteTableModel extends AbstractListModel<Note> {
-        private List<Note> data;
+        private transient List<Note> data;
 
         public NoteTableModel() {
             data = new ArrayList<>();
diff --git a/src/org/openstreetmap/josm/gui/dialogs/OsmIdSelectionDialog.java b/src/org/openstreetmap/josm/gui/dialogs/OsmIdSelectionDialog.java
index f8d8ada..c873886 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/OsmIdSelectionDialog.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/OsmIdSelectionDialog.java
@@ -50,7 +50,7 @@ public class OsmIdSelectionDialog extends ExtendedDialog implements WindowListen
     protected final OsmPrimitiveTypesComboBox cbType = new OsmPrimitiveTypesComboBox();
     protected final OsmIdTextField tfId = new OsmIdTextField();
     protected final HistoryComboBox cbId = new HistoryComboBox();
-    protected final GroupLayout layout = new GroupLayout(panel);
+    protected final transient GroupLayout layout = new GroupLayout(panel);
 
     public OsmIdSelectionDialog(Component parent, String title, String[] buttonTexts) {
         super(parent, title, buttonTexts);
diff --git a/src/org/openstreetmap/josm/gui/dialogs/RelationListDialog.java b/src/org/openstreetmap/josm/gui/dialogs/RelationListDialog.java
index e8ae26f..392a357 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/RelationListDialog.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/RelationListDialog.java
@@ -95,7 +95,7 @@ public class RelationListDialog extends ToggleDialog implements DataSetListener
 
     /** the popup menu and its handler */
     private final JPopupMenu popupMenu = new JPopupMenu();
-    private final PopupMenuHandler popupMenuHandler = new PopupMenuHandler(popupMenu);
+    private final transient PopupMenuHandler popupMenuHandler = new PopupMenuHandler(popupMenu);
 
     private final JosmTextField filter;
 
@@ -115,7 +115,7 @@ public class RelationListDialog extends ToggleDialog implements DataSetListener
     /** add all selected primitives to the given relations */
     private final AddSelectionToRelations addSelectionToRelations = new AddSelectionToRelations();
 
-    HighlightHelper highlightHelper = new HighlightHelper();
+    private final transient HighlightHelper highlightHelper = new HighlightHelper();
     private boolean highlightEnabled = Main.pref.getBoolean("draw.target-highlight", true);
 
     /**
@@ -389,10 +389,10 @@ public class RelationListDialog extends ToggleDialog implements DataSetListener
      *
      */
     private class RelationListModel extends AbstractListModel<Relation> {
-        private final List<Relation> relations = new ArrayList<>();
-        private List<Relation> filteredRelations;
+        private final transient List<Relation> relations = new ArrayList<>();
+        private transient List<Relation> filteredRelations;
         private DefaultListSelectionModel selectionModel;
-        private SearchCompiler.Match filter;
+        private transient SearchCompiler.Match filter;
 
         public RelationListModel(DefaultListSelectionModel selectionModel) {
             this.selectionModel = selectionModel;
@@ -579,7 +579,7 @@ public class RelationListDialog extends ToggleDialog implements DataSetListener
         }
 
         public void updateTitle() {
-            if (relations.size() > 0 && relations.size() != getSize()) {
+            if (!relations.isEmpty() && relations.size() != getSize()) {
                 RelationListDialog.this.setTitle(tr("Relations: {0}/{1}", getSize(), relations.size()));
             } else if (getSize() > 0) {
                 RelationListDialog.this.setTitle(tr("Relations: {0}", getSize()));
diff --git a/src/org/openstreetmap/josm/gui/dialogs/SelectionListDialog.java b/src/org/openstreetmap/josm/gui/dialogs/SelectionListDialog.java
index b777dc4..9cc19ab 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/SelectionListDialog.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/SelectionListDialog.java
@@ -97,7 +97,7 @@ public class SelectionListDialog extends ToggleDialog  {
 
     /** the popup menu and its handler */
     private final ListPopupMenu popupMenu;
-    private final PopupMenuHandler popupMenuHandler;
+    private final transient PopupMenuHandler popupMenuHandler;
 
     /**
      * Builds the content panel for this dialog
@@ -476,7 +476,7 @@ public class SelectionListDialog extends ToggleDialog  {
 
         // Variable to store history from currentDataSet()
         private LinkedList<Collection<? extends OsmPrimitive>> history;
-        private final List<OsmPrimitive> selection = new ArrayList<>();
+        private final transient List<OsmPrimitive> selection = new ArrayList<>();
         private DefaultListSelectionModel selectionModel;
 
         /**
@@ -736,7 +736,7 @@ public class SelectionListDialog extends ToggleDialog  {
      * @author Jan Peter Stotz
      */
     protected static class SearchMenuItem extends JMenuItem implements ActionListener {
-        protected final SearchSetting s;
+        protected final transient SearchSetting s;
 
         public SearchMenuItem(SearchSetting s) {
             super(Utils.shortenString(s.toString(),
@@ -777,8 +777,8 @@ public class SelectionListDialog extends ToggleDialog  {
      * @author Jan Peter Stotz
      */
     protected static class SelectionMenuItem extends JMenuItem implements ActionListener {
-        private final DefaultNameFormatter df = DefaultNameFormatter.getInstance();
-        protected Collection<? extends OsmPrimitive> sel;
+        private final transient DefaultNameFormatter df = DefaultNameFormatter.getInstance();
+        protected transient Collection<? extends OsmPrimitive> sel;
 
         public SelectionMenuItem(Collection<? extends OsmPrimitive> sel) {
             super();
diff --git a/src/org/openstreetmap/josm/gui/dialogs/ToggleDialog.java b/src/org/openstreetmap/josm/gui/dialogs/ToggleDialog.java
index eb35946..af13948 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/ToggleDialog.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/ToggleDialog.java
@@ -94,7 +94,7 @@ public class ToggleDialog extends JPanel implements ShowHideButtonListener, Help
      */
     public static final BooleanProperty PROP_DYNAMIC_BUTTONS = new BooleanProperty("dialog.dynamic.buttons", false);
 
-    private final ParametrizedEnumProperty<ButtonHidingType> PROP_BUTTON_HIDING = new ParametrizedEnumProperty<ToggleDialog.ButtonHidingType>(
+    private final transient ParametrizedEnumProperty<ButtonHidingType> PROP_BUTTON_HIDING = new ParametrizedEnumProperty<ToggleDialog.ButtonHidingType>(
             ButtonHidingType.class, ButtonHidingType.DYNAMIC) {
         @Override
         protected String getKey(String... params) {
@@ -151,7 +151,7 @@ public class ToggleDialog extends JPanel implements ShowHideButtonListener, Help
 
     protected JToggleButton button;
     private JPanel buttonsPanel;
-    private List<javax.swing.Action> buttonActions = new ArrayList<>();
+    private transient List<javax.swing.Action> buttonActions = new ArrayList<>();
 
     /** holds the menu entry in the windows menu. Required to properly
      * toggle the checkbox on show/hide
diff --git a/src/org/openstreetmap/josm/gui/dialogs/UserListDialog.java b/src/org/openstreetmap/josm/gui/dialogs/UserListDialog.java
index 4f6882a..240b028 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/UserListDialog.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/UserListDialog.java
@@ -8,8 +8,6 @@ import java.awt.event.ActionEvent;
 import java.awt.event.KeyEvent;
 import java.awt.event.MouseAdapter;
 import java.awt.event.MouseEvent;
-import java.io.UnsupportedEncodingException;
-import java.net.URLEncoder;
 import java.text.NumberFormat;
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -24,7 +22,6 @@ import java.util.Map;
 import java.util.Set;
 
 import javax.swing.AbstractAction;
-import javax.swing.JOptionPane;
 import javax.swing.JTable;
 import javax.swing.ListSelectionModel;
 import javax.swing.event.ListSelectionEvent;
@@ -45,6 +42,7 @@ import org.openstreetmap.josm.gui.util.GuiHelper;
 import org.openstreetmap.josm.tools.ImageProvider;
 import org.openstreetmap.josm.tools.OpenBrowser;
 import org.openstreetmap.josm.tools.Shortcut;
+import org.openstreetmap.josm.tools.Utils;
 
 /**
  * Displays a dialog with all users who have last edited something in the
@@ -61,10 +59,12 @@ public class UserListDialog extends ToggleDialog implements SelectionChangedList
     private SelectUsersPrimitivesAction selectionUsersPrimitivesAction;
     private ShowUserInfoAction showUserInfoAction;
 
+    /**
+     * Constructs a new {@code UserListDialog}.
+     */
     public UserListDialog() {
         super(tr("Authors"), "userlist", tr("Open a list of people working on the selected objects."),
                 Shortcut.registerShortcut("subwindow:authors", tr("Toggle: {0}", tr("Authors")), KeyEvent.VK_A, Shortcut.ALT_SHIFT), 150);
-
         build();
     }
 
@@ -220,19 +220,7 @@ public class UserListDialog extends ToggleDialog implements SelectionChangedList
         @Override
         protected String createInfoUrl(Object infoObject) {
             User user = (User)infoObject;
-            try {
-                return Main.getBaseUserUrl() + "/" + URLEncoder.encode(user.getName(), "UTF-8").replaceAll("\\+", "%20");
-            } catch(UnsupportedEncodingException e) {
-                Main.error(e);
-                JOptionPane.showMessageDialog(
-                        Main.parent,
-                        tr("<html>Failed to create an URL because the encoding ''{0}''<br>"
-                                + "was missing on this system.</html>", "UTF-8"),
-                                tr("Missing encoding"),
-                                JOptionPane.ERROR_MESSAGE
-                );
-                return null;
-            }
+            return Main.getBaseUserUrl() + "/" + Utils.encodeUrl(user.getName()).replaceAll("\\+", "%20");
         }
 
         @Override
@@ -290,7 +278,7 @@ public class UserListDialog extends ToggleDialog implements SelectionChangedList
      *
      */
     static class UserTableModel extends DefaultTableModel {
-        private List<UserInfo> data;
+        private transient List<UserInfo> data;
 
         public UserTableModel() {
             setColumnIdentifiers(new String[]{tr("Author"),tr("# Objects"),"%"});
@@ -298,7 +286,7 @@ public class UserListDialog extends ToggleDialog implements SelectionChangedList
         }
 
         protected Map<User, Integer> computeStatistics(Collection<? extends OsmPrimitive> primitives) {
-            HashMap<User, Integer> ret = new HashMap<>();
+            Map<User, Integer> ret = new HashMap<>();
             if (primitives == null || primitives.isEmpty()) return ret;
             for (OsmPrimitive primitive: primitives) {
                 if (ret.containsKey(primitive.getUser())) {
@@ -365,7 +353,7 @@ public class UserListDialog extends ToggleDialog implements SelectionChangedList
         }
 
         public List<User> getSelectedUsers(int[] rows) {
-            LinkedList<User> ret = new LinkedList<>();
+            List<User> ret = new LinkedList<>();
             if (rows == null || rows.length == 0) return ret;
             for (int row: rows) {
                 if (data.get(row).user == null) {
diff --git a/src/org/openstreetmap/josm/gui/dialogs/ValidatorDialog.java b/src/org/openstreetmap/josm/gui/dialogs/ValidatorDialog.java
index 81aeda3..3cde0b2 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/ValidatorDialog.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/ValidatorDialog.java
@@ -77,12 +77,12 @@ public class ValidatorDialog extends ToggleDialog implements SelectionChangedLis
     private SideButton selectButton;
 
     private final JPopupMenu popupMenu = new JPopupMenu();
-    private final PopupMenuHandler popupMenuHandler = new PopupMenuHandler(popupMenu);
+    private final transient PopupMenuHandler popupMenuHandler = new PopupMenuHandler(popupMenu);
 
     /** Last selected element */
     private DefaultMutableTreeNode lastSelectedNode = null;
 
-    private OsmDataLayer linkedLayer;
+    private transient OsmDataLayer linkedLayer;
 
     /**
      * Constructor
@@ -189,7 +189,7 @@ public class ValidatorDialog extends ToggleDialog implements SelectionChangedLis
 
         Set<DefaultMutableTreeNode> processedNodes = new HashSet<>();
 
-        LinkedList<TestError> errorsToFix = new LinkedList<>();
+        List<TestError> errorsToFix = new LinkedList<>();
         for (TreePath path : selectionPaths) {
             DefaultMutableTreeNode node = (DefaultMutableTreeNode) path.getLastPathComponent();
             if (node == null) {
@@ -547,8 +547,7 @@ public class ValidatorDialog extends ToggleDialog implements SelectionChangedLis
         if (newSelection.isEmpty()) {
             tree.setFilter(null);
         }
-        HashSet<OsmPrimitive> filter = new HashSet<>(newSelection);
-        tree.setFilter(filter);
+        tree.setFilter(new HashSet<>(newSelection));
     }
 
     @Override
diff --git a/src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetCacheManagerModel.java b/src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetCacheManagerModel.java
index 6718e13..93c5399 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetCacheManagerModel.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetCacheManagerModel.java
@@ -29,9 +29,9 @@ public class ChangesetCacheManagerModel extends AbstractTableModel implements Ch
     /** the name of the property for the currently selected changeset in the detail view */
     public static final String CHANGESET_IN_DETAIL_VIEW_PROP = ChangesetCacheManagerModel.class.getName() + ".changesetInDetailView";
 
-    private final List<Changeset> data = new ArrayList<>();
+    private final transient List<Changeset> data = new ArrayList<>();
     private DefaultListSelectionModel selectionModel;
-    private Changeset changesetInDetailView;
+    private transient Changeset changesetInDetailView;
     private final PropertyChangeSupport support = new PropertyChangeSupport(this);
 
     public ChangesetCacheManagerModel(DefaultListSelectionModel selectionModel) {
diff --git a/src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetContentDownloadTask.java b/src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetContentDownloadTask.java
index c4d5011..8baecd1 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetContentDownloadTask.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetContentDownloadTask.java
@@ -63,9 +63,9 @@ public class ChangesetContentDownloadTask extends PleaseWaitRunnable implements
      * Creates a download task for a single changeset
      *
      * @param changesetId the changeset id. > 0 required.
-     * @throws IllegalArgumentException thrown if changesetId <= 0
+     * @throws IllegalArgumentException if changesetId <= 0
      */
-    public ChangesetContentDownloadTask(int changesetId) throws IllegalArgumentException{
+    public ChangesetContentDownloadTask(int changesetId) {
         super(tr("Downloading changeset content"), false /* don't ignore exceptions */);
         if (changesetId <= 0)
             throw new IllegalArgumentException(MessageFormat.format("Expected integer value > 0 for parameter ''{0}'', got ''{1}''", "changesetId", changesetId));
@@ -88,10 +88,10 @@ public class ChangesetContentDownloadTask extends PleaseWaitRunnable implements
      *
      * @param parent the parent component for the {@link org.openstreetmap.josm.gui.PleaseWaitDialog}. Must not be {@code null}.
      * @param changesetId the changeset id. {@code >0} required.
-     * @throws IllegalArgumentException thrown if {@code changesetId <= 0}
-     * @throws IllegalArgumentException thrown if parent is {@code null}
+     * @throws IllegalArgumentException if {@code changesetId <= 0}
+     * @throws IllegalArgumentException if parent is {@code null}
      */
-    public ChangesetContentDownloadTask(Component parent, int changesetId) throws IllegalArgumentException{
+    public ChangesetContentDownloadTask(Component parent, int changesetId) {
         super(parent, tr("Downloading changeset content"), false /* don't ignore exceptions */);
         if (changesetId <= 0)
             throw new IllegalArgumentException(MessageFormat.format("Expected integer value > 0 for parameter ''{0}'', got ''{1}''", "changesetId", changesetId));
@@ -104,9 +104,9 @@ public class ChangesetContentDownloadTask extends PleaseWaitRunnable implements
      *
      * @param parent the parent component for the {@link org.openstreetmap.josm.gui.PleaseWaitDialog}. Must not be {@code null}.
      * @param changesetIds the changeset ids. Empty collection assumed, if {@code null}.
-     * @throws IllegalArgumentException thrown if parent is {@code null}
+     * @throws IllegalArgumentException if parent is {@code null}
      */
-    public ChangesetContentDownloadTask(Component parent, Collection<Integer> changesetIds) throws IllegalArgumentException {
+    public ChangesetContentDownloadTask(Component parent, Collection<Integer> changesetIds) {
         super(parent, tr("Downloading changeset content"), false /* don't ignore exceptions */);
         init(changesetIds);
     }
@@ -128,7 +128,7 @@ public class ChangesetContentDownloadTask extends PleaseWaitRunnable implements
      * information, no content)
      *
      * @param changesetId the changeset id
-     * @throws OsmTransferException thrown if something went wrong
+     * @throws OsmTransferException if something went wrong
      */
     protected void downloadChangeset(int changesetId) throws OsmTransferException {
         synchronized(this) {
diff --git a/src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetContentPanel.java b/src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetContentPanel.java
index a638061..3ffd3bc 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetContentPanel.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetContentPanel.java
@@ -61,7 +61,7 @@ import org.openstreetmap.josm.tools.ImageProvider;
 public class ChangesetContentPanel extends JPanel implements PropertyChangeListener {
 
     private ChangesetContentTableModel model;
-    private Changeset currentChangeset;
+    private transient Changeset currentChangeset;
 
     private DownloadChangesetContentAction actDownloadContentAction;
     private ShowHistoryAction actShowHistory;
@@ -420,7 +420,7 @@ public class ChangesetContentPanel extends JPanel implements PropertyChangeListe
     private static class HeaderPanel extends JPanel {
 
         private JMultilineLabel lblMessage;
-        private Changeset current;
+        private transient Changeset current;
 
         protected final void build() {
             setLayout(new FlowLayout(FlowLayout.LEFT));
diff --git a/src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetContentTableModel.java b/src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetContentTableModel.java
index ab64af3..f09642f 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetContentTableModel.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetContentTableModel.java
@@ -23,7 +23,7 @@ import org.openstreetmap.josm.data.osm.history.HistoryOsmPrimitive;
  */
 public class ChangesetContentTableModel extends AbstractTableModel {
 
-    private final List<ChangesetContentEntry> data = new ArrayList<>();
+    private final transient List<ChangesetContentEntry> data = new ArrayList<>();
     private DefaultListSelectionModel selectionModel;
 
     public ChangesetContentTableModel(DefaultListSelectionModel selectionModel) {
diff --git a/src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetDetailPanel.java b/src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetDetailPanel.java
index aa4f537..4d53a0e 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetDetailPanel.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetDetailPanel.java
@@ -63,7 +63,7 @@ public class ChangesetDetailPanel extends JPanel implements PropertyChangeListen
     private final SelectInCurrentLayerAction     actSelectInCurrentLayer     = new SelectInCurrentLayerAction();
     private final ZoomInCurrentLayerAction       actZoomInCurrentLayerAction = new ZoomInCurrentLayerAction();
 
-    private Changeset current = null;
+    private transient Changeset current = null;
 
     protected JPanel buildActionButtonPanel() {
         JPanel pnl = new JPanel(new FlowLayout(FlowLayout.LEFT));
diff --git a/src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetDiscussionPanel.java b/src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetDiscussionPanel.java
index 1586383..c05c6d2 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetDiscussionPanel.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetDiscussionPanel.java
@@ -39,7 +39,7 @@ public class ChangesetDiscussionPanel extends JPanel implements PropertyChangeLi
 
     private JTable table;
 
-    private Changeset current = null;
+    private transient Changeset current = null;
 
     protected JPanel buildActionButtonPanel() {
         JPanel pnl = new JPanel(new FlowLayout(FlowLayout.LEFT));
diff --git a/src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetDiscussionTableModel.java b/src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetDiscussionTableModel.java
index dac6638..9863e0c 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetDiscussionTableModel.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetDiscussionTableModel.java
@@ -14,7 +14,7 @@ import org.openstreetmap.josm.data.osm.ChangesetDiscussionComment;
  */
 public class ChangesetDiscussionTableModel extends AbstractTableModel {
 
-    private final List<ChangesetDiscussionComment> data = new ArrayList<>();
+    private final transient List<ChangesetDiscussionComment> data = new ArrayList<>();
 
     @Override
     public int getRowCount() {
diff --git a/src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetHeaderDownloadTask.java b/src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetHeaderDownloadTask.java
index 7c12923..f134820 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetHeaderDownloadTask.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetHeaderDownloadTask.java
@@ -56,7 +56,7 @@ public class ChangesetHeaderDownloadTask extends PleaseWaitRunnable implements C
      * Must not be null.
      * @param changesets the collection of changesets. Assumes an empty collection if null.
      * @return the download task
-     * @throws IllegalArgumentException thrown if parent is null
+     * @throws IllegalArgumentException if parent is null
      */
     public static ChangesetHeaderDownloadTask buildTaskForChangesets(Component parent, Collection<Changeset> changesets) {
         CheckParameterUtil.ensureParameterNotNull(parent, "parent");
@@ -64,7 +64,7 @@ public class ChangesetHeaderDownloadTask extends PleaseWaitRunnable implements C
             changesets = Collections.emptyList();
         }
 
-        HashSet<Integer> ids = new HashSet<>();
+        Set<Integer> ids = new HashSet<>();
         for (Changeset cs: changesets) {
             if (cs == null || cs.isNew()) {
                 continue;
@@ -123,9 +123,9 @@ public class ChangesetHeaderDownloadTask extends PleaseWaitRunnable implements C
      *
      * @param dialogParent the parent reference component for the {@link org.openstreetmap.josm.gui.PleaseWaitDialog}. Must not be null.
      * @param ids the collection of ids. Empty collection assumed if null.
-     * @throws IllegalArgumentException thrown if dialogParent is null
+     * @throws IllegalArgumentException if dialogParent is null
      */
-    public ChangesetHeaderDownloadTask(Component dialogParent, Collection<Integer> ids) throws IllegalArgumentException{
+    public ChangesetHeaderDownloadTask(Component dialogParent, Collection<Integer> ids) {
         this(dialogParent, ids, false);
     }
 
@@ -138,11 +138,10 @@ public class ChangesetHeaderDownloadTask extends PleaseWaitRunnable implements C
      * @param dialogParent the parent reference component for the {@link org.openstreetmap.josm.gui.PleaseWaitDialog}. Must not be null.
      * @param ids the collection of ids. Empty collection assumed if null.
      * @param includeDiscussion determines if discussion comments must be downloaded or not
-     * @throws IllegalArgumentException thrown if dialogParent is null
+     * @throws IllegalArgumentException if dialogParent is null
      * @since 7704
      */
-    public ChangesetHeaderDownloadTask(Component dialogParent, Collection<Integer> ids, boolean includeDiscussion)
-            throws IllegalArgumentException {
+    public ChangesetHeaderDownloadTask(Component dialogParent, Collection<Integer> ids, boolean includeDiscussion) {
         super(dialogParent, tr("Download changesets"), false /* don't ignore exceptions */);
         init(ids);
         this.includeDiscussion = includeDiscussion;
diff --git a/src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetListModel.java b/src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetListModel.java
index 2845114..296cac5 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetListModel.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetListModel.java
@@ -21,8 +21,8 @@ import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.data.osm.Storage;
 
 public class ChangesetListModel extends DefaultListModel<Changeset> implements ChangesetCacheListener {
-    private final List<Changeset> data = new ArrayList<>();
-    private final Storage<Changeset> shownChangesets = new Storage<>(true);
+    private final transient List<Changeset> data = new ArrayList<>();
+    private final transient Storage<Changeset> shownChangesets = new Storage<>(true);
     private DefaultListSelectionModel selectionModel;
 
     public ChangesetListModel(DefaultListSelectionModel selectionModel) {
diff --git a/src/org/openstreetmap/josm/gui/dialogs/changeset/query/AdvancedChangesetQueryPanel.java b/src/org/openstreetmap/josm/gui/dialogs/changeset/query/AdvancedChangesetQueryPanel.java
index b1debc0..1652e3b 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/changeset/query/AdvancedChangesetQueryPanel.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/changeset/query/AdvancedChangesetQueryPanel.java
@@ -378,9 +378,9 @@ public class AdvancedChangesetQueryPanel extends JPanel {
         private JRadioButton rbRestrictToUid;
         private JRadioButton rbRestrictToUserName;
         private JosmTextField tfUid;
-        private UidInputFieldValidator valUid;
+        private transient UidInputFieldValidator valUid;
         private JosmTextField tfUserName;
-        private UserNameInputValidator valUserName;
+        private transient UserNameInputValidator valUserName;
         private JMultilineLabel lblRestrictedToMyself;
 
         protected JPanel buildUidInputPanel() {
@@ -513,12 +513,11 @@ public class AdvancedChangesetQueryPanel extends JPanel {
          * restrictions.
          *
          * @param query the query. Must not be null.
-         * @throws IllegalArgumentException thrown if query is null
-         * @throws IllegalStateException thrown if one of the available values for query parameters in
+         * @throws IllegalArgumentException if query is null
+         * @throws IllegalStateException if one of the available values for query parameters in
          * this panel isn't valid
-         *
          */
-        public void fillInQuery(ChangesetQuery query) throws IllegalStateException, IllegalArgumentException  {
+        public void fillInQuery(ChangesetQuery query) {
             CheckParameterUtil.ensureParameterNotNull(query, "query");
             if (rbRestrictToMyself.isSelected()) {
                 JosmUserIdentityManager im = JosmUserIdentityManager.getInstance();
@@ -639,17 +638,17 @@ public class AdvancedChangesetQueryPanel extends JPanel {
         private JRadioButton rbClosedAfter;
         private JRadioButton rbClosedAfterAndCreatedBefore;
         private JosmTextField tfClosedAfterDate1;
-        private DateValidator valClosedAfterDate1;
+        private transient DateValidator valClosedAfterDate1;
         private JosmTextField tfClosedAfterTime1;
-        private TimeValidator valClosedAfterTime1;
+        private transient TimeValidator valClosedAfterTime1;
         private JosmTextField tfClosedAfterDate2;
-        private DateValidator valClosedAfterDate2;
+        private transient DateValidator valClosedAfterDate2;
         private JosmTextField tfClosedAfterTime2;
-        private TimeValidator valClosedAfterTime2;
+        private transient TimeValidator valClosedAfterTime2;
         private JosmTextField tfCreatedBeforeDate;
-        private DateValidator valCreatedBeforeDate;
+        private transient DateValidator valCreatedBeforeDate;
         private JosmTextField tfCreatedBeforeTime;
-        private TimeValidator valCreatedBeforeTime;
+        private transient TimeValidator valCreatedBeforeTime;
 
         protected JPanel buildClosedAfterInputPanel() {
             JPanel pnl = new JPanel(new GridBagLayout());
@@ -837,7 +836,7 @@ public class AdvancedChangesetQueryPanel extends JPanel {
             restoreFromSettings();
         }
 
-        public void fillInQuery(ChangesetQuery query) throws IllegalStateException{
+        public void fillInQuery(ChangesetQuery query) {
             if (!isValidChangesetQuery())
                 throw new IllegalStateException(tr("Cannot build changeset query with time based restrictions. Input is not valid."));
             if (rbClosedAfter.isSelected()) {
diff --git a/src/org/openstreetmap/josm/gui/dialogs/changeset/query/BasicChangesetQueryPanel.java b/src/org/openstreetmap/josm/gui/dialogs/changeset/query/BasicChangesetQueryPanel.java
index 74aac00..1eb737f 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/changeset/query/BasicChangesetQueryPanel.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/changeset/query/BasicChangesetQueryPanel.java
@@ -40,8 +40,8 @@ public class BasicChangesetQueryPanel extends JPanel {
         CHANGESETS_IN_MAP_VIEW;
     }
 
-    private Map<BasicQuery, JRadioButton> rbQueries;
-    private Map<BasicQuery, JMultilineLabel> lblQueries;
+    private transient Map<BasicQuery, JRadioButton> rbQueries;
+    private transient Map<BasicQuery, JMultilineLabel> lblQueries;
     private JCheckBox cbMyChangesetsOnly;
 
     protected JPanel buildQueriesPanel() {
diff --git a/src/org/openstreetmap/josm/gui/dialogs/changeset/query/ChangesetQueryTask.java b/src/org/openstreetmap/josm/gui/dialogs/changeset/query/ChangesetQueryTask.java
index d219d5d..5b955cd 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/changeset/query/ChangesetQueryTask.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/changeset/query/ChangesetQueryTask.java
@@ -53,9 +53,9 @@ public class ChangesetQueryTask extends PleaseWaitRunnable implements ChangesetD
      * Creates the task.
      *
      * @param query the query to submit to the OSM server. Must not be null.
-     * @throws IllegalArgumentException thrown if query is null.
+     * @throws IllegalArgumentException if query is null.
      */
-    public ChangesetQueryTask(ChangesetQuery query) throws IllegalArgumentException {
+    public ChangesetQueryTask(ChangesetQuery query) {
         super(tr("Querying and downloading changesets",false /* don't ignore exceptions */));
         CheckParameterUtil.ensureParameterNotNull(query, "query");
         this.query = query;
@@ -67,10 +67,10 @@ public class ChangesetQueryTask extends PleaseWaitRunnable implements ChangesetD
      * @param parent the parent component relative to which the {@link org.openstreetmap.josm.gui.PleaseWaitDialog} is displayed.
      * Must not be null.
      * @param query the query to submit to the OSM server. Must not be null.
-     * @throws IllegalArgumentException thrown if query is null.
-     * @throws IllegalArgumentException thrown if parent is null
+     * @throws IllegalArgumentException if query is null.
+     * @throws IllegalArgumentException if parent is null
      */
-    public ChangesetQueryTask(Component parent, ChangesetQuery query) throws IllegalArgumentException {
+    public ChangesetQueryTask(Component parent, ChangesetQuery query) {
         super(parent, tr("Querying and downloading changesets"), false /* don't ignore exceptions */);
         CheckParameterUtil.ensureParameterNotNull(query, "query");
         this.query = query;
@@ -143,7 +143,7 @@ public class ChangesetQueryTask extends PleaseWaitRunnable implements ChangesetD
     /**
      * Tries to fully identify the current JOSM user
      *
-     * @throws OsmTransferException thrown if something went wrong
+     * @throws OsmTransferException if something went wrong
      */
     protected void fullyIdentifyCurrentUser() throws OsmTransferException {
         getProgressMonitor().indeterminateSubTask(tr("Determine user id for current user..."));
diff --git a/src/org/openstreetmap/josm/gui/dialogs/properties/PropertiesDialog.java b/src/org/openstreetmap/josm/gui/dialogs/properties/PropertiesDialog.java
index 30e6799..64287df 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/properties/PropertiesDialog.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/properties/PropertiesDialog.java
@@ -13,11 +13,9 @@ import java.awt.event.InputEvent;
 import java.awt.event.KeyEvent;
 import java.awt.event.MouseAdapter;
 import java.awt.event.MouseEvent;
-import java.io.UnsupportedEncodingException;
 import java.net.HttpURLConnection;
 import java.net.URI;
 import java.net.URISyntaxException;
-import java.net.URLEncoder;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
@@ -154,17 +152,17 @@ public class PropertiesDialog extends ToggleDialog implements SelectionChangedLi
     private final JPopupMenu blankSpaceMenu = new JPopupMenu();
 
     // Popup menu handlers
-    private final PopupMenuHandler tagMenuHandler = new PopupMenuHandler(tagMenu);
-    private final PopupMenuHandler membershipMenuHandler = new PopupMenuHandler(membershipMenu);
-    private final PopupMenuHandler blankSpaceMenuHandler = new PopupMenuHandler(blankSpaceMenu);
+    private final transient PopupMenuHandler tagMenuHandler = new PopupMenuHandler(tagMenu);
+    private final transient PopupMenuHandler membershipMenuHandler = new PopupMenuHandler(membershipMenu);
+    private final transient PopupMenuHandler blankSpaceMenuHandler = new PopupMenuHandler(blankSpaceMenu);
 
-    private final Map<String, Map<String, Integer>> valueCount = new TreeMap<>();
+    private final transient Map<String, Map<String, Integer>> valueCount = new TreeMap<>();
     /**
      * This sub-object is responsible for all adding and editing of tags
      */
-    private final TagEditHelper editHelper = new TagEditHelper(tagData, valueCount);
+    private final transient TagEditHelper editHelper = new TagEditHelper(tagData, valueCount);
 
-    private final DataSetListenerAdapter dataChangedAdapter = new DataSetListenerAdapter(this);
+    private final transient DataSetListenerAdapter dataChangedAdapter = new DataSetListenerAdapter(this);
     private final HelpAction helpAction = new HelpAction();
     private final PasteValueAction pasteValueAction = new PasteValueAction();
     private final CopyValueAction copyValueAction = new CopyValueAction();
@@ -188,7 +186,7 @@ public class PropertiesDialog extends ToggleDialog implements SelectionChangedLi
     private final SelectMembersAction selectMembersAction = new SelectMembersAction(false);
     private final SelectMembersAction addMembersToSelectionAction = new SelectMembersAction(true);
 
-    private final HighlightHelper highlightHelper= new HighlightHelper();
+    private final transient HighlightHelper highlightHelper= new HighlightHelper();
 
     /**
      * The Add button (needed to be able to disable it)
@@ -213,7 +211,7 @@ public class PropertiesDialog extends ToggleDialog implements SelectionChangedLi
     private final JLabel selectSth = new JLabel("<html><p>"
             + tr("Select objects for which to change tags.") + "</p></html>");
 
-    private final PresetHandler presetHandler = new PresetHandler() {
+    private final transient PresetHandler presetHandler = new PresetHandler() {
         @Override public void updateTags(List<Tag> tags) {
             Command command = TaggingPreset.createCommand(getSelection(), tags);
             if (command != null) Main.main.undoRedo.add(command);
@@ -609,7 +607,7 @@ public class PropertiesDialog extends ToggleDialog implements SelectionChangedLi
         final Map<String, Integer> keyCount = new HashMap<>();
         final Map<String, String> tags = new HashMap<>();
         valueCount.clear();
-        EnumSet<TaggingPresetType> types = EnumSet.noneOf(TaggingPresetType.class);
+        Set<TaggingPresetType> types = EnumSet.noneOf(TaggingPresetType.class);
         for (OsmPrimitive osm : newSel) {
             types.add(TaggingPresetType.forPrimitive(osm));
             for (String key : osm.keySet()) {
@@ -620,7 +618,7 @@ public class PropertiesDialog extends ToggleDialog implements SelectionChangedLi
                         Map<String, Integer> v = valueCount.get(key);
                         v.put(value, v.containsKey(value) ? v.get(value) + 1 : 1);
                     } else {
-                        TreeMap<String, Integer> v = new TreeMap<>();
+                        Map<String, Integer> v = new TreeMap<>();
                         v.put(value, 1);
                         valueCount.put(key, v);
                     }
@@ -754,7 +752,7 @@ public class PropertiesDialog extends ToggleDialog implements SelectionChangedLi
     public Tag getSelectedProperty() {
         int row = tagTable.getSelectedRow();
         if (row == -1) return null;
-        TreeMap<String, Integer> map = (TreeMap<String, Integer>) tagData.getValueAt(row, 1);
+        Map<String, Integer> map = (TreeMap<String, Integer>) tagData.getValueAt(row, 1);
         return new Tag(
                 tagData.getValueAt(row, 0).toString(),
                 map.size() > 1 ? "" : map.keySet().iterator().next());
@@ -895,7 +893,7 @@ public class PropertiesDialog extends ToggleDialog implements SelectionChangedLi
      */
     class DeleteAction extends JosmAction implements ListSelectionListener {
 
-        static final String DELETE_FROM_RELATION_PREF = "delete_from_relation";
+        private static final String DELETE_FROM_RELATION_PREF = "delete_from_relation";
 
         public DeleteAction() {
             super(tr("Delete"), /* ICON() */ "dialogs/delete", tr("Delete the selected key in all objects"),
@@ -906,7 +904,7 @@ public class PropertiesDialog extends ToggleDialog implements SelectionChangedLi
 
         protected void deleteTags(int[] rows){
             // convert list of rows to HashMap (and find gap for nextKey)
-            HashMap<String, String> tags = new HashMap<>(rows.length);
+            Map<String, String> tags = new HashMap<>(rows.length);
             int nextKeyIndex = rows[0];
             for (int row : rows) {
                 String key = tagData.getValueAt(row, 0).toString();
@@ -1072,10 +1070,10 @@ public class PropertiesDialog extends ToggleDialog implements SelectionChangedLi
                 int row;
                 if (tagTable.getSelectedRowCount() == 1) {
                     row = tagTable.getSelectedRow();
-                    String key = URLEncoder.encode(tagData.getValueAt(row, 0).toString(), "UTF-8");
+                    String key = Utils.encodeUrl(tagData.getValueAt(row, 0).toString());
                     @SuppressWarnings("unchecked")
                     Map<String, Integer> m = (Map<String, Integer>) tagData.getValueAt(row, 1);
-                    String val = URLEncoder.encode(m.entrySet().iterator().next().getKey(), "UTF-8");
+                    String val = Utils.encodeUrl(m.entrySet().iterator().next().getKey());
 
                     uris.add(new URI(String.format("%s%sTag:%s=%s", base, lang, key, val)));
                     uris.add(new URI(String.format("%sTag:%s=%s", base, key, val)));
@@ -1087,7 +1085,7 @@ public class PropertiesDialog extends ToggleDialog implements SelectionChangedLi
                     row = membershipTable.getSelectedRow();
                     String type = ((Relation)membershipData.getValueAt(row, 0)).get("type");
                     if (type != null) {
-                        type = URLEncoder.encode(type, "UTF-8");
+                        type = Utils.encodeUrl(type);
                     }
 
                     if (type != null && !type.isEmpty()) {
@@ -1148,7 +1146,7 @@ public class PropertiesDialog extends ToggleDialog implements SelectionChangedLi
                         }
                     }
                 });
-            } catch (URISyntaxException | UnsupportedEncodingException e1) {
+            } catch (URISyntaxException e1) {
                 Main.error(e1);
             }
         }
@@ -1247,7 +1245,7 @@ public class PropertiesDialog extends ToggleDialog implements SelectionChangedLi
     }
 
     class SearchAction extends AbstractAction {
-        final boolean sameType;
+        private final boolean sameType;
 
         public SearchAction(boolean sameType) {
             this.sameType = sameType;
diff --git a/src/org/openstreetmap/josm/gui/dialogs/properties/TagEditHelper.java b/src/org/openstreetmap/josm/gui/dialogs/properties/TagEditHelper.java
index b8fa0a6..6f050d2 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/properties/TagEditHelper.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/properties/TagEditHelper.java
@@ -89,12 +89,12 @@ class TagEditHelper {
     private final Map<String, Map<String, Integer>> valueCount;
 
     // Selection that we are editing by using both dialogs
-    Collection<OsmPrimitive> sel;
+    private Collection<OsmPrimitive> sel;
 
     private String changedKey;
     private String objKey;
 
-    Comparator<AutoCompletionListItem> defaultACItemComparator = new Comparator<AutoCompletionListItem>() {
+    private Comparator<AutoCompletionListItem> defaultACItemComparator = new Comparator<AutoCompletionListItem>() {
         @Override
         public int compare(AutoCompletionListItem o1, AutoCompletionListItem o2) {
             return String.CASE_INSENSITIVE_ORDER.compare(o1.getValue(), o2.getValue());
@@ -155,7 +155,7 @@ class TagEditHelper {
         objKey=key;
 
         @SuppressWarnings("unchecked")
-        final EditTagDialog editDialog = new EditTagDialog(key, row,
+        final EditTagDialog editDialog = new EditTagDialog(key,
                 (Map<String, Integer>) tagData.getValueAt(row, 1), focusOnKey);
         editDialog.showDialog();
         if (editDialog.getValue() !=1 ) return;
@@ -240,11 +240,10 @@ class TagEditHelper {
     }
 
     public final class EditTagDialog extends AbstractTagsDialog {
-        final String key;
-        final Map<String, Integer> m;
-        final int row;
+        private final String key;
+        private final transient Map<String, Integer> m;
 
-        Comparator<AutoCompletionListItem> usedValuesAwareComparator = new Comparator<AutoCompletionListItem>() {
+        private transient Comparator<AutoCompletionListItem> usedValuesAwareComparator = new Comparator<AutoCompletionListItem>() {
                 @Override
                 public int compare(AutoCompletionListItem o1, AutoCompletionListItem o2) {
                     boolean c1 = m.containsKey(o1.getValue());
@@ -258,8 +257,8 @@ class TagEditHelper {
                 }
             };
 
-        ListCellRenderer<AutoCompletionListItem> cellRenderer = new ListCellRenderer<AutoCompletionListItem>() {
-            final DefaultListCellRenderer def = new DefaultListCellRenderer();
+        private transient ListCellRenderer<AutoCompletionListItem> cellRenderer = new ListCellRenderer<AutoCompletionListItem>() {
+            private final DefaultListCellRenderer def = new DefaultListCellRenderer();
             @Override
             public Component getListCellRendererComponent(JList<? extends AutoCompletionListItem> list,
                     AutoCompletionListItem value, int index, boolean isSelected,  boolean cellHasFocus){
@@ -279,13 +278,12 @@ class TagEditHelper {
             }
         };
 
-        private EditTagDialog(String key, int row, Map<String, Integer> map, final boolean initialFocusOnKey) {
+        private EditTagDialog(String key, Map<String, Integer> map, final boolean initialFocusOnKey) {
             super(Main.parent, trn("Change value?", "Change values?", map.size()), new String[] {tr("OK"),tr("Cancel")});
             setButtonIcons(new String[] {"ok","cancel"});
             setCancelButton(2);
             configureContextsensitiveHelp("/Dialog/EditValue", true /* show help button */);
             this.key = key;
-            this.row = row;
             this.m = map;
 
             JPanel mainPanel = new JPanel(new BorderLayout());
@@ -420,9 +418,9 @@ class TagEditHelper {
     public static final IntegerProperty PROPERTY_RECENT_TAGS_NUMBER = new IntegerProperty("properties.recently-added-tags", DEFAULT_LRU_TAGS_NUMBER);
 
     abstract class AbstractTagsDialog extends ExtendedDialog {
-        AutoCompletingComboBox keys;
-        AutoCompletingComboBox values;
-        Component componentUnderMouse;
+        protected AutoCompletingComboBox keys;
+        protected AutoCompletingComboBox values;
+        protected Component componentUnderMouse;
 
         public AbstractTagsDialog(Component parent, String title, String[] buttonTexts) {
             super(parent, title, buttonTexts);
@@ -517,7 +515,7 @@ class TagEditHelper {
         }
 
         protected JPopupMenu popupMenu = new JPopupMenu() {
-            JCheckBoxMenuItem fixTagLanguageCb = new JCheckBoxMenuItem(
+            private JCheckBoxMenuItem fixTagLanguageCb = new JCheckBoxMenuItem(
                 new AbstractAction(tr("Use English language for tag by default")){
                 @Override
                 public void actionPerformed(ActionEvent e) {
@@ -533,7 +531,7 @@ class TagEditHelper {
     }
 
     class AddTagsDialog extends AbstractTagsDialog {
-        List<JosmAction> recentTagsActions = new ArrayList<>();
+        private transient List<JosmAction> recentTagsActions = new ArrayList<>();
 
         // Counter of added commands for possible undo
         private int commandCount;
@@ -644,7 +642,7 @@ class TagEditHelper {
             ));
             final JLabel helpLabel = new JLabel(text);
             helpLabel.setFont(helpLabel.getFont().deriveFont(Font.PLAIN));
-            contentPane.add(helpLabel, GBC.eol().insets(1, 2, 1, 2));
+            contentPane.add(helpLabel, GBC.eol().fill(GridBagConstraints.HORIZONTAL).insets(1, 2, 1, 2));
             super.setContentPane(contentPane);
         }
 
diff --git a/src/org/openstreetmap/josm/gui/dialogs/relation/ChildRelationBrowser.java b/src/org/openstreetmap/josm/gui/dialogs/relation/ChildRelationBrowser.java
index 945f6f4..ec05ac6 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/relation/ChildRelationBrowser.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/relation/ChildRelationBrowser.java
@@ -57,10 +57,10 @@ public class ChildRelationBrowser extends JPanel {
     /** the tree with relation children */
     private RelationTree childTree;
     /**  the tree model */
-    private RelationTreeModel model;
+    private transient RelationTreeModel model;
 
     /** the osm data layer this browser is related to */
-    private OsmDataLayer layer;
+    private transient OsmDataLayer layer;
 
     /**
      * Replies the {@link OsmDataLayer} this editor is related to
@@ -113,9 +113,9 @@ public class ChildRelationBrowser extends JPanel {
      * constructor
      *
      * @param layer the {@link OsmDataLayer} this browser is related to. Must not be null.
-     * @exception IllegalArgumentException thrown, if layer is null
+     * @throws IllegalArgumentException if layer is null
      */
-    public ChildRelationBrowser(OsmDataLayer layer) throws IllegalArgumentException {
+    public ChildRelationBrowser(OsmDataLayer layer) {
         CheckParameterUtil.ensureParameterNotNull(layer, "layer");
         this.layer = layer;
         model = new RelationTreeModel();
@@ -127,9 +127,9 @@ public class ChildRelationBrowser extends JPanel {
      *
      * @param layer the {@link OsmDataLayer} this browser is related to. Must not be null.
      * @param root the root relation
-     * @exception IllegalArgumentException thrown, if layer is null
+     * @throws IllegalArgumentException if layer is null
      */
-    public ChildRelationBrowser(OsmDataLayer layer, Relation root) throws IllegalArgumentException {
+    public ChildRelationBrowser(OsmDataLayer layer, Relation root) {
         this(layer);
         populate(root);
     }
@@ -257,7 +257,7 @@ public class ChildRelationBrowser extends JPanel {
             TreePath [] selection = childTree.getSelectionPaths();
             if (selection == null || selection.length == 0)
                 return;
-            HashSet<Relation> relations = new HashSet<>();
+            Set<Relation> relations = new HashSet<>();
             for (TreePath aSelection : selection) {
                 relations.add((Relation) aSelection.getLastPathComponent());
             }
diff --git a/src/org/openstreetmap/josm/gui/dialogs/relation/DownloadRelationTask.java b/src/org/openstreetmap/josm/gui/dialogs/relation/DownloadRelationTask.java
index e907261..dc3332d 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/relation/DownloadRelationTask.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/relation/DownloadRelationTask.java
@@ -38,10 +38,10 @@ public class DownloadRelationTask extends PleaseWaitRunnable {
      *
      * @param relations a collection of relations. Must not be null.
      * @param layer the layer which data is to be merged into
-     * @throws IllegalArgumentException thrown if relations is null
-     * @throws IllegalArgumentException thrown if layer is null
+     * @throws IllegalArgumentException if relations is null
+     * @throws IllegalArgumentException if layer is null
      */
-    public DownloadRelationTask(Collection<Relation> relations, OsmDataLayer layer) throws IllegalArgumentException{
+    public DownloadRelationTask(Collection<Relation> relations, OsmDataLayer layer) {
         super(tr("Download relations"), false /* don't ignore exception */);
         CheckParameterUtil.ensureParameterNotNull(relations, "relations");
         CheckParameterUtil.ensureParameterNotNull(layer, "layer");
diff --git a/src/org/openstreetmap/josm/gui/dialogs/relation/GenericRelationEditor.java b/src/org/openstreetmap/josm/gui/dialogs/relation/GenericRelationEditor.java
index f25a7dd..93f2eda 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/relation/GenericRelationEditor.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/relation/GenericRelationEditor.java
@@ -747,8 +747,7 @@ public class GenericRelationEditor extends RelationEditor  {
      * @return The resulting command
      * @throws IllegalArgumentException if orig is null
      */
-    public static Command addPrimitivesToRelation(final Relation orig, Collection<? extends OsmPrimitive> primitivesToAdd)
-            throws IllegalArgumentException {
+    public static Command addPrimitivesToRelation(final Relation orig, Collection<? extends OsmPrimitive> primitivesToAdd) {
         CheckParameterUtil.ensureParameterNotNull(orig, "orig");
         try {
             final Collection<TaggingPreset> presets = TaggingPreset.getMatchingPresets(
diff --git a/src/org/openstreetmap/josm/gui/dialogs/relation/MemberRoleCellEditor.java b/src/org/openstreetmap/josm/gui/dialogs/relation/MemberRoleCellEditor.java
index 9f8eef6..e333ea7 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/relation/MemberRoleCellEditor.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/relation/MemberRoleCellEditor.java
@@ -15,8 +15,8 @@ import org.openstreetmap.josm.gui.tagging.ac.AutoCompletionList;
 
 public class MemberRoleCellEditor extends AbstractCellEditor implements TableCellEditor {
     private AutoCompletingTextField editor = null;
-    private final DataSet ds;
-    private final Relation relation;
+    private final transient DataSet ds;
+    private final transient Relation relation;
 
     /** user input is matched against this list of auto completion items */
     private AutoCompletionList autoCompletionList = null;
diff --git a/src/org/openstreetmap/josm/gui/dialogs/relation/MemberTable.java b/src/org/openstreetmap/josm/gui/dialogs/relation/MemberTable.java
index 25f984b..45d44c4 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/relation/MemberTable.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/relation/MemberTable.java
@@ -44,7 +44,7 @@ public class MemberTable extends OsmPrimitivesTable implements IMemberModelListe
 
     /** the additional actions in popup menu */
     private ZoomToGapAction zoomToGap;
-    private HighlightHelper highlightHelper = new HighlightHelper();
+    private transient HighlightHelper highlightHelper = new HighlightHelper();
     private boolean highlightEnabled;
 
     /**
@@ -121,7 +121,7 @@ public class MemberTable extends OsmPrimitivesTable implements IMemberModelListe
         scrollRectToVisible(getCellRect(index, 0, true));
     }
 
-    ListSelectionListener highlighterListener = new ListSelectionListener() {
+    private transient ListSelectionListener highlighterListener = new ListSelectionListener() {
             @Override
             public void valueChanged(ListSelectionEvent lse) {
                 if (Main.isDisplayingMapView()) {
@@ -268,6 +268,9 @@ public class MemberTable extends OsmPrimitivesTable implements IMemberModelListe
 
     private class ZoomToGapAction extends AbstractAction implements LayerChangeListener, ListSelectionListener {
 
+        /**
+         * Constructs a new {@code ZoomToGapAction}.
+         */
         public ZoomToGapAction() {
             putValue(NAME, tr("Zoom to Gap"));
             putValue(SHORT_DESCRIPTION, tr("Zoom to the gap in the way sequence"));
@@ -278,7 +281,8 @@ public class MemberTable extends OsmPrimitivesTable implements IMemberModelListe
             return getMemberTableModel().getWayConnection(getSelectedRows()[0]);
         }
 
-        private final Collection<Direction> connectionTypesOfInterest = Arrays.asList(WayConnectionType.Direction.FORWARD, WayConnectionType.Direction.BACKWARD);
+        private final transient Collection<Direction> connectionTypesOfInterest = Arrays.asList(
+                WayConnectionType.Direction.FORWARD, WayConnectionType.Direction.BACKWARD);
 
         private boolean hasGap() {
             WayConnectionType connectionType = getConnectionType();
diff --git a/src/org/openstreetmap/josm/gui/dialogs/relation/MemberTableLinkedCellRenderer.java b/src/org/openstreetmap/josm/gui/dialogs/relation/MemberTableLinkedCellRenderer.java
index 0da80d5..1214276 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/relation/MemberTableLinkedCellRenderer.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/relation/MemberTableLinkedCellRenderer.java
@@ -16,12 +16,12 @@ import org.openstreetmap.josm.tools.ImageProvider;
 
 public class MemberTableLinkedCellRenderer extends MemberTableCellRenderer {
 
-    static final Image arrowUp = ImageProvider.get("dialogs/relation", "arrowup").getImage();
-    static final Image arrowDown = ImageProvider.get("dialogs/relation", "arrowdown").getImage();
-    static final Image corners = ImageProvider.get("dialogs/relation", "roundedcorners").getImage();
-    static final Image roundabout_right = ImageProvider.get("dialogs/relation", "roundabout_right_tiny").getImage();
-    static final Image roundabout_left = ImageProvider.get("dialogs/relation", "roundabout_left_tiny").getImage();
-    private WayConnectionType value = new WayConnectionType();
+    private static final Image arrowUp = ImageProvider.get("dialogs/relation", "arrowup").getImage();
+    private static final Image arrowDown = ImageProvider.get("dialogs/relation", "arrowdown").getImage();
+    private static final Image corners = ImageProvider.get("dialogs/relation", "roundedcorners").getImage();
+    private static final Image roundabout_right = ImageProvider.get("dialogs/relation", "roundabout_right_tiny").getImage();
+    private static final Image roundabout_left = ImageProvider.get("dialogs/relation", "roundabout_left_tiny").getImage();
+    private transient WayConnectionType value = new WayConnectionType();
 
     @Override
     public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus,
diff --git a/src/org/openstreetmap/josm/gui/dialogs/relation/MemberTableModel.java b/src/org/openstreetmap/josm/gui/dialogs/relation/MemberTableModel.java
index 416e9f7..605c57b 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/relation/MemberTableModel.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/relation/MemberTableModel.java
@@ -48,16 +48,16 @@ public class MemberTableModel extends AbstractTableModel implements TableModelLi
     /**
      * data of the table model: The list of members and the cached WayConnectionType of each member.
      **/
-    private List<RelationMember> members;
-    private List<WayConnectionType> connectionType = null;
+    private transient List<RelationMember> members;
+    private transient List<WayConnectionType> connectionType = null;
 
     private DefaultListSelectionModel listSelectionModel;
     private final CopyOnWriteArrayList<IMemberModelListener> listeners;
-    private final OsmDataLayer layer;
-    private final PresetHandler presetHandler;
+    private final transient OsmDataLayer layer;
+    private final transient PresetHandler presetHandler;
 
-    private final WayConnectionTypeCalculator wayConnectionTypeCalculator = new WayConnectionTypeCalculator();
-    private final RelationSorter relationSorter = new RelationSorter();
+    private final transient WayConnectionTypeCalculator wayConnectionTypeCalculator = new WayConnectionTypeCalculator();
+    private final transient RelationSorter relationSorter = new RelationSorter();
 
     /**
      * constructor
@@ -281,14 +281,14 @@ public class MemberTableModel extends AbstractTableModel implements TableModelLi
         if (rows == null || rows.length == 0)
             return false;
         Arrays.sort(rows);
-        return rows[0] > 0 && members.size() > 0;
+        return rows[0] > 0 && !members.isEmpty();
     }
 
     public boolean canMoveDown(int[] rows) {
         if (rows == null || rows.length == 0)
             return false;
         Arrays.sort(rows);
-        return members.size() > 0 && rows[rows.length - 1] < members.size() - 1;
+        return !members.isEmpty() && rows[rows.length - 1] < members.size() - 1;
     }
 
     public boolean canRemove(int[] rows) {
@@ -513,7 +513,7 @@ public class MemberTableModel extends AbstractTableModel implements TableModelLi
      * @return the set of selected referers
      */
     public Set<OsmPrimitive> getChildPrimitives(Collection<? extends OsmPrimitive> referenceSet) {
-        HashSet<OsmPrimitive> ret = new HashSet<>();
+        Set<OsmPrimitive> ret = new HashSet<>();
         if (referenceSet == null) return null;
         for (RelationMember m: members) {
             if (referenceSet.contains(m.getMember())) {
@@ -605,7 +605,7 @@ public class MemberTableModel extends AbstractTableModel implements TableModelLi
     public static boolean hasMembersReferringTo(Collection<RelationMember> members, Collection<OsmPrimitive> primitives) {
         if (primitives == null || primitives.isEmpty())
             return false;
-        HashSet<OsmPrimitive> referrers = new HashSet<>();
+        Set<OsmPrimitive> referrers = new HashSet<>();
         for (RelationMember member : members) {
             referrers.add(member.getMember());
         }
diff --git a/src/org/openstreetmap/josm/gui/dialogs/relation/ParentRelationLoadingTask.java b/src/org/openstreetmap/josm/gui/dialogs/relation/ParentRelationLoadingTask.java
index f0614b1..5ba98ea 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/relation/ParentRelationLoadingTask.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/relation/ParentRelationLoadingTask.java
@@ -68,9 +68,9 @@ public class ParentRelationLoadingTask extends PleaseWaitRunnable{
      * @param full if true, parent relations are fully downloaded (i.e. with their members)
      * @param monitor the progress monitor to be used
      *
-     * @exception IllegalArgumentException thrown if child is null
-     * @exception IllegalArgumentException thrown if layer is null
-     * @exception IllegalArgumentException thrown if child.getId() == 0
+     * @throws IllegalArgumentException if child is null
+     * @throws IllegalArgumentException if layer is null
+     * @throws IllegalArgumentException if child.getId() == 0
      */
     public ParentRelationLoadingTask(Relation child, OsmDataLayer layer, boolean full, PleaseWaitProgressMonitor monitor ) {
         super(tr("Download referring relations"), monitor, false /* don't ignore exception */);
diff --git a/src/org/openstreetmap/josm/gui/dialogs/relation/ReferringRelationsBrowser.java b/src/org/openstreetmap/josm/gui/dialogs/relation/ReferringRelationsBrowser.java
index a4172bf..baa06c4 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/relation/ReferringRelationsBrowser.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/relation/ReferringRelationsBrowser.java
@@ -37,7 +37,7 @@ public class ReferringRelationsBrowser extends JPanel {
     /** the list of relations */
     private JList<Relation> referrers;
     private ReferringRelationsBrowserModel model;
-    private OsmDataLayer layer;
+    private transient OsmDataLayer layer;
     private JCheckBox cbReadFull;
     private EditAction editAction;
 
diff --git a/src/org/openstreetmap/josm/gui/dialogs/relation/ReferringRelationsBrowserModel.java b/src/org/openstreetmap/josm/gui/dialogs/relation/ReferringRelationsBrowserModel.java
index a511e74..d6978f8 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/relation/ReferringRelationsBrowserModel.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/relation/ReferringRelationsBrowserModel.java
@@ -13,8 +13,8 @@ import org.openstreetmap.josm.data.osm.RelationMember;
 public class ReferringRelationsBrowserModel extends AbstractListModel<Relation> {
 
     /** the relation */
-    private Relation relation;
-    private List<Relation> referrers;
+    private transient Relation relation;
+    private transient List<Relation> referrers;
 
     /**
      * Constructs a new {@code ReferringRelationsBrowserModel}.
diff --git a/src/org/openstreetmap/josm/gui/dialogs/relation/RelationDialogManager.java b/src/org/openstreetmap/josm/gui/dialogs/relation/RelationDialogManager.java
index b6778e0..1f21cfa 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/relation/RelationDialogManager.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/relation/RelationDialogManager.java
@@ -8,6 +8,7 @@ import java.util.HashMap;
 import java.util.Iterator;
 import java.util.Map;
 import java.util.Map.Entry;
+import java.util.Objects;
 
 import org.openstreetmap.josm.data.osm.Relation;
 import org.openstreetmap.josm.gui.MapView;
@@ -21,7 +22,7 @@ import org.openstreetmap.josm.gui.layer.OsmDataLayer;
 public class RelationDialogManager extends WindowAdapter implements MapView.LayerChangeListener{
 
     /** keeps track of open relation editors */
-    static RelationDialogManager relationDialogManager;
+    private static RelationDialogManager relationDialogManager;
 
     /**
      * Replies the singleton {@link RelationDialogManager}
@@ -120,9 +121,10 @@ public class RelationDialogManager extends WindowAdapter implements MapView.Laye
     public void updateContext(OsmDataLayer layer, Relation relation, RelationEditor editor) {
         // lookup the entry for editor and remove it
         //
-        for (DialogContext context: openDialogs.keySet()) {
-            if (openDialogs.get(context) == editor) {
-                openDialogs.remove(context);
+        for (Iterator<Entry<DialogContext, RelationEditor>> it = openDialogs.entrySet().iterator(); it.hasNext();) {
+            Entry<DialogContext, RelationEditor> entry = it.next();
+            if (Objects.equals(entry.getValue(), editor)) {
+                it.remove();
                 break;
             }
         }
@@ -214,16 +216,12 @@ public class RelationDialogManager extends WindowAdapter implements MapView.Laye
     @Override
     public void windowClosed(WindowEvent e) {
         RelationEditor editor = (RelationEditor)e.getWindow();
-        DialogContext context = null;
-        for (DialogContext c : openDialogs.keySet()) {
-            if (editor.equals(openDialogs.get(c))) {
-                context = c;
+        for (Iterator<Entry<DialogContext, RelationEditor>> it = openDialogs.entrySet().iterator(); it.hasNext(); ) {
+            if (editor.equals(it.next().getValue())) {
+                it.remove();
                 break;
             }
         }
-        if (context != null) {
-            openDialogs.remove(context);
-        }
     }
 
     /**
diff --git a/src/org/openstreetmap/josm/gui/dialogs/relation/RelationEditor.java b/src/org/openstreetmap/josm/gui/dialogs/relation/RelationEditor.java
index 0682c07..513a87f 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/relation/RelationEditor.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/relation/RelationEditor.java
@@ -50,15 +50,15 @@ public abstract class RelationEditor extends ExtendedDialog {
     /**
      * The relation that this editor is working on.
      */
-    private Relation relation;
+    private transient Relation relation;
 
     /**
      * The version of the relation when editing is started.  This is
      * null if a new relation is created. */
-    private Relation relationSnapshot;
+    private transient Relation relationSnapshot;
 
     /** the data layer the relation belongs to */
-    private OsmDataLayer layer;
+    private transient OsmDataLayer layer;
 
     /**
      * This is a factory method that creates an appropriate RelationEditor
@@ -111,10 +111,9 @@ public abstract class RelationEditor extends ExtendedDialog {
      * @param relation the relation. Can be null if a new relation is to be edited.
      * @param selectedMembers  a collection of members in <code>relation</code> which the editor
      * should display selected when the editor is first displayed on screen
-     * @throws IllegalArgumentException thrown if layer is null
+     * @throws IllegalArgumentException if layer is null
      */
-    protected RelationEditor(OsmDataLayer layer, Relation relation, Collection<RelationMember> selectedMembers)  throws IllegalArgumentException{
-        // Initalizes ExtendedDialog
+    protected RelationEditor(OsmDataLayer layer, Relation relation, Collection<RelationMember> selectedMembers) {
         super(Main.parent,
                 "",
                 new String[] { tr("Apply Changes"), tr("Cancel")},
diff --git a/src/org/openstreetmap/josm/gui/dialogs/relation/SelectionTableModel.java b/src/org/openstreetmap/josm/gui/dialogs/relation/SelectionTableModel.java
index 0c70128..ae78f24 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/relation/SelectionTableModel.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/relation/SelectionTableModel.java
@@ -18,16 +18,16 @@ import org.openstreetmap.josm.tools.CheckParameterUtil;
 public class SelectionTableModel extends AbstractTableModel implements SelectionChangedListener, MapView.LayerChangeListener{
 
     /** this selection table model only displays selected primitives in this layer */
-    private OsmDataLayer layer;
-    private List<OsmPrimitive> cache;
+    private transient OsmDataLayer layer;
+    private transient List<OsmPrimitive> cache;
 
     /**
      * constructor
      *
      * @param layer  the data layer. Must not be null.
-     * @exception IllegalArgumentException thrown if layer is null
+     * @throws IllegalArgumentException if layer is null
      */
-    public SelectionTableModel(OsmDataLayer layer) throws IllegalArgumentException {
+    public SelectionTableModel(OsmDataLayer layer) {
         CheckParameterUtil.ensureParameterNotNull(layer, "layer");
         this.layer = layer;
         cache = new ArrayList<>();
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 bbc9ca8..3f0ceb5 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/relation/sort/RelationNodeMap.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/relation/sort/RelationNodeMap.java
@@ -166,9 +166,9 @@ public class RelationNodeMap {
         ts2.add(n);
     }
 
-    Integer firstOneway = null;
-    Node lastOnewayNode = null;
-    Node firstCircular = null;
+    private Integer firstOneway = null;
+    private Node lastOnewayNode = null;
+    private Node firstCircular = null;
 
     /**
      * Return a relation member that is linked to the
@@ -232,7 +232,7 @@ public class RelationNodeMap {
 
     private Integer popBackwardOnewayPart(int way){
         if (lastOnewayNode != null) {
-            TreeSet<Node> nodes = new TreeSet<>();
+            Set<Node> nodes = new TreeSet<>();
             if (onewayReverseMap.ways.containsKey(way)) {
                 nodes.addAll(onewayReverseMap.ways.get(way));
             }
diff --git a/src/org/openstreetmap/josm/gui/dialogs/relation/sort/RelationSorter.java b/src/org/openstreetmap/josm/gui/dialogs/relation/sort/RelationSorter.java
index d362c87..9144cfe 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/relation/sort/RelationSorter.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/relation/sort/RelationSorter.java
@@ -174,7 +174,7 @@ public class RelationSorter {
             }
         }
 
-        for (LinkedList<Integer> tmpGroup : allGroups) {
+        for (List<Integer> tmpGroup : allGroups) {
             for (Integer p : tmpGroup) {
                 newMembers.add(defaultMembers.get(p));
             }
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 4daaf39..d31c8ba 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/relation/sort/WayConnectionTypeCalculator.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/relation/sort/WayConnectionTypeCalculator.java
@@ -105,7 +105,7 @@ public class WayConnectionTypeCalculator {
         return con;
     }
 
-    int firstGroupIdx;
+    private int firstGroupIdx;
     private void makeLoopIfNeeded(final List<WayConnectionType> con, final int i) {
         boolean loop;
         if (i == firstGroupIdx) { //is primitive loop
@@ -135,8 +135,9 @@ public class WayConnectionTypeCalculator {
         return NONE;
     }
 
-    int lastForwardWay, lastBackwardWay;
-    boolean onewayBeginning;
+    private int lastForwardWay;
+    private int lastBackwardWay;
+    private boolean onewayBeginning;
     private WayConnectionType determineOnewayConnectionType(final List<WayConnectionType> con,
             RelationMember m, int i, final WayConnectionType wct) {
         Direction dirFW = determineDirection(lastForwardWay, con.get(lastForwardWay).direction, i);
diff --git a/src/org/openstreetmap/josm/gui/dialogs/validator/ValidatorTreePanel.java b/src/org/openstreetmap/josm/gui/dialogs/validator/ValidatorTreePanel.java
index 0736836..320b264 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/validator/ValidatorTreePanel.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/validator/ValidatorTreePanel.java
@@ -60,13 +60,13 @@ public class ValidatorTreePanel extends JTree implements Destroyable {
     protected DefaultTreeModel valTreeModel = new DefaultTreeModel(new DefaultMutableTreeNode());
 
     /** The list of errors shown in the tree */
-    private List<TestError> errors = new ArrayList<>();
+    private transient List<TestError> errors = new ArrayList<>();
 
     /**
      * If {@link #filter} is not <code>null</code> only errors are displayed
      * that refer to one of the primitives in the filter.
      */
-    private Set<OsmPrimitive> filter = null;
+    private transient Set<OsmPrimitive> filter = null;
 
     /** a counter to check if tree has been rebuild */
     private int updateCount;
diff --git a/src/org/openstreetmap/josm/gui/download/BookmarkList.java b/src/org/openstreetmap/josm/gui/download/BookmarkList.java
index b0f81bf..21b0d6c 100644
--- a/src/org/openstreetmap/josm/gui/download/BookmarkList.java
+++ b/src/org/openstreetmap/josm/gui/download/BookmarkList.java
@@ -38,8 +38,8 @@ public class BookmarkList extends JList<BookmarkList.Bookmark> {
         /**
          * Constructs a new {@code Bookmark} with the given contents.
          * @param list Bookmark contents as a list of 5 elements. First item is the name, then come bounds arguments (minlat, minlon, maxlat, maxlon)
-         * @throws NumberFormatException If the bounds arguments are not numbers
-         * @throws IllegalArgumentException If list contain less than 5 elements
+         * @throws NumberFormatException if the bounds arguments are not numbers
+         * @throws IllegalArgumentException if list contain less than 5 elements
          */
         public Bookmark(Collection<String> list) throws NumberFormatException, IllegalArgumentException {
             List<String> array = new ArrayList<>(list);
@@ -157,7 +157,7 @@ public class BookmarkList extends JList<BookmarkList.Bookmark> {
         model.removeAllElements();
         Collection<Collection<String>> args = Main.pref.getArray("bookmarks", null);
         if(args != null) {
-            LinkedList<Bookmark> bookmarks = new LinkedList<>();
+            List<Bookmark> bookmarks = new LinkedList<>();
             for(Collection<String> entry : args) {
                 try {
                     bookmarks.add(new Bookmark(entry));
@@ -177,7 +177,7 @@ public class BookmarkList extends JList<BookmarkList.Bookmark> {
      * Saves all bookmarks to the preferences file
      */
     public final void save() {
-        LinkedList<Collection<String>> coll = new LinkedList<>();
+        List<Collection<String>> coll = new LinkedList<>();
         for (Object o : ((DefaultListModel<Bookmark>)getModel()).toArray()) {
             String[] array = new String[5];
             Bookmark b = (Bookmark) o;
diff --git a/src/org/openstreetmap/josm/gui/download/DownloadDialog.java b/src/org/openstreetmap/josm/gui/download/DownloadDialog.java
index 8468589..efda306 100644
--- a/src/org/openstreetmap/josm/gui/download/DownloadDialog.java
+++ b/src/org/openstreetmap/josm/gui/download/DownloadDialog.java
@@ -69,12 +69,12 @@ public class DownloadDialog extends JDialog  {
     }
 
     protected SlippyMapChooser slippyMapChooser;
-    protected final List<DownloadSelection> downloadSelections = new ArrayList<>();
+    protected final transient List<DownloadSelection> downloadSelections = new ArrayList<>();
     protected final JTabbedPane tpDownloadAreaSelectors = new JTabbedPane();
     protected JCheckBox cbNewLayer;
     protected JCheckBox cbStartup;
     protected final JLabel sizeCheck = new JLabel();
-    protected Bounds currentBounds = null;
+    protected transient Bounds currentBounds = null;
     protected boolean canceled;
 
     protected JCheckBox cbDownloadOsmData;
diff --git a/src/org/openstreetmap/josm/gui/download/PlaceSelection.java b/src/org/openstreetmap/josm/gui/download/PlaceSelection.java
index 63000e9..c9ce718 100644
--- a/src/org/openstreetmap/josm/gui/download/PlaceSelection.java
+++ b/src/org/openstreetmap/josm/gui/download/PlaceSelection.java
@@ -45,7 +45,6 @@ import javax.swing.table.DefaultTableColumnModel;
 import javax.swing.table.DefaultTableModel;
 import javax.swing.table.TableCellRenderer;
 import javax.swing.table.TableColumn;
-import javax.xml.parsers.SAXParserFactory;
 
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.data.Bounds;
@@ -364,7 +363,7 @@ public class PlaceSelection implements DownloadSelection {
 
         @Override
         protected void realRun() throws SAXException, IOException, OsmTransferException {
-            String urlString = useserver.url+java.net.URLEncoder.encode(searchExpression, "UTF-8");
+            String urlString = useserver.url+Utils.encodeUrl(searchExpression);
 
             try {
                 getProgressMonitor().indeterminateSubTask(tr("Querying name server ..."));
@@ -379,7 +378,7 @@ public class PlaceSelection implements DownloadSelection {
                 ) {
                     InputSource inputSource = new InputSource(reader);
                     NameFinderResultParser parser = new NameFinderResultParser();
-                    SAXParserFactory.newInstance().newSAXParser().parse(inputSource, parser);
+                    Utils.newSafeSAXParser().parse(inputSource, parser);
                     this.data = parser.getResult();
                 }
             } catch (SAXParseException e) {
@@ -409,8 +408,8 @@ public class PlaceSelection implements DownloadSelection {
     }
 
     static class NamedResultTableModel extends DefaultTableModel {
-        private List<SearchResult> data;
-        private ListSelectionModel selectionModel;
+        private transient List<SearchResult> data;
+        private transient ListSelectionModel selectionModel;
 
         public NamedResultTableModel(ListSelectionModel selectionModel) {
             data = new ArrayList<>();
@@ -449,8 +448,8 @@ public class PlaceSelection implements DownloadSelection {
     }
 
     static class NamedResultTableColumnModel extends DefaultTableColumnModel {
-        TableColumn col3 = null;
-        TableColumn col4 = null;
+        private TableColumn col3 = null;
+        private TableColumn col4 = null;
         protected final void createColumns() {
             TableColumn col = null;
             NamedResultCellRenderer renderer = new NamedResultCellRenderer();
diff --git a/src/org/openstreetmap/josm/gui/help/HelpBrowser.java b/src/org/openstreetmap/josm/gui/help/HelpBrowser.java
index e357e58..9872884 100644
--- a/src/org/openstreetmap/josm/gui/help/HelpBrowser.java
+++ b/src/org/openstreetmap/josm/gui/help/HelpBrowser.java
@@ -113,12 +113,12 @@ public class HelpBrowser extends JDialog {
     private JosmEditorPane help;
 
     /** the help browser history */
-    private HelpBrowserHistory history;
+    private transient HelpBrowserHistory history;
 
     /** the currently displayed URL */
     private String url;
 
-    private HelpContentReader reader;
+    private transient HelpContentReader reader;
 
     private static final JosmAction focusAction = new JosmAction(tr("JOSM Help Browser"), "help", "", null, false, false) {
         @Override
@@ -482,7 +482,7 @@ public class HelpBrowser extends JDialog {
     }
 
     static class BackAction extends AbstractAction implements Observer {
-        private HelpBrowserHistory history;
+        private transient HelpBrowserHistory history;
         public BackAction(HelpBrowserHistory history) {
             this.history = history;
             history.addObserver(this);
@@ -502,7 +502,7 @@ public class HelpBrowser extends JDialog {
     }
 
     static class ForwardAction extends AbstractAction implements Observer {
-        private HelpBrowserHistory history;
+        private transient HelpBrowserHistory history;
         public ForwardAction(HelpBrowserHistory history) {
             this.history = history;
             history.addObserver(this);
diff --git a/src/org/openstreetmap/josm/gui/help/HelpBrowserHistory.java b/src/org/openstreetmap/josm/gui/help/HelpBrowserHistory.java
index 4415235..53d82c6 100644
--- a/src/org/openstreetmap/josm/gui/help/HelpBrowserHistory.java
+++ b/src/org/openstreetmap/josm/gui/help/HelpBrowserHistory.java
@@ -56,7 +56,7 @@ public class HelpBrowserHistory extends Observable {
             add = false;
         } else if (historyPos == history.size() -1) {
             // do nothing just append
-        } else if (historyPos ==0 && history.size() > 0) {
+        } else if (historyPos ==0 && !history.isEmpty()) {
             history = new ArrayList<>(Collections.singletonList(history.get(0)));
         } else if (historyPos < history.size() -1 && historyPos > 0) {
             history = new ArrayList<>(history.subList(0, historyPos));
diff --git a/src/org/openstreetmap/josm/gui/help/HelpContentReader.java b/src/org/openstreetmap/josm/gui/help/HelpContentReader.java
index 7a33bb3..9459c2c 100644
--- a/src/org/openstreetmap/josm/gui/help/HelpContentReader.java
+++ b/src/org/openstreetmap/josm/gui/help/HelpContentReader.java
@@ -38,12 +38,12 @@ public class HelpContentReader extends WikiReader {
      *
      * @param helpTopicUrl  the absolute help topic URL
      * @return the content, filtered and transformed for being displayed in the internal help browser
-     * @throws HelpContentReaderException thrown if problem occurs
-     * @throws MissingHelpContentException thrown if this helpTopicUrl doesn't point to an existing Wiki help page
+     * @throws HelpContentReaderException if problem occurs
+     * @throws MissingHelpContentException if this helpTopicUrl doesn't point to an existing Wiki help page
      */
     public String fetchHelpTopicContent(String helpTopicUrl, boolean dotest) throws HelpContentReaderException {
         if(helpTopicUrl == null)
-            throw new MissingHelpContentException(helpTopicUrl);
+            throw new MissingHelpContentException("helpTopicUrl is null");
         HttpURLConnection con = null;
         try {
             URL u = new URL(helpTopicUrl);
@@ -76,8 +76,8 @@ public class HelpContentReader extends WikiReader {
      *
      * @param in the input stream
      * @return the content
-     * @throws HelpContentReaderException thrown if an exception occurs
-     * @throws MissingHelpContentException thrown, if the content read isn't a help page
+     * @throws HelpContentReaderException if an exception occurs
+     * @throws MissingHelpContentException if the content read isn't a help page
      * @since 5936
      */
     protected String prepareHelpContent(BufferedReader in, boolean dotest, URL url) throws HelpContentReaderException {
diff --git a/src/org/openstreetmap/josm/gui/history/CoordinateInfoViewer.java b/src/org/openstreetmap/josm/gui/history/CoordinateInfoViewer.java
index 351255c..c726efd 100644
--- a/src/org/openstreetmap/josm/gui/history/CoordinateInfoViewer.java
+++ b/src/org/openstreetmap/josm/gui/history/CoordinateInfoViewer.java
@@ -31,7 +31,7 @@ public class CoordinateInfoViewer extends JPanel {
     public static final Color BGCOLOR_DIFFERENCE = new Color(255,197,197);
 
     /** the model */
-    private HistoryBrowserModel model;
+    private transient HistoryBrowserModel model;
     /** the common info panel for the history node in role REFERENCE_POINT_IN_TIME */
     private VersionInfoPanel referenceInfoPanel;
     /** the common info panel for the history node in role CURRENT_POINT_IN_TIME */
@@ -101,9 +101,9 @@ public class CoordinateInfoViewer extends JPanel {
     /**
      *
      * @param model the model. Must not be null.
-     * @throws IllegalArgumentException thrown if model is null
+     * @throws IllegalArgumentException if model is null
      */
-    public CoordinateInfoViewer(HistoryBrowserModel model) throws IllegalArgumentException{
+    public CoordinateInfoViewer(HistoryBrowserModel model) {
         CheckParameterUtil.ensureParameterNotNull(model, "model");
         setModel(model);
         build();
@@ -170,7 +170,7 @@ public class CoordinateInfoViewer extends JPanel {
 
         private JLabel lblLat;
         private JLabel lblLon;
-        private HistoryBrowserModel model;
+        private transient HistoryBrowserModel model;
         private PointInTimeType role;
 
         protected HistoryOsmPrimitive getPrimitive() {
diff --git a/src/org/openstreetmap/josm/gui/history/DiffTableModel.java b/src/org/openstreetmap/josm/gui/history/DiffTableModel.java
index 63ad390..73bb1f1 100644
--- a/src/org/openstreetmap/josm/gui/history/DiffTableModel.java
+++ b/src/org/openstreetmap/josm/gui/history/DiffTableModel.java
@@ -1,8 +1,6 @@
 // License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.gui.history;
 
-import static org.openstreetmap.josm.tools.I18n.tr;
-
 import java.util.ArrayList;
 import java.util.List;
 
@@ -15,7 +13,7 @@ import org.openstreetmap.josm.gui.history.TwoColumnDiff.Item.DiffItemType;
  * used a {@link javax.swing.table.DefaultTableModel} instead.
  */
 class DiffTableModel extends AbstractTableModel {
-    private List<TwoColumnDiff.Item> rows = new ArrayList<>();
+    private transient List<TwoColumnDiff.Item> rows = new ArrayList<>();
     private boolean reversed = false;
 
     public void setRows(List<TwoColumnDiff.Item> rows, boolean reversed) {
diff --git a/src/org/openstreetmap/josm/gui/history/HistoryBrowser.java b/src/org/openstreetmap/josm/gui/history/HistoryBrowser.java
index 5a25699..468b5d6 100644
--- a/src/org/openstreetmap/josm/gui/history/HistoryBrowser.java
+++ b/src/org/openstreetmap/josm/gui/history/HistoryBrowser.java
@@ -23,7 +23,7 @@ import org.openstreetmap.josm.data.osm.history.History;
 public class HistoryBrowser extends JPanel {
 
     /** the model */
-    private HistoryBrowserModel model;
+    private transient HistoryBrowserModel model;
     private TagInfoViewer tagInfoViewer;
     private NodeListViewer nodeListViewer;
     private RelationMemberListViewer relationMemberListViewer;
diff --git a/src/org/openstreetmap/josm/gui/history/HistoryBrowserDialogManager.java b/src/org/openstreetmap/josm/gui/history/HistoryBrowserDialogManager.java
index b458ad6..0b56982 100644
--- a/src/org/openstreetmap/josm/gui/history/HistoryBrowserDialogManager.java
+++ b/src/org/openstreetmap/josm/gui/history/HistoryBrowserDialogManager.java
@@ -8,8 +8,11 @@ import java.awt.Point;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.HashMap;
+import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Objects;
 
 import javax.swing.JOptionPane;
 import javax.swing.SwingUtilities;
@@ -86,7 +89,7 @@ public class HistoryBrowserDialogManager implements MapView.LayerChangeListener
         return false;
     }
 
-    final String WINDOW_GEOMETRY_PREF = getClass().getName() + ".geometry";
+    private final String WINDOW_GEOMETRY_PREF = getClass().getName() + ".geometry";
 
     protected void placeOnScreen(HistoryBrowserDialog dialog) {
         WindowGeometry geometry = new WindowGeometry(WINDOW_GEOMETRY_PREF, WindowGeometry.centerOnScreen(new Dimension(850, 500)));
@@ -104,19 +107,15 @@ public class HistoryBrowserDialogManager implements MapView.LayerChangeListener
      * @param dialog History dialog to hide
      */
     public void hide(HistoryBrowserDialog dialog) {
-        long id = 0;
-        for (long i: dialogs.keySet()) {
-            if (dialogs.get(i) == dialog) {
-                id = i;
+        for (Iterator<Entry<Long, HistoryBrowserDialog>> it = dialogs.entrySet().iterator(); it.hasNext(); ) {
+            if (Objects.equals(it.next().getValue(), dialog)) {
+                it.remove();
+                if (dialogs.isEmpty()) {
+                    new WindowGeometry(dialog).remember(WINDOW_GEOMETRY_PREF);
+                }
                 break;
             }
         }
-        if (id > 0) {
-            dialogs.remove(id);
-            if (dialogs.isEmpty()) {
-                new WindowGeometry(dialog).remember(WINDOW_GEOMETRY_PREF);
-            }
-        }
         dialog.setVisible(false);
         dialog.dispose();
     }
@@ -216,7 +215,7 @@ public class HistoryBrowserDialogManager implements MapView.LayerChangeListener
 
     private final Predicate<PrimitiveId> unloadedHistoryPredicate = new Predicate<PrimitiveId>() {
 
-        HistoryDataSet hds = HistoryDataSet.getInstance();
+        private HistoryDataSet hds = HistoryDataSet.getInstance();
 
         @Override
         public boolean evaluate(PrimitiveId p) {
diff --git a/src/org/openstreetmap/josm/gui/history/HistoryBrowserModel.java b/src/org/openstreetmap/josm/gui/history/HistoryBrowserModel.java
index eca0b2e..67ad191 100644
--- a/src/org/openstreetmap/josm/gui/history/HistoryBrowserModel.java
+++ b/src/org/openstreetmap/josm/gui/history/HistoryBrowserModel.java
@@ -9,6 +9,7 @@ import java.util.Collections;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Observable;
+import java.util.Set;
 
 import javax.swing.JTable;
 import javax.swing.table.AbstractTableModel;
@@ -114,7 +115,7 @@ public class HistoryBrowserModel extends Observable implements LayerChangeListen
      * Creates a new history browser model for a given history.
      *
      * @param history the history. Must not be null.
-     * @throws IllegalArgumentException thrown if history is null
+     * @throws IllegalArgumentException if history is null
      */
     public HistoryBrowserModel(History history) {
         this();
@@ -246,9 +247,9 @@ public class HistoryBrowserModel extends Observable implements LayerChangeListen
      *
      * @param pointInTimeType the type of the point in time (must not be null)
      * @return the tag table model
-     * @exception IllegalArgumentException thrown, if pointInTimeType is null
+     * @throws IllegalArgumentException if pointInTimeType is null
      */
-    public TagTableModel getTagTableModel(PointInTimeType pointInTimeType) throws IllegalArgumentException {
+    public TagTableModel getTagTableModel(PointInTimeType pointInTimeType) {
         CheckParameterUtil.ensureParameterNotNull(pointInTimeType, "pointInTimeType");
         if (pointInTimeType.equals(PointInTimeType.CURRENT_POINT_IN_TIME))
             return currentTagTableModel;
@@ -259,7 +260,7 @@ public class HistoryBrowserModel extends Observable implements LayerChangeListen
         return null;
     }
 
-    public DiffTableModel getNodeListTableModel(PointInTimeType pointInTimeType) throws IllegalArgumentException {
+    public DiffTableModel getNodeListTableModel(PointInTimeType pointInTimeType) {
         CheckParameterUtil.ensureParameterNotNull(pointInTimeType, "pointInTimeType");
         if (pointInTimeType.equals(PointInTimeType.CURRENT_POINT_IN_TIME))
             return currentNodeListTableModel;
@@ -270,7 +271,7 @@ public class HistoryBrowserModel extends Observable implements LayerChangeListen
         return null;
     }
 
-    public DiffTableModel getRelationMemberTableModel(PointInTimeType pointInTimeType) throws IllegalArgumentException {
+    public DiffTableModel getRelationMemberTableModel(PointInTimeType pointInTimeType) {
         CheckParameterUtil.ensureParameterNotNull(pointInTimeType, "pointInTimeType");
         if (pointInTimeType.equals(PointInTimeType.CURRENT_POINT_IN_TIME))
             return currentRelationMemberTableModel;
@@ -286,14 +287,14 @@ public class HistoryBrowserModel extends Observable implements LayerChangeListen
      * in time (see {@link PointInTimeType}).
      *
      * @param reference the reference history primitive. Must not be null.
-     * @throws IllegalArgumentException thrown if reference is null
-     * @throws IllegalStateException thrown if this model isn't a assigned a history yet
+     * @throws IllegalArgumentException if reference is null
+     * @throws IllegalStateException if this model isn't a assigned a history yet
      * @throws IllegalArgumentException if reference isn't an history primitive for the history managed by this mode
      *
      * @see #setHistory(History)
      * @see PointInTimeType
      */
-    public void setReferencePointInTime(HistoryOsmPrimitive reference) throws IllegalArgumentException, IllegalStateException{
+    public void setReferencePointInTime(HistoryOsmPrimitive reference) {
         CheckParameterUtil.ensureParameterNotNull(reference, "reference");
         if (history == null)
             throw new IllegalStateException(tr("History not initialized yet. Failed to set reference primitive."));
@@ -316,14 +317,14 @@ public class HistoryBrowserModel extends Observable implements LayerChangeListen
      * in time (see {@link PointInTimeType}).
      *
      * @param current the reference history primitive. Must not be {@code null}.
-     * @throws IllegalArgumentException thrown if reference is {@code null}
-     * @throws IllegalStateException thrown if this model isn't a assigned a history yet
+     * @throws IllegalArgumentException if reference is {@code null}
+     * @throws IllegalStateException if this model isn't a assigned a history yet
      * @throws IllegalArgumentException if reference isn't an history primitive for the history managed by this mode
      *
      * @see #setHistory(History)
      * @see PointInTimeType
      */
-    public void setCurrentPointInTime(HistoryOsmPrimitive current) throws IllegalArgumentException, IllegalStateException{
+    public void setCurrentPointInTime(HistoryOsmPrimitive current) {
         CheckParameterUtil.ensureParameterNotNull(current, "current");
         if (history == null)
             throw new IllegalStateException(tr("History not initialized yet. Failed to set current primitive."));
@@ -363,9 +364,9 @@ public class HistoryBrowserModel extends Observable implements LayerChangeListen
      *
      * @param type the type of the point in time (must not be null)
      * @return the respective primitive. Can be null.
-     * @exception IllegalArgumentException thrown, if type is null
+     * @throws IllegalArgumentException if type is null
      */
-    public HistoryOsmPrimitive getPointInTime(PointInTimeType type) throws IllegalArgumentException  {
+    public HistoryOsmPrimitive getPointInTime(PointInTimeType type)  {
         CheckParameterUtil.ensureParameterNotNull(type, "type");
         if (type.equals(PointInTimeType.CURRENT_POINT_IN_TIME))
             return current;
@@ -530,11 +531,11 @@ public class HistoryBrowserModel extends Observable implements LayerChangeListen
      */
     public class TagTableModel extends AbstractTableModel {
 
-        private List<String> keys;
+        private transient List<String> keys;
         private PointInTimeType pointInTimeType;
 
         protected void initKeyList() {
-            HashSet<String> keySet = new HashSet<>();
+            Set<String> keySet = new HashSet<>();
             if (current != null) {
                 keySet.addAll(current.getTags().keySet());
             }
diff --git a/src/org/openstreetmap/josm/gui/history/HistoryLoadTask.java b/src/org/openstreetmap/josm/gui/history/HistoryLoadTask.java
index 97da96e..2b27df5 100644
--- a/src/org/openstreetmap/josm/gui/history/HistoryLoadTask.java
+++ b/src/org/openstreetmap/josm/gui/history/HistoryLoadTask.java
@@ -69,7 +69,7 @@ public class HistoryLoadTask extends PleaseWaitRunnable {
      * @param parent the component to be used as reference to find the
      * parent for {@link org.openstreetmap.josm.gui.PleaseWaitDialog}.
      * Must not be <code>null</code>.
-     * @throws IllegalArgumentException thrown if parent is <code>null</code>
+     * @throws IllegalArgumentException if parent is <code>null</code>
      */
     public HistoryLoadTask(Component parent) {
         super(parent, tr("Load history"), true);
@@ -84,7 +84,7 @@ public class HistoryLoadTask extends PleaseWaitRunnable {
      * @param type the object type
      * @return this task
      */
-    public HistoryLoadTask add(long id, OsmPrimitiveType type) throws IllegalArgumentException {
+    public HistoryLoadTask add(long id, OsmPrimitiveType type) {
         if (id <= 0)
             throw new IllegalArgumentException(MessageFormat.format("Parameter ''{0}'' > 0 expected. Got {1}.", "id", id));
         CheckParameterUtil.ensureParameterNotNull(type, "type");
@@ -110,7 +110,7 @@ public class HistoryLoadTask extends PleaseWaitRunnable {
      *
      * @param primitive the history item
      * @return this task
-     * @throws IllegalArgumentException thrown if primitive is null
+     * @throws IllegalArgumentException if primitive is null
      */
     public HistoryLoadTask add(HistoryOsmPrimitive primitive) {
         CheckParameterUtil.ensureParameterNotNull(primitive, "primitive");
@@ -123,7 +123,7 @@ public class HistoryLoadTask extends PleaseWaitRunnable {
      *
      * @param history the history. Must not be null.
      * @return this task
-     * @throws IllegalArgumentException thrown if history is null
+     * @throws IllegalArgumentException if history is null
      */
     public HistoryLoadTask add(History history) {
         CheckParameterUtil.ensureParameterNotNull(history, "history");
@@ -136,8 +136,8 @@ public class HistoryLoadTask extends PleaseWaitRunnable {
      *
      * @param primitive the OSM primitive. Must not be null. primitive.getId() > 0 required.
      * @return this task
-     * @throws IllegalArgumentException thrown if the primitive is null
-     * @throws IllegalArgumentException thrown if primitive.getId() <= 0
+     * @throws IllegalArgumentException if the primitive is null
+     * @throws IllegalArgumentException if primitive.getId() <= 0
      */
     public HistoryLoadTask add(OsmPrimitive primitive) {
         CheckParameterUtil.ensureValidPrimitiveId(primitive, "primitive");
@@ -151,8 +151,8 @@ public class HistoryLoadTask extends PleaseWaitRunnable {
      * @param primitives the OSM primitives. Must not be <code>null</code>.
      * <code>primitive.getId() > 0</code> required.
      * @return this task
-     * @throws IllegalArgumentException thrown if primitives is <code>null</code>
-     * @throws IllegalArgumentException thrown if one of the ids in the collection <= 0
+     * @throws IllegalArgumentException if primitives is <code>null</code>
+     * @throws IllegalArgumentException if one of the ids in the collection <= 0
      */
     public HistoryLoadTask add(Collection<? extends OsmPrimitive> primitives) {
         CheckParameterUtil.ensureParameterNotNull(primitives, "primitives");
diff --git a/src/org/openstreetmap/josm/gui/history/HistoryViewerPanel.java b/src/org/openstreetmap/josm/gui/history/HistoryViewerPanel.java
index 1343cb2..1c864c8 100644
--- a/src/org/openstreetmap/josm/gui/history/HistoryViewerPanel.java
+++ b/src/org/openstreetmap/josm/gui/history/HistoryViewerPanel.java
@@ -16,24 +16,24 @@ import org.openstreetmap.josm.gui.util.AdjustmentSynchronizer;
  * @since 6207
  */
 public abstract class HistoryViewerPanel extends JPanel {
-    
-    protected HistoryBrowserModel model;
+
+    protected transient HistoryBrowserModel model;
     protected VersionInfoPanel referenceInfoPanel;
     protected VersionInfoPanel currentInfoPanel;
-    protected AdjustmentSynchronizer adjustmentSynchronizer;
-    protected SelectionSynchronizer selectionSynchronizer;
+    protected transient AdjustmentSynchronizer adjustmentSynchronizer;
+    protected transient SelectionSynchronizer selectionSynchronizer;
 
     protected HistoryViewerPanel(HistoryBrowserModel model) {
         setModel(model);
         build();
     }
-    
+
     private JScrollPane embedInScrollPane(JTable table) {
         JScrollPane pane = new JScrollPane(table);
         adjustmentSynchronizer.participateInSynchronizedScrolling(pane.getVerticalScrollBar());
         return pane;
     }
-    
+
     /**
      * Sets the history browsing model.
      * @param model The history browsing model
@@ -47,7 +47,7 @@ public abstract class HistoryViewerPanel extends JPanel {
             registerAsObserver(model);
         }
     }
-    
+
     protected final void unregisterAsObserver(HistoryBrowserModel model) {
         if (currentInfoPanel != null) {
             model.deleteObserver(currentInfoPanel);
@@ -56,7 +56,7 @@ public abstract class HistoryViewerPanel extends JPanel {
             model.deleteObserver(referenceInfoPanel);
         }
     }
-    
+
     protected final void registerAsObserver(HistoryBrowserModel model) {
         if (currentInfoPanel != null) {
             model.addObserver(currentInfoPanel);
@@ -65,11 +65,11 @@ public abstract class HistoryViewerPanel extends JPanel {
             model.addObserver(referenceInfoPanel);
         }
     }
-    
+
     protected abstract JTable buildReferenceTable();
-    
+
     protected abstract JTable buildCurrentTable();
-    
+
     private void build() {
         setLayout(new GridBagLayout());
         GridBagConstraints gc = new GridBagConstraints();
diff --git a/src/org/openstreetmap/josm/gui/history/NodeListViewer.java b/src/org/openstreetmap/josm/gui/history/NodeListViewer.java
index c74a752..9491d03 100644
--- a/src/org/openstreetmap/josm/gui/history/NodeListViewer.java
+++ b/src/org/openstreetmap/josm/gui/history/NodeListViewer.java
@@ -47,11 +47,11 @@ import org.openstreetmap.josm.tools.ImageProvider;
  */
 public class NodeListViewer extends JPanel {
 
-    private HistoryBrowserModel model;
+    private transient HistoryBrowserModel model;
     private VersionInfoPanel referenceInfoPanel;
     private VersionInfoPanel currentInfoPanel;
-    private AdjustmentSynchronizer adjustmentSynchronizer;
-    private SelectionSynchronizer selectionSynchronizer;
+    private transient AdjustmentSynchronizer adjustmentSynchronizer;
+    private transient SelectionSynchronizer selectionSynchronizer;
     private NodeListPopupMenu popupMenu;
 
     protected JScrollPane embeddInScrollPane(JTable table) {
@@ -89,8 +89,8 @@ public class NodeListViewer extends JPanel {
     protected TableModelListener newReversedChangeListener(final JTable table, final NodeListTableColumnModel columnModel) {
         return new TableModelListener() {
             private Boolean reversed = null;
-            final String nonReversedText = tr("Nodes") + (table.getFont().canDisplay('\u25bc') ? " \u25bc" : " (1-n)");
-            final String reversedText = tr("Nodes") + (table.getFont().canDisplay('\u25b2') ? " \u25b2" : " (n-1)");
+            private final String nonReversedText = tr("Nodes") + (table.getFont().canDisplay('\u25bc') ? " \u25bc" : " (1-n)");
+            private final String reversedText = tr("Nodes") + (table.getFont().canDisplay('\u25b2') ? " \u25b2" : " (n-1)");
 
             @Override
             public void tableChanged(TableModelEvent e) {
@@ -214,8 +214,11 @@ public class NodeListViewer extends JPanel {
     }
 
     static class ZoomToNodeAction extends AbstractAction {
-        private PrimitiveId primitiveId;
+        private transient PrimitiveId primitiveId;
 
+        /**
+         * Constructs a new {@code ZoomToNodeAction}.
+         */
         public ZoomToNodeAction() {
             putValue(NAME, tr("Zoom to node"));
             putValue(SHORT_DESCRIPTION, tr("Zoom to this node in the current data layer"));
@@ -257,8 +260,11 @@ public class NodeListViewer extends JPanel {
     }
 
     static class ShowHistoryAction extends AbstractAction {
-        private PrimitiveId primitiveId;
+        private transient PrimitiveId primitiveId;
 
+        /**
+         * Constructs a new {@code ShowHistoryAction}.
+         */
         public ShowHistoryAction() {
             putValue(NAME, tr("Show history"));
             putValue(SHORT_DESCRIPTION, tr("Open a history browser with the history of this node"));
diff --git a/src/org/openstreetmap/josm/gui/history/RelationMemberListTableCellRenderer.java b/src/org/openstreetmap/josm/gui/history/RelationMemberListTableCellRenderer.java
index 9e40231..8e15971 100644
--- a/src/org/openstreetmap/josm/gui/history/RelationMemberListTableCellRenderer.java
+++ b/src/org/openstreetmap/josm/gui/history/RelationMemberListTableCellRenderer.java
@@ -30,7 +30,7 @@ public class RelationMemberListTableCellRenderer extends JLabel implements Table
     public static final Color BGCOLOR_IN_OPPOSITE = new Color(255,234,213);
     public static final Color BGCOLOR_SELECTED = new Color(143,170,255);
 
-    private Map<OsmPrimitiveType, ImageIcon> icons;
+    private transient Map<OsmPrimitiveType, ImageIcon> icons;
 
     /**
      * Constructs a new {@code RelationMemberListTableCellRenderer}.
diff --git a/src/org/openstreetmap/josm/gui/history/TwoColumnDiff.java b/src/org/openstreetmap/josm/gui/history/TwoColumnDiff.java
index f35e1fa..9e15787 100644
--- a/src/org/openstreetmap/josm/gui/history/TwoColumnDiff.java
+++ b/src/org/openstreetmap/josm/gui/history/TwoColumnDiff.java
@@ -54,8 +54,8 @@ class TwoColumnDiff {
 
     public List<Item> referenceDiff;
     public List<Item> currentDiff;
-    Object[] reference;
-    Object[] current;
+    private Object[] reference;
+    private Object[] current;
     boolean referenceReversed = false;
 
     public TwoColumnDiff(Object[] reference, Object[] current) {
@@ -108,7 +108,7 @@ class TwoColumnDiff {
                 } else if(inserted > 0) {
                     referenceDiff.add(new Item(DiffItemType.EMPTY, null));
                     currentDiff.add(new Item(DiffItemType.INSERTED, b[ib++]));
-                } else if(deleted > 0) {
+                } else {
                     referenceDiff.add(new Item(DiffItemType.DELETED, a[ia++]));
                     currentDiff.add(new Item(DiffItemType.EMPTY, null));
                 }
diff --git a/src/org/openstreetmap/josm/gui/history/VersionInfoPanel.java b/src/org/openstreetmap/josm/gui/history/VersionInfoPanel.java
index 21f3019..0c64136 100644
--- a/src/org/openstreetmap/josm/gui/history/VersionInfoPanel.java
+++ b/src/org/openstreetmap/josm/gui/history/VersionInfoPanel.java
@@ -10,8 +10,6 @@ import java.awt.GridBagLayout;
 import java.awt.GridLayout;
 import java.awt.Insets;
 import java.awt.event.ActionEvent;
-import java.io.UnsupportedEncodingException;
-import java.net.URLEncoder;
 import java.text.DateFormat;
 import java.util.Collections;
 import java.util.Observable;
@@ -47,7 +45,7 @@ import org.openstreetmap.josm.tools.date.DateUtils;
  */
 public class VersionInfoPanel extends JPanel implements Observer{
     private PointInTimeType pointInTimeType;
-    private HistoryBrowserModel model;
+    private transient HistoryBrowserModel model;
     private JMultilineLabel lblInfo;
     private UrlLabel lblUser;
     private UrlLabel lblChangeset;
@@ -171,11 +169,10 @@ public class VersionInfoPanel extends JPanel implements Observer{
      *
      * @param model  the model (must not be null)
      * @param pointInTimeType the point in time this panel visualizes (must not be null)
-     * @exception IllegalArgumentException thrown, if model is null
-     * @exception IllegalArgumentException thrown, if pointInTimeType is null
-     *
+     * @throws IllegalArgumentException if model is null
+     * @throws IllegalArgumentException if pointInTimeType is null
      */
-    public VersionInfoPanel(HistoryBrowserModel model, PointInTimeType pointInTimeType) throws IllegalArgumentException {
+    public VersionInfoPanel(HistoryBrowserModel model, PointInTimeType pointInTimeType) {
         CheckParameterUtil.ensureParameterNotNull(pointInTimeType, "pointInTimeType");
         CheckParameterUtil.ensureParameterNotNull(model, "model");
 
@@ -185,8 +182,8 @@ public class VersionInfoPanel extends JPanel implements Observer{
         build();
     }
 
-    protected static String getUserUrl(String username) throws UnsupportedEncodingException {
-        return Main.getBaseUserUrl() + "/" +  URLEncoder.encode(username, "UTF-8").replaceAll("\\+", "%20");
+    protected static String getUserUrl(String username) {
+        return Main.getBaseUserUrl() + "/" +  Utils.encodeUrl(username).replaceAll("\\+", "%20");
     }
 
     @Override
@@ -209,14 +206,9 @@ public class VersionInfoPanel extends JPanel implements Observer{
                 username = user.getName();
             }
             lblUser.setDescription(username);
-            try {
-                if (user != null && user != User.getAnonymous()) {
-                    lblUser.setUrl(getUserUrl(username));
-                } else {
-                    lblUser.setUrl(null);
-                }
-            } catch(UnsupportedEncodingException e) {
-                Main.error(e);
+            if (user != null && user != User.getAnonymous()) {
+                lblUser.setUrl(getUserUrl(username));
+            } else {
                 lblUser.setUrl(null);
             }
         } else {
@@ -226,12 +218,7 @@ public class VersionInfoPanel extends JPanel implements Observer{
                 lblUser.setUrl(null);
             } else {
                 lblUser.setDescription(username);
-                try {
-                    lblUser.setUrl(getUserUrl(username));
-                } catch(UnsupportedEncodingException e) {
-                    Main.error(e);
-                    lblUser.setUrl(null);
-                }
+                lblUser.setUrl(getUserUrl(username));
             }
             lblChangeset.setDescription(tr("none"));
             lblChangeset.setUrl(null);
diff --git a/src/org/openstreetmap/josm/gui/history/VersionTable.java b/src/org/openstreetmap/josm/gui/history/VersionTable.java
index 3e302e8..20fee88 100644
--- a/src/org/openstreetmap/josm/gui/history/VersionTable.java
+++ b/src/org/openstreetmap/josm/gui/history/VersionTable.java
@@ -45,7 +45,7 @@ import org.openstreetmap.josm.tools.OpenBrowser;
  */
 public class VersionTable extends JTable implements Observer{
     private VersionTablePopupMenu popupMenu;
-    private final HistoryBrowserModel model;
+    private final transient HistoryBrowserModel model;
 
     protected void build() {
         getTableHeader().setFont(getTableHeader().getFont().deriveFont(9f));
@@ -147,8 +147,11 @@ public class VersionTable extends JTable implements Observer{
     }
 
     static class ChangesetInfoAction extends AbstractInfoAction {
-        private HistoryOsmPrimitive primitive;
+        private transient HistoryOsmPrimitive primitive;
 
+        /**
+         * Constructs a new {@code ChangesetInfoAction}.
+         */
         public ChangesetInfoAction() {
             super(true);
             putValue(NAME, tr("Changeset info"));
@@ -177,8 +180,11 @@ public class VersionTable extends JTable implements Observer{
     }
 
     static class UserInfoAction extends AbstractInfoAction {
-        private HistoryOsmPrimitive primitive;
+        private transient HistoryOsmPrimitive primitive;
 
+        /**
+         * Constructs a new {@code UserInfoAction}.
+         */
         public UserInfoAction() {
             super(true);
             putValue(NAME, tr("User info"));
diff --git a/src/org/openstreetmap/josm/gui/io/ActionFlagsTableCell.java b/src/org/openstreetmap/josm/gui/io/ActionFlagsTableCell.java
index 1633ba6..4472c4e 100644
--- a/src/org/openstreetmap/josm/gui/io/ActionFlagsTableCell.java
+++ b/src/org/openstreetmap/josm/gui/io/ActionFlagsTableCell.java
@@ -37,9 +37,9 @@ import org.openstreetmap.josm.tools.GBC;
  */
 class ActionFlagsTableCell extends JPanel implements TableCellRenderer, TableCellEditor {
     private final JCheckBox[] checkBoxes = new JCheckBox[2];
-    private final CellEditorSupport cellEditorSupport = new CellEditorSupport(this);
+    private final transient CellEditorSupport cellEditorSupport = new CellEditorSupport(this);
 
-    private ActionListener al = new ActionListener() {
+    private transient ActionListener al = new ActionListener() {
         @Override
         public void actionPerformed(ActionEvent e) {
             cellEditorSupport.fireEditingStopped();
diff --git a/src/org/openstreetmap/josm/gui/io/BasicUploadSettingsPanel.java b/src/org/openstreetmap/josm/gui/io/BasicUploadSettingsPanel.java
index dc29bd1..b4852ed 100644
--- a/src/org/openstreetmap/josm/gui/io/BasicUploadSettingsPanel.java
+++ b/src/org/openstreetmap/josm/gui/io/BasicUploadSettingsPanel.java
@@ -48,8 +48,8 @@ public class BasicUploadSettingsPanel extends JPanel {
     /** the panel with a summary of the upload parameters */
     private final UploadParameterSummaryPanel pnlUploadParameterSummary = new UploadParameterSummaryPanel();
     /** the changeset comment model */
-    private final ChangesetCommentModel changesetCommentModel;
-    private final ChangesetCommentModel changesetSourceModel;
+    private final transient ChangesetCommentModel changesetCommentModel;
+    private final transient ChangesetCommentModel changesetSourceModel;
 
     protected JPanel buildUploadCommentPanel() {
         JPanel pnl = new JPanel(new GridBagLayout());
@@ -92,7 +92,7 @@ public class BasicUploadSettingsPanel extends JPanel {
         return pnl;
     }
 
-    static public List<String> getDefaultSources() {
+    public static List<String> getDefaultSources() {
         return Arrays.asList("knowledge", "survey", "Bing");
     }
 
@@ -108,7 +108,7 @@ public class BasicUploadSettingsPanel extends JPanel {
      *
      * @param changesetCommentModel the model for the changeset comment. Must not be null
      * @param changesetSourceModel the model for the changeset source. Must not be null.
-     * @throws IllegalArgumentException thrown if {@code changesetCommentModel} is null
+     * @throws IllegalArgumentException if {@code changesetCommentModel} is null
      */
     public BasicUploadSettingsPanel(ChangesetCommentModel changesetCommentModel, ChangesetCommentModel changesetSourceModel) {
         CheckParameterUtil.ensureParameterNotNull(changesetCommentModel, "changesetCommentModel");
@@ -179,8 +179,8 @@ public class BasicUploadSettingsPanel extends JPanel {
      */
     static class CommentModelListener extends FocusAdapter implements ActionListener {
 
-        final HistoryComboBox source;
-        final ChangesetCommentModel destination;
+        private final HistoryComboBox source;
+        private final ChangesetCommentModel destination;
 
         CommentModelListener(HistoryComboBox source, ChangesetCommentModel destination) {
             this.source = source;
diff --git a/src/org/openstreetmap/josm/gui/io/ChangesetManagementPanel.java b/src/org/openstreetmap/josm/gui/io/ChangesetManagementPanel.java
index 9a27b6a..b4fab6a 100644
--- a/src/org/openstreetmap/josm/gui/io/ChangesetManagementPanel.java
+++ b/src/org/openstreetmap/josm/gui/io/ChangesetManagementPanel.java
@@ -55,7 +55,7 @@ public class ChangesetManagementPanel extends JPanel implements ListDataListener
     private JosmComboBox<Changeset> cbOpenChangesets;
     private JCheckBox cbCloseAfterUpload;
     private OpenChangesetComboBoxModel model;
-    private ChangesetCommentModel changesetCommentModel;
+    private transient ChangesetCommentModel changesetCommentModel;
 
     /**
      * builds the GUI
@@ -161,7 +161,7 @@ public class ChangesetManagementPanel extends JPanel implements ListDataListener
      * Creates a new panel
      *
      * @param changesetCommentModel the changeset comment model. Must not be null.
-     * @throws IllegalArgumentException thrown if {@code changesetCommentModel} is null
+     * @throws IllegalArgumentException if {@code changesetCommentModel} is null
      */
     public ChangesetManagementPanel(ChangesetCommentModel changesetCommentModel) {
         CheckParameterUtil.ensureParameterNotNull(changesetCommentModel, "changesetCommentModel");
diff --git a/src/org/openstreetmap/josm/gui/io/CredentialDialog.java b/src/org/openstreetmap/josm/gui/io/CredentialDialog.java
index 3af5758..a0ff851 100644
--- a/src/org/openstreetmap/josm/gui/io/CredentialDialog.java
+++ b/src/org/openstreetmap/josm/gui/io/CredentialDialog.java
@@ -63,7 +63,7 @@ public class CredentialDialog extends JDialog {
 
     private boolean canceled;
     protected CredentialPanel pnlCredentials;
-    String saveUsernameAndPasswordCheckboxText;
+    private String saveUsernameAndPasswordCheckboxText;
 
     public boolean isCanceled() {
         return canceled;
@@ -282,7 +282,7 @@ public class CredentialDialog extends JDialog {
 
     private static class OtherHostCredentialsPanel extends CredentialPanel {
 
-        String host;
+        private String host;
 
         @Override
         protected void build() {
diff --git a/src/org/openstreetmap/josm/gui/io/DownloadPrimitivesTask.java b/src/org/openstreetmap/josm/gui/io/DownloadPrimitivesTask.java
index 75c7443..f955e3b 100644
--- a/src/org/openstreetmap/josm/gui/io/DownloadPrimitivesTask.java
+++ b/src/org/openstreetmap/josm/gui/io/DownloadPrimitivesTask.java
@@ -53,9 +53,9 @@ public class DownloadPrimitivesTask extends PleaseWaitRunnable {
      * the empty collection if null.
      * @param fullRelation true if a full download is required, i.e.,
      * a download including the immediate children of a relation.
-     * @throws IllegalArgumentException thrown if layer is null.
+     * @throws IllegalArgumentException if layer is null.
      */
-    public DownloadPrimitivesTask(OsmDataLayer layer, List<PrimitiveId> ids, boolean fullRelation) throws IllegalArgumentException {
+    public DownloadPrimitivesTask(OsmDataLayer layer, List<PrimitiveId> ids, boolean fullRelation) {
         this(layer, ids, fullRelation, null);
     }
 
@@ -68,10 +68,10 @@ public class DownloadPrimitivesTask extends PleaseWaitRunnable {
      * @param fullRelation true if a full download is required, i.e.,
      *     a download including the immediate children of a relation.
      * @param progressMonitor ProgressMonitor to use or null to create a new one.
-     * @throws IllegalArgumentException thrown if layer is null.
+     * @throws IllegalArgumentException if layer is null.
      */
     public DownloadPrimitivesTask(OsmDataLayer layer, List<PrimitiveId> ids, boolean fullRelation,
-            ProgressMonitor progressMonitor) throws IllegalArgumentException {
+            ProgressMonitor progressMonitor) {
         super(tr("Download objects"), progressMonitor, false /* don't ignore exception */);
         ensureParameterNotNull(layer, "layer");
         this.ids = ids;
diff --git a/src/org/openstreetmap/josm/gui/io/DownloadPrimitivesWithReferrersTask.java b/src/org/openstreetmap/josm/gui/io/DownloadPrimitivesWithReferrersTask.java
index 167a38f..3083196 100644
--- a/src/org/openstreetmap/josm/gui/io/DownloadPrimitivesWithReferrersTask.java
+++ b/src/org/openstreetmap/josm/gui/io/DownloadPrimitivesWithReferrersTask.java
@@ -189,7 +189,7 @@ public class DownloadPrimitivesWithReferrersTask extends PleaseWaitRunnable {
             if(canceled)
                 return null;
         }
-        ArrayList<PrimitiveId> downloaded = new ArrayList<>(ids);
+        List<PrimitiveId> downloaded = new ArrayList<>(ids);
         downloaded.removeAll(mainTask.getMissingPrimitives());
         return downloaded;
     }
diff --git a/src/org/openstreetmap/josm/gui/io/LayerNameAndFilePathTableCell.java b/src/org/openstreetmap/josm/gui/io/LayerNameAndFilePathTableCell.java
index d793030..8d6e721 100644
--- a/src/org/openstreetmap/josm/gui/io/LayerNameAndFilePathTableCell.java
+++ b/src/org/openstreetmap/josm/gui/io/LayerNameAndFilePathTableCell.java
@@ -41,7 +41,7 @@ class LayerNameAndFilePathTableCell extends JPanel implements TableCellRenderer,
 
     private static final GBC defaultCellStyle = GBC.eol().fill(GBC.HORIZONTAL).insets(2, 0, 2, 0);
 
-    private final CellEditorSupport cellEditorSupport = new CellEditorSupport(this);
+    private final transient CellEditorSupport cellEditorSupport = new CellEditorSupport(this);
     private File value;
 
     /** constructor that sets the default on each element **/
diff --git a/src/org/openstreetmap/josm/gui/io/OpenChangesetComboBoxModel.java b/src/org/openstreetmap/josm/gui/io/OpenChangesetComboBoxModel.java
index 441bbc2..7ae6bf4 100644
--- a/src/org/openstreetmap/josm/gui/io/OpenChangesetComboBoxModel.java
+++ b/src/org/openstreetmap/josm/gui/io/OpenChangesetComboBoxModel.java
@@ -17,8 +17,8 @@ import org.openstreetmap.josm.data.osm.ChangesetCacheListener;
  *
  */
 public class OpenChangesetComboBoxModel extends DefaultComboBoxModel<Changeset> implements ChangesetCacheListener {
-    private List<Changeset> changesets;
-    private Changeset selectedChangeset = null;
+    private transient List<Changeset> changesets;
+    private transient Changeset selectedChangeset = null;
 
     protected Changeset getChangesetById(long id) {
         for (Changeset cs : changesets) {
diff --git a/src/org/openstreetmap/josm/gui/io/RecentlyOpenedFilesMenu.java b/src/org/openstreetmap/josm/gui/io/RecentlyOpenedFilesMenu.java
index d5943b8..8736bba 100644
--- a/src/org/openstreetmap/josm/gui/io/RecentlyOpenedFilesMenu.java
+++ b/src/org/openstreetmap/josm/gui/io/RecentlyOpenedFilesMenu.java
@@ -24,7 +24,7 @@ import org.openstreetmap.josm.tools.ImageProvider;
  * Show list of recently opened files
  */
 public class RecentlyOpenedFilesMenu extends JMenu {
-    ClearAction clearAction;
+    private ClearAction clearAction;
 
     public RecentlyOpenedFilesMenu() {
         super(tr("Open Recent"));
diff --git a/src/org/openstreetmap/josm/gui/io/SaveLayerInfo.java b/src/org/openstreetmap/josm/gui/io/SaveLayerInfo.java
index b1d22d7..9934d88 100644
--- a/src/org/openstreetmap/josm/gui/io/SaveLayerInfo.java
+++ b/src/org/openstreetmap/josm/gui/io/SaveLayerInfo.java
@@ -25,7 +25,7 @@ class SaveLayerInfo implements Comparable<SaveLayerInfo> {
     /**
      * Constructs a new {@code SaveLayerInfo}.
      * @param layer the layer. Must not be null.
-     * @throws IllegalArgumentException thrown if layer is null
+     * @throws IllegalArgumentException if layer is null
      */
     public SaveLayerInfo(AbstractModifiableLayer layer) {
         CheckParameterUtil.ensureParameterNotNull(layer, "layer");
diff --git a/src/org/openstreetmap/josm/gui/io/SaveLayerTask.java b/src/org/openstreetmap/josm/gui/io/SaveLayerTask.java
index f67ded6..2b824d8 100644
--- a/src/org/openstreetmap/josm/gui/io/SaveLayerTask.java
+++ b/src/org/openstreetmap/josm/gui/io/SaveLayerTask.java
@@ -33,7 +33,7 @@ public class SaveLayerTask extends AbstractIOTask {
      *
      * @param layerInfo information about the layer to be saved to save. Must not be null.
      * @param monitor the monitor. Set to {@link NullProgressMonitor#INSTANCE} if null
-     * @throws IllegalArgumentException thrown if layer is null
+     * @throws IllegalArgumentException if layer is null
      */
     protected SaveLayerTask(SaveLayerInfo layerInfo, ProgressMonitor monitor) {
         CheckParameterUtil.ensureParameterNotNull(layerInfo, "layerInfo");
diff --git a/src/org/openstreetmap/josm/gui/io/SaveLayersDialog.java b/src/org/openstreetmap/josm/gui/io/SaveLayersDialog.java
index 627e980..cbc86b5 100644
--- a/src/org/openstreetmap/josm/gui/io/SaveLayersDialog.java
+++ b/src/org/openstreetmap/josm/gui/io/SaveLayersDialog.java
@@ -67,7 +67,7 @@ public class SaveLayersDialog extends JDialog implements TableModelListener {
     private SaveAndProceedAction saveAndProceedAction;
     private DiscardAndProceedAction discardAndProceedAction;
     private CancelAction cancelAction;
-    private SaveAndUploadTask saveAndUploadTask;
+    private transient SaveAndUploadTask saveAndUploadTask;
 
     /**
      * builds the GUI
@@ -176,7 +176,7 @@ public class SaveLayersDialog extends JDialog implements TableModelListener {
             lstLayers = new JList<>();
             lstLayers.setCellRenderer(
                     new ListCellRenderer<SaveLayerInfo>() {
-                        final DefaultListCellRenderer def = new DefaultListCellRenderer();
+                        private final DefaultListCellRenderer def = new DefaultListCellRenderer();
                         @Override
                         public Component getListCellRendererComponent(JList<? extends SaveLayerInfo> list, SaveLayerInfo info, int index,
                                 boolean isSelected, boolean cellHasFocus) {
@@ -367,10 +367,10 @@ public class SaveLayersDialog extends JDialog implements TableModelListener {
     final class SaveAndProceedAction extends AbstractAction implements PropertyChangeListener {
         private static final int is = 24; // icon size
         private static final String BASE_ICON = "BASE_ICON";
-        private final Image save = ImageProvider.get("save").getImage();
-        private final Image upld = ImageProvider.get("upload").getImage();
-        private final Image saveDis = new BufferedImage(is, is, BufferedImage.TYPE_4BYTE_ABGR);
-        private final Image upldDis = new BufferedImage(is, is, BufferedImage.TYPE_4BYTE_ABGR);
+        private final transient Image save = ImageProvider.get("save").getImage();
+        private final transient Image upld = ImageProvider.get("upload").getImage();
+        private final transient Image saveDis = new BufferedImage(is, is, BufferedImage.TYPE_4BYTE_ABGR);
+        private final transient Image upldDis = new BufferedImage(is, is, BufferedImage.TYPE_4BYTE_ABGR);
 
         public SaveAndProceedAction() {
             // get disabled versions of icons
diff --git a/src/org/openstreetmap/josm/gui/io/SaveLayersModel.java b/src/org/openstreetmap/josm/gui/io/SaveLayersModel.java
index 55865f9..1f2dc0d 100644
--- a/src/org/openstreetmap/josm/gui/io/SaveLayersModel.java
+++ b/src/org/openstreetmap/josm/gui/io/SaveLayersModel.java
@@ -21,7 +21,7 @@ public class SaveLayersModel extends DefaultTableModel {
         UPLOADING_AND_SAVING
     }
 
-    private List<SaveLayerInfo> layerInfo;
+    private transient List<SaveLayerInfo> layerInfo;
     private Mode mode;
     private PropertyChangeSupport support;
 
diff --git a/src/org/openstreetmap/josm/gui/io/TagSettingsPanel.java b/src/org/openstreetmap/josm/gui/io/TagSettingsPanel.java
index 27dd94e..16047fa 100644
--- a/src/org/openstreetmap/josm/gui/io/TagSettingsPanel.java
+++ b/src/org/openstreetmap/josm/gui/io/TagSettingsPanel.java
@@ -23,10 +23,10 @@ public class TagSettingsPanel extends JPanel implements TableModelListener {
     /** checkbox for selecting whether an atomic upload is to be used  */
     private final TagEditorPanel pnlTagEditor = new TagEditorPanel(null);
     /** the model for the changeset comment */
-    private final ChangesetCommentModel changesetCommentModel;
-    private final ChangesetCommentModel changesetSourceModel;
+    private final transient ChangesetCommentModel changesetCommentModel;
+    private final transient ChangesetCommentModel changesetSourceModel;
     /** tags that applied to uploaded changesets by default*/
-    private final Map<String, String> defaultTags = new HashMap<>();
+    private final transient Map<String, String> defaultTags = new HashMap<>();
 
     protected void build() {
         setLayout(new BorderLayout());
@@ -38,9 +38,9 @@ public class TagSettingsPanel extends JPanel implements TableModelListener {
      *
      * @param changesetCommentModel the changeset comment model. Must not be null.
      * @param changesetSourceModel the changeset source model. Must not be null.
-     * @throws IllegalArgumentException thrown if {@code changesetCommentModel} is null
+     * @throws IllegalArgumentException if {@code changesetCommentModel} is null
      */
-    public TagSettingsPanel(ChangesetCommentModel changesetCommentModel, ChangesetCommentModel changesetSourceModel) throws IllegalArgumentException{
+    public TagSettingsPanel(ChangesetCommentModel changesetCommentModel, ChangesetCommentModel changesetSourceModel) {
         CheckParameterUtil.ensureParameterNotNull(changesetCommentModel, "changesetCommentModel");
         CheckParameterUtil.ensureParameterNotNull(changesetSourceModel, "changesetSourceModel");
         this.changesetCommentModel = changesetCommentModel;
diff --git a/src/org/openstreetmap/josm/gui/io/UpdatePrimitivesTask.java b/src/org/openstreetmap/josm/gui/io/UpdatePrimitivesTask.java
index 9a9ef6f..7b16c76 100644
--- a/src/org/openstreetmap/josm/gui/io/UpdatePrimitivesTask.java
+++ b/src/org/openstreetmap/josm/gui/io/UpdatePrimitivesTask.java
@@ -44,9 +44,9 @@ public class UpdatePrimitivesTask extends PleaseWaitRunnable {
      * @param layer the layer in which primitives are updated. Must not be null.
      * @param toUpdate a collection of primitives to update from the server. Set to
      * the empty collection if null.
-     * @throws IllegalArgumentException thrown if layer is null.
+     * @throws IllegalArgumentException if layer is null.
      */
-    public UpdatePrimitivesTask(OsmDataLayer layer, Collection<? extends OsmPrimitive> toUpdate) throws IllegalArgumentException{
+    public UpdatePrimitivesTask(OsmDataLayer layer, Collection<? extends OsmPrimitive> toUpdate) {
         super(tr("Update objects"), false /* don't ignore exception */);
         ensureParameterNotNull(layer, "layer");
         if (toUpdate == null) {
diff --git a/src/org/openstreetmap/josm/gui/io/UploadDialog.java b/src/org/openstreetmap/josm/gui/io/UploadDialog.java
index e4cf835..82062c5 100644
--- a/src/org/openstreetmap/josm/gui/io/UploadDialog.java
+++ b/src/org/openstreetmap/josm/gui/io/UploadDialog.java
@@ -10,7 +10,6 @@ import java.awt.Component;
 import java.awt.Dimension;
 import java.awt.FlowLayout;
 import java.awt.GridBagLayout;
-import java.awt.Image;
 import java.awt.event.ActionEvent;
 import java.awt.event.KeyEvent;
 import java.awt.event.WindowAdapter;
@@ -27,7 +26,6 @@ import java.util.Map.Entry;
 import javax.swing.AbstractAction;
 import javax.swing.BorderFactory;
 import javax.swing.Icon;
-import javax.swing.ImageIcon;
 import javax.swing.JButton;
 import javax.swing.JComponent;
 import javax.swing.JOptionPane;
@@ -49,7 +47,9 @@ import org.openstreetmap.josm.gui.help.ContextSensitiveHelpAction;
 import org.openstreetmap.josm.gui.help.HelpUtil;
 import org.openstreetmap.josm.io.OsmApi;
 import org.openstreetmap.josm.tools.GBC;
+import org.openstreetmap.josm.tools.ImageOverlay;
 import org.openstreetmap.josm.tools.ImageProvider;
+import org.openstreetmap.josm.tools.ImageProvider.ImageSizes;
 import org.openstreetmap.josm.tools.InputMapUtils;
 import org.openstreetmap.josm.tools.Utils;
 import org.openstreetmap.josm.tools.WindowGeometry;
@@ -97,8 +97,8 @@ public class UploadDialog extends AbstractUploadDialog implements PropertyChange
     private JButton btnUpload;
 
     /** the changeset comment model keeping the state of the changeset comment */
-    private final ChangesetCommentModel changesetCommentModel = new ChangesetCommentModel();
-    private final ChangesetCommentModel changesetSourceModel = new ChangesetCommentModel();
+    private final transient ChangesetCommentModel changesetCommentModel = new ChangesetCommentModel();
+    private final transient ChangesetCommentModel changesetSourceModel = new ChangesetCommentModel();
 
     /**
      * builds the content panel for the upload dialog
@@ -425,12 +425,10 @@ public class UploadDialog extends AbstractUploadDialog implements PropertyChange
                     new String[] {tr("Revise"), tr("Cancel"), tr("Continue as is")});
             dlg.setContent("<html>" + message + "</html>");
             dlg.setButtonIcons(new Icon[] {
-                    ImageProvider.get("ok"),
-                    ImageProvider.get("cancel"),
-                    ImageProvider.overlay(
-                            ImageProvider.get("upload"),
-                            new ImageIcon(ImageProvider.get("warning-small").getImage().getScaledInstance(10 , 10, Image.SCALE_SMOOTH)),
-                            ImageProvider.OverlayPosition.SOUTHEAST)});
+                    new ImageProvider("ok").setMaxSize(ImageSizes.LARGEICON).get(),
+                    new ImageProvider("cancel").setMaxSize(ImageSizes.LARGEICON).get(),
+                    new ImageProvider("upload").setMaxSize(ImageSizes.LARGEICON).addOverlay(
+                            new ImageOverlay(new ImageProvider("warning-small"), 0.5,0.5,1.0,1.0)).get()});
             dlg.setToolTipTexts(new String[] {
                     tr("Return to the previous dialog to enter a more descriptive comment"),
                     tr("Cancel and return to the previous dialog"),
diff --git a/src/org/openstreetmap/josm/gui/io/UploadLayerTask.java b/src/org/openstreetmap/josm/gui/io/UploadLayerTask.java
index e71ff08..a7ec4ac 100644
--- a/src/org/openstreetmap/josm/gui/io/UploadLayerTask.java
+++ b/src/org/openstreetmap/josm/gui/io/UploadLayerTask.java
@@ -55,8 +55,8 @@ public class UploadLayerTask extends AbstractIOTask implements Runnable {
      * @param layer the layer. Must not be null.
      * @param monitor  a progress monitor. If monitor is null, uses {@link NullProgressMonitor#INSTANCE}
      * @param changeset the changeset to be used
-     * @throws IllegalArgumentException thrown, if layer is null
-     * @throws IllegalArgumentException thrown if strategy is null
+     * @throws IllegalArgumentException if layer is null
+     * @throws IllegalArgumentException if strategy is null
      */
     public UploadLayerTask(UploadStrategySpecification strategy, OsmDataLayer layer, ProgressMonitor monitor, Changeset changeset) {
         CheckParameterUtil.ensureParameterNotNull(layer, "layer");
@@ -85,7 +85,7 @@ public class UploadLayerTask extends AbstractIOTask implements Runnable {
      *
      * @param e the exception throw by the API
      * @param monitor a progress monitor
-     * @throws OsmTransferException  thrown if we can't recover from the exception
+     * @throws OsmTransferException if we can't recover from the exception
      */
     protected void recoverFromGoneOnServer(OsmApiPrimitiveGoneException e, ProgressMonitor monitor) throws OsmTransferException{
         if (!e.isKnownPrimitive()) throw e;
diff --git a/src/org/openstreetmap/josm/gui/io/UploadParameterSummaryPanel.java b/src/org/openstreetmap/josm/gui/io/UploadParameterSummaryPanel.java
index 8e69f01..55bf98a 100644
--- a/src/org/openstreetmap/josm/gui/io/UploadParameterSummaryPanel.java
+++ b/src/org/openstreetmap/josm/gui/io/UploadParameterSummaryPanel.java
@@ -21,14 +21,14 @@ import org.openstreetmap.josm.tools.ImageProvider;
 
 // FIXME this class should extend HtmlPanel instead (duplicated code in here)
 public class UploadParameterSummaryPanel extends JPanel implements HyperlinkListener, PropertyChangeListener{
-    private UploadStrategySpecification spec = new UploadStrategySpecification();
+    private transient UploadStrategySpecification spec = new UploadStrategySpecification();
     private int numObjects;
     private JMultilineLabel jepMessage;
     private JLabel lblWarning;
 
-    private Changeset selectedChangeset;
+    private transient Changeset selectedChangeset;
     private boolean closeChangesetAfterNextUpload;
-    private ConfigurationParameterRequestHandler configHandler;
+    private transient ConfigurationParameterRequestHandler configHandler;
 
     protected String buildChangesetSummary() {
         StringBuilder msg = new StringBuilder();
diff --git a/src/org/openstreetmap/josm/gui/io/UploadPrimitivesTask.java b/src/org/openstreetmap/josm/gui/io/UploadPrimitivesTask.java
index 0493d7d..1e89b0e 100644
--- a/src/org/openstreetmap/josm/gui/io/UploadPrimitivesTask.java
+++ b/src/org/openstreetmap/josm/gui/io/UploadPrimitivesTask.java
@@ -59,10 +59,10 @@ public class UploadPrimitivesTask extends AbstractUploadTask {
      * @param toUpload the collection of primitives to upload. Set to the empty collection if null.
      * @param changeset the changeset to use for uploading. Must not be null. changeset.getId()
      * can be 0 in which case the upload task creates a new changeset
-     * @throws IllegalArgumentException thrown if layer is null
-     * @throws IllegalArgumentException thrown if toUpload is null
-     * @throws IllegalArgumentException thrown if strategy is null
-     * @throws IllegalArgumentException thrown if changeset is null
+     * @throws IllegalArgumentException if layer is null
+     * @throws IllegalArgumentException if toUpload is null
+     * @throws IllegalArgumentException if strategy is null
+     * @throws IllegalArgumentException if changeset is null
      */
     public UploadPrimitivesTask(UploadStrategySpecification strategy, OsmDataLayer layer, APIDataSet toUpload, Changeset changeset) {
         super(tr("Uploading data for layer ''{0}''", layer.getName()),false /* don't ignore exceptions */);
@@ -183,7 +183,7 @@ public class UploadPrimitivesTask extends AbstractUploadTask {
      *
      * @param e the exception throw by the API
      * @param monitor a progress monitor
-     * @throws OsmTransferException  thrown if we can't recover from the exception
+     * @throws OsmTransferException if we can't recover from the exception
      */
     protected void recoverFromGoneOnServer(OsmApiPrimitiveGoneException e, ProgressMonitor monitor) throws OsmTransferException{
         if (!e.isKnownPrimitive()) throw e;
diff --git a/src/org/openstreetmap/josm/gui/io/UploadSelectionDialog.java b/src/org/openstreetmap/josm/gui/io/UploadSelectionDialog.java
index 93770ba..76c15e9 100644
--- a/src/org/openstreetmap/josm/gui/io/UploadSelectionDialog.java
+++ b/src/org/openstreetmap/josm/gui/io/UploadSelectionDialog.java
@@ -193,7 +193,7 @@ public class UploadSelectionDialog extends JDialog {
     }
 
     static class OsmPrimitiveListModel extends AbstractListModel<OsmPrimitive> {
-        private List<OsmPrimitive> data;
+        private transient List<OsmPrimitive> data;
 
         public OsmPrimitiveListModel() {
         }
diff --git a/src/org/openstreetmap/josm/gui/io/UploadStrategySelectionPanel.java b/src/org/openstreetmap/josm/gui/io/UploadStrategySelectionPanel.java
index bc9dead..b35dad7 100644
--- a/src/org/openstreetmap/josm/gui/io/UploadStrategySelectionPanel.java
+++ b/src/org/openstreetmap/josm/gui/io/UploadStrategySelectionPanel.java
@@ -19,6 +19,7 @@ import java.beans.PropertyChangeEvent;
 import java.beans.PropertyChangeListener;
 import java.util.HashMap;
 import java.util.Map;
+import java.util.Map.Entry;
 
 import javax.swing.BorderFactory;
 import javax.swing.ButtonGroup;
@@ -50,9 +51,9 @@ public class UploadStrategySelectionPanel extends JPanel implements PropertyChan
 
     private static final Color BG_COLOR_ERROR = new Color(255,224,224);
 
-    private Map<UploadStrategy, JRadioButton> rbStrategy;
-    private Map<UploadStrategy, JLabel> lblNumRequests;
-    private Map<UploadStrategy, JMultilineLabel> lblStrategies;
+    private transient Map<UploadStrategy, JRadioButton> rbStrategy;
+    private transient Map<UploadStrategy, JLabel> lblNumRequests;
+    private transient Map<UploadStrategy, JMultilineLabel> lblStrategies;
     private JosmTextField tfChunkSize;
     private JPanel pnlMultiChangesetPolicyPanel;
     private JRadioButton rbFillOneChangeset;
@@ -274,9 +275,9 @@ public class UploadStrategySelectionPanel extends JPanel implements PropertyChan
 
     protected UploadStrategy getUploadStrategy() {
         UploadStrategy strategy = null;
-        for (UploadStrategy s: rbStrategy.keySet()) {
-            if (rbStrategy.get(s).isSelected()) {
-                strategy = s;
+        for (Entry<UploadStrategy, JRadioButton> e : rbStrategy.entrySet()) {
+            if (e.getValue().isSelected()) {
+                strategy = e.getKey();
                 break;
             }
         }
diff --git a/src/org/openstreetmap/josm/gui/io/UploadedObjectsSummaryPanel.java b/src/org/openstreetmap/josm/gui/io/UploadedObjectsSummaryPanel.java
index 0dc2b29..a3d73aa 100644
--- a/src/org/openstreetmap/josm/gui/io/UploadedObjectsSummaryPanel.java
+++ b/src/org/openstreetmap/josm/gui/io/UploadedObjectsSummaryPanel.java
@@ -154,7 +154,7 @@ public class UploadedObjectsSummaryPanel extends JPanel {
      *
      */
     static class PrimitiveListModel extends AbstractListModel<OsmPrimitive> {
-        private List<OsmPrimitive> primitives;
+        private transient List<OsmPrimitive> primitives;
 
         public PrimitiveListModel() {
             primitives = new ArrayList<>();
diff --git a/src/org/openstreetmap/josm/gui/layer/CustomizeColor.java b/src/org/openstreetmap/josm/gui/layer/CustomizeColor.java
index 7d9dcb6..b2e0e43 100644
--- a/src/org/openstreetmap/josm/gui/layer/CustomizeColor.java
+++ b/src/org/openstreetmap/josm/gui/layer/CustomizeColor.java
@@ -22,7 +22,7 @@ import org.openstreetmap.josm.gui.layer.Layer.MultiLayerAction;
 import org.openstreetmap.josm.tools.ImageProvider;
 
 public class CustomizeColor extends AbstractAction implements LayerAction, MultiLayerAction {
-    List<Layer> layers;
+    private transient List<Layer> layers;
 
     public CustomizeColor(List<Layer> l) {
         this();
diff --git a/src/org/openstreetmap/josm/gui/layer/ImageryLayer.java b/src/org/openstreetmap/josm/gui/layer/ImageryLayer.java
index 6176e0a..a543a39 100644
--- a/src/org/openstreetmap/josm/gui/layer/ImageryLayer.java
+++ b/src/org/openstreetmap/josm/gui/layer/ImageryLayer.java
@@ -158,7 +158,7 @@ public abstract class ImageryLayer extends Layer {
     }
 
     class ApplyOffsetAction extends AbstractAction {
-        private OffsetBookmark b;
+        private transient OffsetBookmark b;
         ApplyOffsetAction(OffsetBookmark b) {
             super(b.name);
             this.b = b;
diff --git a/src/org/openstreetmap/josm/gui/layer/JumpToMarkerActions.java b/src/org/openstreetmap/josm/gui/layer/JumpToMarkerActions.java
index b78e8f1..678a6d7 100644
--- a/src/org/openstreetmap/josm/gui/layer/JumpToMarkerActions.java
+++ b/src/org/openstreetmap/josm/gui/layer/JumpToMarkerActions.java
@@ -43,9 +43,9 @@ public final class JumpToMarkerActions {
 
     private abstract static class JumpToMarker extends AbstractAction implements MultikeyShortcutAction {
 
-        private final Layer layer;
-        private final Shortcut multikeyShortcut;
-        private WeakReference<Layer> lastLayer;
+        private final transient Layer layer;
+        private final transient Shortcut multikeyShortcut;
+        private transient WeakReference<Layer> lastLayer;
 
         public JumpToMarker(JumpToMarkerLayer layer, Shortcut shortcut) {
             this.layer = (Layer) layer;
diff --git a/src/org/openstreetmap/josm/gui/layer/Layer.java b/src/org/openstreetmap/josm/gui/layer/Layer.java
index a2045b9..e0b813f 100644
--- a/src/org/openstreetmap/josm/gui/layer/Layer.java
+++ b/src/org/openstreetmap/josm/gui/layer/Layer.java
@@ -379,7 +379,7 @@ public abstract class Layer implements Destroyable, MapViewPaintable, Projection
      *
      */
     public static class LayerSaveAction extends AbstractAction {
-        private Layer layer;
+        private final transient Layer layer;
         public LayerSaveAction(Layer layer) {
             putValue(SMALL_ICON, ImageProvider.get("save"));
             putValue(SHORT_DESCRIPTION, tr("Save the current data."));
@@ -395,7 +395,7 @@ public abstract class Layer implements Destroyable, MapViewPaintable, Projection
     }
 
     public static class LayerSaveAsAction extends AbstractAction {
-        private Layer layer;
+        private final transient Layer layer;
         public LayerSaveAsAction(Layer layer) {
             putValue(SMALL_ICON, ImageProvider.get("save_as"));
             putValue(SHORT_DESCRIPTION, tr("Save the current data to a new file."));
@@ -411,7 +411,7 @@ public abstract class Layer implements Destroyable, MapViewPaintable, Projection
     }
 
     public static class LayerGpxExportAction extends AbstractAction {
-        private Layer layer;
+        private final transient Layer layer;
         public LayerGpxExportAction(Layer layer) {
             putValue(SMALL_ICON, ImageProvider.get("exportgpx"));
             putValue(SHORT_DESCRIPTION, tr("Export the data to GPX file."));
diff --git a/src/org/openstreetmap/josm/gui/layer/OsmDataLayer.java b/src/org/openstreetmap/josm/gui/layer/OsmDataLayer.java
index f74d3a2..870144b 100644
--- a/src/org/openstreetmap/josm/gui/layer/OsmDataLayer.java
+++ b/src/org/openstreetmap/josm/gui/layer/OsmDataLayer.java
@@ -11,7 +11,6 @@ import java.awt.Color;
 import java.awt.Composite;
 import java.awt.Graphics2D;
 import java.awt.GridBagLayout;
-import java.awt.Image;
 import java.awt.Point;
 import java.awt.Rectangle;
 import java.awt.TexturePaint;
@@ -27,13 +26,13 @@ import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 import java.util.concurrent.Callable;
 import java.util.concurrent.CopyOnWriteArrayList;
 
 import javax.swing.AbstractAction;
 import javax.swing.Action;
 import javax.swing.Icon;
-import javax.swing.ImageIcon;
 import javax.swing.JLabel;
 import javax.swing.JOptionPane;
 import javax.swing.JPanel;
@@ -89,7 +88,9 @@ import org.openstreetmap.josm.gui.util.GuiHelper;
 import org.openstreetmap.josm.gui.widgets.JosmTextArea;
 import org.openstreetmap.josm.tools.FilteredCollection;
 import org.openstreetmap.josm.tools.GBC;
+import org.openstreetmap.josm.tools.ImageOverlay;
 import org.openstreetmap.josm.tools.ImageProvider;
+import org.openstreetmap.josm.tools.ImageProvider.ImageSizes;
 import org.openstreetmap.josm.tools.date.DateUtils;
 
 /**
@@ -285,23 +286,22 @@ public class OsmDataLayer extends AbstractModifiableLayer implements Listener, S
         DataSet.addSelectionListener(this);
     }
 
-    protected Icon getBaseIcon() {
-        return ImageProvider.get("layer", "osmdata_small");
-    }
-
     /**
-     * TODO: @return Return a dynamic drawn icon of the map data. The icon is
-     *         updated by a background thread to not disturb the running programm.
+     * Return the image provider to get the base icon
+     * @return image provider class which can be modified
+     * @since 8323
      */
-    @Override public Icon getIcon() {
-        Icon baseIcon = getBaseIcon();
+    protected ImageProvider getBaseIconProvider() {
+        return new ImageProvider("layer", "osmdata_small");
+    }
+
+    @Override
+    public Icon getIcon() {
+        ImageProvider base = getBaseIconProvider().setMaxSize(ImageSizes.LAYER);
         if (isUploadDiscouraged()) {
-            return ImageProvider.overlay(baseIcon,
-                    new ImageIcon(ImageProvider.get("warning-small").getImage().getScaledInstance(8, 8, Image.SCALE_SMOOTH)),
-                    ImageProvider.OverlayPosition.SOUTHEAST);
-        } else {
-            return baseIcon;
+            base.addOverlay(new ImageOverlay(new ImageProvider("warning-small"), 0.5, 0.5, 1.0, 1.0));
         }
+        return base.get();
     }
 
     /**
@@ -548,13 +548,13 @@ public class OsmDataLayer extends AbstractModifiableLayer implements Listener, S
     public static GpxData toGpxData(DataSet data, File file) {
         GpxData gpxData = new GpxData();
         gpxData.storageFile = file;
-        HashSet<Node> doneNodes = new HashSet<>();
+        Set<Node> doneNodes = new HashSet<>();
         waysToGpxData(data.getWays(), gpxData, doneNodes);
         nodesToGpxData(data.getNodes(), gpxData, doneNodes);
         return gpxData;
     }
 
-    private static void waysToGpxData(Collection<Way> ways, GpxData gpxData, HashSet<Node> doneNodes) {
+    private static void waysToGpxData(Collection<Way> ways, GpxData gpxData, Set<Node> doneNodes) {
         for (Way w : ways) {
             if (!w.isUsable()) {
                 continue;
@@ -632,7 +632,7 @@ public class OsmDataLayer extends AbstractModifiableLayer implements Listener, S
         return wpt;
     }
 
-    private static void nodesToGpxData(Collection<Node> nodes, GpxData gpxData, HashSet<Node> doneNodes) {
+    private static void nodesToGpxData(Collection<Node> nodes, GpxData gpxData, Set<Node> doneNodes) {
         List<Node> sortedNodes = new ArrayList<>(nodes);
         sortedNodes.removeAll(doneNodes);
         Collections.sort(sortedNodes);
@@ -645,7 +645,7 @@ public class OsmDataLayer extends AbstractModifiableLayer implements Listener, S
     }
 
     private static void addIntegerIfPresent(WayPoint wpt, OsmPrimitive p, String gpxKey, String ... osmKeys) {
-        ArrayList<String> possibleKeys = new ArrayList<>(Arrays.asList(osmKeys));
+        List<String> possibleKeys = new ArrayList<>(Arrays.asList(osmKeys));
         possibleKeys.add(0, gpxKey);
         for (String key : possibleKeys) {
             String value = p.get(key);
@@ -668,7 +668,7 @@ public class OsmDataLayer extends AbstractModifiableLayer implements Listener, S
     }
 
     private static void addDoubleIfPresent(WayPoint wpt, OsmPrimitive p, String gpxKey, String ... osmKeys) {
-        ArrayList<String> possibleKeys = new ArrayList<>(Arrays.asList(osmKeys));
+        List<String> possibleKeys = new ArrayList<>(Arrays.asList(osmKeys));
         possibleKeys.add(0, gpxKey);
         for (String key : possibleKeys) {
             String value = p.get(key);
@@ -690,7 +690,7 @@ public class OsmDataLayer extends AbstractModifiableLayer implements Listener, S
     }
 
     private static void addStringIfPresent(WayPoint wpt, OsmPrimitive p, String gpxKey, String ... osmKeys) {
-        ArrayList<String> possibleKeys = new ArrayList<>(Arrays.asList(osmKeys));
+        List<String> possibleKeys = new ArrayList<>(Arrays.asList(osmKeys));
         possibleKeys.add(0, gpxKey);
         for (String key : possibleKeys) {
             String value = p.get(key);
diff --git a/src/org/openstreetmap/josm/gui/layer/TMSLayer.java b/src/org/openstreetmap/josm/gui/layer/TMSLayer.java
index a496320..c749488 100644
--- a/src/org/openstreetmap/josm/gui/layer/TMSLayer.java
+++ b/src/org/openstreetmap/josm/gui/layer/TMSLayer.java
@@ -206,10 +206,10 @@ public class TMSLayer extends ImageryLayer implements ImageObserver, TileLoaderL
     private Tile clickedTile;
     private boolean needRedraw;
     private JPopupMenu tileOptionMenu;
-    JCheckBoxMenuItem autoZoomPopup;
-    JCheckBoxMenuItem autoLoadPopup;
-    JCheckBoxMenuItem showErrorsPopup;
-    Tile showMetadataTile;
+    private JCheckBoxMenuItem autoZoomPopup;
+    private JCheckBoxMenuItem autoLoadPopup;
+    private JCheckBoxMenuItem showErrorsPopup;
+    private Tile showMetadataTile;
     private AttributionSupport attribution = new AttributionSupport();
     private static final Font InfoFont = new Font("sansserif", Font.BOLD, 13);
 
@@ -333,7 +333,7 @@ public class TMSLayer extends ImageryLayer implements ImageObserver, TileLoaderL
      * @return a new TileSource instance or null if no TileSource for the ImageryInfo/ImageryType could be found.
      * @throws IllegalArgumentException
      */
-    public static TileSource getTileSource(ImageryInfo info) throws IllegalArgumentException {
+    public static TileSource getTileSource(ImageryInfo info) {
         if (info.getImageryType() == ImageryType.TMS) {
             checkUrl(info.getUrl());
             TMSTileSource t = new TemplatedTMSTileSource(info.getName(), info.getUrl(), info.getId(), info.getMinZoom(), info.getMaxZoom(),
@@ -394,6 +394,14 @@ public class TMSLayer extends ImageryLayer implements ImageObserver, TileLoaderL
     }
 
     /**
+     * Marks layer as needing redraw on offset change
+     */
+    @Override
+    public void setOffset(double dx, double dy) {
+        super.setOffset(dx, dy);
+        needRedraw = true;
+    }
+    /**
      * Returns average number of screen pixels per tile pixel for current mapview
      */
     private double getScaleFactor(int zoom) {
@@ -782,11 +790,6 @@ public class TMSLayer extends ImageryLayer implements ImageObserver, TileLoaderL
         ts.loadAllErrorTiles(force);
     }
 
-    /*
-     * Attempt to approximate how much the image is being scaled. For instance,
-     * a 100x100 image being scaled to 50x50 would return 0.25.
-     */
-    Image lastScaledImage = null;
     @Override
     public boolean imageUpdate(Image img, int infoflags, int x, int y, int width, int height) {
         boolean done = ((infoflags & (ERROR | FRAMEBITS | ALLBITS)) != 0);
@@ -1036,9 +1039,9 @@ public class TMSLayer extends ImageryLayer implements ImageObserver, TileLoaderL
 
     private final TileSet nullTileSet = new TileSet((LatLon)null, (LatLon)null, 0);
     private class TileSet {
-        int x0, x1, y0, y1;
-        int zoom;
-        int tileMax = -1;
+        private int x0, x1, y0, y1;
+        private int zoom;
+        private int tileMax = -1;
 
         /**
          * Create a TileSet by EastNorth bbox taking a layer shift in account
@@ -1194,8 +1197,8 @@ public class TMSLayer extends ImageryLayer implements ImageObserver, TileLoaderL
     }
 
     private class DeepTileSet {
-        final EastNorth topLeft, botRight;
-        final int minZoom, maxZoom;
+        private final EastNorth topLeft, botRight;
+        private final int minZoom, maxZoom;
         private final TileSet[] tileSets;
         private final TileSetInfo[] tileSetInfos;
         public DeepTileSet(EastNorth topLeft, EastNorth botRight, int minZoom, int maxZoom) {
@@ -1320,7 +1323,7 @@ public class TMSLayer extends ImageryLayer implements ImageObserver, TileLoaderL
             if (newzoom < MIN_ZOOM) {
                 continue;
             }
-            if (missedTiles.size() <= 0) {
+            if (missedTiles.isEmpty()) {
                 break;
             }
             List<Tile> newlyMissedTiles = new LinkedList<>();
@@ -1347,7 +1350,7 @@ public class TMSLayer extends ImageryLayer implements ImageObserver, TileLoaderL
             }
             missedTiles = newlyMissedTiles;
         }
-        if (Main.isDebugEnabled() && missedTiles.size() > 0) {
+        if (Main.isDebugEnabled() && !missedTiles.isEmpty()) {
             Main.debug("still missed "+missedTiles.size()+" in the end");
         }
         g.setColor(Color.red);
diff --git a/src/org/openstreetmap/josm/gui/layer/WMSLayer.java b/src/org/openstreetmap/josm/gui/layer/WMSLayer.java
index a3d5064..19ee7b2 100644
--- a/src/org/openstreetmap/josm/gui/layer/WMSLayer.java
+++ b/src/org/openstreetmap/josm/gui/layer/WMSLayer.java
@@ -127,8 +127,8 @@ public class WMSLayer extends ImageryLayer implements ImageObserver, PreferenceC
     protected boolean autoDownloadEnabled = true;
     protected boolean autoResolutionEnabled = PROP_DEFAULT_AUTOZOOM.get();
     protected boolean settingsChanged;
-    public WmsCache cache;
-    private AttributionSupport attribution = new AttributionSupport();
+    public transient WmsCache cache;
+    private transient AttributionSupport attribution = new AttributionSupport();
 
     // Image index boundary for current view
     private volatile int bminx;
@@ -139,16 +139,16 @@ public class WMSLayer extends ImageryLayer implements ImageObserver, PreferenceC
     private volatile int bottomEdge;
 
     // Request queue
-    private final List<WMSRequest> requestQueue = new ArrayList<>();
-    private final List<WMSRequest> finishedRequests = new ArrayList<>();
+    private final transient List<WMSRequest> requestQueue = new ArrayList<>();
+    private final transient List<WMSRequest> finishedRequests = new ArrayList<>();
     /**
      * List of request currently being processed by download threads
      */
-    private final List<WMSRequest> processingRequests = new ArrayList<>();
-    private final Lock requestQueueLock = new ReentrantLock();
-    private final Condition queueEmpty = requestQueueLock.newCondition();
-    private final List<WMSGrabber> grabbers = new ArrayList<>();
-    private final List<Thread> grabberThreads = new ArrayList<>();
+    private final transient List<WMSRequest> processingRequests = new ArrayList<>();
+    private final transient Lock requestQueueLock = new ReentrantLock();
+    private final transient Condition queueEmpty = requestQueueLock.newCondition();
+    private final transient List<WMSGrabber> grabbers = new ArrayList<>();
+    private final transient List<Thread> grabberThreads = new ArrayList<>();
     private boolean canceled;
 
     /** set to true if this layer uses an invalid base url */
diff --git a/src/org/openstreetmap/josm/gui/layer/geoimage/CorrelateGpxWithImages.java b/src/org/openstreetmap/josm/gui/layer/geoimage/CorrelateGpxWithImages.java
index fde56fb..f5e3c8c 100644
--- a/src/org/openstreetmap/josm/gui/layer/geoimage/CorrelateGpxWithImages.java
+++ b/src/org/openstreetmap/josm/gui/layer/geoimage/CorrelateGpxWithImages.java
@@ -90,9 +90,9 @@ public class CorrelateGpxWithImages extends AbstractAction {
 
     private static List<GpxData> loadedGpxData = new ArrayList<>();
 
-    GeoImageLayer yLayer = null;
-    double timezone;
-    long delta;
+    private transient GeoImageLayer yLayer = null;
+    private double timezone;
+    private long delta;
 
     /**
      * Constructs a new {@code CorrelateGpxWithImages} action.
@@ -104,9 +104,9 @@ public class CorrelateGpxWithImages extends AbstractAction {
     }
 
     private static class GpxDataWrapper {
-        String name;
-        GpxData data;
-        File file;
+        private String name;
+        private GpxData data;
+        private File file;
 
         public GpxDataWrapper(String name, GpxData data, File file) {
             this.name = name;
@@ -120,19 +120,19 @@ public class CorrelateGpxWithImages extends AbstractAction {
         }
     }
 
-    ExtendedDialog syncDialog;
-    List<GpxDataWrapper> gpxLst = new ArrayList<>();
-    JPanel outerPanel;
-    JosmComboBox<GpxDataWrapper> cbGpx;
-    JosmTextField tfTimezone;
-    JosmTextField tfOffset;
-    JCheckBox cbExifImg;
-    JCheckBox cbTaggedImg;
-    JCheckBox cbShowThumbs;
-    JLabel statusBarText;
+    private ExtendedDialog syncDialog;
+    private transient List<GpxDataWrapper> gpxLst = new ArrayList<>();
+    private JPanel outerPanel;
+    private JosmComboBox<GpxDataWrapper> cbGpx;
+    private JosmTextField tfTimezone;
+    private JosmTextField tfOffset;
+    private JCheckBox cbExifImg;
+    private JCheckBox cbTaggedImg;
+    private JCheckBox cbShowThumbs;
+    private JLabel statusBarText;
 
     // remember the last number of matched photos
-    int lastNumMatched = 0;
+    private int lastNumMatched = 0;
 
     /** This class is called when the user doesn't find the GPX file he needs in the files that have
      * been loaded yet. It displays a FileChooser dialog to select the GPX file to be loaded.
@@ -230,12 +230,12 @@ public class CorrelateGpxWithImages extends AbstractAction {
      *
      */
     private class SetOffsetActionListener implements ActionListener {
-        JPanel panel;
-        JLabel lbExifTime;
-        JosmTextField tfGpsTime;
-        JosmComboBox<String> cbTimezones;
-        ImageDisplay imgDisp;
-        JList<String> imgList;
+        private JPanel panel;
+        private JLabel lbExifTime;
+        private JosmTextField tfGpsTime;
+        private JosmComboBox<String> cbTimezones;
+        private ImageDisplay imgDisp;
+        private JList<String> imgList;
 
         @Override
         public void actionPerformed(ActionEvent arg0) {
@@ -664,10 +664,10 @@ public class CorrelateGpxWithImages extends AbstractAction {
         syncDialog.setContentPane(outerPanel);
         syncDialog.pack();
         syncDialog.addWindowListener(new WindowAdapter() {
-            static final int CANCEL = -1;
-            static final int DONE = 0;
-            static final int AGAIN = 1;
-            static final int NOTHING = 2;
+            private static final int CANCEL = -1;
+            private static final int DONE = 0;
+            private static final int AGAIN = 1;
+            private static final int NOTHING = 2;
             private int checkAndSave() {
                 if (syncDialog.isVisible())
                     // nothing happened: JOSM was minimized or similar
@@ -763,8 +763,8 @@ public class CorrelateGpxWithImages extends AbstractAction {
         syncDialog.showDialog();
     }
 
-    StatusBarUpdater statusBarUpdater = new StatusBarUpdater(false);
-    StatusBarUpdater statusBarUpdaterWithRepaint = new StatusBarUpdater(true);
+    private transient StatusBarUpdater statusBarUpdater = new StatusBarUpdater(false);
+    private transient StatusBarUpdater statusBarUpdaterWithRepaint = new StatusBarUpdater(true);
 
     private class StatusBarUpdater implements  DocumentListener, ItemListener, ActionListener {
         private boolean doRepaint;
@@ -834,7 +834,7 @@ public class CorrelateGpxWithImages extends AbstractAction {
         }
     }
 
-    RepaintTheMapListener repaintTheMap = new RepaintTheMapListener();
+    private transient RepaintTheMapListener repaintTheMap = new RepaintTheMapListener();
     private class RepaintTheMapListener implements FocusListener {
         @Override
         public void focusGained(FocusEvent e) { // do nothing
@@ -998,7 +998,7 @@ public class CorrelateGpxWithImages extends AbstractAction {
             PrimaryDateParser dateParser = new PrimaryDateParser();
 
             // no images found, exit
-            if(imgs.size() <= 0) {
+            if(imgs.isEmpty()) {
                 JOptionPane.showMessageDialog(Main.parent,
                         tr("The selected photos do not contain time information."),
                         tr("Photos do not contain time information"), JOptionPane.WARNING_MESSAGE);
@@ -1206,10 +1206,7 @@ public class CorrelateGpxWithImages extends AbstractAction {
         // First trackpoint, then interval is set to five seconds, i.e. photos up to five seconds
         // before the first point will be geotagged with the starting point
         if (prevWpTime == 0 || curWpTime <= prevWpTime) {
-            while (true) {
-                if (i < 0) {
-                    break;
-                }
+            while (i >= 0) {
                 final ImageEntry curImg = images.get(i);
                 long time = curImg.getExifTime().getTime();
                 if (time > curWpTime || time < curWpTime - interval) {
@@ -1230,10 +1227,7 @@ public class CorrelateGpxWithImages extends AbstractAction {
 
         // This code gives a simple linear interpolation of the coordinates between current and
         // previous track point assuming a constant speed in between
-        while (true) {
-            if (i < 0) {
-                break;
-            }
+        while (i >= 0) {
             ImageEntry curImg = images.get(i);
             long imgTime = curImg.getExifTime().getTime();
             if (imgTime < prevWpTime) {
diff --git a/src/org/openstreetmap/josm/gui/layer/geoimage/GeoImageLayer.java b/src/org/openstreetmap/josm/gui/layer/geoimage/GeoImageLayer.java
index 4462bb3..90ccae6 100644
--- a/src/org/openstreetmap/josm/gui/layer/geoimage/GeoImageLayer.java
+++ b/src/org/openstreetmap/josm/gui/layer/geoimage/GeoImageLayer.java
@@ -93,7 +93,7 @@ public class GeoImageLayer extends Layer implements PropertyChangeListener, Jump
     private int currentPhoto = -1;
 
     boolean useThumbs = false;
-    ExecutorService thumbsLoaderExecutor = Executors.newSingleThreadExecutor(new ThreadFactory() {
+    private ExecutorService thumbsLoaderExecutor = Executors.newSingleThreadExecutor(new ThreadFactory() {
         @Override
         public Thread newThread(Runnable r) {
             Thread t = new Thread(r);
@@ -101,8 +101,8 @@ public class GeoImageLayer extends Layer implements PropertyChangeListener, Jump
             return t;
         }
     });
-    ThumbsLoader thumbsloader;
-    boolean thumbsLoaderRunning = false;
+    private ThumbsLoader thumbsloader;
+    private boolean thumbsLoaderRunning = false;
     volatile boolean thumbsLoaded = false;
     private BufferedImage offscreenBuffer;
     boolean updateOffscreenBuffer = true;
@@ -712,7 +712,7 @@ public class GeoImageLayer extends Layer implements PropertyChangeListener, Jump
     }
 
     public void showNextPhoto() {
-        if (data != null && data.size() > 0) {
+        if (data != null && !data.isEmpty()) {
             currentPhoto++;
             if (currentPhoto >= data.size()) {
                 currentPhoto = data.size() - 1;
@@ -738,7 +738,7 @@ public class GeoImageLayer extends Layer implements PropertyChangeListener, Jump
     }
 
     public void showFirstPhoto() {
-        if (data != null && data.size() > 0) {
+        if (data != null && !data.isEmpty()) {
             currentPhoto = 0;
             ImageViewerDialog.showImage(this, data.get(currentPhoto));
         } else {
@@ -748,7 +748,7 @@ public class GeoImageLayer extends Layer implements PropertyChangeListener, Jump
     }
 
     public void showLastPhoto() {
-        if (data != null && data.size() > 0) {
+        if (data != null && !data.isEmpty()) {
             currentPhoto = data.size() - 1;
             ImageViewerDialog.showImage(this, data.get(currentPhoto));
         } else {
@@ -763,7 +763,7 @@ public class GeoImageLayer extends Layer implements PropertyChangeListener, Jump
     }
 
     public void removeCurrentPhoto() {
-        if (data != null && data.size() > 0 && currentPhoto >= 0 && currentPhoto < data.size()) {
+        if (data != null && !data.isEmpty() && currentPhoto >= 0 && currentPhoto < data.size()) {
             data.remove(currentPhoto);
             if (currentPhoto >= data.size()) {
                 currentPhoto = data.size() - 1;
@@ -780,7 +780,7 @@ public class GeoImageLayer extends Layer implements PropertyChangeListener, Jump
 
     public void removeCurrentPhotoFromDisk() {
         ImageEntry toDelete = null;
-        if (data != null && data.size() > 0 && currentPhoto >= 0 && currentPhoto < data.size()) {
+        if (data != null && !data.isEmpty() && currentPhoto >= 0 && currentPhoto < data.size()) {
             toDelete = data.get(currentPhoto);
 
             int result = new ExtendedDialog(
@@ -827,7 +827,7 @@ public class GeoImageLayer extends Layer implements PropertyChangeListener, Jump
 
     public void copyCurrentPhotoPath() {
         ImageEntry toCopy = null;
-        if (data != null && data.size() > 0 && currentPhoto >= 0 && currentPhoto < data.size()) {
+        if (data != null && !data.isEmpty() && currentPhoto >= 0 && currentPhoto < data.size()) {
             toCopy = data.get(currentPhoto);
             String copyString = toCopy.getFile().toString();
             Utils.copyToClipboard(copyString);
diff --git a/src/org/openstreetmap/josm/gui/layer/geoimage/ImageDisplay.java b/src/org/openstreetmap/josm/gui/layer/geoimage/ImageDisplay.java
index bbd58d8..5f0d8e2 100644
--- a/src/org/openstreetmap/josm/gui/layer/geoimage/ImageDisplay.java
+++ b/src/org/openstreetmap/josm/gui/layer/geoimage/ImageDisplay.java
@@ -34,7 +34,7 @@ public class ImageDisplay extends JComponent {
     private File file = null;
 
     /** The image currently displayed */
-    private Image image = null;
+    private transient Image image = null;
 
     /** The image currently displayed */
     private boolean errorLoading = false;
@@ -134,9 +134,9 @@ public class ImageDisplay extends JComponent {
 
     private class ImgDisplayMouseListener implements MouseListener, MouseWheelListener, MouseMotionListener {
 
-        boolean mouseIsDragging = false;
-        long lastTimeForMousePoint = 0L;
-        Point mousePointInImg = null;
+        private boolean mouseIsDragging = false;
+        private long lastTimeForMousePoint = 0L;
+        private Point mousePointInImg = null;
 
         /** Zoom in and out, trying to preserve the point of the image that was under the mouse cursor
          * at the same place */
diff --git a/src/org/openstreetmap/josm/gui/layer/geoimage/ImageViewerDialog.java b/src/org/openstreetmap/josm/gui/layer/geoimage/ImageViewerDialog.java
index f858826..26a2588 100644
--- a/src/org/openstreetmap/josm/gui/layer/geoimage/ImageViewerDialog.java
+++ b/src/org/openstreetmap/josm/gui/layer/geoimage/ImageViewerDialog.java
@@ -273,8 +273,8 @@ public final class ImageViewerDialog extends ToggleDialog implements LayerChange
         getInstance().btnNext.setEnabled(value);
     }
 
-    private GeoImageLayer currentLayer = null;
-    private ImageEntry currentEntry = null;
+    private transient GeoImageLayer currentLayer = null;
+    private transient ImageEntry currentEntry = null;
 
     public void displayImage(GeoImageLayer layer, ImageEntry entry) {
         boolean imageChanged;
diff --git a/src/org/openstreetmap/josm/gui/layer/geoimage/ShowThumbnailAction.java b/src/org/openstreetmap/josm/gui/layer/geoimage/ShowThumbnailAction.java
index 2bb7da1..10446ac 100644
--- a/src/org/openstreetmap/josm/gui/layer/geoimage/ShowThumbnailAction.java
+++ b/src/org/openstreetmap/josm/gui/layer/geoimage/ShowThumbnailAction.java
@@ -6,6 +6,7 @@ import static org.openstreetmap.josm.tools.I18n.tr;
 import java.awt.Component;
 import java.awt.event.ActionEvent;
 import java.util.List;
+
 import javax.swing.AbstractAction;
 import javax.swing.JCheckBoxMenuItem;
 
@@ -20,7 +21,7 @@ import org.openstreetmap.josm.tools.ImageProvider;
  */
 public class ShowThumbnailAction extends AbstractAction implements LayerAction {
 
-    private final GeoImageLayer layer;
+    private final transient GeoImageLayer layer;
 
     /**
      * Constructs a new {@code ToggleGeoImageThumbAction} action.
diff --git a/src/org/openstreetmap/josm/gui/layer/geoimage/ThumbsLoader.java b/src/org/openstreetmap/josm/gui/layer/geoimage/ThumbsLoader.java
index e3eb8f7..ed02467 100644
--- a/src/org/openstreetmap/josm/gui/layer/geoimage/ThumbsLoader.java
+++ b/src/org/openstreetmap/josm/gui/layer/geoimage/ThumbsLoader.java
@@ -19,11 +19,11 @@ public class ThumbsLoader implements Runnable {
     public static final int maxSize = 120;
     public static final int minSize = 22;
     public volatile boolean stop = false;
-    List<ImageEntry> data;
-    GeoImageLayer layer;
-    MediaTracker tracker;
-    CacheFiles cache;
-    boolean cacheOff = Main.pref.getBoolean("geoimage.noThumbnailCache", false);
+    private List<ImageEntry> data;
+    private GeoImageLayer layer;
+    private MediaTracker tracker;
+    private CacheFiles cache;
+    private boolean cacheOff = Main.pref.getBoolean("geoimage.noThumbnailCache", false);
 
     public ThumbsLoader(GeoImageLayer layer) {
         this.layer = layer;
diff --git a/src/org/openstreetmap/josm/gui/layer/gpx/ChooseTrackVisibilityAction.java b/src/org/openstreetmap/josm/gui/layer/gpx/ChooseTrackVisibilityAction.java
index 2ffe19d..ae43558 100644
--- a/src/org/openstreetmap/josm/gui/layer/gpx/ChooseTrackVisibilityAction.java
+++ b/src/org/openstreetmap/josm/gui/layer/gpx/ChooseTrackVisibilityAction.java
@@ -12,6 +12,7 @@ import java.awt.event.ActionListener;
 import java.awt.event.MouseAdapter;
 import java.awt.event.MouseEvent;
 import java.awt.event.MouseListener;
+import java.io.Serializable;
 import java.util.Arrays;
 import java.util.Comparator;
 import java.util.Map;
@@ -46,10 +47,10 @@ import org.openstreetmap.josm.tools.WindowGeometry;
  * they can be chosen from the gpx layer context menu.
  */
 public class ChooseTrackVisibilityAction extends AbstractAction {
-    private final GpxLayer layer;
+    private final transient GpxLayer layer;
 
-    DateFilterPanel dateFilter;
-    JTable table;
+    private DateFilterPanel dateFilter;
+    private JTable table;
 
     /**
      * Constructs a new {@code ChooseTrackVisibilityAction}.
@@ -88,7 +89,9 @@ public class ChooseTrackVisibilityAction extends AbstractAction {
     /**
      * Comparator for TrackLength objects
      */
-    private static final class LengthContentComparator implements Comparator<TrackLength> {
+    private static final class LengthContentComparator implements Comparator<TrackLength>, Serializable {
+
+        private static final long serialVersionUID = 1L;
 
         /**
          * Compare 2 TrackLength objects relative to the real length
@@ -180,7 +183,7 @@ public class ChooseTrackVisibilityAction extends AbstractAction {
         return t;
     }
 
-    boolean noUpdates=false;
+    private boolean noUpdates=false;
 
     /** selects all rows (=tracks) in the table that are currently visible on the layer*/
     private void selectVisibleTracksInTable() {
diff --git a/src/org/openstreetmap/josm/gui/layer/gpx/ConvertToDataLayerAction.java b/src/org/openstreetmap/josm/gui/layer/gpx/ConvertToDataLayerAction.java
index e6f930d..f4a05d6 100644
--- a/src/org/openstreetmap/josm/gui/layer/gpx/ConvertToDataLayerAction.java
+++ b/src/org/openstreetmap/josm/gui/layer/gpx/ConvertToDataLayerAction.java
@@ -31,7 +31,7 @@ import org.openstreetmap.josm.tools.ImageProvider;
 import org.openstreetmap.josm.tools.date.DateUtils;
 
 public class ConvertToDataLayerAction extends AbstractAction {
-    private final GpxLayer layer;
+    private final transient GpxLayer layer;
 
     public ConvertToDataLayerAction(final GpxLayer layer) {
         super(tr("Convert to data layer"), ImageProvider.get("converttoosm"));
diff --git a/src/org/openstreetmap/josm/gui/layer/gpx/CustomizeDrawingAction.java b/src/org/openstreetmap/josm/gui/layer/gpx/CustomizeDrawingAction.java
index 447d57f..65751c0 100644
--- a/src/org/openstreetmap/josm/gui/layer/gpx/CustomizeDrawingAction.java
+++ b/src/org/openstreetmap/josm/gui/layer/gpx/CustomizeDrawingAction.java
@@ -28,7 +28,7 @@ import org.openstreetmap.josm.gui.util.GuiHelper;
 import org.openstreetmap.josm.tools.ImageProvider;
 
 public class CustomizeDrawingAction extends AbstractAction implements LayerAction, MultiLayerAction {
-    List<Layer> layers;
+    private transient List<Layer> layers;
 
     public CustomizeDrawingAction(List<Layer> l) {
         this();
diff --git a/src/org/openstreetmap/josm/gui/layer/gpx/DateFilterPanel.java b/src/org/openstreetmap/josm/gui/layer/gpx/DateFilterPanel.java
index e6607f4..1947b66 100644
--- a/src/org/openstreetmap/josm/gui/layer/gpx/DateFilterPanel.java
+++ b/src/org/openstreetmap/josm/gui/layer/gpx/DateFilterPanel.java
@@ -22,16 +22,16 @@ import org.openstreetmap.josm.gui.widgets.DateEditorWithSlider;
 import org.openstreetmap.josm.tools.GBC;
 
 public class DateFilterPanel extends JPanel {
-    DateEditorWithSlider dateFrom = new DateEditorWithSlider(tr("From"));
-    DateEditorWithSlider dateTo = new DateEditorWithSlider(tr("To"));
-    JCheckBox noTimestampCb  = new JCheckBox(tr("No timestamp"));
-    GpxLayer layer;
-    
-    ActionListener filterAppliedListener;
-    
-    final String PREF_DATE_0;
-    final String PREF_DATE_MIN;
-    final String PREF_DATE_MAX;
+    private DateEditorWithSlider dateFrom = new DateEditorWithSlider(tr("From"));
+    private DateEditorWithSlider dateTo = new DateEditorWithSlider(tr("To"));
+    private JCheckBox noTimestampCb  = new JCheckBox(tr("No timestamp"));
+    private transient GpxLayer layer;
+
+    private transient ActionListener filterAppliedListener;
+
+    private final String PREF_DATE_0;
+    private final String PREF_DATE_MIN;
+    private final String PREF_DATE_MAX;
 
     /**
      * Create the panel to filter tracks on GPX layer @param layer by date
@@ -44,40 +44,40 @@ public class DateFilterPanel extends JPanel {
         PREF_DATE_MIN = preferencePrefix+".mintime";
         PREF_DATE_MAX = preferencePrefix+".maxtime";
         this.layer = layer;
-        
+
         final Date startTime, endTime;
         Date[] bounds = layer.data.getMinMaxTimeForAllTracks();
         startTime = (bounds==null) ? new GregorianCalendar(2000, 1, 1).getTime():bounds[0];
         endTime = (bounds==null) ? new Date() : bounds[1];
-                
-        dateFrom.setDate(startTime); 
+
+        dateFrom.setDate(startTime);
         dateTo.setDate(endTime);
-        dateFrom.setRange(startTime, endTime); 
-        dateTo.setRange(startTime, endTime); 
-        
+        dateFrom.setRange(startTime, endTime);
+        dateTo.setRange(startTime, endTime);
+
         add(noTimestampCb, GBC.std().grid(1,1).insets(0, 0, 5, 0));
         add(dateFrom, GBC.std().grid(2,1).fill(GBC.HORIZONTAL));
         add(dateTo, GBC.eol().grid(3,1).fill(GBC.HORIZONTAL));
-        
+
         setEnabled(enabled);
-        
+
         dateFrom.addDateListener(changeListener);
         dateTo.addDateListener(changeListener);
         noTimestampCb.addChangeListener(changeListener);
     }
-    
-    private ChangeListener changeListener = new ChangeListener() {
+
+    private transient ChangeListener changeListener = new ChangeListener() {
         @Override public void stateChanged(ChangeEvent e) {
             if (isEnabled()) applyFilterWithDelay();
         }
     };
-    
+
     private Timer t = new Timer(200 , new ActionListener() {
         @Override  public void actionPerformed(ActionEvent e) {
             applyFilter();
         }
     });
-    
+
     /**
      * Do filtering but little bit later (to reduce cpu load)
      */
@@ -88,14 +88,14 @@ public class DateFilterPanel extends JPanel {
             t.start();
         }
     }
-    
+
     public void applyFilter() {
         t.stop();
         filterTracksByDate();
         if (filterAppliedListener!=null)
            filterAppliedListener.actionPerformed(null);
     }
-    
+
     /**
      * Called by other components when it is correct time to save date filtering parameters
      */
@@ -120,7 +120,7 @@ public class DateFilterPanel extends JPanel {
     public void setFilterAppliedListener(ActionListener filterAppliedListener) {
         this.filterAppliedListener = filterAppliedListener;
     }
-    
+
     private void filterTracksByDate() {
         Date from = dateFrom.getDate();
         Date to = dateTo.getDate();
@@ -129,7 +129,7 @@ public class DateFilterPanel extends JPanel {
 
     @Override
     public final void setEnabled(boolean enabled) {
-        super.setEnabled(enabled); 
+        super.setEnabled(enabled);
         for (Component c: getComponents()) {
             c.setEnabled(enabled);
         }
diff --git a/src/org/openstreetmap/josm/gui/layer/gpx/DownloadAlongTrackAction.java b/src/org/openstreetmap/josm/gui/layer/gpx/DownloadAlongTrackAction.java
index b7df67d..4d50a74 100644
--- a/src/org/openstreetmap/josm/gui/layer/gpx/DownloadAlongTrackAction.java
+++ b/src/org/openstreetmap/josm/gui/layer/gpx/DownloadAlongTrackAction.java
@@ -25,9 +25,9 @@ import org.openstreetmap.josm.gui.progress.NullProgressMonitor;
  */
 public class DownloadAlongTrackAction extends DownloadAlongAction {
 
-    static final int NEAR_TRACK = 0;
-    static final int NEAR_WAYPOINTS = 1;
-    static final int NEAR_BOTH = 2;
+    private static final int NEAR_TRACK = 0;
+    private static final int NEAR_WAYPOINTS = 1;
+    private static final int NEAR_BOTH = 2;
 
     private static final String PREF_DOWNLOAD_ALONG_TRACK_OSM = "downloadAlongTrack.download.osm";
     private static final String PREF_DOWNLOAD_ALONG_TRACK_GPS = "downloadAlongTrack.download.gps";
@@ -36,7 +36,7 @@ public class DownloadAlongTrackAction extends DownloadAlongAction {
     private static final String PREF_DOWNLOAD_ALONG_TRACK_AREA = "downloadAlongTrack.area";
     private static final String PREF_DOWNLOAD_ALONG_TRACK_NEAR = "downloadAlongTrack.near";
 
-    private final GpxData data;
+    private final transient GpxData data;
 
     /**
      * Constructs a new {@code DownloadAlongTrackAction}
diff --git a/src/org/openstreetmap/josm/gui/layer/gpx/DownloadWmsAlongTrackAction.java b/src/org/openstreetmap/josm/gui/layer/gpx/DownloadWmsAlongTrackAction.java
index 598c8e5..ad63bbb 100644
--- a/src/org/openstreetmap/josm/gui/layer/gpx/DownloadWmsAlongTrackAction.java
+++ b/src/org/openstreetmap/josm/gui/layer/gpx/DownloadWmsAlongTrackAction.java
@@ -36,7 +36,7 @@ import org.xml.sax.SAXException;
 
 public class DownloadWmsAlongTrackAction extends AbstractAction {
 
-    private final GpxData data;
+    private final transient GpxData data;
 
     public DownloadWmsAlongTrackAction(final GpxData data) {
         super(tr("Precache imagery tiles along this track"), ImageProvider.get("downloadalongtrack"));
diff --git a/src/org/openstreetmap/josm/gui/layer/gpx/GpxDrawHelper.java b/src/org/openstreetmap/josm/gui/layer/gpx/GpxDrawHelper.java
index 8938bcf..a0bd39f 100644
--- a/src/org/openstreetmap/josm/gui/layer/gpx/GpxDrawHelper.java
+++ b/src/org/openstreetmap/josm/gui/layer/gpx/GpxDrawHelper.java
@@ -69,11 +69,11 @@ public class GpxDrawHelper {
     private int largePointAlpha;
 
     // default access is used to allow changing from plugins
-    ColorScale velocityScale;
+    private ColorScale velocityScale;
     /** Colors (without custom alpha channel, if given) for HDOP painting. **/
-    ColorScale hdopScale;
-    ColorScale dateScale;
-    ColorScale directionScale;
+    private ColorScale hdopScale;
+    private ColorScale dateScale;
+    private ColorScale directionScale;
 
     /** Opacity for hdop points **/
     private int hdopAlpha;
diff --git a/src/org/openstreetmap/josm/gui/layer/gpx/ImportAudioAction.java b/src/org/openstreetmap/josm/gui/layer/gpx/ImportAudioAction.java
index 10c4710..3cefe12 100644
--- a/src/org/openstreetmap/josm/gui/layer/gpx/ImportAudioAction.java
+++ b/src/org/openstreetmap/josm/gui/layer/gpx/ImportAudioAction.java
@@ -39,7 +39,7 @@ import org.openstreetmap.josm.tools.Utils;
  * @since 5715
  */
 public class ImportAudioAction extends AbstractAction {
-    private final GpxLayer layer;
+    private final transient GpxLayer layer;
 
     private static class Markers {
         public boolean timedMarkersOmitted = false;
diff --git a/src/org/openstreetmap/josm/gui/layer/gpx/ImportImagesAction.java b/src/org/openstreetmap/josm/gui/layer/gpx/ImportImagesAction.java
index f435b34..2a7949d 100644
--- a/src/org/openstreetmap/josm/gui/layer/gpx/ImportImagesAction.java
+++ b/src/org/openstreetmap/josm/gui/layer/gpx/ImportImagesAction.java
@@ -23,7 +23,7 @@ import org.openstreetmap.josm.io.JpgImporter;
 import org.openstreetmap.josm.tools.ImageProvider;
 
 public class ImportImagesAction extends AbstractAction {
-    private final GpxLayer layer;
+    private final transient GpxLayer layer;
 
     public ImportImagesAction(final GpxLayer layer) {
         super(tr("Import images"), ImageProvider.get("dialogs/geoimage"));
@@ -58,7 +58,7 @@ public class ImportImagesAction extends AbstractAction {
         if (fc != null) {
             File[] sel = fc.getSelectedFiles();
             if (sel != null && sel.length > 0) {
-                LinkedList<File> files = new LinkedList<>();
+                List<File> files = new LinkedList<>();
                 addRecursiveFiles(files, sel);
                 importer.importDataHandleExceptions(files, NullProgressMonitor.INSTANCE);
             }
diff --git a/src/org/openstreetmap/josm/gui/layer/gpx/MarkersFromNamedPointsAction.java b/src/org/openstreetmap/josm/gui/layer/gpx/MarkersFromNamedPointsAction.java
index df925a0..e0da3f3 100644
--- a/src/org/openstreetmap/josm/gui/layer/gpx/MarkersFromNamedPointsAction.java
+++ b/src/org/openstreetmap/josm/gui/layer/gpx/MarkersFromNamedPointsAction.java
@@ -18,7 +18,7 @@ import org.openstreetmap.josm.gui.layer.markerlayer.MarkerLayer;
 import org.openstreetmap.josm.tools.ImageProvider;
 
 public class MarkersFromNamedPointsAction extends AbstractAction {
-    private final GpxLayer layer;
+    private final transient GpxLayer layer;
 
     public MarkersFromNamedPointsAction(final GpxLayer layer) {
         super(tr("Markers From Named Points"), ImageProvider.get("addmarkers"));
diff --git a/src/org/openstreetmap/josm/gui/layer/markerlayer/MarkerLayer.java b/src/org/openstreetmap/josm/gui/layer/markerlayer/MarkerLayer.java
index 9ac79bc..22a671c 100644
--- a/src/org/openstreetmap/josm/gui/layer/markerlayer/MarkerLayer.java
+++ b/src/org/openstreetmap/josm/gui/layer/markerlayer/MarkerLayer.java
@@ -467,7 +467,7 @@ public class MarkerLayer extends Layer implements JumpToMarkerLayer {
     }
 
     public static final class ShowHideMarkerText extends AbstractAction implements LayerAction {
-        private final MarkerLayer layer;
+        private final transient MarkerLayer layer;
 
         public ShowHideMarkerText(MarkerLayer layer) {
             super(tr("Show Text/Icons"), ImageProvider.get("dialogs", "showhide"));
diff --git a/src/org/openstreetmap/josm/gui/mappaint/AreaElemStyle.java b/src/org/openstreetmap/josm/gui/mappaint/AreaElemStyle.java
index f346ae8..c39fd67 100644
--- a/src/org/openstreetmap/josm/gui/mappaint/AreaElemStyle.java
+++ b/src/org/openstreetmap/josm/gui/mappaint/AreaElemStyle.java
@@ -40,7 +40,7 @@ public class AreaElemStyle extends ElemStyle {
 
         IconReference iconRef = c.get(FILL_IMAGE, null, IconReference.class);
         if (iconRef != null) {
-            fillImage = new MapImage(iconRef.iconName, iconRef.source);
+            fillImage = new MapImage(iconRef.iconName, iconRef.source, false);
 
             color = new Color(fillImage.getImage(false).getRGB(
                     fillImage.getWidth() / 2, fillImage.getHeight() / 2)
diff --git a/src/org/openstreetmap/josm/gui/mappaint/Cascade.java b/src/org/openstreetmap/josm/gui/mappaint/Cascade.java
index dcaee63..2f5a645 100644
--- a/src/org/openstreetmap/josm/gui/mappaint/Cascade.java
+++ b/src/org/openstreetmap/josm/gui/mappaint/Cascade.java
@@ -6,6 +6,7 @@ import java.util.Arrays;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.Map.Entry;
 import java.util.regex.Pattern;
 
 import org.openstreetmap.josm.Main;
@@ -194,7 +195,7 @@ public final class Cascade implements Cloneable {
     @Override
     public Cascade clone() {
         @SuppressWarnings("unchecked")
-        HashMap<String, Object> clonedProp = (HashMap<String, Object>) ((HashMap) this.prop).clone();
+        Map<String, Object> clonedProp = (Map<String, Object>) ((HashMap) this.prop).clone();
         Cascade c = new Cascade();
         c.prop = clonedProp;
         return c;
@@ -203,9 +204,9 @@ public final class Cascade implements Cloneable {
     @Override
     public String toString() {
         StringBuilder res = new StringBuilder("Cascade{ ");
-        for (String key : prop.keySet()) {
-            res.append(key+":");
-            Object val = prop.get(key);
+        for (Entry<String, Object> entry : prop.entrySet()) {
+            res.append(entry.getKey()+":");
+            Object val = entry.getValue();
             if (val instanceof float[]) {
                 res.append(Arrays.toString((float[]) val));
             } else if (val instanceof Color) {
diff --git a/src/org/openstreetmap/josm/gui/mappaint/Environment.java b/src/org/openstreetmap/josm/gui/mappaint/Environment.java
index bc58604..139131e 100644
--- a/src/org/openstreetmap/josm/gui/mappaint/Environment.java
+++ b/src/org/openstreetmap/josm/gui/mappaint/Environment.java
@@ -64,7 +64,7 @@ public class Environment {
      * @param other the other environment. Must not be null.
      * @throws IllegalArgumentException if {@code param} is {@code null}
      */
-    public Environment(Environment other) throws IllegalArgumentException {
+    public Environment(Environment other) {
         CheckParameterUtil.ensureParameterNotNull(other);
         this.osm = other.osm;
         this.mc = other.mc;
diff --git a/src/org/openstreetmap/josm/gui/mappaint/LabelCompositionStrategy.java b/src/org/openstreetmap/josm/gui/mappaint/LabelCompositionStrategy.java
index 0f55c76..b11ed32 100644
--- a/src/org/openstreetmap/josm/gui/mappaint/LabelCompositionStrategy.java
+++ b/src/org/openstreetmap/josm/gui/mappaint/LabelCompositionStrategy.java
@@ -187,7 +187,7 @@ public abstract class LabelCompositionStrategy {
             if (nameTags == null) {
                 nameTags = Collections.emptyList();
             }
-            ArrayList<String> result = new ArrayList<>();
+            List<String> result = new ArrayList<>();
             for(String tag: nameTags) {
                 if (tag == null) {
                     continue;
diff --git a/src/org/openstreetmap/josm/gui/mappaint/MapImage.java b/src/org/openstreetmap/josm/gui/mappaint/MapImage.java
index cbc5933..fa7700f 100644
--- a/src/org/openstreetmap/josm/gui/mappaint/MapImage.java
+++ b/src/org/openstreetmap/josm/gui/mappaint/MapImage.java
@@ -32,6 +32,7 @@ public class MapImage {
     public int alpha = 255;
     public String name;
     public StyleSource source;
+    public boolean autoRescale;
     public int width = -1;
     public int height = -1;
     public int offsetX = 0;
@@ -41,8 +42,13 @@ public class MapImage {
     private BufferedImage disabledImgCache;
 
     public MapImage(String name, StyleSource source) {
+        this(name, source, true);
+    }
+
+    public MapImage(String name, StyleSource source, boolean autoRescale) {
         this.name = name;
         this.source = source;
+        this.autoRescale = autoRescale;
     }
 
     /**
@@ -198,8 +204,8 @@ public class MapImage {
     }
 
     private boolean mustRescale(Image image) {
-        return ((width  == -1 && image.getWidth(null) > MAX_SIZE)
-             && (height == -1 && image.getHeight(null) > MAX_SIZE));
+        return autoRescale && width  == -1 && image.getWidth(null) > MAX_SIZE
+             && height == -1 && image.getHeight(null) > MAX_SIZE;
     }
 
     @Override
@@ -211,6 +217,7 @@ public class MapImage {
         return  alpha == other.alpha &&
                 Objects.equals(name, other.name) &&
                 Objects.equals(source, other.source) &&
+                autoRescale == other.autoRescale &&
                 width == other.width &&
                 height == other.height;
     }
@@ -221,6 +228,7 @@ public class MapImage {
         hash = 67 * hash + alpha;
         hash = 67 * hash + name.hashCode();
         hash = 67 * hash + source.hashCode();
+        hash = 67 * hash + (autoRescale ? 1 : 0);
         hash = 67 * hash + width;
         hash = 67 * hash + height;
         return hash;
diff --git a/src/org/openstreetmap/josm/gui/mappaint/MapPaintMenu.java b/src/org/openstreetmap/josm/gui/mappaint/MapPaintMenu.java
index 67f546e..b677e96 100644
--- a/src/org/openstreetmap/josm/gui/mappaint/MapPaintMenu.java
+++ b/src/org/openstreetmap/josm/gui/mappaint/MapPaintMenu.java
@@ -29,7 +29,7 @@ public class MapPaintMenu extends JMenu implements MapPaintSylesUpdateListener {
 
     private static class MapPaintAction extends JosmAction {
 
-        private StyleSource style;
+        private transient StyleSource style;
         private JCheckBoxMenuItem button;
 
         public MapPaintAction(StyleSource style) {
@@ -77,7 +77,7 @@ public class MapPaintMenu extends JMenu implements MapPaintSylesUpdateListener {
             return false;
         }
     }
-    private final Map<String, MapPaintAction> actions = new HashMap<>();
+    private final transient Map<String, MapPaintAction> actions = new HashMap<>();
 
     /**
      * Constructs a new {@code MapPaintMenu}
diff --git a/src/org/openstreetmap/josm/gui/mappaint/StyleCache.java b/src/org/openstreetmap/josm/gui/mappaint/StyleCache.java
index 107a9bc..a0d0c7f 100644
--- a/src/org/openstreetmap/josm/gui/mappaint/StyleCache.java
+++ b/src/org/openstreetmap/josm/gui/mappaint/StyleCache.java
@@ -208,8 +208,8 @@ public final class StyleCache {
     }
 
     public void consistencyTest() {
-        if (bd.size() < 2) throw new AssertionError();
-        if (data.size() < 1) throw new AssertionError();
+        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();
diff --git a/src/org/openstreetmap/josm/gui/mappaint/StyleSource.java b/src/org/openstreetmap/josm/gui/mappaint/StyleSource.java
index 7e4659e..4466024 100644
--- a/src/org/openstreetmap/josm/gui/mappaint/StyleSource.java
+++ b/src/org/openstreetmap/josm/gui/mappaint/StyleSource.java
@@ -56,10 +56,20 @@ public abstract class StyleSource extends SourceEntry {
      */
     public Map<String, Object> settingValues = new HashMap<>();
 
+    /**
+     * Constructs a new, active {@link StyleSource}.
+     * @param url URL that {@link org.openstreetmap.josm.io.CachedFile} understands
+     * @param name The name for this StyleSource
+     * @param title The title that can be used as menu entry
+     */
     public StyleSource(String url, String name, String title) {
         super(url, name, title, true);
     }
 
+    /**
+     * Constructs a new {@link StyleSource}
+     * @param entry The entry to copy the data (url, name, ...) from.
+     */
     public StyleSource(SourceEntry entry) {
         super(entry);
     }
diff --git a/src/org/openstreetmap/josm/gui/mappaint/TextElement.java b/src/org/openstreetmap/josm/gui/mappaint/TextElement.java
index 068aa56..04cd88d 100644
--- a/src/org/openstreetmap/josm/gui/mappaint/TextElement.java
+++ b/src/org/openstreetmap/josm/gui/mappaint/TextElement.java
@@ -112,9 +112,9 @@ public class TextElement implements StyleKeys {
      *   doesn't include respective style declarations
      * @return the text element or null, if the style properties don't include
      * properties for text rendering
-     * @throws IllegalArgumentException thrown if {@code defaultTextColor} is null
+     * @throws IllegalArgumentException if {@code defaultTextColor} is null
      */
-    public static TextElement create(Environment env, Color defaultTextColor, boolean defaultAnnotate)  throws IllegalArgumentException{
+    public static TextElement create(Environment env, Color defaultTextColor, boolean defaultAnnotate) {
         CheckParameterUtil.ensureParameterNotNull(defaultTextColor);
         Cascade c = env.mc.getCascade(env.layer);
 
diff --git a/src/org/openstreetmap/josm/gui/mappaint/mapcss/Condition.java b/src/org/openstreetmap/josm/gui/mappaint/mapcss/Condition.java
index a6806c4..e0d4eb6 100644
--- a/src/org/openstreetmap/josm/gui/mappaint/mapcss/Condition.java
+++ b/src/org/openstreetmap/josm/gui/mappaint/mapcss/Condition.java
@@ -83,7 +83,7 @@ public abstract class Condition {
         EQ, NEQ, GREATER_OR_EQUAL, GREATER, LESS_OR_EQUAL, LESS,
         REGEX, NREGEX, ONE_OF, BEGINS_WITH, ENDS_WITH, CONTAINS;
 
-        private static final Set<Op> NEGATED_OPS = EnumSet.of(NEQ, NREGEX);
+        public static final Set<Op> NEGATED_OPS = EnumSet.of(NEQ, NREGEX);
 
         public boolean eval(String testString, String prototypeString) {
             if (testString == null && !NEGATED_OPS.contains(this))
@@ -145,9 +145,6 @@ public abstract class Condition {
         LINK
     }
 
-    public static final EnumSet<Op> COMPARISON_OPERATERS =
-        EnumSet.of(Op.GREATER_OR_EQUAL, Op.GREATER, Op.LESS_OR_EQUAL, Op.LESS);
-
     /**
      * Most common case of a KeyValueCondition.
      *
@@ -222,7 +219,7 @@ public abstract class Condition {
     public static class KeyValueRegexpCondition extends KeyValueCondition {
 
         public final Pattern pattern;
-        public static final EnumSet<Op> SUPPORTED_OPS = EnumSet.of(Op.REGEX, Op.NREGEX);
+        public static final Set<Op> SUPPORTED_OPS = EnumSet.of(Op.REGEX, Op.NREGEX);
 
         public KeyValueRegexpCondition(String k, String v, Op op, boolean considerValAsKey) {
             super(k, v, op, considerValAsKey);
diff --git a/src/org/openstreetmap/josm/gui/mappaint/mapcss/ExpressionFactory.java b/src/org/openstreetmap/josm/gui/mappaint/mapcss/ExpressionFactory.java
index 08949bb..b4f09f0 100644
--- a/src/org/openstreetmap/josm/gui/mappaint/mapcss/ExpressionFactory.java
+++ b/src/org/openstreetmap/josm/gui/mappaint/mapcss/ExpressionFactory.java
@@ -2,7 +2,6 @@
 package org.openstreetmap.josm.gui.mappaint.mapcss;
 
 import java.awt.Color;
-import java.io.UnsupportedEncodingException;
 import java.lang.annotation.ElementType;
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
@@ -10,7 +9,6 @@ import java.lang.annotation.Target;
 import java.lang.reflect.Array;
 import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
-import java.net.URLEncoder;
 import java.nio.charset.StandardCharsets;
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -206,18 +204,6 @@ public final class ExpressionFactory {
         }
 
         /**
-         * Returns the first non-null object. The name originates from the {@code COALESCE} SQL function.
-         * @param args arguments
-         * @return the first non-null object
-         * @deprecated Deprecated in favour of {@link #any(Object...)} from the MapCSS standard.
-         */
-        @NullableArguments
-        @Deprecated
-        public static Object coalesce(Object... args) {
-            return any(args);
-        }
-
-        /**
          * Returns the first non-null object.
          * The name originates from <a href="http://wiki.openstreetmap.org/wiki/MapCSS/0.2/eval">MapCSS standard</a>.
          * @param args arguments
@@ -800,11 +786,7 @@ public final class ExpressionFactory {
          * @return the encoded string
          */
         public static String URL_encode(String s) {
-            try {
-                return s == null ? null : URLEncoder.encode(s, "UTF-8");
-            } catch (UnsupportedEncodingException ex) {
-                throw new RuntimeException(ex);
-            }
+            return s == null ? null : Utils.encodeUrl(s);
         }
 
         /**
diff --git a/src/org/openstreetmap/josm/gui/mappaint/mapcss/LiteralExpression.java b/src/org/openstreetmap/josm/gui/mappaint/mapcss/LiteralExpression.java
index d9ff8c0..a074c5f 100644
--- a/src/org/openstreetmap/josm/gui/mappaint/mapcss/LiteralExpression.java
+++ b/src/org/openstreetmap/josm/gui/mappaint/mapcss/LiteralExpression.java
@@ -10,7 +10,7 @@ import org.openstreetmap.josm.tools.CheckParameterUtil;
  * Simple literal value, that does not depend on other expressions.
  */
 public class LiteralExpression implements Expression {
-    Object literal;
+    private final Object literal;
 
     public LiteralExpression(Object literal) {
         CheckParameterUtil.ensureParameterNotNull(literal);
@@ -29,5 +29,4 @@ public class LiteralExpression implements Expression {
         }
         return "<" + literal.toString() + ">";
     }
-
 }
diff --git a/src/org/openstreetmap/josm/gui/mappaint/mapcss/MapCSSParser.jj b/src/org/openstreetmap/josm/gui/mappaint/mapcss/MapCSSParser.jj
index 7a14770..033ea84 100644
--- a/src/org/openstreetmap/josm/gui/mappaint/mapcss/MapCSSParser.jj
+++ b/src/org/openstreetmap/josm/gui/mappaint/mapcss/MapCSSParser.jj
@@ -8,6 +8,7 @@ PARSER_BEGIN(MapCSSParser)
 package org.openstreetmap.josm.gui.mappaint.mapcss.parsergen;
 
 import java.io.InputStream;
+import java.io.Reader;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collections;
@@ -88,6 +89,19 @@ public class MapCSSParser {
         }
         return new MapCSSParserTokenManager(scs, initState.idx);
     }
+
+    /**
+     * Constructor which initializes the parser with a certain lexical state.
+     */
+    public MapCSSParser(Reader in, LexicalState initState) {
+        this(createTokenManager(in, initState));
+        declarationCounter = 0;
+    }
+
+    protected static MapCSSParserTokenManager createTokenManager(Reader in, LexicalState initState) {
+        final SimpleCharStream scs = new SimpleCharStream(in, 1, 1);
+        return new MapCSSParserTokenManager(scs, initState.idx);
+    }
 }
 PARSER_END(MapCSSParser)
 
diff --git a/src/org/openstreetmap/josm/gui/mappaint/mapcss/MapCSSStyleSource.java b/src/org/openstreetmap/josm/gui/mappaint/mapcss/MapCSSStyleSource.java
index c6f062f..f66ea6b 100644
--- a/src/org/openstreetmap/josm/gui/mappaint/mapcss/MapCSSStyleSource.java
+++ b/src/org/openstreetmap/josm/gui/mappaint/mapcss/MapCSSStyleSource.java
@@ -12,13 +12,14 @@ import java.lang.reflect.Field;
 import java.nio.charset.StandardCharsets;
 import java.text.MessageFormat;
 import java.util.ArrayList;
+import java.util.BitSet;
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.HashSet;
+import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 import java.util.Map.Entry;
-import java.util.PriorityQueue;
 import java.util.Set;
 import java.util.concurrent.locks.ReadWriteLock;
 import java.util.concurrent.locks.ReentrantReadWriteLock;
@@ -40,6 +41,10 @@ import org.openstreetmap.josm.gui.mappaint.StyleKeys;
 import org.openstreetmap.josm.gui.mappaint.StyleSetting;
 import org.openstreetmap.josm.gui.mappaint.StyleSetting.BooleanStyleSetting;
 import org.openstreetmap.josm.gui.mappaint.StyleSource;
+import org.openstreetmap.josm.gui.mappaint.mapcss.Condition.KeyCondition;
+import org.openstreetmap.josm.gui.mappaint.mapcss.Condition.KeyMatchType;
+import org.openstreetmap.josm.gui.mappaint.mapcss.Condition.KeyValueCondition;
+import org.openstreetmap.josm.gui.mappaint.mapcss.Condition.Op;
 import org.openstreetmap.josm.gui.mappaint.mapcss.Condition.SimpleKeyValueCondition;
 import org.openstreetmap.josm.gui.mappaint.mapcss.Selector.ChildOrParentSelector;
 import org.openstreetmap.josm.gui.mappaint.mapcss.Selector.GeneralSelector;
@@ -53,6 +58,9 @@ import org.openstreetmap.josm.tools.CheckParameterUtil;
 import org.openstreetmap.josm.tools.LanguageInfo;
 import org.openstreetmap.josm.tools.Utils;
 
+/**
+ * This is a mappaint style that is based on MapCSS rules.
+ */
 public class MapCSSStyleSource extends StyleSource {
 
     /**
@@ -121,34 +129,116 @@ public class MapCSSStyleSource extends StyleSource {
      *
      * Speeds up the process of finding all rules that match a certain primitive.
      *
-     * Rules with a {@link SimpleKeyValueCondition} [key=value] are indexed by
-     * key and value in a HashMap. Now you only need to loop the tags of a
-     * primitive to retrieve the possibly matching rules.
+     * Rules with a {@link SimpleKeyValueCondition} [key=value] or rules that require a specific key to be set are
+     * indexed. Now you only need to loop the tags of a primitive to retrieve the possibly matching rules.
      *
-     * Rules with no SimpleKeyValueCondition in the selector have to be
-     * checked separately.
-     *
-     * The order of rules gets mixed up by this and needs to be sorted later.
+     * To use this index, you need to {@link #add(MapCSSRule)} all rules to it. You then need to call
+     * {@link #initIndex()}. Afterwards, you can use {@link #getRuleCandidates(OsmPrimitive)} to get an iterator over
+     * all rules that might be applied to that primitive.
      */
     public static class MapCSSRuleIndex {
-        /* all rules for this index */
-        public final List<MapCSSRule> rules = new ArrayList<>();
-        /* tag based index */
-        public final Map<String,Map<String,Set<MapCSSRule>>> index = new HashMap<>();
-        /* rules without SimpleKeyValueCondition */
-        public final ArrayList<MapCSSRule> remaining = new ArrayList<>();
+        /**
+         * This is an iterator over all rules that are marked as possible in the bitset.
+         *
+         * @author Michael Zangl
+         */
+        private final class RuleCandidatesIterator implements Iterator<MapCSSRule> {
+            private final BitSet ruleCandidates;
+            private int next;
+
+            private RuleCandidatesIterator(BitSet ruleCandidates) {
+                this.ruleCandidates = ruleCandidates;
+                next = ruleCandidates.nextSetBit(0);
+            }
+
+            @Override
+            public boolean hasNext() {
+                return next >= 0;
+            }
+
+            @Override
+            public MapCSSRule next() {
+                MapCSSRule rule = rules.get(next);
+                next = ruleCandidates.nextSetBit(next + 1);
+                return rule;
+            }
+
+            @Override
+            public void remove() {
+                throw new UnsupportedOperationException();
+            }
+        }
+
+        /**
+         * This is a map of all rules that are only applied if the primitive has a given key (and possibly value)
+         *
+         * @author Michael Zangl
+         */
+        private static final class MapCSSKeyRules {
+            /**
+             * The indexes of rules that might be applied if this tag is present and the value has no special handling.
+             */
+            BitSet generalRules = new BitSet();
+
+            /**
+             * A map that sores the indexes of rules that might be applied if the key=value pair is present on this
+             * primitive. This includes all key=* rules.
+             */
+            Map<String, BitSet> specialRules = new HashMap<>();
+
+            public void addForKey(int ruleIndex) {
+                generalRules.set(ruleIndex);
+                for (BitSet r : specialRules.values()) {
+                    r.set(ruleIndex);
+                }
+            }
+
+            public void addForKeyAndValue(String value, int ruleIndex) {
+                BitSet forValue = specialRules.get(value);
+                if (forValue == null) {
+                    forValue = new BitSet();
+                    forValue.or(generalRules);
+                    specialRules.put(value.intern(), forValue);
+                }
+                forValue.set(ruleIndex);
+            }
+
+            public BitSet get(String value) {
+                BitSet forValue = specialRules.get(value);
+                if (forValue != null) return forValue; else return generalRules;
+            }
+        }
+
+        /**
+         * All rules this index is for. Once this index is built, this list is sorted.
+         */
+        private final List<MapCSSRule> rules = new ArrayList<>();
+        /**
+         * All rules that only apply when the given key is present.
+         */
+        private final Map<String, MapCSSKeyRules> index = new HashMap<>();
+        /**
+         * Rules that do not require any key to be present. Only the index in the {@link #rules} array is stored.
+         */
+        private final BitSet remaining = new BitSet();
 
+        /**
+         * Add a rule to this index. This needs to be called before {@link #initIndex()} is called.
+         * @param rule The rule to add.
+         */
         public void add(MapCSSRule rule) {
             rules.add(rule);
         }
 
         /**
          * Initialize the index.
-         *
+         * <p>
          * You must own the write lock of STYLE_SOURCE_LOCK when calling this method.
          */
         public void initIndex() {
-            for (MapCSSRule r: rules) {
+            Collections.sort(rules);
+            for (int ruleIndex = 0; ruleIndex < rules.size(); ruleIndex++) {
+                MapCSSRule r = rules.get(ruleIndex);
                 // find the rightmost selector, this must be a GeneralSelector
                 Selector selRightmost = r.selector;
                 while (selRightmost instanceof ChildOrParentSelector) {
@@ -156,55 +246,88 @@ public class MapCSSStyleSource extends StyleSource {
                 }
                 OptimizedGeneralSelector s = (OptimizedGeneralSelector) selRightmost;
                 if (s.conds == null) {
-                    remaining.add(r);
+                    remaining.set(ruleIndex);
                     continue;
                 }
-                List<SimpleKeyValueCondition> sk = new ArrayList<>(Utils.filteredCollection(s.conds, SimpleKeyValueCondition.class));
-                if (sk.isEmpty()) {
-                    remaining.add(r);
-                    continue;
-                }
-                SimpleKeyValueCondition c = sk.get(sk.size() - 1);
-                Map<String,Set<MapCSSRule>> rulesWithMatchingKey = index.get(c.k);
-                if (rulesWithMatchingKey == null) {
-                    rulesWithMatchingKey = new HashMap<>();
-                    index.put(c.k, rulesWithMatchingKey);
-                }
-                Set<MapCSSRule> rulesWithMatchingKeyValue = rulesWithMatchingKey.get(c.v);
-                if (rulesWithMatchingKeyValue == null) {
-                    rulesWithMatchingKeyValue = new HashSet<>();
-                    rulesWithMatchingKey.put(c.v, rulesWithMatchingKeyValue);
+                List<SimpleKeyValueCondition> sk = new ArrayList<>(Utils.filteredCollection(s.conds,
+                        SimpleKeyValueCondition.class));
+                if (!sk.isEmpty()) {
+                    SimpleKeyValueCondition c = sk.get(sk.size() - 1);
+                    getEntryInIndex(c.k).addForKeyAndValue(c.v, ruleIndex);
+                } else {
+                    String key = findAnyRequiredKey(s.conds);
+                    if (key != null) {
+                        getEntryInIndex(key).addForKey(ruleIndex);
+                    } else {
+                        remaining.set(ruleIndex);
+                    }
                 }
-                rulesWithMatchingKeyValue.add(r);
             }
-            Collections.sort(remaining);
         }
 
         /**
-         * Get a subset of all rules that might match the primitive.
-         * @param osm the primitive to match
-         * @return a Collection of rules that filters out most of the rules
-         * that cannot match, based on the tags of the primitive
+         * Search for any key that condition might depend on.
          *
+         * @param conds The conditions to search through.
+         * @return An arbitrary key this rule depends on or <code>null</code> if there is no such key.
+         */
+        private String findAnyRequiredKey(List<Condition> conds) {
+            String key = null;
+            for (Condition c : conds) {
+                if (c instanceof KeyCondition) {
+                    KeyCondition keyCondition = (KeyCondition) c;
+                    if (!keyCondition.negateResult && conditionRequiresKeyPresence(keyCondition.matchType)) {
+                        key = keyCondition.label;
+                    }
+                } else if (c instanceof KeyValueCondition) {
+                    KeyValueCondition keyValueCondition = (KeyValueCondition) c;
+                    if (!Op.NEGATED_OPS.contains(keyValueCondition)) {
+                        key = keyValueCondition.k;
+                    }
+                }
+            }
+            return key;
+        }
+
+        private boolean conditionRequiresKeyPresence(KeyMatchType matchType) {
+            return matchType != KeyMatchType.REGEX;
+        }
+
+        private MapCSSKeyRules getEntryInIndex(String key) {
+            MapCSSKeyRules rulesWithMatchingKey = index.get(key);
+            if (rulesWithMatchingKey == null) {
+                rulesWithMatchingKey = new MapCSSKeyRules();
+                index.put(key.intern(), rulesWithMatchingKey);
+            }
+            return rulesWithMatchingKey;
+        }
+
+        /**
+         * Get a subset of all rules that might match the primitive. Rules not included in the result are guaranteed to
+         * not match this primitive.
+         * <p>
          * You must have a read lock of STYLE_SOURCE_LOCK when calling this method.
+         *
+         * @param osm the primitive to match
+         * @return An iterator over possible rules in the right order.
          */
-        public PriorityQueue<MapCSSRule> getRuleCandidates(OsmPrimitive osm) {
-            PriorityQueue<MapCSSRule> ruleCandidates = new PriorityQueue<>(remaining);
-            for (Map.Entry<String,String> e : osm.getKeys().entrySet()) {
-                Map<String,Set<MapCSSRule>> v = index.get(e.getKey());
+        public Iterator<MapCSSRule> getRuleCandidates(OsmPrimitive osm) {
+            final BitSet ruleCandidates = new BitSet(rules.size());
+            ruleCandidates.or(remaining);
+
+            for (Map.Entry<String, String> e : osm.getKeys().entrySet()) {
+                MapCSSKeyRules v = index.get(e.getKey());
                 if (v != null) {
-                    Set<MapCSSRule> rs = v.get(e.getValue());
-                    if (rs != null)  {
-                        ruleCandidates.addAll(rs);
-                    }
+                    BitSet rs = v.get(e.getValue());
+                    ruleCandidates.or(rs);
                 }
             }
-            return ruleCandidates;
+            return new RuleCandidatesIterator(ruleCandidates);
         }
 
         /**
          * Clear the index.
-         *
+         * <p>
          * You must own the write lock STYLE_SOURCE_LOCK when calling this method.
          */
         public void clear() {
@@ -214,10 +337,20 @@ public class MapCSSStyleSource extends StyleSource {
         }
     }
 
+    /**
+     * Constructs a new, active {@link MapCSSStyleSource}.
+     * @param url URL that {@link org.openstreetmap.josm.io.CachedFile} understands
+     * @param name The name for this StyleSource
+     * @param shortdescription The title for that source.
+     */
     public MapCSSStyleSource(String url, String name, String shortdescription) {
         super(url, name, shortdescription);
     }
 
+    /**
+     * Constructs a new {@link MapCSSStyleSource}
+     * @param entry The entry to copy the data (url, name, ...) from.
+     */
     public MapCSSStyleSource(SourceEntry entry) {
         super(entry);
     }
@@ -227,9 +360,9 @@ public class MapCSSStyleSource extends StyleSource {
      * {@code css}</p>
      *
      * @param css the MapCSS style declaration. Must not be null.
-     * @throws IllegalArgumentException thrown if {@code css} is null
+     * @throws IllegalArgumentException if {@code css} is null
      */
-    public MapCSSStyleSource(String css) throws IllegalArgumentException{
+    public MapCSSStyleSource(String css) {
         super(null, null, null);
         CheckParameterUtil.ensureParameterNotNull(css);
         this.css = css;
@@ -488,9 +621,9 @@ public class MapCSSStyleSource extends StyleSource {
         // last used index
         int lastDeclUsed = -1;
 
-        PriorityQueue<MapCSSRule> candidates = matchingRuleIndex.getRuleCandidates(osm);
-        MapCSSRule r;
-        while ((r = candidates.poll()) != null) {
+        Iterator<MapCSSRule> candidates = matchingRuleIndex.getRuleCandidates(osm);
+        while (candidates.hasNext()) {
+            MapCSSRule r = candidates.next();
             env.clearSelectorMatchingInformation();
             env.layer = null;
             String sub = env.layer = r.selector.getSubpart().getId(env);
@@ -503,7 +636,8 @@ public class MapCSSStyleSource extends StyleSource {
                     continue;
                 }
 
-                if (r.declaration.idx == lastDeclUsed) continue; // don't apply one declaration more than once
+                if (r.declaration.idx == lastDeclUsed)
+                    continue; // don't apply one declaration more than once
                 lastDeclUsed = r.declaration.idx;
                 if ("*".equals(sub)) {
                     for (Entry<String, Cascade> entry : mc.getLayers()) {
diff --git a/src/org/openstreetmap/josm/gui/mappaint/mapcss/Selector.java b/src/org/openstreetmap/josm/gui/mappaint/mapcss/Selector.java
index 7cbef1d..75bd995 100644
--- a/src/org/openstreetmap/josm/gui/mappaint/mapcss/Selector.java
+++ b/src/org/openstreetmap/josm/gui/mappaint/mapcss/Selector.java
@@ -235,7 +235,7 @@ public interface Selector {
                 public void visit(Relation r) {
                     if (left.matches(e.withPrimitive(r))) {
                         final List<Node> openEnds = MultipolygonCache.getInstance().get(Main.map.mapView, r).getOpenEnds();
-                        final int openEndIndex = openEnds.indexOf((Node) e.osm);
+                        final int openEndIndex = openEnds.indexOf(e.osm);
                         if (openEndIndex >= 0) {
                             e.parent = r;
                             e.index = openEndIndex;
@@ -633,7 +633,7 @@ public interface Selector {
             return new Range(lower, upper);
         }
 
-        static final double R = 6378135;
+        private static final double R = 6378135;
 
         public static double level2scale(int lvl) {
             if (lvl < 0)
diff --git a/src/org/openstreetmap/josm/gui/mappaint/xml/XmlStyleSource.java b/src/org/openstreetmap/josm/gui/mappaint/xml/XmlStyleSource.java
index afa6dee..7136b12 100644
--- a/src/org/openstreetmap/josm/gui/mappaint/xml/XmlStyleSource.java
+++ b/src/org/openstreetmap/josm/gui/mappaint/xml/XmlStyleSource.java
@@ -185,7 +185,7 @@ public class XmlStyleSource extends StyleSource implements StyleKeys {
      */
     private void get(OsmPrimitive primitive, boolean closed, WayPrototypesRecord p, Double scale, MultiCascade mc) {
         String lineIdx = null;
-        HashMap<String, LinemodPrototype> overlayMap = new HashMap<>();
+        Map<String, LinemodPrototype> overlayMap = new HashMap<>();
         boolean isNotArea = primitive.isKeyFalse("area");
         for (String key : primitive.keySet()) {
             String val = primitive.get(key);
diff --git a/src/org/openstreetmap/josm/gui/mappaint/xml/XmlStyleSourceHandler.java b/src/org/openstreetmap/josm/gui/mappaint/xml/XmlStyleSourceHandler.java
index 0d8138c..f977cf2 100644
--- a/src/org/openstreetmap/josm/gui/mappaint/xml/XmlStyleSourceHandler.java
+++ b/src/org/openstreetmap/josm/gui/mappaint/xml/XmlStyleSourceHandler.java
@@ -18,17 +18,17 @@ public class XmlStyleSourceHandler extends DefaultHandler {
     private boolean hadLine, hadLineMod, hadIcon, hadArea;
     private RuleElem rule = new RuleElem();
 
-    XmlStyleSource style;
+    private XmlStyleSource style;
 
     static class RuleElem {
-        XmlCondition cond = new XmlCondition();
-        Collection<XmlCondition> conditions;
-        double scaleMax;
-        double scaleMin;
-        LinePrototype line = new LinePrototype();
-        LinemodPrototype linemod = new LinemodPrototype();
-        AreaPrototype area = new AreaPrototype();
-        IconPrototype icon = new IconPrototype();
+        private XmlCondition cond = new XmlCondition();
+        private Collection<XmlCondition> conditions;
+        private double scaleMax;
+        private double scaleMin;
+        private LinePrototype line = new LinePrototype();
+        private LinemodPrototype linemod = new LinemodPrototype();
+        private AreaPrototype area = new AreaPrototype();
+        private IconPrototype icon = new IconPrototype();
         public void init() {
             conditions = null;
             scaleMax = Double.POSITIVE_INFINITY;
diff --git a/src/org/openstreetmap/josm/gui/oauth/AbstractAuthorizationUI.java b/src/org/openstreetmap/josm/gui/oauth/AbstractAuthorizationUI.java
index aea7478..15c5056 100644
--- a/src/org/openstreetmap/josm/gui/oauth/AbstractAuthorizationUI.java
+++ b/src/org/openstreetmap/josm/gui/oauth/AbstractAuthorizationUI.java
@@ -1,6 +1,8 @@
 // License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.gui.oauth;
 
+import java.util.Objects;
+
 import org.openstreetmap.josm.data.Preferences;
 import org.openstreetmap.josm.data.oauth.OAuthParameters;
 import org.openstreetmap.josm.data.oauth.OAuthToken;
@@ -20,7 +22,7 @@ public abstract class AbstractAuthorizationUI extends VerticallyScrollablePanel
 
     private String apiUrl;
     private final AdvancedOAuthPropertiesPanel pnlAdvancedProperties;
-    private OAuthToken accessToken;
+    private transient OAuthToken accessToken;
 
     protected void fireAccessTokenChanged(OAuthToken oldValue, OAuthToken newValue) {
         firePropertyChange(ACCESS_TOKEN_PROP, oldValue, newValue);
@@ -98,7 +100,7 @@ public abstract class AbstractAuthorizationUI extends VerticallyScrollablePanel
             fireAccessTokenChanged(oldValue, this.accessToken);
         } else if (oldValue == null && this.accessToken == null) {
             // no change - don't fire an event
-        } else if (! oldValue.equals(this.accessToken)) {
+        } else if (!Objects.equals(oldValue, this.accessToken)) {
             fireAccessTokenChanged(oldValue, this.accessToken);
         }
     }
@@ -124,9 +126,9 @@ public abstract class AbstractAuthorizationUI extends VerticallyScrollablePanel
      * Initializes the authorisation UI with preference values in <code>pref</code>.
      *
      * @param pref the preferences. Must not be null.
-     * @throws IllegalArgumentException thrown if pref is null
+     * @throws IllegalArgumentException if pref is null
      */
-    public void initFromPreferences(Preferences pref) throws IllegalArgumentException{
+    public void initFromPreferences(Preferences pref) {
         CheckParameterUtil.ensureParameterNotNull(pref, "pref");
         pnlAdvancedProperties.initFromPreferences(pref);
     }
diff --git a/src/org/openstreetmap/josm/gui/oauth/AdvancedOAuthPropertiesPanel.java b/src/org/openstreetmap/josm/gui/oauth/AdvancedOAuthPropertiesPanel.java
index 27d0905..7fee8a3 100644
--- a/src/org/openstreetmap/josm/gui/oauth/AdvancedOAuthPropertiesPanel.java
+++ b/src/org/openstreetmap/josm/gui/oauth/AdvancedOAuthPropertiesPanel.java
@@ -47,7 +47,7 @@ public class AdvancedOAuthPropertiesPanel extends VerticallyScrollablePanel {
     private JosmTextField tfRequestTokenURL;
     private JosmTextField tfAccessTokenURL;
     private JosmTextField tfAuthoriseURL;
-    private UseDefaultItemListener ilUseDefault;
+    private transient UseDefaultItemListener ilUseDefault;
     private String apiUrl;
 
     protected final void build() {
@@ -205,9 +205,9 @@ public class AdvancedOAuthPropertiesPanel extends VerticallyScrollablePanel {
      * Sets the advanced parameters to be displayed
      *
      * @param parameters the advanced parameters. Must not be null.
-     * @throws IllegalArgumentException thrown if parameters is null.
+     * @throws IllegalArgumentException if parameters is null.
      */
-    public void setAdvancedParameters(OAuthParameters parameters) throws IllegalArgumentException{
+    public void setAdvancedParameters(OAuthParameters parameters) {
         CheckParameterUtil.ensureParameterNotNull(parameters, "parameters");
         if (parameters.equals(OAuthParameters.createDefault(apiUrl))) {
             cbUseDefaults.setSelected(true);
@@ -234,9 +234,9 @@ public class AdvancedOAuthPropertiesPanel extends VerticallyScrollablePanel {
      * Initializes the panel from the values in the preferences <code>preferences</code>.
      *
      * @param pref the preferences. Must not be null.
-     * @throws IllegalArgumentException thrown if pref is null
+     * @throws IllegalArgumentException if pref is null
      */
-    public void initFromPreferences(Preferences pref) throws IllegalArgumentException {
+    public void initFromPreferences(Preferences pref) {
         CheckParameterUtil.ensureParameterNotNull(pref, "pref");
         setApiUrl(pref.get("osm-server.url"));
         boolean useDefault = pref.getBoolean("oauth.settings.use-default", true);
@@ -259,9 +259,9 @@ public class AdvancedOAuthPropertiesPanel extends VerticallyScrollablePanel {
      * Remembers the current values in the preferences <code>pref</code>.
      *
      * @param pref the preferences. Must not be null.
-     * @throws IllegalArgumentException thrown if pref is null.
+     * @throws IllegalArgumentException if pref is null.
      */
-    public void rememberPreferences(Preferences pref) throws IllegalArgumentException  {
+    public void rememberPreferences(Preferences pref) {
         CheckParameterUtil.ensureParameterNotNull(pref, "pref");
         pref.put("oauth.settings.use-default", cbUseDefaults.isSelected());
         if (cbUseDefaults.isSelected()) {
diff --git a/src/org/openstreetmap/josm/gui/oauth/FullyAutomaticAuthorizationUI.java b/src/org/openstreetmap/josm/gui/oauth/FullyAutomaticAuthorizationUI.java
index cee3f79..dc59459 100644
--- a/src/org/openstreetmap/josm/gui/oauth/FullyAutomaticAuthorizationUI.java
+++ b/src/org/openstreetmap/josm/gui/oauth/FullyAutomaticAuthorizationUI.java
@@ -59,8 +59,8 @@ public class FullyAutomaticAuthorizationUI extends AbstractAuthorizationUI {
 
     private JosmTextField tfUserName;
     private JosmPasswordField tfPassword;
-    private UserNameValidator valUserName;
-    private PasswordValidator valPassword;
+    private transient UserNameValidator valUserName;
+    private transient PasswordValidator valPassword;
     private AccessTokenInfoPanel pnlAccessTokenInfo;
     private OsmPrivilegesPanel pnlOsmPrivileges;
     private JPanel pnlPropertiesPanel;
diff --git a/src/org/openstreetmap/josm/gui/oauth/ManualAuthorizationUI.java b/src/org/openstreetmap/josm/gui/oauth/ManualAuthorizationUI.java
index e6475a1..be8cc4a 100644
--- a/src/org/openstreetmap/josm/gui/oauth/ManualAuthorizationUI.java
+++ b/src/org/openstreetmap/josm/gui/oauth/ManualAuthorizationUI.java
@@ -28,9 +28,9 @@ import org.openstreetmap.josm.gui.SideButton;
 import org.openstreetmap.josm.gui.preferences.server.OAuthAccessTokenHolder;
 import org.openstreetmap.josm.gui.widgets.AbstractTextComponentValidator;
 import org.openstreetmap.josm.gui.widgets.HtmlPanel;
+import org.openstreetmap.josm.gui.widgets.JosmTextField;
 import org.openstreetmap.josm.gui.widgets.SelectAllOnFocusGainedDecorator;
 import org.openstreetmap.josm.tools.ImageProvider;
-import org.openstreetmap.josm.gui.widgets.JosmTextField;
 
 /**
  * This is an UI which supports a JOSM user to get an OAuth Access Token in a fully
@@ -41,9 +41,9 @@ import org.openstreetmap.josm.gui.widgets.JosmTextField;
 public class ManualAuthorizationUI extends AbstractAuthorizationUI{
 
     private JosmTextField tfAccessTokenKey;
-    private AccessTokenKeyValidator valAccessTokenKey;
+    private transient AccessTokenKeyValidator valAccessTokenKey;
     private JosmTextField tfAccessTokenSecret;
-    private AccessTokenSecretValidator valAccessTokenSecret;
+    private transient AccessTokenSecretValidator valAccessTokenSecret;
     private JCheckBox cbSaveToPreferences;
     private HtmlPanel pnlMessage;
 
@@ -176,7 +176,7 @@ public class ManualAuthorizationUI extends AbstractAuthorizationUI{
 
     private static class AccessTokenKeyValidator extends AbstractTextComponentValidator {
 
-        public AccessTokenKeyValidator(JTextComponent tc) throws IllegalArgumentException {
+        public AccessTokenKeyValidator(JTextComponent tc) {
             super(tc);
         }
 
@@ -196,7 +196,7 @@ public class ManualAuthorizationUI extends AbstractAuthorizationUI{
     }
 
     private static class AccessTokenSecretValidator extends AbstractTextComponentValidator {
-        public AccessTokenSecretValidator(JTextComponent tc) throws IllegalArgumentException {
+        public AccessTokenSecretValidator(JTextComponent tc) {
             super(tc);
         }
 
diff --git a/src/org/openstreetmap/josm/gui/oauth/OAuthAuthorizationWizard.java b/src/org/openstreetmap/josm/gui/oauth/OAuthAuthorizationWizard.java
index 9f12da7..881de82 100644
--- a/src/org/openstreetmap/josm/gui/oauth/OAuthAuthorizationWizard.java
+++ b/src/org/openstreetmap/josm/gui/oauth/OAuthAuthorizationWizard.java
@@ -205,9 +205,9 @@ public class OAuthAuthorizationWizard extends JDialog {
      * Creates the wizard.
      *
      * @param apiUrl the API URL. Must not be null.
-     * @throws IllegalArgumentException thrown if apiUrl is null
+     * @throws IllegalArgumentException if apiUrl is null
      */
-    public OAuthAuthorizationWizard(String apiUrl) throws IllegalArgumentException {
+    public OAuthAuthorizationWizard(String apiUrl) {
         this(Main.parent, apiUrl);
     }
 
@@ -216,7 +216,7 @@ public class OAuthAuthorizationWizard extends JDialog {
      *
      * @param parent the component relative to which the dialog is displayed
      * @param apiUrl the API URL. Must not be null.
-     * @throws IllegalArgumentException thrown if apiUrl is null
+     * @throws IllegalArgumentException if apiUrl is null
      */
     public OAuthAuthorizationWizard(Component parent, String apiUrl) {
         super(JOptionPane.getFrameForComponent(parent), ModalityType.DOCUMENT_MODAL);
@@ -332,7 +332,7 @@ public class OAuthAuthorizationWizard extends JDialog {
     }
 
     class AcceptAccessTokenAction extends AbstractAction implements PropertyChangeListener {
-        private OAuthToken token;
+        private transient OAuthToken token;
 
         public AcceptAccessTokenAction() {
             putValue(NAME, tr("Accept Access Token"));
diff --git a/src/org/openstreetmap/josm/gui/oauth/OsmOAuthAuthorizationClient.java b/src/org/openstreetmap/josm/gui/oauth/OsmOAuthAuthorizationClient.java
index 553706d..56bf2f3 100644
--- a/src/org/openstreetmap/josm/gui/oauth/OsmOAuthAuthorizationClient.java
+++ b/src/org/openstreetmap/josm/gui/oauth/OsmOAuthAuthorizationClient.java
@@ -8,12 +8,10 @@ import java.io.DataOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.InputStreamReader;
-import java.io.UnsupportedEncodingException;
 import java.lang.reflect.Field;
 import java.net.HttpURLConnection;
 import java.net.MalformedURLException;
 import java.net.URL;
-import java.net.URLEncoder;
 import java.nio.charset.StandardCharsets;
 import java.util.HashMap;
 import java.util.Iterator;
@@ -51,9 +49,9 @@ public class OsmOAuthAuthorizationClient {
     private HttpURLConnection connection;
 
     private static class SessionId {
-        String id;
-        String token;
-        String userName;
+        private String id;
+        private String token;
+        private String userName;
     }
 
     /**
@@ -72,7 +70,7 @@ public class OsmOAuthAuthorizationClient {
      * @param parameters the OAuth parameters. Must not be null.
      * @throws IllegalArgumentException if parameters is null
      */
-    public OsmOAuthAuthorizationClient(OAuthParameters parameters) throws IllegalArgumentException {
+    public OsmOAuthAuthorizationClient(OAuthParameters parameters) {
         CheckParameterUtil.ensureParameterNotNull(parameters, "parameters");
         oauthProviderParameters = new OAuthParameters(parameters);
         consumer = oauthProviderParameters.buildConsumer();
@@ -88,7 +86,7 @@ public class OsmOAuthAuthorizationClient {
      * @throws IllegalArgumentException if parameters is null
      * @throws IllegalArgumentException if requestToken is null
      */
-    public OsmOAuthAuthorizationClient(OAuthParameters parameters, OAuthToken requestToken) throws IllegalArgumentException {
+    public OsmOAuthAuthorizationClient(OAuthParameters parameters, OAuthToken requestToken) {
         CheckParameterUtil.ensureParameterNotNull(parameters, "parameters");
         oauthProviderParameters = new OAuthParameters(parameters);
         consumer = oauthProviderParameters.buildConsumer();
@@ -250,22 +248,18 @@ public class OsmOAuthAuthorizationClient {
     }
 
     protected String buildPostRequest(Map<String,String> parameters) throws OsmOAuthAuthorizationException {
-        try {
-            StringBuilder sb = new StringBuilder();
+        StringBuilder sb = new StringBuilder();
 
-            for(Iterator<Entry<String,String>> it = parameters.entrySet().iterator(); it.hasNext();) {
-                Entry<String,String> entry = it.next();
-                String value = entry.getValue();
-                value = (value == null) ? "" : value;
-                sb.append(entry.getKey()).append("=").append(URLEncoder.encode(value, "UTF-8"));
-                if (it.hasNext()) {
-                    sb.append("&");
-                }
+        for(Iterator<Entry<String,String>> it = parameters.entrySet().iterator(); it.hasNext();) {
+            Entry<String,String> entry = it.next();
+            String value = entry.getValue();
+            value = (value == null) ? "" : value;
+            sb.append(entry.getKey()).append("=").append(Utils.encodeUrl(value));
+            if (it.hasNext()) {
+                sb.append("&");
             }
-            return sb.toString();
-        } catch(UnsupportedEncodingException e) {
-            throw new OsmOAuthAuthorizationException(e);
         }
+        return sb.toString();
     }
 
     /**
@@ -509,7 +503,7 @@ public class OsmOAuthAuthorizationClient {
      * @throws OsmOAuthAuthorizationException if the authorisation fails
      * @throws OsmTransferCanceledException if the task is canceled by the user
      */
-    public void authorise(OAuthToken requestToken, String osmUserName, String osmPassword, OsmPrivileges privileges, ProgressMonitor monitor) throws IllegalArgumentException, OsmOAuthAuthorizationException, OsmTransferCanceledException{
+    public void authorise(OAuthToken requestToken, String osmUserName, String osmPassword, OsmPrivileges privileges, ProgressMonitor monitor) throws OsmOAuthAuthorizationException, OsmTransferCanceledException{
         CheckParameterUtil.ensureParameterNotNull(requestToken, "requestToken");
         CheckParameterUtil.ensureParameterNotNull(osmUserName, "osmUserName");
         CheckParameterUtil.ensureParameterNotNull(osmPassword, "osmPassword");
diff --git a/src/org/openstreetmap/josm/gui/oauth/RetrieveAccessTokenTask.java b/src/org/openstreetmap/josm/gui/oauth/RetrieveAccessTokenTask.java
index 978b537..c2360c3 100644
--- a/src/org/openstreetmap/josm/gui/oauth/RetrieveAccessTokenTask.java
+++ b/src/org/openstreetmap/josm/gui/oauth/RetrieveAccessTokenTask.java
@@ -39,8 +39,8 @@ public class RetrieveAccessTokenTask extends PleaseWaitRunnable {
      * is displayed
      * @param parameters the OAuth parameters. Must not be null.
      * @param requestToken the request token for which an Access Token is retrieved. Must not be null.
-     * @throws IllegalArgumentException thrown if parameters is null.
-     * @throws IllegalArgumentException thrown if requestToken is null.
+     * @throws IllegalArgumentException if parameters is null.
+     * @throws IllegalArgumentException if requestToken is null.
      */
     public RetrieveAccessTokenTask(Component parent, OAuthParameters parameters, OAuthToken requestToken) {
         super(parent, tr("Retrieving OAuth Access Token..."), false /* don't ignore exceptions */);
diff --git a/src/org/openstreetmap/josm/gui/oauth/RetrieveRequestTokenTask.java b/src/org/openstreetmap/josm/gui/oauth/RetrieveRequestTokenTask.java
index b7702ce..24afda9 100644
--- a/src/org/openstreetmap/josm/gui/oauth/RetrieveRequestTokenTask.java
+++ b/src/org/openstreetmap/josm/gui/oauth/RetrieveRequestTokenTask.java
@@ -36,7 +36,7 @@ public class RetrieveRequestTokenTask extends PleaseWaitRunnable {
      * @param parent the parent component relative to which the {@link PleaseWaitRunnable}-Dialog
      * is displayed
      * @param parameters the OAuth parameters. Must not be null.
-     * @throws IllegalArgumentException thrown if parameters is null.
+     * @throws IllegalArgumentException if parameters is null.
      */
     public RetrieveRequestTokenTask(Component parent, OAuthParameters parameters ) {
         super(parent, tr("Retrieving OAuth Request Token..."), false /* don't ignore exceptions */);
diff --git a/src/org/openstreetmap/josm/gui/oauth/SemiAutomaticAuthorizationUI.java b/src/org/openstreetmap/josm/gui/oauth/SemiAutomaticAuthorizationUI.java
index add3d32..9225f80 100644
--- a/src/org/openstreetmap/josm/gui/oauth/SemiAutomaticAuthorizationUI.java
+++ b/src/org/openstreetmap/josm/gui/oauth/SemiAutomaticAuthorizationUI.java
@@ -27,9 +27,9 @@ import org.openstreetmap.josm.gui.SideButton;
 import org.openstreetmap.josm.gui.preferences.server.OAuthAccessTokenHolder;
 import org.openstreetmap.josm.gui.widgets.HtmlPanel;
 import org.openstreetmap.josm.gui.widgets.JMultilineLabel;
+import org.openstreetmap.josm.gui.widgets.JosmTextField;
 import org.openstreetmap.josm.tools.ImageProvider;
 import org.openstreetmap.josm.tools.OpenBrowser;
-import org.openstreetmap.josm.gui.widgets.JosmTextField;
 
 /**
  * This is the UI for running a semic-automic authorisation procedure.
@@ -41,7 +41,7 @@ import org.openstreetmap.josm.gui.widgets.JosmTextField;
  */
 public class SemiAutomaticAuthorizationUI extends AbstractAuthorizationUI {
     private AccessTokenInfoPanel pnlAccessTokenInfo;
-    private OAuthToken requestToken;
+    private transient OAuthToken requestToken;
 
     private RetrieveRequestTokenPanel pnlRetrieveRequestToken;
     private RetrieveAccessTokenPanel pnlRetrieveAccessToken;
diff --git a/src/org/openstreetmap/josm/gui/preferences/PreferenceTabbedPane.java b/src/org/openstreetmap/josm/gui/preferences/PreferenceTabbedPane.java
index 88c9348..d26049b 100644
--- a/src/org/openstreetmap/josm/gui/preferences/PreferenceTabbedPane.java
+++ b/src/org/openstreetmap/josm/gui/preferences/PreferenceTabbedPane.java
@@ -91,7 +91,7 @@ public final class PreferenceTabbedPane extends JTabbedPane implements MouseWhee
     }
 
     public static final class PreferencePanel extends JPanel implements PreferenceTab {
-        private final TabPreferenceSetting preferenceSetting;
+        private final transient TabPreferenceSetting preferenceSetting;
 
         private PreferencePanel(TabPreferenceSetting preferenceSetting) {
             super(new GridBagLayout());
@@ -121,7 +121,7 @@ public final class PreferenceTabbedPane extends JTabbedPane implements MouseWhee
     }
 
     public static final class PreferenceScrollPane extends JScrollPane implements PreferenceTab {
-        private final TabPreferenceSetting preferenceSetting;
+        private final transient TabPreferenceSetting preferenceSetting;
 
         private PreferenceScrollPane(Component view, TabPreferenceSetting preferenceSetting) {
             super(view);
@@ -144,15 +144,15 @@ public final class PreferenceTabbedPane extends JTabbedPane implements MouseWhee
     }
 
     // all created tabs
-    private final List<PreferenceTab> tabs = new ArrayList<>();
+    private final transient List<PreferenceTab> tabs = new ArrayList<>();
     private static final Collection<PreferenceSettingFactory> settingsFactories = new LinkedList<>();
     private static final PreferenceSettingFactory advancedPreferenceFactory = new AdvancedPreference.Factory();
-    private final List<PreferenceSetting> settings = new ArrayList<>();
+    private final transient List<PreferenceSetting> settings = new ArrayList<>();
 
     // distinct list of tabs that have been initialized (we do not initialize tabs until they are displayed to speed up dialog startup)
-    private final List<PreferenceSetting> settingsInitialized = new ArrayList<>();
+    private final transient List<PreferenceSetting> settingsInitialized = new ArrayList<>();
 
-    List<ValidationListener> validationListeners = new ArrayList<>();
+    final transient List<ValidationListener> validationListeners = new ArrayList<>();
 
     /**
      * Add validation listener to currently open preferences dialog. Calling to removeValidationListener is not necessary, all listeners will
@@ -402,7 +402,7 @@ public final class PreferenceTabbedPane extends JTabbedPane implements MouseWhee
                             }
                         }
                     } while (removed);
-                    
+
                     if (!toLoad.isEmpty()) {
                         PluginHandler.loadPlugins(PreferenceTabbedPane.this, toLoad, null);
                     }
diff --git a/src/org/openstreetmap/josm/gui/preferences/SourceEditor.java b/src/org/openstreetmap/josm/gui/preferences/SourceEditor.java
index b05232e..794bdac 100644
--- a/src/org/openstreetmap/josm/gui/preferences/SourceEditor.java
+++ b/src/org/openstreetmap/josm/gui/preferences/SourceEditor.java
@@ -9,7 +9,6 @@ import java.awt.Dimension;
 import java.awt.Font;
 import java.awt.GridBagConstraints;
 import java.awt.GridBagLayout;
-import java.awt.Image;
 import java.awt.Insets;
 import java.awt.Rectangle;
 import java.awt.event.ActionEvent;
@@ -49,7 +48,6 @@ import javax.swing.Box;
 import javax.swing.DefaultListModel;
 import javax.swing.DefaultListSelectionModel;
 import javax.swing.Icon;
-import javax.swing.ImageIcon;
 import javax.swing.JButton;
 import javax.swing.JCheckBox;
 import javax.swing.JComponent;
@@ -95,7 +93,9 @@ import org.openstreetmap.josm.io.CachedFile;
 import org.openstreetmap.josm.io.OnlineResource;
 import org.openstreetmap.josm.io.OsmTransferException;
 import org.openstreetmap.josm.tools.GBC;
+import org.openstreetmap.josm.tools.ImageOverlay;
 import org.openstreetmap.josm.tools.ImageProvider;
+import org.openstreetmap.josm.tools.ImageProvider.ImageSizes;
 import org.openstreetmap.josm.tools.LanguageInfo;
 import org.openstreetmap.josm.tools.Utils;
 import org.xml.sax.SAXException;
@@ -110,7 +110,7 @@ public abstract class SourceEditor extends JPanel {
     protected final JList<ExtendedSourceEntry> lstAvailableSources;
     protected final AvailableSourcesListModel availableSourcesModel;
     protected final String availableSourcesUrl;
-    protected final List<SourceProvider> sourceProviders;
+    protected final transient List<SourceProvider> sourceProviders;
 
     protected JTable tblIconPaths;
     protected IconPathTableModel iconPathsModel;
@@ -446,7 +446,7 @@ public abstract class SourceEditor extends JPanel {
     }
 
     protected static class AvailableSourcesListModel extends DefaultListModel<ExtendedSourceEntry> {
-        private List<ExtendedSourceEntry> data;
+        private transient List<ExtendedSourceEntry> data;
         private DefaultListSelectionModel selectionModel;
 
         public AvailableSourcesListModel(DefaultListSelectionModel selectionModel) {
@@ -498,7 +498,7 @@ public abstract class SourceEditor extends JPanel {
     }
 
     protected class ActiveSourcesModel extends AbstractTableModel {
-        private List<SourceEntry> data;
+        private transient List<SourceEntry> data;
         private DefaultListSelectionModel selectionModel;
 
         public ActiveSourcesModel(DefaultListSelectionModel selectionModel) {
@@ -938,7 +938,7 @@ public abstract class SourceEditor extends JPanel {
      * The action to move the currently selected entries up or down in the list.
      */
     class MoveUpDownAction extends AbstractAction implements ListSelectionListener, TableModelListener {
-        final int increment;
+        private final int increment;
         public MoveUpDownAction(boolean isDown) {
             increment = isDown ? 1 : -1;
             putValue(SMALL_ICON, isDown ? ImageProvider.get("dialogs", "down") : ImageProvider.get("dialogs", "up"));
@@ -1001,10 +1001,8 @@ public abstract class SourceEditor extends JPanel {
                     ExtendedDialog dlg = new ExtendedDialog(Main.parent, tr("Warning"), new String [] { tr("Cancel"), tr("Continue anyway") });
                     dlg.setButtonIcons(new Icon[] {
                         ImageProvider.get("cancel"),
-                        ImageProvider.overlay(
-                            ImageProvider.get("ok"),
-                            new ImageIcon(ImageProvider.get("warning-small").getImage().getScaledInstance(12 , 12, Image.SCALE_SMOOTH)),
-                            ImageProvider.OverlayPosition.SOUTHEAST)
+                        new ImageProvider("ok").setMaxSize(ImageSizes.LARGEICON).addOverlay(
+                                new ImageOverlay(new ImageProvider("warning-small"), 0.5, 0.5, 1.0, 1.0)).get()
                     });
                     dlg.setToolTipTexts(new String[] {
                         tr("Cancel and return to the previous dialog"),
@@ -1036,7 +1034,7 @@ public abstract class SourceEditor extends JPanel {
 
     class ReloadSourcesAction extends AbstractAction {
         private final String url;
-        private final List<SourceProvider> sourceProviders;
+        private final transient List<SourceProvider> sourceProviders;
         public ReloadSourcesAction(String url, List<SourceProvider> sourceProviders) {
             putValue(NAME, tr("Reload"));
             putValue(SHORT_DESCRIPTION, tr(getStr(I18nString.RELOAD_ALL_AVAILABLE), url));
@@ -1054,7 +1052,7 @@ public abstract class SourceEditor extends JPanel {
     }
 
     protected static class IconPathTableModel extends AbstractTableModel {
-        private List<String> data;
+        private transient List<String> data;
         private DefaultListSelectionModel selectionModel;
 
         public IconPathTableModel(DefaultListSelectionModel selectionModel) {
diff --git a/src/org/openstreetmap/josm/gui/preferences/ToolbarPreferences.java b/src/org/openstreetmap/josm/gui/preferences/ToolbarPreferences.java
index e968e18..d8d6da7 100644
--- a/src/org/openstreetmap/josm/gui/preferences/ToolbarPreferences.java
+++ b/src/org/openstreetmap/josm/gui/preferences/ToolbarPreferences.java
@@ -312,7 +312,7 @@ public class ToolbarPreferences implements PreferenceSettingFactory {
 
     private static class ActionParametersTableModel extends AbstractTableModel {
 
-        private ActionDefinition currentAction = ActionDefinition.getSeparator();
+        private transient ActionDefinition currentAction = ActionDefinition.getSeparator();
 
         @Override
         public int getColumnCount() {
@@ -392,7 +392,7 @@ public class ToolbarPreferences implements PreferenceSettingFactory {
     }
 
     private class ToolbarPopupMenu extends JPopupMenu  {
-        ActionDefinition act;
+        private transient ActionDefinition act;
 
         private void setActionAndAdapt(ActionDefinition action) {
             this.act = action;
@@ -401,7 +401,7 @@ public class ToolbarPreferences implements PreferenceSettingFactory {
             shortcutEdit.setVisible(act!=null);
         }
 
-        JMenuItem remove = new JMenuItem(new AbstractAction(tr("Remove from toolbar")) {
+        private JMenuItem remove = new JMenuItem(new AbstractAction(tr("Remove from toolbar")) {
             @Override
             public void actionPerformed(ActionEvent e) {
                                 Collection<String> t = new LinkedList<>(getToolString());
@@ -415,7 +415,7 @@ public class ToolbarPreferences implements PreferenceSettingFactory {
                             }
                 });
 
-        JMenuItem configure = new JMenuItem(new AbstractAction(tr("Configure toolbar")) {
+        private JMenuItem configure = new JMenuItem(new AbstractAction(tr("Configure toolbar")) {
             @Override
             public void actionPerformed(ActionEvent e) {
                     final PreferenceDialog p =new PreferenceDialog(Main.parent);
@@ -424,7 +424,7 @@ public class ToolbarPreferences implements PreferenceSettingFactory {
                 }
             });
 
-        JMenuItem shortcutEdit = new JMenuItem(new AbstractAction(tr("Edit shortcut")) {
+        private JMenuItem shortcutEdit = new JMenuItem(new AbstractAction(tr("Edit shortcut")) {
             @Override
             public void actionPerformed(ActionEvent e) {
                     final PreferenceDialog p =new PreferenceDialog(Main.parent);
@@ -436,7 +436,7 @@ public class ToolbarPreferences implements PreferenceSettingFactory {
                 }
             });
 
-        JCheckBoxMenuItem doNotHide = new JCheckBoxMenuItem(new AbstractAction(tr("Do not hide toolbar and menu")) {
+        private JCheckBoxMenuItem doNotHide = new JCheckBoxMenuItem(new AbstractAction(tr("Do not hide toolbar and menu")) {
             @Override
             public void actionPerformed(ActionEvent e) {
                 boolean sel = ((JCheckBoxMenuItem) e.getSource()).getState();
@@ -624,7 +624,7 @@ public class ToolbarPreferences implements PreferenceSettingFactory {
             });
 
             ListCellRenderer<ActionDefinition> renderer = new ListCellRenderer<ActionDefinition>() {
-                final DefaultListCellRenderer def = new DefaultListCellRenderer();
+                private final DefaultListCellRenderer def = new DefaultListCellRenderer();
                 @Override
                 public Component getListCellRendererComponent(JList<? extends ActionDefinition> list,
                         ActionDefinition action, int index, boolean isSelected, boolean cellHasFocus) {
@@ -1070,7 +1070,7 @@ public class ToolbarPreferences implements PreferenceSettingFactory {
      * @param removeIfExists if true and the button already exists, remove it
      */
     public void addCustomButton(String definitionText, int preferredIndex, boolean removeIfExists) {
-        LinkedList<String> t = new LinkedList<>(getToolString());
+        List<String> t = new LinkedList<>(getToolString());
         if (t.contains(definitionText)) {
             if (!removeIfExists) return; // do nothing
             t.remove(definitionText);
diff --git a/src/org/openstreetmap/josm/gui/preferences/advanced/AdvancedPreference.java b/src/org/openstreetmap/josm/gui/preferences/advanced/AdvancedPreference.java
index 7cf5a8e..55522ca 100644
--- a/src/org/openstreetmap/josm/gui/preferences/advanced/AdvancedPreference.java
+++ b/src/org/openstreetmap/josm/gui/preferences/advanced/AdvancedPreference.java
@@ -159,7 +159,7 @@ public final class AdvancedPreference extends DefaultTabPreferenceSetting {
         final JButton more = new JButton(tr("More..."));
         p.add(more, GBC.std().insets(5,5,0,0));
         more.addActionListener(new ActionListener() {
-            JPopupMenu menu = buildPopupMenu();
+            private JPopupMenu menu = buildPopupMenu();
             @Override public void actionPerformed(ActionEvent ev) {
                 menu.show(more, 0, 0);
             }
@@ -311,7 +311,7 @@ public final class AdvancedPreference extends DefaultTabPreferenceSetting {
         return data;
     }
 
-    Map<String,String> profileTypes = new LinkedHashMap<>();
+    private Map<String,String> profileTypes = new LinkedHashMap<>();
 
     private JPopupMenu buildPopupMenu() {
         JPopupMenu menu = new JPopupMenu();
@@ -356,29 +356,41 @@ public final class AdvancedPreference extends DefaultTabPreferenceSetting {
             @Override
             public void menuSelected(MenuEvent me) {
                 p.removeAll();
-                for (File f: new File(".").listFiles()) {
-                   String s = f.getName();
-                   int idx = s.indexOf('_');
-                   if (idx>=0) {
-                        String t=s.substring(0,idx);
-                        if (profileTypes.containsKey(t)) {
-                            p.add(new ImportProfileAction(s, f, t));
-                        }
-                   }
+                File[] files = new File(".").listFiles();
+                if (files != null) {
+                    for (File f: files) {
+                       String s = f.getName();
+                       int idx = s.indexOf('_');
+                       if (idx>=0) {
+                            String t=s.substring(0,idx);
+                            if (profileTypes.containsKey(t)) {
+                                p.add(new ImportProfileAction(s, f, t));
+                            }
+                       }
+                    }
                 }
-                for (File f: Main.pref.getPreferencesDirectory().listFiles()) {
-                   String s = f.getName();
-                   int idx = s.indexOf('_');
-                   if (idx>=0) {
-                        String t=s.substring(0,idx);
-                        if (profileTypes.containsKey(t)) {
-                            p.add(new ImportProfileAction(s, f, t));
-                        }
-                   }
+                files = Main.pref.getPreferencesDirectory().listFiles();
+                if (files != null) {
+                    for (File f: files) {
+                       String s = f.getName();
+                       int idx = s.indexOf('_');
+                       if (idx>=0) {
+                            String t=s.substring(0,idx);
+                            if (profileTypes.containsKey(t)) {
+                                p.add(new ImportProfileAction(s, f, t));
+                            }
+                       }
+                    }
                 }
             }
-            @Override public void menuDeselected(MenuEvent me) { }
-            @Override public void menuCanceled(MenuEvent me) { }
+            @Override
+            public void menuDeselected(MenuEvent me) {
+                // Not implemented
+            }
+            @Override
+            public void menuCanceled(MenuEvent me) {
+                // Not implemented
+            }
         });
         return p;
     }
diff --git a/src/org/openstreetmap/josm/gui/preferences/advanced/ExportProfileAction.java b/src/org/openstreetmap/josm/gui/preferences/advanced/ExportProfileAction.java
index b7ba680..b858cd4 100644
--- a/src/org/openstreetmap/josm/gui/preferences/advanced/ExportProfileAction.java
+++ b/src/org/openstreetmap/josm/gui/preferences/advanced/ExportProfileAction.java
@@ -27,7 +27,7 @@ import org.openstreetmap.josm.gui.widgets.AbstractFileChooser;
 public class ExportProfileAction extends AbstractAction {
     private final String prefPattern;
     private final String schemaKey;
-    private final Preferences prefs;
+    private final transient Preferences prefs;
 
     /**
      * Constructs a new {@code ExportProfileAction}.
diff --git a/src/org/openstreetmap/josm/gui/preferences/advanced/ListEditor.java b/src/org/openstreetmap/josm/gui/preferences/advanced/ListEditor.java
index 3cbe062..ee26918 100644
--- a/src/org/openstreetmap/josm/gui/preferences/advanced/ListEditor.java
+++ b/src/org/openstreetmap/josm/gui/preferences/advanced/ListEditor.java
@@ -29,8 +29,8 @@ import org.openstreetmap.josm.tools.WindowGeometry;
  */
 public class ListEditor extends ExtendedDialog {
 
-    List<String> data;
-    PrefEntry entry;
+    private transient List<String> data;
+    private transient PrefEntry entry;
 
     /**
      * Constructs a new {@code ListEditor}.
diff --git a/src/org/openstreetmap/josm/gui/preferences/advanced/ListListEditor.java b/src/org/openstreetmap/josm/gui/preferences/advanced/ListListEditor.java
index 208bd41..5728133 100644
--- a/src/org/openstreetmap/josm/gui/preferences/advanced/ListListEditor.java
+++ b/src/org/openstreetmap/josm/gui/preferences/advanced/ListListEditor.java
@@ -37,15 +37,15 @@ import org.openstreetmap.josm.tools.WindowGeometry;
  */
 public class ListListEditor extends ExtendedDialog {
 
-    EntryListModel entryModel;
-    List<List<String>> data;
-    PrefEntry entry;
+    private EntryListModel entryModel;
+    private transient List<List<String>> data;
+    private transient PrefEntry entry;
 
-    JList<String> entryList;
-    Integer entryIdx;
-    JTable table;
+    private JList<String> entryList;
+    private Integer entryIdx;
+    private JTable table;
 
-    ListTableModel tableModel;
+    private ListTableModel tableModel;
 
     /**
      * Constructs a new {@code ListListEditor}.
diff --git a/src/org/openstreetmap/josm/gui/preferences/advanced/MapListEditor.java b/src/org/openstreetmap/josm/gui/preferences/advanced/MapListEditor.java
index 3e3ac03..110239f 100644
--- a/src/org/openstreetmap/josm/gui/preferences/advanced/MapListEditor.java
+++ b/src/org/openstreetmap/josm/gui/preferences/advanced/MapListEditor.java
@@ -41,16 +41,16 @@ import org.openstreetmap.josm.tools.WindowGeometry;
  */
 public class MapListEditor extends ExtendedDialog {
 
-    EntryListModel entryModel;
-    PrefEntry entry;
+    private EntryListModel entryModel;
+    private transient PrefEntry entry;
 
-    JList<String> entryList;
-    JTable table;
-    MapTableModel tableModel;
+    private JList<String> entryList;
+    private JTable table;
+    private MapTableModel tableModel;
 
-    List<List<String>> dataKeys;
-    List<List<String>> dataValues;
-    Integer entryIdx;
+    private transient List<List<String>> dataKeys;
+    private transient List<List<String>> dataValues;
+    private Integer entryIdx;
 
     public MapListEditor(JComponent gui, PrefEntry entry, MapListSetting setting) {
         super(gui, tr("Change list of maps setting"), new String[] {tr("OK"), tr("Cancel")});
diff --git a/src/org/openstreetmap/josm/gui/preferences/advanced/PreferencesTable.java b/src/org/openstreetmap/josm/gui/preferences/advanced/PreferencesTable.java
index 0d0a6b6..4d33636 100644
--- a/src/org/openstreetmap/josm/gui/preferences/advanced/PreferencesTable.java
+++ b/src/org/openstreetmap/josm/gui/preferences/advanced/PreferencesTable.java
@@ -42,7 +42,7 @@ import org.openstreetmap.josm.tools.GBC;
  */
 public class PreferencesTable extends JTable {
     private AllSettingsTableModel model;
-    private final List<PrefEntry> displayData;
+    private final transient List<PrefEntry> displayData;
 
     /**
      * Constructs a new {@code PreferencesTable}.
diff --git a/src/org/openstreetmap/josm/gui/preferences/advanced/StringEditor.java b/src/org/openstreetmap/josm/gui/preferences/advanced/StringEditor.java
index ad882e2..3190c22 100644
--- a/src/org/openstreetmap/josm/gui/preferences/advanced/StringEditor.java
+++ b/src/org/openstreetmap/josm/gui/preferences/advanced/StringEditor.java
@@ -19,8 +19,8 @@ import org.openstreetmap.josm.tools.GBC;
  */
 public class StringEditor extends ExtendedDialog {
 
-    PrefEntry entry;
-    JosmTextField tvalue;
+    private transient PrefEntry entry;
+    private JosmTextField tvalue;
 
     /**
      * Constructs a new {@code StringEditor}.
diff --git a/src/org/openstreetmap/josm/gui/preferences/display/GPXSettingsPanel.java b/src/org/openstreetmap/josm/gui/preferences/display/GPXSettingsPanel.java
index 039d28f..54b08c6 100644
--- a/src/org/openstreetmap/josm/gui/preferences/display/GPXSettingsPanel.java
+++ b/src/org/openstreetmap/josm/gui/preferences/display/GPXSettingsPanel.java
@@ -47,7 +47,7 @@ public class GPXSettingsPanel extends JPanel implements ValidationListener {
     private JRadioButton drawRawGpsLinesAll = new JRadioButton(tr("All"));
     private JRadioButton drawRawGpsLinesLocal = new JRadioButton(tr("Local files"));
     private JRadioButton drawRawGpsLinesNone = new JRadioButton(tr("None"));
-    private ActionListener drawRawGpsLinesActionListener;
+    private transient ActionListener drawRawGpsLinesActionListener;
     private JosmTextField drawRawGpsMaxLineLength = new JosmTextField(8);
     private JosmTextField drawRawGpsMaxLineLengthLocal = new JosmTextField(8);
     private JosmTextField drawLineWidth = new JosmTextField(2);
diff --git a/src/org/openstreetmap/josm/gui/preferences/display/LafPreference.java b/src/org/openstreetmap/josm/gui/preferences/display/LafPreference.java
index f8d6380..bd36558 100644
--- a/src/org/openstreetmap/josm/gui/preferences/display/LafPreference.java
+++ b/src/org/openstreetmap/josm/gui/preferences/display/LafPreference.java
@@ -90,7 +90,7 @@ public class LafPreference implements SubPreferenceSetting {
         }
 
         lafCombo.setRenderer(new ListCellRenderer<LookAndFeelInfo>(){
-            final DefaultListCellRenderer def = new DefaultListCellRenderer();
+            private final DefaultListCellRenderer def = new DefaultListCellRenderer();
             @Override
             public Component getListCellRendererComponent(JList<? extends LookAndFeelInfo> list, LookAndFeelInfo value,
                     int index, boolean isSelected, boolean cellHasFocus) {
diff --git a/src/org/openstreetmap/josm/gui/preferences/display/LanguagePreference.java b/src/org/openstreetmap/josm/gui/preferences/display/LanguagePreference.java
index 49b8bb6..293a844 100644
--- a/src/org/openstreetmap/josm/gui/preferences/display/LanguagePreference.java
+++ b/src/org/openstreetmap/josm/gui/preferences/display/LanguagePreference.java
@@ -76,7 +76,7 @@ public class LanguagePreference implements SubPreferenceSetting {
     }
 
     private static class LanguageComboBoxModel extends DefaultComboBoxModel<Locale> {
-        private final List<Locale> data = new ArrayList<>();
+        private final transient List<Locale> data = new ArrayList<>();
 
         public LanguageComboBoxModel(){
             data.add(0,null);
diff --git a/src/org/openstreetmap/josm/gui/preferences/imagery/AddImageryPanel.java b/src/org/openstreetmap/josm/gui/preferences/imagery/AddImageryPanel.java
index f99e17e..6c64a00 100644
--- a/src/org/openstreetmap/josm/gui/preferences/imagery/AddImageryPanel.java
+++ b/src/org/openstreetmap/josm/gui/preferences/imagery/AddImageryPanel.java
@@ -29,7 +29,7 @@ public abstract class AddImageryPanel extends JPanel {
     protected final JosmTextArea rawUrl = new JosmTextArea(3, 40);
     protected final JosmTextField name = new JosmTextField();
 
-    protected final Collection<ContentValidationListener> listeners = new ArrayList<>();
+    protected final transient Collection<ContentValidationListener> listeners = new ArrayList<>();
 
     /**
      * A listener notified when the validation status of this panel change.
diff --git a/src/org/openstreetmap/josm/gui/preferences/imagery/AddTMSLayerPanel.java b/src/org/openstreetmap/josm/gui/preferences/imagery/AddTMSLayerPanel.java
index 3aeb3b9..2bcddcd 100644
--- a/src/org/openstreetmap/josm/gui/preferences/imagery/AddTMSLayerPanel.java
+++ b/src/org/openstreetmap/josm/gui/preferences/imagery/AddTMSLayerPanel.java
@@ -22,7 +22,7 @@ public class AddTMSLayerPanel extends AddImageryPanel {
 
     private final JosmTextField tmsZoom = new JosmTextField();
     private final JosmTextArea tmsUrl = new JosmTextArea(3, 40);
-    private final KeyAdapter keyAdapter = new KeyAdapter() {
+    private final transient KeyAdapter keyAdapter = new KeyAdapter() {
         @Override
         public void keyReleased(KeyEvent e) {
             tmsUrl.setText(buildTMSUrl());
diff --git a/src/org/openstreetmap/josm/gui/preferences/imagery/AddWMSLayerPanel.java b/src/org/openstreetmap/josm/gui/preferences/imagery/AddWMSLayerPanel.java
index e1a187d..eaf19d0 100644
--- a/src/org/openstreetmap/josm/gui/preferences/imagery/AddWMSLayerPanel.java
+++ b/src/org/openstreetmap/josm/gui/preferences/imagery/AddWMSLayerPanel.java
@@ -35,9 +35,9 @@ import org.openstreetmap.josm.tools.Utils;
  */
 public class AddWMSLayerPanel extends AddImageryPanel {
 
-    private final WMSImagery wms = new WMSImagery();
+    private final transient WMSImagery wms = new WMSImagery();
     private final JCheckBox endpoint = new JCheckBox(tr("Store WMS endpoint only, select layers at usage"));
-    private final WMSLayerTree tree = new WMSLayerTree();
+    private final transient WMSLayerTree tree = new WMSLayerTree();
     private final JComboBox<String> formats = new JComboBox<>();
     private final JLabel wmsInstruction;
     private final JosmTextArea wmsUrl = new JosmTextArea(3, 40);
diff --git a/src/org/openstreetmap/josm/gui/preferences/imagery/ImageryPreference.java b/src/org/openstreetmap/josm/gui/preferences/imagery/ImageryPreference.java
index 08fd9b5..3db9b15 100644
--- a/src/org/openstreetmap/josm/gui/preferences/imagery/ImageryPreference.java
+++ b/src/org/openstreetmap/josm/gui/preferences/imagery/ImageryPreference.java
@@ -204,7 +204,7 @@ public final class ImageryPreference extends DefaultTabPreferenceSetting {
         /** The table of default providers **/
         public final JTable defaultTable;
         /** The selection listener synchronizing map display with table of default providers **/
-        private final DefListSelectionListener defaultTableListener;
+        private final transient DefListSelectionListener defaultTableListener;
         /** The map displaying imagery bounds of selected default providers **/
         public final JMapViewer defaultMap;
 
@@ -224,7 +224,7 @@ public final class ImageryPreference extends DefaultTabPreferenceSetting {
 
         // Private members
         private final PreferenceTabbedPane gui;
-        private final ImageryLayerInfo layerInfo;
+        private final transient ImageryLayerInfo layerInfo;
 
         /**
          * class to render the URL information of Imagery source
@@ -232,7 +232,7 @@ public final class ImageryPreference extends DefaultTabPreferenceSetting {
          */
         private static class ImageryURLTableCellRenderer extends DefaultTableCellRenderer {
 
-            private List<ImageryInfo> layers;
+            private transient List<ImageryInfo> layers;
 
             public ImageryURLTableCellRenderer(List<ImageryInfo> layers) {
                 this.layers = layers;
@@ -791,9 +791,12 @@ public final class ImageryPreference extends DefaultTabPreferenceSetting {
     }
 
     static class OffsetBookmarksPanel extends JPanel {
-        List<OffsetBookmark> bookmarks = OffsetBookmark.allBookmarks;
-        OffsetsBookmarksModel model = new OffsetsBookmarksModel();
+        private transient List<OffsetBookmark> bookmarks = OffsetBookmark.allBookmarks;
+        private OffsetsBookmarksModel model = new OffsetsBookmarksModel();
 
+        /**
+         * Constructs a new {@code OffsetBookmarksPanel}.
+         */
         public OffsetBookmarksPanel(final PreferenceTabbedPane gui) {
             super(new GridBagLayout());
             final JTable list = new JTable(model) {
diff --git a/src/org/openstreetmap/josm/gui/preferences/imagery/TMSSettingsPanel.java b/src/org/openstreetmap/josm/gui/preferences/imagery/TMSSettingsPanel.java
index 75ce084..0a7b89d 100644
--- a/src/org/openstreetmap/josm/gui/preferences/imagery/TMSSettingsPanel.java
+++ b/src/org/openstreetmap/josm/gui/preferences/imagery/TMSSettingsPanel.java
@@ -32,6 +32,7 @@ public class TMSSettingsPanel extends JPanel {
     private final JosmTextField tilecacheDir = new JosmTextField();
     private final JSpinner maxElementsOnDisk;
     private final JSpinner maxConcurrentDownloads;
+    private final JSpinner maxDownloadsPerHost;
 
 
     /**
@@ -43,6 +44,7 @@ public class TMSSettingsPanel extends JPanel {
         maxZoomLvl = new JSpinner(new SpinnerNumberModel(TMSLayer.DEFAULT_MAX_ZOOM, TMSLayer.MIN_ZOOM, TMSLayer.MAX_ZOOM, 1));
         maxElementsOnDisk = new JSpinner(new SpinnerNumberModel(TMSCachedTileLoader.MAX_OBJECTS_ON_DISK.get().intValue(), 0, Integer.MAX_VALUE, 1));
         maxConcurrentDownloads = new JSpinner(new SpinnerNumberModel(TMSCachedTileLoaderJob.THREAD_LIMIT.get().intValue(), 0, Integer.MAX_VALUE, 1));
+        maxDownloadsPerHost = new JSpinner(new SpinnerNumberModel(TMSCachedTileLoaderJob.HOST_LIMIT.get().intValue(), 0, Integer.MAX_VALUE, 1));
 
         add(new JLabel(tr("Auto zoom by default: ")), GBC.std());
         add(GBC.glue(5, 0), GBC.std());
@@ -72,6 +74,11 @@ public class TMSSettingsPanel extends JPanel {
         add(GBC.glue(5, 0), GBC.std());
         add(maxConcurrentDownloads, GBC.eol());
 
+        add(new JLabel(tr("Maximum concurrent downloads per host: ")), GBC.std());
+        add(GBC.glue(5, 0), GBC.std());
+        add(maxDownloadsPerHost, GBC.eol());
+
+
         add(new JLabel(tr("Maximum elements in disk cache: ")), GBC.std());
         add(GBC.glue(5, 0), GBC.std());
         add(this.maxElementsOnDisk, GBC.eol());
@@ -90,6 +97,7 @@ public class TMSSettingsPanel extends JPanel {
         this.tilecacheDir.setText(TMSLayer.PROP_TILECACHE_DIR.get());
         this.maxElementsOnDisk.setValue(TMSCachedTileLoader.MAX_OBJECTS_ON_DISK.get());
         this.maxConcurrentDownloads.setValue(TMSCachedTileLoaderJob.THREAD_LIMIT.get());
+        this.maxDownloadsPerHost.setValue(TMSCachedTileLoaderJob.HOST_LIMIT.get());
     }
 
     /**
@@ -110,10 +118,9 @@ public class TMSSettingsPanel extends JPanel {
 
         TMSCachedTileLoader.MAX_OBJECTS_ON_DISK.put((Integer) this.maxElementsOnDisk.getValue());
 
-        if (!TMSCachedTileLoaderJob.THREAD_LIMIT.get().equals(this.maxConcurrentDownloads.getValue())) {
-            restartRequired = true;
-            TMSCachedTileLoaderJob.THREAD_LIMIT.put((Integer) this.maxConcurrentDownloads.getValue());
-        }
+        TMSCachedTileLoaderJob.THREAD_LIMIT.put((Integer) this.maxConcurrentDownloads.getValue());
+        TMSCachedTileLoaderJob.HOST_LIMIT.put((Integer) this.maxDownloadsPerHost.getValue());
+        TMSCachedTileLoaderJob.reconfigureDownloadDispatcher();
 
         if (!TMSLayer.PROP_TILECACHE_DIR.get().equals(this.tilecacheDir.getText())) {
             restartRequired = true;
diff --git a/src/org/openstreetmap/josm/gui/preferences/map/MapPaintPreference.java b/src/org/openstreetmap/josm/gui/preferences/map/MapPaintPreference.java
index c93416f..cca419c 100644
--- a/src/org/openstreetmap/josm/gui/preferences/map/MapPaintPreference.java
+++ b/src/org/openstreetmap/josm/gui/preferences/map/MapPaintPreference.java
@@ -43,8 +43,6 @@ public class MapPaintPreference implements SubPreferenceSetting {
 
     private static final List<SourceProvider> styleSourceProviders = new ArrayList<>();
 
-    private static final String OLD_ELEMSTYLES_XML = "resource://styles/standard/elemstyles.xml";
-
     /**
      * Registers a new additional style source provider.
      * @param provider The style source provider
@@ -217,8 +215,6 @@ public class MapPaintPreference implements SubPreferenceSetting {
         private boolean insertNewDefaults(List<SourceEntry> list) {
             boolean changed = false;
 
-            boolean addedMapcssStyle = false; // Migration code can be removed ~ Nov. 2014
-
             Collection<String> knownDefaults = new TreeSet<>(Main.pref.getCollection("mappaint.style.known-defaults"));
 
             Collection<ExtendedSourceEntry> defaults = getDefault();
@@ -236,10 +232,6 @@ public class MapPaintPreference implements SubPreferenceSetting {
                     list.add(insertionIdx, def);
                     insertionIdx++;
                     changed = true;
-                    /* Migration code can be removed ~ Nov. 2014 */
-                    if ("resource://styles/standard/elemstyles.mapcss".equals(def.url)) {
-                        addedMapcssStyle = true;
-                    }
                 } else {
                     if (i >= insertionIdx) {
                         insertionIdx = i + 1;
@@ -250,53 +242,8 @@ public class MapPaintPreference implements SubPreferenceSetting {
             for (SourceEntry def : defaults) {
                 knownDefaults.add(def.url);
             }
-            // XML style is not bundled anymore
-            knownDefaults.remove(OLD_ELEMSTYLES_XML);
             Main.pref.putCollection("mappaint.style.known-defaults", knownDefaults);
 
-            /* Migration code can be removed ~ Nov. 2014 */
-            if (addedMapcssStyle) {
-                // change title of the XML entry
-                // only do this once. If the user changes it afterward, do not touch
-                if (!Main.pref.getBoolean("mappaint.style.migration.changedXmlName", false)) {
-                    SourceEntry josmXml = Utils.find(list, new Predicate<SourceEntry>() {
-                        @Override
-                        public boolean evaluate(SourceEntry se) {
-                            return OLD_ELEMSTYLES_XML.equals(se.url);
-                        }
-                    });
-                    if (josmXml != null) {
-                        josmXml.title = tr("JOSM default (XML; old version)");
-                        changed = true;
-                    }
-                    Main.pref.put("mappaint.style.migration.changedXmlName", true);
-                }
-            }
-
-            /* Migration code can be removed ~ Nov. 2014 */
-            if (!Main.pref.getBoolean("mappaint.style.migration.switchedToMapCSS", false)) {
-                SourceEntry josmXml = Utils.find(list, new Predicate<SourceEntry>() {
-                    @Override
-                    public boolean evaluate(SourceEntry se) {
-                        return "resource://styles/standard/elemstyles.xml".equals(se.url);
-                    }
-                });
-                SourceEntry josmMapCSS = Utils.find(list, new Predicate<SourceEntry>() {
-                    @Override
-                    public boolean evaluate(SourceEntry se) {
-                        return "resource://styles/standard/elemstyles.mapcss".equals(se.url);
-                    }
-                });
-                if (josmXml != null && josmMapCSS != null && josmXml.active) {
-                    josmMapCSS.active = true;
-                    josmXml.active = false;
-                    Main.info("Switched mappaint style from XML format to MapCSS (one time migration).");
-                    changed = true;
-                }
-                // in any case, do this check only once:
-                Main.pref.put("mappaint.style.migration.switchedToMapCSS", true);
-            }
-
             // XML style is not bundled anymore
             list.remove(Utils.find(list, new Predicate<SourceEntry>() {
                         @Override
diff --git a/src/org/openstreetmap/josm/gui/preferences/plugin/PluginListPanel.java b/src/org/openstreetmap/josm/gui/preferences/plugin/PluginListPanel.java
index 9c4be15..52d2f68 100644
--- a/src/org/openstreetmap/josm/gui/preferences/plugin/PluginListPanel.java
+++ b/src/org/openstreetmap/josm/gui/preferences/plugin/PluginListPanel.java
@@ -37,7 +37,7 @@ import org.openstreetmap.josm.tools.Utils;
  * A panel displaying the list of known plugins.
  */
 public class PluginListPanel extends VerticallyScrollablePanel {
-    private PluginPreferencesModel model;
+    private transient PluginPreferencesModel model;
 
     /**
      * Constructs a new {@code PluginListPanel} with a default model.
@@ -109,7 +109,7 @@ public class PluginListPanel extends VerticallyScrollablePanel {
      *
      */
     private class JPluginCheckBox extends JCheckBox {
-        public final PluginInformation pi;
+        public final transient PluginInformation pi;
         public JPluginCheckBox(final PluginInformation pi, boolean selected) {
             this.pi = pi;
             setSelected(selected);
diff --git a/src/org/openstreetmap/josm/gui/preferences/plugin/PluginPreference.java b/src/org/openstreetmap/josm/gui/preferences/plugin/PluginPreference.java
index be3cf11..ed38b9e 100644
--- a/src/org/openstreetmap/josm/gui/preferences/plugin/PluginPreference.java
+++ b/src/org/openstreetmap/josm/gui/preferences/plugin/PluginPreference.java
@@ -285,7 +285,7 @@ public final class PluginPreference extends DefaultTabPreferenceSetting {
             return false;
         pnlPluginUpdatePolicy.rememberInPreferences();
         if (model.isActivePluginsChanged()) {
-            LinkedList<String> l = new LinkedList<>(model.getSelectedPluginNames());
+            List<String> l = new LinkedList<>(model.getSelectedPluginNames());
             Collections.sort(l);
             Main.pref.putCollection("plugins", l);
             if (!model.getNewlyDeactivatedPlugins().isEmpty()) return true;
diff --git a/src/org/openstreetmap/josm/gui/preferences/plugin/PluginUpdatePolicyPanel.java b/src/org/openstreetmap/josm/gui/preferences/plugin/PluginUpdatePolicyPanel.java
index 68053cc..a52dff9 100644
--- a/src/org/openstreetmap/josm/gui/preferences/plugin/PluginUpdatePolicyPanel.java
+++ b/src/org/openstreetmap/josm/gui/preferences/plugin/PluginUpdatePolicyPanel.java
@@ -19,9 +19,9 @@ import javax.swing.event.ChangeListener;
 
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.gui.widgets.JMultilineLabel;
+import org.openstreetmap.josm.gui.widgets.JosmTextField;
 import org.openstreetmap.josm.gui.widgets.SelectAllOnFocusGainedDecorator;
 import org.openstreetmap.josm.plugins.PluginHandler;
-import org.openstreetmap.josm.gui.widgets.JosmTextField;
 
 /**
  * A panel for configuring whether JOSM shall update plugins at startup.
@@ -54,8 +54,8 @@ public class PluginUpdatePolicyPanel extends JPanel {
         }
     }
 
-    private Map<Policy, JRadioButton> rbVersionBasedUpatePolicy;
-    private Map<Policy, JRadioButton> rbTimeBasedUpatePolicy;
+    private transient Map<Policy, JRadioButton> rbVersionBasedUpatePolicy;
+    private transient Map<Policy, JRadioButton> rbTimeBasedUpatePolicy;
     private JosmTextField tfUpdateInterval;
     private JLabel lblUpdateInterval;
 
diff --git a/src/org/openstreetmap/josm/gui/preferences/projection/CodeProjectionChoice.java b/src/org/openstreetmap/josm/gui/preferences/projection/CodeProjectionChoice.java
index 94c30e7..047b42d 100644
--- a/src/org/openstreetmap/josm/gui/preferences/projection/CodeProjectionChoice.java
+++ b/src/org/openstreetmap/josm/gui/preferences/projection/CodeProjectionChoice.java
@@ -6,6 +6,7 @@ import static org.openstreetmap.josm.tools.I18n.tr;
 import java.awt.Dimension;
 import java.awt.GridBagLayout;
 import java.awt.event.ActionListener;
+import java.io.Serializable;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
@@ -33,7 +34,7 @@ import org.openstreetmap.josm.tools.GBC;
  */
 public class CodeProjectionChoice extends AbstractProjectionChoice implements SubPrefsOptions {
 
-    String code;
+    private String code;
 
     /**
      * Constructs a new {@code CodeProjectionChoice}.
@@ -47,11 +48,11 @@ public class CodeProjectionChoice extends AbstractProjectionChoice implements Su
         public JosmTextField filter;
         private ProjectionCodeListModel model;
         public JList<String> selectionList;
-        List<String> data;
-        List<String> filteredData;
-        static final String DEFAULT_CODE = "EPSG:3857";
-        String lastCode = DEFAULT_CODE;
-        ActionListener listener;
+        private transient List<String> data;
+        private transient List<String> filteredData;
+        private static final String DEFAULT_CODE = "EPSG:3857";
+        private String lastCode = DEFAULT_CODE;
+        private transient ActionListener listener;
 
         public CodeSelectionPanel(String initialCode, ActionListener listener) {
             this.listener = listener;
@@ -66,8 +67,9 @@ public class CodeProjectionChoice extends AbstractProjectionChoice implements Su
         /**
          * Comparator that compares the number part of the code numerically.
          */
-        private static class CodeComparator implements Comparator<String> {
-            final Pattern codePattern = Pattern.compile("([a-zA-Z]+):(\\d+)");
+        private static class CodeComparator implements Comparator<String>, Serializable {
+            private static final long serialVersionUID = 1L;
+            private final Pattern codePattern = Pattern.compile("([a-zA-Z]+):(\\d+)");
             @Override
             public int compare(String c1, String c2) {
                 Matcher matcher1 = codePattern.matcher(c1);
diff --git a/src/org/openstreetmap/josm/gui/preferences/projection/ListProjectionChoice.java b/src/org/openstreetmap/josm/gui/preferences/projection/ListProjectionChoice.java
index a4b6b7e..e62c17c 100644
--- a/src/org/openstreetmap/josm/gui/preferences/projection/ListProjectionChoice.java
+++ b/src/org/openstreetmap/josm/gui/preferences/projection/ListProjectionChoice.java
@@ -63,7 +63,7 @@ public abstract class ListProjectionChoice extends AbstractProjectionChoice {
     @Override
     public void setPreferences(Collection<String> args) {
         String zone = null;
-        if (args != null && args.size() >= 1) {
+        if (args != null && !args.isEmpty()) {
             zone = args.iterator().next();
         }
         int idx;
diff --git a/src/org/openstreetmap/josm/gui/preferences/server/ApiUrlTestTask.java b/src/org/openstreetmap/josm/gui/preferences/server/ApiUrlTestTask.java
index 1c05d9f..63ab5e6 100644
--- a/src/org/openstreetmap/josm/gui/preferences/server/ApiUrlTestTask.java
+++ b/src/org/openstreetmap/josm/gui/preferences/server/ApiUrlTestTask.java
@@ -42,9 +42,9 @@ public class ApiUrlTestTask extends PleaseWaitRunnable {
      *
      * @param parent the parent component relative to which the {@link PleaseWaitRunnable}-Dialog is displayed
      * @param url the url. Must not be null.
-     * @throws IllegalArgumentException thrown if url is null.
+     * @throws IllegalArgumentException if url is null.
      */
-    public ApiUrlTestTask(Component parent, String url) throws IllegalArgumentException {
+    public ApiUrlTestTask(Component parent, String url) {
         super(parent, tr("Testing OSM API URL ''{0}''", url), false /* don't ignore exceptions */);
         CheckParameterUtil.ensureParameterNotNull(url,"url");
         this.parent = parent;
diff --git a/src/org/openstreetmap/josm/gui/preferences/server/AuthenticationPreference.java b/src/org/openstreetmap/josm/gui/preferences/server/AuthenticationPreference.java
index 5e5707d..f5c417e 100644
--- a/src/org/openstreetmap/josm/gui/preferences/server/AuthenticationPreference.java
+++ b/src/org/openstreetmap/josm/gui/preferences/server/AuthenticationPreference.java
@@ -25,7 +25,7 @@ public final class AuthenticationPreference implements SubPreferenceSetting {
         }
     }
 
-    AuthenticationPreferencesPanel pnlAuthPreferences;
+    private AuthenticationPreferencesPanel pnlAuthPreferences;
 
     private AuthenticationPreference() {
         super();
diff --git a/src/org/openstreetmap/josm/gui/preferences/server/OAuthAccessTokenHolder.java b/src/org/openstreetmap/josm/gui/preferences/server/OAuthAccessTokenHolder.java
index 9ea7f74..4b905d7 100644
--- a/src/org/openstreetmap/josm/gui/preferences/server/OAuthAccessTokenHolder.java
+++ b/src/org/openstreetmap/josm/gui/preferences/server/OAuthAccessTokenHolder.java
@@ -144,9 +144,9 @@ public class OAuthAccessTokenHolder {
      *
      * @param pref the preferences. Must not be null.
      * @param cm the credential manager. Must not be null.
-     * @throws IllegalArgumentException thrown if cm is null
+     * @throws IllegalArgumentException if cm is null
      */
-    public void init(Preferences pref, CredentialsAgent cm) throws IllegalArgumentException {
+    public void init(Preferences pref, CredentialsAgent cm) {
         CheckParameterUtil.ensureParameterNotNull(pref, "pref");
         CheckParameterUtil.ensureParameterNotNull(cm, "cm");
         OAuthToken token = null;
@@ -170,10 +170,10 @@ public class OAuthAccessTokenHolder {
      *
      * @param preferences the preferences. Must not be null.
      * @param cm the credentials manager. Must not be null.
-     * @throws IllegalArgumentException thrown if preferences is null
-     * @throws IllegalArgumentException thrown if cm is null
+     * @throws IllegalArgumentException if preferences is null
+     * @throws IllegalArgumentException if cm is null
      */
-    public void save(Preferences preferences, CredentialsAgent cm) throws IllegalArgumentException {
+    public void save(Preferences preferences, CredentialsAgent cm) {
         CheckParameterUtil.ensureParameterNotNull(preferences, "preferences");
         CheckParameterUtil.ensureParameterNotNull(cm, "cm");
         preferences.put("oauth.access-token.save-to-preferences", saveToPreferences);
diff --git a/src/org/openstreetmap/josm/gui/preferences/server/OsmApiUrlInputPanel.java b/src/org/openstreetmap/josm/gui/preferences/server/OsmApiUrlInputPanel.java
index a7666ed..dceca6a 100644
--- a/src/org/openstreetmap/josm/gui/preferences/server/OsmApiUrlInputPanel.java
+++ b/src/org/openstreetmap/josm/gui/preferences/server/OsmApiUrlInputPanel.java
@@ -49,12 +49,12 @@ public class OsmApiUrlInputPanel extends JPanel {
     private JLabel lblValid;
     private JLabel lblApiUrl;
     private JosmTextField tfOsmServerUrl;
-    private ApiUrlValidator valOsmServerUrl;
+    private transient ApiUrlValidator valOsmServerUrl;
     private SideButton btnTest;
     /** indicates whether to use the default OSM URL or not */
     private JCheckBox cbUseDefaultServerUrl;
 
-    private ApiUrlPropagator propagator;
+    private transient ApiUrlPropagator propagator;
 
     protected JComponent buildDefaultServerUrlPanel() {
         cbUseDefaultServerUrl = new JCheckBox(tr("<html>Use the default OSM server URL (<strong>{0}</strong>)</html>", OsmApi.DEFAULT_API_URL));
@@ -241,7 +241,7 @@ public class OsmApiUrlInputPanel extends JPanel {
     }
 
     private static class ApiUrlValidator extends AbstractTextComponentValidator {
-        public ApiUrlValidator(JTextComponent tc) throws IllegalArgumentException {
+        public ApiUrlValidator(JTextComponent tc) {
             super(tc);
         }
 
diff --git a/src/org/openstreetmap/josm/gui/preferences/server/ProxyPreferencesPanel.java b/src/org/openstreetmap/josm/gui/preferences/server/ProxyPreferencesPanel.java
index 5e179a8..681e36f 100644
--- a/src/org/openstreetmap/josm/gui/preferences/server/ProxyPreferencesPanel.java
+++ b/src/org/openstreetmap/josm/gui/preferences/server/ProxyPreferencesPanel.java
@@ -99,7 +99,7 @@ public class ProxyPreferencesPanel extends VerticallyScrollablePanel {
     /** Property key for proxy exceptions list */
     public static final String PROXY_EXCEPTIONS = "proxy.exceptions";
 
-    private Map<ProxyPolicy, JRadioButton> rbProxyPolicy;
+    private transient Map<ProxyPolicy, JRadioButton> rbProxyPolicy;
     private JosmTextField tfProxyHttpHost;
     private JosmTextField tfProxyHttpPort;
     private JosmTextField tfProxySocksHost;
diff --git a/src/org/openstreetmap/josm/gui/preferences/shortcut/PrefJPanel.java b/src/org/openstreetmap/josm/gui/preferences/shortcut/PrefJPanel.java
index 331fd63..a171968 100644
--- a/src/org/openstreetmap/josm/gui/preferences/shortcut/PrefJPanel.java
+++ b/src/org/openstreetmap/josm/gui/preferences/shortcut/PrefJPanel.java
@@ -98,7 +98,7 @@ public class PrefJPanel extends JPanel {
     private JCheckBox cbDisable = new JCheckBox();
     private JosmComboBox<String> tfKey = new JosmComboBox<>();
 
-    JTable shortcutTable = new JTable();
+    private JTable shortcutTable = new JTable();
 
     private JosmTextField filterField = new JosmTextField();
 
@@ -118,7 +118,7 @@ public class PrefJPanel extends JPanel {
 
     private static class ScListModel extends AbstractTableModel {
         private String[] columnNames = new String[]{tr("Action"), tr("Shortcut")};
-        private List<Shortcut> data;
+        private transient List<Shortcut> data;
 
         public ScListModel() {
             data = Shortcut.listAll();
diff --git a/src/org/openstreetmap/josm/gui/progress/AbstractProgressMonitor.java b/src/org/openstreetmap/josm/gui/progress/AbstractProgressMonitor.java
index 5bc2b56..997559b 100644
--- a/src/org/openstreetmap/josm/gui/progress/AbstractProgressMonitor.java
+++ b/src/org/openstreetmap/josm/gui/progress/AbstractProgressMonitor.java
@@ -9,16 +9,16 @@ import java.util.Queue;
 public abstract class AbstractProgressMonitor implements ProgressMonitor {
 
     private static class Request {
-        AbstractProgressMonitor originator;
-        int childTicks;
-        double currentValue;
+        private AbstractProgressMonitor originator;
+        private int childTicks;
+        private double currentValue;
 
-        String title;
-        String customText;
-        String extraText;
-        Boolean intermediate;
+        private String title;
+        private String customText;
+        private String extraText;
+        private Boolean intermediate;
 
-        boolean finishRequested;
+        private boolean finishRequested;
     }
 
     private final CancelHandler cancelHandler;
@@ -27,8 +27,8 @@ public abstract class AbstractProgressMonitor implements ProgressMonitor {
 
     protected State state = State.INIT;
 
-    int ticksCount;
-    int ticks;
+    private int ticksCount;
+    private int ticks;
     private int childTicks;
 
     private String taskTitle;
diff --git a/src/org/openstreetmap/josm/gui/progress/SwingRenderingProgressMonitor.java b/src/org/openstreetmap/josm/gui/progress/SwingRenderingProgressMonitor.java
index af0b5fe..98c434a 100644
--- a/src/org/openstreetmap/josm/gui/progress/SwingRenderingProgressMonitor.java
+++ b/src/org/openstreetmap/josm/gui/progress/SwingRenderingProgressMonitor.java
@@ -21,8 +21,7 @@ public class SwingRenderingProgressMonitor extends AbstractProgressMonitor {
     /**
      *
      * @param delegate the delegate which renders the progress information. Must not be null.
-     * @throws IllegalArgumentException thrown if delegate is null
-     *
+     * @throws IllegalArgumentException if delegate is null
      */
     public SwingRenderingProgressMonitor(ProgressRenderer delegate) {
         super(new CancelHandler());
diff --git a/src/org/openstreetmap/josm/gui/tagging/TagCellEditor.java b/src/org/openstreetmap/josm/gui/tagging/TagCellEditor.java
index 978cc5f..4a1a38a 100644
--- a/src/org/openstreetmap/josm/gui/tagging/TagCellEditor.java
+++ b/src/org/openstreetmap/josm/gui/tagging/TagCellEditor.java
@@ -16,14 +16,13 @@ import org.openstreetmap.josm.gui.tagging.ac.AutoCompletionManager;
  * This is the table cell editor for the tag editor dialog.
  *
  */
- at SuppressWarnings("serial")
 public class TagCellEditor extends AbstractCellEditor implements TableCellEditor{
 
     protected AutoCompletingTextField editor = null;
-    protected TagModel currentTag = null;
+    protected transient TagModel currentTag = null;
 
     /** the cache of auto completion items derived from the current JOSM data set */
-    protected AutoCompletionManager autocomplete = null;
+    protected transient AutoCompletionManager autocomplete = null;
 
     /** user input is matched against this list of auto completion items */
     protected AutoCompletionList autoCompletionList = null;
diff --git a/src/org/openstreetmap/josm/gui/tagging/TagEditorModel.java b/src/org/openstreetmap/josm/gui/tagging/TagEditorModel.java
index 813f6a4..95da045 100644
--- a/src/org/openstreetmap/josm/gui/tagging/TagEditorModel.java
+++ b/src/org/openstreetmap/josm/gui/tagging/TagEditorModel.java
@@ -35,7 +35,7 @@ public class TagEditorModel extends AbstractTableModel {
     public static final String PROP_DIRTY = TagEditorModel.class.getName() + ".dirty";
 
     /** the list holding the tags */
-    protected final List<TagModel> tags =new ArrayList<>();
+    protected final transient List<TagModel> tags =new ArrayList<>();
 
     /** indicates whether the model is dirty */
     private boolean dirty =  false;
@@ -66,10 +66,10 @@ public class TagEditorModel extends AbstractTableModel {
      *
      * @param rowSelectionModel the row selection model. Must not be null.
      * @param colSelectionModel the column selection model. Must not be null.
-     * @throws IllegalArgumentException thrown if {@code rowSelectionModel} is null
-     * @throws IllegalArgumentException thrown if {@code colSelectionModel} is null
+     * @throws IllegalArgumentException if {@code rowSelectionModel} is null
+     * @throws IllegalArgumentException if {@code colSelectionModel} is null
      */
-    public TagEditorModel(DefaultListSelectionModel rowSelectionModel, DefaultListSelectionModel colSelectionModel) throws IllegalArgumentException{
+    public TagEditorModel(DefaultListSelectionModel rowSelectionModel, DefaultListSelectionModel colSelectionModel) {
         CheckParameterUtil.ensureParameterNotNull(rowSelectionModel, "rowSelectionModel");
         CheckParameterUtil.ensureParameterNotNull(colSelectionModel, "colSelectionModel");
         this.rowSelectionModel = rowSelectionModel;
@@ -172,7 +172,7 @@ public class TagEditorModel extends AbstractTableModel {
      *
      * @param tag the tag. Must not be null.
      *
-     * @exception IllegalArgumentException thrown, if tag is null
+     * @throws IllegalArgumentException if tag is null
      */
     public void add(TagModel tag) {
         CheckParameterUtil.ensureParameterNotNull(tag, "tag");
@@ -309,7 +309,7 @@ public class TagEditorModel extends AbstractTableModel {
     public void deleteTags(int [] tagIndices) {
         if (tags == null)
             return;
-        ArrayList<TagModel> toDelete = new ArrayList<>();
+        List<TagModel> toDelete = new ArrayList<>();
         for (int tagIdx : tagIndices) {
             TagModel tag = tags.get(tagIdx);
             if (tag != null) {
@@ -487,7 +487,7 @@ public class TagEditorModel extends AbstractTableModel {
     protected Command createDeleteTagsCommand(Collection<OsmPrimitive> primitives) {
 
         List<String> currentkeys = getKeys();
-        ArrayList<Command> commands = new ArrayList<>();
+        List<Command> commands = new ArrayList<>();
 
         for (OsmPrimitive primitive : primitives) {
             for (String oldkey : primitive.keySet()) {
@@ -511,7 +511,7 @@ public class TagEditorModel extends AbstractTableModel {
      * @return the list of keys managed by this model
      */
     public List<String> getKeys() {
-        ArrayList<String> keys = new ArrayList<>();
+        List<String> keys = new ArrayList<>();
         for (TagModel tag: tags) {
             if (!tag.getName().trim().isEmpty()) {
                 keys.add(tag.getName());
diff --git a/src/org/openstreetmap/josm/gui/tagging/TagEditorPanel.java b/src/org/openstreetmap/josm/gui/tagging/TagEditorPanel.java
index a98efd2..5baa5b2 100644
--- a/src/org/openstreetmap/josm/gui/tagging/TagEditorPanel.java
+++ b/src/org/openstreetmap/josm/gui/tagging/TagEditorPanel.java
@@ -9,8 +9,8 @@ import java.awt.Insets;
 import java.awt.event.FocusAdapter;
 import java.awt.event.FocusEvent;
 import java.util.EnumSet;
-import javax.swing.AbstractAction;
 
+import javax.swing.AbstractAction;
 import javax.swing.BoxLayout;
 import javax.swing.JButton;
 import javax.swing.JPanel;
@@ -38,7 +38,7 @@ public class TagEditorPanel extends JPanel {
     private TagTable tagTable;
 
     private PresetListPanel presetListPanel;
-    private final PresetHandler presetHandler;
+    private final transient PresetHandler presetHandler;
 
     /**
      * builds the panel with the table for editing tags
@@ -174,9 +174,9 @@ public class TagEditorPanel extends JPanel {
      * tag values are proposed as auto completion items.
      *
      * @param layer the data layer. Must not be null.
-     * @throws IllegalArgumentException thrown if {@code layer} is null
+     * @throws IllegalArgumentException if {@code layer} is null
      */
-    public void initAutoCompletion(OsmDataLayer layer) throws IllegalArgumentException{
+    public void initAutoCompletion(OsmDataLayer layer) {
         CheckParameterUtil.ensureParameterNotNull(layer, "layer");
 
         AutoCompletionManager autocomplete = layer.data.getAutoCompletionManager();
diff --git a/src/org/openstreetmap/josm/gui/tagging/TagTable.java b/src/org/openstreetmap/josm/gui/tagging/TagTable.java
index 52c54f4..b9eefdf 100644
--- a/src/org/openstreetmap/josm/gui/tagging/TagTable.java
+++ b/src/org/openstreetmap/josm/gui/tagging/TagTable.java
@@ -64,7 +64,7 @@ public class TagTable extends JTable  {
      * cell editing this table.
      */
     private final CopyOnWriteArrayList<Component> doNotStopCellEditingWhenFocused = new CopyOnWriteArrayList<>();
-    private CellEditorRemover editorRemover;
+    private transient CellEditorRemover editorRemover;
 
     /**
      * The table has two columns. The first column is used for editing rendering and
@@ -613,7 +613,7 @@ public class TagTable extends JTable  {
      *
      */
     class CellEditorRemover implements PropertyChangeListener {
-        KeyboardFocusManager focusManager;
+        private KeyboardFocusManager focusManager;
 
         public CellEditorRemover(KeyboardFocusManager fm) {
             this.focusManager = fm;
diff --git a/src/org/openstreetmap/josm/gui/tagging/TaggingPreset.java b/src/org/openstreetmap/josm/gui/tagging/TaggingPreset.java
index 3e386f9..1139730 100644
--- a/src/org/openstreetmap/josm/gui/tagging/TaggingPreset.java
+++ b/src/org/openstreetmap/josm/gui/tagging/TaggingPreset.java
@@ -19,6 +19,7 @@ import java.util.HashSet;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 
 import javax.swing.AbstractAction;
 import javax.swing.Action;
@@ -84,11 +85,11 @@ public class TaggingPreset extends AbstractAction implements MapView.LayerChange
     /**
      * The types as preparsed collection.
      */
-    public EnumSet<TaggingPresetType> types;
-    public List<TaggingPresetItem> data = new LinkedList<>();
-    public Roles roles;
-    public TemplateEntry nameTemplate;
-    public Match nameTemplateFilter;
+    public Set<TaggingPresetType> types;
+    public transient List<TaggingPresetItem> data = new LinkedList<>();
+    public transient Roles roles;
+    public transient TemplateEntry nameTemplate;
+    public transient Match nameTemplateFilter;
 
     /**
      * Create an empty tagging preset. This will not have any items and
@@ -198,7 +199,7 @@ public class TaggingPreset extends AbstractAction implements MapView.LayerChange
     }
 
     private static class PresetPanel extends JPanel {
-        boolean hasElements = false;
+        private boolean hasElements = false;
         PresetPanel() {
             super(new GridBagLayout());
         }
@@ -418,7 +419,7 @@ public class TaggingPreset extends AbstractAction implements MapView.LayerChange
             cmds.add(new ChangePropertyCommand(sel, tag.getKey(), tag.getValue()));
         }
 
-        if (cmds.size() == 0)
+        if (cmds.isEmpty())
             return null;
         else if (cmds.size() == 1)
             return cmds.get(0);
@@ -501,7 +502,7 @@ public class TaggingPreset extends AbstractAction implements MapView.LayerChange
         public ToolbarButtonAction() {
             super("", ImageProvider.get("dialogs", "pin"));
             putValue(SHORT_DESCRIPTION, tr("Add or remove toolbar button"));
-            LinkedList<String> t = new LinkedList<>(ToolbarPreferences.getToolString());
+            List<String> t = new LinkedList<>(ToolbarPreferences.getToolString());
             toolbarIndex = t.indexOf(getToolbarString());
             putValue(SELECTED_KEY, toolbarIndex >= 0);
         }
diff --git a/src/org/openstreetmap/josm/gui/tagging/TaggingPresetItems.java b/src/org/openstreetmap/josm/gui/tagging/TaggingPresetItems.java
index 19bfb43..25fc90a 100644
--- a/src/org/openstreetmap/josm/gui/tagging/TaggingPresetItems.java
+++ b/src/org/openstreetmap/josm/gui/tagging/TaggingPresetItems.java
@@ -28,6 +28,9 @@ import java.util.LinkedHashMap;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Set;
+import java.util.SortedSet;
 import java.util.TreeSet;
 
 import javax.swing.ButtonGroup;
@@ -79,7 +82,7 @@ public final class TaggingPresetItems {
     private static final BooleanProperty PROP_FILL_DEFAULT = new BooleanProperty("taggingpreset.fill-default-for-tagged-primitives", false);
 
     // cache the parsing of types using a LRU cache (http://java-planet.blogspot.com/2005/08/how-to-set-up-simple-lru-cache-using.html)
-    private static final Map<String,EnumSet<TaggingPresetType>> TYPE_CACHE = new LinkedHashMap<>(16, 1.1f, true);
+    private static final Map<String,Set<TaggingPresetType>> TYPE_CACHE = new LinkedHashMap<>(16, 1.1f, true);
 
     /**
      * Last value of each key used in presets, used for prefilling corresponding fields
@@ -165,7 +168,7 @@ public final class TaggingPresetItems {
     }
 
     public static class Role {
-        public EnumSet<TaggingPresetType> types;
+        public Set<TaggingPresetType> types;
         public String key;
         /** The text to display */
         public String text;
@@ -288,9 +291,9 @@ public final class TaggingPresetItems {
     }
 
     public static class Usage {
-        TreeSet<String> values;
-        boolean hadKeys = false;
-        boolean hadEmpty = false;
+        private SortedSet<String> values;
+        private boolean hadKeys = false;
+        private boolean hadEmpty = false;
 
         public boolean hasUniqueValue() {
             return values.size() == 1 && !hadEmpty;
@@ -1122,10 +1125,10 @@ public final class TaggingPresetItems {
             }
 
             if (display != null) {
-                for (String val : lhm.keySet()) {
-                    String k = lhm.get(val).toString();
+                for (Entry<String, PresetListEntry> entry : lhm.entrySet()) {
+                    String k = entry.getValue().toString();
                     if (k != null && k.equals(display)) {
-                        value = val;
+                        value = entry.getKey();
                         break;
                     }
                 }
@@ -1167,7 +1170,7 @@ public final class TaggingPresetItems {
 
         private static final ListCellRenderer<PresetListEntry> RENDERER = new ListCellRenderer<PresetListEntry>() {
 
-            JLabel lbl = new JLabel();
+            private JLabel lbl = new JLabel();
 
             @Override
             public Component getListCellRendererComponent(
@@ -1394,7 +1397,7 @@ public final class TaggingPresetItems {
                 clearSelection();
             } else {
                 String s = o.toString();
-                TreeSet<String> parts = new TreeSet<>(Arrays.asList(s.split(delimiter)));
+                Set<String> parts = new TreeSet<>(Arrays.asList(s.split(delimiter)));
                 ListModel<PresetListEntry> lm = getModel();
                 int[] intParts = new int[lm.getSize()];
                 int j = 0;
@@ -1427,10 +1430,10 @@ public final class TaggingPresetItems {
         }
     }
 
-    public static EnumSet<TaggingPresetType> getType(String types) throws SAXException {
+    public static Set<TaggingPresetType> getType(String types) throws SAXException {
         if (TYPE_CACHE.containsKey(types))
             return TYPE_CACHE.get(types);
-        EnumSet<TaggingPresetType> result = EnumSet.noneOf(TaggingPresetType.class);
+        Set<TaggingPresetType> result = EnumSet.noneOf(TaggingPresetType.class);
         for (String type : Arrays.asList(types.split(","))) {
             try {
                 TaggingPresetType presetType = TaggingPresetType.fromString(type);
diff --git a/src/org/openstreetmap/josm/gui/tagging/TaggingPresetReader.java b/src/org/openstreetmap/josm/gui/tagging/TaggingPresetReader.java
index cfff094..238b286 100644
--- a/src/org/openstreetmap/josm/gui/tagging/TaggingPresetReader.java
+++ b/src/org/openstreetmap/josm/gui/tagging/TaggingPresetReader.java
@@ -286,7 +286,7 @@ public final class TaggingPresetReader {
      * @return Collection of all presets successfully read
      */
     public static Collection<TaggingPreset> readAll(Collection<String> sources, boolean validate, boolean displayErrMsg) {
-        LinkedList<TaggingPreset> allPresets = new LinkedList<>();
+        List<TaggingPreset> allPresets = new LinkedList<>();
         for(String source : sources)  {
             try {
                 allPresets.addAll(readAll(source, validate));
diff --git a/src/org/openstreetmap/josm/gui/tagging/TaggingPresetSearchPrimitiveDialog.java b/src/org/openstreetmap/josm/gui/tagging/TaggingPresetSearchPrimitiveDialog.java
index 41958f7..08b0383 100644
--- a/src/org/openstreetmap/josm/gui/tagging/TaggingPresetSearchPrimitiveDialog.java
+++ b/src/org/openstreetmap/josm/gui/tagging/TaggingPresetSearchPrimitiveDialog.java
@@ -6,6 +6,7 @@ import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
 import java.awt.event.KeyEvent;
 import java.util.HashSet;
+import java.util.Set;
 
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.actions.JosmAction;
@@ -61,7 +62,7 @@ public final class TaggingPresetSearchPrimitiveDialog extends ExtendedDialog {
         if (buttonIndex == 0) {
             TaggingPreset preset = selector.getSelectedPreset();
             if (preset != null) {
-                final HashSet<OsmPrimitive> matching = new HashSet<>(Utils.filter(Main.main.getCurrentDataSet().allPrimitives(), preset));
+                final Set<OsmPrimitive> matching = new HashSet<>(Utils.filter(Main.main.getCurrentDataSet().allPrimitives(), preset));
                 Main.main.getCurrentDataSet().setSelected(matching);
             }
         }
diff --git a/src/org/openstreetmap/josm/gui/tagging/TaggingPresetSelector.java b/src/org/openstreetmap/josm/gui/tagging/TaggingPresetSelector.java
index 0895632..ba0095c 100644
--- a/src/org/openstreetmap/josm/gui/tagging/TaggingPresetSelector.java
+++ b/src/org/openstreetmap/josm/gui/tagging/TaggingPresetSelector.java
@@ -22,6 +22,7 @@ import java.util.HashSet;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Objects;
+import java.util.Set;
 
 import javax.swing.AbstractAction;
 import javax.swing.AbstractListModel;
@@ -73,18 +74,18 @@ public class TaggingPresetSelector extends JPanel implements SelectionChangedLis
     private final JList<TaggingPreset> lsResult;
     private final JCheckBox ckOnlyApplicable;
     private final JCheckBox ckSearchInTags;
-    private final EnumSet<TaggingPresetType> typesInSelection = EnumSet.noneOf(TaggingPresetType.class);
+    private final Set<TaggingPresetType> typesInSelection = EnumSet.noneOf(TaggingPresetType.class);
     private boolean typesInSelectionDirty = true;
-    private final PresetClassifications classifications = new PresetClassifications();
+    private final transient PresetClassifications classifications = new PresetClassifications();
     private final ResultListModel lsResultModel = new ResultListModel();
 
-    private final List<ListSelectionListener> listSelectionListeners = new ArrayList<>();
+    private final transient List<ListSelectionListener> listSelectionListeners = new ArrayList<>();
 
-    private ActionListener dblClickListener;
-    private ActionListener clickListener;
+    private transient ActionListener dblClickListener;
+    private transient ActionListener clickListener;
 
     private static class ResultListCellRenderer implements ListCellRenderer<TaggingPreset> {
-        final DefaultListCellRenderer def = new DefaultListCellRenderer();
+        private final DefaultListCellRenderer def = new DefaultListCellRenderer();
         @Override
         public Component getListCellRendererComponent(JList<? extends TaggingPreset> list, TaggingPreset tp, int index, boolean isSelected, boolean cellHasFocus) {
             JLabel result = (JLabel) def.getListCellRendererComponent(list, tp, index, isSelected, cellHasFocus);
@@ -96,7 +97,7 @@ public class TaggingPresetSelector extends JPanel implements SelectionChangedLis
 
     private static class ResultListModel extends AbstractListModel<TaggingPreset> {
 
-        private List<PresetClassification> presets = new ArrayList<>();
+        private transient List<PresetClassification> presets = new ArrayList<>();
 
         public synchronized void setPresets(List<PresetClassification> presets) {
             this.presets = presets;
@@ -355,7 +356,8 @@ public class TaggingPresetSelector extends JPanel implements SelectionChangedLis
 
         private final List<PresetClassification> classifications = new ArrayList<>();
 
-        public List<PresetClassification> getMatchingPresets(String searchText, boolean onlyApplicable, boolean inTags, EnumSet<TaggingPresetType> presetTypes, final Collection<? extends OsmPrimitive> selectedPrimitives) {
+        public List<PresetClassification> getMatchingPresets(String searchText, boolean onlyApplicable, boolean inTags,
+                Set<TaggingPresetType> presetTypes, final Collection<? extends OsmPrimitive> selectedPrimitives) {
             final String[] groupWords;
             final String[] nameWords;
 
@@ -370,7 +372,8 @@ public class TaggingPresetSelector extends JPanel implements SelectionChangedLis
             return getMatchingPresets(groupWords, nameWords, onlyApplicable, inTags, presetTypes, selectedPrimitives);
         }
 
-        public List<PresetClassification> getMatchingPresets(String[] groupWords, String[] nameWords, boolean onlyApplicable, boolean inTags, EnumSet<TaggingPresetType> presetTypes, final Collection<? extends OsmPrimitive> selectedPrimitives) {
+        public List<PresetClassification> getMatchingPresets(String[] groupWords, String[] nameWords, boolean onlyApplicable,
+                boolean inTags, Set<TaggingPresetType> presetTypes, final Collection<? extends OsmPrimitive> selectedPrimitives) {
 
             final List<PresetClassification> result = new ArrayList<>();
             for (PresetClassification presetClassification : classifications) {
@@ -450,7 +453,7 @@ public class TaggingPresetSelector extends JPanel implements SelectionChangedLis
         }
     }
 
-    private EnumSet<TaggingPresetType> getTypesInSelection() {
+    private Set<TaggingPresetType> getTypesInSelection() {
         if (typesInSelectionDirty) {
             synchronized (typesInSelection) {
                 typesInSelectionDirty = false;
diff --git a/src/org/openstreetmap/josm/gui/tagging/TaggingPresets.java b/src/org/openstreetmap/josm/gui/tagging/TaggingPresets.java
index bfb149f..72e9896 100644
--- a/src/org/openstreetmap/josm/gui/tagging/TaggingPresets.java
+++ b/src/org/openstreetmap/josm/gui/tagging/TaggingPresets.java
@@ -4,6 +4,7 @@ package org.openstreetmap.josm.gui.tagging;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.HashMap;
+import java.util.Map;
 
 import javax.swing.JMenu;
 import javax.swing.JMenuItem;
@@ -50,7 +51,7 @@ public final class TaggingPresets {
             Main.main.menu.presetsMenu.setVisible(false);
         } else {
             AutoCompletionManager.cachePresets(taggingPresets);
-            HashMap<TaggingPresetMenu,JMenu> submenus = new HashMap<>();
+            Map<TaggingPresetMenu,JMenu> submenus = new HashMap<>();
             for (final TaggingPreset p : taggingPresets) {
                 JMenu m = p.group != null ? submenus.get(p.group) : Main.main.menu.presetsMenu;
                 if (p instanceof TaggingPresetSeparator) {
diff --git a/src/org/openstreetmap/josm/gui/tagging/ac/AutoCompletingTextField.java b/src/org/openstreetmap/josm/gui/tagging/ac/AutoCompletingTextField.java
index 9944981..9be0cf4 100644
--- a/src/org/openstreetmap/josm/gui/tagging/ac/AutoCompletingTextField.java
+++ b/src/org/openstreetmap/josm/gui/tagging/ac/AutoCompletingTextField.java
@@ -241,7 +241,7 @@ public class AutoCompletingTextField extends JosmTextField implements ComboBoxEd
     /* TableCellEditor interface                                                            */
     /* ------------------------------------------------------------------------------------ */
 
-    private CellEditorSupport tableCellEditorSupport;
+    private transient CellEditorSupport tableCellEditorSupport;
     private String originalValue;
 
     @Override
diff --git a/src/org/openstreetmap/josm/gui/tagging/ac/AutoCompletionList.java b/src/org/openstreetmap/josm/gui/tagging/ac/AutoCompletionList.java
index 1c55b9f..6c9c735 100644
--- a/src/org/openstreetmap/josm/gui/tagging/ac/AutoCompletionList.java
+++ b/src/org/openstreetmap/josm/gui/tagging/ac/AutoCompletionList.java
@@ -32,13 +32,13 @@ import org.openstreetmap.josm.tools.CheckParameterUtil;
 public class AutoCompletionList extends AbstractTableModel {
 
     /** the bare list of AutoCompletionItems */
-    private List<AutoCompletionListItem> list = null;
+    private transient List<AutoCompletionListItem> list = null;
     /**  the filtered list of AutoCompletionItems */
-    private ArrayList<AutoCompletionListItem> filtered = null;
+    private transient ArrayList<AutoCompletionListItem> filtered = null;
     /** the filter expression */
     private String filter = null;
     /** map from value to priority */
-    private Map<String,AutoCompletionListItem> valutToItemMap;
+    private transient Map<String,AutoCompletionListItem> valutToItemMap;
 
     /**
      * constructor
@@ -56,7 +56,7 @@ public class AutoCompletionList extends AbstractTableModel {
      *
      * @param filter  the filter expression; must not be null
      *
-     * @exception IllegalArgumentException thrown, if filter is null
+     * @throws IllegalArgumentException if filter is null
      */
     public void applyFilter(String filter) {
         CheckParameterUtil.ensureParameterNotNull(filter, "filter");
@@ -99,7 +99,7 @@ public class AutoCompletionList extends AbstractTableModel {
      * added it is not null and if it does not exist in the list yet.
      *
      * @param other another auto completion list; must not be null
-     * @exception IllegalArgumentException thrown, if other is null
+     * @throws IllegalArgumentException if other is null
      */
     public void add(AutoCompletionList other) {
         CheckParameterUtil.ensureParameterNotNull(other, "other");
@@ -115,7 +115,7 @@ public class AutoCompletionList extends AbstractTableModel {
      * are not null and which do not exist yet in the list are added.
      *
      * @param other a list of AutoCompletionListItem; must not be null
-     * @exception IllegalArgumentException thrown, if other is null
+     * @throws IllegalArgumentException if other is null
      */
     public void add(List<AutoCompletionListItem> other) {
         CheckParameterUtil.ensureParameterNotNull(other, "other");
@@ -263,7 +263,7 @@ public class AutoCompletionList extends AbstractTableModel {
      * @param idx the index; must be in the range 0 <= idx < {@link #getFilteredSize()}
      * @return the item
      *
-     * @exception IndexOutOfBoundsException thrown, if idx is out of bounds
+     * @throws IndexOutOfBoundsException if idx is out of bounds
      */
     public AutoCompletionListItem getFilteredItem(int idx) {
         if (idx < 0 || idx >= getFilteredSize())
diff --git a/src/org/openstreetmap/josm/gui/tagging/ac/AutoCompletionListItem.java b/src/org/openstreetmap/josm/gui/tagging/ac/AutoCompletionListItem.java
index 70ef8ce..c445c6f 100644
--- a/src/org/openstreetmap/josm/gui/tagging/ac/AutoCompletionListItem.java
+++ b/src/org/openstreetmap/josm/gui/tagging/ac/AutoCompletionListItem.java
@@ -77,7 +77,7 @@ public class AutoCompletionListItem implements Comparable<AutoCompletionListItem
     /**
      * sets the value
      * @param value the value; must not be null
-     * @exception IllegalArgumentException thrown, if value if null
+     * @throws IllegalArgumentException if value if null
      */
     public void setValue(String value) {
         CheckParameterUtil.ensureParameterNotNull(value, "value");
diff --git a/src/org/openstreetmap/josm/gui/util/AdjustmentSynchronizer.java b/src/org/openstreetmap/josm/gui/util/AdjustmentSynchronizer.java
index 0719362..1acf48f 100644
--- a/src/org/openstreetmap/josm/gui/util/AdjustmentSynchronizer.java
+++ b/src/org/openstreetmap/josm/gui/util/AdjustmentSynchronizer.java
@@ -89,9 +89,9 @@ public class AdjustmentSynchronizer implements AdjustmentListener {
      *
      * @param adjustable the adjustable
      * @return true, if the adjustable is participating in synchronized scrolling, false otherwise
-     * @throws IllegalStateException thrown, if adjustable is not registered for synchronized scrolling
+     * @throws IllegalStateException if adjustable is not registered for synchronized scrolling
      */
-    protected boolean isParticipatingInSynchronizedScrolling(Adjustable adjustable) throws IllegalStateException {
+    protected boolean isParticipatingInSynchronizedScrolling(Adjustable adjustable) {
         if (! synchronizedAdjustables.contains(adjustable))
             throw new IllegalStateException(tr("Adjustable {0} not registered yet.", adjustable));
 
@@ -109,8 +109,8 @@ public class AdjustmentSynchronizer implements AdjustmentListener {
      *
      * @param view  the checkbox to control whether an adjustable participates in synchronized adjustment
      * @param adjustable the adjustable
-     * @exception IllegalArgumentException thrown, if view is null
-     * @exception IllegalArgumentException thrown, if adjustable is null
+     * @throws IllegalArgumentException if view is null
+     * @throws IllegalArgumentException if adjustable is null
      */
     public void adapt(final JCheckBox view, final Adjustable adjustable)  {
         CheckParameterUtil.ensureParameterNotNull(adjustable, "adjustable");
diff --git a/src/org/openstreetmap/josm/gui/util/AdvancedKeyPressDetector.java b/src/org/openstreetmap/josm/gui/util/AdvancedKeyPressDetector.java
index 2d46c55..be3c2fa 100644
--- a/src/org/openstreetmap/josm/gui/util/AdvancedKeyPressDetector.java
+++ b/src/org/openstreetmap/josm/gui/util/AdvancedKeyPressDetector.java
@@ -12,6 +12,7 @@ import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
 import java.awt.event.KeyEvent;
 import java.util.ArrayList;
+import java.util.List;
 import java.util.Set;
 import java.util.TreeSet;
 
@@ -34,8 +35,8 @@ public class AdvancedKeyPressDetector implements AWTEventListener {
     private KeyEvent releaseEvent;
     private Timer timer;
 
-    private final ArrayList<KeyPressReleaseListener> keyListeners = new ArrayList<>();
-    private final ArrayList<ModifierListener> modifierListeners = new ArrayList<>();
+    private final List<KeyPressReleaseListener> keyListeners = new ArrayList<>();
+    private final List<ModifierListener> modifierListeners = new ArrayList<>();
     private int previousModifiers;
 
     private boolean enabled = true;
diff --git a/src/org/openstreetmap/josm/gui/util/GuiHelper.java b/src/org/openstreetmap/josm/gui/util/GuiHelper.java
index 1b3401e..7cd2391 100644
--- a/src/org/openstreetmap/josm/gui/util/GuiHelper.java
+++ b/src/org/openstreetmap/josm/gui/util/GuiHelper.java
@@ -46,7 +46,10 @@ import org.openstreetmap.josm.gui.ExtendedDialog;
 import org.openstreetmap.josm.gui.widgets.HtmlPanel;
 import org.openstreetmap.josm.tools.CheckParameterUtil;
 import org.openstreetmap.josm.tools.GBC;
+import org.openstreetmap.josm.tools.ImageOverlay;
 import org.openstreetmap.josm.tools.ImageProvider;
+import org.openstreetmap.josm.tools.ImageProvider.ImageSizes;
+import org.openstreetmap.josm.tools.LanguageInfo;
 
 /**
  * basic gui utils
@@ -154,11 +157,9 @@ public final class GuiHelper {
                 title, new String[] {tr("Cancel"), tr("Continue")});
         dlg.setContent(content);
         dlg.setButtonIcons(new Icon[] {
-                ImageProvider.get("cancel"),
-                ImageProvider.overlay(
-                        ImageProvider.get("upload"),
-                        new ImageIcon(ImageProvider.get("warning-small").getImage().getScaledInstance(10 , 10, Image.SCALE_SMOOTH)),
-                        ImageProvider.OverlayPosition.SOUTHEAST)});
+                    new ImageProvider("cancel").setMaxSize(ImageSizes.LARGEICON).get(),
+                    new ImageProvider("upload").setMaxSize(ImageSizes.LARGEICON).addOverlay(
+                            new ImageOverlay(new ImageProvider("warning-small"), 0.5,0.5,1.0,1.0)).get()});
         dlg.setToolTipTexts(new String[] {
                 tr("Cancel"),
                 continueToolTip});
@@ -308,7 +309,7 @@ public final class GuiHelper {
      */
     public static Font getMonospacedFont(JComponent component) {
         // Special font for Khmer script
-        if ("km".equals(Main.pref.get("language"))) {
+        if ("km".equals(LanguageInfo.getJOSMLocaleCode())) {
             return component.getFont();
         } else {
             return new Font("Monospaced", component.getFont().getStyle(), component.getFont().getSize());
@@ -328,7 +329,7 @@ public final class GuiHelper {
     public static Font getTitleFont() {
         List<String> fonts = Arrays.asList(GraphicsEnvironment.getLocalGraphicsEnvironment().getAvailableFontFamilyNames());
         // Special font for Khmer script
-        if ("km".equals(Main.pref.get("language"))) {
+        if ("km".equals(LanguageInfo.getJOSMLocaleCode())) {
             return UIManager.getFont("Label.font").deriveFont(20.0f);
         }
         // Helvetica is the preferred choice but is not available by default on Windows
diff --git a/src/org/openstreetmap/josm/gui/util/HighlightHelper.java b/src/org/openstreetmap/josm/gui/util/HighlightHelper.java
index 3bee7da..366b6f4 100644
--- a/src/org/openstreetmap/josm/gui/util/HighlightHelper.java
+++ b/src/org/openstreetmap/josm/gui/util/HighlightHelper.java
@@ -17,7 +17,7 @@ import org.openstreetmap.josm.data.osm.Relation;
  * allows easy and fast change of highlighting
  */
 public class HighlightHelper {
-    Set<OsmPrimitive> highlightedPrimitives = new HashSet<>();
+    private final Set<OsmPrimitive> highlightedPrimitives = new HashSet<>();
 
     /**
      * Highlight and remember given primitives
diff --git a/src/org/openstreetmap/josm/gui/util/RotationAngle.java b/src/org/openstreetmap/josm/gui/util/RotationAngle.java
index dc302e1..867ea86 100644
--- a/src/org/openstreetmap/josm/gui/util/RotationAngle.java
+++ b/src/org/openstreetmap/josm/gui/util/RotationAngle.java
@@ -1,8 +1,6 @@
+// License: GPL. See LICENSE file for details.
 package org.openstreetmap.josm.gui.util;
 
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
 import org.openstreetmap.josm.data.osm.Node;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.data.osm.Way;
diff --git a/src/org/openstreetmap/josm/gui/widgets/AbstractFileChooser.java b/src/org/openstreetmap/josm/gui/widgets/AbstractFileChooser.java
index cfa3133..b82f81d 100644
--- a/src/org/openstreetmap/josm/gui/widgets/AbstractFileChooser.java
+++ b/src/org/openstreetmap/josm/gui/widgets/AbstractFileChooser.java
@@ -153,8 +153,7 @@ public abstract class AbstractFileChooser {
      * <li>JFileChooser.FILES_AND_DIRECTORIES
      * </ul>
      *
-     * @exception IllegalArgumentException  if <code>mode</code> is an
-     *                          illegal file selection mode
+     * @throws IllegalArgumentException if <code>mode</code> is an illegal file selection mode
      */
     public abstract void setFileSelectionMode(int selectionMode);
 
@@ -196,8 +195,7 @@ public abstract class AbstractFileChooser {
      * <li>JFileChooser.ERROR_OPTION if an error occurs or the
      *                  dialog is dismissed
      * </ul>
-     * @exception HeadlessException if GraphicsEnvironment.isHeadless()
-     * returns true.
+     * @throws HeadlessException if GraphicsEnvironment.isHeadless() returns true.
      * @see java.awt.GraphicsEnvironment#isHeadless
      */
     public abstract int showOpenDialog(Component parent);
@@ -217,8 +215,7 @@ public abstract class AbstractFileChooser {
      * <li>JFileChooser.ERROR_OPTION if an error occurs or the
      *                  dialog is dismissed
      * </ul>
-     * @exception HeadlessException if GraphicsEnvironment.isHeadless()
-     * returns true.
+     * @throws HeadlessException if GraphicsEnvironment.isHeadless() returns true.
      * @see java.awt.GraphicsEnvironment#isHeadless
      */
     public abstract int showSaveDialog(Component parent);
diff --git a/src/org/openstreetmap/josm/gui/widgets/AbstractIdTextField.java b/src/org/openstreetmap/josm/gui/widgets/AbstractIdTextField.java
index 9eeb57b..22523d6 100644
--- a/src/org/openstreetmap/josm/gui/widgets/AbstractIdTextField.java
+++ b/src/org/openstreetmap/josm/gui/widgets/AbstractIdTextField.java
@@ -14,7 +14,7 @@ import org.openstreetmap.josm.tools.Utils;
  */
 public abstract class AbstractIdTextField<T extends AbstractTextComponentValidator> extends JosmTextField {
 
-    protected final T validator;
+    protected final transient T validator;
 
     /**
      * Constructs a new {@link AbstractIdTextField}
@@ -55,11 +55,11 @@ public abstract class AbstractIdTextField<T extends AbstractTextComponentValidat
      * Clears field if content is invalid
      */
     public final void clearTextIfInvalid() {
-        if (!validator.isValid()) 
+        if (!validator.isValid())
             setText("");
         validator.validate();
     }
-    
+
     /**
      * Reads the id(s).
      * @return true if at least a valid id has been successfully read, false otherwise
diff --git a/src/org/openstreetmap/josm/gui/widgets/AbstractTextComponentValidator.java b/src/org/openstreetmap/josm/gui/widgets/AbstractTextComponentValidator.java
index 7cd2558..fb294b6 100644
--- a/src/org/openstreetmap/josm/gui/widgets/AbstractTextComponentValidator.java
+++ b/src/org/openstreetmap/josm/gui/widgets/AbstractTextComponentValidator.java
@@ -84,9 +84,9 @@ public abstract class AbstractTextComponentValidator implements ActionListener,
      * Creates the validator and weires it to the text component <code>tc</code>.
      *
      * @param tc the text component. Must not be null.
-     * @throws IllegalArgumentException thrown if tc is null
+     * @throws IllegalArgumentException if tc is null
      */
-    public AbstractTextComponentValidator(JTextComponent tc) throws IllegalArgumentException {
+    public AbstractTextComponentValidator(JTextComponent tc) {
         this(tc, true);
     }
 
@@ -94,11 +94,11 @@ 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.
      */
-    public AbstractTextComponentValidator(JTextComponent tc, boolean addActionListener) throws IllegalArgumentException {
+    public AbstractTextComponentValidator(JTextComponent tc, boolean addActionListener) {
         this(tc, true, true, addActionListener);
     }
 
-    public AbstractTextComponentValidator(JTextComponent tc, boolean addFocusListener, boolean addDocumentListener, boolean addActionListener) throws IllegalArgumentException {
+    public AbstractTextComponentValidator(JTextComponent tc, boolean addFocusListener, boolean addDocumentListener, boolean addActionListener) {
         CheckParameterUtil.ensureParameterNotNull(tc, "tc");
         this.tc = tc;
         if (addFocusListener) {
diff --git a/src/org/openstreetmap/josm/gui/widgets/ComboBoxHistory.java b/src/org/openstreetmap/josm/gui/widgets/ComboBoxHistory.java
index 9969105..040fba2 100644
--- a/src/org/openstreetmap/josm/gui/widgets/ComboBoxHistory.java
+++ b/src/org/openstreetmap/josm/gui/widgets/ComboBoxHistory.java
@@ -13,7 +13,7 @@ public class ComboBoxHistory extends DefaultComboBoxModel<AutoCompletionListItem
 
     private int maxSize = 10;
 
-    private List<HistoryChangedListener> listeners = new ArrayList<>();
+    private transient List<HistoryChangedListener> listeners = new ArrayList<>();
 
     public ComboBoxHistory(int size) {
         maxSize = size;
diff --git a/src/org/openstreetmap/josm/gui/widgets/DateEditorWithSlider.java b/src/org/openstreetmap/josm/gui/widgets/DateEditorWithSlider.java
index 0e98866..dfdfd39 100644
--- a/src/org/openstreetmap/josm/gui/widgets/DateEditorWithSlider.java
+++ b/src/org/openstreetmap/josm/gui/widgets/DateEditorWithSlider.java
@@ -34,7 +34,7 @@ public class DateEditorWithSlider extends JPanel {
     private static final int MAX_SLIDER=300;
     private boolean watchSlider = true;
 
-    private List<ChangeListener> listeners = new ArrayList<>();
+    private transient List<ChangeListener> listeners = new ArrayList<>();
 
     /**
      * Constructs a new {@code DateEditorWithSlider} with a given label
diff --git a/src/org/openstreetmap/josm/gui/widgets/DisableShortcutsOnFocusGainedTextField.java b/src/org/openstreetmap/josm/gui/widgets/DisableShortcutsOnFocusGainedTextField.java
index a67dc86..1e2c41c 100644
--- a/src/org/openstreetmap/josm/gui/widgets/DisableShortcutsOnFocusGainedTextField.java
+++ b/src/org/openstreetmap/josm/gui/widgets/DisableShortcutsOnFocusGainedTextField.java
@@ -89,14 +89,14 @@ public class DisableShortcutsOnFocusGainedTextField extends JosmTextField {
      *   the preferred width >= 0; if <code>columns</code>
      *   is set to zero, the preferred width will be whatever
      *   naturally results from the component implementation
-     * @exception IllegalArgumentException if <code>columns</code> < 0
+     * @throws IllegalArgumentException if <code>columns</code> < 0
      */
     public DisableShortcutsOnFocusGainedTextField(Document doc, String text, int columns) {
         super(doc, text, columns);
     }
 
-    private final List<Pair<Action,Shortcut>> unregisteredActionShortcuts = new ArrayList<>();
-    private final Set<JosmAction> disabledMenuActions = new HashSet<>();
+    private final transient List<Pair<Action,Shortcut>> unregisteredActionShortcuts = new ArrayList<>();
+    private final transient Set<JosmAction> disabledMenuActions = new HashSet<>();
 
     @Override
     public void focusGained(FocusEvent e) {
diff --git a/src/org/openstreetmap/josm/gui/widgets/JosmEditorPane.java b/src/org/openstreetmap/josm/gui/widgets/JosmEditorPane.java
index b46b53e..82355a5 100644
--- a/src/org/openstreetmap/josm/gui/widgets/JosmEditorPane.java
+++ b/src/org/openstreetmap/josm/gui/widgets/JosmEditorPane.java
@@ -15,8 +15,8 @@ import javax.swing.UIDefaults;
 import javax.swing.UIManager;
 import javax.swing.text.html.StyleSheet;
 
-import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.gui.util.GuiHelper;
+import org.openstreetmap.josm.tools.LanguageInfo;
 import org.openstreetmap.josm.tools.Utils;
 
 /**
@@ -38,7 +38,7 @@ public class JosmEditorPane extends JEditorPane {
      * Creates a <code>JosmEditorPane</code> based on a specified URL for input.
      *
      * @param initialPage the URL
-     * @exception IOException if the URL is <code>null</code> or cannot be accessed
+     * @throws IOException if the URL is <code>null</code> or cannot be accessed
      */
     public JosmEditorPane(URL initialPage) throws IOException {
         this();
@@ -50,7 +50,7 @@ public class JosmEditorPane extends JEditorPane {
      * a URL specification.
      *
      * @param url the URL
-     * @exception IOException if the URL is <code>null</code> or cannot be accessed
+     * @throws IOException if the URL is <code>null</code> or cannot be accessed
      */
     public JosmEditorPane(String url) throws IOException {
         this();
@@ -64,7 +64,7 @@ public class JosmEditorPane extends JEditorPane {
      *
      * @param type mime type of the given text
      * @param text the text to initialize with; may be <code>null</code>
-     * @exception NullPointerException if the <code>type</code> parameter
+     * @throws NullPointerException if the <code>type</code> parameter
      *      is <code>null</code>
      */
     public JosmEditorPane(String type, String text) {
@@ -103,7 +103,7 @@ public class JosmEditorPane extends JEditorPane {
         ss.addRule("h1 {" + getFontRule(GuiHelper.getTitleFont()) + "}");
         ss.addRule("ol {margin-left: 1cm; margin-top: 0.1cm; margin-bottom: 0.2cm; list-style-type: decimal}");
         ss.addRule("ul {margin-left: 1cm; margin-top: 0.1cm; margin-bottom: 0.2cm; list-style-type: disc}");
-        if ("km".equals(Main.pref.get("language"))) {
+        if ("km".equals(LanguageInfo.getJOSMLocaleCode())) {
             // Fix rendering problem for Khmer script
             ss.addRule("p {" + getFontRule(UIManager.getFont("Label.font")) + "}");
         }
diff --git a/src/org/openstreetmap/josm/gui/widgets/JosmTextArea.java b/src/org/openstreetmap/josm/gui/widgets/JosmTextArea.java
index 5695c85..1e1a2a8 100644
--- a/src/org/openstreetmap/josm/gui/widgets/JosmTextArea.java
+++ b/src/org/openstreetmap/josm/gui/widgets/JosmTextArea.java
@@ -50,7 +50,7 @@ public class JosmTextArea extends JTextArea implements FocusListener {
      *
      * @param rows the number of rows >= 0
      * @param columns the number of columns >= 0
-     * @exception IllegalArgumentException if the rows or columns
+     * @throws IllegalArgumentException if the rows or columns
      *  arguments are negative.
      */
     public JosmTextArea(int rows, int columns) {
@@ -64,7 +64,7 @@ public class JosmTextArea extends JTextArea implements FocusListener {
      * @param text the text to be displayed, or null
      * @param rows the number of rows >= 0
      * @param columns the number of columns >= 0
-     * @exception IllegalArgumentException if the rows or columns
+     * @throws IllegalArgumentException if the rows or columns
      *  arguments are negative.
      */
     public JosmTextArea(String text, int rows, int columns) {
@@ -80,7 +80,7 @@ public class JosmTextArea extends JTextArea implements FocusListener {
      * @param text the text to be displayed, null if none
      * @param rows the number of rows >= 0
      * @param columns the number of columns >= 0
-     * @exception IllegalArgumentException if the rows or columns
+     * @throws IllegalArgumentException if the rows or columns
      *  arguments are negative.
      */
     public JosmTextArea(Document doc, String text, int rows, int columns) {
diff --git a/src/org/openstreetmap/josm/gui/widgets/JosmTextField.java b/src/org/openstreetmap/josm/gui/widgets/JosmTextField.java
index 5fd86ba..8f08192 100644
--- a/src/org/openstreetmap/josm/gui/widgets/JosmTextField.java
+++ b/src/org/openstreetmap/josm/gui/widgets/JosmTextField.java
@@ -42,7 +42,7 @@ public class JosmTextField extends JTextField implements FocusListener {
      *   the preferred width >= 0; if <code>columns</code>
      *   is set to zero, the preferred width will be whatever
      *   naturally results from the component implementation
-     * @exception IllegalArgumentException if <code>columns</code> < 0
+     * @throws IllegalArgumentException if <code>columns</code> < 0
      */
     public JosmTextField(Document doc, String text, int columns) {
         this(doc, text, columns, true);
@@ -63,7 +63,7 @@ public class JosmTextField extends JTextField implements FocusListener {
      *   is set to zero, the preferred width will be whatever
      *   naturally results from the component implementation
      * @param undoRedo Enables or not Undo/Redo feature. Not recommended for table cell editors, unless each cell provides its own editor
-     * @exception IllegalArgumentException if <code>columns</code> < 0
+     * @throws IllegalArgumentException if <code>columns</code> < 0
      */
     public JosmTextField(Document doc, String text, int columns, boolean undoRedo) {
         super(doc, text, columns);
diff --git a/src/org/openstreetmap/josm/gui/widgets/MultiSplitLayout.java b/src/org/openstreetmap/josm/gui/widgets/MultiSplitLayout.java
index e8fa42e..9f36a30 100644
--- a/src/org/openstreetmap/josm/gui/widgets/MultiSplitLayout.java
+++ b/src/org/openstreetmap/josm/gui/widgets/MultiSplitLayout.java
@@ -707,7 +707,7 @@ public class MultiSplitLayout implements LayoutManager {
      * incorrectly.
      */
     public static class InvalidLayoutException extends RuntimeException {
-        private final Node node;
+        private final transient Node node;
         public InvalidLayoutException (String msg, Node node) {
             super(msg);
             this.node = node;
diff --git a/src/org/openstreetmap/josm/gui/widgets/MultiSplitPane.java b/src/org/openstreetmap/josm/gui/widgets/MultiSplitPane.java
index 7a6ae95..e15b40c 100644
--- a/src/org/openstreetmap/josm/gui/widgets/MultiSplitPane.java
+++ b/src/org/openstreetmap/josm/gui/widgets/MultiSplitPane.java
@@ -46,9 +46,9 @@ import org.openstreetmap.josm.gui.widgets.MultiSplitLayout.Node;
  * @author Hans Muller - SwingX
  */
 public class MultiSplitPane extends JPanel {
-    private AccessibleContext accessibleContext = null;
+    private transient AccessibleContext accessibleContext = null;
     private boolean continuousLayout = true;
-    private DividerPainter dividerPainter = new DefaultDividerPainter();
+    private transient DividerPainter dividerPainter = new DefaultDividerPainter();
 
     /**
      * Creates a MultiSplitPane with it's LayoutManager set to
@@ -144,7 +144,7 @@ public class MultiSplitPane extends JPanel {
      * @see #getDividerPainter
      * @see #setDividerPainter
      */
-    public abstract static class DividerPainter {
+    public interface DividerPainter {
         /**
          * Paint a single Divider.
          *
@@ -154,7 +154,7 @@ public class MultiSplitPane extends JPanel {
         public abstract void paint(Graphics g, Divider divider);
     }
 
-    private class DefaultDividerPainter extends DividerPainter {
+    private class DefaultDividerPainter implements DividerPainter {
         @Override
         public void paint(Graphics g, Divider divider) {
             if ((divider == activeDivider()) && !isContinuousLayout()) {
@@ -221,7 +221,7 @@ public class MultiSplitPane extends JPanel {
     }
 
     private boolean dragUnderway = false;
-    private MultiSplitLayout.Divider dragDivider = null;
+    private transient MultiSplitLayout.Divider dragDivider = null;
     private Rectangle initialDividerBounds = null;
     private boolean oldFloatingDividers = true;
     private int dragOffsetX = 0;
diff --git a/src/org/openstreetmap/josm/gui/widgets/OsmPrimitivesTable.java b/src/org/openstreetmap/josm/gui/widgets/OsmPrimitivesTable.java
index 3ba8033..eb61fda 100644
--- a/src/org/openstreetmap/josm/gui/widgets/OsmPrimitivesTable.java
+++ b/src/org/openstreetmap/josm/gui/widgets/OsmPrimitivesTable.java
@@ -16,11 +16,11 @@ import org.openstreetmap.josm.gui.MapView;
 import org.openstreetmap.josm.gui.layer.OsmDataLayer;
 
 public abstract class OsmPrimitivesTable extends JTable {
-    
+
     /**
      * the data layer in whose context primitives are edited in this table
      */
-    private OsmDataLayer layer;
+    private transient OsmDataLayer layer;
 
     /** the popup menu */
     private JPopupMenu popupMenu;
@@ -39,7 +39,7 @@ public abstract class OsmPrimitivesTable extends JTable {
         addMouseListener(new PopupMenuLauncher(getPopUpMenu()));
         addMouseListener(new DblClickHandler());
     }
-    
+
     public OsmPrimitivesTableModel getOsmPrimitivesTableModel() {
         return (OsmPrimitivesTableModel) getModel();
     }
@@ -55,7 +55,7 @@ public abstract class OsmPrimitivesTable extends JTable {
         }
         return popupMenu;
     }
-    
+
     protected abstract ZoomToAction buildZoomToAction();
 
     protected JPopupMenu buildPopupMenu() {
@@ -66,11 +66,11 @@ public abstract class OsmPrimitivesTable extends JTable {
         menu.add(zoomToAction);
         return menu;
     }
-    
+
     public void unlinkAsListener() {
         MapView.removeLayerChangeListener(zoomToAction);
     }
-        
+
     public OsmPrimitive getPrimitiveInLayer(int row, OsmDataLayer layer) {
         return getOsmPrimitivesTableModel().getReferredPrimitive(row);
     }
diff --git a/src/org/openstreetmap/josm/gui/widgets/QuadStateCheckBox.java b/src/org/openstreetmap/josm/gui/widgets/QuadStateCheckBox.java
index 16872e8..f1f8090 100644
--- a/src/org/openstreetmap/josm/gui/widgets/QuadStateCheckBox.java
+++ b/src/org/openstreetmap/josm/gui/widgets/QuadStateCheckBox.java
@@ -42,7 +42,7 @@ public class QuadStateCheckBox extends JCheckBox {
         PARTIAL
     }
 
-    private final QuadStateDecorator model;
+    private final transient QuadStateDecorator model;
     private State[] allowed;
 
     /**
diff --git a/src/org/openstreetmap/josm/gui/widgets/TextContextualPopupMenu.java b/src/org/openstreetmap/josm/gui/widgets/TextContextualPopupMenu.java
index 4dafc76..9606e66 100644
--- a/src/org/openstreetmap/josm/gui/widgets/TextContextualPopupMenu.java
+++ b/src/org/openstreetmap/josm/gui/widgets/TextContextualPopupMenu.java
@@ -50,7 +50,7 @@ public class TextContextualPopupMenu extends JPopupMenu {
     protected final RedoAction redoAction = new RedoAction();
     protected final UndoManager undo = new UndoManager();
 
-    protected final UndoableEditListener undoEditListener = new UndoableEditListener() {
+    protected final transient UndoableEditListener undoEditListener = new UndoableEditListener() {
         @Override
         public void undoableEditHappened(UndoableEditEvent e) {
             undo.addEdit(e.getEdit());
@@ -59,7 +59,7 @@ public class TextContextualPopupMenu extends JPopupMenu {
         }
     };
 
-    protected final PropertyChangeListener propertyChangeListener = new PropertyChangeListener() {
+    protected final transient PropertyChangeListener propertyChangeListener = new PropertyChangeListener() {
         @Override
         public void propertyChange(PropertyChangeEvent evt) {
             if (EDITABLE.equals(evt.getPropertyName())) {
diff --git a/src/org/openstreetmap/josm/io/AbstractParser.java b/src/org/openstreetmap/josm/io/AbstractParser.java
index 079cf06..f9f452b 100644
--- a/src/org/openstreetmap/josm/io/AbstractParser.java
+++ b/src/org/openstreetmap/josm/io/AbstractParser.java
@@ -24,7 +24,7 @@ import org.xml.sax.helpers.DefaultHandler;
  * @since 6201
  */
 public abstract class AbstractParser extends DefaultHandler {
-    
+
     /** the current primitive to be read */
     protected HistoryOsmPrimitive currentPrimitive;
     protected Locator locator;
@@ -33,9 +33,11 @@ public abstract class AbstractParser extends DefaultHandler {
     public void setDocumentLocator(Locator locator) {
         this.locator = locator;
     }
-    
+
     protected abstract void throwException(String message) throws SAXException;
 
+    protected abstract void throwException(String message, Exception e) throws SAXException;
+
     protected final long getMandatoryAttributeLong(Attributes attr, String name) throws SAXException {
         String v = attr.getValue(name);
         if (v == null) {
@@ -45,7 +47,7 @@ public abstract class AbstractParser extends DefaultHandler {
         try {
             l = Long.parseLong(v);
         } catch(NumberFormatException e) {
-            throwException(tr("Illegal value for mandatory attribute ''{0}'' of type long. Got ''{1}''.", name, v));
+            throwException(tr("Illegal value for mandatory attribute ''{0}'' of type long. Got ''{1}''.", name, v), e);
         }
         if (l < 0) {
             throwException(tr("Illegal value for mandatory attribute ''{0}'' of type long (>=0). Got ''{1}''.", name, v));
@@ -61,7 +63,7 @@ public abstract class AbstractParser extends DefaultHandler {
         try {
             l = Long.parseLong(v);
         } catch(NumberFormatException e) {
-            throwException(tr("Illegal value for mandatory attribute ''{0}'' of type long. Got ''{1}''.", name, v));
+            throwException(tr("Illegal value for mandatory attribute ''{0}'' of type long. Got ''{1}''.", name, v), e);
         }
         if (l < 0) {
             throwException(tr("Illegal value for mandatory attribute ''{0}'' of type long (>=0). Got ''{1}''.", name, v));
@@ -78,7 +80,7 @@ public abstract class AbstractParser extends DefaultHandler {
         try {
             d = Double.parseDouble(v);
         } catch(NumberFormatException e) {
-            throwException(tr("Illegal value for attribute ''{0}'' of type double. Got ''{1}''.", name, v));
+            throwException(tr("Illegal value for attribute ''{0}'' of type double. Got ''{1}''.", name, v), e);
         }
         return d;
     }
@@ -101,7 +103,7 @@ public abstract class AbstractParser extends DefaultHandler {
         throwException(tr("Illegal value for mandatory attribute ''{0}'' of type boolean. Got ''{1}''.", name, v));
         return false; // not reached
     }
-    
+
     protected final HistoryOsmPrimitive createPrimitive(Attributes atts, OsmPrimitiveType type) throws SAXException {
         long id = getMandatoryAttributeLong(atts,"id");
         long version = getMandatoryAttributeLong(atts,"version");
@@ -151,7 +153,7 @@ public abstract class AbstractParser extends DefaultHandler {
     protected final void startWay(Attributes atts) throws SAXException {
         currentPrimitive = createPrimitive(atts, OsmPrimitiveType.WAY);
     }
-    
+
     protected final void startRelation(Attributes atts) throws SAXException {
         currentPrimitive = createPrimitive(atts, OsmPrimitiveType.RELATION);
     }
@@ -174,13 +176,13 @@ public abstract class AbstractParser extends DefaultHandler {
         try {
             type = OsmPrimitiveType.fromApiTypeName(v);
         } catch(IllegalArgumentException e) {
-            throwException(tr("Illegal value for mandatory attribute ''{0}'' of type OsmPrimitiveType. Got ''{1}''.", "type", v));
+            throwException(tr("Illegal value for mandatory attribute ''{0}'' of type OsmPrimitiveType. Got ''{1}''.", "type", v), e);
         }
         String role = getMandatoryAttributeString(atts, "role");
         RelationMemberData member = new RelationMemberData(role, type,ref);
         ((HistoryRelation)currentPrimitive).addMember(member);
     }
-    
+
     protected final boolean doStartElement(String qName, Attributes atts) throws SAXException {
         switch (qName) {
         case "node":
diff --git a/src/org/openstreetmap/josm/io/AbstractReader.java b/src/org/openstreetmap/josm/io/AbstractReader.java
index ca6e56c..1dcc1b6 100644
--- a/src/org/openstreetmap/josm/io/AbstractReader.java
+++ b/src/org/openstreetmap/josm/io/AbstractReader.java
@@ -8,6 +8,7 @@ import java.util.Collection;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.Map.Entry;
 
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.data.osm.Changeset;
@@ -51,7 +52,7 @@ public abstract class AbstractReader {
      * Data structure for relation objects
      */
     protected final Map<Long, Collection<RelationMemberData>> relations = new HashMap<>();
-    
+
     /**
      * Replies the parsed data set
      *
@@ -60,7 +61,7 @@ public abstract class AbstractReader {
     public DataSet getDataSet() {
         return ds;
     }
-    
+
     /**
      * Processes the parsed nodes after parsing. Just adds them to
      * the dataset
@@ -78,13 +79,14 @@ public abstract class AbstractReader {
      * Processes the ways after parsing. Rebuilds the list of nodes of each way and
      * adds the way to the dataset
      *
-     * @throws IllegalDataException thrown if a data integrity problem is detected
+     * @throws IllegalDataException if a data integrity problem is detected
      */
     protected void processWaysAfterParsing() throws IllegalDataException{
-        for (Long externalWayId: ways.keySet()) {
+        for (Entry<Long, Collection<Long>> entry : ways.entrySet()) {
+            Long externalWayId = entry.getKey();
             Way w = (Way)externalIdMap.get(new SimplePrimitiveId(externalWayId, OsmPrimitiveType.WAY));
             List<Node> wayNodes = new ArrayList<>();
-            for (long id : ways.get(externalWayId)) {
+            for (long id : entry.getValue()) {
                 Node n = (Node)externalIdMap.get(new SimplePrimitiveId(id, OsmPrimitiveType.NODE));
                 if (n == null) {
                     if (id <= 0)
@@ -118,9 +120,8 @@ public abstract class AbstractReader {
     /**
      * Completes the parsed relations with its members.
      *
-     * @throws IllegalDataException thrown if a data integrity problem is detected, i.e. if a
+     * @throws IllegalDataException if a data integrity problem is detected, i.e. if a
      * relation member refers to a local primitive which wasn't available in the data
-     *
      */
     protected void processRelationsAfterParsing() throws IllegalDataException {
 
@@ -132,12 +133,13 @@ public abstract class AbstractReader {
             ds.addPrimitive(relation);
         }
 
-        for (Long externalRelationId : relations.keySet()) {
+        for (Entry<Long, Collection<RelationMemberData>> entry : relations.entrySet()) {
+            Long externalRelationId = entry.getKey();
             Relation relation = (Relation) externalIdMap.get(
                     new SimplePrimitiveId(externalRelationId, OsmPrimitiveType.RELATION)
             );
             List<RelationMember> relationMembers = new ArrayList<>();
-            for (RelationMemberData rm : relations.get(externalRelationId)) {
+            for (RelationMemberData rm : entry.getValue()) {
                 OsmPrimitive primitive = null;
 
                 // lookup the member from the map of already created primitives
@@ -190,7 +192,7 @@ public abstract class AbstractReader {
             }
         }
     }
-    
+
     protected final void prepareDataSet() throws IllegalDataException {
         try {
             ds.beginUpdate();
diff --git a/src/org/openstreetmap/josm/io/BoundingBoxDownloader.java b/src/org/openstreetmap/josm/io/BoundingBoxDownloader.java
index 32f4a85..1bde9e0 100644
--- a/src/org/openstreetmap/josm/io/BoundingBoxDownloader.java
+++ b/src/org/openstreetmap/josm/io/BoundingBoxDownloader.java
@@ -165,7 +165,7 @@ public class BoundingBoxDownloader extends OsmServerReader {
         CheckParameterUtil.ensureThat(noteLimit > 0, "Requested note limit is less than 1.");
         // see result_limit in https://github.com/openstreetmap/openstreetmap-website/blob/master/app/controllers/notes_controller.rb
         CheckParameterUtil.ensureThat(noteLimit <= 10000, "Requested note limit is over API hard limit of 10000.");
-        CheckParameterUtil.ensureThat(daysClosed >= 0, "Requested note limit is less than 0.");
+        CheckParameterUtil.ensureThat(daysClosed >= -1, "Requested note limit is less than -1.");
         String url = "notes?limit=" + noteLimit + "&closed=" + daysClosed + "&bbox=" + lon1 + "," + lat1 + "," + lon2 + "," + lat2;
         try {
             InputStream is = getInputStream(url, progressMonitor.createSubTaskMonitor(1, false));
@@ -191,7 +191,7 @@ public class BoundingBoxDownloader extends OsmServerReader {
         /**
          * The downloaded notes
          */
-        public final List<Note> notes;
+        public final transient List<Note> notes;
         /**
          * The download limit sent to the server.
          */
diff --git a/src/org/openstreetmap/josm/io/CacheCustomContent.java b/src/org/openstreetmap/josm/io/CacheCustomContent.java
index b8cc046..bd68ebb 100644
--- a/src/org/openstreetmap/josm/io/CacheCustomContent.java
+++ b/src/org/openstreetmap/josm/io/CacheCustomContent.java
@@ -18,17 +18,21 @@ import org.openstreetmap.josm.Main;
  * @param <T> a {@link Throwable} that may be thrown during {@link #updateData()},
  * use {@link RuntimeException} if no exception must be handled.
  * @author xeen
- *
+ * @since 1450
  */
 public abstract class CacheCustomContent<T extends Throwable> {
-    /**
-     * Common intervals
-     */
+
+    /** Update interval meaning an update is always needed */
     public static final int INTERVAL_ALWAYS = -1;
+    /** Update interval meaning an update is needed each hour */
     public static final int INTERVAL_HOURLY = 60*60;
+    /** Update interval meaning an update is needed each day */
     public static final int INTERVAL_DAILY = INTERVAL_HOURLY * 24;
+    /** Update interval meaning an update is needed each week */
     public static final int INTERVAL_WEEKLY = INTERVAL_DAILY * 7;
+    /** Update interval meaning an update is needed each month */
     public static final int INTERVAL_MONTHLY = INTERVAL_WEEKLY * 4;
+    /** Update interval meaning an update is never needed */
     public static final int INTERVAL_NEVER = Integer.MAX_VALUE;
 
     /**
@@ -60,18 +64,10 @@ public abstract class CacheCustomContent<T extends Throwable> {
     protected abstract byte[] updateData() throws T;
 
     /**
-     * This function serves as a comfort hook to perform additional checks if the cache is valid
-     * @return True if the cached copy is still valid
-     */
-    protected boolean isCacheValid() {
-        return true;
-    }
-
-    /**
      * Initializes the class. Note that all read data will be stored in memory until it is flushed
      * by flushData().
-     * @param ident
-     * @param updateInterval
+     * @param ident ident that identifies the stored file. Includes file-ending.
+     * @param updateInterval update interval in seconds. -1 means always
      */
     public CacheCustomContent(String ident, int updateInterval) {
         this.ident = ident;
@@ -79,6 +75,14 @@ public abstract class CacheCustomContent<T extends Throwable> {
         this.path = new File(Main.pref.getCacheDirectory(), ident);
     }
 
+    /**
+     * This function serves as a comfort hook to perform additional checks if the cache is valid
+     * @return True if the cached copy is still valid
+     */
+    protected boolean isCacheValid() {
+        return true;
+    }
+
     private boolean needsUpdate() {
         if (isOffline()) {
             return false;
@@ -103,6 +107,7 @@ public abstract class CacheCustomContent<T extends Throwable> {
     /**
      * Updates data if required
      * @return Returns the data
+     * @throws T if an error occurs
      */
     public byte[] updateIfRequired() throws T {
         if (needsUpdate())
@@ -113,6 +118,7 @@ public abstract class CacheCustomContent<T extends Throwable> {
     /**
      * Updates data if required
      * @return Returns the data as string
+     * @throws T if an error occurs
      */
     public String updateIfRequiredString() throws T {
         if (needsUpdate())
@@ -123,6 +129,7 @@ public abstract class CacheCustomContent<T extends Throwable> {
     /**
      * Executes an update regardless of updateInterval
      * @return Returns the data
+     * @throws T if an error occurs
      */
     public byte[] updateForce() throws T {
         this.data = updateData();
@@ -134,6 +141,7 @@ public abstract class CacheCustomContent<T extends Throwable> {
     /**
      * Executes an update regardless of updateInterval
      * @return Returns the data as String
+     * @throws T if an error occurs
      */
     public String updateForceString() throws T {
         updateForce();
@@ -143,6 +151,7 @@ public abstract class CacheCustomContent<T extends Throwable> {
     /**
      * Returns the data without performing any updates
      * @return the data
+     * @throws T if an error occurs
      */
     public byte[] getData() throws T {
         if (data == null) {
@@ -154,6 +163,7 @@ public abstract class CacheCustomContent<T extends Throwable> {
     /**
      * Returns the data without performing any updates
      * @return the data as String
+     * @throws T if an error occurs
      */
     public String getDataString() throws T {
         byte[] array = getData();
@@ -169,7 +179,9 @@ public abstract class CacheCustomContent<T extends Throwable> {
     private void loadFromDisk() throws T {
         try (BufferedInputStream input = new BufferedInputStream(new FileInputStream(path))) {
             this.data = new byte[input.available()];
-            input.read(this.data);
+            if (input.read(this.data) < this.data.length) {
+                Main.error("Failed to read expected contents from "+path);
+            }
         } catch (IOException e) {
             if (!isOffline()) {
                 this.data = updateForce();
diff --git a/src/org/openstreetmap/josm/io/CacheFiles.java b/src/org/openstreetmap/josm/io/CacheFiles.java
index d6b656a..193f5b3 100644
--- a/src/org/openstreetmap/josm/io/CacheFiles.java
+++ b/src/org/openstreetmap/josm/io/CacheFiles.java
@@ -9,6 +9,7 @@ import java.nio.charset.StandardCharsets;
 import java.security.MessageDigest;
 import java.util.Iterator;
 import java.util.Set;
+import java.util.SortedMap;
 import java.util.TreeMap;
 
 import javax.imageio.ImageIO;
@@ -244,15 +245,18 @@ public class CacheFiles {
     public void cleanUp() {
         if(!this.enabled || maxsize == -1) return;
 
-        TreeMap<Long, File> modtime = new TreeMap<>();
+        SortedMap<Long, File> modtime = new TreeMap<>();
         long dirsize = 0;
 
-        for(File f : dir.listFiles()) {
-            if(isExpired(f)) {
-                f.delete();
-            } else {
-                dirsize += f.length();
-                modtime.put(f.lastModified(), f);
+        File[] files = dir.listFiles();
+        if (files != null) {
+            for(File f : files) {
+                if(isExpired(f)) {
+                    f.delete();
+                } else {
+                    dirsize += f.length();
+                    modtime.put(f.lastModified(), f);
+                }
             }
         }
 
@@ -282,17 +286,25 @@ public class CacheFiles {
      * @param size for CLEAN_SMALL_FILES: deletes all files smaller than (size) bytes
      */
     public void customCleanUp(int type, int size) {
+        File[] files;
         switch(type) {
         case CLEAN_ALL:
-            for(File f : dir.listFiles()) {
-                f.delete();
+            files = dir.listFiles();
+            if (files != null) {
+                for (File f : files) {
+                    f.delete();
+                }
             }
             break;
         case CLEAN_SMALL_FILES:
-            for(File f: dir.listFiles())
-                if(f.length() < size) {
-                    f.delete();
+            files = dir.listFiles();
+            if (files != null) {
+                for (File f: files) {
+                    if (f.length() < size) {
+                        f.delete();
+                    }
                 }
+            }
             break;
         case CLEAN_BY_DATE:
             cleanUp();
@@ -308,8 +320,11 @@ public class CacheFiles {
         if(!enabled) return -1;
         long dirsize = 0;
 
-        for(File f : this.dir.listFiles()) {
-            dirsize += f.length();
+        File[] files = dir.listFiles();
+        if (files != null) {
+            for(File f : files) {
+                dirsize += f.length();
+            }
         }
         return dirsize;
     }
diff --git a/src/org/openstreetmap/josm/io/Capabilities.java b/src/org/openstreetmap/josm/io/Capabilities.java
index a67cfeb..eae6abc 100644
--- a/src/org/openstreetmap/josm/io/Capabilities.java
+++ b/src/org/openstreetmap/josm/io/Capabilities.java
@@ -11,9 +11,9 @@ import java.util.List;
 import java.util.Map;
 
 import javax.xml.parsers.ParserConfigurationException;
-import javax.xml.parsers.SAXParserFactory;
 
 import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.tools.Utils;
 import org.xml.sax.Attributes;
 import org.xml.sax.InputSource;
 import org.xml.sax.SAXException;
@@ -50,7 +50,7 @@ import org.xml.sax.helpers.DefaultHandler;
  */
 public class Capabilities {
 
-    private final Map<String, HashMap<String,String>> capabilities;
+    private final Map<String, Map<String,String>> capabilities;
     private final List<String> imageryBlacklist;
 
     /**
@@ -70,7 +70,7 @@ public class Capabilities {
      */
     public boolean isDefined(String element, String attribute) {
         if (! capabilities.containsKey(element)) return false;
-        HashMap<String, String> e = capabilities.get(element);
+        Map<String, String> e = capabilities.get(element);
         if (e == null) return false;
         return (e.get(attribute) != null);
     }
@@ -84,7 +84,7 @@ public class Capabilities {
      */
     public String get(String element, String attribute) {
         if (! capabilities.containsKey(element)) return null;
-        HashMap<String, String> e = capabilities.get(element);
+        Map<String, String> e = capabilities.get(element);
         if (e == null) return null;
         return e.get(attribute);
     }
@@ -131,10 +131,10 @@ public class Capabilities {
             }
         } else {
             if (! capabilities.containsKey(element))  {
-                HashMap<String,String> h = new HashMap<>();
+                Map<String,String> h = new HashMap<>();
                 capabilities.put(element, h);
             }
-            HashMap<String, String> e = capabilities.get(element);
+            Map<String, String> e = capabilities.get(element);
             e.put(attribute, value);
         }
     }
@@ -271,7 +271,7 @@ public class Capabilities {
          */
         public static Capabilities parse(InputSource inputSource) throws SAXException, IOException, ParserConfigurationException {
             CapabilitiesParser parser = new CapabilitiesParser();
-            SAXParserFactory.newInstance().newSAXParser().parse(inputSource, parser);
+            Utils.newSafeSAXParser().parse(inputSource, parser);
             return parser.getCapabilities();
         }
     }
diff --git a/src/org/openstreetmap/josm/io/ChangesetQuery.java b/src/org/openstreetmap/josm/io/ChangesetQuery.java
index d8d6a1d..74bff7d 100644
--- a/src/org/openstreetmap/josm/io/ChangesetQuery.java
+++ b/src/org/openstreetmap/josm/io/ChangesetQuery.java
@@ -3,8 +3,6 @@ package org.openstreetmap.josm.io;
 
 import static org.openstreetmap.josm.tools.I18n.tr;
 
-import java.io.UnsupportedEncodingException;
-import java.net.URLEncoder;
 import java.text.DateFormat;
 import java.text.MessageFormat;
 import java.text.ParseException;
@@ -17,7 +15,6 @@ import java.util.HashSet;
 import java.util.Map;
 import java.util.Map.Entry;
 
-import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.data.Bounds;
 import org.openstreetmap.josm.data.coor.LatLon;
 import org.openstreetmap.josm.tools.CheckParameterUtil;
@@ -31,8 +28,7 @@ public class ChangesetQuery {
      *
      * @param query the query part
      * @return the query object
-     * @throws ChangesetQueryUrlException thrown if query doesn't consist of valid query parameters
-     *
+     * @throws ChangesetQueryUrlException if query doesn't consist of valid query parameters
      */
     public static ChangesetQuery buildFromUrlQuery(String query) throws ChangesetQueryUrlException{
         return new ChangesetQueryUrlParser().parse(query);
@@ -66,10 +62,10 @@ public class ChangesetQuery {
      *
      * @param uid the uid of the user. > 0 expected.
      * @return the query object with the applied restriction
-     * @throws IllegalArgumentException thrown if uid <= 0
+     * @throws IllegalArgumentException if uid <= 0
      * @see #forUser(String)
      */
-    public ChangesetQuery forUser(int uid) throws IllegalArgumentException{
+    public ChangesetQuery forUser(int uid) {
         if (uid <= 0)
             throw new IllegalArgumentException(MessageFormat.format("Parameter ''{0}'' > 0 expected. Got ''{1}''.", "uid", uid));
         this.uid = uid;
@@ -85,7 +81,7 @@ public class ChangesetQuery {
      *
      * @param username the username. Must not be null.
      * @return the query object with the applied restriction
-     * @throws IllegalArgumentException thrown if username is null.
+     * @throws IllegalArgumentException if username is null.
      * @see #forUser(int)
      */
     public ChangesetQuery forUser(String username) {
@@ -132,10 +128,10 @@ public class ChangesetQuery {
      * @param maxLat  max latitude of the bounding box.  Valid latitude value expected.
      *
      * @return the restricted changeset query
-     * @throws IllegalArgumentException thrown if either of the parameters isn't a valid longitude or
+     * @throws IllegalArgumentException if either of the parameters isn't a valid longitude or
      * latitude value
      */
-    public ChangesetQuery inBbox(double minLon, double minLat, double maxLon, double maxLat) throws IllegalArgumentException{
+    public ChangesetQuery inBbox(double minLon, double minLat, double maxLon, double maxLat) {
         if (!LatLon.isValidLon(minLon))
             throw new IllegalArgumentException(tr("Illegal longitude value for parameter ''{0}'', got {1}", "minLon", minLon));
         if (!LatLon.isValidLon(maxLon))
@@ -155,8 +151,8 @@ public class ChangesetQuery {
      * @param max the max lat/lon coordiantes of the bounding box. Must not be null.
      *
      * @return the restricted changeset query
-     * @throws IllegalArgumentException thrown if min is null
-     * @throws IllegalArgumentException thrown if max is null
+     * @throws IllegalArgumentException if min is null
+     * @throws IllegalArgumentException if max is null
      */
     public ChangesetQuery inBbox(LatLon min, LatLon max) {
         CheckParameterUtil.ensureParameterNotNull(min, "min");
@@ -170,9 +166,9 @@ public class ChangesetQuery {
      *
      * @param bbox the bounding box. Must not be null.
      * @return the changeset query
-     * @throws IllegalArgumentException thrown if bbox is null.
+     * @throws IllegalArgumentException if bbox is null.
      */
-    public ChangesetQuery inBbox(Bounds bbox) throws IllegalArgumentException {
+    public ChangesetQuery inBbox(Bounds bbox) {
         CheckParameterUtil.ensureParameterNotNull(bbox, "bbox");
         this.bounds = bbox;
         return this;
@@ -184,9 +180,9 @@ public class ChangesetQuery {
      *
      * @param d the date . Must not be null.
      * @return the restricted changeset query
-     * @throws IllegalArgumentException thrown if d is null
+     * @throws IllegalArgumentException if d is null
      */
-    public ChangesetQuery closedAfter(Date d) throws IllegalArgumentException{
+    public ChangesetQuery closedAfter(Date d) {
         CheckParameterUtil.ensureParameterNotNull(d, "d");
         this.closedAfter = d;
         return this;
@@ -200,10 +196,10 @@ public class ChangesetQuery {
      * @param closedAfter only reply changesets closed after this date. Must not be null.
      * @param createdBefore only reply changesets created before this date. Must not be null.
      * @return the restricted changeset query
-     * @throws IllegalArgumentException thrown if closedAfter is null
-     * @throws IllegalArgumentException thrown if createdBefore is null
+     * @throws IllegalArgumentException if closedAfter is null
+     * @throws IllegalArgumentException if createdBefore is null
      */
-    public ChangesetQuery closedAfterAndCreatedBefore(Date closedAfter, Date createdBefore ) throws IllegalArgumentException {
+    public ChangesetQuery closedAfterAndCreatedBefore(Date closedAfter, Date createdBefore ) {
         CheckParameterUtil.ensureParameterNotNull(closedAfter, "closedAfter");
         CheckParameterUtil.ensureParameterNotNull(createdBefore, "createdBefore");
         this.closedAfter = closedAfter;
@@ -240,7 +236,7 @@ public class ChangesetQuery {
      *
      * @param changesetIds the changeset ids
      * @return the query object with the applied restriction
-     * @throws IllegalArgumentException thrown if changesetIds is null.
+     * @throws IllegalArgumentException if changesetIds is null.
      */
     public ChangesetQuery forChangesetIds(Collection<Long> changesetIds) {
         CheckParameterUtil.ensureParameterNotNull(changesetIds, "changesetIds");
@@ -258,11 +254,7 @@ public class ChangesetQuery {
         if (uid != null) {
             sb.append("user").append("=").append(uid);
         } else if (userName != null) {
-            try {
-                sb.append("display_name").append("=").append(URLEncoder.encode(userName, "UTF-8"));
-            } catch (UnsupportedEncodingException e) {
-                Main.error(e);
-            }
+            sb.append("display_name").append("=").append(Utils.encodeUrl(userName));
         }
         if (bounds != null) {
             if (sb.length() > 0) {
diff --git a/src/org/openstreetmap/josm/io/DiffResultProcessor.java b/src/org/openstreetmap/josm/io/DiffResultProcessor.java
index 8960851..13e41e1 100644
--- a/src/org/openstreetmap/josm/io/DiffResultProcessor.java
+++ b/src/org/openstreetmap/josm/io/DiffResultProcessor.java
@@ -13,7 +13,6 @@ import java.util.Map;
 import java.util.Set;
 
 import javax.xml.parsers.ParserConfigurationException;
-import javax.xml.parsers.SAXParserFactory;
 
 import org.openstreetmap.josm.data.osm.Changeset;
 import org.openstreetmap.josm.data.osm.DataSet;
@@ -24,6 +23,7 @@ import org.openstreetmap.josm.data.osm.SimplePrimitiveId;
 import org.openstreetmap.josm.gui.progress.NullProgressMonitor;
 import org.openstreetmap.josm.gui.progress.ProgressMonitor;
 import org.openstreetmap.josm.tools.CheckParameterUtil;
+import org.openstreetmap.josm.tools.Utils;
 import org.openstreetmap.josm.tools.XmlParsingException;
 import org.xml.sax.Attributes;
 import org.xml.sax.InputSource;
@@ -83,7 +83,7 @@ public class DiffResultProcessor  {
         try {
             progressMonitor.beginTask(tr("Parsing response from server..."));
             InputSource inputSource = new InputSource(new StringReader(diffUploadResponse));
-            SAXParserFactory.newInstance().newSAXParser().parse(inputSource, new Parser());
+            Utils.newSafeSAXParser().parse(inputSource, new Parser());
         } catch(XmlParsingException e) {
             throw e;
         } catch(IOException | ParserConfigurationException | SAXException e) {
diff --git a/src/org/openstreetmap/josm/io/GpxReader.java b/src/org/openstreetmap/josm/io/GpxReader.java
index 9e252fe..faa5871 100644
--- a/src/org/openstreetmap/josm/io/GpxReader.java
+++ b/src/org/openstreetmap/josm/io/GpxReader.java
@@ -17,7 +17,6 @@ import java.util.Map;
 import java.util.Stack;
 
 import javax.xml.parsers.ParserConfigurationException;
-import javax.xml.parsers.SAXParserFactory;
 
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.data.Bounds;
@@ -29,6 +28,7 @@ import org.openstreetmap.josm.data.gpx.GpxLink;
 import org.openstreetmap.josm.data.gpx.GpxRoute;
 import org.openstreetmap.josm.data.gpx.ImmutableGpxTrack;
 import org.openstreetmap.josm.data.gpx.WayPoint;
+import org.openstreetmap.josm.tools.Utils;
 import org.xml.sax.Attributes;
 import org.xml.sax.InputSource;
 import org.xml.sax.SAXException;
@@ -541,9 +541,7 @@ public class GpxReader implements GpxConstants {
     public boolean parse(boolean tryToFinish) throws SAXException, IOException {
         Parser parser = new Parser();
         try {
-            SAXParserFactory factory = SAXParserFactory.newInstance();
-            factory.setNamespaceAware(true);
-            factory.newSAXParser().parse(inputSource, parser);
+            Utils.newSafeSAXParser().parse(inputSource, parser);
             return true;
         } catch (SAXException e) {
             if (tryToFinish) {
diff --git a/src/org/openstreetmap/josm/io/MultiFetchServerObjectReader.java b/src/org/openstreetmap/josm/io/MultiFetchServerObjectReader.java
index ffa2113..d3d840f 100644
--- a/src/org/openstreetmap/josm/io/MultiFetchServerObjectReader.java
+++ b/src/org/openstreetmap/josm/io/MultiFetchServerObjectReader.java
@@ -112,7 +112,7 @@ public class MultiFetchServerObjectReader extends OsmServerReader{
      * @throws IllegalArgumentException if ds is null
      * @throws NoSuchElementException if ds does not include an {@link OsmPrimitive} with id=<code>id</code>
      */
-    protected void remember(DataSet ds, long id, OsmPrimitiveType type) throws IllegalArgumentException, NoSuchElementException{
+    protected void remember(DataSet ds, long id, OsmPrimitiveType type) throws NoSuchElementException{
         CheckParameterUtil.ensureParameterNotNull(ds, "ds");
         if (id <= 0) return;
         OsmPrimitive primitive = ds.getPrimitiveById(id, type);
@@ -238,7 +238,7 @@ public class MultiFetchServerObjectReader extends OsmServerReader{
      * @return the subset of ids
      */
     protected Set<Long> extractIdPackage(Set<Long> ids) {
-        HashSet<Long> pkg = new HashSet<>();
+        Set<Long> pkg = new HashSet<>();
         if (ids.isEmpty())
             return pkg;
         if (ids.size() > MAX_IDS_PER_REQUEST) {
diff --git a/src/org/openstreetmap/josm/io/NoteReader.java b/src/org/openstreetmap/josm/io/NoteReader.java
index 765038b..de9f01f 100644
--- a/src/org/openstreetmap/josm/io/NoteReader.java
+++ b/src/org/openstreetmap/josm/io/NoteReader.java
@@ -10,7 +10,6 @@ import java.util.Date;
 import java.util.List;
 
 import javax.xml.parsers.ParserConfigurationException;
-import javax.xml.parsers.SAXParserFactory;
 
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.data.coor.LatLon;
@@ -18,6 +17,7 @@ import org.openstreetmap.josm.data.notes.Note;
 import org.openstreetmap.josm.data.notes.NoteComment;
 import org.openstreetmap.josm.data.notes.NoteComment.Action;
 import org.openstreetmap.josm.data.osm.User;
+import org.openstreetmap.josm.tools.Utils;
 import org.openstreetmap.josm.tools.date.DateUtils;
 import org.xml.sax.Attributes;
 import org.xml.sax.InputSource;
@@ -56,7 +56,7 @@ public class NoteReader {
         private Date commentCreateDate;
         private Boolean commentIsNew;
         private List<Note> notes;
-        String commentText;
+        private String commentText;
 
         @Override
         public void characters(char[] ch, int start, int length) throws SAXException {
@@ -221,9 +221,7 @@ public class NoteReader {
     public List<Note> parse() throws SAXException, IOException {
         DefaultHandler parser = new Parser();
         try {
-            SAXParserFactory factory = SAXParserFactory.newInstance();
-            factory.setNamespaceAware(true);
-            factory.newSAXParser().parse(inputSource, parser);
+            Utils.newSafeSAXParser().parse(inputSource, parser);
         } catch (ParserConfigurationException e) {
             Main.error(e); // broken SAXException chaining
             throw new SAXException(e);
diff --git a/src/org/openstreetmap/josm/io/OsmApi.java b/src/org/openstreetmap/josm/io/OsmApi.java
index b937b81..00aaafc 100644
--- a/src/org/openstreetmap/josm/io/OsmApi.java
+++ b/src/org/openstreetmap/josm/io/OsmApi.java
@@ -14,13 +14,11 @@ import java.io.OutputStreamWriter;
 import java.io.PrintWriter;
 import java.io.StringReader;
 import java.io.StringWriter;
-import java.io.UnsupportedEncodingException;
 import java.net.ConnectException;
 import java.net.HttpURLConnection;
 import java.net.MalformedURLException;
 import java.net.SocketTimeoutException;
 import java.net.URL;
-import java.net.URLEncoder;
 import java.nio.charset.StandardCharsets;
 import java.util.Collection;
 import java.util.Collections;
@@ -89,7 +87,7 @@ public class OsmApi extends OsmConnection {
      *
      * @param serverUrl  the server URL
      * @return the OsmApi
-     * @throws IllegalArgumentException thrown, if serverUrl is null
+     * @throws IllegalArgumentException if serverUrl is null
      *
      */
     public static OsmApi getOsmApi(String serverUrl) {
@@ -133,7 +131,7 @@ public class OsmApi extends OsmConnection {
      * Constructs a new {@code OsmApi} for a specific server URL.
      *
      * @param serverUrl the server URL. Must not be null
-     * @throws IllegalArgumentException thrown, if serverUrl is null
+     * @throws IllegalArgumentException if serverUrl is null
      */
     protected OsmApi(String serverUrl)  {
         CheckParameterUtil.ensureParameterNotNull(serverUrl, "serverUrl");
@@ -166,8 +164,8 @@ public class OsmApi extends OsmConnection {
 
         private static final String CAPABILITIES = "capabilities";
 
-        ProgressMonitor monitor;
-        boolean fastFail;
+        private ProgressMonitor monitor;
+        private boolean fastFail;
 
         public CapabilitiesCache(ProgressMonitor monitor, boolean fastFail) {
             super(CAPABILITIES + getBaseUrl().hashCode(), CacheCustomContent.INTERVAL_WEEKLY);
@@ -416,7 +414,7 @@ public class OsmApi extends OsmConnection {
      * @param changeset the changeset toe be created. Must not be null.
      * @param progressMonitor the progress monitor
      * @throws OsmTransferException signifying a non-200 return code, or connection errors
-     * @throws IllegalArgumentException thrown if changeset is null
+     * @throws IllegalArgumentException if changeset is null
      */
     public void openChangeset(Changeset changeset, ProgressMonitor progressMonitor) throws OsmTransferException {
         CheckParameterUtil.ensureParameterNotNull(changeset, "changeset");
@@ -486,8 +484,8 @@ public class OsmApi extends OsmConnection {
      * @param monitor the progress monitor. If null, uses {@link NullProgressMonitor#INSTANCE}
      *
      * @throws OsmTransferException if something goes wrong.
-     * @throws IllegalArgumentException thrown if changeset is null
-     * @throws IllegalArgumentException thrown if changeset.getId() <= 0
+     * @throws IllegalArgumentException if changeset is null
+     * @throws IllegalArgumentException if changeset.getId() <= 0
      */
     public void closeChangeset(Changeset changeset, ProgressMonitor monitor) throws OsmTransferException {
         CheckParameterUtil.ensureParameterNotNull(changeset, "changeset");
@@ -755,8 +753,7 @@ public class OsmApi extends OsmConnection {
     /**
      * Ensures that the current changeset can be used for uploading data
      *
-     * @throws OsmTransferException thrown if the current changeset can't be used for
-     * uploading data
+     * @throws OsmTransferException if the current changeset can't be used for uploading data
      */
     protected void ensureValidChangeset() throws OsmTransferException {
         if (changeset == null)
@@ -780,8 +777,8 @@ public class OsmApi extends OsmConnection {
      * it must be open.
      *
      * @param changeset the changeset
-     * @throws IllegalArgumentException thrown if changeset.getId() <= 0
-     * @throws IllegalArgumentException thrown if !changeset.isOpen()
+     * @throws IllegalArgumentException if changeset.getId() <= 0
+     * @throws IllegalArgumentException if !changeset.isOpen()
      */
     public void setChangeset(Changeset changeset) {
         if (changeset == null) {
@@ -815,7 +812,7 @@ public class OsmApi extends OsmConnection {
             .append("&lon=")
             .append(latlon.lon())
             .append("&text=")
-            .append(urlEncode(text)).toString();
+            .append(Utils.encodeUrl(text)).toString();
 
         String response = sendRequest("POST", noteUrl, null, monitor, true, false);
         return parseSingleNote(response);
@@ -833,7 +830,7 @@ public class OsmApi extends OsmConnection {
         initialize(monitor);
         String noteUrl = noteStringBuilder(note)
             .append("/comment?text=")
-            .append(urlEncode(comment)).toString();
+            .append(Utils.encodeUrl(comment)).toString();
 
         String response = sendRequest("POST", noteUrl, null, monitor, true, false);
         return parseSingleNote(response);
@@ -849,7 +846,7 @@ public class OsmApi extends OsmConnection {
      */
     public Note closeNote(Note note, String closeMessage, ProgressMonitor monitor) throws OsmTransferException {
         initialize(monitor);
-        String encodedMessage = urlEncode(closeMessage);
+        String encodedMessage = Utils.encodeUrl(closeMessage);
         StringBuilder urlBuilder = noteStringBuilder(note)
             .append("/close");
         if (encodedMessage != null && !encodedMessage.trim().isEmpty()) {
@@ -871,7 +868,7 @@ public class OsmApi extends OsmConnection {
      */
     public Note reopenNote(Note note, String reactivateMessage, ProgressMonitor monitor) throws OsmTransferException {
         initialize(monitor);
-        String encodedMessage = urlEncode(reactivateMessage);
+        String encodedMessage = Utils.encodeUrl(reactivateMessage);
         StringBuilder urlBuilder = noteStringBuilder(note)
             .append("/reopen");
         if (encodedMessage != null && !encodedMessage.trim().isEmpty()) {
@@ -897,14 +894,4 @@ public class OsmApi extends OsmConnection {
             throw new OsmTransferException(tr("Error parsing note response from server"), e);
         }
     }
-
-    /** URL encodes a string. Useful for transforming user input into URL query strings*/
-    private String urlEncode(String string) throws OsmTransferException {
-        try {
-            return URLEncoder.encode(string, "UTF-8");
-        } catch (UnsupportedEncodingException e) {
-            Main.error(e, true);
-            throw new OsmTransferException(tr("Error encoding string: {0}", string), e);
-        }
-    }
 }
diff --git a/src/org/openstreetmap/josm/io/OsmChangeBuilder.java b/src/org/openstreetmap/josm/io/OsmChangeBuilder.java
index 51cb138..9dfd896 100644
--- a/src/org/openstreetmap/josm/io/OsmChangeBuilder.java
+++ b/src/org/openstreetmap/josm/io/OsmChangeBuilder.java
@@ -69,9 +69,9 @@ public class OsmChangeBuilder {
     /**
      * Writes the prolog of the OsmChange document
      *
-     * @throws IllegalStateException thrown if the prologs has already been written
+     * @throws IllegalStateException if the prologs has already been written
      */
-    public void start() throws IllegalStateException{
+    public void start() {
         if (prologWritten)
             throw new IllegalStateException(tr("Prolog of OsmChange document already written. Please write only once."));
         writer.print("<osmChange version=\"");
@@ -84,11 +84,11 @@ public class OsmChangeBuilder {
      * Appends a collection of Primitives to the OsmChange document.
      *
      * @param primitives the collection of primitives. Ignored if null.
-     * @throws IllegalStateException thrown if the prologs has not been written yet
+     * @throws IllegalStateException if the prologs has not been written yet
      * @see #start()
      * @see #append(IPrimitive)
      */
-    public void append(Collection<? extends IPrimitive> primitives) throws IllegalStateException{
+    public void append(Collection<? extends IPrimitive> primitives) {
         if (primitives == null) return;
         if (!prologWritten)
             throw new IllegalStateException(tr("Prolog of OsmChange document not written yet. Please write first."));
@@ -101,10 +101,9 @@ public class OsmChangeBuilder {
      * Appends an Primitive to the OsmChange document.
      *
      * @param p the primitive. Ignored if null.
-     * @throws IllegalStateException thrown if the prologs has not been written yet
+     * @throws IllegalStateException if the prologs has not been written yet
      * @see #start()
      * @see #append(Collection)
-
      */
     public void append(IPrimitive p) {
         if (p == null) return;
@@ -116,9 +115,9 @@ public class OsmChangeBuilder {
     /**
      * Writes the epilog of the OsmChange document
      *
-     * @throws IllegalStateException thrown if the prologs has not been written yet
+     * @throws IllegalStateException if the prologs has not been written yet
      */
-    public void finish() throws IllegalStateException {
+    public void finish() {
         if (!prologWritten)
             throw new IllegalStateException(tr("Prolog of OsmChange document not written yet. Please write first."));
         if (currentMode != null) {
diff --git a/src/org/openstreetmap/josm/io/OsmChangeReader.java b/src/org/openstreetmap/josm/io/OsmChangeReader.java
index f8392a3..08f39e2 100644
--- a/src/org/openstreetmap/josm/io/OsmChangeReader.java
+++ b/src/org/openstreetmap/josm/io/OsmChangeReader.java
@@ -102,8 +102,8 @@ public class OsmChangeReader extends OsmReader {
      * {@link org.openstreetmap.josm.gui.progress.NullProgressMonitor#INSTANCE} is assumed
      *
      * @return the dataset with the parsed data
-     * @throws IllegalDataException thrown if the an error was found while parsing the data from the source
-     * @throws IllegalArgumentException thrown if source is <code>null</code>
+     * @throws IllegalDataException if the an error was found while parsing the data from the source
+     * @throws IllegalArgumentException if source is <code>null</code>
      */
     public static DataSet parseDataSet(InputStream source, ProgressMonitor progressMonitor) throws IllegalDataException {
         return new OsmChangeReader().doParseDataSet(source, progressMonitor);
diff --git a/src/org/openstreetmap/josm/io/OsmChangesetContentParser.java b/src/org/openstreetmap/josm/io/OsmChangesetContentParser.java
index ff47977..6701db6 100644
--- a/src/org/openstreetmap/josm/io/OsmChangesetContentParser.java
+++ b/src/org/openstreetmap/josm/io/OsmChangesetContentParser.java
@@ -10,7 +10,6 @@ import java.io.StringReader;
 import java.nio.charset.StandardCharsets;
 
 import javax.xml.parsers.ParserConfigurationException;
-import javax.xml.parsers.SAXParserFactory;
 
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.data.osm.ChangesetDataSet;
@@ -18,6 +17,7 @@ import org.openstreetmap.josm.data.osm.ChangesetDataSet.ChangesetModificationTyp
 import org.openstreetmap.josm.gui.progress.NullProgressMonitor;
 import org.openstreetmap.josm.gui.progress.ProgressMonitor;
 import org.openstreetmap.josm.tools.CheckParameterUtil;
+import org.openstreetmap.josm.tools.Utils;
 import org.openstreetmap.josm.tools.XmlParsingException;
 import org.xml.sax.Attributes;
 import org.xml.sax.InputSource;
@@ -43,8 +43,9 @@ public class OsmChangesetContentParser {
             throw new XmlParsingException(message).rememberLocation(locator);
         }
 
-        protected void throwException(Exception e) throws XmlParsingException {
-            throw new XmlParsingException(e).rememberLocation(locator);
+        @Override
+        protected void throwException(String message, Exception e) throws XmlParsingException {
+            throw new XmlParsingException(message, e).rememberLocation(locator);
         }
 
         @Override
@@ -102,12 +103,12 @@ public class OsmChangesetContentParser {
 
         @Override
         public void error(SAXParseException e) throws SAXException {
-            throwException(e);
+            throwException(null, e);
         }
 
         @Override
         public void fatalError(SAXParseException e) throws SAXException {
-            throwException(e);
+            throwException(null, e);
         }
     }
 
@@ -149,7 +150,7 @@ public class OsmChangesetContentParser {
         try {
             progressMonitor.beginTask("");
             progressMonitor.indeterminateSubTask(tr("Parsing changeset content ..."));
-            SAXParserFactory.newInstance().newSAXParser().parse(source, new Parser());
+            Utils.newSafeSAXParser().parse(source, new Parser());
         } catch(XmlParsingException e) {
             throw e;
         } catch (ParserConfigurationException | SAXException | IOException e) {
diff --git a/src/org/openstreetmap/josm/io/OsmChangesetParser.java b/src/org/openstreetmap/josm/io/OsmChangesetParser.java
index 9d0e760..39dfcdb 100644
--- a/src/org/openstreetmap/josm/io/OsmChangesetParser.java
+++ b/src/org/openstreetmap/josm/io/OsmChangesetParser.java
@@ -12,13 +12,13 @@ import java.util.LinkedList;
 import java.util.List;
 
 import javax.xml.parsers.ParserConfigurationException;
-import javax.xml.parsers.SAXParserFactory;
 
 import org.openstreetmap.josm.data.coor.LatLon;
 import org.openstreetmap.josm.data.osm.Changeset;
 import org.openstreetmap.josm.data.osm.ChangesetDiscussionComment;
 import org.openstreetmap.josm.data.osm.User;
 import org.openstreetmap.josm.gui.progress.ProgressMonitor;
+import org.openstreetmap.josm.tools.Utils;
 import org.openstreetmap.josm.tools.XmlParsingException;
 import org.openstreetmap.josm.tools.date.DateUtils;
 import org.xml.sax.Attributes;
@@ -268,7 +268,7 @@ public final class OsmChangesetParser {
      * @param progressMonitor  the progress monitor
      *
      * @return the list of changesets
-     * @throws IllegalDataException thrown if the an error was found while parsing the data from the source
+     * @throws IllegalDataException if the an error was found while parsing the data from the source
      */
     @SuppressWarnings("resource")
     public static List<Changeset> parse(InputStream source, ProgressMonitor progressMonitor) throws IllegalDataException {
@@ -277,7 +277,7 @@ public final class OsmChangesetParser {
             progressMonitor.beginTask("");
             progressMonitor.indeterminateSubTask(tr("Parsing list of changesets..."));
             InputSource inputSource = new InputSource(new InvalidXmlCharacterFilter(new InputStreamReader(source, StandardCharsets.UTF_8)));
-            SAXParserFactory.newInstance().newSAXParser().parse(inputSource, parser.new Parser());
+            Utils.newSafeSAXParser().parse(inputSource, parser.new Parser());
             return parser.getChangesets();
         } catch(ParserConfigurationException | SAXException e) {
             throw new IllegalDataException(e.getMessage(), e);
diff --git a/src/org/openstreetmap/josm/io/OsmConnection.java b/src/org/openstreetmap/josm/io/OsmConnection.java
index a2bc57e..429dbdb 100644
--- a/src/org/openstreetmap/josm/io/OsmConnection.java
+++ b/src/org/openstreetmap/josm/io/OsmConnection.java
@@ -72,7 +72,7 @@ public class OsmConnection {
      * Adds an authentication header for basic authentication
      *
      * @param con the connection
-     * @throws OsmTransferException thrown if something went wrong. Check for nested exceptions
+     * @throws OsmTransferException if something went wrong. Check for nested exceptions
      */
     protected void addBasicAuthorizationHeader(HttpURLConnection con) throws OsmTransferException {
         CharsetEncoder encoder = StandardCharsets.UTF_8.newEncoder();
@@ -109,8 +109,8 @@ public class OsmConnection {
      *
      * @param connection the connection
      *
-     * @throws OsmTransferException thrown if there is currently no OAuth Access Token configured
-     * @throws OsmTransferException thrown if signing fails
+     * @throws OsmTransferException if there is currently no OAuth Access Token configured
+     * @throws OsmTransferException if signing fails
      */
     protected void addOAuthAuthorizationHeader(HttpURLConnection connection) throws OsmTransferException {
         if (oauthParameters == null) {
diff --git a/src/org/openstreetmap/josm/io/OsmExporter.java b/src/org/openstreetmap/josm/io/OsmExporter.java
index 20f86b9..d028415 100644
--- a/src/org/openstreetmap/josm/io/OsmExporter.java
+++ b/src/org/openstreetmap/josm/io/OsmExporter.java
@@ -62,12 +62,12 @@ public class OsmExporter extends FileExporter {
      *                 after a successful export
      * @throws IllegalArgumentException if {@code layer} is not an instance of {@code OsmDataLayer}
      */
-    public void exportData(File file, Layer layer, boolean noBackup) throws IllegalArgumentException {
+    public void exportData(File file, Layer layer, boolean noBackup) {
         checkOsmDataLayer(layer);
         save(file, (OsmDataLayer) layer, noBackup);
     }
 
-    protected static void checkOsmDataLayer(Layer layer) throws IllegalArgumentException {
+    protected static void checkOsmDataLayer(Layer layer) {
         if (!(layer instanceof OsmDataLayer)) {
             throw new IllegalArgumentException(MessageFormat.format("Expected instance of OsmDataLayer. Got ''{0}''.", layer
                     .getClass().getName()));
diff --git a/src/org/openstreetmap/josm/io/OsmHistoryReader.java b/src/org/openstreetmap/josm/io/OsmHistoryReader.java
index 75b4762..1fd2f31 100644
--- a/src/org/openstreetmap/josm/io/OsmHistoryReader.java
+++ b/src/org/openstreetmap/josm/io/OsmHistoryReader.java
@@ -9,7 +9,6 @@ import java.io.InputStreamReader;
 import java.nio.charset.StandardCharsets;
 
 import javax.xml.parsers.ParserConfigurationException;
-import javax.xml.parsers.SAXParserFactory;
 
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.data.osm.history.HistoryDataSet;
@@ -17,6 +16,7 @@ import org.openstreetmap.josm.data.osm.history.HistoryOsmPrimitive;
 import org.openstreetmap.josm.gui.progress.NullProgressMonitor;
 import org.openstreetmap.josm.gui.progress.ProgressMonitor;
 import org.openstreetmap.josm.tools.CheckParameterUtil;
+import org.openstreetmap.josm.tools.Utils;
 import org.xml.sax.Attributes;
 import org.xml.sax.InputSource;
 import org.xml.sax.SAXException;
@@ -48,6 +48,11 @@ public class OsmHistoryReader {
         }
 
         @Override
+        protected void throwException(String message, Exception e) throws SAXException {
+            throw new SAXException(getCurrentPosition() + message, e);
+        }
+
+        @Override
         public void startElement(String namespaceURI, String localName, String qName, Attributes atts) throws SAXException {
             doStartElement(qName, atts);
         }
@@ -85,7 +90,7 @@ public class OsmHistoryReader {
         InputSource inputSource = new InputSource(new InputStreamReader(in, StandardCharsets.UTF_8));
         progressMonitor.beginTask(tr("Parsing OSM history data ..."));
         try {
-            SAXParserFactory.newInstance().newSAXParser().parse(inputSource, new Parser());
+            Utils.newSafeSAXParser().parse(inputSource, new Parser());
         } catch (ParserConfigurationException e) {
             Main.error(e); // broken SAXException chaining
             throw new SAXException(e);
diff --git a/src/org/openstreetmap/josm/io/OsmReader.java b/src/org/openstreetmap/josm/io/OsmReader.java
index 9cc22f1..c880129 100644
--- a/src/org/openstreetmap/josm/io/OsmReader.java
+++ b/src/org/openstreetmap/josm/io/OsmReader.java
@@ -643,8 +643,8 @@ public class OsmReader extends AbstractReader {
      * @param progressMonitor  the progress monitor. If null, {@link NullProgressMonitor#INSTANCE} is assumed
      *
      * @return the dataset with the parsed data
-     * @throws IllegalDataException thrown if the an error was found while parsing the data from the source
-     * @throws IllegalArgumentException thrown if source is null
+     * @throws IllegalDataException if the an error was found while parsing the data from the source
+     * @throws IllegalArgumentException if source is null
      */
     public static DataSet parseDataSet(InputStream source, ProgressMonitor progressMonitor) throws IllegalDataException {
         return new OsmReader().doParseDataSet(source, progressMonitor);
diff --git a/src/org/openstreetmap/josm/io/OsmServerBackreferenceReader.java b/src/org/openstreetmap/josm/io/OsmServerBackreferenceReader.java
index f4665da..c1b8548 100644
--- a/src/org/openstreetmap/josm/io/OsmServerBackreferenceReader.java
+++ b/src/org/openstreetmap/josm/io/OsmServerBackreferenceReader.java
@@ -46,10 +46,10 @@ public class OsmServerBackreferenceReader extends OsmServerReader {
      *
      * @param primitive  the primitive to be read. Must not be null. primitive.id > 0 expected
      *
-     * @exception IllegalArgumentException thrown if primitive is null
-     * @exception IllegalArgumentException thrown if primitive.id <= 0
+     * @throws IllegalArgumentException if primitive is null
+     * @throws IllegalArgumentException if primitive.id <= 0
      */
-    public OsmServerBackreferenceReader(OsmPrimitive primitive) throws IllegalArgumentException {
+    public OsmServerBackreferenceReader(OsmPrimitive primitive) {
         CheckParameterUtil.ensureValidPrimitiveId(primitive, "primitive");
         this.id = primitive.getId();
         this.primitiveType = OsmPrimitiveType.from(primitive);
@@ -62,11 +62,10 @@ public class OsmServerBackreferenceReader extends OsmServerReader {
      * @param id  the id of the primitive. > 0 expected
      * @param type the type of the primitive. Must not be null.
      *
-     * @exception IllegalArgumentException thrown if id <= 0
-     * @exception IllegalArgumentException thrown if type is null
-     *
+     * @throws IllegalArgumentException if id <= 0
+     * @throws IllegalArgumentException if type is null
      */
-    public OsmServerBackreferenceReader(long id, OsmPrimitiveType type) throws IllegalArgumentException   {
+    public OsmServerBackreferenceReader(long id, OsmPrimitiveType type) {
         if (id <= 0)
             throw new IllegalArgumentException(MessageFormat.format("Parameter ''{0}'' > 0 expected. Got ''{1}''.", "id", id));
         CheckParameterUtil.ensureParameterNotNull(type, "type");
@@ -94,11 +93,10 @@ public class OsmServerBackreferenceReader extends OsmServerReader {
      * @param type the type of the primitive
      * @param readFull true, if referers should be read fully (i.e. including their immediate children)
      *
-     * @exception IllegalArgumentException thrown if id <= 0
-     * @exception IllegalArgumentException thrown if type is null
-     *
+     * @throws IllegalArgumentException if id <= 0
+     * @throws IllegalArgumentException if type is null
      */
-    public OsmServerBackreferenceReader(long id, OsmPrimitiveType type, boolean readFull) throws IllegalArgumentException  {
+    public OsmServerBackreferenceReader(long id, OsmPrimitiveType type, boolean readFull)  {
         this(id, type);
         this.readFull = readFull;
     }
@@ -184,7 +182,7 @@ public class OsmServerBackreferenceReader extends OsmServerReader {
      * @param ds the original dataset
      * @param progressMonitor  the progress monitor
      * @return the modified dataset
-     * @throws OsmTransferException thrown if an exception occurs.
+     * @throws OsmTransferException if an exception occurs.
      */
     protected DataSet readIncompletePrimitives(DataSet ds, ProgressMonitor progressMonitor) throws OsmTransferException {
         progressMonitor.beginTask(null, 2);
@@ -223,7 +221,7 @@ public class OsmServerBackreferenceReader extends OsmServerReader {
      *
      * @param progressMonitor the progress monitor. Set to {@link NullProgressMonitor#INSTANCE} if null.
      * @return the dataset with the referring primitives
-     * @exception OsmTransferException thrown if an error occurs while communicating with the server
+     * @throws OsmTransferException if an error occurs while communicating with the server
      */
     @Override
     public DataSet parseOsm(ProgressMonitor progressMonitor) throws OsmTransferException {
diff --git a/src/org/openstreetmap/josm/io/OsmServerChangesetReader.java b/src/org/openstreetmap/josm/io/OsmServerChangesetReader.java
index ecc2949..c83ba68 100644
--- a/src/org/openstreetmap/josm/io/OsmServerChangesetReader.java
+++ b/src/org/openstreetmap/josm/io/OsmServerChangesetReader.java
@@ -57,8 +57,8 @@ public class OsmServerChangesetReader extends OsmServerReader {
      * @param query  the query specification. Must not be null.
      * @param monitor a progress monitor. Set to {@link NullProgressMonitor#INSTANCE} if null
      * @return the list of changesets read from the server
-     * @throws IllegalArgumentException thrown if query is null
-     * @throws OsmTransferException thrown if something goes wrong w
+     * @throws IllegalArgumentException if query is null
+     * @throws OsmTransferException if something goes wrong w
      */
     public List<Changeset> queryChangesets(ChangesetQuery query, ProgressMonitor monitor) throws OsmTransferException {
         CheckParameterUtil.ensureParameterNotNull(query, "query");
@@ -95,7 +95,7 @@ public class OsmServerChangesetReader extends OsmServerReader {
      * @param includeDiscussion determines if discussion comments must be downloaded or not
      * @param monitor the progress monitor. Set to {@link NullProgressMonitor#INSTANCE} if null
      * @return the changeset read
-     * @throws OsmTransferException thrown if something goes wrong
+     * @throws OsmTransferException if something goes wrong
      * @throws IllegalArgumentException if id <= 0
      * @since 7704
      */
@@ -136,7 +136,7 @@ public class OsmServerChangesetReader extends OsmServerReader {
      * @param includeDiscussion determines if discussion comments must be downloaded or not
      * @param monitor the progress monitor. Set to {@link NullProgressMonitor#INSTANCE} if null
      * @return the changeset read
-     * @throws OsmTransferException thrown if something goes wrong
+     * @throws OsmTransferException if something goes wrong
      * @throws IllegalArgumentException if id <= 0
      * @since 7704
      */
@@ -186,10 +186,10 @@ public class OsmServerChangesetReader extends OsmServerReader {
      * @param id the changeset id. > 0 required.
      * @param monitor the progress monitor. {@link NullProgressMonitor#INSTANCE} assumed if null.
      * @return the changeset content
-     * @throws IllegalArgumentException thrown if id <= 0
-     * @throws OsmTransferException thrown if something went wrong
+     * @throws IllegalArgumentException if id <= 0
+     * @throws OsmTransferException if something went wrong
      */
-    public ChangesetDataSet downloadChangeset(int id, ProgressMonitor monitor) throws IllegalArgumentException, OsmTransferException {
+    public ChangesetDataSet downloadChangeset(int id, ProgressMonitor monitor) throws OsmTransferException {
         if (id <= 0)
             throw new IllegalArgumentException(MessageFormat.format("Expected value of type integer > 0 for parameter ''{0}'', got {1}", "id", id));
         if (monitor == null) {
diff --git a/src/org/openstreetmap/josm/io/OsmServerHistoryReader.java b/src/org/openstreetmap/josm/io/OsmServerHistoryReader.java
index 6d80c03..0fec14f 100644
--- a/src/org/openstreetmap/josm/io/OsmServerHistoryReader.java
+++ b/src/org/openstreetmap/josm/io/OsmServerHistoryReader.java
@@ -28,9 +28,9 @@ public class OsmServerHistoryReader extends OsmServerReader {
      *   Must not be null.
      * @param id the id of the primitive
      *
-     *  @exception IllegalArgumentException thrown, if type is null
+     *  @throws IllegalArgumentException if type is null
      */
-    public OsmServerHistoryReader(OsmPrimitiveType type, long id) throws IllegalArgumentException {
+    public OsmServerHistoryReader(OsmPrimitiveType type, long id) {
         CheckParameterUtil.ensureParameterNotNull(type, "type");
         if (id < 0)
             throw new IllegalArgumentException(MessageFormat.format("Parameter ''{0}'' >= 0 expected. Got ''{1}''.", "id", id));
@@ -51,7 +51,7 @@ public class OsmServerHistoryReader extends OsmServerReader {
      * Fetches the history from the OSM API and parses it
      *
      * @return the data set with the parsed history data
-     * @throws OsmTransferException thrown, if an exception occurs
+     * @throws OsmTransferException if an exception occurs
      */
     public HistoryDataSet parseHistory(ProgressMonitor progressMonitor) throws OsmTransferException {
         progressMonitor.beginTask("");
diff --git a/src/org/openstreetmap/josm/io/OsmServerObjectReader.java b/src/org/openstreetmap/josm/io/OsmServerObjectReader.java
index 28c5dd2..3f337ec 100644
--- a/src/org/openstreetmap/josm/io/OsmServerObjectReader.java
+++ b/src/org/openstreetmap/josm/io/OsmServerObjectReader.java
@@ -39,10 +39,10 @@ public class OsmServerObjectReader extends OsmServerReader {
      * @param type the type. Must not be null.
      * @param full true, if a full download is requested (i.e. a download including
      * immediate children); false, otherwise
-     * @throws IllegalArgumentException thrown if id <= 0
-     * @throws IllegalArgumentException thrown if type is null
+     * @throws IllegalArgumentException if id <= 0
+     * @throws IllegalArgumentException if type is null
      */
-    public OsmServerObjectReader(long id, OsmPrimitiveType type, boolean full) throws IllegalArgumentException {
+    public OsmServerObjectReader(long id, OsmPrimitiveType type, boolean full) {
         this(id, type, full, -1);
     }
 
@@ -52,14 +52,14 @@ public class OsmServerObjectReader extends OsmServerReader {
      * @param id the object id. > 0 required.
      * @param type the type. Must not be null.
      * @param version the specific version number, if required; -1, otherwise
-     * @throws IllegalArgumentException thrown if id <= 0
-     * @throws IllegalArgumentException thrown if type is null
+     * @throws IllegalArgumentException if id <= 0
+     * @throws IllegalArgumentException if type is null
      */
-    public OsmServerObjectReader(long id, OsmPrimitiveType type, int version) throws IllegalArgumentException {
+    public OsmServerObjectReader(long id, OsmPrimitiveType type, int version) {
         this(id, type, false, version);
     }
 
-    protected OsmServerObjectReader(long id, OsmPrimitiveType type, boolean full, int version) throws IllegalArgumentException {
+    protected OsmServerObjectReader(long id, OsmPrimitiveType type, boolean full, int version) {
         if (id <= 0)
             throw new IllegalArgumentException(MessageFormat.format("Expected value > 0 for parameter ''{0}'', got {1}", "id", id));
         CheckParameterUtil.ensureParameterNotNull(type, "type");
@@ -74,8 +74,8 @@ public class OsmServerObjectReader extends OsmServerReader {
      * @param id the object id. Must not be null. Unique id > 0 required.
      * @param full true, if a full download is requested (i.e. a download including
      * immediate children); false, otherwise
-     * @throws IllegalArgumentException thrown if id is null
-     * @throws IllegalArgumentException thrown if id.getUniqueId() <= 0
+     * @throws IllegalArgumentException if id is null
+     * @throws IllegalArgumentException if id.getUniqueId() <= 0
      */
     public OsmServerObjectReader(PrimitiveId id, boolean full) {
         this(id, full, -1);
@@ -86,8 +86,8 @@ public class OsmServerObjectReader extends OsmServerReader {
      *
      * @param id the object id. Must not be null. Unique id > 0 required.
      * @param version the specific version number, if required; -1, otherwise
-     * @throws IllegalArgumentException thrown if id is null
-     * @throws IllegalArgumentException thrown if id.getUniqueId() <= 0
+     * @throws IllegalArgumentException if id is null
+     * @throws IllegalArgumentException if id.getUniqueId() <= 0
      */
     public OsmServerObjectReader(PrimitiveId id, int version) {
         this(id, false, version);
diff --git a/src/org/openstreetmap/josm/io/OsmServerReader.java b/src/org/openstreetmap/josm/io/OsmServerReader.java
index 71e2859..2c7dfbb 100644
--- a/src/org/openstreetmap/josm/io/OsmServerReader.java
+++ b/src/org/openstreetmap/josm/io/OsmServerReader.java
@@ -45,7 +45,7 @@ public abstract class OsmServerReader extends OsmConnection {
      * @param urlStr The url to connect to.
      * @param progressMonitor progress monitoring and abort handler
      * @return A reader reading the input stream (servers answer) or <code>null</code>.
-     * @throws OsmTransferException thrown if data transfer errors occur
+     * @throws OsmTransferException if data transfer errors occur
      */
     protected InputStream getInputStream(String urlStr, ProgressMonitor progressMonitor) throws OsmTransferException  {
         return getInputStream(urlStr, progressMonitor, null);
@@ -59,7 +59,7 @@ public abstract class OsmServerReader extends OsmConnection {
      * @param progressMonitor progress monitoring and abort handler
      * @param reason The reason to show on console. Can be {@code null} if no reason is given
      * @return A reader reading the input stream (servers answer) or <code>null</code>.
-     * @throws OsmTransferException thrown if data transfer errors occur
+     * @throws OsmTransferException if data transfer errors occur
      */
     protected InputStream getInputStream(String urlStr, ProgressMonitor progressMonitor, String reason) throws OsmTransferException  {
         try {
@@ -85,7 +85,7 @@ public abstract class OsmServerReader extends OsmConnection {
      * @param urlStr The exact url to connect to.
      * @param progressMonitor progress monitoring and abort handler
      * @return An reader reading the input stream (servers answer) or <code>null</code>.
-     * @throws OsmTransferException thrown if data transfer errors occur
+     * @throws OsmTransferException if data transfer errors occur
      */
     protected InputStream getInputStreamRaw(String urlStr, ProgressMonitor progressMonitor) throws OsmTransferException {
         return getInputStreamRaw(urlStr, progressMonitor, null);
@@ -98,7 +98,7 @@ public abstract class OsmServerReader extends OsmConnection {
      * @param progressMonitor progress monitoring and abort handler
      * @param reason The reason to show on console. Can be {@code null} if no reason is given
      * @return An reader reading the input stream (servers answer) or <code>null</code>.
-     * @throws OsmTransferException thrown if data transfer errors occur
+     * @throws OsmTransferException if data transfer errors occur
      */
     protected InputStream getInputStreamRaw(String urlStr, ProgressMonitor progressMonitor, String reason) throws OsmTransferException {
         return getInputStreamRaw(urlStr, progressMonitor, reason, false);
@@ -113,7 +113,7 @@ public abstract class OsmServerReader extends OsmConnection {
      * @param uncompressAccordingToContentDisposition Whether to inspect the HTTP header {@code Content-Disposition}
      *                                                for {@code filename} and uncompress a gzip/bzip2 stream.
      * @return An reader reading the input stream (servers answer) or <code>null</code>.
-     * @throws OsmTransferException thrown if data transfer errors occur
+     * @throws OsmTransferException if data transfer errors occur
      */
     @SuppressWarnings("resource")
     protected InputStream getInputStreamRaw(String urlStr, ProgressMonitor progressMonitor, String reason, boolean uncompressAccordingToContentDisposition) throws OsmTransferException {
diff --git a/src/org/openstreetmap/josm/io/OsmServerWriter.java b/src/org/openstreetmap/josm/io/OsmServerWriter.java
index c649c54..cb91da2 100644
--- a/src/org/openstreetmap/josm/io/OsmServerWriter.java
+++ b/src/org/openstreetmap/josm/io/OsmServerWriter.java
@@ -56,7 +56,7 @@ public class OsmServerWriter {
     private static final int SECONDS_PER_MINUTE = 60;
     private static final int MSECS_PER_MINUTE = MSECS_PER_SECOND * SECONDS_PER_MINUTE;
 
-    long uploadStartTime;
+    private long uploadStartTime;
 
     public String timeLeft(int progress, int list_size) {
         long now = System.currentTimeMillis();
@@ -82,7 +82,7 @@ public class OsmServerWriter {
      *
      * @param primitives the collection of primitives to upload
      * @param progressMonitor the progress monitor
-     * @throws OsmTransferException thrown if an exception occurs
+     * @throws OsmTransferException if an exception occurs
      */
     protected void uploadChangesIndividually(Collection<? extends OsmPrimitive> primitives, ProgressMonitor progressMonitor) throws OsmTransferException {
         try {
@@ -124,7 +124,7 @@ public class OsmServerWriter {
      *
      * @param primitives the collection of primitives to upload
      * @param progressMonitor  the progress monitor
-     * @throws OsmTransferException thrown if an exception occurs
+     * @throws OsmTransferException if an exception occurs
      */
     protected void uploadChangesAsDiffUpload(Collection<? extends OsmPrimitive> primitives, ProgressMonitor progressMonitor) throws OsmTransferException {
         try {
@@ -143,8 +143,8 @@ public class OsmServerWriter {
      * @param primitives the collection of primitives to upload
      * @param progressMonitor  the progress monitor
      * @param chunkSize the size of the individual upload chunks. > 0 required.
-     * @throws IllegalArgumentException thrown if chunkSize <= 0
-     * @throws OsmTransferException thrown if an exception occurs
+     * @throws IllegalArgumentException if chunkSize <= 0
+     * @throws OsmTransferException if an exception occurs
      */
     protected void uploadChangesInChunks(Collection<? extends OsmPrimitive> primitives, ProgressMonitor progressMonitor, int chunkSize) throws OsmTransferException, IllegalArgumentException {
         if (chunkSize <=0)
@@ -185,9 +185,9 @@ public class OsmServerWriter {
      * @param primitives list of objects to send
      * @param changeset the changeset the data is uploaded to. Must not be null.
      * @param monitor the progress monitor. If null, assumes {@link NullProgressMonitor#INSTANCE}
-     * @throws IllegalArgumentException thrown if changeset is null
-     * @throws IllegalArgumentException thrown if strategy is null
-     * @throws OsmTransferException thrown if something goes wrong
+     * @throws IllegalArgumentException if changeset is null
+     * @throws IllegalArgumentException if strategy is null
+     * @throws OsmTransferException if something goes wrong
      */
     public void uploadOsm(UploadStrategySpecification strategy, Collection<? extends OsmPrimitive> primitives, Changeset changeset, ProgressMonitor monitor) throws OsmTransferException {
         CheckParameterUtil.ensureParameterNotNull(changeset, "changeset");
diff --git a/src/org/openstreetmap/josm/io/auth/CredentialsAgent.java b/src/org/openstreetmap/josm/io/auth/CredentialsAgent.java
index 1bef416..e576b1a 100644
--- a/src/org/openstreetmap/josm/io/auth/CredentialsAgent.java
+++ b/src/org/openstreetmap/josm/io/auth/CredentialsAgent.java
@@ -27,7 +27,7 @@ public interface CredentialsAgent {
      * for a proxy server
      * @param host the hostname for these credentials
      * @return the credentials
-     * @throws CredentialsAgentException thrown if a problem occurs in a implementation of this interface
+     * @throws CredentialsAgentException if a problem occurs in a implementation of this interface
      */
     PasswordAuthentication lookup(RequestorType requestorType, String host) throws CredentialsAgentException;
 
@@ -38,7 +38,7 @@ public interface CredentialsAgent {
      * for a proxy server
      * @param host the hostname for these credentials
      * @param credentials the credentials
-     * @throws CredentialsAgentException thrown if a problem occurs in a implementation of this interface
+     * @throws CredentialsAgentException if a problem occurs in a implementation of this interface
      */
     void store(RequestorType requestorType, String host, PasswordAuthentication credentials) throws CredentialsAgentException;
 
@@ -49,7 +49,7 @@ public interface CredentialsAgent {
      * @param host the hostname for these credentials
      * @param noSuccessWithLastResponse true, if the last request with the supplied credentials failed; false otherwise.
      * If true, implementations of this interface are advised to prompt the user for new credentials.
-     * @throws CredentialsAgentException thrown if a problem occurs in a implementation of this interface
+     * @throws CredentialsAgentException if a problem occurs in a implementation of this interface
 
      */
     CredentialsAgentResponse getCredentials(RequestorType requestorType, String host, boolean noSuccessWithLastResponse) throws CredentialsAgentException;
@@ -59,7 +59,7 @@ public interface CredentialsAgent {
      * Access Token is currently managed by this CredentialAgent.
      *
      * @return the current OAuth Access Token to access the OSM server.
-     * @throws CredentialsAgentException thrown if something goes wrong
+     * @throws CredentialsAgentException if something goes wrong
      */
     OAuthToken lookupOAuthAccessToken() throws CredentialsAgentException;
 
@@ -67,7 +67,7 @@ public interface CredentialsAgent {
      * Stores the OAuth Access Token <code>accessToken</code>.
      *
      * @param accessToken the access Token. null, to remove the Access Token.
-     * @throws CredentialsAgentException thrown if something goes wrong
+     * @throws CredentialsAgentException if something goes wrong
      */
     void storeOAuthAccessToken(OAuthToken accessToken) throws CredentialsAgentException;
 
diff --git a/src/org/openstreetmap/josm/io/auth/JosmPreferencesCredentialAgent.java b/src/org/openstreetmap/josm/io/auth/JosmPreferencesCredentialAgent.java
index 7a48344..ec8627d 100644
--- a/src/org/openstreetmap/josm/io/auth/JosmPreferencesCredentialAgent.java
+++ b/src/org/openstreetmap/josm/io/auth/JosmPreferencesCredentialAgent.java
@@ -98,7 +98,7 @@ public class JosmPreferencesCredentialAgent extends AbstractCredentialsAgent {
      * Access Token is currently managed by this CredentialManager.
      *
      * @return the current OAuth Access Token to access the OSM server.
-     * @throws CredentialsAgentException thrown if something goes wrong
+     * @throws CredentialsAgentException if something goes wrong
      */
     @Override
     public OAuthToken lookupOAuthAccessToken() throws CredentialsAgentException {
@@ -113,7 +113,7 @@ public class JosmPreferencesCredentialAgent extends AbstractCredentialsAgent {
      * Stores the OAuth Access Token <code>accessToken</code>.
      *
      * @param accessToken the access Token. null, to remove the Access Token.
-     * @throws CredentialsAgentException thrown if something goes wrong
+     * @throws CredentialsAgentException if something goes wrong
      */
     @Override
     public void storeOAuthAccessToken(OAuthToken accessToken) throws CredentialsAgentException {
diff --git a/src/org/openstreetmap/josm/io/imagery/ImageryReader.java b/src/org/openstreetmap/josm/io/imagery/ImageryReader.java
index 2098e4d..6978c5f 100644
--- a/src/org/openstreetmap/josm/io/imagery/ImageryReader.java
+++ b/src/org/openstreetmap/josm/io/imagery/ImageryReader.java
@@ -10,7 +10,6 @@ import java.util.Objects;
 import java.util.Stack;
 
 import javax.xml.parsers.ParserConfigurationException;
-import javax.xml.parsers.SAXParserFactory;
 
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.data.imagery.ImageryInfo;
@@ -20,6 +19,7 @@ import org.openstreetmap.josm.data.imagery.Shape;
 import org.openstreetmap.josm.io.CachedFile;
 import org.openstreetmap.josm.io.UTFInputStreamReader;
 import org.openstreetmap.josm.tools.LanguageInfo;
+import org.openstreetmap.josm.tools.Utils;
 import org.xml.sax.Attributes;
 import org.xml.sax.InputSource;
 import org.xml.sax.SAXException;
@@ -48,14 +48,12 @@ public class ImageryReader {
     public List<ImageryInfo> parse() throws SAXException, IOException {
         Parser parser = new Parser();
         try {
-            SAXParserFactory factory = SAXParserFactory.newInstance();
-            factory.setNamespaceAware(true);
             try (InputStream in = new CachedFile(source)
                     .setMaxAge(1*CachedFile.DAYS)
                     .setCachingStrategy(CachedFile.CachingStrategy.IfModifiedSince)
                     .getInputStream()) {
                 InputSource is = new InputSource(UTFInputStreamReader.create(in));
-                factory.newSAXParser().parse(is, parser);
+                Utils.newSafeSAXParser().parse(is, parser);
                 return parser.entries;
             }
         } catch (SAXException e) {
@@ -71,22 +69,23 @@ public class ImageryReader {
 
         private Stack<State> states;
 
-        List<ImageryInfo> entries;
+        private List<ImageryInfo> entries;
 
         /**
          * Skip the current entry because it has mandatory attributes
          * that this version of JOSM cannot process.
          */
-        boolean skipEntry;
+        private boolean skipEntry;
 
-        ImageryInfo entry;
-        ImageryBounds bounds;
-        Shape shape;
+        private ImageryInfo entry;
+        private ImageryBounds bounds;
+        private Shape shape;
         // language of last element, does only work for simple ENTRY_ATTRIBUTE's
-        String lang;
-        List<String> projections;
+        private String lang;
+        private List<String> projections;
 
-        @Override public void startDocument() {
+        @Override
+        public void startDocument() {
             accumulator = new StringBuffer();
             skipEntry = false;
             states = new Stack<>();
diff --git a/src/org/openstreetmap/josm/io/imagery/WMSException.java b/src/org/openstreetmap/josm/io/imagery/WMSException.java
index ef44d0f..9018b12 100644
--- a/src/org/openstreetmap/josm/io/imagery/WMSException.java
+++ b/src/org/openstreetmap/josm/io/imagery/WMSException.java
@@ -16,7 +16,7 @@ import org.openstreetmap.josm.tools.Utils;
  */
 public class WMSException extends Exception {
 
-    private final WMSRequest request;
+    private final transient WMSRequest request;
     private final URL url;
     private final String[] exceptions;
 
diff --git a/src/org/openstreetmap/josm/io/imagery/WMSImagery.java b/src/org/openstreetmap/josm/io/imagery/WMSImagery.java
index 5af1624..134c603 100644
--- a/src/org/openstreetmap/josm/io/imagery/WMSImagery.java
+++ b/src/org/openstreetmap/josm/io/imagery/WMSImagery.java
@@ -232,7 +232,7 @@ public class WMSImagery {
     public ImageryInfo toImageryInfo(String name, Collection<LayerDetails> selectedLayers) {
         ImageryInfo i = new ImageryInfo(name, buildGetMapUrl(selectedLayers));
         if (selectedLayers != null) {
-            HashSet<String> proj = new HashSet<>();
+            Set<String> proj = new HashSet<>();
             for (WMSImagery.LayerDetails l : selectedLayers) {
                 proj.addAll(l.getProjections());
             }
diff --git a/src/org/openstreetmap/josm/io/remotecontrol/AddTagsDialog.java b/src/org/openstreetmap/josm/io/remotecontrol/AddTagsDialog.java
index 1a6cbc2..2734955 100644
--- a/src/org/openstreetmap/josm/io/remotecontrol/AddTagsDialog.java
+++ b/src/org/openstreetmap/josm/io/remotecontrol/AddTagsDialog.java
@@ -10,12 +10,11 @@ import java.awt.GridBagLayout;
 import java.awt.event.ActionEvent;
 import java.awt.event.KeyEvent;
 import java.awt.event.MouseEvent;
-import java.io.UnsupportedEncodingException;
-import java.net.URLDecoder;
 import java.util.Collection;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Map;
+import java.util.Map.Entry;
 import java.util.Set;
 
 import javax.swing.AbstractAction;
@@ -35,6 +34,7 @@ import org.openstreetmap.josm.gui.ExtendedDialog;
 import org.openstreetmap.josm.gui.util.GuiHelper;
 import org.openstreetmap.josm.gui.util.TableHelper;
 import org.openstreetmap.josm.tools.GBC;
+import org.openstreetmap.josm.tools.Utils;
 
 /**
  * Dialog to add tags as part of the remotecontrol.
@@ -46,7 +46,7 @@ import org.openstreetmap.josm.tools.GBC;
 public class AddTagsDialog extends ExtendedDialog {
 
     private final JTable propertyTable;
-    private final Collection<? extends OsmPrimitive> sel;
+    private final transient Collection<? extends OsmPrimitive> sel;
     private final int[] count;
 
     private final String sender;
@@ -56,7 +56,7 @@ public class AddTagsDialog extends ExtendedDialog {
      * Class for displaying "delete from ... objects" in the table
      */
     static class DeleteTagMarker {
-        int num;
+        private int num;
         public DeleteTagMarker(int num) {
             this.num = num;
         }
@@ -70,8 +70,8 @@ public class AddTagsDialog extends ExtendedDialog {
      * Class for displaying list of existing tag values in the table
      */
     static class ExistingValues {
-        String tag;
-        Map<String, Integer> valueCount;
+        private String tag;
+        private Map<String, Integer> valueCount;
         public ExistingValues(String tag) {
             this.tag=tag; valueCount=new HashMap<>();
         }
@@ -94,22 +94,21 @@ public class AddTagsDialog extends ExtendedDialog {
         }
 
         private String getToolTip() {
-            StringBuilder sb=new StringBuilder();
+            StringBuilder sb = new StringBuilder();
             sb.append("<html>");
             sb.append(tr("Old values of"));
             sb.append(" <b>");
             sb.append(tag);
             sb.append("</b><br/>");
-            for (String k: valueCount.keySet()) {
+            for (Entry<String, Integer> e : valueCount.entrySet()) {
                 sb.append("<b>");
-                sb.append(valueCount.get(k));
+                sb.append(e.getValue());
                 sb.append(" x </b>");
-                sb.append(k);
+                sb.append(e.getKey());
                 sb.append("<br/>");
             }
             sb.append("</html>");
             return sb.toString();
-
         }
     }
 
@@ -125,7 +124,7 @@ public class AddTagsDialog extends ExtendedDialog {
         this.sender = senderName;
 
         final DefaultTableModel tm = new DefaultTableModel(new String[] {tr("Assume"), tr("Key"), tr("Value"), tr("Existing values")}, tags.length) {
-            final Class<?>[] types = {Boolean.class, String.class, Object.class, ExistingValues.class};
+            private final Class<?>[] types = {Boolean.class, String.class, Object.class, ExistingValues.class};
             @Override
             public Class<?> getColumnClass(int c) {
                 return types[c];
@@ -262,11 +261,7 @@ public class AddTagsDialog extends ExtendedDialog {
                 @Override
                 public void run() {
                     String[] tags = null;
-                    try {
-                        tags = URLDecoder.decode(args.get("addtags"), "UTF-8").split("\\|");
-                    } catch (UnsupportedEncodingException e) {
-                        throw new RuntimeException(e);
-                    }
+                    tags = Utils.decodeUrl(args.get("addtags")).split("\\|");
                     Set<String> tagSet = new HashSet<>();
                     for (String tag : tags) {
                         if (!tag.trim().isEmpty() && tag.contains("=")) {
diff --git a/src/org/openstreetmap/josm/io/remotecontrol/DNSName.java b/src/org/openstreetmap/josm/io/remotecontrol/DNSName.java
index f709953..ff81066 100644
--- a/src/org/openstreetmap/josm/io/remotecontrol/DNSName.java
+++ b/src/org/openstreetmap/josm/io/remotecontrol/DNSName.java
@@ -117,7 +117,7 @@ public class DNSName implements GeneralNameInterface {
      * Encode the DNS name into the DerOutputStream.
      *
      * @param out the DER stream to encode the DNSName to.
-     * @exception IOException on encoding errors.
+     * @throws IOException on encoding errors.
      */
     @Override
     public void encode(DerOutputStream out) throws IOException {
diff --git a/src/org/openstreetmap/josm/io/remotecontrol/RemoteControl.java b/src/org/openstreetmap/josm/io/remotecontrol/RemoteControl.java
index 91540a6..03bc19a 100644
--- a/src/org/openstreetmap/josm/io/remotecontrol/RemoteControl.java
+++ b/src/org/openstreetmap/josm/io/remotecontrol/RemoteControl.java
@@ -3,6 +3,8 @@ package org.openstreetmap.josm.io.remotecontrol;
 
 import java.io.File;
 import java.net.InetAddress;
+import java.net.Inet4Address;
+import java.net.Inet6Address;
 import java.net.UnknownHostException;
 
 import org.openstreetmap.josm.Main;
@@ -77,13 +79,33 @@ public class RemoteControl {
     }
 
     /**
-     * Returns the inet address used for remote control.
-     * @return the inet address used for remote control
+     * Returns the IPv6 address used for remote control.
+     * @return the IPv6 address used for remote control
      * @throws UnknownHostException if the local host name could not be resolved into an address.
-     * @since 7800
+     * @since 8337
      */
-    public static InetAddress getInetAddress() throws UnknownHostException {
+    public static InetAddress getInet6Address() throws UnknownHostException {
+        for(InetAddress a : InetAddress.getAllByName(Main.pref.get("remote.control.host.ipv6", "::1"))) {
+            if(a instanceof Inet6Address) {
+                return a;
+            }
+        };
+        throw new UnknownHostException();
+    }
+
+    /**
+     * Returns the IPv4 address used for remote control.
+     * @return the IPv4 address used for remote control
+     * @throws UnknownHostException if the local host name could not be resolved into an address.
+     * @since 8337
+     */
+    public static InetAddress getInet4Address() throws UnknownHostException {
         // Return an address to the loopback interface by default
-        return InetAddress.getByName(Main.pref.get("remote.control.host", null));
+        for(InetAddress a : InetAddress.getAllByName(Main.pref.get("remote.control.host.ipv4", "127.0.0.1"))) {
+            if(a instanceof Inet4Address) {
+                return a;
+            }
+        };
+        throw new UnknownHostException();
     }
 }
diff --git a/src/org/openstreetmap/josm/io/remotecontrol/RemoteControlHttpServer.java b/src/org/openstreetmap/josm/io/remotecontrol/RemoteControlHttpServer.java
index 64c7ed8..b2fb5b9 100644
--- a/src/org/openstreetmap/josm/io/remotecontrol/RemoteControlHttpServer.java
+++ b/src/org/openstreetmap/josm/io/remotecontrol/RemoteControlHttpServer.java
@@ -20,25 +20,35 @@ import org.openstreetmap.josm.Main;
 public class RemoteControlHttpServer extends Thread {
 
     /** The server socket */
-    private ServerSocket server;
+    private ServerSocket server = null;
 
-    private static volatile RemoteControlHttpServer instance;
+    /** The server instance for IPv4 */
+    private static volatile RemoteControlHttpServer instance4 = null;
+    /** The server instance for IPv6 */
+    private static volatile RemoteControlHttpServer instance6 = null;
 
     /**
      * Starts or restarts the HTTP server
      */
     public static void restartRemoteControlHttpServer() {
+        stopRemoteControlHttpServer();
         int port = Main.pref.getInteger("remote.control.port", 8111);
         try {
-            stopRemoteControlHttpServer();
-
-            instance = new RemoteControlHttpServer(port);
-            instance.start();
-        } catch (BindException ex) {
-            Main.warn(marktr("Cannot start remotecontrol server on port {0}: {1}"),
+            instance4 = new RemoteControlHttpServer(port, false);
+            instance4.start();
+        } catch (Exception ex) {
+            Main.warn(marktr("Cannot start IPv4 remotecontrol server on port {0}: {1}"),
                     Integer.toString(port), ex.getLocalizedMessage());
-        } catch (IOException ioe) {
-            Main.error(ioe);
+        }
+        try {
+            instance6 = new RemoteControlHttpServer(port, true);
+            instance6.start();
+        } catch (Exception ex) {
+            /* only show error when we also have no IPv4 */
+            if(instance4 == null) {
+                Main.warn(marktr("Cannot start IPv6 remotecontrol server on port {0}: {1}"),
+                    Integer.toString(port), ex.getLocalizedMessage());
+            }
         }
     }
 
@@ -47,10 +57,18 @@ public class RemoteControlHttpServer extends Thread {
      * @since 5861
      */
     public static void stopRemoteControlHttpServer() {
-        if (instance != null) {
+        if (instance4 != null) {
+            try {
+                instance4.stopServer();
+                instance4 = null;
+            } catch (IOException ioe) {
+                Main.error(ioe);
+            }
+        }
+        if (instance6 != null) {
             try {
-                instance.stopServer();
-                instance = null;
+                instance6.stopServer();
+                instance6 = null;
             } catch (IOException ioe) {
                 Main.error(ioe);
             }
@@ -60,15 +78,15 @@ public class RemoteControlHttpServer extends Thread {
     /**
      * Constructor
      * @param port The port this server will listen on
+     * @param ipv6 Whether IPv6 or IPv4 server should be started
      * @throws IOException when connection errors
+     * @since 8339
      */
-    public RemoteControlHttpServer(int port) throws IOException {
+    public RemoteControlHttpServer(int port, boolean ipv6) throws IOException {
         super("RemoteControl HTTP Server");
         this.setDaemon(true);
-        // Start the server socket with only 1 connection.
-        // Also make sure we only listen on the local interface so nobody from the outside can connect!
-        // NOTE: On a dual stack machine with old Windows OS this may not listen on both interfaces!
-        this.server = new ServerSocket(port, 1, RemoteControl.getInetAddress());
+        this.server = new ServerSocket(port, 1, ipv6 ?
+            RemoteControl.getInet6Address() : RemoteControl.getInet4Address());
     }
 
     /**
@@ -76,7 +94,7 @@ public class RemoteControlHttpServer extends Thread {
      */
     @Override
     public void run() {
-        Main.info(marktr("RemoteControl::Accepting connections on {0}:{1}"),
+        Main.info(marktr("RemoteControl::Accepting remote connections on {0}:{1}"),
                 server.getInetAddress(), Integer.toString(server.getLocalPort()));
         while (true) {
             try {
@@ -98,7 +116,8 @@ public class RemoteControlHttpServer extends Thread {
      * @throws IOException
      */
     public void stopServer() throws IOException {
+        Main.info(marktr("RemoteControl::Server {0}:{1} stopped."),
+        server.getInetAddress(), Integer.toString(server.getLocalPort()));
         server.close();
-        Main.info(marktr("RemoteControl::Server stopped."));
     }
 }
diff --git a/src/org/openstreetmap/josm/io/remotecontrol/RemoteControlHttpsServer.java b/src/org/openstreetmap/josm/io/remotecontrol/RemoteControlHttpsServer.java
index 67b300d..67ba9ee 100644
--- a/src/org/openstreetmap/josm/io/remotecontrol/RemoteControlHttpsServer.java
+++ b/src/org/openstreetmap/josm/io/remotecontrol/RemoteControlHttpsServer.java
@@ -2,7 +2,6 @@
 package org.openstreetmap.josm.io.remotecontrol;
 
 import static org.openstreetmap.josm.tools.I18n.marktr;
-import static org.openstreetmap.josm.tools.I18n.tr;
 
 import java.io.IOException;
 import java.io.InputStream;
@@ -72,12 +71,17 @@ import sun.security.x509.X509CertInfo;
 public class RemoteControlHttpsServer extends Thread {
 
     /** The server socket */
-    private ServerSocket server;
+    private ServerSocket server = null;
 
-    private static volatile RemoteControlHttpsServer instance;
-    private boolean initOK = false;
+    /** The server instance for IPv4 */
+    private static volatile RemoteControlHttpsServer instance4 = null;
+    /** The server instance for IPv6 */
+    private static volatile RemoteControlHttpsServer instance6 = null;
+
+    /** SSL context information for connections */
     private SSLContext sslContext;
 
+    /* the default port for HTTPS remote control */
     private static final int HTTPS_PORT = 8112;
 
     /**
@@ -268,32 +272,29 @@ public class RemoteControlHttpsServer extends Thread {
         }
     }
 
-    private void initialize() {
-        if (!initOK) {
-            try {
-                KeyStore ks = loadJosmKeystore();
-
-                KeyManagerFactory kmf = KeyManagerFactory.getInstance("SunX509");
-                kmf.init(ks, KEYENTRY_PASSWORD.get().toCharArray());
-
-                TrustManagerFactory tmf = TrustManagerFactory.getInstance("SunX509");
-                tmf.init(ks);
+    /**
+     * Initializes the TLS basics.
+     * @throws IOException if an I/O error occurs
+     * @throws GeneralSecurityException if a security error occurs
+     */
+    private void initialize() throws IOException, GeneralSecurityException {
+        KeyStore ks = loadJosmKeystore();
 
-                sslContext = SSLContext.getInstance("TLS");
-                sslContext.init(kmf.getKeyManagers(), tmf.getTrustManagers(), null);
+        KeyManagerFactory kmf = KeyManagerFactory.getInstance("SunX509");
+        kmf.init(ks, KEYENTRY_PASSWORD.get().toCharArray());
 
-                if (Main.isTraceEnabled()) {
-                    Main.trace("SSL Context protocol: " + sslContext.getProtocol());
-                    Main.trace("SSL Context provider: " + sslContext.getProvider());
-                }
+        TrustManagerFactory tmf = TrustManagerFactory.getInstance("SunX509");
+        tmf.init(ks);
 
-                setupPlatform(ks);
+        sslContext = SSLContext.getInstance("TLS");
+        sslContext.init(kmf.getKeyManagers(), tmf.getTrustManagers(), null);
 
-                initOK = true;
-            } catch (IOException | GeneralSecurityException e) {
-                Main.error(e);
-            }
+        if (Main.isTraceEnabled()) {
+            Main.trace("SSL Context protocol: " + sslContext.getProtocol());
+            Main.trace("SSL Context provider: " + sslContext.getProvider());
         }
+
+        setupPlatform(ks);
     }
 
     /**
@@ -319,23 +320,26 @@ public class RemoteControlHttpsServer extends Thread {
      * Starts or restarts the HTTPS server
      */
     public static void restartRemoteControlHttpsServer() {
-        int port = Main.pref.getInteger("remote.control.https.port", HTTPS_PORT);
-        try {
-            stopRemoteControlHttpsServer();
-
-            if (RemoteControl.PROP_REMOTECONTROL_HTTPS_ENABLED.get()) {
-                instance = new RemoteControlHttpsServer(port);
-                if (instance.initOK) {
-                    instance.start();
+        stopRemoteControlHttpsServer();
+        if (RemoteControl.PROP_REMOTECONTROL_HTTPS_ENABLED.get()) {
+            int port = Main.pref.getInteger("remote.control.https.port", HTTPS_PORT);
+            try {
+                instance4 = new RemoteControlHttpsServer(port, false);
+                instance4.start();
+            } catch (Exception ex) {
+                Main.warn(marktr("Cannot start IPv4 remotecontrol https server on port {0}: {1}"),
+                        Integer.toString(port), ex.getLocalizedMessage());
+            }
+            try {
+                instance6 = new RemoteControlHttpsServer(port, true);
+                instance6.start();
+            } catch (Exception ex) {
+                /* only show error when we also have no IPv4 */
+                if(instance4 == null) {
+                    Main.warn(marktr("Cannot start IPv6 remotecontrol https server on port {0}: {1}"),
+                        Integer.toString(port), ex.getLocalizedMessage());
                 }
             }
-        } catch (BindException ex) {
-            Main.warn(marktr("Cannot start remotecontrol https server on port {0}: {1}"),
-                    Integer.toString(port), ex.getLocalizedMessage());
-        } catch (IOException ioe) {
-            Main.error(ioe);
-        } catch (NoSuchAlgorithmException e) {
-            Main.error(e);
         }
     }
 
@@ -343,10 +347,18 @@ public class RemoteControlHttpsServer extends Thread {
      * Stops the HTTPS server
      */
     public static void stopRemoteControlHttpsServer() {
-        if (instance != null) {
+        if (instance4 != null) {
+            try {
+                instance4.stopServer();
+                instance4 = null;
+            } catch (IOException ioe) {
+                Main.error(ioe);
+            }
+        }
+        if (instance6 != null) {
             try {
-                instance.stopServer();
-                instance = null;
+                instance6.stopServer();
+                instance6 = null;
             } catch (IOException ioe) {
                 Main.error(ioe);
             }
@@ -356,39 +368,37 @@ public class RemoteControlHttpsServer extends Thread {
     /**
      * Constructs a new {@code RemoteControlHttpsServer}.
      * @param port The port this server will listen on
+     * @param ipv6 Whether IPv6 or IPv4 server should be started
      * @throws IOException when connection errors
      * @throws NoSuchAlgorithmException if the JVM does not support TLS (can not happen)
+     * @throws GeneralSecurityException in case of SSL setup errors
+     * @since 8339
      */
-    public RemoteControlHttpsServer(int port) throws IOException, NoSuchAlgorithmException {
+    public RemoteControlHttpsServer(int port, boolean ipv6) throws IOException, NoSuchAlgorithmException, GeneralSecurityException {
         super("RemoteControl HTTPS Server");
         this.setDaemon(true);
 
         initialize();
 
-        if (!initOK) {
-            Main.error(tr("Unable to initialize Remote Control HTTPS Server"));
-            return;
-        }
-
         // Create SSL Server factory
         SSLServerSocketFactory factory = sslContext.getServerSocketFactory();
         if (Main.isTraceEnabled()) {
             Main.trace("SSL factory - Supported Cipher suites: "+Arrays.toString(factory.getSupportedCipherSuites()));
         }
 
-        // Start the server socket with only 1 connection.
-        // Also make sure we only listen on the local interface so nobody from the outside can connect!
-        // NOTE: On a dual stack machine with old Windows OS this may not listen on both interfaces!
-        this.server = factory.createServerSocket(port, 1, RemoteControl.getInetAddress());
-
-        if (Main.isTraceEnabled() && server instanceof SSLServerSocket) {
-            SSLServerSocket sslServer = (SSLServerSocket) server;
-            Main.trace("SSL server - Enabled Cipher suites: "+Arrays.toString(sslServer.getEnabledCipherSuites()));
-            Main.trace("SSL server - Enabled Protocols: "+Arrays.toString(sslServer.getEnabledProtocols()));
-            Main.trace("SSL server - Enable Session Creation: "+sslServer.getEnableSessionCreation());
-            Main.trace("SSL server - Need Client Auth: "+sslServer.getNeedClientAuth());
-            Main.trace("SSL server - Want Client Auth: "+sslServer.getWantClientAuth());
-            Main.trace("SSL server - Use Client Mode: "+sslServer.getUseClientMode());
+        this.server = factory.createServerSocket(port, 1, ipv6 ?
+            RemoteControl.getInet6Address() : RemoteControl.getInet4Address());
+
+        if (Main.isTraceEnabled()) {
+            if(server instanceof SSLServerSocket) {
+                SSLServerSocket sslServer = (SSLServerSocket) server;
+                Main.trace("SSL server - Enabled Cipher suites: "+Arrays.toString(sslServer.getEnabledCipherSuites()));
+                Main.trace("SSL server - Enabled Protocols: "+Arrays.toString(sslServer.getEnabledProtocols()));
+                Main.trace("SSL server - Enable Session Creation: "+sslServer.getEnableSessionCreation());
+                Main.trace("SSL server - Need Client Auth: "+sslServer.getNeedClientAuth());
+                Main.trace("SSL server - Want Client Auth: "+sslServer.getWantClientAuth());
+                Main.trace("SSL server - Use Client Mode: "+sslServer.getUseClientMode());
+            }
         }
     }
 
@@ -397,7 +407,7 @@ public class RemoteControlHttpsServer extends Thread {
      */
     @Override
     public void run() {
-        Main.info(marktr("RemoteControl::Accepting secure connections on {0}:{1}"),
+        Main.info(marktr("RemoteControl::Accepting secure remote connections on {0}:{1}"),
                 server.getInetAddress(), Integer.toString(server.getLocalPort()));
         while (true) {
             try {
@@ -430,9 +440,8 @@ public class RemoteControlHttpsServer extends Thread {
      * @throws IOException if any I/O error occurs
      */
     public void stopServer() throws IOException {
-        if (server != null) {
-            server.close();
-            Main.info(marktr("RemoteControl::Server (https) stopped."));
-        }
+        Main.info(marktr("RemoteControl::Server {0}:{1} stopped.\n"),
+        server.getInetAddress(), Integer.toString(server.getLocalPort()));
+        server.close();
     }
 }
diff --git a/src/org/openstreetmap/josm/io/remotecontrol/handler/AddWayHandler.java b/src/org/openstreetmap/josm/io/remotecontrol/handler/AddWayHandler.java
index b3d1a93..23d6686 100644
--- a/src/org/openstreetmap/josm/io/remotecontrol/handler/AddWayHandler.java
+++ b/src/org/openstreetmap/josm/io/remotecontrol/handler/AddWayHandler.java
@@ -11,6 +11,7 @@ import java.util.HashMap;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
+import java.util.Map.Entry;
 
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.actions.AutoScaleAction;
@@ -36,13 +37,13 @@ public class AddWayHandler extends RequestHandler {
     public static final String command = "add_way";
 
     private final List<LatLon> allCoordinates = new ArrayList<>();
-    
+
     private Way way;
 
     /**
      * The place to remeber already added nodes (they are reused if needed @since 5845
      */
-    Map<LatLon, Node> addedNodes;
+    private Map<LatLon, Node> addedNodes;
 
     @Override
     public String[] getMandatoryParams() {
@@ -118,7 +119,7 @@ public class AddWayHandler extends RequestHandler {
     /**
      * Find the node with almost the same ccords in dataset or in already added nodes
      * @since 5845
-     **/
+     */
     Node findOrCreateNode(LatLon ll,  List<Command> commands) {
         Node nd = null;
 
@@ -131,9 +132,10 @@ public class AddWayHandler extends RequestHandler {
         }
 
         Node prev = null;
-        for (LatLon lOld: addedNodes.keySet()) {
+        for (Entry<LatLon, Node> entry : addedNodes.entrySet()) {
+            LatLon lOld = entry.getKey();
             if (lOld.greatCircleDistance(ll) < Main.pref.getDouble("remotecontrol.tolerance", 0.1)) {
-                prev = addedNodes.get(lOld);
+                prev = entry.getValue();
                 break;
             }
         }
diff --git a/src/org/openstreetmap/josm/io/remotecontrol/handler/LoadAndZoomHandler.java b/src/org/openstreetmap/josm/io/remotecontrol/handler/LoadAndZoomHandler.java
index 9546df1..e2ea434 100644
--- a/src/org/openstreetmap/josm/io/remotecontrol/handler/LoadAndZoomHandler.java
+++ b/src/org/openstreetmap/josm/io/remotecontrol/handler/LoadAndZoomHandler.java
@@ -59,7 +59,7 @@ public class LoadAndZoomHandler extends RequestHandler {
     public String getPermissionMessage() {
         String msg = tr("Remote Control has been asked to load data from the API.") +
                 "<br>" + tr("Bounding box: ") + new BBox(minlon, minlat, maxlon, maxlat).toStringCSV(", ");
-        if (args.containsKey("select") && toSelect.size() > 0) {
+        if (args.containsKey("select") && !toSelect.isEmpty()) {
             msg += "<br>" + tr("Selection: {0}", toSelect.size());
         }
         return msg;
diff --git a/src/org/openstreetmap/josm/io/remotecontrol/handler/LoadDataHandler.java b/src/org/openstreetmap/josm/io/remotecontrol/handler/LoadDataHandler.java
index 0ad6208..37788c4 100644
--- a/src/org/openstreetmap/josm/io/remotecontrol/handler/LoadDataHandler.java
+++ b/src/org/openstreetmap/josm/io/remotecontrol/handler/LoadDataHandler.java
@@ -4,8 +4,6 @@ package org.openstreetmap.josm.io.remotecontrol.handler;
 import static org.openstreetmap.josm.tools.I18n.tr;
 
 import java.io.ByteArrayInputStream;
-import java.io.UnsupportedEncodingException;
-import java.net.URLEncoder;
 import java.nio.charset.StandardCharsets;
 
 import org.openstreetmap.josm.Main;
@@ -61,13 +59,9 @@ public class LoadDataHandler extends RequestHandler {
 
     @Override
     public String[] getUsageExamples() {
-        try {
-            final String data = URLEncoder.encode("<osm version='0.6'><node id='-1' lat='1' lon='2' /></osm>", "UTF-8");
-            return new String[]{
-                    "/load_data?layer_name=extra_layer&new_layer=true&data=" + data};
-        } catch (UnsupportedEncodingException ex) {
-            throw new IllegalStateException(ex);
-        }
+        final String data = Utils.encodeUrl("<osm version='0.6'><node id='-1' lat='1' lon='2' /></osm>");
+        return new String[]{
+                "/load_data?layer_name=extra_layer&new_layer=true&data=" + data};
     }
 
     @Override
diff --git a/src/org/openstreetmap/josm/io/remotecontrol/handler/LoadObjectHandler.java b/src/org/openstreetmap/josm/io/remotecontrol/handler/LoadObjectHandler.java
index 307d37f..93fab44 100644
--- a/src/org/openstreetmap/josm/io/remotecontrol/handler/LoadObjectHandler.java
+++ b/src/org/openstreetmap/josm/io/remotecontrol/handler/LoadObjectHandler.java
@@ -1,10 +1,10 @@
 // License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.io.remotecontrol.handler;
 
-import java.util.Collection;
-import java.util.HashSet;
 import static org.openstreetmap.josm.tools.I18n.tr;
 
+import java.util.Collection;
+import java.util.HashSet;
 import java.util.LinkedList;
 import java.util.List;
 
@@ -79,12 +79,12 @@ public class LoadObjectHandler extends RequestHandler {
                                 ds.setSelected(downloaded);
                             }
                         });
+                        Collection<OsmPrimitive> downlPrim = new HashSet<>();
+                        for (PrimitiveId id : downloaded) {
+                            downlPrim.add(ds.getPrimitiveById(id));
+                        }
+                        AddTagsDialog.addTags(args, sender, downlPrim);
                     }
-                    Collection<OsmPrimitive> downlPrim = new HashSet<>();
-                    for (PrimitiveId id : downloaded) {
-                        downlPrim.add(ds.getPrimitiveById(id));
-                    }
-                    AddTagsDialog.addTags(args, sender, downlPrim);
                     ps.clear();
                 }
             });
diff --git a/src/org/openstreetmap/josm/io/remotecontrol/handler/RequestHandler.java b/src/org/openstreetmap/josm/io/remotecontrol/handler/RequestHandler.java
index 1cf8e51..1676f47 100644
--- a/src/org/openstreetmap/josm/io/remotecontrol/handler/RequestHandler.java
+++ b/src/org/openstreetmap/josm/io/remotecontrol/handler/RequestHandler.java
@@ -1,16 +1,10 @@
 // License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.io.remotecontrol.handler;
 
-import org.openstreetmap.josm.Main;
-import org.openstreetmap.josm.io.remotecontrol.PermissionPrefWithDefault;
-import org.openstreetmap.josm.tools.Utils;
+import static org.openstreetmap.josm.tools.I18n.tr;
 
-import javax.swing.JLabel;
-import javax.swing.JOptionPane;
-import java.io.UnsupportedEncodingException;
 import java.net.URI;
 import java.net.URISyntaxException;
-import java.net.URLDecoder;
 import java.text.MessageFormat;
 import java.util.Collections;
 import java.util.HashMap;
@@ -18,8 +12,14 @@ import java.util.HashSet;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 
-import static org.openstreetmap.josm.tools.I18n.tr;
+import javax.swing.JLabel;
+import javax.swing.JOptionPane;
+
+import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.io.remotecontrol.PermissionPrefWithDefault;
+import org.openstreetmap.josm.tools.Utils;
 
 /**
  * This is the parent of all classes that handle a specific remote control command
@@ -209,12 +209,8 @@ public abstract class RequestHandler {
             return r;
         }
         for (String kv : uri.getRawQuery().split("&")) {
-            try {
-                final String[] kvs = URLDecoder.decode(kv, "UTF-8").split("=", 2);
-                r.put(kvs[0], kvs.length > 1 ? kvs[1] : null);
-            } catch (UnsupportedEncodingException ex) {
-                throw new IllegalStateException(ex);
-            }
+            final String[] kvs = Utils.decodeUrl(kv).split("=", 2);
+            r.put(kvs[0], kvs.length > 1 ? kvs[1] : null);
         }
         return r;
     }
@@ -232,7 +228,7 @@ public abstract class RequestHandler {
                 missingKeys.add(key);
             }
         }
-        HashSet<String> knownParams = new HashSet<>();
+        Set<String> knownParams = new HashSet<>();
         if (mandatory != null) Collections.addAll(knownParams, mandatory);
         if (optional != null) Collections.addAll(knownParams, optional);
         for (String par: args.keySet()) {
@@ -274,14 +270,6 @@ public abstract class RequestHandler {
                 : Main.pref.getBoolean(loadInNewLayerKey, loadInNewLayerDefault);
     }
 
-    protected static String decodeParam(String param) {
-        try {
-            return URLDecoder.decode(param, "UTF-8");
-        } catch (UnsupportedEncodingException e) {
-            throw new RuntimeException(e);
-        }
-    }
-
     public void setSender(String sender) {
         this.sender = sender;
     }
@@ -325,18 +313,18 @@ public abstract class RequestHandler {
         }
     }
 
-    public static abstract class RawURLParseRequestHandler extends RequestHandler {
+    public abstract static class RawURLParseRequestHandler extends RequestHandler {
         @Override
         protected void parseArgs() {
-            HashMap<String, String> args = new HashMap<>();
+            Map<String, String> args = new HashMap<>();
             if (request.indexOf('?') != -1) {
                 String query = request.substring(request.indexOf('?') + 1);
                 if (query.indexOf("url=") == 0) {
-                    args.put("url", decodeParam(query.substring(4)));
+                    args.put("url", Utils.decodeUrl(query.substring(4)));
                 } else {
                     int urlIdx = query.indexOf("&url=");
                     if (urlIdx != -1) {
-                        args.put("url", decodeParam(query.substring(urlIdx + 5)));
+                        args.put("url", Utils.decodeUrl(query.substring(urlIdx + 5)));
                         query = query.substring(0, urlIdx);
                     } else if (query.indexOf('#') != -1) {
                         query = query.substring(0, query.indexOf('#'));
@@ -345,7 +333,7 @@ public abstract class RequestHandler {
                     for (String param : params) {
                         int eq = param.indexOf('=');
                         if (eq != -1) {
-                            args.put(param.substring(0, eq), decodeParam(param.substring(eq + 1)));
+                            args.put(param.substring(0, eq), Utils.decodeUrl(param.substring(eq + 1)));
                         }
                     }
                 }
diff --git a/src/org/openstreetmap/josm/io/session/SessionReader.java b/src/org/openstreetmap/josm/io/session/SessionReader.java
index b87ca1b..4b323e4 100644
--- a/src/org/openstreetmap/josm/io/session/SessionReader.java
+++ b/src/org/openstreetmap/josm/io/session/SessionReader.java
@@ -483,12 +483,12 @@ public class SessionReader {
         }
 
         layers = new ArrayList<>();
-        for (int idx : layersMap.keySet()) {
-            Layer layer = layersMap.get(idx);
+        for (Entry<Integer, Layer> entry : layersMap.entrySet()) {
+            Layer layer = entry.getValue();
             if (layer == null) {
                 continue;
             }
-            Element el = elems.get(idx);
+            Element el = elems.get(entry.getKey());
             if (el.hasAttribute("visible")) {
                 layer.setVisible(Boolean.parseBoolean(el.getAttribute("visible")));
             }
diff --git a/src/org/openstreetmap/josm/plugins/PluginDownloadTask.java b/src/org/openstreetmap/josm/plugins/PluginDownloadTask.java
index ea606e0..d841a63 100644
--- a/src/org/openstreetmap/josm/plugins/PluginDownloadTask.java
+++ b/src/org/openstreetmap/josm/plugins/PluginDownloadTask.java
@@ -53,9 +53,9 @@ public class PluginDownloadTask extends PleaseWaitRunnable{
      * @param parent the parent component relative to which the {@link org.openstreetmap.josm.gui.PleaseWaitDialog} is displayed
      * @param toUpdate a collection of plugin descriptions for plugins to update/download. Must not be null.
      * @param title the title to display in the {@link org.openstreetmap.josm.gui.PleaseWaitDialog}
-     * @throws IllegalArgumentException thrown if toUpdate is null
+     * @throws IllegalArgumentException if toUpdate is null
      */
-    public PluginDownloadTask(Component parent, Collection<PluginInformation> toUpdate, String title) throws IllegalArgumentException{
+    public PluginDownloadTask(Component parent, Collection<PluginInformation> toUpdate, String title) {
         super(parent, title == null ? "" : title, false /* don't ignore exceptions */);
         CheckParameterUtil.ensureParameterNotNull(toUpdate, "toUpdate");
         this.toUpdate.addAll(toUpdate);
@@ -67,7 +67,7 @@ public class PluginDownloadTask extends PleaseWaitRunnable{
      * @param monitor a progress monitor. Defaults to {@link NullProgressMonitor#INSTANCE} if null
      * @param toUpdate a collection of plugin descriptions for plugins to update/download. Must not be null.
      * @param title the title to display in the {@link org.openstreetmap.josm.gui.PleaseWaitDialog}
-     * @throws IllegalArgumentException thrown if toUpdate is null
+     * @throws IllegalArgumentException if toUpdate is null
      */
     public PluginDownloadTask(ProgressMonitor monitor, Collection<PluginInformation> toUpdate, String title) {
         super(title, monitor == null? NullProgressMonitor.INSTANCE: monitor, false /* don't ignore exceptions */);
@@ -79,9 +79,9 @@ public class PluginDownloadTask extends PleaseWaitRunnable{
      * Sets the collection of plugins to update.
      *
      * @param toUpdate the collection of plugins to update. Must not be null.
-     * @throws IllegalArgumentException thrown if toUpdate is null
+     * @throws IllegalArgumentException if toUpdate is null
      */
-    public void setPluginsToDownload(Collection<PluginInformation> toUpdate) throws IllegalArgumentException{
+    public void setPluginsToDownload(Collection<PluginInformation> toUpdate) {
         CheckParameterUtil.ensureParameterNotNull(toUpdate, "toUpdate");
         this.toUpdate.clear();
         this.toUpdate.addAll(toUpdate);
diff --git a/src/org/openstreetmap/josm/plugins/PluginException.java b/src/org/openstreetmap/josm/plugins/PluginException.java
index d4ae8bb..465a735 100644
--- a/src/org/openstreetmap/josm/plugins/PluginException.java
+++ b/src/org/openstreetmap/josm/plugins/PluginException.java
@@ -11,7 +11,7 @@ import static org.openstreetmap.josm.tools.I18n.tr;
  * @author Immanuel.Scholz
  */
 public class PluginException extends Exception {
-    public final PluginProxy plugin;
+    public final transient PluginProxy plugin;
     public final String name;
 
     public PluginException(PluginProxy plugin, String name, Throwable cause) {
diff --git a/src/org/openstreetmap/josm/plugins/PluginHandler.java b/src/org/openstreetmap/josm/plugins/PluginHandler.java
index 7228424..89a98b6 100644
--- a/src/org/openstreetmap/josm/plugins/PluginHandler.java
+++ b/src/org/openstreetmap/josm/plugins/PluginHandler.java
@@ -744,7 +744,7 @@ public final class PluginHandler {
                 Main.warn("InterruptedException in "+PluginHandler.class.getSimpleName()+" while loading locally available plugin information");
                 return null;
             }
-            HashMap<String, PluginInformation> ret = new HashMap<>();
+            Map<String, PluginInformation> ret = new HashMap<>();
             for (PluginInformation pi: task.getAvailablePlugins()) {
                 ret.put(pi.name, pi);
             }
@@ -882,11 +882,10 @@ public final class PluginHandler {
      * @param pluginsWanted the collection of plugins to update. Updates all plugins if {@code null}
      * @param monitor the progress monitor. Defaults to {@link NullProgressMonitor#INSTANCE} if null.
      * @param displayErrMsg if {@code true}, a blocking error message is displayed in case of I/O exception.
-     * @throws IllegalArgumentException thrown if plugins is null
+     * @throws IllegalArgumentException if plugins is null
      */
     public static Collection<PluginInformation> updatePlugins(Component parent,
-            Collection<PluginInformation> pluginsWanted, ProgressMonitor monitor, boolean displayErrMsg)
-            throws IllegalArgumentException {
+            Collection<PluginInformation> pluginsWanted, ProgressMonitor monitor, boolean displayErrMsg) {
         Collection<PluginInformation> plugins = null;
         pluginDownloadTask = null;
         if (monitor == null) {
@@ -1088,6 +1087,8 @@ public final class PluginHandler {
             public boolean accept(File dir, String name) {
                 return name.endsWith(".jar.new");
             }});
+        if (files == null)
+            return;
 
         for (File updatedPlugin : files) {
             final String filePath = updatedPlugin.getPath();
@@ -1317,7 +1318,7 @@ public final class PluginHandler {
      */
     public static String getBugReportText() {
         StringBuilder text = new StringBuilder();
-        LinkedList <String> pl = new LinkedList<>(Main.pref.getCollection("plugins", new LinkedList<String>()));
+        List <String> pl = new LinkedList<>(Main.pref.getCollection("plugins", new LinkedList<String>()));
         for (final PluginProxy pp : pluginList) {
             PluginInformation pi = pp.getPluginInformation();
             pl.remove(pi.name);
diff --git a/src/org/openstreetmap/josm/plugins/PluginInformation.java b/src/org/openstreetmap/josm/plugins/PluginInformation.java
index 3676981..12cc2e2 100644
--- a/src/org/openstreetmap/josm/plugins/PluginInformation.java
+++ b/src/org/openstreetmap/josm/plugins/PluginInformation.java
@@ -105,7 +105,7 @@ public class PluginInformation {
      * {@code file}.
      * @param file the plugin jar
      * @param name the plugin name
-     * @throws PluginException thrown if reading the manifest file fails
+     * @throws PluginException if reading the manifest file fails
      */
     public PluginInformation(File file, String name) throws PluginException {
         if (!PluginHandler.isValidJar(file)) {
@@ -134,7 +134,7 @@ public class PluginInformation {
      * @param manifestStream the stream to read the manifest from
      * @param name the plugin name
      * @param url the download URL for the plugin
-     * @throws PluginException thrown if the plugin information can't be read from the input stream
+     * @throws PluginException if the plugin information can't be read from the input stream
      */
     public PluginInformation(InputStream manifestStream, String name, String url) throws PluginException {
         this.name = name;
diff --git a/src/org/openstreetmap/josm/plugins/PluginListParser.java b/src/org/openstreetmap/josm/plugins/PluginListParser.java
index cb9b95b..6bf2f08 100644
--- a/src/org/openstreetmap/josm/plugins/PluginListParser.java
+++ b/src/org/openstreetmap/josm/plugins/PluginListParser.java
@@ -54,7 +54,7 @@ public class PluginListParser {
      *
      * @param in the input stream from which to parse
      * @return the list of plugin information objects
-     * @throws PluginListParseException thrown if something goes wrong while parsing
+     * @throws PluginListParseException if something goes wrong while parsing
      */
     public List<PluginInformation> parse(InputStream in) throws PluginListParseException{
         List<PluginInformation> ret = new LinkedList<>();
diff --git a/src/org/openstreetmap/josm/plugins/ReadRemotePluginInformationTask.java b/src/org/openstreetmap/josm/plugins/ReadRemotePluginInformationTask.java
index 6edaa3f..c788a47 100644
--- a/src/org/openstreetmap/josm/plugins/ReadRemotePluginInformationTask.java
+++ b/src/org/openstreetmap/josm/plugins/ReadRemotePluginInformationTask.java
@@ -13,7 +13,6 @@ import java.io.FilenameFilter;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.InputStreamReader;
-import java.io.OutputStream;
 import java.io.OutputStreamWriter;
 import java.io.PrintWriter;
 import java.net.HttpURLConnection;
@@ -27,6 +26,7 @@ import java.util.Collections;
 import java.util.HashSet;
 import java.util.LinkedList;
 import java.util.List;
+import java.util.Set;
 
 import javax.swing.JLabel;
 import javax.swing.JOptionPane;
@@ -41,7 +41,6 @@ import org.openstreetmap.josm.gui.util.GuiHelper;
 import org.openstreetmap.josm.gui.widgets.JosmTextArea;
 import org.openstreetmap.josm.io.OsmTransferException;
 import org.openstreetmap.josm.tools.GBC;
-import org.openstreetmap.josm.tools.ImageProvider;
 import org.openstreetmap.josm.tools.Utils;
 import org.xml.sax.SAXException;
 
@@ -277,7 +276,7 @@ public class ReadRemotePluginInformationTask extends PleaseWaitRunnable {
      */
     protected List<PluginInformation> filterDeprecatedPlugins(List<PluginInformation> plugins) {
         List<PluginInformation> ret = new ArrayList<>(plugins.size());
-        HashSet<String> deprecatedPluginNames = new HashSet<>();
+        Set<String> deprecatedPluginNames = new HashSet<>();
         for (PluginHandler.DeprecatedPlugin p : PluginHandler.DEPRECATED_PLUGINS) {
             deprecatedPluginNames.add(p.name);
         }
diff --git a/src/org/openstreetmap/josm/tools/AlphanumComparator.java b/src/org/openstreetmap/josm/tools/AlphanumComparator.java
index 20a647f..028065b 100644
--- a/src/org/openstreetmap/josm/tools/AlphanumComparator.java
+++ b/src/org/openstreetmap/josm/tools/AlphanumComparator.java
@@ -22,6 +22,7 @@ package org.openstreetmap.josm.tools;
  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  *
  */
+import java.io.Serializable;
 import java.text.Collator;
 import java.util.Comparator;
 import java.util.Locale;
@@ -37,7 +38,9 @@ import java.util.Locale;
  * Bogus, and David Koelle and others.
  *
  */
-public class AlphanumComparator implements Comparator<String> {
+public class AlphanumComparator implements Comparator<String>, Serializable {
+
+    private static final long serialVersionUID = 1L;
 
     private static final AlphanumComparator INSTANCE = new AlphanumComparator();
 
diff --git a/src/org/openstreetmap/josm/tools/BugReportExceptionHandler.java b/src/org/openstreetmap/josm/tools/BugReportExceptionHandler.java
index 575ac8f..8ee6880 100644
--- a/src/org/openstreetmap/josm/tools/BugReportExceptionHandler.java
+++ b/src/org/openstreetmap/josm/tools/BugReportExceptionHandler.java
@@ -47,7 +47,7 @@ public final class BugReportExceptionHandler implements Thread.UncaughtException
 
     private static class BugReporterThread extends Thread {
 
-        final Throwable e;
+        private final Throwable e;
 
         public BugReporterThread(Throwable t) {
             super("Bug Reporter");
diff --git a/src/org/openstreetmap/josm/tools/CheckParameterUtil.java b/src/org/openstreetmap/josm/tools/CheckParameterUtil.java
index 4e98f85..ba47caa 100644
--- a/src/org/openstreetmap/josm/tools/CheckParameterUtil.java
+++ b/src/org/openstreetmap/josm/tools/CheckParameterUtil.java
@@ -105,8 +105,8 @@ public final class CheckParameterUtil {
      *
      * @param id  the primitive  id
      * @param parameterName the name of the parameter to be checked
-     * @throws IllegalArgumentException thrown if id is null
-     * @throws IllegalArgumentException thrown if id.getType() != NODE
+     * @throws IllegalArgumentException if id is null
+     * @throws IllegalArgumentException if id.getType() != NODE
      */
     public static void ensureValidNodeId(PrimitiveId id, String parameterName) throws IllegalArgumentException {
         ensureParameterNotNull(id, parameterName);
diff --git a/src/org/openstreetmap/josm/tools/CompositeList.java b/src/org/openstreetmap/josm/tools/CompositeList.java
index b9e24ed..217107f 100644
--- a/src/org/openstreetmap/josm/tools/CompositeList.java
+++ b/src/org/openstreetmap/josm/tools/CompositeList.java
@@ -33,4 +33,4 @@ public class CompositeList<T> extends AbstractList<T> {
     public int size() {
         return a.size() + b.size();
     }
-}
\ No newline at end of file
+}
diff --git a/src/org/openstreetmap/josm/tools/CopyList.java b/src/org/openstreetmap/josm/tools/CopyList.java
index bba0522..122ad94 100644
--- a/src/org/openstreetmap/josm/tools/CopyList.java
+++ b/src/org/openstreetmap/josm/tools/CopyList.java
@@ -147,21 +147,21 @@ public final class CopyList<E> extends AbstractList<E> implements RandomAccess,
         /**
          * Index of element to be returned by subsequent call to next.
          */
-        int cursor = 0;
+        private int cursor = 0;
 
         /**
          * Index of element returned by most recent call to next or
          * previous.  Reset to -1 if this element is deleted by a call
          * to remove.
          */
-        int lastRet = -1;
+        private int lastRet = -1;
 
         /**
          * The modCount value that the iterator believes that the backing
          * List should have.  If this expectation is violated, the iterator
          * has detected concurrent modification.
          */
-        int expectedModCount = modCount;
+        private int expectedModCount = modCount;
 
         @Override
         public boolean hasNext() {
diff --git a/src/org/openstreetmap/josm/tools/Diff.java b/src/org/openstreetmap/josm/tools/Diff.java
index 279102d..0a6b4e9 100644
--- a/src/org/openstreetmap/josm/tools/Diff.java
+++ b/src/org/openstreetmap/josm/tools/Diff.java
@@ -933,7 +933,7 @@ public class Diff {
         }
 
         /** Number of elements (lines) in this file. */
-        final int buffered_lines;
+        private final int buffered_lines;
 
         /** Vector, indexed by line number, containing an equivalence code for
            each line.  It is this vector that is actually compared with that
@@ -942,18 +942,18 @@ public class Diff {
 
         /** Vector, like the previous one except that
            the elements for discarded lines have been squeezed out.  */
-        final int[]    undiscarded;
+        private final int[]    undiscarded;
 
         /** Vector mapping virtual line numbers (not counting discarded lines)
            to real ones (counting those lines).  Both are origin-0.  */
-        final int[]    realindexes;
+        private final int[]    realindexes;
 
         /** Total number of nondiscarded lines. */
-        int         nondiscarded_lines;
+        private int         nondiscarded_lines;
 
         /** Array, indexed by real origin-1 line number,
            containing true for a line that is an insertion or a deletion.
            The results of comparison are stored here.  */
-        boolean[]       changed_flag;
+        private boolean[]       changed_flag;
     }
 }
diff --git a/src/org/openstreetmap/josm/tools/FontsManager.java b/src/org/openstreetmap/josm/tools/FontsManager.java
index ca7b9cb..8bb3ad7 100644
--- a/src/org/openstreetmap/josm/tools/FontsManager.java
+++ b/src/org/openstreetmap/josm/tools/FontsManager.java
@@ -38,11 +38,7 @@ public class FontsManager {
         for (String fontFile : INCLUDED_FONTS) {
             String url = "resource://data/fonts/"+fontFile;
             try (InputStream i = new CachedFile(url).getInputStream()) {
-                Font f = Font.createFont(Font.TRUETYPE_FONT, i);
-                if (f == null) {
-                    throw new RuntimeException("unable to load font: "+fontFile);
-                }
-                ge.registerFont(f);
+                ge.registerFont(Font.createFont(Font.TRUETYPE_FONT, i));
             } catch (IOException | FontFormatException ex) {
                 throw new RuntimeException(ex);
             }
diff --git a/src/org/openstreetmap/josm/tools/Geometry.java b/src/org/openstreetmap/josm/tools/Geometry.java
index 349fb67..52918e3 100644
--- a/src/org/openstreetmap/josm/tools/Geometry.java
+++ b/src/org/openstreetmap/josm/tools/Geometry.java
@@ -687,16 +687,26 @@ public final class Geometry {
      * @throws IllegalArgumentException if way is not closed (see {@link Way#isClosed}).
      */
     public static boolean isClockwise(Way w) {
-        if (!w.isClosed()) {
-            throw new IllegalArgumentException("Way must be closed to check orientation.");
-        }
+        return isClockwise(w.getNodes());
+    }
 
+    /**
+     * Determines whether path from nodes list is oriented clockwise.
+     * @see #isClockwise(Way)
+     * @param nodes Nodes list to be checked.
+     * @return true if and only if way is oriented clockwise.
+     * @throws IllegalArgumentException if way is not closed (see {@link Way#isClosed}).
+     */
+    public static boolean isClockwise(List<Node> nodes) {
         double area2 = 0.;
-        int nodesCount = w.getNodesCount();
+        int nodesCount = nodes.size();
+        if (nodesCount < 3 || nodes.get(0) != nodes.get(nodesCount - 1)) {
+            throw new IllegalArgumentException("Way must be closed to check orientation.");
+        }
 
         for (int node = 1; node <= /*sic! consider last-first as well*/ nodesCount; node++) {
-            LatLon coorPrev = w.getNode(node - 1).getCoor();
-            LatLon coorCurr = w.getNode(node % nodesCount).getCoor();
+            LatLon coorPrev = nodes.get(node - 1).getCoor();
+            LatLon coorCurr = nodes.get(node % nodesCount).getCoor();
             area2 += coorPrev.lon() * coorCurr.lat();
             area2 -= coorCurr.lon() * coorPrev.lat();
         }
diff --git a/src/org/openstreetmap/josm/tools/I18n.java b/src/org/openstreetmap/josm/tools/I18n.java
index dac36fa..425db58 100644
--- a/src/org/openstreetmap/josm/tools/I18n.java
+++ b/src/org/openstreetmap/josm/tools/I18n.java
@@ -1,6 +1,7 @@
 // License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.tools;
 
+import java.awt.GraphicsEnvironment;
 import java.io.BufferedInputStream;
 import java.io.File;
 import java.io.FileInputStream;
@@ -25,6 +26,7 @@ import javax.swing.UIManager;
 
 import org.openstreetmap.gui.jmapviewer.FeatureAdapter.TranslationAdapter;
 import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.gui.util.GuiHelper;
 import org.openstreetmap.josm.gui.widgets.AbstractFileChooser;
 
 /**
@@ -80,6 +82,8 @@ public final class I18n {
 
     private static volatile PluralMode pluralMode = PluralMode.MODE_NOTONE; /* english default */
     private static volatile String loadedCode = "en";
+    /** store the original system locale for further use */
+    public static final Locale SystemLocale = Locale.getDefault();
 
     /* Localization keys for file chooser (and color chooser). */
     private static final String[] javaInternalMessageKeys = new String[] {
@@ -437,7 +441,7 @@ public final class I18n {
         languages.put("zh_TW", PluralMode.MODE_NONE);
 
         /* try initial language settings, may be changed later again */
-        if(!load(Locale.getDefault().toString())) {
+        if(!load(LanguageInfo.getJOSMLocaleCode())) {
             Locale.setDefault(Locale.ENGLISH);
         }
     }
@@ -491,13 +495,7 @@ public final class I18n {
             return false;
         URL tr = getTranslationFile(l);
         if (tr == null || !languages.containsKey(l)) {
-            int i = l.indexOf('_');
-            if (i > 0) {
-                l = l.substring(0, i);
-            }
-            tr = getTranslationFile(l);
-            if (tr == null || !languages.containsKey(l))
-                return false;
+            return false;
         }
         try (
             InputStream enStream = en.openStream();
@@ -733,4 +731,23 @@ public final class I18n {
             }
         };
     }
+
+    /**
+     * Setup special font for Khmer script, as the default Java fonts do not display these characters.
+     *
+     * @since 8282
+     */
+    public static void setupLanguageFonts() {
+        // Use special font for Khmer script, as the default Java font do not display these characters
+        if ("km".equals(LanguageInfo.getJOSMLocaleCode())) {
+            Collection<String> fonts = Arrays.asList(
+                    GraphicsEnvironment.getLocalGraphicsEnvironment().getAvailableFontFamilyNames());
+            for (String f : new String[]{"Khmer UI", "DaunPenh", "MoolBoran"}) {
+                if (fonts.contains(f)) {
+                    GuiHelper.setUIFont(f);
+                    break;
+                }
+            }
+        }
+    }
 }
diff --git a/src/org/openstreetmap/josm/tools/ImageOverlay.java b/src/org/openstreetmap/josm/tools/ImageOverlay.java
index 211d5b1..f54eb72 100644
--- a/src/org/openstreetmap/josm/tools/ImageOverlay.java
+++ b/src/org/openstreetmap/josm/tools/ImageOverlay.java
@@ -2,8 +2,6 @@
 package org.openstreetmap.josm.tools;
 
 import java.awt.Dimension;
-import java.awt.Graphics;
-import java.awt.Image;
 import java.awt.image.BufferedImage;
 
 import javax.swing.ImageIcon;
@@ -22,7 +20,7 @@ public class ImageOverlay {
     private double offsetTop;
     /** offset of the image from bottom border, values between 0 and 1 */
     private double offsetBottom;
-    
+
     /**
      * Create an overlay info. All values are relative sizes between 0 and 1. Size of the image
      * is the result of the difference between left/right and top/bottom.
@@ -41,7 +39,7 @@ public class ImageOverlay {
         this.offsetRight = offsetRight;
         this.offsetBottom = offsetBottom;
     }
-    
+
     /**
      * Create an overlay in southeast corner. All values are relative sizes between 0 and 1.
      * Size of the image is the result of the difference between left/right and top/bottom.
diff --git a/src/org/openstreetmap/josm/tools/ImageProvider.java b/src/org/openstreetmap/josm/tools/ImageProvider.java
index e311122..a139516 100644
--- a/src/org/openstreetmap/josm/tools/ImageProvider.java
+++ b/src/org/openstreetmap/josm/tools/ImageProvider.java
@@ -26,11 +26,8 @@ import java.io.File;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.StringReader;
-import java.io.UnsupportedEncodingException;
 import java.net.URI;
 import java.net.URL;
-import java.net.URLDecoder;
-import java.net.URLEncoder;
 import java.nio.charset.StandardCharsets;
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -54,7 +51,6 @@ import javax.imageio.ImageReadParam;
 import javax.imageio.ImageReader;
 import javax.imageio.metadata.IIOMetadata;
 import javax.imageio.stream.ImageInputStream;
-import javax.swing.Icon;
 import javax.swing.ImageIcon;
 import javax.xml.bind.DatatypeConverter;
 
@@ -132,25 +128,33 @@ public class ImageProvider {
         MAP,
         /** map icon maximum size */
         MAPMAX,
-        /** menu icon size */
+        /** cursor icon size */
         CURSOR,
-        /** Cursor overlay icon size */
+        /** cursor overlay icon size */
         CURSOROVERLAY,
-        /** Cursor icon size */
+        /** menu icon size */
         MENU,
+        /** menu icon size in popup menus
+         * @since 8323
+         */
+        POPUPMENU,
+        /** Layer list icon size
+         * @since 8323
+         */
+        LAYER
     }
 
     /**
      * Property set on {@code BufferedImage} returned by {@link #makeImageTransparent}.
      * @since 7132
      */
-    public static String PROP_TRANSPARENCY_FORCED = "josm.transparency.forced";
+    public static final String PROP_TRANSPARENCY_FORCED = "josm.transparency.forced";
 
     /**
      * Property set on {@code BufferedImage} returned by {@link #read} if metadata is required.
      * @since 7132
      */
-    public static String PROP_TRANSPARENCY_COLOR = "josm.transparency.color";
+    public static final String PROP_TRANSPARENCY_COLOR = "josm.transparency.color";
 
     /** directories in which images are searched */
     protected Collection<String> dirs;
@@ -286,6 +290,7 @@ public class ImageProvider {
      * Specify a zip file where the image is located.
      *
      * (optional)
+     * @param archive zip file where the image is located
      * @return the current object, for convenience
      */
     public ImageProvider setArchive(File archive) {
@@ -333,11 +338,13 @@ 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 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 */
         case SMALLICON: sizeval = Main.pref.getInteger("iconsize.smallicon", 16); break;
         case CURSOROVERLAY: /* same as cursor - only provided in case of future changes */
         case CURSOR: sizeval = Main.pref.getInteger("iconsize.cursor", 32); break;
+        case LAYER: sizeval = Main.pref.getInteger("iconsize.layer", 16); break;
         default: sizeval = Main.pref.getInteger("iconsize.default", 24); break;
         }
         return new Dimension(sizeval, sizeval);
@@ -815,51 +822,47 @@ public class ImageProvider {
      * @return the requested image or null if the request failed
      */
     private static ImageResource getIfAvailableDataUrl(String url) {
-        try {
-            Matcher m = dataUrlPattern.matcher(url);
-            if (m.matches()) {
-                String mediatype = m.group(1);
-                String base64 = m.group(2);
-                String data = m.group(3);
-                byte[] bytes;
-                if (";base64".equals(base64)) {
-                    bytes = DatatypeConverter.parseBase64Binary(data);
-                } else {
-                    try {
-                        bytes = URLDecoder.decode(data, "UTF-8").getBytes(StandardCharsets.UTF_8);
-                    } catch (IllegalArgumentException ex) {
-                        Main.warn("Unable to decode URL data part: "+ex.getMessage() + " (" + data + ")");
-                        return null;
-                    }
+        Matcher m = dataUrlPattern.matcher(url);
+        if (m.matches()) {
+            String mediatype = m.group(1);
+            String base64 = m.group(2);
+            String data = m.group(3);
+            byte[] bytes;
+            if (";base64".equals(base64)) {
+                bytes = DatatypeConverter.parseBase64Binary(data);
+            } else {
+                try {
+                    bytes = Utils.decodeUrl(data).getBytes(StandardCharsets.UTF_8);
+                } catch (IllegalArgumentException ex) {
+                    Main.warn("Unable to decode URL data part: "+ex.getMessage() + " (" + data + ")");
+                    return null;
                 }
-                if ("image/svg+xml".equals(mediatype)) {
-                    String s = new String(bytes, StandardCharsets.UTF_8);
-                    SVGDiagram svg = null;
-                    synchronized (getSvgUniverse()) {
-                        URI uri = getSvgUniverse().loadSVG(new StringReader(s), URLEncoder.encode(s, "UTF-8"));
-                        svg = getSvgUniverse().getDiagram(uri);
-                    }
-                    if (svg == null) {
-                        Main.warn("Unable to process svg: "+s);
-                        return null;
-                    }
-                    return new ImageResource(svg);
-                } else {
-                    try {
-                        // See #10479: for PNG files, always enforce transparency to be sure tNRS chunk is used even not in paletted mode
-                        // This can be removed if someday Oracle fixes https://bugs.openjdk.java.net/browse/JDK-6788458
-                        // hg.openjdk.java.net/jdk7u/jdk7u/jdk/file/828c4fedd29f/src/share/classes/com/sun/imageio/plugins/png/PNGImageReader.java#l656
-                        Image img = read(new ByteArrayInputStream(bytes), false, true);
-                        return img == null ? null : new ImageResource(img);
-                    } catch (IOException e) {
-                        Main.warn("IOException while reading image: "+e.getMessage());
-                    }
+            }
+            if ("image/svg+xml".equals(mediatype)) {
+                String s = new String(bytes, StandardCharsets.UTF_8);
+                SVGDiagram svg = null;
+                synchronized (getSvgUniverse()) {
+                    URI uri = getSvgUniverse().loadSVG(new StringReader(s), Utils.encodeUrl(s));
+                    svg = getSvgUniverse().getDiagram(uri);
+                }
+                if (svg == null) {
+                    Main.warn("Unable to process svg: "+s);
+                    return null;
+                }
+                return new ImageResource(svg);
+            } else {
+                try {
+                    // See #10479: for PNG files, always enforce transparency to be sure tNRS chunk is used even not in paletted mode
+                    // This can be removed if someday Oracle fixes https://bugs.openjdk.java.net/browse/JDK-6788458
+                    // hg.openjdk.java.net/jdk7u/jdk7u/jdk/file/828c4fedd29f/src/share/classes/com/sun/imageio/plugins/png/PNGImageReader.java#l656
+                    Image img = read(new ByteArrayInputStream(bytes), false, true);
+                    return img == null ? null : new ImageResource(img);
+                } catch (IOException e) {
+                    Main.warn("IOException while reading image: "+e.getMessage());
                 }
             }
-            return null;
-        } catch (UnsupportedEncodingException ex) {
-            throw new RuntimeException(ex.getMessage(), ex);
         }
+        return null;
     }
 
     /**
@@ -1141,55 +1144,8 @@ public class ImageProvider {
                 "crosshair".equals(name) ? new Point(10, 10) : new Point(3, 2), "Cursor");
     }
 
-    /**
-     * Decorate one icon with an overlay icon.
-     *
-     * @param ground the base image
-     * @param overlay the overlay image (can be smaller than the base image)
-     * @param pos position of the overlay image inside the base image (positioned
-     * in one of the corners)
-     * @return an icon that represent the overlay of the two given icons. The second icon is layed
-     * on the first relative to the given position.
-     * FIXME: This function does not fit into the ImageProvider concept as public function!
-     * Overlay should be handled like all the other functions only settings arguments and
-     * overlay must be transparent in the background.
-     * Also scaling is not cared about with current implementation.
-     * @deprecated this method will be refactored
-     */
-    @Deprecated
-    public static ImageIcon overlay(Icon ground, Icon overlay, OverlayPosition pos) {
-        int w = ground.getIconWidth();
-        int h = ground.getIconHeight();
-        int wo = overlay.getIconWidth();
-        int ho = overlay.getIconHeight();
-        BufferedImage img = new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB);
-        Graphics g = img.createGraphics();
-        ground.paintIcon(null, g, 0, 0);
-        int x = 0, y = 0;
-        switch (pos) {
-        case NORTHWEST:
-            x = 0;
-            y = 0;
-            break;
-        case NORTHEAST:
-            x = w - wo;
-            y = 0;
-            break;
-        case SOUTHWEST:
-            x = 0;
-            y = h - ho;
-            break;
-        case SOUTHEAST:
-            x = w - wo;
-            y = h - ho;
-            break;
-        }
-        overlay.paintIcon(null, g, x, y);
-        return new ImageIcon(img);
-    }
-
     /** 90 degrees in radians units */
-    static final double DEGREE_90 = 90.0 * Math.PI / 180.0;
+    private static final double DEGREE_90 = 90.0 * Math.PI / 180.0;
 
     /**
      * Creates a rotated version of the input image.
diff --git a/src/org/openstreetmap/josm/tools/LanguageInfo.java b/src/org/openstreetmap/josm/tools/LanguageInfo.java
index 4106afc..11778fb 100644
--- a/src/org/openstreetmap/josm/tools/LanguageInfo.java
+++ b/src/org/openstreetmap/josm/tools/LanguageInfo.java
@@ -3,6 +3,8 @@ package org.openstreetmap.josm.tools;
 
 import static org.openstreetmap.josm.tools.I18n.trc;
 
+import java.util.Collection;
+import java.util.LinkedList;
 import java.util.Locale;
 
 public final class LanguageInfo {
@@ -85,23 +87,25 @@ public final class LanguageInfo {
      * In most cases JOSM uses the 2-character ISO 639 language code ({@link Locale#getLanguage()}
      * to identify the locale of a localized resource, but in some cases it may use the
      * programmatic name for locales, as replied by {@link Locale#toString()}.
+     * 
+     * For unknown country codes and variants this function already does fallback to
+     * internally known translations.
      *
      * @param locale the locale. Replies "en" if null.
      * @return the JOSM code for the given locale
      */
     public static String getJOSMLocaleCode(Locale locale) {
         if (locale == null) return "en";
-        String full = locale.toString();
-        if ("iw_IL".equals(full))
-            return "he";
-        else if ("in".equals(full))
-            return "id";
-        else if ("ca__valencia".equals(full))
-            return "ca at valencia";
-        else if (I18n.hasCode(full)) // catch all non-single codes
-            return full;
-
-        // return single code
+        for(String full : getLanguageCodes(locale)) {
+            if ("iw_IL".equals(full))
+                return "he";
+            else if ("in".equals(full))
+                return "id";
+            else if (I18n.hasCode(full)) // catch all non-single codes
+                return full;
+        }
+
+        // return single code as fallback
         return locale.getLanguage();
     }
 
@@ -153,14 +157,17 @@ public final class LanguageInfo {
      * @return the resulting locale
      */
     public static Locale getLocale(String localeName) {
-        localeName = getJavaLocaleCode(localeName);
-        if ("ca__valencia".equals(localeName)) {
-            return new Locale("ca", "", "valencia");
-        }
+        int country = localeName.indexOf("_");
+        int variant = localeName.indexOf("@");
+        if (variant < 0 && country >= 0)
+            variant = localeName.indexOf("_", country+1);
         Locale l;
-        int i = localeName.indexOf('_');
-        if (i > 0) {
-            l = new Locale(localeName.substring(0, i), localeName.substring(i + 1));
+        if (variant > 0 && country > 0) {
+            l = new Locale(localeName.substring(0, country), localeName.substring(country+1, variant), localeName.substring(variant + 1));
+        } else if (variant > 0) {
+            l = new Locale(localeName.substring(0, variant), "", localeName.substring(variant + 1));
+        } else if (country > 0) {
+            l = new Locale(localeName.substring(0, country), localeName.substring(country + 1));
         } else {
             l = new Locale(localeName);
         }
@@ -207,4 +214,38 @@ public final class LanguageInfo {
         code = code.replace("@", "-");
         return code+"_";
     }
+
+    /**
+     * Replies a list of language codes for local names. Prefixes range from very specific
+     * to more generic.
+     * <ul>
+     *   <li>lang_COUNTRY at variant  of the current locale</li>
+     *   <li>lang at variant  of the current locale</li>
+     *   <li>lang_COUNTRY of the current locale</li>
+     *   <li>lang of the current locale</li>
+     * </ul>
+     *
+     * @param locale the locale to use, <code>null</code> for default locale
+     * @since 8283
+     * @return list of codes
+     */
+    public static Collection<String> getLanguageCodes(Locale l) {
+        Collection<String> list = new LinkedList<String>();
+        if(l == null)
+            l = Locale.getDefault();
+        String lang = l.getLanguage();
+        String c = l.getCountry();
+        String v = l.getVariant();
+        if(c.isEmpty())
+            c = null;
+        if(v != null && !v.isEmpty()) {
+            if(c != null)
+                list.add(lang+"_"+c+"@"+v);
+            list.add(lang+"@"+v);
+        }
+        if(c != null)
+            list.add(lang+"_"+c);
+        list.add(lang);
+        return list;
+    }
 }
diff --git a/src/org/openstreetmap/josm/tools/MultiMap.java b/src/org/openstreetmap/josm/tools/MultiMap.java
index cb0ae57..bd4469b 100644
--- a/src/org/openstreetmap/josm/tools/MultiMap.java
+++ b/src/org/openstreetmap/josm/tools/MultiMap.java
@@ -230,8 +230,8 @@ public class MultiMap<A, B> {
     @Override
     public String toString() {
         List<String> entries = new ArrayList<>(map.size());
-        for (A key : map.keySet()) {
-            entries.add(key + "->{" + Utils.join(",", map.get(key)) + "}");
+        for (Entry<A, Set<B>> entry : map.entrySet()) {
+            entries.add(entry.getKey() + "->{" + Utils.join(",", entry.getValue()) + "}");
         }
         return "(" + Utils.join(",", entries) + ")";
     }
diff --git a/src/org/openstreetmap/josm/tools/MultikeyActionsHandler.java b/src/org/openstreetmap/josm/tools/MultikeyActionsHandler.java
index de78ef8..5a84a1c 100644
--- a/src/org/openstreetmap/josm/tools/MultikeyActionsHandler.java
+++ b/src/org/openstreetmap/josm/tools/MultikeyActionsHandler.java
@@ -66,8 +66,8 @@ public final class MultikeyActionsHandler {
 
     private class MyAction extends AbstractAction {
 
-        final MultikeyShortcutAction action;
-        final Shortcut shortcut;
+        private final transient MultikeyShortcutAction action;
+        private final transient Shortcut shortcut;
 
         MyAction(MultikeyShortcutAction action) {
             this.action = action;
diff --git a/src/org/openstreetmap/josm/tools/OpenBrowser.java b/src/org/openstreetmap/josm/tools/OpenBrowser.java
index 83516d0..00005ff 100644
--- a/src/org/openstreetmap/josm/tools/OpenBrowser.java
+++ b/src/org/openstreetmap/josm/tools/OpenBrowser.java
@@ -33,7 +33,7 @@ public final class OpenBrowser {
      * A web resource will launch platform's browser, an audio file URI will launch audio player, etc.
      * @param uri The URI to display
      * @return <code>null</code> for success or a string in case of an error.
-     * @throws IllegalStateException thrown if no platform is set to which opening the URL can be dispatched,
+     * @throws IllegalStateException if no platform is set to which opening the URL can be dispatched,
      * {@link Main#platform}
      */
     public static String displayUrl(URI uri) {
@@ -80,7 +80,7 @@ public final class OpenBrowser {
      * A web resource will launch platform's browser, an audio file URL will launch audio player, etc.
      * @param url The URL to display
      * @return <code>null</code> for success or a string in case of an error.
-     * @throws IllegalStateException thrown if no platform is set to which opening the URL can be dispatched,
+     * @throws IllegalStateException if no platform is set to which opening the URL can be dispatched,
      * {@link Main#platform}
      */
     public static String displayUrl(String url) {
diff --git a/src/org/openstreetmap/josm/tools/OsmUrlToBounds.java b/src/org/openstreetmap/josm/tools/OsmUrlToBounds.java
index d5ab7dd..12a7ae0 100644
--- a/src/org/openstreetmap/josm/tools/OsmUrlToBounds.java
+++ b/src/org/openstreetmap/josm/tools/OsmUrlToBounds.java
@@ -5,8 +5,6 @@ import static org.openstreetmap.josm.tools.I18n.tr;
 
 import java.awt.HeadlessException;
 import java.awt.Toolkit;
-import java.io.UnsupportedEncodingException;
-import java.net.URLDecoder;
 import java.util.HashMap;
 import java.util.Map;
 
@@ -21,13 +19,13 @@ public final class OsmUrlToBounds {
         // Hide default constructor for utils classes
     }
 
-    public static Bounds parse(String url) throws IllegalArgumentException {
+    public static Bounds parse(String url) {
         try {
             // a percent sign indicates an encoded URL (RFC 1738).
             if (url.contains("%")) {
-                url = URLDecoder.decode(url, "UTF-8");
+                url = Utils.decodeUrl(url);
             }
-        } catch (UnsupportedEncodingException | IllegalArgumentException x) {
+        } catch (IllegalArgumentException x) {
             Main.error(x);
         }
         Bounds b = parseShortLink(url);
@@ -43,7 +41,7 @@ public final class OsmUrlToBounds {
             return null;
         }
         String[] args = url.substring(i+1).split("&");
-        HashMap<String, String> map = new HashMap<>();
+        Map<String, String> map = new HashMap<>();
         for (String arg : args) {
             int eq = arg.indexOf('=');
             if (eq != -1) {
@@ -82,7 +80,7 @@ public final class OsmUrlToBounds {
      * @param url string for parsing
      * @return Bounds if hashurl, {@code null} otherwise
      */
-    private static Bounds parseHashURLs(String url) throws IllegalArgumentException {
+    private static Bounds parseHashURLs(String url) {
         int startIndex = url.indexOf("#map=");
         if (startIndex == -1) return null;
         int endIndex = url.indexOf('&', startIndex);
diff --git a/src/org/openstreetmap/josm/tools/Pair.java b/src/org/openstreetmap/josm/tools/Pair.java
index 8ec0e10..b5e81d9 100644
--- a/src/org/openstreetmap/josm/tools/Pair.java
+++ b/src/org/openstreetmap/josm/tools/Pair.java
@@ -1,6 +1,7 @@
 // License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.tools;
 import java.util.ArrayList;
+import java.util.List;
 
 /**
  * A pair of objects.
@@ -30,11 +31,13 @@ public final class Pair<A,B> {
         this.b = b;
     }
 
-    @Override public int hashCode() {
+    @Override
+    public int hashCode() {
         return a.hashCode() + b.hashCode();
     }
 
-    @Override public boolean equals(Object other) {
+    @Override
+    public boolean equals(Object other) {
         if (other instanceof Pair<?, ?>) {
             Pair<?, ?> o = (Pair<?, ?>)other;
             return a.equals(o.a) && b.equals(o.b);
@@ -42,8 +45,8 @@ public final class Pair<A,B> {
             return false;
     }
 
-    public static <T> ArrayList<T> toArrayList(Pair<T, T> p) {
-        ArrayList<T> l = new ArrayList<>(2);
+    public static <T> List<T> toList(Pair<T, T> p) {
+        List<T> l = new ArrayList<>(2);
         l.add(p.a);
         l.add(p.b);
         return l;
diff --git a/src/org/openstreetmap/josm/tools/PlatformHookWindows.java b/src/org/openstreetmap/josm/tools/PlatformHookWindows.java
index a69464b..43110ce 100644
--- a/src/org/openstreetmap/josm/tools/PlatformHookWindows.java
+++ b/src/org/openstreetmap/josm/tools/PlatformHookWindows.java
@@ -317,7 +317,10 @@ public class PlatformHookWindows extends PlatformHookUnixoid implements Platform
         Path fontPath = FileSystems.getDefault().getPath(System.getenv("SYSTEMROOT"), "Fonts");
         try (DirectoryStream<Path> ds = Files.newDirectoryStream(fontPath)) {
             for (Path p : ds) {
-                fontsAvail.add(p.getFileName().toString().toUpperCase());
+                Path filename = p.getFileName();
+                if (filename != null) {
+                    fontsAvail.add(filename.toString().toUpperCase());
+                }
             }
             fontsAvail.add(""); // for devanagari
         } catch (IOException ex) {
diff --git a/src/org/openstreetmap/josm/tools/Shortcut.java b/src/org/openstreetmap/josm/tools/Shortcut.java
index 7c9dfcd..124c37d 100644
--- a/src/org/openstreetmap/josm/tools/Shortcut.java
+++ b/src/org/openstreetmap/josm/tools/Shortcut.java
@@ -309,7 +309,7 @@ public final class Shortcut {
         // (1) System reserved shortcuts
         Main.platform.initSystemShortcuts();
         // (2) User defined shortcuts
-        LinkedList<Shortcut> newshortcuts = new LinkedList<>();
+        List<Shortcut> newshortcuts = new LinkedList<>();
         for(String s : Main.pref.getAllPrefixCollectionKeys("shortcut.entry.")) {
             newshortcuts.add(new Shortcut(s));
         }
diff --git a/src/org/openstreetmap/josm/tools/SubclassFilteredCollection.java b/src/org/openstreetmap/josm/tools/SubclassFilteredCollection.java
index 5967972..fcb621e 100644
--- a/src/org/openstreetmap/josm/tools/SubclassFilteredCollection.java
+++ b/src/org/openstreetmap/josm/tools/SubclassFilteredCollection.java
@@ -19,7 +19,7 @@ public class SubclassFilteredCollection<S, T extends S> extends AbstractCollecti
 
     private final Collection<? extends S> collection;
     private final Predicate<? super S> predicate;
-    int size = -1;
+    private int size = -1;
 
     private class FilterIterator implements Iterator<T> {
 
diff --git a/src/org/openstreetmap/josm/tools/TextTagParser.java b/src/org/openstreetmap/josm/tools/TextTagParser.java
index 133a9c5..3e9cb02 100644
--- a/src/org/openstreetmap/josm/tools/TextTagParser.java
+++ b/src/org/openstreetmap/josm/tools/TextTagParser.java
@@ -39,12 +39,12 @@ public final class TextTagParser {
     }
 
     public static class TextAnalyzer {
-        boolean quotesStarted = false;
-        boolean esc = false;
-        StringBuilder s = new StringBuilder(200);
-        int pos;
-        String data;
-        int n;
+        private boolean quotesStarted = false;
+        private boolean esc = false;
+        private StringBuilder s = new StringBuilder(200);
+        private int pos;
+        private String data;
+        private int n;
 
         public TextAnalyzer(String text) {
             pos = 0;
diff --git a/src/org/openstreetmap/josm/tools/Utils.java b/src/org/openstreetmap/josm/tools/Utils.java
index 29cb07f..ec12c75 100644
--- a/src/org/openstreetmap/josm/tools/Utils.java
+++ b/src/org/openstreetmap/josm/tools/Utils.java
@@ -24,6 +24,7 @@ import java.net.HttpURLConnection;
 import java.net.MalformedURLException;
 import java.net.URL;
 import java.net.URLConnection;
+import java.net.URLDecoder;
 import java.net.URLEncoder;
 import java.nio.charset.StandardCharsets;
 import java.nio.file.Files;
@@ -49,9 +50,15 @@ import java.util.zip.ZipEntry;
 import java.util.zip.ZipFile;
 import java.util.zip.ZipInputStream;
 
+import javax.xml.XMLConstants;
+import javax.xml.parsers.ParserConfigurationException;
+import javax.xml.parsers.SAXParser;
+import javax.xml.parsers.SAXParserFactory;
+
 import org.apache.commons.compress.compressors.bzip2.BZip2CompressorInputStream;
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.data.Version;
+import org.xml.sax.SAXException;
 
 /**
  * Basic utils, that can be useful in different parts of the program.
@@ -346,8 +353,8 @@ public final class Utils {
      * @param in The source file
      * @param out The destination file
      * @return the path to the target file
-     * @throws java.io.IOException If any I/O error occurs
-     * @throws IllegalArgumentException If {@code in} or {@code out} is {@code null}
+     * @throws IOException if any I/O error occurs
+     * @throws IllegalArgumentException if {@code in} or {@code out} is {@code null}
      * @since 7003
      */
     public static Path copyFile(File in, File out) throws IOException {
@@ -360,8 +367,8 @@ public final class Utils {
      * Recursive directory copy function
      * @param in The source directory
      * @param out The destination directory
-     * @throws IOException If any I/O error ooccurs
-     * @throws IllegalArgumentException If {@code in} or {@code out} is {@code null}
+     * @throws IOException if any I/O error ooccurs
+     * @throws IllegalArgumentException if {@code in} or {@code out} is {@code null}
      * @since 7835
      */
     public static void copyDirectory(File in, File out) throws IOException {
@@ -370,12 +377,15 @@ public final class Utils {
         if (!out.exists() && !out.mkdirs()) {
             Main.warn("Unable to create directory "+out.getPath());
         }
-        for (File f : in.listFiles()) {
-            File target = new File(out, f.getName());
-            if (f.isDirectory()) {
-                copyDirectory(f, target);
-            } else {
-                copyFile(f, target);
+        File[] files = in.listFiles();
+        if (files != null) {
+            for (File f : files) {
+                File target = new File(out, f.getName());
+                if (f.isDirectory()) {
+                    copyDirectory(f, target);
+                } else {
+                    copyFile(f, target);
+                }
             }
         }
     }
@@ -407,11 +417,13 @@ public final class Utils {
     public static boolean deleteDirectory(File path) {
         if( path.exists() ) {
             File[] files = path.listFiles();
-            for (File file : files) {
-                if (file.isDirectory()) {
-                    deleteDirectory(file);
-                } else if (!file.delete()) {
-                    Main.warn("Unable to delete file: "+file.getPath());
+            if (files != null) {
+                for (File file : files) {
+                    if (file.isDirectory()) {
+                        deleteDirectory(file);
+                    } else if (!file.delete()) {
+                        Main.warn("Unable to delete file: "+file.getPath());
+                    }
                 }
             }
         }
@@ -1109,17 +1121,54 @@ public final class Utils {
             if (URL_CHARS.contains(c)) {
                 sb.append(c);
             } else {
-                try {
-                    sb.append(URLEncoder.encode(c, "UTF-8"));
-                } catch (UnsupportedEncodingException ex) {
-                    throw new RuntimeException(ex);
-                }
+                sb.append(encodeUrl(c));
             }
         }
         return sb.toString();
     }
 
     /**
+     * Translates a string into <code>application/x-www-form-urlencoded</code>
+     * format. This method uses UTF-8 encoding scheme to obtain the bytes for unsafe
+     * characters.
+     *
+     * @param   s <code>String</code> to be translated.
+     * @return  the translated <code>String</code>.
+     * @see #decodeUrl(String)
+     * @since 8304
+     */
+    public static String encodeUrl(String s) {
+        final String enc = StandardCharsets.UTF_8.name();
+        try {
+            return URLEncoder.encode(s, enc);
+        } catch (UnsupportedEncodingException e) {
+            Main.error(e);
+            return null;
+        }
+    }
+
+    /**
+     * Decodes a <code>application/x-www-form-urlencoded</code> string.
+     * UTF-8 encoding is used to determine
+     * what characters are represented by any consecutive sequences of the
+     * form "<code>%<i>xy</i></code>".
+     *
+     * @param s the <code>String</code> to decode
+     * @return the newly decoded <code>String</code>
+     * @see #encodeUrl(String)
+     * @since 8304
+     */
+    public static String decodeUrl(String s) {
+        final String enc = StandardCharsets.UTF_8.name();
+        try {
+            return URLDecoder.decode(s, enc);
+        } catch (UnsupportedEncodingException e) {
+            Main.error(e);
+            return null;
+        }
+    }
+
+    /**
      * Determines if the given URL denotes a file on a local filesystem.
      * @param url The URL to test
      * @return {@code true} if the url points to a local file
@@ -1163,4 +1212,18 @@ public final class Utils {
         }
         return null;
     }
+
+    /**
+     * Returns a new secure SAX parser, supporting XML namespaces.
+     * @return a new secure SAX parser, supporting XML namespaces
+     * @throws ParserConfigurationException if a parser cannot be created which satisfies the requested configuration.
+     * @throws SAXException for SAX errors.
+     * @since 8287
+     */
+    public static SAXParser newSafeSAXParser() throws ParserConfigurationException, SAXException {
+        SAXParserFactory parserFactory = SAXParserFactory.newInstance();
+        parserFactory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true);
+        parserFactory.setNamespaceAware(true);
+        return parserFactory.newSAXParser();
+    }
 }
diff --git a/src/org/openstreetmap/josm/tools/WindowGeometry.java b/src/org/openstreetmap/josm/tools/WindowGeometry.java
index bca3b6d..b0eb121 100644
--- a/src/org/openstreetmap/josm/tools/WindowGeometry.java
+++ b/src/org/openstreetmap/josm/tools/WindowGeometry.java
@@ -221,7 +221,7 @@ public class WindowGeometry {
      * key <code>preferenceKey</code>
      *
      * @param preferenceKey the preference key
-     * @throws WindowGeometryException thrown if no such key exist or if the preference value has
+     * @throws WindowGeometryException if no such key exist or if the preference value has
      * an illegal format
      */
     public WindowGeometry(String preferenceKey) throws WindowGeometryException {
diff --git a/src/org/openstreetmap/josm/tools/XmlObjectParser.java b/src/org/openstreetmap/josm/tools/XmlObjectParser.java
index 83e1720..78712fc 100644
--- a/src/org/openstreetmap/josm/tools/XmlObjectParser.java
+++ b/src/org/openstreetmap/josm/tools/XmlObjectParser.java
@@ -19,8 +19,6 @@ import java.util.Stack;
 
 import javax.xml.XMLConstants;
 import javax.xml.parsers.ParserConfigurationException;
-import javax.xml.parsers.SAXParser;
-import javax.xml.parsers.SAXParserFactory;
 import javax.xml.transform.stream.StreamSource;
 import javax.xml.validation.Schema;
 import javax.xml.validation.SchemaFactory;
@@ -67,8 +65,8 @@ public class XmlObjectParser implements Iterable<Object> {
     }
 
     private class Parser extends DefaultHandler {
-        Stack<Object> current = new Stack<>();
-        StringBuilder characters = new StringBuilder(64);
+        private Stack<Object> current = new Stack<>();
+        private StringBuilder characters = new StringBuilder(64);
 
         private Locator locator;
 
@@ -184,9 +182,9 @@ public class XmlObjectParser implements Iterable<Object> {
     }
 
     private static class Entry {
-        Class<?> klass;
-        boolean onStart;
-        boolean both;
+        private Class<?> klass;
+        private boolean onStart;
+        private boolean both;
         private final Map<String, Field> fields = new HashMap<>();
         private final Map<String, Method> methods = new HashMap<>();
 
@@ -249,10 +247,7 @@ public class XmlObjectParser implements Iterable<Object> {
 
     private Iterable<Object> start(final Reader in, final ContentHandler contentHandler) throws SAXException, IOException {
         try {
-            SAXParserFactory parserFactory = SAXParserFactory.newInstance();
-            parserFactory.setNamespaceAware(true);
-            SAXParser saxParser = parserFactory.newSAXParser();
-            XMLReader reader = saxParser.getXMLReader();
+            XMLReader reader = Utils.newSafeSAXParser().getXMLReader();
             reader.setContentHandler(contentHandler);
             try {
                 // Do not load external DTDs (fix #8191)
diff --git a/src/org/openstreetmap/josm/tools/date/DateUtils.java b/src/org/openstreetmap/josm/tools/date/DateUtils.java
index 6ac540e..d3a4352 100644
--- a/src/org/openstreetmap/josm/tools/date/DateUtils.java
+++ b/src/org/openstreetmap/josm/tools/date/DateUtils.java
@@ -68,6 +68,7 @@ public final class DateUtils {
         // "2007-07-25T09:26:24{Z|{+|-}01:00}"
         if (checkLayout(str, "xxxx-xx-xxTxx:xx:xxZ") ||
                 checkLayout(str, "xxxx-xx-xxTxx:xx:xx") ||
+                checkLayout(str, "xxxx-xx-xx xx:xx:xx UTC") ||
                 checkLayout(str, "xxxx-xx-xxTxx:xx:xx+xx:00") ||
                 checkLayout(str, "xxxx-xx-xxTxx:xx:xx-xx:00")) {
             calendar.set(
diff --git a/src/org/openstreetmap/josm/tools/template_engine/ContextSwitchTemplate.java b/src/org/openstreetmap/josm/tools/template_engine/ContextSwitchTemplate.java
index 9c85606..297bfd8 100644
--- a/src/org/openstreetmap/josm/tools/template_engine/ContextSwitchTemplate.java
+++ b/src/org/openstreetmap/josm/tools/template_engine/ContextSwitchTemplate.java
@@ -40,7 +40,7 @@ public class ContextSwitchTemplate implements TemplateEntry {
     };
 
     private abstract class ContextProvider extends Match {
-        Match condition;
+        protected Match condition;
         abstract List<OsmPrimitive> getPrimitives(OsmPrimitive root);
     }
 
diff --git a/src/org/openstreetmap/josm/tools/template_engine/ParseError.java b/src/org/openstreetmap/josm/tools/template_engine/ParseError.java
index 83b0891..bb5036e 100644
--- a/src/org/openstreetmap/josm/tools/template_engine/ParseError.java
+++ b/src/org/openstreetmap/josm/tools/template_engine/ParseError.java
@@ -8,7 +8,7 @@ import org.openstreetmap.josm.tools.template_engine.Tokenizer.TokenType;
 
 public class ParseError extends Exception {
 
-    private final Token unexpectedToken;
+    private final transient Token unexpectedToken;
 
     public ParseError(Token unexpectedToken) {
         super(tr("Unexpected token ({0}) on position {1}", unexpectedToken.getType(), unexpectedToken.getPosition()));
diff --git a/styles/standard/elemstyles.mapcss b/styles/standard/elemstyles.mapcss
index b279008..44b46b5 100644
--- a/styles/standard/elemstyles.mapcss
+++ b/styles/standard/elemstyles.mapcss
@@ -1253,6 +1253,7 @@ area[bridge:support],
 area[man_made=chimney],
 area[man_made=crane],
 area[man_made=gasometer],
+area[man_made=storage_tank],
 area[man_made=bunker_silo],
 area[man_made=lighthouse],
 area[man_made=monitoring_station],
@@ -1295,6 +1296,12 @@ node[man_made=gasometer] {
     set icon_z17;
     text: auto;
 }
+node[man_made=storage_tank] {
+    icon-image: "presets/storage_tank.png";
+    icon-width: 16;
+    set icon_z17;
+    text: auto;
+}
 node[man_made=bunker_silo] {
     icon-image: "bunker_silo.svg";
     set icon_z17;
@@ -2319,7 +2326,6 @@ node[amenity=clock] {
     set icon_z17;
     text: auto;
 }
-area[emergency=aed],
 area[amenity=toilets],
 area[amenity=shower],
 area[amenity=recycling],
@@ -2331,11 +2337,6 @@ node[emergency=phone] {
     set icon_z17;
     text: auto;
 }
-node[emergency=aed] {
-    icon-image: "presets/aed.svg";
-    set icon_z17;
-    text: auto;
-}
 node[emergency=defibrillator] {
     icon-image: "presets/aed.svg";
     set icon_z17;
diff --git a/test/unit/org/openstreetmap/josm/actions/CreateCircleActionTest.java b/test/unit/org/openstreetmap/josm/actions/CreateCircleActionTest.java
new file mode 100644
index 0000000..82aff1c
--- /dev/null
+++ b/test/unit/org/openstreetmap/josm/actions/CreateCircleActionTest.java
@@ -0,0 +1,185 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.actions;
+
+import static org.junit.Assert.assertTrue;
+
+import java.awt.geom.Area;
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.openstreetmap.josm.JOSMFixture;
+import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.data.coor.EastNorth;
+import org.openstreetmap.josm.data.coor.LatLon;
+import org.openstreetmap.josm.data.osm.BBox;
+import org.openstreetmap.josm.data.osm.DataSet;
+import org.openstreetmap.josm.data.osm.Node;
+import org.openstreetmap.josm.data.osm.OsmPrimitive;
+import org.openstreetmap.josm.data.osm.Way;
+import org.openstreetmap.josm.gui.layer.OsmDataLayer;
+import org.openstreetmap.josm.tools.GeoPropertyIndex;
+import org.openstreetmap.josm.tools.GeoPropertyIndex.GeoProperty;
+import org.openstreetmap.josm.tools.Geometry;
+import org.openstreetmap.josm.tools.RightAndLefthandTraffic;
+
+/**
+ * Unit tests for class CreateCircleAction.
+ */
+public final class CreateCircleActionTest {
+
+    /**
+     * Setup test.
+     */
+    @BeforeClass
+    public static void setUp() {
+        JOSMFixture.createUnitTestFixture().init(true);
+    }
+
+    /**
+     * FIXME: Conveniance method to prevent Selection Change events.
+     * A more proper way should be to define a TestingDataSet class with limited
+     * functionalities, but DataSet is declare as final (due to Cloneable interface).
+     *
+     * I don't know why, but in other tests there are no problem to add selected primitives
+     * but in this case there is a problem with an even listener of selection change.
+     */
+    public void addSelected(OsmPrimitive p, DataSet ds) {
+        try {
+            Method method = ds.getClass()
+                .getDeclaredMethod("addSelected",
+                                   new Class<?>[] {Collection.class, boolean.class});
+            method.setAccessible(true);
+            method.invoke(ds, Collections.singleton(p), false);
+        } catch (Exception e) {
+            e.printStackTrace();
+            assertTrue("Can't add OsmPrimitive to dataset", false);
+        }
+    }
+
+    /**
+     * Test case: When Create Circle action is performed with a single way selected,
+     * circle direction must equals way direction.
+     * see #7421
+     */
+    @Test
+    public void test7421_0() {
+        DataSet dataSet = new DataSet();
+        OsmDataLayer layer = new OsmDataLayer(dataSet, OsmDataLayer.createNewName(), null);
+
+        Node n1 = new Node(new EastNorth(0, 0));
+        Node n2 = new Node(new EastNorth(-1, 1));
+        Node n3 = new Node(new EastNorth(1, 1));
+        dataSet.addPrimitive(n1);
+        dataSet.addPrimitive(n2);
+        dataSet.addPrimitive(n3);
+
+        Way w = new Way(); // Way is Clockwize
+        w.setNodes(Arrays.asList(new Node[] {n1, n2, n3}));
+        dataSet.addPrimitive(w);
+
+        addSelected(w, dataSet);
+
+        CreateCircleAction action = new CreateCircleAction();
+        action.setEnabled(true);
+        try {
+            Main.main.addLayer(layer);
+            action.actionPerformed(null);
+        } finally {
+            // Ensure we clean the place before leaving, even if test fails.
+            Main.map.mapView.removeLayer(layer);
+        }
+
+        // Expected result: Dataset contain one closed way, clockwise
+        Collection<Way> resultingWays = dataSet.getWays();
+        assertTrue(String.format("Expect one way after perform action. %d found",
+                                 resultingWays.size()),
+                   resultingWays.size() == 1);
+        Way resultingWay = resultingWays.iterator().next();
+        assertTrue("Resulting way is not closed",
+                   resultingWay.isClosed());
+        assertTrue("Found anti-clockwize circle while way was clockwize",
+                   Geometry.isClockwise(resultingWay));
+    }
+
+    /**
+     * Mock left/right hand traffic database with constant traffic hand
+     */
+    private static class ConstantTrafficHand implements GeoProperty<Boolean> {
+        boolean isLeft;
+        ConstantTrafficHand(boolean isLeft) {
+            this.isLeft = isLeft;
+        }
+        @Override
+        public Boolean get(LatLon ll) {
+            return isLeft;
+        }
+        @Override
+        public Boolean get(BBox box) {
+            return isLeft;
+        }
+    }
+
+    /**
+     * Test case: When Create Circle action is performed with nodes, resulting
+     * circle direction depend on traffic hand. Simulate a left hand traffic.
+     * see #7421
+     */
+    @Test
+    public void test7421_1() {
+        DataSet dataSet = new DataSet();
+        OsmDataLayer layer = new OsmDataLayer(dataSet, OsmDataLayer.createNewName(), null);
+
+        Node n1 = new Node(new EastNorth(0, 0));
+        Node n2 = new Node(new EastNorth(-1, 1));
+        Node n3 = new Node(new EastNorth(1, 1));
+        dataSet.addPrimitive(n1);
+        dataSet.addPrimitive(n2);
+        dataSet.addPrimitive(n3);
+
+        addSelected(n1, dataSet);
+        addSelected(n2, dataSet);
+        addSelected(n3, dataSet);
+
+        // Mock left/right hand traffic database
+        try {
+            Field leftHandTrafficPolygons = RightAndLefthandTraffic.class
+                .getDeclaredField("leftHandTrafficPolygons");
+            leftHandTrafficPolygons.setAccessible(true);
+            leftHandTrafficPolygons.set(null, new ArrayList<Area>());
+            Field rlCache = RightAndLefthandTraffic.class.getDeclaredField("rlCache");
+            rlCache.setAccessible(true);
+            ConstantTrafficHand trafficHand = new ConstantTrafficHand(true);
+            rlCache.set(null, new GeoPropertyIndex<Boolean>(trafficHand, 24));
+        } catch (Exception e) {
+            e.printStackTrace();
+            assertTrue("Impossible to mock left/right hand database", false);
+        }
+
+        CreateCircleAction action = new CreateCircleAction();
+        action.setEnabled(true);
+        try {
+            Main.main.addLayer(layer);
+            action.actionPerformed(null);
+        } finally {
+            // Ensure we clean the place before leaving, even if test fails.
+            Main.map.mapView.removeLayer(layer);
+        }
+
+        // Expected result: Dataset contain one closed way, clockwise
+        Collection<Way> resultingWays = dataSet.getWays();
+        assertTrue(String.format("Expect one way after perform action. %d found",
+                                 resultingWays.size()),
+                   resultingWays.size() == 1);
+        Way resultingWay = resultingWays.iterator().next();
+        assertTrue("Resulting way is not closed",
+                   resultingWay.isClosed());
+        assertTrue("Found anti-clockwise way while traffic is left hand.",
+                   Geometry.isClockwise(resultingWay));
+    }
+}
diff --git a/test/unit/org/openstreetmap/josm/actions/UnJoinNodeWayActionTest.java b/test/unit/org/openstreetmap/josm/actions/UnJoinNodeWayActionTest.java
new file mode 100644
index 0000000..36edaec
--- /dev/null
+++ b/test/unit/org/openstreetmap/josm/actions/UnJoinNodeWayActionTest.java
@@ -0,0 +1,87 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.actions;
+
+import static org.junit.Assert.assertTrue;
+
+import java.util.Arrays;
+
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.openstreetmap.josm.JOSMFixture;
+import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.data.coor.EastNorth;
+import org.openstreetmap.josm.data.osm.DataSet;
+import org.openstreetmap.josm.data.osm.Node;
+import org.openstreetmap.josm.data.osm.Way;
+import org.openstreetmap.josm.gui.layer.OsmDataLayer;
+
+/**
+ * Unit tests for class UnJoinNodeWayAction.
+ */
+public final class UnJoinNodeWayActionTest {
+
+    /**
+     * Prepare the class for the test. The notification system must be disabled.
+     */
+    public class UnJoinNodeWayActionTestClass extends UnJoinNodeWayAction {
+
+        /**
+         * Disable notification.
+         */
+        @Override
+        public void notify(String msg, int messageType) {
+            return;
+        };
+    }
+
+    /**
+     * Setup test.
+     */
+    @BeforeClass
+    public static void setUp() {
+        JOSMFixture.createUnitTestFixture().init(true);
+    }
+
+    /**
+     * Test case: Ignore irrelevant nodes
+     * We create a three node way, then try to remove central node while another
+     * node outside is selected.
+     * see #10396
+     */
+    @Test
+    public void test10396() {
+        DataSet dataSet = new DataSet();
+        OsmDataLayer layer = new OsmDataLayer(dataSet, OsmDataLayer.createNewName(), null);
+
+        Node n1 = new Node(new EastNorth(-1, -1));
+        Node n2 = new Node(new EastNorth(0, 0));
+        Node n3 = new Node(new EastNorth(1, -1));
+        Node n4 = new Node(new EastNorth(0, 1));
+        dataSet.addPrimitive(n1);
+        dataSet.addPrimitive(n2);
+        dataSet.addPrimitive(n3);
+        dataSet.addPrimitive(n4);
+
+        Way w = new Way();
+        w.setNodes(Arrays.asList(new Node[] {n1, n2, n3}));
+        dataSet.addPrimitive(w);
+
+        dataSet.addSelected(n2);
+        dataSet.addSelected(n4);
+        dataSet.addSelected(w);
+
+        UnJoinNodeWayActionTestClass action = new UnJoinNodeWayActionTestClass();
+        action.setEnabled(true);
+        try {
+            Main.main.addLayer(layer);
+            action.actionPerformed(null);
+        } finally {
+            // Ensure we clean the place before leaving, even if test fails.
+            Main.map.mapView.removeLayer(layer);
+        }
+
+        // Ensures node n2 remove from w
+        assertTrue("Node n2 wasn't removed from way w.",
+                   !w.containsNode(n2));
+    }
+}
diff --git a/test/unit/org/openstreetmap/josm/data/validation/tests/MapCSSTagCheckerTest.java b/test/unit/org/openstreetmap/josm/data/validation/tests/MapCSSTagCheckerTest.java
index 1bf3f35..b1cb54a 100644
--- a/test/unit/org/openstreetmap/josm/data/validation/tests/MapCSSTagCheckerTest.java
+++ b/test/unit/org/openstreetmap/josm/data/validation/tests/MapCSSTagCheckerTest.java
@@ -117,6 +117,15 @@ public class MapCSSTagCheckerTest {
     }
 
     @Test
+    public void testPreprocessing() throws Exception {
+        final MapCSSTagChecker test = buildTagChecker("" +
+                "@media (min-josm-version: 1) { *[foo] { throwWarning: \"!\"; } }\n" +
+                "@media (min-josm-version: 2147483647) { *[bar] { throwWarning: \"!\"; } }\n");
+        assertThat(test.getErrorsForPrimitive(OsmUtils.createPrimitive("way foo=1"), false).size(), is(1));
+        assertThat(test.getErrorsForPrimitive(OsmUtils.createPrimitive("way bar=1"), false).size(), is(0));
+    }
+
+    @Test
     public void testInit() throws Exception {
         MapCSSTagChecker c = new MapCSSTagChecker();
         c.initialize();
diff --git a/test/unit/org/openstreetmap/josm/io/session/SessionWriterTest.java b/test/unit/org/openstreetmap/josm/io/session/SessionWriterTest.java
index 5f48734..efb8180 100644
--- a/test/unit/org/openstreetmap/josm/io/session/SessionWriterTest.java
+++ b/test/unit/org/openstreetmap/josm/io/session/SessionWriterTest.java
@@ -182,6 +182,6 @@ public class SessionWriterTest {
     @Test
     public void testWriteGpxAndMarkerJoz() throws IOException {
         GpxLayer gpx = createGpxLayer();
-        testWrite(Pair.toArrayList(new Pair<Layer, Layer>(gpx, createMarkerLayer(gpx))), true);
+        testWrite(Pair.toList(new Pair<Layer, Layer>(gpx, createMarkerLayer(gpx))), true);
     }
 }
diff --git a/test/unit/org/openstreetmap/josm/tools/date/DateUtilsTest.java b/test/unit/org/openstreetmap/josm/tools/date/DateUtilsTest.java
new file mode 100644
index 0000000..1daccec
--- /dev/null
+++ b/test/unit/org/openstreetmap/josm/tools/date/DateUtilsTest.java
@@ -0,0 +1,20 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.tools.date;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.*;
+
+import org.junit.Test;
+
+public class DateUtilsTest {
+    @Test
+    public void testMapDate() throws Exception {
+        assertThat(DateUtils.fromString("2012-08-13T15:10:37Z").getTime(), is(1344870637000L));
+
+    }
+
+    @Test
+    public void testNoteDate() throws Exception {
+        assertThat(DateUtils.fromString("2014-11-29 22:08:50 UTC").getTime(), is(1417298930000L));
+    }
+}
\ No newline at end of file

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