Index: trunk/src/org/openstreetmap/josm/Main.java
===================================================================
--- trunk/src/org/openstreetmap/josm/Main.java	(revision 13171)
+++ trunk/src/org/openstreetmap/josm/Main.java	(revision 13173)
@@ -9,5 +9,4 @@
 import java.lang.ref.WeakReference;
 import java.net.URL;
-import java.text.MessageFormat;
 import java.util.ArrayList;
 import java.util.Collection;
@@ -26,7 +25,4 @@
 import java.util.concurrent.Future;
 
-import javax.swing.Action;
-
-import org.openstreetmap.josm.actions.JosmAction;
 import org.openstreetmap.josm.data.Bounds;
 import org.openstreetmap.josm.data.Preferences;
@@ -41,10 +37,4 @@
 import org.openstreetmap.josm.data.projection.ProjectionChangeListener;
 import org.openstreetmap.josm.gui.MainApplication;
-import org.openstreetmap.josm.gui.MainMenu;
-import org.openstreetmap.josm.gui.MainPanel;
-import org.openstreetmap.josm.gui.MapFrame;
-import org.openstreetmap.josm.gui.MapFrameListener;
-import org.openstreetmap.josm.gui.layer.MainLayerManager;
-import org.openstreetmap.josm.gui.preferences.ToolbarPreferences;
 import org.openstreetmap.josm.io.FileWatcher;
 import org.openstreetmap.josm.io.OnlineResource;
@@ -59,5 +49,4 @@
 import org.openstreetmap.josm.tools.PlatformHookOsx;
 import org.openstreetmap.josm.tools.PlatformHookWindows;
-import org.openstreetmap.josm.tools.Shortcut;
 import org.openstreetmap.josm.tools.Utils;
 import org.openstreetmap.josm.tools.bugreport.BugReport;
@@ -82,18 +71,4 @@
 
     /**
-     * Replies true if JOSM currently displays a map view. False, if it doesn't, i.e. if
-     * it only shows the MOTD panel.
-     * <p>
-     * You do not need this when accessing the layer manager. The layer manager will be empty if no map view is shown.
-     *
-     * @return <code>true</code> if JOSM currently displays a map view
-     * @deprecated use {@link org.openstreetmap.josm.gui.MainApplication#isDisplayingMapView()}
-     */
-    @Deprecated
-    public static boolean isDisplayingMapView() {
-        return MainApplication.isDisplayingMapView();
-    }
-
-    /**
      * Global parent component for all dialogs and message boxes
      */
@@ -119,22 +94,4 @@
 
     /**
-     * The MapFrame.
-     * <p>
-     * There should be no need to access this to access any map data. Use {@link MainApplication#getLayerManager} instead.
-     *
-     * @deprecated Use {@link MainApplication#getMap()} instead
-     * @see MainPanel
-     */
-    @Deprecated
-    public static MapFrame map;
-
-    /**
-     * The toolbar preference control to register new actions.
-     * @deprecated Use {@link MainApplication#getToolbar} instead
-     */
-    @Deprecated
-    public static volatile ToolbarPreferences toolbar;
-
-    /**
      * The commands undo/redo handler.
      */
@@ -142,19 +99,4 @@
 
     /**
-     * The main menu bar at top of screen.
-     * @deprecated Use {@link MainApplication#getMenu} instead
-     */
-    @Deprecated
-    public MainMenu menu;
-
-    /**
-     * The main panel.
-     * @deprecated Use {@link MainApplication#getMainPanel} instead
-     * @since 12125
-     */
-    @Deprecated
-    public MainPanel panel;
-
-    /**
      * The file watcher service.
      */
@@ -164,287 +106,4 @@
 
     private static final Set<OnlineResource> OFFLINE_RESOURCES = EnumSet.noneOf(OnlineResource.class);
-
-    /**
-     * Logging level (5 = trace, 4 = debug, 3 = info, 2 = warn, 1 = error, 0 = none).
-     * @since 6248
-     * @deprecated Use {@link Logging} class.
-     */
-    @Deprecated
-    public static int logLevel = 3;
-
-    /**
-     * Replies the first lines of last 5 error and warning messages, used for bug reports
-     * @return the first lines of last 5 error and warning messages
-     * @since 7420
-     * @deprecated Use {@link Logging#getLastErrorAndWarnings}.
-     */
-    @Deprecated
-    public static final Collection<String> getLastErrorAndWarnings() {
-        return Logging.getLastErrorAndWarnings();
-    }
-
-    /**
-     * Clears the list of last error and warning messages.
-     * @since 8959
-     * @deprecated Use {@link Logging#clearLastErrorAndWarnings}.
-     */
-    @Deprecated
-    public static void clearLastErrorAndWarnings() {
-        Logging.clearLastErrorAndWarnings();
-    }
-
-    /**
-     * Prints an error message if logging is on.
-     * @param msg The message to print.
-     * @since 6248
-     * @deprecated Use {@link Logging#error(String)}.
-     */
-    @Deprecated
-    public static void error(String msg) {
-        Logging.error(msg);
-    }
-
-    /**
-     * Prints a warning message if logging is on.
-     * @param msg The message to print.
-     * @deprecated Use {@link Logging#warn(String)}.
-     */
-    @Deprecated
-    public static void warn(String msg) {
-        Logging.warn(msg);
-    }
-
-    /**
-     * Prints an informational message if logging is on.
-     * @param msg The message to print.
-     * @deprecated Use {@link Logging#info(String)}.
-     */
-    @Deprecated
-    public static void info(String msg) {
-        Logging.info(msg);
-    }
-
-    /**
-     * Prints a debug message if logging is on.
-     * @param msg The message to print.
-     * @deprecated Use {@link Logging#debug(String)}.
-     */
-    @Deprecated
-    public static void debug(String msg) {
-        Logging.debug(msg);
-    }
-
-    /**
-     * Prints a trace message if logging is on.
-     * @param msg The message to print.
-     * @deprecated Use {@link Logging#trace(String)}.
-     */
-    @Deprecated
-    public static void trace(String msg) {
-        Logging.trace(msg);
-    }
-
-    /**
-     * Determines if debug log level is enabled.
-     * Useful to avoid costly construction of debug messages when not enabled.
-     * @return {@code true} if log level is at least debug, {@code false} otherwise
-     * @since 6852
-     * @deprecated Use {@link Logging#isDebugEnabled}.
-     */
-    @Deprecated
-    public static boolean isDebugEnabled() {
-        return Logging.isDebugEnabled();
-    }
-
-    /**
-     * Determines if trace log level is enabled.
-     * Useful to avoid costly construction of trace messages when not enabled.
-     * @return {@code true} if log level is at least trace, {@code false} otherwise
-     * @since 6852
-     * @deprecated Use {@link Logging#isTraceEnabled}.
-     */
-    @Deprecated
-    public static boolean isTraceEnabled() {
-        return Logging.isTraceEnabled();
-    }
-
-    /**
-     * Prints a formatted error message if logging is on. Calls {@link MessageFormat#format}
-     * function to format text.
-     * @param msg The formatted message to print.
-     * @param objects The objects to insert into format string.
-     * @since 6248
-     * @deprecated Use {@link Logging#error(String, Object...)}.
-     */
-    @Deprecated
-    public static void error(String msg, Object... objects) {
-        Logging.error(msg, objects);
-    }
-
-    /**
-     * Prints a formatted warning message if logging is on. Calls {@link MessageFormat#format}
-     * function to format text.
-     * @param msg The formatted message to print.
-     * @param objects The objects to insert into format string.
-     * @deprecated Use {@link Logging#warn(String, Object...)}.
-     */
-    @Deprecated
-    public static void warn(String msg, Object... objects) {
-        Logging.warn(msg, objects);
-    }
-
-    /**
-     * Prints a formatted informational message if logging is on. Calls {@link MessageFormat#format}
-     * function to format text.
-     * @param msg The formatted message to print.
-     * @param objects The objects to insert into format string.
-     * @deprecated Use {@link Logging#info(String, Object...)}.
-     */
-    @Deprecated
-    public static void info(String msg, Object... objects) {
-        Logging.info(msg, objects);
-    }
-
-    /**
-     * Prints a formatted debug message if logging is on. Calls {@link MessageFormat#format}
-     * function to format text.
-     * @param msg The formatted message to print.
-     * @param objects The objects to insert into format string.
-     * @deprecated Use {@link Logging#debug(String, Object...)}.
-     */
-    @Deprecated
-    public static void debug(String msg, Object... objects) {
-        Logging.debug(msg, objects);
-    }
-
-    /**
-     * Prints a formatted trace message if logging is on. Calls {@link MessageFormat#format}
-     * function to format text.
-     * @param msg The formatted message to print.
-     * @param objects The objects to insert into format string.
-     * @deprecated Use {@link Logging#trace(String, Object...)}.
-     */
-    @Deprecated
-    public static void trace(String msg, Object... objects) {
-        Logging.trace(msg, objects);
-    }
-
-    /**
-     * Prints an error message for the given Throwable.
-     * @param t The throwable object causing the error
-     * @since 6248
-     * @deprecated Use {@link Logging#error(Throwable)}.
-     */
-    @Deprecated
-    public static void error(Throwable t) {
-        Logging.error(t);
-    }
-
-    /**
-     * Prints a warning message for the given Throwable.
-     * @param t The throwable object causing the error
-     * @since 6248
-     * @deprecated Use {@link Logging#warn(Throwable)}.
-     */
-    @Deprecated
-    public static void warn(Throwable t) {
-        Logging.warn(t);
-    }
-
-    /**
-     * Prints a debug message for the given Throwable. Useful for exceptions usually ignored
-     * @param t The throwable object causing the error
-     * @since 10420
-     * @deprecated Use {@link Logging#debug(Throwable)}.
-     */
-    @Deprecated
-    public static void debug(Throwable t) {
-        Logging.debug(t);
-    }
-
-    /**
-     * Prints a trace message for the given Throwable. Useful for exceptions usually ignored
-     * @param t The throwable object causing the error
-     * @since 10420
-     * @deprecated Use {@link Logging#trace(Throwable)}.
-     */
-    @Deprecated
-    public static void trace(Throwable t) {
-        Logging.trace(t);
-    }
-
-    /**
-     * Prints an error message for the given Throwable.
-     * @param t The throwable object causing the error
-     * @param stackTrace {@code true}, if the stacktrace should be displayed
-     * @since 6642
-     * @deprecated Use {@link Logging#log(java.util.logging.Level, Throwable)}
-     *              or {@link Logging#logWithStackTrace(java.util.logging.Level, Throwable)}.
-     */
-    @Deprecated
-    public static void error(Throwable t, boolean stackTrace) {
-        if (stackTrace) {
-            Logging.log(Logging.LEVEL_ERROR, t);
-        } else {
-            Logging.logWithStackTrace(Logging.LEVEL_ERROR, t);
-        }
-    }
-
-    /**
-     * Prints an error message for the given Throwable.
-     * @param t The throwable object causing the error
-     * @param message additional error message
-     * @since 10420
-     * @deprecated Use {@link Logging#log(java.util.logging.Level, String, Throwable)}.
-     */
-    @Deprecated
-    public static void error(Throwable t, String message) {
-        Logging.log(Logging.LEVEL_ERROR, message, t);
-    }
-
-    /**
-     * Prints a warning message for the given Throwable.
-     * @param t The throwable object causing the error
-     * @param stackTrace {@code true}, if the stacktrace should be displayed
-     * @since 6642
-     * @deprecated Use {@link Logging#log(java.util.logging.Level, Throwable)}
-     *              or {@link Logging#logWithStackTrace(java.util.logging.Level, Throwable)}.
-     */
-    @Deprecated
-    public static void warn(Throwable t, boolean stackTrace) {
-        if (stackTrace) {
-            Logging.log(Logging.LEVEL_WARN, t);
-        } else {
-            Logging.logWithStackTrace(Logging.LEVEL_WARN, t);
-        }
-    }
-
-    /**
-     * Prints a warning message for the given Throwable.
-     * @param t The throwable object causing the error
-     * @param message additional error message
-     * @since 10420
-     * @deprecated Use {@link Logging#log(java.util.logging.Level, String, Throwable)}.
-     */
-    @Deprecated
-    public static void warn(Throwable t, String message) {
-        Logging.log(Logging.LEVEL_WARN, message, t);
-    }
-
-    /**
-     * Returns a human-readable message of error, also usable for developers.
-     * @param t The error
-     * @return The human-readable error message
-     * @since 6642
-     * @deprecated Use {@link Logging#getErrorMessage}.
-     */
-    @Deprecated
-    public static String getErrorMessage(Throwable t) {
-        if (t == null) {
-            return null;
-        } else {
-            return Logging.getErrorMessage(t);
-        }
-    }
 
     /**
@@ -611,15 +270,4 @@
 
     /**
-     * Returns the main layer manager that is used by the map view.
-     * @return The layer manager. The value returned will never change.
-     * @since 10279
-     * @deprecated use {@link MainApplication#getLayerManager} instead
-     */
-    @Deprecated
-    public static MainLayerManager getLayerManager() {
-        return MainApplication.getLayerManager();
-    }
-
-    /**
      * Replies the current selected primitives, from a end-user point of view.
      * It is not always technically the same collection of primitives than {@link DataSet#getSelected()}.
@@ -652,68 +300,4 @@
      */
     public abstract boolean containsDataSet(DataSet ds);
-
-    /**
-     * Registers a {@code JosmAction} and its shortcut.
-     * @param action action defining its own shortcut
-     * @deprecated use {@link MainApplication#registerActionShortcut(JosmAction)} instead
-     */
-    @Deprecated
-    public static void registerActionShortcut(JosmAction action) {
-        MainApplication.registerActionShortcut(action);
-    }
-
-    /**
-     * Registers an action and its shortcut.
-     * @param action action to register
-     * @param shortcut shortcut to associate to {@code action}
-     * @deprecated use {@link MainApplication#registerActionShortcut(Action, Shortcut)} instead
-     */
-    @Deprecated
-    public static void registerActionShortcut(Action action, Shortcut shortcut) {
-        MainApplication.registerActionShortcut(action, shortcut);
-    }
-
-    /**
-     * Unregisters a shortcut.
-     * @param shortcut shortcut to unregister
-     * @deprecated use {@link MainApplication#unregisterShortcut(Shortcut)} instead
-     */
-    @Deprecated
-    public static void unregisterShortcut(Shortcut shortcut) {
-        MainApplication.unregisterShortcut(shortcut);
-    }
-
-    /**
-     * Unregisters a {@code JosmAction} and its shortcut.
-     * @param action action to unregister
-     * @deprecated use {@link MainApplication#unregisterActionShortcut(JosmAction)} instead
-     */
-    @Deprecated
-    public static void unregisterActionShortcut(JosmAction action) {
-        MainApplication.unregisterActionShortcut(action);
-    }
-
-    /**
-     * Unregisters an action and its shortcut.
-     * @param action action to unregister
-     * @param shortcut shortcut to unregister
-     * @deprecated use {@link MainApplication#unregisterActionShortcut(Action, Shortcut)} instead
-     */
-    @Deprecated
-    public static void unregisterActionShortcut(Action action, Shortcut shortcut) {
-        MainApplication.unregisterActionShortcut(action, shortcut);
-    }
-
-    /**
-     * Replies the registered action for the given shortcut
-     * @param shortcut The shortcut to look for
-     * @return the registered action for the given shortcut
-     * @deprecated use {@link MainApplication#getRegisteredActionShortcut(Shortcut)} instead
-     * @since 5696
-     */
-    @Deprecated
-    public static Action getRegisteredActionShortcut(Shortcut shortcut) {
-        return MainApplication.getRegisteredActionShortcut(shortcut);
-    }
 
     ///////////////////////////////////////////////////////////////////////////
@@ -910,45 +494,4 @@
 
     /**
-     * Registers a new {@code MapFrameListener} that will be notified of MapFrame changes.
-     * <p>
-     * It will fire an initial mapFrameInitialized event when the MapFrame is present.
-     * Otherwise will only fire when the MapFrame is created or destroyed.
-     * @param listener The MapFrameListener
-     * @return {@code true} if the listeners collection changed as a result of the call
-     * @see #addMapFrameListener
-     * @deprecated use {@link MainApplication#addAndFireMapFrameListener} instead
-     * @since 11904
-     */
-    @Deprecated
-    public static boolean addAndFireMapFrameListener(MapFrameListener listener) {
-        return MainApplication.addAndFireMapFrameListener(listener);
-    }
-
-    /**
-     * Registers a new {@code MapFrameListener} that will be notified of MapFrame changes
-     * @param listener The MapFrameListener
-     * @return {@code true} if the listeners collection changed as a result of the call
-     * @see #addAndFireMapFrameListener
-     * @deprecated use {@link MainApplication#addMapFrameListener} instead
-     * @since 5957
-     */
-    @Deprecated
-    public static boolean addMapFrameListener(MapFrameListener listener) {
-        return MainApplication.addMapFrameListener(listener);
-    }
-
-    /**
-     * Unregisters the given {@code MapFrameListener} from MapFrame changes
-     * @param listener The MapFrameListener
-     * @return {@code true} if the listeners collection changed as a result of the call
-     * @deprecated use {@link MainApplication#removeMapFrameListener} instead
-     * @since 5957
-     */
-    @Deprecated
-    public static boolean removeMapFrameListener(MapFrameListener listener) {
-        return MainApplication.removeMapFrameListener(listener);
-    }
-
-    /**
      * Adds a new network error that occur to give a hint about broken Internet connection.
      * Do not use this method for errors known for sure thrown because of a bad proxy configuration.
Index: trunk/src/org/openstreetmap/josm/actions/JoinAreasAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/JoinAreasAction.java	(revision 13171)
+++ trunk/src/org/openstreetmap/josm/actions/JoinAreasAction.java	(revision 13173)
@@ -1010,5 +1010,5 @@
     /**
      * This is a method that splits way into smaller parts, using the prepared nodes list as split points.
-     * Uses {@link SplitWayAction#splitWay} for the heavy lifting.
+     * Uses {@link SplitWayCommand#splitWay} for the heavy lifting.
      * @param way way to split
      * @param nodes split points
Index: trunk/src/org/openstreetmap/josm/actions/MergeNodesAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/MergeNodesAction.java	(revision 13171)
+++ trunk/src/org/openstreetmap/josm/actions/MergeNodesAction.java	(revision 13173)
@@ -285,19 +285,4 @@
      * Merges the nodes in {@code nodes} at the specified node's location.
      *
-     * @param layer unused
-     * @param nodes the collection of nodes. Ignored if null.
-     * @param targetLocationNode this node's location will be used for the targetNode.
-     * @return The command necessary to run in order to perform action, or {@code null} if there is nothing to do
-     * @throws IllegalArgumentException if {@code layer} is null
-     * @deprecated use {@link #mergeNodes(Collection, Node)} instead
-     */
-    @Deprecated
-    public static Command mergeNodes(OsmDataLayer layer, Collection<Node> nodes, Node targetLocationNode) {
-        return mergeNodes(nodes, targetLocationNode);
-    }
-
-    /**
-     * Merges the nodes in {@code nodes} at the specified node's location.
-     *
      * @param nodes the collection of nodes. Ignored if null.
      * @param targetLocationNode this node's location will be used for the targetNode.
Index: trunk/src/org/openstreetmap/josm/actions/SplitWayAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/SplitWayAction.java	(revision 13171)
+++ trunk/src/org/openstreetmap/josm/actions/SplitWayAction.java	(revision 13173)
@@ -25,5 +25,4 @@
 
 import org.openstreetmap.josm.Main;
-import org.openstreetmap.josm.command.Command;
 import org.openstreetmap.josm.command.SplitWayCommand;
 import org.openstreetmap.josm.data.osm.DefaultNameFormatter;
@@ -38,5 +37,4 @@
 import org.openstreetmap.josm.gui.MapFrame;
 import org.openstreetmap.josm.gui.Notification;
-import org.openstreetmap.josm.gui.layer.OsmDataLayer;
 import org.openstreetmap.josm.tools.GBC;
 import org.openstreetmap.josm.tools.Shortcut;
@@ -49,75 +47,4 @@
  */
 public class SplitWayAction extends JosmAction {
-
-    /**
-     * Represents the result of a {@link SplitWayAction}
-     * @see SplitWayAction#splitWay
-     * @see SplitWayAction#split
-     * @deprecated To be removed end of 2017. Use {@link SplitWayCommand} instead
-     */
-    @Deprecated
-    public static class SplitWayResult {
-        private final Command command;
-        private final List<? extends PrimitiveId> newSelection;
-        private final Way originalWay;
-        private final List<Way> newWays;
-
-        /**
-         * Constructs a new {@code SplitWayResult}.
-         * @param command The command to be performed to split the way (which is saved for later retrieval with {@link #getCommand})
-         * @param newSelection The new list of selected primitives ids (which is saved for later retrieval with {@link #getNewSelection})
-         * @param originalWay The original way being split (which is saved for later retrieval with {@link #getOriginalWay})
-         * @param newWays The resulting new ways (which is saved for later retrieval with {@link #getOriginalWay})
-         */
-        public SplitWayResult(Command command, List<? extends PrimitiveId> newSelection, Way originalWay, List<Way> newWays) {
-            this.command = command;
-            this.newSelection = newSelection;
-            this.originalWay = originalWay;
-            this.newWays = newWays;
-        }
-
-        /**
-         * @param command The command to be performed to split the way (which is saved for later retrieval with {@link #getCommand})
-         * @since 12828
-         */
-        protected SplitWayResult(SplitWayCommand command) {
-            this.command = command;
-            this.newSelection = command.getNewSelection();
-            this.originalWay = command.getOriginalWay();
-            this.newWays = command.getNewWays();
-        }
-
-        /**
-         * Replies the command to be performed to split the way
-         * @return The command to be performed to split the way
-         */
-        public Command getCommand() {
-            return command;
-        }
-
-        /**
-         * Replies the new list of selected primitives ids
-         * @return The new list of selected primitives ids
-         */
-        public List<? extends PrimitiveId> getNewSelection() {
-            return newSelection;
-        }
-
-        /**
-         * Replies the original way being split
-         * @return The original way being split
-         */
-        public Way getOriginalWay() {
-            return originalWay;
-        }
-
-        /**
-         * Replies the resulting new ways
-         * @return The resulting new ways
-         */
-        public List<Way> getNewWays() {
-            return newWays;
-        }
-    }
 
     /**
@@ -206,5 +133,5 @@
             sel.addAll(selectedRelations);
 
-            final List<Way> newWays = createNewWaysFromChunks(selectedWay, wayChunks);
+            final List<Way> newWays = SplitWayCommand.createNewWaysFromChunks(selectedWay, wayChunks);
             final Way wayToKeep = SplitWayCommand.Strategy.keepLongestChunk().determineWayToKeep(newWays);
 
@@ -315,40 +242,4 @@
 
     /**
-     * Determines which way chunk should reuse the old id and its history
-     *
-     * @since 8954
-     * @since 10599 (functional interface)
-     * @deprecated to be removed end of 2017. Use {@link org.openstreetmap.josm.command.SplitWayCommand.Strategy} instead
-     */
-    @Deprecated
-    @FunctionalInterface
-    public interface Strategy {
-
-        /**
-         * Determines which way chunk should reuse the old id and its history.
-         *
-         * @param wayChunks the way chunks
-         * @return the way to keep
-         */
-        Way determineWayToKeep(Iterable<Way> wayChunks);
-
-        /**
-         * Returns a strategy which selects the way chunk with the highest node count to keep.
-         * @return strategy which selects the way chunk with the highest node count to keep
-         */
-        static Strategy keepLongestChunk() {
-            return SplitWayCommand.Strategy.keepLongestChunk()::determineWayToKeep;
-        }
-
-        /**
-         * Returns a strategy which selects the first way chunk.
-         * @return strategy which selects the first way chunk
-         */
-        static Strategy keepFirstChunk() {
-            return SplitWayCommand.Strategy.keepFirstChunk()::determineWayToKeep;
-        }
-    }
-
-    /**
      * Determine which ways to split.
      * @param selectedWays List of user selected ways.
@@ -385,127 +276,4 @@
     }
 
-    /**
-     * Splits the nodes of {@code wayToSplit} into a list of node sequences
-     * which are separated at the nodes in {@code splitPoints}.
-     *
-     * This method displays warning messages if {@code wayToSplit} and/or
-     * {@code splitPoints} aren't consistent.
-     *
-     * Returns null, if building the split chunks fails.
-     *
-     * @param wayToSplit the way to split. Must not be null.
-     * @param splitPoints the nodes where the way is split. Must not be null.
-     * @return the list of chunks
-     * @deprecated To be removed end of 2017. Use {@link SplitWayCommand#buildSplitChunks} instead
-     */
-    @Deprecated
-    public static List<List<Node>> buildSplitChunks(Way wayToSplit, List<Node> splitPoints) {
-        return SplitWayCommand.buildSplitChunks(wayToSplit, splitPoints);
-    }
-
-    /**
-     * Creates new way objects for the way chunks and transfers the keys from the original way.
-     * @param way the original way whose  keys are transferred
-     * @param wayChunks the way chunks
-     * @return the new way objects
-     * @deprecated To be removed end of 2017. Use {@link SplitWayCommand#createNewWaysFromChunks} instead
-     */
-    @Deprecated
-    protected static List<Way> createNewWaysFromChunks(Way way, Iterable<List<Node>> wayChunks) {
-        return SplitWayCommand.createNewWaysFromChunks(way, wayChunks);
-    }
-
-    /**
-     * Splits the way {@code way} into chunks of {@code wayChunks} and replies
-     * the result of this process in an instance of {@link SplitWayResult}.
-     *
-     * Note that changes are not applied to the data yet. You have to
-     * submit the command in {@link SplitWayResult#getCommand()} first,
-     * i.e. {@code Main.main.undoredo.add(result.getCommand())}.
-     *
-     * @param layer the layer which the way belongs to.
-     * @param way the way to split. Must not be null.
-     * @param wayChunks the list of way chunks into the way is split. Must not be null.
-     * @param selection The list of currently selected primitives
-     * @return the result from the split operation
-     * @deprecated to be removed end of 2017. Use {@link SplitWayCommand#splitWay} instead
-     */
-    @Deprecated
-    public static SplitWayResult splitWay(OsmDataLayer layer, Way way, List<List<Node>> wayChunks,
-            Collection<? extends OsmPrimitive> selection) {
-        return splitWay(way, wayChunks, selection);
-    }
-
-    /**
-     * Splits the way {@code way} into chunks of {@code wayChunks} and replies
-     * the result of this process in an instance of {@link SplitWayResult}.
-     *
-     * Note that changes are not applied to the data yet. You have to
-     * submit the command in {@link SplitWayResult#getCommand()} first,
-     * i.e. {@code Main.main.undoredo.add(result.getCommand())}.
-     *
-     * @param way the way to split. Must not be null.
-     * @param wayChunks the list of way chunks into the way is split. Must not be null.
-     * @param selection The list of currently selected primitives
-     * @return the result from the split operation
-     * @since 12718
-     * @deprecated to be removed end of 2017. Use {@link SplitWayCommand#splitWay} instead
-     */
-    @Deprecated
-    public static SplitWayResult splitWay(Way way, List<List<Node>> wayChunks,
-            Collection<? extends OsmPrimitive> selection) {
-        return splitWay(way, wayChunks, selection, Strategy.keepLongestChunk());
-    }
-
-    /**
-     * Splits the way {@code way} into chunks of {@code wayChunks} and replies
-     * the result of this process in an instance of {@link SplitWayResult}.
-     * The {@link org.openstreetmap.josm.actions.SplitWayAction.Strategy} is used to determine which
-     * way chunk should reuse the old id and its history.
-     *
-     * Note that changes are not applied to the data yet. You have to
-     * submit the command in {@link SplitWayResult#getCommand()} first,
-     * i.e. {@code Main.main.undoredo.add(result.getCommand())}.
-     *
-     * @param layer the layer which the way belongs to.
-     * @param way the way to split. Must not be null.
-     * @param wayChunks the list of way chunks into the way is split. Must not be null.
-     * @param selection The list of currently selected primitives
-     * @param splitStrategy The strategy used to determine which way chunk should reuse the old id and its history
-     * @return the result from the split operation
-     * @since 8954
-     * @deprecated to be removed end of 2017. Use {@link SplitWayCommand#splitWay} instead
-     */
-    @Deprecated
-    public static SplitWayResult splitWay(OsmDataLayer layer, Way way, List<List<Node>> wayChunks,
-            Collection<? extends OsmPrimitive> selection, Strategy splitStrategy) {
-        return splitWay(way, wayChunks, selection, splitStrategy);
-    }
-
-    /**
-     * Splits the way {@code way} into chunks of {@code wayChunks} and replies
-     * the result of this process in an instance of {@link SplitWayResult}.
-     * The {@link org.openstreetmap.josm.actions.SplitWayAction.Strategy} is used to determine which
-     * way chunk should reuse the old id and its history.
-     *
-     * Note that changes are not applied to the data yet. You have to
-     * submit the command in {@link SplitWayResult#getCommand()} first,
-     * i.e. {@code Main.main.undoredo.add(result.getCommand())}.
-     *
-     * @param way the way to split. Must not be null.
-     * @param wayChunks the list of way chunks into the way is split. Must not be null.
-     * @param selection The list of currently selected primitives
-     * @param splitStrategy The strategy used to determine which way chunk should reuse the old id and its history
-     * @return the result from the split operation
-     * @since 12718
-     * @deprecated to be removed end of 2017. Use {@link SplitWayCommand#splitWay} instead
-     */
-    @Deprecated
-    public static SplitWayResult splitWay(Way way, List<List<Node>> wayChunks,
-            Collection<? extends OsmPrimitive> selection, Strategy splitStrategy) {
-        SplitWayCommand cmd = SplitWayCommand.splitWay(way, wayChunks, selection, splitStrategy::determineWayToKeep);
-        return cmd != null ? new SplitWayResult(cmd) : null;
-    }
-
     static void doSplitWay(Way way, Way wayToKeep, List<Way> newWays, List<OsmPrimitive> newSelection) {
         final MapFrame map = MainApplication.getMap();
@@ -519,49 +287,4 @@
     }
 
-    /**
-     * Splits the way {@code way} at the nodes in {@code atNodes} and replies
-     * the result of this process in an instance of {@link SplitWayResult}.
-     *
-     * Note that changes are not applied to the data yet. You have to
-     * submit the command in {@link SplitWayResult#getCommand()} first,
-     * i.e. {@code Main.main.undoredo.add(result.getCommand())}.
-     *
-     * Replies null if the way couldn't be split at the given nodes.
-     *
-     * @param layer the layer which the way belongs to.
-     * @param way the way to split. Must not be null.
-     * @param atNodes the list of nodes where the way is split. Must not be null.
-     * @param selection The list of currently selected primitives
-     * @return the result from the split operation
-     * @deprecated to be removed end of 2017. Use {@link SplitWayCommand#split} instead
-     */
-    @Deprecated
-    public static SplitWayResult split(OsmDataLayer layer, Way way, List<Node> atNodes, Collection<? extends OsmPrimitive> selection) {
-        return split(way, atNodes, selection);
-    }
-
-    /**
-     * Splits the way {@code way} at the nodes in {@code atNodes} and replies
-     * the result of this process in an instance of {@link SplitWayResult}.
-     *
-     * Note that changes are not applied to the data yet. You have to
-     * submit the command in {@link SplitWayResult#getCommand()} first,
-     * i.e. {@code Main.main.undoredo.add(result.getCommand())}.
-     *
-     * Replies null if the way couldn't be split at the given nodes.
-     *
-     * @param way the way to split. Must not be null.
-     * @param atNodes the list of nodes where the way is split. Must not be null.
-     * @param selection The list of currently selected primitives
-     * @return the result from the split operation
-     * @since 12718
-     * @deprecated to be removed end of 2017. Use {@link SplitWayCommand#split} instead
-     */
-    @Deprecated
-    public static SplitWayResult split(Way way, List<Node> atNodes, Collection<? extends OsmPrimitive> selection) {
-        List<List<Node>> chunks = buildSplitChunks(way, atNodes);
-        return chunks != null ? splitWay(way, chunks, selection) : null;
-    }
-
     @Override
     protected void updateEnabledState() {
Index: trunk/src/org/openstreetmap/josm/actions/mapmode/MapMode.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/mapmode/MapMode.java	(revision 13171)
+++ trunk/src/org/openstreetmap/josm/actions/mapmode/MapMode.java	(revision 13173)
@@ -12,6 +12,4 @@
 
 import org.openstreetmap.josm.actions.JosmAction;
-import org.openstreetmap.josm.spi.preferences.PreferenceChangeEvent;
-import org.openstreetmap.josm.spi.preferences.PreferenceChangedListener;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.gui.MainApplication;
@@ -19,4 +17,6 @@
 import org.openstreetmap.josm.gui.layer.Layer;
 import org.openstreetmap.josm.spi.preferences.Config;
+import org.openstreetmap.josm.spi.preferences.PreferenceChangeEvent;
+import org.openstreetmap.josm.spi.preferences.PreferenceChangedListener;
 import org.openstreetmap.josm.tools.ImageProvider;
 import org.openstreetmap.josm.tools.Shortcut;
@@ -65,33 +65,4 @@
 
     /**
-     * Constructor for mapmodes without a menu
-     * @param name the action's text
-     * @param iconName icon filename in {@code mapmode} directory
-     * @param tooltip  a longer description of the action that will be displayed in the tooltip.
-     * @param shortcut a ready-created shortcut object or null if you don't want a shortcut.
-     * @param mapFrame unused but kept for plugin compatibility. Can be {@code null}
-     * @param cursor cursor displayed when map mode is active
-     * @deprecated use {@link #MapMode(String, String, String, Shortcut, Cursor)} instead
-     */
-    @Deprecated
-    public MapMode(String name, String iconName, String tooltip, Shortcut shortcut, MapFrame mapFrame, Cursor cursor) {
-        this(name, iconName, tooltip, shortcut, cursor);
-    }
-
-    /**
-     * Constructor for mapmodes with a menu (no shortcut will be registered)
-     * @param name the action's text
-     * @param iconName icon filename in {@code mapmode} directory
-     * @param tooltip  a longer description of the action that will be displayed in the tooltip.
-     * @param mapFrame unused but kept for plugin compatibility. Can be {@code null}
-     * @param cursor cursor displayed when map mode is active
-     * @deprecated use {@link #MapMode(String, String, String, Cursor)} instead
-     */
-    @Deprecated
-    public MapMode(String name, String iconName, String tooltip, MapFrame mapFrame, Cursor cursor) {
-        this(name, iconName, tooltip, cursor);
-    }
-
-    /**
      * Makes this map mode active.
      */
@@ -179,16 +150,4 @@
 
     /**
-     * Update internal ctrl, alt, shift mask from given modifiers mask.
-     * @param modifiers event modifiers mask
-     * @deprecated use {@link #updateKeyModifiersEx} instead
-     */
-    @Deprecated
-    protected void updateKeyModifiers(int modifiers) {
-        ctrl = (modifiers & ActionEvent.CTRL_MASK) != 0;
-        alt = (modifiers & (ActionEvent.ALT_MASK | InputEvent.ALT_GRAPH_MASK)) != 0;
-        shift = (modifiers & ActionEvent.SHIFT_MASK) != 0;
-    }
-
-    /**
      * Update internal ctrl, alt, shift mask from given extended modifiers mask.
      * @param modifiers event extended modifiers mask
Index: trunk/src/org/openstreetmap/josm/command/AddCommand.java
===================================================================
--- trunk/src/org/openstreetmap/josm/command/AddCommand.java	(revision 13171)
+++ trunk/src/org/openstreetmap/josm/command/AddCommand.java	(revision 13173)
@@ -16,5 +16,4 @@
 import org.openstreetmap.josm.data.osm.OsmPrimitiveType;
 import org.openstreetmap.josm.data.osm.Way;
-import org.openstreetmap.josm.gui.layer.OsmDataLayer;
 import org.openstreetmap.josm.tools.ImageProvider;
 
@@ -32,26 +31,4 @@
      */
     private final OsmPrimitive osm;
-
-    /**
-     * Creates the command and specify the element to add in the context of the current edit layer, if any.
-     * @param osm The primitive to add
-     * @deprecated to be removed end of 2017. Use {@link #AddCommand(DataSet, OsmPrimitive)} instead
-     */
-    @Deprecated
-    public AddCommand(OsmPrimitive osm) {
-        this.osm = Objects.requireNonNull(osm, "osm");
-    }
-
-    /**
-     * Creates the command and specify the element to add in the context of the given data layer.
-     * @param layer The data layer. Must not be {@code null}
-     * @param osm The primitive to add
-     * @deprecated to be removed end of 2017. Use {@link #AddCommand(DataSet, OsmPrimitive)} instead
-     */
-    @Deprecated
-    public AddCommand(OsmDataLayer layer, OsmPrimitive osm) {
-        super(layer);
-        this.osm = Objects.requireNonNull(osm, "osm");
-    }
 
     /**
Index: trunk/src/org/openstreetmap/josm/command/AddPrimitivesCommand.java
===================================================================
--- trunk/src/org/openstreetmap/josm/command/AddPrimitivesCommand.java	(revision 13171)
+++ trunk/src/org/openstreetmap/josm/command/AddPrimitivesCommand.java	(revision 13173)
@@ -19,5 +19,4 @@
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.data.osm.PrimitiveData;
-import org.openstreetmap.josm.gui.layer.OsmDataLayer;
 import org.openstreetmap.josm.tools.CheckParameterUtil;
 import org.openstreetmap.josm.tools.JosmRuntimeException;
@@ -35,39 +34,4 @@
     // only filled on undo
     private List<OsmPrimitive> createdPrimitives;
-
-    /**
-     * Constructs a new {@code AddPrimitivesCommand} to add data to the current edit layer.
-     * @param data The OSM primitives data to add. Must not be {@code null}
-     * @deprecated to be removed end of 2017. Use {@link #AddPrimitivesCommand(List, DataSet)} instead
-     */
-    @Deprecated
-    public AddPrimitivesCommand(List<PrimitiveData> data) {
-        this(data, data);
-    }
-
-    /**
-     * Constructs a new {@code AddPrimitivesCommand} to add data to the current edit layer.
-     * @param data The OSM primitives to add. Must not be {@code null}
-     * @param toSelect The OSM primitives to select at the end. Can be {@code null}
-     * @since 5953
-     * @deprecated to be removed end of 2017. Use {@link #AddPrimitivesCommand(List, List, DataSet)} instead
-     */
-    @Deprecated
-    public AddPrimitivesCommand(List<PrimitiveData> data, List<PrimitiveData> toSelect) {
-        init(data, toSelect);
-    }
-
-    /**
-     * Constructs a new {@code AddPrimitivesCommand} to add data to the given layer.
-     * @param data The OSM primitives data to add. Must not be {@code null}
-     * @param toSelect The OSM primitives to select at the end. Can be {@code null}
-     * @param layer The target data layer. Must not be {@code null}
-     * @deprecated to be removed end of 2017. Use {@link #AddPrimitivesCommand(List, List, DataSet)} instead
-     */
-    @Deprecated
-    public AddPrimitivesCommand(List<PrimitiveData> data, List<PrimitiveData> toSelect, OsmDataLayer layer) {
-        super(layer);
-        init(data, toSelect);
-    }
 
     /**
Index: trunk/src/org/openstreetmap/josm/command/ChangeCommand.java
===================================================================
--- trunk/src/org/openstreetmap/josm/command/ChangeCommand.java	(revision 13171)
+++ trunk/src/org/openstreetmap/josm/command/ChangeCommand.java	(revision 13173)
@@ -15,5 +15,4 @@
 import org.openstreetmap.josm.data.osm.OsmPrimitiveType;
 import org.openstreetmap.josm.data.osm.Way;
-import org.openstreetmap.josm.gui.layer.OsmDataLayer;
 import org.openstreetmap.josm.tools.CheckParameterUtil;
 import org.openstreetmap.josm.tools.ImageProvider;
@@ -36,19 +35,4 @@
     public ChangeCommand(OsmPrimitive osm, OsmPrimitive newOsm) {
         this(osm.getDataSet(), osm, newOsm);
-    }
-
-    /**
-     * Constructs a new {@code ChangeCommand} in the context of a given data layer.
-     * @param layer The data layer
-     * @param osm The existing primitive to modify
-     * @param newOsm The new primitive
-     * @deprecated to be removed end of 2017. Use {@link #ChangeCommand(DataSet, OsmPrimitive, OsmPrimitive)} instead
-     */
-    @Deprecated
-    public ChangeCommand(OsmDataLayer layer, OsmPrimitive osm, OsmPrimitive newOsm) {
-        super(layer);
-        this.osm = osm;
-        this.newOsm = newOsm;
-        sanityChecks();
     }
 
Index: trunk/src/org/openstreetmap/josm/command/Command.java
===================================================================
--- trunk/src/org/openstreetmap/josm/command/Command.java	(revision 13171)
+++ trunk/src/org/openstreetmap/josm/command/Command.java	(revision 13173)
@@ -20,7 +20,4 @@
 import org.openstreetmap.josm.data.osm.Way;
 import org.openstreetmap.josm.data.osm.visitor.OsmPrimitiveVisitor;
-import org.openstreetmap.josm.gui.MainApplication;
-import org.openstreetmap.josm.gui.layer.Layer;
-import org.openstreetmap.josm.gui.layer.OsmDataLayer;
 import org.openstreetmap.josm.tools.CheckParameterUtil;
 
@@ -129,37 +126,6 @@
     private Map<OsmPrimitive, PrimitiveData> cloneMap = new HashMap<>();
 
-    /**
-     * the layer which this command is applied to
-     * @deprecated to be removed end of 2017. Use {@link #data} instead
-     */
-    @Deprecated
-    private final OsmDataLayer layer;
-
     /** the dataset which this command is applied to */
     private final DataSet data;
-
-    /**
-     * Creates a new command in the context of the current edit layer, if any
-     * @deprecated to be removed end of 2017. Use {@link #Command(DataSet)} instead
-     */
-    @Deprecated
-    public Command() {
-        this.layer = MainApplication.getLayerManager().getEditLayer();
-        this.data = layer != null ? layer.data : Main.main.getEditDataSet();
-    }
-
-    /**
-     * Creates a new command in the context of a specific data layer
-     *
-     * @param layer the data layer. Must not be null.
-     * @throws IllegalArgumentException if layer is null
-     * @deprecated to be removed end of 2017. Use {@link #Command(DataSet)} instead
-     */
-    @Deprecated
-    public Command(OsmDataLayer layer) {
-        CheckParameterUtil.ensureParameterNotNull(layer, "layer");
-        this.layer = layer;
-        this.data = layer.data;
-    }
 
     /**
@@ -172,5 +138,4 @@
     public Command(DataSet data) {
         CheckParameterUtil.ensureParameterNotNull(data, "data");
-        this.layer = null;
         this.data = data;
     }
@@ -182,5 +147,4 @@
      * The layer should be invalidated after execution so that it can be re-painted.
      * @return true
-     * @see #invalidateAffectedLayers()
      */
     public boolean executeCommand() {
@@ -212,18 +176,4 @@
 
     /**
-     * Called when a layer has been removed to have the command remove itself from
-     * any buffer if it is not longer applicable to the dataset (e.g. it was part of
-     * the removed layer)
-     *
-     * @param oldLayer the old layer that was removed
-     * @return true if this command is invalid after that layer is removed.
-     * @deprecated to be removed end of 2017.
-     */
-    @Deprecated
-    public boolean invalidBecauselayerRemoved(Layer oldLayer) {
-        return layer == oldLayer;
-    }
-
-    /**
      * Lets other commands access the original version
      * of the object. Usually for undoing.
@@ -233,14 +183,4 @@
     public PrimitiveData getOrig(OsmPrimitive osm) {
         return cloneMap.get(osm);
-    }
-
-    /**
-     * Replies the layer this command is (or was) applied to.
-     * @return the layer this command is (or was) applied to
-     * @deprecated to be removed end of 2017. Use {@link #getAffectedDataSet} instead
-     */
-    @Deprecated
-    protected OsmDataLayer getLayer() {
-        return layer;
     }
 
@@ -313,5 +253,5 @@
     @Override
     public int hashCode() {
-        return Objects.hash(cloneMap, layer, data);
+        return Objects.hash(cloneMap, data);
     }
 
@@ -322,19 +262,5 @@
         Command command = (Command) obj;
         return Objects.equals(cloneMap, command.cloneMap) &&
-               Objects.equals(layer, command.layer) &&
                Objects.equals(data, command.data);
     }
-
-    /**
-     * Invalidate all layers that were affected by this command.
-     * @see Layer#invalidate()
-     * @deprecated to be removed end of 2017.
-     */
-    @Deprecated
-    public void invalidateAffectedLayers() {
-        OsmDataLayer layer = getLayer();
-        if (layer != null) {
-            layer.invalidate();
-        }
-    }
 }
Index: trunk/src/org/openstreetmap/josm/command/DeleteCommand.java
===================================================================
--- trunk/src/org/openstreetmap/josm/command/DeleteCommand.java	(revision 13171)
+++ trunk/src/org/openstreetmap/josm/command/DeleteCommand.java	(revision 13173)
@@ -32,5 +32,4 @@
 import org.openstreetmap.josm.data.osm.Way;
 import org.openstreetmap.josm.data.osm.WaySegment;
-import org.openstreetmap.josm.gui.layer.OsmDataLayer;
 import org.openstreetmap.josm.tools.CheckParameterUtil;
 import org.openstreetmap.josm.tools.ImageProvider;
@@ -144,18 +143,4 @@
      * Constructor for a single data item. Use the collection constructor to delete multiple objects.
      *
-     * @param layer the layer context for deleting this primitive. Must not be null.
-     * @param data the primitive to delete. Must not be null.
-     * @throws IllegalArgumentException if data is null
-     * @throws IllegalArgumentException if layer is null
-     * @deprecated to be removed end of 2017. Use {@link #DeleteCommand(DataSet, OsmPrimitive)} instead
-     */
-    @Deprecated
-    public DeleteCommand(OsmDataLayer layer, OsmPrimitive data) {
-        this(layer, Collections.singleton(data));
-    }
-
-    /**
-     * Constructor for a single data item. Use the collection constructor to delete multiple objects.
-     *
      * @param dataset the data set context for deleting this primitive. Must not be null.
      * @param data the primitive to delete. Must not be null.
@@ -166,21 +151,4 @@
     public DeleteCommand(DataSet dataset, OsmPrimitive data) {
         this(dataset, Collections.singleton(data));
-    }
-
-    /**
-     * Constructor for a collection of data to be deleted in the context of a specific layer
-     *
-     * @param layer the layer context for deleting these primitives. Must not be null.
-     * @param data the primitives to delete. Must neither be null nor empty.
-     * @throws IllegalArgumentException if layer is null
-     * @throws IllegalArgumentException if data is null or empty
-     * @deprecated to be removed end of 2017. Use {@link #DeleteCommand(DataSet, Collection)} instead
-     */
-    @Deprecated
-    public DeleteCommand(OsmDataLayer layer, Collection<? extends OsmPrimitive> data) {
-        super(layer);
-        CheckParameterUtil.ensureParameterNotNull(data, "data");
-        this.toDelete = data;
-        checkConsistency();
     }
 
@@ -329,23 +297,4 @@
      * If a way is deleted, only the way and no nodes are deleted.
      *
-     * @param layer the {@link OsmDataLayer} in whose context primitives are deleted. Must not be null.
-     * @param selection The list of all object to be deleted.
-     * @param silent  Set to true if the user should not be bugged with additional dialogs
-     * @return command A command to perform the deletions, or null of there is nothing to delete.
-     * @throws IllegalArgumentException if layer is null
-     * @deprecated to be removed end of 2017. Use {@link #deleteWithReferences(Collection, boolean)} instead
-     */
-    @Deprecated
-    public static Command deleteWithReferences(OsmDataLayer layer, Collection<? extends OsmPrimitive> selection, boolean silent) {
-        return deleteWithReferences(selection, silent);
-    }
-
-    /**
-     * Delete the primitives and everything they reference.
-     *
-     * If a node is deleted, the node and all ways and relations the node is part of are deleted as well.
-     * If a way is deleted, all relations the way is member of are also deleted.
-     * If a way is deleted, only the way and no nodes are deleted.
-     *
      * @param selection The list of all object to be deleted.
      * @param silent  Set to true if the user should not be bugged with additional dialogs
@@ -373,48 +322,11 @@
      * If a way is deleted, only the way and no nodes are deleted.
      *
-     * @param layer unused
      * @param selection The list of all object to be deleted.
      * @return command A command to perform the deletions, or null of there is nothing to delete.
      * @throws IllegalArgumentException if layer is null
-     * @deprecated to be removed end of 2017. Use {@link #deleteWithReferences(Collection)} instead
-     */
-    @Deprecated
-    public static Command deleteWithReferences(OsmDataLayer layer, Collection<? extends OsmPrimitive> selection) {
-        return deleteWithReferences(selection);
-    }
-
-    /**
-     * Delete the primitives and everything they reference.
-     *
-     * If a node is deleted, the node and all ways and relations the node is part of are deleted as well.
-     * If a way is deleted, all relations the way is member of are also deleted.
-     * If a way is deleted, only the way and no nodes are deleted.
-     *
-     * @param selection The list of all object to be deleted.
-     * @return command A command to perform the deletions, or null of there is nothing to delete.
-     * @throws IllegalArgumentException if layer is null
      * @since 12718
      */
     public static Command deleteWithReferences(Collection<? extends OsmPrimitive> selection) {
         return deleteWithReferences(selection, false);
-    }
-
-    /**
-     * Try to delete all given primitives.
-     *
-     * If a node is used by a way, it's removed from that way. If a node or a way is used by a
-     * relation, inform the user and do not delete.
-     *
-     * If this would cause ways with less than 2 nodes to be created, delete these ways instead. If
-     * they are part of a relation, inform the user and do not delete.
-     *
-     * @param layer unused
-     * @param selection the objects to delete.
-     * @return command a command to perform the deletions, or null if there is nothing to delete.
-     * @deprecated to be removed end of 2017. Use {@link #delete(Collection)} instead
-     */
-    @Deprecated
-    public static Command delete(OsmDataLayer layer, Collection<? extends OsmPrimitive> selection) {
-        return delete(selection);
     }
 
@@ -479,54 +391,11 @@
      * they are part of a relation, inform the user and do not delete.
      *
-     * @param layer unused
      * @param selection the objects to delete.
      * @param alsoDeleteNodesInWay <code>true</code> if nodes should be deleted as well
      * @return command a command to perform the deletions, or null if there is nothing to delete.
-     * @deprecated to be removed end of 2017. Use {@link #delete(Collection, boolean)} instead
-     */
-    @Deprecated
-    public static Command delete(OsmDataLayer layer, Collection<? extends OsmPrimitive> selection,
-            boolean alsoDeleteNodesInWay) {
-        return delete(selection, alsoDeleteNodesInWay);
-    }
-
-    /**
-     * Try to delete all given primitives.
-     *
-     * If a node is used by a way, it's removed from that way. If a node or a way is used by a
-     * relation, inform the user and do not delete.
-     *
-     * If this would cause ways with less than 2 nodes to be created, delete these ways instead. If
-     * they are part of a relation, inform the user and do not delete.
-     *
-     * @param selection the objects to delete.
-     * @param alsoDeleteNodesInWay <code>true</code> if nodes should be deleted as well
-     * @return command a command to perform the deletions, or null if there is nothing to delete.
      * @since 12718
      */
     public static Command delete(Collection<? extends OsmPrimitive> selection, boolean alsoDeleteNodesInWay) {
         return delete(selection, alsoDeleteNodesInWay, false /* not silent */);
-    }
-
-    /**
-     * Try to delete all given primitives.
-     *
-     * If a node is used by a way, it's removed from that way. If a node or a way is used by a
-     * relation, inform the user and do not delete.
-     *
-     * If this would cause ways with less than 2 nodes to be created, delete these ways instead. If
-     * they are part of a relation, inform the user and do not delete.
-     *
-     * @param layer unused
-     * @param selection the objects to delete.
-     * @param alsoDeleteNodesInWay <code>true</code> if nodes should be deleted as well
-     * @param silent set to true if the user should not be bugged with additional questions
-     * @return command a command to perform the deletions, or null if there is nothing to delete.
-     * @deprecated to be removed end of 2017. Use {@link #delete(Collection, boolean, boolean)} instead
-     */
-    @Deprecated
-    public static Command delete(OsmDataLayer layer, Collection<? extends OsmPrimitive> selection,
-            boolean alsoDeleteNodesInWay, boolean silent) {
-        return delete(selection, alsoDeleteNodesInWay, silent);
     }
 
@@ -608,16 +477,4 @@
     /**
      * Create a command that deletes a single way segment. The way may be split by this.
-     * @param layer unused
-     * @param ws The way segment that should be deleted
-     * @return A matching command to safely delete that segment.
-     * @deprecated to be removed end of 2017. Use {@link #deleteWaySegment(WaySegment)} instead
-     */
-    @Deprecated
-    public static Command deleteWaySegment(OsmDataLayer layer, WaySegment ws) {
-        return deleteWaySegment(ws);
-    }
-
-    /**
-     * Create a command that deletes a single way segment. The way may be split by this.
      * @param ws The way segment that should be deleted
      * @return A matching command to safely delete that segment.
Index: trunk/src/org/openstreetmap/josm/command/PurgeCommand.java
===================================================================
--- trunk/src/org/openstreetmap/josm/command/PurgeCommand.java	(revision 13171)
+++ trunk/src/org/openstreetmap/josm/command/PurgeCommand.java	(revision 13173)
@@ -30,5 +30,4 @@
 import org.openstreetmap.josm.data.osm.Way;
 import org.openstreetmap.josm.data.osm.WayData;
-import org.openstreetmap.josm.gui.layer.OsmDataLayer;
 import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.ImageProvider;
@@ -44,21 +43,4 @@
 
     protected final ConflictCollection purgedConflicts = new ConflictCollection();
-
-    /**
-     * Constructs a new {@code PurgeCommand} (handles conflicts).
-     * This command relies on a number of consistency conditions:
-     *  - makeIncomplete must be a subset of toPurge.
-     *  - Each primitive, that is in toPurge but not in makeIncomplete, must have all its referrers in toPurge.
-     *  - Each element of makeIncomplete must not be new and must have only referrers that are either a relation or included in toPurge.
-     * @param layer OSM data layer
-     * @param toPurge primitives to purge
-     * @param makeIncomplete primitives to make incomplete
-     * @deprecated to be removed end of 2017. Use {@link #PurgeCommand(DataSet, Collection, Collection)} instead
-     */
-    @Deprecated
-    public PurgeCommand(OsmDataLayer layer, Collection<OsmPrimitive> toPurge, Collection<OsmPrimitive> makeIncomplete) {
-        super(layer);
-        init(toPurge, makeIncomplete);
-    }
 
     /**
@@ -316,18 +298,4 @@
     /**
      * Creates a new {@code PurgeCommand} to purge selected OSM primitives.
-     * @param layer optional osm data layer, can be null
-     * @param sel selected OSM primitives
-     * @param toPurgeAdditionally optional list that will be filled with primitives to be purged that have not been in the selection
-     * @return command to purge selected OSM primitives
-     * @since 12688
-     * @deprecated to be removed end of 2017. Use {@link #build(Collection, List)} instead
-     */
-    @Deprecated
-    public static PurgeCommand build(OsmDataLayer layer, Collection<OsmPrimitive> sel, List<OsmPrimitive> toPurgeAdditionally) {
-        return build(sel, toPurgeAdditionally);
-    }
-
-    /**
-     * Creates a new {@code PurgeCommand} to purge selected OSM primitives.
      * @param sel selected OSM primitives
      * @param toPurgeAdditionally optional list that will be filled with primitives to be purged that have not been in the selection
Index: trunk/src/org/openstreetmap/josm/command/SelectCommand.java
===================================================================
--- trunk/src/org/openstreetmap/josm/command/SelectCommand.java	(revision 13171)
+++ trunk/src/org/openstreetmap/josm/command/SelectCommand.java	(revision 13173)
@@ -24,18 +24,4 @@
     /** the selection before applying the new selection */
     private Collection<OsmPrimitive> oldSelection;
-
-    /**
-     * Constructs a new select command.
-     * @param newSelection the primitives to select when executing the command.
-     * @deprecated to be removed end of 2017. Use {@link #SelectCommand(DataSet, Collection)} instead
-     */
-    @Deprecated
-    public SelectCommand(Collection<OsmPrimitive> newSelection) {
-        if (newSelection == null || newSelection.isEmpty()) {
-            this.newSelection = Collections.emptySet();
-        } else {
-            this.newSelection = new HashSet<>(newSelection);
-        }
-    }
 
     /**
Index: trunk/src/org/openstreetmap/josm/command/SequenceCommand.java
===================================================================
--- trunk/src/org/openstreetmap/josm/command/SequenceCommand.java	(revision 13171)
+++ trunk/src/org/openstreetmap/josm/command/SequenceCommand.java	(revision 13173)
@@ -13,5 +13,4 @@
 import org.openstreetmap.josm.data.osm.DataSet;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
-import org.openstreetmap.josm.gui.layer.Layer;
 import org.openstreetmap.josm.tools.ImageProvider;
 import org.openstreetmap.josm.tools.Utils;
@@ -151,18 +150,4 @@
     }
 
-    /**
-     * Invalidate all layers that were affected by this command.
-     * @see Layer#invalidate()
-     * @deprecated to be removed end of 2017.
-     */
-    @Override
-    @Deprecated
-    public void invalidateAffectedLayers() {
-        super.invalidateAffectedLayers();
-        for (Command c : sequence) {
-            c.invalidateAffectedLayers();
-        }
-    }
-
     @Override
     public int hashCode() {
Index: trunk/src/org/openstreetmap/josm/command/SplitWayCommand.java
===================================================================
--- trunk/src/org/openstreetmap/josm/command/SplitWayCommand.java	(revision 13171)
+++ trunk/src/org/openstreetmap/josm/command/SplitWayCommand.java	(revision 13173)
@@ -233,5 +233,5 @@
      * Splits the way {@code way} into chunks of {@code wayChunks} and replies
      * the result of this process in an instance of {@link SplitWayCommand}.
-     * The {@link org.openstreetmap.josm.actions.SplitWayAction.Strategy} is used to determine which
+     * The {@link SplitWayCommand.Strategy} is used to determine which
      * way chunk should reuse the old id and its history.
      *
Index: trunk/src/org/openstreetmap/josm/command/conflict/ConflictAddCommand.java
===================================================================
--- trunk/src/org/openstreetmap/josm/command/conflict/ConflictAddCommand.java	(revision 13171)
+++ trunk/src/org/openstreetmap/josm/command/conflict/ConflictAddCommand.java	(revision 13173)
@@ -16,5 +16,4 @@
 import org.openstreetmap.josm.data.osm.DefaultNameFormatter;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
-import org.openstreetmap.josm.gui.layer.OsmDataLayer;
 import org.openstreetmap.josm.tools.ImageProvider;
 import org.openstreetmap.josm.tools.Logging;
@@ -27,16 +26,4 @@
 public class ConflictAddCommand extends Command {
     private final Conflict<? extends OsmPrimitive> conflict;
-
-    /**
-     * Constructs a new {@code ConflictAddCommand}.
-     * @param layer the data layer. Must not be null.
-     * @param conflict the conflict to add
-     * @deprecated to be removed end of 2017. Use {@link #ConflictAddCommand(DataSet, Conflict)} instead
-     */
-    @Deprecated
-    public ConflictAddCommand(OsmDataLayer layer, Conflict<? extends OsmPrimitive> conflict) {
-        super(layer);
-        this.conflict = conflict;
-    }
 
     /**
Index: trunk/src/org/openstreetmap/josm/command/conflict/ConflictResolveCommand.java
===================================================================
--- trunk/src/org/openstreetmap/josm/command/conflict/ConflictResolveCommand.java	(revision 13171)
+++ trunk/src/org/openstreetmap/josm/command/conflict/ConflictResolveCommand.java	(revision 13173)
@@ -11,5 +11,4 @@
 import org.openstreetmap.josm.data.conflict.ConflictCollection;
 import org.openstreetmap.josm.data.osm.DataSet;
-import org.openstreetmap.josm.gui.layer.OsmDataLayer;
 import org.openstreetmap.josm.tools.Logging;
 
@@ -25,23 +24,4 @@
     /** the list of resolved conflicts */
     private final ConflictCollection resolvedConflicts = new ConflictCollection();
-
-    /**
-     * Constructs a new {@code ConflictResolveCommand} in the context of the current edit layer, if any.
-     * @deprecated to be removed end of 2017. Use {@link #ConflictResolveCommand(DataSet)} instead
-     */
-    @Deprecated
-    public ConflictResolveCommand() {
-        this(Main.main.getEditDataSet());
-    }
-
-    /**
-     * Constructs a new {@code ConflictResolveCommand} in the context of a given data layer.
-     * @param layer the data layer. Must not be null.
-     * @deprecated to be removed end of 2017. Use {@link #ConflictResolveCommand(DataSet)} instead
-     */
-    @Deprecated
-    public ConflictResolveCommand(OsmDataLayer layer) {
-        super(layer);
-    }
 
     /**
Index: trunk/src/org/openstreetmap/josm/data/Bounds.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/Bounds.java	(revision 13171)
+++ trunk/src/org/openstreetmap/josm/data/Bounds.java	(revision 13173)
@@ -8,10 +8,8 @@
 import java.text.MessageFormat;
 import java.util.Objects;
-import java.util.function.Consumer;
 
 import org.openstreetmap.josm.data.coor.ILatLon;
 import org.openstreetmap.josm.data.coor.LatLon;
 import org.openstreetmap.josm.data.osm.BBox;
-import org.openstreetmap.josm.data.projection.Projection;
 import org.openstreetmap.josm.tools.CheckParameterUtil;
 
@@ -565,33 +563,4 @@
     }
 
-    /**
-     * Visit points along the edge of this bounds instance.
-     * @param projection The projection that should be used to determine how often the edge should be split along a given corner.
-     * @param visitor A function to call for the points on the edge.
-     * @since 10806
-     * @deprecated use {@link Projection#visitOutline(Bounds, Consumer)}
-     */
-    @Deprecated
-    public void visitEdge(Projection projection, Consumer<LatLon> visitor) {
-        double width = getWidth();
-        double height = maxLat - minLat;
-        //TODO: Use projection to see if there is any need for doing this along each axis.
-        int splitX = Math.max((int) width / 10, 10);
-        int splitY = Math.max((int) height / 10, 10);
-
-        for (int step = 0; step < splitX; step++) {
-            visitor.accept(new LatLon(minLat, minLon + width * step / splitX));
-        }
-        for (int step = 0; step < splitY; step++) {
-            visitor.accept(new LatLon(minLat + height * step / splitY, maxLon));
-        }
-        for (int step = 0; step < splitX; step++) {
-            visitor.accept(new LatLon(maxLat, maxLon - width * step / splitX));
-        }
-        for (int step = 0; step < splitY; step++) {
-            visitor.accept(new LatLon(maxLat - height * step / splitY, minLon));
-        }
-    }
-
     @Override
     public int hashCode() {
Index: trunk/src/org/openstreetmap/josm/data/Preferences.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/Preferences.java	(revision 13171)
+++ trunk/src/org/openstreetmap/josm/data/Preferences.java	(revision 13173)
@@ -11,6 +11,4 @@
 import java.io.Reader;
 import java.io.StringWriter;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
 import java.nio.charset.StandardCharsets;
 import java.util.ArrayList;
@@ -38,9 +36,5 @@
 
 import org.openstreetmap.josm.Main;
-import org.openstreetmap.josm.data.preferences.BooleanProperty;
 import org.openstreetmap.josm.data.preferences.ColorInfo;
-import org.openstreetmap.josm.data.preferences.DoubleProperty;
-import org.openstreetmap.josm.data.preferences.IntegerProperty;
-import org.openstreetmap.josm.data.preferences.LongProperty;
 import org.openstreetmap.josm.data.preferences.NamedColorProperty;
 import org.openstreetmap.josm.data.preferences.PreferencesReader;
@@ -51,8 +45,5 @@
 import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.spi.preferences.IBaseDirectories;
-import org.openstreetmap.josm.spi.preferences.IPreferences;
-import org.openstreetmap.josm.spi.preferences.ListListSetting;
 import org.openstreetmap.josm.spi.preferences.ListSetting;
-import org.openstreetmap.josm.spi.preferences.MapListSetting;
 import org.openstreetmap.josm.spi.preferences.Setting;
 import org.openstreetmap.josm.spi.preferences.StringSetting;
@@ -137,90 +128,7 @@
     protected boolean initSuccessful;
 
-    /**
-     * Event triggered when a preference entry value changes.
-     * @deprecated use {@link org.openstreetmap.josm.spi.preferences.PreferenceChangeEvent}
-     */
-    @Deprecated
-    public interface PreferenceChangeEvent {
-        /**
-         * Returns the preference key.
-         * @return the preference key
-         */
-        String getKey();
-
-        /**
-         * Returns the old preference value.
-         * @return the old preference value
-         */
-        Setting<?> getOldValue();
-
-        /**
-         * Returns the new preference value.
-         * @return the new preference value
-         */
-        Setting<?> getNewValue();
-    }
-
-    /**
-     * Listener to preference change events.
-     * @since 10600 (functional interface)
-     * @deprecated use {@link org.openstreetmap.josm.spi.preferences.PreferenceChangedListener}
-     */
-    @FunctionalInterface
-    @Deprecated
-    public interface PreferenceChangedListener {
-        /**
-         * Trigerred when a preference entry value changes.
-         * @param e the preference change event
-         */
-        void preferenceChanged(PreferenceChangeEvent e);
-    }
-
-    /**
-     * @deprecated private class is deprecated
-     */
-    @Deprecated
-    private static class DefaultPreferenceChangeEvent implements PreferenceChangeEvent {
-        private final String key;
-        private final Setting<?> oldValue;
-        private final Setting<?> newValue;
-
-        DefaultPreferenceChangeEvent(String key, Setting<?> oldValue, Setting<?> newValue) {
-            this.key = key;
-            this.oldValue = oldValue;
-            this.newValue = newValue;
-        }
-
-        @Override
-        public String getKey() {
-            return key;
-        }
-
-        @Override
-        public Setting<?> getOldValue() {
-            return oldValue;
-        }
-
-        @Override
-        public Setting<?> getNewValue() {
-            return newValue;
-        }
-    }
-
     private final ListenerList<org.openstreetmap.josm.spi.preferences.PreferenceChangedListener> listeners = ListenerList.create();
 
     private final HashMap<String, ListenerList<org.openstreetmap.josm.spi.preferences.PreferenceChangedListener>> keyListeners = new HashMap<>();
-
-    /**
-     * @deprecated deprecated private field
-     */
-    @Deprecated
-    private final ListenerList<Preferences.PreferenceChangedListener> listenersDeprecated = ListenerList.create();
-
-    /**
-     * @deprecated deprecated private field
-     */
-    @Deprecated
-    private final HashMap<String, ListenerList<Preferences.PreferenceChangedListener>> keyListenersDeprecated = new HashMap<>();
 
     /**
@@ -266,16 +174,4 @@
 
     /**
-     * Adds a new preferences listener.
-     * @param listener The listener to add
-     * @deprecated use {@link #addPreferenceChangeListener(org.openstreetmap.josm.spi.preferences.PreferenceChangedListener)}
-     */
-    @Deprecated
-    public void addPreferenceChangeListener(Preferences.PreferenceChangedListener listener) {
-        if (listener != null) {
-            listenersDeprecated.addListener(listener);
-        }
-    }
-
-    /**
      * Removes a preferences listener.
      * @param listener The listener to remove
@@ -285,14 +181,4 @@
     public void removePreferenceChangeListener(org.openstreetmap.josm.spi.preferences.PreferenceChangedListener listener) {
         listeners.removeListener(listener);
-    }
-
-    /**
-     * Removes a preferences listener.
-     * @param listener The listener to remove
-     * @deprecated use {@link #removePreferenceChangeListener(org.openstreetmap.josm.spi.preferences.PreferenceChangedListener)}
-     */
-    @Deprecated
-    public void removePreferenceChangeListener(Preferences.PreferenceChangedListener listener) {
-        listenersDeprecated.removeListener(listener);
     }
 
@@ -309,17 +195,4 @@
 
     /**
-     * Adds a listener that only listens to changes in one preference
-     * @param key The preference key to listen to
-     * @param listener The listener to add.
-     * @since 10824
-     * @deprecated use
-     * {@link #addKeyPreferenceChangeListener(java.lang.String, org.openstreetmap.josm.spi.preferences.PreferenceChangedListener)}
-     */
-    @Deprecated
-    public void addKeyPreferenceChangeListener(String key, Preferences.PreferenceChangedListener listener) {
-        listenersForKeyDeprecated(key).addListener(listener);
-    }
-
-    /**
      * Adds a weak listener that only listens to changes in one preference
      * @param key The preference key to listen to
@@ -333,14 +206,4 @@
     private ListenerList<org.openstreetmap.josm.spi.preferences.PreferenceChangedListener> listenersForKey(String key) {
         return keyListeners.computeIfAbsent(key, k -> ListenerList.create());
-    }
-
-    /**
-     * @param key preference key
-     * @return listener list for this key
-     * @deprecated deprecated private method
-     */
-    @Deprecated
-    private ListenerList<Preferences.PreferenceChangedListener> listenersForKeyDeprecated(String key) {
-        return keyListenersDeprecated.computeIfAbsent(key, k -> ListenerList.create());
     }
 
@@ -358,18 +221,4 @@
     }
 
-    /**
-     * Removes a listener that only listens to changes in one preference
-     * @param key The preference key to listen to
-     * @param listener The listener to add.
-     * @deprecated use
-     * {@link #removeKeyPreferenceChangeListener(java.lang.String, org.openstreetmap.josm.spi.preferences.PreferenceChangedListener)}
-     */
-    @Deprecated
-    public void removeKeyPreferenceChangeListener(String key, Preferences.PreferenceChangedListener listener) {
-        Optional.ofNullable(keyListenersDeprecated.get(key)).orElseThrow(
-                () -> new IllegalArgumentException("There are no listeners registered for " + key))
-        .removeListener(listener);
-    }
-
     protected void firePreferenceChanged(String key, Setting<?> oldValue, Setting<?> newValue) {
         final org.openstreetmap.josm.spi.preferences.PreferenceChangeEvent evt =
@@ -381,30 +230,10 @@
             forKey.fireEvent(listener -> listener.preferenceChanged(evt));
         }
-        firePreferenceChangedDeprecated(key, oldValue, newValue);
-    }
-
-    /**
-     * @param key preference key
-     * @param oldValue old value
-     * @param newValue new value
-     * @deprecated deprecated private method
-     */
-    @Deprecated
-    private void firePreferenceChangedDeprecated(String key, Setting<?> oldValue, Setting<?> newValue) {
-        final Preferences.PreferenceChangeEvent evtDeprecated = new Preferences.DefaultPreferenceChangeEvent(key, oldValue, newValue);
-        listenersDeprecated.fireEvent(listener -> listener.preferenceChanged(evtDeprecated));
-
-        ListenerList<Preferences.PreferenceChangedListener> forKeyDeprecated = keyListenersDeprecated.get(key);
-        if (forKeyDeprecated != null) {
-            forKeyDeprecated.fireEvent(listener -> listener.preferenceChanged(evtDeprecated));
-        }
-    }
-
-    /**
-     * Get the base name of the JOSM directories for preferences, cache and
-     * user data.
+    }
+
+    /**
+     * Get the base name of the JOSM directories for preferences, cache and user data.
      * Default value is "JOSM", unless overridden by system property "josm.dir.name".
-     * @return the base name of the JOSM directories for preferences, cache and
-     * user data
+     * @return the base name of the JOSM directories for preferences, cache and user data
      */
     public String getJOSMDirectoryBaseName() {
@@ -639,75 +468,4 @@
         }
         return all;
-    }
-
-    /**
-     * Gets an boolean that may be specialized
-     * @param key The basic key
-     * @param specName The sub-key to append to the key
-     * @param def The default value
-     * @return The boolean value or the default value if it could not be parsed
-     * @deprecated use {@link PreferencesUtils#getBoolean(IPreferences, String, String, boolean)}
-     */
-    @Deprecated
-    public synchronized boolean getBoolean(final String key, final String specName, final boolean def) {
-        boolean generic = getBoolean(key, def);
-        String skey = key+'.'+specName;
-        Setting<?> prop = settingsMap.get(skey);
-        if (prop instanceof StringSetting)
-            return Boolean.parseBoolean(((StringSetting) prop).getValue());
-        else
-            return generic;
-    }
-
-    /**
-     * Set a boolean value for a certain setting.
-     * @param key the unique identifier for the setting
-     * @param value The new value
-     * @return {@code true}, if something has changed (i.e. value is different than before)
-     * @see BooleanProperty
-     * @deprecated use {@link IPreferences#putBoolean(String, boolean)}
-     */
-    @Deprecated
-    public boolean put(final String key, final boolean value) {
-        return put(key, Boolean.toString(value));
-    }
-
-    /**
-     * Set a boolean value for a certain setting.
-     * @param key the unique identifier for the setting
-     * @param value The new value
-     * @return {@code true}, if something has changed (i.e. value is different than before)
-     * @see IntegerProperty#put(Integer)
-     * @deprecated use {@link IPreferences#putInt(String, int)}
-     */
-    @Deprecated
-    public boolean putInteger(final String key, final Integer value) {
-        return put(key, Integer.toString(value));
-    }
-
-    /**
-     * Set a boolean value for a certain setting.
-     * @param key the unique identifier for the setting
-     * @param value The new value
-     * @return {@code true}, if something has changed (i.e. value is different than before)
-     * @see DoubleProperty#put(Double)
-     * @deprecated use {@link IPreferences#putDouble(java.lang.String, double)}
-     */
-    @Deprecated
-    public boolean putDouble(final String key, final Double value) {
-        return put(key, Double.toString(value));
-    }
-
-    /**
-     * Set a boolean value for a certain setting.
-     * @param key the unique identifier for the setting
-     * @param value The new value
-     * @return {@code true}, if something has changed (i.e. value is different than before)
-     * @see LongProperty#put(Long)
-     * @deprecated use {@link IPreferences#putLong(java.lang.String, long)}
-     */
-    @Deprecated
-    public boolean putLong(final String key, final Long value) {
-        return put(key, Long.toString(value));
     }
 
@@ -1050,90 +808,4 @@
 
     /**
-     * Gets an integer preference
-     * @param key The preference key
-     * @param def The default value to use
-     * @return The integer
-     * @see IntegerProperty#get()
-     * @deprecated use {@link IPreferences#getInt(String, int)}
-     */
-    @Deprecated
-    public synchronized int getInteger(String key, int def) {
-        String v = get(key, Integer.toString(def));
-        if (v.isEmpty())
-            return def;
-
-        try {
-            return Integer.parseInt(v);
-        } catch (NumberFormatException e) {
-            // fall out
-            Logging.trace(e);
-        }
-        return def;
-    }
-
-    /**
-     * Gets an integer that may be specialized
-     * @param key The basic key
-     * @param specName The sub-key to append to the key
-     * @param def The default value
-     * @return The integer value or the default value if it could not be parsed
-     * @deprecated use {@link PreferencesUtils#getInteger(IPreferences, String, String, int)}
-     */
-    @Deprecated
-    public synchronized int getInteger(String key, String specName, int def) {
-        String v = get(key+'.'+specName);
-        if (v.isEmpty())
-            v = get(key, Integer.toString(def));
-        if (v.isEmpty())
-            return def;
-
-        try {
-            return Integer.parseInt(v);
-        } catch (NumberFormatException e) {
-            // fall out
-            Logging.trace(e);
-        }
-        return def;
-    }
-
-    /**
-     * Get a list of values for a certain key
-     * @param key the identifier for the setting
-     * @param def the default value.
-     * @return the corresponding value if the property has been set before, {@code def} otherwise
-     * @deprecated use {@link IPreferences#getList(java.lang.String, java.util.List)}
-     */
-    @Deprecated
-    public Collection<String> getCollection(String key, Collection<String> def) {
-        return getSetting(key, ListSetting.create(def), ListSetting.class).getValue();
-    }
-
-    /**
-     * Get a list of values for a certain key
-     * @param key the identifier for the setting
-     * @return the corresponding value if the property has been set before, an empty collection otherwise.
-     * @deprecated use {@link IPreferences#getList(java.lang.String)}
-     */
-    @Deprecated
-    public Collection<String> getCollection(String key) {
-        Collection<String> val = getList(key, null);
-        return val == null ? Collections.<String>emptyList() : val;
-    }
-
-    /**
-     * Removes a value from a given String collection
-     * @param key The preference key the collection is stored with
-     * @param value The value that should be removed in the collection
-     * @see #getList(String)
-     * @deprecated use {@link PreferencesUtils#removeFromList(IPreferences, String, String)}
-     */
-    @Deprecated
-    public synchronized void removeFromCollection(String key, String value) {
-        List<String> a = new ArrayList<>(getList(key, Collections.<String>emptyList()));
-        a.remove(value);
-        putList(key, a);
-    }
-
-    /**
      * Set a value for a certain setting. The changed setting is saved to the preference file immediately.
      * Due to caching mechanisms on modern operating systems and hardware, this shouldn't be a performance problem.
@@ -1218,215 +890,4 @@
     }
 
-    /**
-     * Put a collection.
-     * @param key key
-     * @param value value
-     * @return {@code true}, if something has changed (i.e. value is different than before)
-     * @deprecated use {@link IPreferences#putList(java.lang.String, java.util.List)}
-     */
-    @Deprecated
-    public boolean putCollection(String key, Collection<String> value) {
-        return putSetting(key, value == null ? null : ListSetting.create(value));
-    }
-
-    /**
-     * Saves at most {@code maxsize} items of collection {@code val}.
-     * @param key key
-     * @param maxsize max number of items to save
-     * @param val value
-     * @return {@code true}, if something has changed (i.e. value is different than before)
-     * @deprecated use {@link PreferencesUtils#putListBounded(IPreferences, String, int, List)}
-     */
-    @Deprecated
-    public boolean putCollectionBounded(String key, int maxsize, Collection<String> val) {
-        List<String> newCollection = new ArrayList<>(Math.min(maxsize, val.size()));
-        for (String i : val) {
-            if (newCollection.size() >= maxsize) {
-                break;
-            }
-            newCollection.add(i);
-        }
-        return putList(key, newCollection);
-    }
-
-    /**
-     * Used to read a 2-dimensional array of strings from the preference file.
-     * If not a single entry could be found, <code>def</code> is returned.
-     * @param key preference key
-     * @param def default array value
-     * @return array value
-     * @deprecated use {@link #getListOfLists(java.lang.String, java.util.List)}
-     */
-    @Deprecated
-    @SuppressWarnings({ "unchecked", "rawtypes" })
-    public synchronized Collection<Collection<String>> getArray(String key, Collection<Collection<String>> def) {
-        ListListSetting val = getSetting(key, ListListSetting.create(def), ListListSetting.class);
-        return (Collection) val.getValue();
-    }
-
-    /**
-     * Gets a collection of string collections for the given key
-     * @param key The key
-     * @return The collection of string collections or an empty collection as default
-     * @deprecated use {@link IPreferences#getListOfLists(java.lang.String)}
-     */
-    @Deprecated
-    public Collection<Collection<String>> getArray(String key) {
-        Collection<Collection<String>> res = getArray(key, null);
-        return res == null ? Collections.<Collection<String>>emptyList() : res;
-    }
-
-    /**
-     * Put an array.
-     * @param key key
-     * @param value value
-     * @return {@code true}, if something has changed (i.e. value is different than before)
-     * @deprecated use {@link IPreferences#putListOfLists(java.lang.String, java.util.List)}
-     */
-    @Deprecated
-    public boolean putArray(String key, Collection<Collection<String>> value) {
-        return putSetting(key, value == null ? null : ListListSetting.create(value));
-    }
-
-    /**
-     * Gets a collection of key/value maps.
-     * @param key The key to search at
-     * @param def The default value to use
-     * @return The stored value or the default one if it could not be parsed
-     * @deprecated use {@link IPreferences#getListOfMaps(java.lang.String, java.util.List)}
-     */
-    @Deprecated
-    public Collection<Map<String, String>> getListOfStructs(String key, Collection<Map<String, String>> def) {
-        return getSetting(key, new MapListSetting(def == null ? null : new ArrayList<>(def)), MapListSetting.class).getValue();
-    }
-
-    /**
-     * Stores a list of structs
-     * @param key The key to store the list in
-     * @param value A list of key/value maps
-     * @return <code>true</code> if the value was changed
-     * @see #getListOfMaps(java.lang.String, java.util.List)
-     * @deprecated use {@link IPreferences#putListOfMaps(java.lang.String, java.util.List)}
-     */
-    @Deprecated
-    public boolean putListOfStructs(String key, Collection<Map<String, String>> value) {
-        return putSetting(key, value == null ? null : new MapListSetting(new ArrayList<>(value)));
-    }
-
-    /**
-     * Annotation used for converting objects to String Maps and vice versa.
-     * Indicates that a certain field should be considered in the conversion process. Otherwise it is ignored.
-     *
-     * @see #serializeStruct(java.lang.Object, java.lang.Class)
-     * @see #deserializeStruct(java.util.Map, java.lang.Class)
-     * @deprecated use {@link StructUtils.StructEntry}
-     */
-    @Deprecated
-    @Retention(RetentionPolicy.RUNTIME) // keep annotation at runtime
-    public @interface pref { }
-
-    /**
-     * Annotation used for converting objects to String Maps.
-     * Indicates that a certain field should be written to the map, even if the value is the same as the default value.
-     *
-     * @see #serializeStruct(java.lang.Object, java.lang.Class)
-     * @deprecated use {@link StructUtils.WriteExplicitly}
-     */
-    @Deprecated
-    @Retention(RetentionPolicy.RUNTIME) // keep annotation at runtime
-    public @interface writeExplicitly { }
-
-    /**
-     * Get a list of hashes which are represented by a struct-like class.
-     * Possible properties are given by fields of the class klass that have the @pref annotation.
-     * Default constructor is used to initialize the struct objects, properties then override some of these default values.
-     * @param <T> klass type
-     * @param key main preference key
-     * @param klass The struct class
-     * @return a list of objects of type T or an empty list if nothing was found
-     * @deprecated use {@link StructUtils#getListOfStructs(IPreferences, String, Class)}
-     */
-    @Deprecated
-    public <T> List<T> getListOfStructs(String key, Class<T> klass) {
-        return StructUtils.getListOfStructs(this, key, klass);
-    }
-
-    /**
-     * same as above, but returns def if nothing was found
-     * @param <T> klass type
-     * @param key main preference key
-     * @param def default value
-     * @param klass The struct class
-     * @return a list of objects of type T or {@code def} if nothing was found
-     * @deprecated use {@link StructUtils#getListOfStructs(IPreferences, String, Collection, Class)}
-     */
-    @Deprecated
-    public <T> List<T> getListOfStructs(String key, Collection<T> def, Class<T> klass) {
-        return StructUtils.getListOfStructs(this, key, def, klass);
-    }
-
-    /**
-     * Convenience method that saves a MapListSetting which is provided as a collection of objects.
-     *
-     * Each object is converted to a <code>Map&lt;String, String&gt;</code> using the fields with {@link pref} annotation.
-     * The field name is the key and the value will be converted to a string.
-     *
-     * Considers only fields that have the @pref annotation.
-     * In addition it does not write fields with null values. (Thus they are cleared)
-     * Default values are given by the field values after default constructor has been called.
-     * Fields equal to the default value are not written unless the field has the @writeExplicitly annotation.
-     * @param <T> the class,
-     * @param key main preference key
-     * @param val the list that is supposed to be saved
-     * @param klass The struct class
-     * @return true if something has changed
-     * @deprecated use {@link StructUtils#putListOfStructs(IPreferences, String, Collection, Class)}
-     */
-    @Deprecated
-    public <T> boolean putListOfStructs(String key, Collection<T> val, Class<T> klass) {
-        return StructUtils.putListOfStructs(this, key, val, klass);
-    }
-
-    /**
-     * Convert an object to a String Map, by using field names and values as map key and value.
-     *
-     * The field value is converted to a String.
-     *
-     * Only fields with annotation {@link pref} are taken into account.
-     *
-     * Fields will not be written to the map if the value is null or unchanged
-     * (compared to an object created with the no-arg-constructor).
-     * The {@link writeExplicitly} annotation overrides this behavior, i.e. the default value will also be written.
-     *
-     * @param <T> the class of the object <code>struct</code>
-     * @param struct the object to be converted
-     * @param klass the class T
-     * @return the resulting map (same data content as <code>struct</code>)
-     * @deprecated use {@link StructUtils#serializeStruct(java.lang.Object, java.lang.Class)}
-     */
-    @Deprecated
-    public static <T> Map<String, String> serializeStruct(T struct, Class<T> klass) {
-        return StructUtils.serializeStruct(struct, klass);
-    }
-
-    /**
-     * Converts a String-Map to an object of a certain class, by comparing map keys to field names of the class and assigning
-     * map values to the corresponding fields.
-     *
-     * The map value (a String) is converted to the field type. Supported types are: boolean, Boolean, int, Integer, double,
-     * Double, String, Map&lt;String, String&gt; and Map&lt;String, List&lt;String&gt;&gt;.
-     *
-     * Only fields with annotation {@link pref} are taken into account.
-     * @param <T> the class
-     * @param hash the string map with initial values
-     * @param klass the class T
-     * @return an object of class T, initialized as described above
-     * @deprecated use {@link StructUtils#deserializeStruct(java.util.Map, java.lang.Class)}
-     */
-    @Deprecated
-    public static <T> T deserializeStruct(Map<String, String> hash, Class<T> klass) {
-        return StructUtils.deserializeStruct(hash, klass);
-    }
-
     @Override
     public Set<String> getKeySet() {
Index: trunk/src/org/openstreetmap/josm/data/StructUtils.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/StructUtils.java	(revision 13171)
+++ trunk/src/org/openstreetmap/josm/data/StructUtils.java	(revision 13173)
@@ -148,5 +148,4 @@
      * @return the resulting map (same data content as <code>struct</code>)
      */
-    @SuppressWarnings("deprecation")
     public static <T> Map<String, String> serializeStruct(T struct, Class<T> klass) {
         T structPrototype;
@@ -159,5 +158,5 @@
         Map<String, String> hash = new LinkedHashMap<>();
         for (Field f : klass.getDeclaredFields()) {
-            if (f.getAnnotation(Preferences.pref.class) == null && f.getAnnotation(StructEntry.class) == null) {
+            if (f.getAnnotation(StructEntry.class) == null) {
                 continue;
             }
@@ -167,5 +166,4 @@
                 Object defaultFieldValue = f.get(structPrototype);
                 if (fieldValue != null && (
-                        f.getAnnotation(Preferences.writeExplicitly.class) != null ||
                         f.getAnnotation(WriteExplicitly.class) != null ||
                         !Objects.equals(fieldValue, defaultFieldValue))) {
@@ -216,5 +214,5 @@
                 continue;
             }
-            if (f.getAnnotation(Preferences.pref.class) == null && f.getAnnotation(StructEntry.class) == null) {
+            if (f.getAnnotation(StructEntry.class) == null) {
                 continue;
             }
Index: trunk/src/org/openstreetmap/josm/data/coor/Coordinate.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/coor/Coordinate.java	(revision 13171)
+++ trunk/src/org/openstreetmap/josm/data/coor/Coordinate.java	(revision 13173)
@@ -4,6 +4,4 @@
 import java.io.Serializable;
 import java.util.Objects;
-
-import org.openstreetmap.josm.data.osm.BBox;
 
 /**
@@ -92,18 +90,4 @@
     }
 
-    /**
-     * Creates bbox around this coordinate. Coordinate defines
-     * center of bbox, its edge will be 2*r.
-     *
-     * @param r size
-     * @return BBox around this coordinate
-     * @since 6203
-     * @deprecated use {@link BBox#BBox(double, double, double)} instead
-     */
-    @Deprecated
-    public BBox toBBox(final double r) {
-        return new BBox(x, y, r);
-    }
-
     @Override
     public int hashCode() {
Index: trunk/src/org/openstreetmap/josm/data/coor/CoordinateFormat.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/coor/CoordinateFormat.java	(revision 13171)
+++ 	(revision )
@@ -1,94 +1,0 @@
-// License: GPL. For details, see LICENSE file.
-package org.openstreetmap.josm.data.coor;
-
-import static org.openstreetmap.josm.tools.I18n.tr;
-
-import org.openstreetmap.josm.data.coor.conversion.CoordinateFormatManager;
-import org.openstreetmap.josm.data.coor.conversion.DMSCoordinateFormat;
-import org.openstreetmap.josm.data.coor.conversion.DecimalDegreesCoordinateFormat;
-import org.openstreetmap.josm.data.coor.conversion.ICoordinateFormat;
-import org.openstreetmap.josm.data.coor.conversion.NauticalCoordinateFormat;
-import org.openstreetmap.josm.data.coor.conversion.ProjectedCoordinateFormat;
-
-/**
- * An enumeration  of coordinate formats
- * @since 1990
- * @deprecated use {@link CoordinateFormatManager}
- */
-@Deprecated
-public enum CoordinateFormat {
-
-    /**
-     * the decimal format 999.999
-     */
-    DECIMAL_DEGREES(tr("Decimal Degrees"), DecimalDegreesCoordinateFormat.INSTANCE),
-
-    /**
-     * the degrees/minutes/seconds format 9 deg 99 min 99 sec
-     */
-    DEGREES_MINUTES_SECONDS(tr("deg\u00B0 min'' sec\""), DMSCoordinateFormat.INSTANCE),
-
-    /**
-     * the nautical format
-     */
-    NAUTICAL(tr("deg\u00B0 min'' (Nautical)"), NauticalCoordinateFormat.INSTANCE),
-
-    /**
-     * coordinates East/North
-     */
-    EAST_NORTH(tr("Projected Coordinates"), ProjectedCoordinateFormat.INSTANCE);
-
-    private final String displayName;
-    private final ICoordinateFormat migration;
-
-    CoordinateFormat(String displayName, ICoordinateFormat migration) {
-        this.displayName = displayName;
-        this.migration = migration;
-    }
-
-    /**
-     * Replies the display name of the format
-     *
-     * @return the display name
-     */
-    public String getDisplayName() {
-        return displayName;
-    }
-
-    /**
-     * Returns the corresponding {@link ICoordinateFormat} instance for
-     * migration.
-     * @return the corresponding {@link ICoordinateFormat} instance for
-     * migration
-     */
-    public ICoordinateFormat getICoordinateFormat() {
-        return migration;
-    }
-
-    @Override
-    public String toString() {
-        return getDisplayName();
-    }
-
-    private static volatile CoordinateFormat defaultCoordinateFormat = DECIMAL_DEGREES;
-
-    /**
-     * Replies the default coordinate format to be use
-     *
-     * @return the default coordinate format
-     */
-    public static CoordinateFormat getDefaultFormat() {
-        return defaultCoordinateFormat;
-    }
-
-    /**
-     * Sets the default coordinate format
-     *
-     * @param format the default coordinate format
-     */
-    public static void setCoordinateFormat(CoordinateFormat format) {
-        if (format != null) {
-            defaultCoordinateFormat = format;
-        }
-    }
-}
Index: trunk/src/org/openstreetmap/josm/data/coor/ILatLon.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/coor/ILatLon.java	(revision 13171)
+++ trunk/src/org/openstreetmap/josm/data/coor/ILatLon.java	(revision 13173)
@@ -2,5 +2,4 @@
 package org.openstreetmap.josm.data.coor;
 
-import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.data.projection.Projecting;
 
@@ -39,17 +38,4 @@
 
     /**
-     * <p>Replies the projected east/north coordinates.</p>
-     *
-     * <p>Uses the {@link Main#getProjection() global projection} to project the lat/lon-coordinates.</p>
-     *
-     * @return the east north coordinates or {@code null} if #is
-     * @deprecated use {@link #getEastNorth(org.openstreetmap.josm.data.projection.Projecting)}
-     */
-    @Deprecated
-    default EastNorth getEastNorth() {
-        return getEastNorth(Main.getProjection());
-    }
-
-    /**
      * Replies the projected east/north coordinates.
      * <p>
Index: trunk/src/org/openstreetmap/josm/data/coor/LatLon.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/coor/LatLon.java	(revision 13171)
+++ trunk/src/org/openstreetmap/josm/data/coor/LatLon.java	(revision 13173)
@@ -9,5 +9,4 @@
 import static java.lang.Math.sqrt;
 import static org.openstreetmap.josm.data.projection.Ellipsoid.WGS84;
-import static org.openstreetmap.josm.tools.I18n.trc;
 import static org.openstreetmap.josm.tools.Utils.toRadians;
 
@@ -15,5 +14,4 @@
 import java.text.DecimalFormat;
 import java.text.NumberFormat;
-import java.util.Arrays;
 import java.util.Locale;
 import java.util.Objects;
@@ -21,8 +19,4 @@
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.data.Bounds;
-import org.openstreetmap.josm.data.coor.conversion.DMSCoordinateFormat;
-import org.openstreetmap.josm.data.coor.conversion.DecimalDegreesCoordinateFormat;
-import org.openstreetmap.josm.data.coor.conversion.LatLonParser;
-import org.openstreetmap.josm.data.coor.conversion.NauticalCoordinateFormat;
 import org.openstreetmap.josm.tools.Logging;
 import org.openstreetmap.josm.tools.Utils;
@@ -87,29 +81,4 @@
 
     /**
-     * Character denoting South, as string.
-     * @deprecated use {@link LatLonParser#SOUTH}
-     */
-    @Deprecated
-    public static final String SOUTH = trc("compass", "S");
-    /**
-     * Character denoting North, as string.
-     * @deprecated use {@link LatLonParser#NORTH}
-     */
-    @Deprecated
-    public static final String NORTH = trc("compass", "N");
-    /**
-     * Character denoting West, as string.
-     * @deprecated use {@link LatLonParser#WEST}
-     */
-    @Deprecated
-    public static final String WEST = trc("compass", "W");
-    /**
-     * Character denoting East, as string.
-     * @deprecated use {@link LatLonParser#EAST}
-     */
-    @Deprecated
-    public static final String EAST = trc("compass", "E");
-
-    /**
      * Replies true if lat is in the range [-90,90]
      *
@@ -185,50 +154,4 @@
 
     /**
-     * Replies the coordinate in degrees/minutes/seconds format
-     * @param pCoordinate The coordinate to convert
-     * @return The coordinate in degrees/minutes/seconds format
-     * @deprecated use {@link #degreesMinutesSeconds} instead
-     */
-    @Deprecated
-    public static String dms(double pCoordinate) {
-        return degreesMinutesSeconds(pCoordinate);
-    }
-
-    /**
-     * Replies the coordinate in degrees/minutes/seconds format
-     * @param pCoordinate The coordinate to convert
-     * @return The coordinate in degrees/minutes/seconds format
-     * @since 12561
-     * @deprecated use {@link DMSCoordinateFormat#degreesMinutesSeconds(double)}
-     */
-    @Deprecated
-    public static String degreesMinutesSeconds(double pCoordinate) {
-        return DMSCoordinateFormat.degreesMinutesSeconds(pCoordinate);
-    }
-
-    /**
-     * Replies the coordinate in degrees/minutes format
-     * @param pCoordinate The coordinate to convert
-     * @return The coordinate in degrees/minutes format
-     * @since 12537
-     * @deprecated use {@link NauticalCoordinateFormat#degreesMinutes(double)}
-     */
-    @Deprecated
-    public static String degreesMinutes(double pCoordinate) {
-        return NauticalCoordinateFormat.degreesMinutes(pCoordinate);
-    }
-
-    /**
-     * Replies the coordinate in degrees/minutes format
-     * @param pCoordinate The coordinate to convert
-     * @return The coordinate in degrees/minutes format
-     * @deprecated use {@link #degreesMinutes(double)} instead
-     */
-    @Deprecated
-    public static String dm(double pCoordinate) {
-        return degreesMinutes(pCoordinate);
-    }
-
-    /**
      * Constructs a new object representing the given latitude/longitude.
      * @param lat the latitude, i.e., the north-south position in degrees
@@ -252,29 +175,7 @@
     }
 
-    /**
-     * Formats the latitude part according to the given format
-     * @param d the coordinate format to use
-     * @return the formatted latitude
-     * @deprecated use {@link org.openstreetmap.josm.data.coor.conversion.ICoordinateFormat#latToString(ILatLon)}
-     */
-    @Deprecated
-    public String latToString(CoordinateFormat d) {
-        return d.getICoordinateFormat().latToString(this);
-    }
-
     @Override
     public double lon() {
         return x;
-    }
-
-    /**
-     * Formats the longitude part according to the given format
-     * @param d the coordinate format to use
-     * @return the formatted longitude
-     * @deprecated use {@link org.openstreetmap.josm.data.coor.conversion.ICoordinateFormat#lonToString(ILatLon)}
-     */
-    @Deprecated
-    public String lonToString(CoordinateFormat d) {
-        return d.getICoordinateFormat().lonToString(this);
     }
 
@@ -409,18 +310,4 @@
 
     /**
-     * Returns this lat/lon pair in human-readable format separated by {@code separator}.
-     * @param separator values separator
-     * @return String in the format {@code "1.23456[separator]2.34567"}
-     * @deprecated method removed without replacement
-     */
-    @Deprecated
-    public String toStringCSV(String separator) {
-        return Utils.join(separator, Arrays.asList(
-                DecimalDegreesCoordinateFormat.INSTANCE.latToString(this),
-                DecimalDegreesCoordinateFormat.INSTANCE.lonToString(this)
-        ));
-    }
-
-    /**
      * Interpolate between this and a other latlon
      * @param ll2 The other lat/lon object
@@ -506,15 +393,3 @@
                Double.compare(that.y, y) == 0;
     }
-
-    /**
-     * Parses the given string as lat/lon.
-     * @param coord String to parse
-     * @return parsed lat/lon
-     * @since 11045
-     * @deprecated use {@link LatLonParser#parse(java.lang.String)}
-     */
-    @Deprecated
-    public static LatLon parse(String coord) {
-        return LatLonParser.parse(coord);
-    }
 }
Index: trunk/src/org/openstreetmap/josm/data/oauth/OAuthAccessTokenHolder.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/oauth/OAuthAccessTokenHolder.java	(revision 13171)
+++ trunk/src/org/openstreetmap/josm/data/oauth/OAuthAccessTokenHolder.java	(revision 13173)
@@ -4,5 +4,4 @@
 import static org.openstreetmap.josm.tools.I18n.tr;
 
-import org.openstreetmap.josm.data.Preferences;
 import org.openstreetmap.josm.io.auth.CredentialsAgent;
 import org.openstreetmap.josm.io.auth.CredentialsAgentException;
@@ -165,32 +164,4 @@
 
     /**
-     * Initializes the content of this holder from the Access Token managed by the
-     * credential manager.
-     *
-     * @param pref the preferences. Must not be null.
-     * @param cm the credential manager. Must not be null.
-     * @throws IllegalArgumentException if cm is null
-     * @deprecated (since 12928) replaced by {@link #init(org.openstreetmap.josm.io.auth.CredentialsAgent)}
-     */
-    @Deprecated
-    public void init(Preferences pref, CredentialsAgent cm) {
-        CheckParameterUtil.ensureParameterNotNull(pref, "pref");
-        CheckParameterUtil.ensureParameterNotNull(cm, "cm");
-        OAuthToken token = null;
-        try {
-            token = cm.lookupOAuthAccessToken();
-        } catch (CredentialsAgentException e) {
-            Logging.error(e);
-            Logging.warn(tr("Failed to retrieve OAuth Access Token from credential manager"));
-            Logging.warn(tr("Current credential manager is of type ''{0}''", cm.getClass().getName()));
-        }
-        saveToPreferences = pref.getBoolean("oauth.access-token.save-to-preferences", true);
-        if (token != null) {
-            accessTokenKey = token.getKey();
-            accessTokenSecret = token.getSecret();
-        }
-    }
-
-    /**
      * Saves the content of this holder to the preferences and a credential store managed
      * by a credential manager.
@@ -216,32 +187,4 @@
 
     /**
-     * Saves the content of this holder to the preferences and a credential store managed
-     * by a credential manager.
-     *
-     * @param preferences the preferences. Must not be null.
-     * @param cm the credentials manager. Must not be null.
-     * @throws IllegalArgumentException if preferences is null
-     * @throws IllegalArgumentException if cm is null
-     * @deprecated (since 12928) replaced by {@link #save(org.openstreetmap.josm.io.auth.CredentialsAgent)}
-     */
-    @Deprecated
-    public void save(Preferences preferences, CredentialsAgent cm) {
-        CheckParameterUtil.ensureParameterNotNull(preferences, "preferences");
-        CheckParameterUtil.ensureParameterNotNull(cm, "cm");
-        preferences.putBoolean("oauth.access-token.save-to-preferences", saveToPreferences);
-        try {
-            if (!saveToPreferences) {
-                cm.storeOAuthAccessToken(null);
-            } else {
-                cm.storeOAuthAccessToken(new OAuthToken(accessTokenKey, accessTokenSecret));
-            }
-        } catch (CredentialsAgentException e) {
-            Logging.error(e);
-            Logging.warn(tr("Failed to store OAuth Access Token to credentials manager"));
-            Logging.warn(tr("Current credential manager is of type ''{0}''", cm.getClass().getName()));
-        }
-    }
-
-    /**
      * Clears the content of this holder
      */
Index: trunk/src/org/openstreetmap/josm/data/oauth/OAuthParameters.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/oauth/OAuthParameters.java	(revision 13171)
+++ trunk/src/org/openstreetmap/josm/data/oauth/OAuthParameters.java	(revision 13173)
@@ -5,5 +5,4 @@
 
 import org.openstreetmap.josm.Main;
-import org.openstreetmap.josm.data.Preferences;
 import org.openstreetmap.josm.io.OsmApi;
 import org.openstreetmap.josm.spi.preferences.Config;
@@ -96,24 +95,4 @@
 
     /**
-     * Replies a set of parameters as defined in the preferences.
-     *
-     * @param pref the preferences
-     * @return the parameters
-     * @deprecated (since 12928) replaced by {@link #createFromApiUrl(java.lang.String)}
-     */
-    @Deprecated
-    public static OAuthParameters createFromPreferences(Preferences pref) {
-        OAuthParameters parameters = createDefault(pref.get("osm-server.url"));
-        return new OAuthParameters(
-                pref.get("oauth.settings.consumer-key", parameters.getConsumerKey()),
-                pref.get("oauth.settings.consumer-secret", parameters.getConsumerSecret()),
-                pref.get("oauth.settings.request-token-url", parameters.getRequestTokenUrl()),
-                pref.get("oauth.settings.access-token-url", parameters.getAccessTokenUrl()),
-                pref.get("oauth.settings.authorise-url", parameters.getAuthoriseUrl()),
-                pref.get("oauth.settings.osm-login-url", parameters.getOsmLoginUrl()),
-                pref.get("oauth.settings.osm-logout-url", parameters.getOsmLogoutUrl()));
-    }
-
-    /**
      * Remembers the current values in the preferences.
      */
@@ -126,23 +105,4 @@
         Config.getPref().put("oauth.settings.osm-login-url", getOsmLoginUrl());
         Config.getPref().put("oauth.settings.osm-logout-url", getOsmLogoutUrl());
-    }
-
-    /**
-     * Remembers the current values in the preferences <code>pref</code>.
-     *
-     * @param pref the preferences. Must not be null.
-     * @throws IllegalArgumentException if pref is null.
-     * @deprecated (since 12928) replaced by {@link #rememberPreferences()}
-     */
-    @Deprecated
-    public void rememberPreferences(Preferences pref) {
-        CheckParameterUtil.ensureParameterNotNull(pref, "pref");
-        pref.put("oauth.settings.consumer-key", getConsumerKey());
-        pref.put("oauth.settings.consumer-secret", getConsumerSecret());
-        pref.put("oauth.settings.request-token-url", getRequestTokenUrl());
-        pref.put("oauth.settings.access-token-url", getAccessTokenUrl());
-        pref.put("oauth.settings.authorise-url", getAuthoriseUrl());
-        pref.put("oauth.settings.osm-login-url", getOsmLoginUrl());
-        pref.put("oauth.settings.osm-logout-url", getOsmLogoutUrl());
     }
 
Index: trunk/src/org/openstreetmap/josm/data/osm/Changeset.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/osm/Changeset.java	(revision 13171)
+++ trunk/src/org/openstreetmap/josm/data/osm/Changeset.java	(revision 13173)
@@ -105,14 +105,4 @@
 
     /**
-     * Visitor pattern.
-     * @param v visitor
-     * @deprecated no longer supported
-     */
-    @Deprecated
-    public void visit(org.openstreetmap.josm.data.osm.visitor.Visitor v) {
-        v.visit(this);
-    }
-
-    /**
      * Compares this changeset to another, based on their identifier.
      * @param other other changeset
Index: trunk/src/org/openstreetmap/josm/data/osm/DataSet.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/osm/DataSet.java	(revision 13171)
+++ trunk/src/org/openstreetmap/josm/data/osm/DataSet.java	(revision 13173)
@@ -55,5 +55,4 @@
 import org.openstreetmap.josm.data.projection.ProjectionChangeListener;
 import org.openstreetmap.josm.gui.progress.ProgressMonitor;
-import org.openstreetmap.josm.gui.tagging.ac.AutoCompletionManager;
 import org.openstreetmap.josm.tools.ListenerList;
 import org.openstreetmap.josm.tools.Logging;
@@ -208,5 +207,5 @@
         // the listener, projection change listeners are managed as WeakReferences.
         Main.addProjectionChangeListener(this);
-        addSelectionListener((DataSelectionListener) e -> fireDeprecatedSelectionChange(e.getSelection()));
+        addSelectionListener((DataSelectionListener) e -> fireSelectionChange(e.getSelection()));
     }
 
@@ -335,14 +334,4 @@
 
     /**
-     * Returns the autocompletion manager, which maintains a list of used tags for autocompletion.
-     * @return the autocompletion manager
-     * @deprecated to be removed end of 2017. Use {@link AutoCompletionManager#of(DataSet)} instead.
-     */
-    @Deprecated
-    public AutoCompletionManager getAutoCompletionManager() {
-        return AutoCompletionManager.of(this);
-    }
-
-    /**
      * The API version that created this data set, if any.
      */
@@ -365,29 +354,4 @@
     public void setVersion(String version) {
         this.version = version;
-    }
-
-    /**
-     * Determines if upload is being discouraged.
-     * (i.e. this dataset contains private data which should not be uploaded)
-     * @return {@code true} if upload is being discouraged, {@code false} otherwise
-     * @see #setUploadDiscouraged
-     * @deprecated use {@link #getUploadPolicy()}
-     */
-    @Deprecated
-    public boolean isUploadDiscouraged() {
-        return uploadPolicy == UploadPolicy.DISCOURAGED || uploadPolicy == UploadPolicy.BLOCKED;
-    }
-
-    /**
-     * Sets the "upload discouraged" flag.
-     * @param uploadDiscouraged {@code true} if this dataset contains private data which should not be uploaded
-     * @see #isUploadDiscouraged
-     * @deprecated use {@link #setUploadPolicy(UploadPolicy)}
-     */
-    @Deprecated
-    public void setUploadDiscouraged(boolean uploadDiscouraged) {
-        if (uploadPolicy != UploadPolicy.BLOCKED) {
-            this.uploadPolicy = uploadDiscouraged ? UploadPolicy.DISCOURAGED : UploadPolicy.NORMAL;
-        }
     }
 
@@ -676,15 +640,5 @@
     }
 
-    /**
-     * Notifies all registered {@link SelectionChangedListener} about the current selection in
-     * this dataset.
-     * @deprecated You should never need to do this from the outside.
-     */
-    @Deprecated
-    public void fireSelectionChanged() {
-        fireDeprecatedSelectionChange(getAllSelected());
-    }
-
-    private static void fireDeprecatedSelectionChange(Collection<? extends OsmPrimitive> currentSelection) {
+    private static void fireSelectionChange(Collection<? extends OsmPrimitive> currentSelection) {
         for (SelectionChangedListener l : selListeners) {
             l.selectionChanged(currentSelection);
@@ -827,17 +781,4 @@
         highlightedWaySegments = waySegments;
         fireHighlightingChanged();
-    }
-
-    /**
-     * Sets the current selection to the primitives in <code>selection</code>.
-     * Notifies all {@link SelectionChangedListener} if <code>fireSelectionChangeEvent</code> is true.
-     *
-     * @param selection the selection
-     * @param fireSelectionChangeEvent true, if the selection change listeners are to be notified; false, otherwise
-     * @deprecated Use {@link #setSelected(Collection)} instead. To be removed end of 2017. Does not seem to be used by plugins.
-     */
-    @Deprecated
-    public void setSelected(Collection<? extends PrimitiveId> selection, boolean fireSelectionChangeEvent) {
-        setSelected(selection);
     }
 
Index: trunk/src/org/openstreetmap/josm/data/osm/Node.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/osm/Node.java	(revision 13171)
+++ trunk/src/org/openstreetmap/josm/data/osm/Node.java	(revision 13173)
@@ -93,11 +93,7 @@
      * Uses the {@link Main#getProjection() global projection} to project the lat/lon-coordinates.
      * <p>
-     * Method {@link org.openstreetmap.josm.data.coor.ILatLon#getEastNorth()} of
-     * implemented interface <code>ILatLon</code> is deprecated, but this method is not.
      * @return the east north coordinates or {@code null} if {@link #isLatLonKnown()}
      * is false.
      */
-    @SuppressWarnings("deprecation")
-    @Override
     public EastNorth getEastNorth() {
         return getEastNorth(Main.getProjection());
@@ -223,13 +219,4 @@
     }
 
-    /**
-     * @deprecated no longer supported
-     */
-    @Override
-    @Deprecated
-    public void accept(org.openstreetmap.josm.data.osm.visitor.Visitor visitor) {
-        visitor.visit(this);
-    }
-
     @Override
     public void accept(OsmPrimitiveVisitor visitor) {
Index: trunk/src/org/openstreetmap/josm/data/osm/NodeData.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/osm/NodeData.java	(revision 13171)
+++ trunk/src/org/openstreetmap/josm/data/osm/NodeData.java	(revision 13173)
@@ -75,15 +75,4 @@
     }
 
-    /**
-     * @deprecated use {@link #getEastNorth(org.openstreetmap.josm.data.projection.Projecting)}
-     */
-    @Override
-    @Deprecated
-    public EastNorth getEastNorth() {
-        // No internal caching of projected coordinates needed. In contrast to getEastNorth()
-        // on Node, this method is rarely used. Caching would be overkill.
-        return Main.getProjection().latlon2eastNorth(getCoor());
-    }
-
     @Override
     public void setEastNorth(EastNorth eastNorth) {
Index: trunk/src/org/openstreetmap/josm/data/osm/OsmPrimitive.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/osm/OsmPrimitive.java	(revision 13171)
+++ trunk/src/org/openstreetmap/josm/data/osm/OsmPrimitive.java	(revision 13173)
@@ -1024,15 +1024,4 @@
 
     /**
-     * <p>Visits {@code org.openstreetmap.josm.data.osm.visitor.Visitor} for all referrers.</p>
-     *
-     * @param visitor the visitor. Ignored, if null.
-     * @deprecated use {@link #visitReferrers(OsmPrimitiveVisitor)}
-     */
-    @Deprecated
-    public void visitReferrers(org.openstreetmap.josm.data.osm.visitor.Visitor visitor) {
-        visitReferrers((OsmPrimitiveVisitor) visitor);
-    }
-
-    /**
      * <p>Visits {@code visitor} for all referrers.</p>
      *
@@ -1090,13 +1079,4 @@
      * visitor function.
      * @param visitor The visitor from which the visit() function must be called.
-     * @deprecated will be removed along with {@link org.openstreetmap.josm.data.osm.visitor.Visitor}
-     */
-    @Deprecated
-    public abstract void accept(org.openstreetmap.josm.data.osm.visitor.Visitor visitor);
-
-    /**
-     * Implementation of the visitor scheme. Subclasses have to call the correct
-     * visitor function.
-     * @param visitor The visitor from which the visit() function must be called.
      * @since 12809
      */
Index: trunk/src/org/openstreetmap/josm/data/osm/Relation.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/osm/Relation.java	(revision 13171)
+++ trunk/src/org/openstreetmap/josm/data/osm/Relation.java	(revision 13173)
@@ -174,13 +174,4 @@
     public OsmPrimitiveType getMemberType(int idx) {
         return members[idx].getType();
-    }
-
-    /**
-     * @deprecated no longer supported
-     */
-    @Override
-    @Deprecated
-    public void accept(org.openstreetmap.josm.data.osm.visitor.Visitor visitor) {
-        visitor.visit(this);
     }
 
Index: trunk/src/org/openstreetmap/josm/data/osm/Way.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/osm/Way.java	(revision 13171)
+++ trunk/src/org/openstreetmap/josm/data/osm/Way.java	(revision 13173)
@@ -205,12 +205,4 @@
         }
         return chunkSet;
-    }
-
-    /**
-     * @deprecated no longer supported
-     */
-    @Deprecated
-    @Override public void accept(org.openstreetmap.josm.data.osm.visitor.Visitor visitor) {
-        visitor.visit(this);
     }
 
Index: trunk/src/org/openstreetmap/josm/data/osm/visitor/AbstractVisitor.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/osm/visitor/AbstractVisitor.java	(revision 13171)
+++ 	(revision )
@@ -1,21 +1,0 @@
-// License: GPL. For details, see LICENSE file.
-package org.openstreetmap.josm.data.osm.visitor;
-
-import org.openstreetmap.josm.data.osm.Changeset;
-
-/**
- * This class serves as a base class for most simple visitors,
- * blocking out the "changeset" visit so as to avoid cluttering
- * the visitors which are not interested.
- *
- * @author fred
- * @deprecated use {@link OsmPrimitiveVisitor}
- */
-@Deprecated
-public abstract class AbstractVisitor implements Visitor {
-
-    @Override
-    public void visit(Changeset cs) {
-        // do nothing
-    }
-}
Index: trunk/src/org/openstreetmap/josm/data/osm/visitor/Visitor.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/osm/visitor/Visitor.java	(revision 13171)
+++ 	(revision )
@@ -1,20 +1,0 @@
-// License: GPL. For details, see LICENSE file.
-package org.openstreetmap.josm.data.osm.visitor;
-
-import org.openstreetmap.josm.data.osm.Changeset;
-
-/**
- * Implementation of the visitor scheme. Every @{link org.openstreetmap.josm.data.OsmPrimitive}
- * can be visited by several different visitors.
- * @since 8
- * @deprecated class will be removed (use {@link OsmPrimitiveVisitor} if suitable)
- */
-@Deprecated
-public interface Visitor extends OsmPrimitiveVisitor {
-    /**
-     * Visiting call for changesets.
-     * @param cs The changeset to inspect.
-     * @since 1523
-     */
-    void visit(Changeset cs);
-}
Index: trunk/src/org/openstreetmap/josm/data/osm/visitor/paint/StyledMapRenderer.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/osm/visitor/paint/StyledMapRenderer.java	(revision 13171)
+++ trunk/src/org/openstreetmap/josm/data/osm/visitor/paint/StyledMapRenderer.java	(revision 13173)
@@ -472,23 +472,4 @@
      * be replaced by plain fill, when it covers a certain fraction of the total area
      * @param disabled If this should be drawn with a special disabled style.
-     * @param text Ignored. Use {@link #drawText} instead.
-     * @deprecated use {@link #drawArea(Relation r, Color color, MapImage fillImage, Float extent, Float extentThreshold, boolean disabled)}
-     */
-    @Deprecated
-    public void drawArea(Relation r, Color color, MapImage fillImage, Float extent, Float extentThreshold, boolean disabled, TextLabel text) {
-        drawArea(r, color, fillImage, extent, extentThreshold, disabled);
-    }
-
-    /**
-     * Draws a multipolygon area.
-     * @param r The multipolygon relation
-     * @param color The color to fill the area with.
-     * @param fillImage The image to fill the area with. Overrides color.
-     * @param extent if not null, area will be filled partially; specifies, how
-     * far to fill from the boundary towards the center of the area;
-     * if null, area will be filled completely
-     * @param extentThreshold if not null, determines if the partial filled should
-     * be replaced by plain fill, when it covers a certain fraction of the total area
-     * @param disabled If this should be drawn with a special disabled style.
      * @since 12285
      */
@@ -516,23 +497,4 @@
             }
         }
-    }
-
-    /**
-     * Draws an area defined by a way. They way does not need to be closed, but it should.
-     * @param w The way.
-     * @param color The color to fill the area with.
-     * @param fillImage The image to fill the area with. Overrides color.
-     * @param extent if not null, area will be filled partially; specifies, how
-     * far to fill from the boundary towards the center of the area;
-     * if null, area will be filled completely
-     * @param extentThreshold if not null, determines if the partial filled should
-     * be replaced by plain fill, when it covers a certain fraction of the total area
-     * @param disabled If this should be drawn with a special disabled style.
-     * @param text Ignored. Use {@link #drawText} instead.
-     * @deprecated use {@link #drawArea(Way w, Color color, MapImage fillImage, Float extent, Float extentThreshold, boolean disabled)}
-     */
-    @Deprecated
-    public void drawArea(Way w, Color color, MapImage fillImage, Float extent, Float extentThreshold, boolean disabled, TextLabel text) {
-        drawArea(w, color, fillImage, extent, extentThreshold, disabled);
     }
 
Index: trunk/src/org/openstreetmap/josm/data/preferences/CollectionProperty.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/preferences/CollectionProperty.java	(revision 13171)
+++ 	(revision )
@@ -1,35 +1,0 @@
-// License: GPL. For details, see LICENSE file.
-package org.openstreetmap.josm.data.preferences;
-
-import java.util.ArrayList;
-import java.util.Collection;
-
-/**
- * A property containing a {@code Collection} of {@code String} as value.
- * @deprecated use {@link ListProperty}
- */
-@Deprecated
-public class CollectionProperty extends AbstractProperty<Collection<String>> {
-
-    /**
-     * Constructs a new {@code CollectionProperty}.
-     * @param key The property key
-     * @param defaultValue The default value
-     */
-    public CollectionProperty(String key, Collection<String> defaultValue) {
-        super(key, defaultValue);
-        if (getPreferences() != null) {
-            get();
-        }
-    }
-
-    @Override
-    public Collection<String> get() {
-        return getPreferences().getList(getKey(), new ArrayList<>(getDefaultValue()));
-    }
-
-    @Override
-    public boolean put(Collection<String> value) {
-        return getPreferences().putList(getKey(), new ArrayList<>(value));
-    }
-}
Index: trunk/src/org/openstreetmap/josm/data/projection/CustomProjection.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/projection/CustomProjection.java	(revision 13171)
+++ trunk/src/org/openstreetmap/josm/data/projection/CustomProjection.java	(revision 13173)
@@ -210,18 +210,4 @@
      * @param code unique code for this projection - may be null
      * @param pref the string that defines the custom projection
-     * @param cacheDir cache directory name
-     * @deprecated unused - remove in 2017-09
-     */
-    @Deprecated
-    public CustomProjection(String name, String code, String pref, String cacheDir) {
-        this(name, code, pref);
-    }
-
-    /**
-     * Constructs a new {@code CustomProjection} with given name, code and parameters.
-     *
-     * @param name describe projection in one or two words
-     * @param code unique code for this projection - may be null
-     * @param pref the string that defines the custom projection
      */
     public CustomProjection(String name, String code, String pref) {
@@ -693,18 +679,4 @@
     }
 
-    /**
-     * {@inheritDoc}
-     * @deprecated unused - remove in 2017-09
-     */
-    @Override
-    @Deprecated
-    public String getCacheDirectoryName() {
-        if (cacheDir != null) {
-            return cacheDir;
-        } else {
-            return "proj-" + Utils.md5Hex(pref == null ? "" : pref).substring(0, 4);
-        }
-    }
-
     @Override
     public Bounds getWorldBoundsLatLon() {
Index: trunk/src/org/openstreetmap/josm/data/projection/Projection.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/projection/Projection.java	(revision 13171)
+++ trunk/src/org/openstreetmap/josm/data/projection/Projection.java	(revision 13173)
@@ -52,12 +52,4 @@
      */
     String toCode();
-
-    /**
-     * Get a filename compatible string (for the cache directory).
-     * @return the cache directory name (base name)
-     * @deprecated unused - remove in 2017-07
-     */
-    @Deprecated
-    String getCacheDirectoryName();
 
     /**
Index: trunk/src/org/openstreetmap/josm/data/projection/Projections.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/projection/Projections.java	(revision 13171)
+++ trunk/src/org/openstreetmap/josm/data/projection/Projections.java	(revision 13173)
@@ -18,8 +18,4 @@
 import java.util.regex.Pattern;
 
-import org.openstreetmap.josm.Main;
-import org.openstreetmap.josm.data.coor.EastNorth;
-import org.openstreetmap.josm.data.coor.ILatLon;
-import org.openstreetmap.josm.data.coor.LatLon;
 import org.openstreetmap.josm.data.projection.datum.Datum;
 import org.openstreetmap.josm.data.projection.datum.GRS80Datum;
@@ -181,43 +177,4 @@
 
     /**
-     * Convert from lat/lon to easting/northing using the current projection.
-     *
-     * @param ll the geographical point to convert (in WGS84 lat/lon)
-     * @return the corresponding east/north coordinates
-     * @since 12725
-     * @deprecated use <code>Main.getProjection().latlon2eastNorth(ll)</code>
-     */
-    @Deprecated
-    public static EastNorth project(ILatLon ll) {
-        if (ll == null) return null;
-        return Main.getProjection().latlon2eastNorth(ll);
-    }
-
-    /**
-     * Convert from lat/lon to easting/northing using the current projection.
-     *
-     * @param ll the geographical point to convert (in WGS84 lat/lon)
-     * @return the corresponding east/north coordinates
-     * @deprecated use <code>Main.getProjection().latlon2eastNorth(ll)</code>
-     */
-    @Deprecated
-    public static EastNorth project(LatLon ll) {
-        return project((ILatLon) ll);
-    }
-
-    /**
-     * Convert from easting/norting to lat/lon using the current projection.
-     *
-     * @param en the geographical point to convert (in projected coordinates)
-     * @return the corresponding lat/lon (WGS84)
-     * @deprecated use <code>Main.getProjection().eastNorth2latlon(en)</code>
-     */
-    @Deprecated
-    public static LatLon inverseProject(EastNorth en) {
-        if (en == null) return null;
-        return Main.getProjection().eastNorth2latlon(en);
-    }
-
-    /**
      * Plugins can register additional base projections.
      *
Index: trunk/src/org/openstreetmap/josm/data/tagging/ac/AutoCompletionItem.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/tagging/ac/AutoCompletionItem.java	(revision 13171)
+++ trunk/src/org/openstreetmap/josm/data/tagging/ac/AutoCompletionItem.java	(revision 13173)
@@ -1,6 +1,4 @@
 // License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.data.tagging.ac;
-
-import org.openstreetmap.josm.tools.CheckParameterUtil;
 
 /**
@@ -75,16 +73,4 @@
     }
 
-    /**
-     * sets the value
-     * @param value the value; must not be null
-     * @throws IllegalArgumentException if value if null
-     * @deprecated value is now final, set it when constructing the object
-     */
-    @Deprecated
-    public void setValue(String value) {
-        CheckParameterUtil.ensureParameterNotNull(value, "value");
-        throw new UnsupportedOperationException("setValue() is no longer supported");
-    }
-
     @Override
     public String toString() {
Index: trunk/src/org/openstreetmap/josm/gui/JosmUserIdentityManager.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/JosmUserIdentityManager.java	(revision 13171)
+++ 	(revision )
@@ -1,197 +1,0 @@
-// License: GPL. For details, see LICENSE file.
-package org.openstreetmap.josm.gui;
-
-import org.openstreetmap.josm.spi.preferences.PreferenceChangeEvent;
-import org.openstreetmap.josm.data.UserIdentityManager;
-import org.openstreetmap.josm.data.osm.User;
-import org.openstreetmap.josm.data.osm.UserInfo;
-
-/**
- * JosmUserIdentityManager is a global object which keeps track of what JOSM knows about
- * the identity of the current user.
- *
- * JOSM can be operated anonymously provided the current user never invokes an operation
- * on the OSM server which required authentication. In this case JOSM neither knows
- * the user name of the OSM account of the current user nor its unique id. Perhaps the
- * user doesn't have one.
- *
- * If the current user supplies a user name and a password in the JOSM preferences JOSM
- * can partially identify the user.
- *
- * The current user is fully identified if JOSM knows both the user name and the unique
- * id of the users OSM account. The latter is retrieved from the OSM server with a
- * <tt>GET /api/0.6/user/details</tt> request, submitted with the user name and password
- * of the current user.
- *
- * The global JosmUserIdentityManager listens to {@link PreferenceChangeEvent}s and keeps track
- * of what the current JOSM instance knows about the current user. Other subsystems can
- * let the global JosmUserIdentityManager know in case they fully identify the current user, see
- * {@link #setFullyIdentified}.
- *
- * The information kept by the JosmUserIdentityManager can be used to
- * <ul>
- *   <li>safely query changesets owned by the current user based on its user id, not on its user name</li>
- *   <li>safely search for objects last touched by the current user based on its user id, not on its user name</li>
- * </ul>
- * @since 2689 (creation)
- * @deprecated to be removed end of 2017. Use {@link UserIdentityManager} instead
- */
-@Deprecated
-public final class JosmUserIdentityManager {
-
-    private static JosmUserIdentityManager instance;
-
-    /**
-     * Replies the unique instance of the JOSM user identity manager
-     *
-     * @return the unique instance of the JOSM user identity manager
-     */
-    public static synchronized JosmUserIdentityManager getInstance() {
-        if (instance == null) {
-            instance = new JosmUserIdentityManager();
-            UserIdentityManager.getInstance();
-        }
-        return instance;
-    }
-
-    private JosmUserIdentityManager() {
-    }
-
-    /**
-     * Remembers the fact that the current JOSM user is anonymous.
-     */
-    public void setAnonymous() {
-        UserIdentityManager.getInstance().setAnonymous();
-    }
-
-    /**
-     * Remembers the fact that the current JOSM user is partially identified
-     * by the user name of its OSM account.
-     *
-     * @param userName the user name. Must not be null. Must not be empty (whitespace only).
-     * @throws IllegalArgumentException if userName is null
-     * @throws IllegalArgumentException if userName is empty
-     */
-    public void setPartiallyIdentified(String userName) {
-        UserIdentityManager.getInstance().setPartiallyIdentified(userName);
-    }
-
-    /**
-     * Remembers the fact that the current JOSM user is fully identified with a
-     * verified pair of user name and user id.
-     *
-     * @param userName the user name. Must not be null. Must not be empty.
-     * @param userInfo additional information about the user, retrieved from the OSM server and including the user id
-     * @throws IllegalArgumentException if userName is null
-     * @throws IllegalArgumentException if userName is empty
-     * @throws IllegalArgumentException if userInfo is null
-     */
-    public void setFullyIdentified(String userName, UserInfo userInfo) {
-        UserIdentityManager.getInstance().setFullyIdentified(userName, userInfo);
-    }
-
-    /**
-     * Replies true if the current JOSM user is anonymous.
-     *
-     * @return {@code true} if the current user is anonymous.
-     */
-    public boolean isAnonymous() {
-        return UserIdentityManager.getInstance().isAnonymous();
-    }
-
-    /**
-     * Replies true if the current JOSM user is partially identified.
-     *
-     * @return true if the current JOSM user is partially identified.
-     */
-    public boolean isPartiallyIdentified() {
-        return UserIdentityManager.getInstance().isPartiallyIdentified();
-    }
-
-    /**
-     * Replies true if the current JOSM user is fully identified.
-     *
-     * @return true if the current JOSM user is fully identified.
-     */
-    public boolean isFullyIdentified() {
-        return UserIdentityManager.getInstance().isFullyIdentified();
-    }
-
-    /**
-     * Replies the user name of the current JOSM user. null, if {@link #isAnonymous()} is true.
-     *
-     * @return  the user name of the current JOSM user
-     */
-    public String getUserName() {
-        return UserIdentityManager.getInstance().getUserName();
-    }
-
-    /**
-     * Replies the user id of the current JOSM user. 0, if {@link #isAnonymous()} or
-     * {@link #isPartiallyIdentified()} is true.
-     *
-     * @return  the user id of the current JOSM user
-     */
-    public int getUserId() {
-        return UserIdentityManager.getInstance().getUserId();
-    }
-
-    /**
-     * Replies verified additional information about the current user if the user is
-     * {@link #isFullyIdentified()}.
-     *
-     * @return verified additional information about the current user
-     */
-    public UserInfo getUserInfo() {
-        return UserIdentityManager.getInstance().getUserInfo();
-    }
-
-    /**
-     * Returns the identity as a {@link User} object
-     *
-     * @return the identity as user, or {@link User#getAnonymous()} if {@link #isAnonymous()}
-     */
-    public User asUser() {
-        return UserIdentityManager.getInstance().asUser();
-    }
-
-    /**
-     * Initializes the user identity manager from Basic Authentication values in the {@link org.openstreetmap.josm.data.Preferences}
-     * This method should be called if {@code osm-server.auth-method} is set to {@code basic}.
-     * @see #initFromOAuth
-     */
-    public void initFromPreferences() {
-        UserIdentityManager.getInstance().initFromPreferences();
-    }
-
-    /**
-     * Initializes the user identity manager from OAuth request of user details.
-     * This method should be called if {@code osm-server.auth-method} is set to {@code oauth}.
-     * @see #initFromPreferences
-     * @since 5434
-     */
-    public void initFromOAuth() {
-        UserIdentityManager.getInstance().initFromOAuth();
-    }
-
-    /**
-     * Replies true if the user with name <code>username</code> is the current user
-     *
-     * @param username the user name
-     * @return true if the user with name <code>username</code> is the current user
-     */
-    public boolean isCurrentUser(String username) {
-        return UserIdentityManager.getInstance().isCurrentUser(username);
-    }
-
-    /**
-     * Replies true if the current user is {@link #isFullyIdentified() fully identified} and the {@link #getUserId() user ids} match,
-     * or if the current user is not {@link #isFullyIdentified() fully identified} and the {@link #getUserName() user names} match.
-     *
-     * @param user the user to test
-     * @return true if given user is the current user
-     */
-    public boolean isCurrentUser(User user) {
-        return UserIdentityManager.getInstance().isCurrentUser(user);
-    }
-}
Index: trunk/src/org/openstreetmap/josm/gui/MainApplication.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/MainApplication.java	(revision 13171)
+++ trunk/src/org/openstreetmap/josm/gui/MainApplication.java	(revision 13173)
@@ -476,14 +476,10 @@
         if (mainFrame != null) {
             mainPanel = mainFrame.getPanel();
-            panel = mainPanel;
             mainFrame.initialize();
             menu = mainFrame.getMenu();
-            super.menu = menu;
         } else {
             // required for running some tests.
             mainPanel = new MainPanel(layerManager);
-            panel = mainPanel;
             menu = new MainMenu();
-            super.menu = menu;
         }
         mainPanel.addMapFrameListener((o, n) -> redoUndoListener.commandChanged(0, 0));
@@ -1026,5 +1022,4 @@
         setupUIManager();
         toolbar = new ToolbarPreferences();
-        Main.toolbar = toolbar;
         ProjectionPreference.setProjection();
         setupNadGridSources();
@@ -1051,6 +1046,6 @@
             mainFrame.setMaximized(true);
         }
-        if (main.menu.fullscreenToggleAction != null) {
-            main.menu.fullscreenToggleAction.initial();
+        if (menu.fullscreenToggleAction != null) {
+            menu.fullscreenToggleAction.initial();
         }
 
Index: trunk/src/org/openstreetmap/josm/gui/MainPanel.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/MainPanel.java	(revision 13171)
+++ trunk/src/org/openstreetmap/josm/gui/MainPanel.java	(revision 13173)
@@ -8,5 +8,4 @@
 import javax.swing.JPanel;
 
-import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.actions.mapmode.MapMode;
 import org.openstreetmap.josm.gui.layer.Layer;
@@ -66,5 +65,4 @@
         } else {
             map = null;
-            Main.map = map;
             MainApplication.map = map;
             add(getGettingStarted(), BorderLayout.CENTER);
@@ -90,5 +88,4 @@
         MapFrame mapFrame = new MapFrame(null);
         // Required by many components.
-        Main.map = mapFrame;
         MainApplication.map = mapFrame;
 
Index: trunk/src/org/openstreetmap/josm/gui/MapView.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/MapView.java	(revision 13171)
+++ trunk/src/org/openstreetmap/josm/gui/MapView.java	(revision 13173)
@@ -35,5 +35,4 @@
 import javax.swing.AbstractButton;
 import javax.swing.JComponent;
-import javax.swing.JPanel;
 import javax.swing.SwingUtilities;
 
@@ -255,18 +254,4 @@
      * Constructs a new {@code MapView}.
      * @param layerManager The layers to display.
-     * @param contentPane Ignored. Main content pane is used.
-     * @param viewportData the initial viewport of the map. Can be null, then
-     * the viewport is derived from the layer data.
-     * @since 10279
-     * @deprecated use {@link #MapView(MainLayerManager, ViewportData)} instead
-     */
-    @Deprecated
-    public MapView(MainLayerManager layerManager, final JPanel contentPane, final ViewportData viewportData) {
-        this(layerManager, viewportData);
-    }
-
-    /**
-     * Constructs a new {@code MapView}.
-     * @param layerManager The layers to display.
      * @param viewportData the initial viewport of the map. Can be null, then
      * the viewport is derived from the layer data.
Index: trunk/src/org/openstreetmap/josm/gui/io/CustomConfigurator.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/io/CustomConfigurator.java	(revision 13171)
+++ trunk/src/org/openstreetmap/josm/gui/io/CustomConfigurator.java	(revision 13173)
@@ -45,5 +45,4 @@
 import org.openstreetmap.josm.data.PreferencesUtils;
 import org.openstreetmap.josm.data.Version;
-import org.openstreetmap.josm.spi.preferences.Setting;
 import org.openstreetmap.josm.gui.MainApplication;
 import org.openstreetmap.josm.plugins.PluginDownloadTask;
@@ -51,4 +50,5 @@
 import org.openstreetmap.josm.plugins.ReadLocalPluginInformationTask;
 import org.openstreetmap.josm.spi.preferences.Config;
+import org.openstreetmap.josm.spi.preferences.Setting;
 import org.openstreetmap.josm.tools.LanguageInfo;
 import org.openstreetmap.josm.tools.Logging;
@@ -69,57 +69,4 @@
     private CustomConfigurator() {
         // Hide default constructor for utils classes
-    }
-
-    /**
-     * Log a formatted message.
-     * @param fmt format
-     * @param vars arguments
-     * @see String#format
-     * @deprecated to be removed end of 2017. Use {@link PreferencesUtils#log(String, Object...)} instead
-     */
-    @Deprecated
-    public static void log(String fmt, Object... vars) {
-        PreferencesUtils.log(fmt, vars);
-    }
-
-    /**
-     * Log a message.
-     * @param s message to log
-     * @deprecated to be removed end of 2017. Use {@link PreferencesUtils#log(String)} instead
-     */
-    @Deprecated
-    public static void log(String s) {
-        PreferencesUtils.log(s);
-    }
-
-    /**
-     * Log an exception.
-     * @param e exception to log
-     * @param s message prefix
-     * @since 10469
-     * @deprecated to be removed end of 2017. Use {@link PreferencesUtils#log(Exception, String)} instead
-     */
-    @Deprecated
-    public static void log(Exception e, String s) {
-        PreferencesUtils.log(e, s);
-    }
-
-    /**
-     * Returns the log.
-     * @return the log
-     * @deprecated to be removed end of 2017. Use {@link PreferencesUtils#getLog()} instead
-     */
-    @Deprecated
-    public static String getLog() {
-        return PreferencesUtils.getLog();
-    }
-
-    /**
-     * Resets the log.
-     * @deprecated to be removed end of 2017. Use {@link PreferencesUtils#resetLog()} instead
-     */
-    @Deprecated
-    public static void resetLog() {
-        PreferencesUtils.resetLog();
     }
 
Index: trunk/src/org/openstreetmap/josm/gui/layer/Layer.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/layer/Layer.java	(revision 13171)
+++ trunk/src/org/openstreetmap/josm/gui/layer/Layer.java	(revision 13173)
@@ -502,16 +502,4 @@
 
     /**
-     * Check changed status of layer
-     *
-     * @return True if layer was changed since last paint
-     * @deprecated This is not supported by multiple map views.
-     * Fire an {@link #invalidate()} to trigger a repaint.
-     */
-    @Deprecated
-    public boolean isChanged() {
-        return false;
-    }
-
-    /**
      * allows to check whether a projection is supported or not
      * @param proj projection
Index: trunk/src/org/openstreetmap/josm/gui/layer/markerlayer/Marker.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/layer/markerlayer/Marker.java	(revision 13171)
+++ trunk/src/org/openstreetmap/josm/gui/layer/markerlayer/Marker.java	(revision 13173)
@@ -23,6 +23,4 @@
 import javax.swing.ImageIcon;
 
-import org.openstreetmap.josm.Main;
-import org.openstreetmap.josm.spi.preferences.PreferenceChangeEvent;
 import org.openstreetmap.josm.data.coor.CachedLatLon;
 import org.openstreetmap.josm.data.coor.EastNorth;
@@ -35,4 +33,5 @@
 import org.openstreetmap.josm.data.preferences.IntegerProperty;
 import org.openstreetmap.josm.gui.MapView;
+import org.openstreetmap.josm.spi.preferences.PreferenceChangeEvent;
 import org.openstreetmap.josm.tools.ImageProvider;
 import org.openstreetmap.josm.tools.Logging;
@@ -336,14 +335,4 @@
 
     /**
-     * Returns the marker's projected coordinates.
-     * @return The marker's projected coordinates (easting/northing)
-     * @deprecated use {@link #getEastNorth(org.openstreetmap.josm.data.projection.Projecting)}
-     */
-    @Deprecated
-    public final EastNorth getEastNorth() {
-        return coor.getEastNorth(Main.getProjection());
-    }
-
-    /**
      * Checks whether the marker display area contains the given point.
      * Markers not interested in mouse clicks may always return false.
Index: trunk/src/org/openstreetmap/josm/gui/mappaint/styleelement/AreaElement.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/mappaint/styleelement/AreaElement.java	(revision 13171)
+++ trunk/src/org/openstreetmap/josm/gui/mappaint/styleelement/AreaElement.java	(revision 13173)
@@ -48,5 +48,5 @@
      * <p>
      * Public access is discouraged.
-     * @see StyledMapRenderer#drawArea(Way, Color, MapImage, Float, Float, boolean, TextLabel)
+     * @see StyledMapRenderer#drawArea
      */
     public Float extent;
@@ -56,5 +56,5 @@
      * <p>
      * Public access is discouraged.
-     * @see StyledMapRenderer#drawArea(Way, Color, MapImage, Float, Float, boolean, TextLabel)
+     * @see StyledMapRenderer#drawArea
      */
     public Float extentThreshold;
Index: trunk/src/org/openstreetmap/josm/gui/oauth/AbstractAuthorizationUI.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/oauth/AbstractAuthorizationUI.java	(revision 13171)
+++ trunk/src/org/openstreetmap/josm/gui/oauth/AbstractAuthorizationUI.java	(revision 13173)
@@ -4,5 +4,4 @@
 import java.util.Objects;
 
-import org.openstreetmap.josm.data.Preferences;
 import org.openstreetmap.josm.data.oauth.OAuthParameters;
 import org.openstreetmap.josm.data.oauth.OAuthToken;
@@ -139,16 +138,3 @@
         pnlAdvancedProperties.initialize(paramApiUrl);
     }
-
-    /**
-     * Initializes the authorisation UI with preference values in <code>pref</code>.
-     *
-     * @param pref the preferences. Must not be null.
-     * @throws IllegalArgumentException if pref is null
-     * @deprecated (since 12928) replaced by {@link #initialize(java.lang.String)}
-     */
-    @Deprecated
-    public void initFromPreferences(Preferences pref) {
-        CheckParameterUtil.ensureParameterNotNull(pref, "pref");
-        pnlAdvancedProperties.initFromPreferences(pref);
-    }
 }
Index: trunk/src/org/openstreetmap/josm/gui/oauth/AdvancedOAuthPropertiesPanel.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/oauth/AdvancedOAuthPropertiesPanel.java	(revision 13171)
+++ trunk/src/org/openstreetmap/josm/gui/oauth/AdvancedOAuthPropertiesPanel.java	(revision 13173)
@@ -16,5 +16,4 @@
 import javax.swing.JOptionPane;
 
-import org.openstreetmap.josm.data.Preferences;
 import org.openstreetmap.josm.data.oauth.OAuthParameters;
 import org.openstreetmap.josm.gui.HelpAwareOptionPane;
@@ -275,25 +274,4 @@
 
     /**
-     * Initializes the panel from the values in the preferences <code>preferences</code>.
-     *
-     * @param pref the preferences. Must not be null.
-     * @throws IllegalArgumentException if pref is null
-     * @deprecated (since 12928) replaced by {@link #initialize(java.lang.String)}
-     */
-    @Deprecated
-    public void initFromPreferences(Preferences pref) {
-        CheckParameterUtil.ensureParameterNotNull(pref, "pref");
-        setApiUrl(pref.get("osm-server.url"));
-        boolean useDefault = pref.getBoolean("oauth.settings.use-default", true);
-        ilUseDefault.setEnabled(false);
-        if (useDefault) {
-            resetToDefaultSettings();
-        } else {
-            setAdvancedParameters(OAuthParameters.createFromPreferences(pref));
-        }
-        ilUseDefault.setEnabled(true);
-    }
-
-    /**
      * Remembers the current values in the preferences <code>pref</code>.
      */
@@ -304,22 +282,4 @@
         } else {
             getAdvancedParameters().rememberPreferences();
-        }
-    }
-
-    /**
-     * Remembers the current values in the preferences <code>pref</code>.
-     *
-     * @param pref the preferences. Must not be null.
-     * @throws IllegalArgumentException if pref is null.
-     * @deprecated (since 12928) replaced by {@link #rememberPreferences()}
-     */
-    @Deprecated
-    public void rememberPreferences(Preferences pref) {
-        CheckParameterUtil.ensureParameterNotNull(pref, "pref");
-        pref.putBoolean("oauth.settings.use-default", cbUseDefaults.isSelected());
-        if (cbUseDefaults.isSelected()) {
-            new OAuthParameters(null, null, null, null, null, null, null).rememberPreferences(pref);
-        } else {
-            getAdvancedParameters().rememberPreferences(pref);
         }
     }
Index: trunk/src/org/openstreetmap/josm/gui/oauth/FullyAutomaticAuthorizationUI.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/oauth/FullyAutomaticAuthorizationUI.java	(revision 13171)
+++ trunk/src/org/openstreetmap/josm/gui/oauth/FullyAutomaticAuthorizationUI.java	(revision 13173)
@@ -29,5 +29,4 @@
 import javax.swing.text.html.HTMLEditorKit;
 
-import org.openstreetmap.josm.data.Preferences;
 import org.openstreetmap.josm.data.oauth.OAuthToken;
 import org.openstreetmap.josm.gui.HelpAwareOptionPane;
@@ -174,30 +173,4 @@
     public void initialize(String paramApiUrl) {
         super.initialize(paramApiUrl);
-        CredentialsAgent cm = CredentialsManager.getInstance();
-        try {
-            PasswordAuthentication pa = cm.lookup(RequestorType.SERVER, OsmApi.getOsmApi().getHost());
-            if (pa == null) {
-                tfUserName.setText("");
-                tfPassword.setText("");
-            } else {
-                tfUserName.setText(pa.getUserName() == null ? "" : pa.getUserName());
-                tfPassword.setText(pa.getPassword() == null ? "" : String.valueOf(pa.getPassword()));
-            }
-        } catch (CredentialsAgentException e) {
-            Logging.error(e);
-            tfUserName.setText("");
-            tfPassword.setText("");
-        }
-    }
-
-    /**
-     * Initializes the panel with values from the preferences
-     * @param pref Preferences structure
-     * @deprecated (since 12928) replaced by {@link #initialize(java.lang.String)}
-     */
-    @Deprecated
-    @Override
-    public void initFromPreferences(Preferences pref) {
-        super.initFromPreferences(pref);
         CredentialsAgent cm = CredentialsManager.getInstance();
         try {
Index: trunk/src/org/openstreetmap/josm/gui/preferences/projection/AbstractProjectionChoice.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/preferences/projection/AbstractProjectionChoice.java	(revision 13171)
+++ trunk/src/org/openstreetmap/josm/gui/preferences/projection/AbstractProjectionChoice.java	(revision 13173)
@@ -51,14 +51,4 @@
     }
 
-    /**
-    * Get the cache directory name.
-    * @return the cache directory name (base name)
-    * @deprecated unused - remove in 2017-09
-    */
-    @Deprecated
-    public String getCacheDir() {
-        return cacheDir;
-    }
-
     @Override
     public String toString() {
Index: trunk/src/org/openstreetmap/josm/gui/preferences/server/OverpassServerPreference.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/preferences/server/OverpassServerPreference.java	(revision 13171)
+++ trunk/src/org/openstreetmap/josm/gui/preferences/server/OverpassServerPreference.java	(revision 13173)
@@ -76,23 +76,3 @@
         return true;
     }
-
-    /**
-     * Returns the URL of the currently selected Overpass server.
-     * @return the URL of the currently selected Overpass server.
-     * @deprecated To be removed end of 2017. Use {@code OverpassDownloadReader.OVERPASS_SERVER.get()} instead
-     */
-    @Deprecated
-    public static String getOverpassServer() {
-        return OverpassDownloadReader.OVERPASS_SERVER.get();
-    }
-
-    /**
-     * Returns true if objects should be fetched from an Overpass server instead of the OSM API.
-     * @return true if objects should be fetched from an Overpass server instead of the OSM API.
-     * @deprecated To be removed end of 2017. Use {@code OverpassDownloadReader.FOR_MULTI_FETCH.get()} instead
-     */
-    @Deprecated
-    public static boolean useForMultiFetch() {
-        return OverpassDownloadReader.FOR_MULTI_FETCH.get();
-    }
 }
Index: trunk/src/org/openstreetmap/josm/gui/tagging/ac/AutoCompletingComboBox.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/tagging/ac/AutoCompletingComboBox.java	(revision 13171)
+++ trunk/src/org/openstreetmap/josm/gui/tagging/ac/AutoCompletingComboBox.java	(revision 13173)
@@ -10,5 +10,4 @@
 import java.util.Collection;
 import java.util.Locale;
-import java.util.stream.Collectors;
 
 import javax.swing.ComboBoxEditor;
@@ -254,6 +253,4 @@
         } else if (item instanceof AutoCompletionItem) {
             cbEditor.setItem(((AutoCompletionItem) item).getValue());
-        } else if (item instanceof AutoCompletionListItem) {
-            cbEditor.setItem(((AutoCompletionListItem) item).getItem().getValue());
         } else
             throw new IllegalArgumentException("Unsupported item: "+item);
@@ -271,6 +268,4 @@
         } else if (item instanceof AutoCompletionItem) {
             super.setSelectedItem(item);
-        } else if (item instanceof AutoCompletionListItem) {
-            super.setSelectedItem(((AutoCompletionListItem) item).getItem());
         } else if (item instanceof String) {
             String s = (String) item;
@@ -304,14 +299,4 @@
         this.getEditor().setItem(oldValue); // Do not use setSelectedItem(oldValue); (fix #8013)
         autocompleteEnabled = true;
-    }
-
-    /**
-     * Sets the items of the combobox to the given {@code AutoCompletionListItem}s.
-     * @param elems AutoCompletionListItem items
-     * @deprecated to be removed end of 2017. Use {@link #setPossibleAcItems(Collection)} instead
-     */
-    @Deprecated
-    public void setPossibleACItems(Collection<AutoCompletionListItem> elems) {
-        setPossibleAcItems(elems.stream().map(AutoCompletionListItem::getItem).collect(Collectors.toList()));
     }
 
Index: trunk/src/org/openstreetmap/josm/gui/tagging/ac/AutoCompletingTextField.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/tagging/ac/AutoCompletingTextField.java	(revision 13171)
+++ trunk/src/org/openstreetmap/josm/gui/tagging/ac/AutoCompletingTextField.java	(revision 13173)
@@ -20,4 +20,5 @@
 import javax.swing.text.StyleConstants;
 
+import org.openstreetmap.josm.data.tagging.ac.AutoCompletionItem;
 import org.openstreetmap.josm.gui.util.CellEditorSupport;
 import org.openstreetmap.josm.gui.widgets.JosmTextField;
@@ -29,5 +30,5 @@
  * can be used as table cell editor in {@link JTable}s.
  *
- * Autocompletion is controlled by a list of {@link AutoCompletionListItem}s
+ * Autocompletion is controlled by a list of {@link AutoCompletionItem}s
  * managed in a {@link AutoCompletionList}.
  *
Index: trunk/src/org/openstreetmap/josm/gui/tagging/ac/AutoCompletionItemPriority.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/tagging/ac/AutoCompletionItemPriority.java	(revision 13171)
+++ 	(revision )
@@ -1,149 +1,0 @@
-// License: GPL. For details, see LICENSE file.
-package org.openstreetmap.josm.gui.tagging.ac;
-
-import org.openstreetmap.josm.data.tagging.ac.AutoCompletionPriority;
-
-/**
- * Describes the priority of an item in an autocompletion list.
- * The selected flag is currently only used in plugins.
- *
- * Instances of this class are not modifiable.
- * @since 1762
- * @deprecated to be removed end of 2017. Use {@link AutoCompletionPriority} instead
- */
-@Deprecated
-public class AutoCompletionItemPriority implements Comparable<AutoCompletionItemPriority> {
-
-    /**
-     * Indicates, that the value is standard and it is found in the data.
-     * This has higher priority than some arbitrary standard value that is
-     * usually not used by the user.
-     */
-    public static final AutoCompletionItemPriority IS_IN_STANDARD_AND_IN_DATASET = new AutoCompletionItemPriority(
-            AutoCompletionPriority.IS_IN_STANDARD_AND_IN_DATASET);
-
-    /**
-     * Indicates that this is an arbitrary value from the data set, i.e.
-     * the value of a tag name=*.
-     */
-    public static final AutoCompletionItemPriority IS_IN_DATASET = new AutoCompletionItemPriority(AutoCompletionPriority.IS_IN_DATASET);
-
-    /**
-     * Indicates that this is a standard value, i.e. a standard tag name
-     * or a standard value for a given tag name (from the presets).
-     */
-    public static final AutoCompletionItemPriority IS_IN_STANDARD = new AutoCompletionItemPriority(AutoCompletionPriority.IS_IN_STANDARD);
-
-    /**
-     * Indicates that this is a value from a selected object.
-     */
-    public static final AutoCompletionItemPriority IS_IN_SELECTION = new AutoCompletionItemPriority(AutoCompletionPriority.IS_IN_SELECTION);
-
-    /** Unknown priority. This is the lowest priority. */
-    public static final AutoCompletionItemPriority UNKNOWN = new AutoCompletionItemPriority(AutoCompletionPriority.UNKNOWN);
-
-    private static final int NO_USER_INPUT = Integer.MAX_VALUE;
-
-    private final AutoCompletionPriority priority;
-
-    /**
-     * Constructs a new {@code AutoCompletionItemPriority}.
-     *
-     * @param inDataSet true, if the item is found in the currently active data layer
-     * @param inStandard true, if the item is a standard tag, e.g. from the presets
-     * @param selected true, if it is found on an object that is currently selected
-     * @param userInput null, if the user hasn't entered this tag so far. A number when
-     * the tag key / value has been entered by the user before. A lower number means
-     * this happened more recently and beats a higher number in priority.
-     */
-    public AutoCompletionItemPriority(boolean inDataSet, boolean inStandard, boolean selected, Integer userInput) {
-        this(new AutoCompletionPriority(inDataSet, inStandard, selected, userInput));
-    }
-
-    /**
-     * Constructs a new {@code AutoCompletionItemPriority}.
-     *
-     * @param inDataSet true, if the item is found in the currently active data layer
-     * @param inStandard true, if the item is a standard tag, e.g. from the presets
-     * @param selected true, if it is found on an object that is currently selected
-     */
-    public AutoCompletionItemPriority(boolean inDataSet, boolean inStandard, boolean selected) {
-        this(inDataSet, inStandard, selected, NO_USER_INPUT);
-    }
-
-    /**
-     * Constructs a new {@code AutoCompletionItemPriority} from an existing {@link AutoCompletionPriority}.
-     * @param other {@code AutoCompletionPriority} to convert
-     * @since 12859
-     */
-    public AutoCompletionItemPriority(AutoCompletionPriority other) {
-        this.priority = other;
-    }
-
-    /**
-     * Determines if the item is found in the currently active data layer.
-     * @return {@code true} if the item is found in the currently active data layer
-     */
-    public boolean isInDataSet() {
-        return priority.isInDataSet();
-    }
-
-    /**
-     * Determines if the item is a standard tag, e.g. from the presets.
-     * @return {@code true} if the item is a standard tag, e.g. from the presets
-     */
-    public boolean isInStandard() {
-        return priority.isInStandard();
-    }
-
-    /**
-     * Determines if it is found on an object that is currently selected.
-     * @return {@code true} if it is found on an object that is currently selected
-     */
-    public boolean isSelected() {
-        return priority.isSelected();
-    }
-
-    /**
-     * Returns a number when the tag key / value has been entered by the user before.
-     * A lower number means this happened more recently and beats a higher number in priority.
-     * @return a number when the tag key / value has been entered by the user before.
-     *         {@code null}, if the user hasn't entered this tag so far.
-     */
-    public Integer getUserInput() {
-        return priority.getUserInput();
-    }
-
-    /**
-     * Imposes an ordering on the priorities.
-     * Currently, being in the current DataSet is worth more than being in the Presets.
-     */
-    @Override
-    public int compareTo(AutoCompletionItemPriority other) {
-        return priority.compareTo(other.priority);
-    }
-
-    /**
-     * Merges two priorities.
-     * The resulting priority is always &gt;= the original ones.
-     * @param other other priority
-     * @return the merged priority
-     */
-    public AutoCompletionItemPriority mergeWith(AutoCompletionItemPriority other) {
-        return new AutoCompletionItemPriority(priority.mergeWith(other.priority));
-    }
-
-    @Override
-    public String toString() {
-        return priority.toString();
-    }
-
-    /**
-     * Returns the underlying priority.
-     * @return the underlying priority
-     * @since 12859
-     */
-    public AutoCompletionPriority getPriority() {
-        return priority;
-    }
-}
Index: trunk/src/org/openstreetmap/josm/gui/tagging/ac/AutoCompletionList.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/tagging/ac/AutoCompletionList.java	(revision 13171)
+++ trunk/src/org/openstreetmap/josm/gui/tagging/ac/AutoCompletionList.java	(revision 13173)
@@ -5,7 +5,5 @@
 import java.util.Collection;
 import java.util.Collections;
-import java.util.List;
 import java.util.Set;
-import java.util.stream.Collectors;
 
 import javax.swing.JTable;
@@ -51,5 +49,5 @@
 
     /**
-     * applies a filter expression to the list of {@link AutoCompletionListItem}s.
+     * applies a filter expression to the list of {@link AutoCompletionItem}s.
      *
      * The matching criterion is a case insensitive substring match.
@@ -81,18 +79,4 @@
 
     /**
-     * adds an {@link AutoCompletionListItem} to the list. Only adds the item if it
-     * is not null and if not in the list yet.
-     *
-     * @param item the item
-     * @deprecated To be removed end of 2017. Use {@link #add(AutoCompletionItem)} instead
-     */
-    @Deprecated
-    public void add(AutoCompletionListItem item) {
-        if (item == null)
-            return;
-        add(item.getItem());
-    }
-
-    /**
      * adds an {@link AutoCompletionItem} to the list. Only adds the item if it
      * is not null and if not in the list yet.
@@ -135,18 +119,4 @@
 
     /**
-     * adds a list of {@link AutoCompletionListItem} to this list. Only items which
-     * are not null and which do not exist yet in the list are added.
-     *
-     * @param other a list of AutoCompletionListItem; must not be null
-     * @throws IllegalArgumentException if other is null
-     * @deprecated to be removed end of 2017. Use {@link #add(Collection)} instead
-     */
-    @Deprecated
-    public void add(List<AutoCompletionListItem> other) {
-        CheckParameterUtil.ensureParameterNotNull(other, "other");
-        add(other.stream().map(AutoCompletionListItem::getItem).collect(Collectors.toList()));
-    }
-
-    /**
      * adds a list of strings to this list. Only strings which
      * are not null and which do not exist yet in the list are added.
@@ -154,17 +124,4 @@
      * @param values a list of strings to add
      * @param priority the priority to use
-     * @deprecated to be removed end of 2017. Use {@link #add(Collection, AutoCompletionPriority)} instead
-     */
-    @Deprecated
-    public void add(Collection<String> values, AutoCompletionItemPriority priority) {
-        add(values, priority.getPriority());
-    }
-
-    /**
-     * adds a list of strings to this list. Only strings which
-     * are not null and which do not exist yet in the list are added.
-     *
-     * @param values a list of strings to add
-     * @param priority the priority to use
      * @since 12859
      */
@@ -183,19 +140,4 @@
             filter();
         }
-    }
-
-    /**
-     * checks whether a specific item is already in the list. Matches for the
-     * the value <strong>and</strong> the priority of the item
-     *
-     * @param item the item to check
-     * @return true, if item is in the list; false, otherwise
-     * @deprecated to be removed end of 2017. Use {@link #contains(AutoCompletionItem)} instead
-     */
-    @Deprecated
-    public boolean contains(AutoCompletionListItem item) {
-        if (item == null)
-            return false;
-        return contains(item.getItem());
     }
 
@@ -264,17 +206,4 @@
      *
      * @throws IndexOutOfBoundsException if idx is out of bounds
-     * @deprecated to be removed end of 2017. Use {@link #getFilteredItemAt(int)} instead
-     */
-    @Deprecated
-    public AutoCompletionListItem getFilteredItem(int idx) {
-        return new AutoCompletionListItem(getFilteredItemAt(idx));
-    }
-
-    /**
-     * replies the idx-th item from the list of filtered items
-     * @param idx the index; must be in the range 0 &lt;= idx &lt; {@link #getFilteredSize()}
-     * @return the item
-     *
-     * @throws IndexOutOfBoundsException if idx is out of bounds
      * @since 12859
      */
Index: trunk/src/org/openstreetmap/josm/gui/tagging/ac/AutoCompletionListItem.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/tagging/ac/AutoCompletionListItem.java	(revision 13171)
+++ 	(revision )
@@ -1,128 +1,0 @@
-// License: GPL. For details, see LICENSE file.
-package org.openstreetmap.josm.gui.tagging.ac;
-
-import org.openstreetmap.josm.data.tagging.ac.AutoCompletionItem;
-
-/**
- * Represents an entry in the list of auto completion values.
- *
- *  An AutoCompletionListItem has a <em>priority</em> and a <em>value</em>.
- *
- *  The priority helps to sort the auto completion items according to their importance. For instance,
- *  in an auto completion list for tag names, standard tag names would be assigned a higher
- *  priority than arbitrary tag names present in the current data set. There are three priority levels,
- *  {@link AutoCompletionItemPriority}.
- *
- * The value is a string which will be displayed in the auto completion list.
- * @deprecated To be removed end of 2017. Use {@link AutoCompletionItem} instead
- */
-@Deprecated
-public class AutoCompletionListItem implements Comparable<AutoCompletionListItem> {
-
-    /** the item */
-    private final AutoCompletionItem item;
-
-    /**
-     * Constructs a new {@code AutoCompletionListItem} with the given value and priority.
-     * @param value The value
-     * @param priority The priority
-     */
-    public AutoCompletionListItem(String value, AutoCompletionItemPriority priority) {
-        this.item = new AutoCompletionItem(value, priority.getPriority());
-    }
-
-    /**
-     * Constructs a new {@code AutoCompletionListItem} with the given value and unknown priority.
-     * @param value The value
-     */
-    public AutoCompletionListItem(String value) {
-        this.item = new AutoCompletionItem(value);
-    }
-
-    /**
-     * Constructs a new {@code AutoCompletionListItem}.
-     */
-    public AutoCompletionListItem() {
-        this.item = new AutoCompletionItem();
-    }
-
-    /**
-     * Constructs a new {@code AutoCompletionListItem} from an existing {@link AutoCompletionItem}.
-     * @param other {@code AutoCompletionItem} to convert
-     * @since 12859
-     */
-    public AutoCompletionListItem(AutoCompletionItem other) {
-        this.item = other;
-    }
-
-    /**
-     * Returns the priority.
-     * @return the priority
-     */
-    public AutoCompletionItemPriority getPriority() {
-        return new AutoCompletionItemPriority(item.getPriority());
-    }
-
-    /**
-     * Sets the priority.
-     * @param priority  the priority
-     */
-    public void setPriority(AutoCompletionItemPriority priority) {
-        item.setPriority(priority.getPriority());
-    }
-
-    /**
-     * Returns the value.
-     * @return the value
-     */
-    public String getValue() {
-        return item.getValue();
-    }
-
-    /**
-     * sets the value
-     * @param value the value; must not be null
-     * @throws IllegalArgumentException if value if null
-     */
-    public void setValue(String value) {
-        throw new UnsupportedOperationException("setValue() is no longer supported");
-    }
-
-    @Override
-    public String toString() {
-        return item.toString();
-    }
-
-    @Override
-    public int hashCode() {
-        return item.hashCode();
-    }
-
-    @Override
-    public boolean equals(Object obj) {
-        if (this == obj)
-            return true;
-        if (obj == null)
-            return false;
-        if (obj instanceof String)
-            return obj.equals(item.getValue());
-        if (getClass() != obj.getClass())
-            return false;
-        final AutoCompletionListItem other = (AutoCompletionListItem) obj;
-        return item.equals(other.item);
-    }
-
-    @Override
-    public int compareTo(AutoCompletionListItem other) {
-        return item.compareTo(other.item);
-    }
-
-    /**
-     * Returns the underlying item.
-     * @return the underlying item
-     * @since 12859
-     */
-    public AutoCompletionItem getItem() {
-        return item;
-    }
-}
Index: trunk/src/org/openstreetmap/josm/gui/tagging/ac/AutoCompletionManager.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/tagging/ac/AutoCompletionManager.java	(revision 13171)
+++ trunk/src/org/openstreetmap/josm/gui/tagging/ac/AutoCompletionManager.java	(revision 13173)
@@ -245,5 +245,5 @@
     /**
      * replies the auto completion values allowed for a specific key. Replies
-     * an empty list if key is null or if key is not in {@link #getKeys()}.
+     * an empty list if key is null or if key is not in {@link #getTagKeys()}.
      *
      * @param key OSM key
@@ -343,36 +343,4 @@
             list.addUserInput(getUserInputValues(key));
         }
-    }
-
-    /**
-     * Returns the currently cached tag keys.
-     * @return a list of tag keys
-     * @deprecated to be removed end of 2017. Use {@link #getTagKeys()} instead
-     */
-    @Deprecated
-    public List<AutoCompletionListItem> getKeys() {
-        return getTagKeys().stream().map(AutoCompletionListItem::new).collect(Collectors.toList());
-    }
-
-    /**
-     * Returns the currently cached tag values for a given tag key.
-     * @param key the tag key
-     * @return a list of tag values
-     * @deprecated to be removed end of 2017. Use {@link #getTagValues(String)} instead
-     */
-    @Deprecated
-    public List<AutoCompletionListItem> getValues(String key) {
-        return getTagValues(key).stream().map(AutoCompletionListItem::new).collect(Collectors.toList());
-    }
-
-    /**
-     * Returns the currently cached tag values for a given list of tag keys.
-     * @param keys the tag keys
-     * @return a list of tag values
-     * @deprecated to be removed end of 2017. Use {@link #getTagValues(List)} instead
-     */
-    @Deprecated
-    public List<AutoCompletionListItem> getValues(List<String> keys) {
-        return getTagValues(keys).stream().map(AutoCompletionListItem::new).collect(Collectors.toList());
     }
 
Index: trunk/src/org/openstreetmap/josm/gui/util/AdvancedKeyPressDetector.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/util/AdvancedKeyPressDetector.java	(revision 13171)
+++ trunk/src/org/openstreetmap/josm/gui/util/AdvancedKeyPressDetector.java	(revision 13173)
@@ -36,11 +36,5 @@
 
     private final List<KeyPressReleaseListener> keyListeners = new CopyOnWriteArrayList<>();
-    /** @deprecated replaced by {@link #modifierExListeners} */
-    @Deprecated
-    private final List<ModifierListener> modifierListeners = new CopyOnWriteArrayList<>();
     private final ListenerList<ModifierExListener> modifierExListeners = ListenerList.create();
-    /** @deprecated replaced by {@link #previousModifiersEx} */
-    @Deprecated
-    private int previousModifiers;
     private int previousModifiersEx;
 
@@ -53,14 +47,4 @@
     public void addKeyListener(KeyPressReleaseListener l) {
         keyListeners.add(l);
-    }
-
-    /**
-     * Adds an object that wants to receive key modifier changed events.
-     * @param l listener to add
-     * @deprecated use {@link #addModifierExListener} instead
-     */
-    @Deprecated
-    public void addModifierListener(ModifierListener l) {
-        modifierListeners.add(l);
     }
 
@@ -80,14 +64,4 @@
     public void removeKeyListener(KeyPressReleaseListener l) {
         keyListeners.remove(l);
-    }
-
-    /**
-     * Removes the key modifier listener.
-     * @param l listener to remove
-     * @deprecated use {@link #removeModifierExListener} instead
-     */
-    @Deprecated
-    public void removeModifierListener(ModifierListener l) {
-        modifierListeners.remove(l);
     }
 
@@ -131,7 +105,4 @@
         if (!keyListeners.isEmpty()) {
             Logging.warn(tr("Some of the key listeners forgot to remove themselves: {0}"), keyListeners.toString());
-        }
-        if (!modifierListeners.isEmpty()) {
-            Logging.warn(tr("Some of the key modifier listeners forgot to remove themselves: {0}"), modifierListeners.toString());
         }
         if (modifierExListeners.hasListeners()) {
@@ -183,13 +154,4 @@
         KeyEvent ke = (KeyEvent) e;
 
-        // check if ctrl, alt, shift modifiers are changed
-        int modif = ke.getModifiers();
-        if (previousModifiers != modif) {
-            previousModifiers = modif;
-            for (ModifierListener m: modifierListeners) {
-                m.modifiersChanged(modif);
-            }
-        }
-
         // check if ctrl, alt, shift extended modifiers are changed
         int modifEx = ke.getModifiersEx();
Index: trunk/src/org/openstreetmap/josm/gui/util/GuiHelper.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/util/GuiHelper.java	(revision 13171)
+++ trunk/src/org/openstreetmap/josm/gui/util/GuiHelper.java	(revision 13173)
@@ -21,5 +21,4 @@
 import java.awt.Window;
 import java.awt.event.ActionListener;
-import java.awt.event.KeyEvent;
 import java.awt.event.MouseAdapter;
 import java.awt.event.MouseEvent;
@@ -66,5 +65,4 @@
 import org.openstreetmap.josm.tools.LanguageInfo;
 import org.openstreetmap.josm.tools.Logging;
-import org.openstreetmap.josm.tools.PlatformHook;
 import org.openstreetmap.josm.tools.bugreport.BugReport;
 import org.openstreetmap.josm.tools.bugreport.ReportedException;
@@ -462,21 +460,4 @@
 
     /**
-     * Returns extended modifier key used as the appropriate accelerator key for menu shortcuts.
-     * It is advised everywhere to use {@link Toolkit#getMenuShortcutKeyMask()} to get the cross-platform modifier, but:
-     * <ul>
-     * <li>it returns KeyEvent.CTRL_MASK instead of KeyEvent.CTRL_DOWN_MASK. We used the extended
-     *    modifier for years, and Oracle recommends to use it instead, so it's best to keep it</li>
-     * <li>the method throws a HeadlessException ! So we would need to handle it for unit tests anyway</li>
-     * </ul>
-     * @return extended modifier key used as the appropriate accelerator key for menu shortcuts
-     * @since 7539
-     * @deprecated to be removed end of 2017. Use {@link PlatformHook#getMenuShortcutKeyMaskEx()} instead
-     */
-    @Deprecated
-    public static int getMenuShortcutKeyMaskEx() {
-        return Main.isPlatformOsx() ? KeyEvent.META_DOWN_MASK : KeyEvent.CTRL_DOWN_MASK;
-    }
-
-    /**
      * Sets a global font for all UI, replacing default font of current look and feel.
      * @param name Font name. It is up to the caller to make sure the font exists
Index: trunk/src/org/openstreetmap/josm/gui/util/ModifierListener.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/util/ModifierListener.java	(revision 13171)
+++ 	(revision )
@@ -1,18 +1,0 @@
-// License: GPL. For details, see LICENSE file.
-package org.openstreetmap.josm.gui.util;
-
-/**
- * Listener called when pressed modifier keys change is detected
- * @since 7217
- * @since 10600 (functional interface)
- * @deprecated use ModifierExListener instead
- */
-@Deprecated
-@FunctionalInterface
-public interface ModifierListener {
-    /**
-     * Called when the modifiers are changed
-     * @param modifiers The new modifiers
-     */
-    void modifiersChanged(int modifiers);
-}
Index: trunk/src/org/openstreetmap/josm/io/FileWatcher.java
===================================================================
--- trunk/src/org/openstreetmap/josm/io/FileWatcher.java	(revision 13171)
+++ trunk/src/org/openstreetmap/josm/io/FileWatcher.java	(revision 13173)
@@ -20,5 +20,4 @@
 import org.openstreetmap.josm.data.preferences.sources.SourceEntry;
 import org.openstreetmap.josm.data.preferences.sources.SourceType;
-import org.openstreetmap.josm.gui.mappaint.StyleSource;
 import org.openstreetmap.josm.tools.CheckParameterUtil;
 import org.openstreetmap.josm.tools.Logging;
@@ -55,31 +54,4 @@
             thread.start();
         }
-    }
-
-    /**
-     * Registers a map paint style for local file changes, allowing dynamic reloading.
-     * @param style The style to watch
-     * @throws IllegalArgumentException if {@code style} is null or if it does not provide a local file
-     * @throws IllegalStateException if the watcher service failed to start
-     * @throws IOException if an I/O error occurs
-     * @deprecated To be removed end of 2017. Use {@link #registerSource} instead
-     */
-    @Deprecated
-    public void registerStyleSource(StyleSource style) throws IOException {
-        registerSource(style);
-    }
-
-    /**
-     * Registers a validator rule for local file changes, allowing dynamic reloading.
-     * @param rule The rule to watch
-     * @throws IllegalArgumentException if {@code rule} is null or if it does not provide a local file
-     * @throws IllegalStateException if the watcher service failed to start
-     * @throws IOException if an I/O error occurs
-     * @since 7276
-     * @deprecated To be removed end of 2017. Use {@link #registerSource} instead
-     */
-    @Deprecated
-    public void registerValidatorRule(SourceEntry rule) throws IOException {
-        registerSource(rule);
     }
 
Index: trunk/src/org/openstreetmap/josm/io/GeoJSONWriter.java
===================================================================
--- trunk/src/org/openstreetmap/josm/io/GeoJSONWriter.java	(revision 13171)
+++ trunk/src/org/openstreetmap/josm/io/GeoJSONWriter.java	(revision 13173)
@@ -31,5 +31,4 @@
 import org.openstreetmap.josm.data.projection.Projection;
 import org.openstreetmap.josm.data.projection.Projections;
-import org.openstreetmap.josm.gui.layer.OsmDataLayer;
 import org.openstreetmap.josm.gui.mappaint.ElemStyles;
 import org.openstreetmap.josm.tools.Logging;
@@ -46,15 +45,4 @@
     private final Projection projection;
     private static final boolean SKIP_EMPTY_NODES = true;
-
-    /**
-     * Constructs a new {@code GeoJSONWriter}.
-     * @param layer The OSM data layer to save
-     * @since 10852
-     * @deprecated To be removed end of 2017. Use {@link #GeoJSONWriter(DataSet)} instead
-     */
-    @Deprecated
-    public GeoJSONWriter(OsmDataLayer layer) {
-        this(layer.data);
-    }
 
     /**
Index: trunk/src/org/openstreetmap/josm/io/OsmWriter.java
===================================================================
--- trunk/src/org/openstreetmap/josm/io/OsmWriter.java	(revision 13171)
+++ trunk/src/org/openstreetmap/josm/io/OsmWriter.java	(revision 13173)
@@ -29,5 +29,4 @@
 import org.openstreetmap.josm.data.osm.Way;
 import org.openstreetmap.josm.data.osm.visitor.PrimitiveVisitor;
-import org.openstreetmap.josm.gui.layer.OsmDataLayer;
 import org.openstreetmap.josm.tools.date.DateUtils;
 
@@ -128,14 +127,4 @@
         result.sort(byIdComparator);
         return result;
-    }
-
-    /**
-     * Writes the full OSM file for the given layer (header, data sources, osm data, footer).
-     * @param layer OSM data layer
-     * @deprecated To be removed end of 2017. Use {@link #write(DataSet)} instead
-     */
-    @Deprecated
-    public void writeLayer(OsmDataLayer layer) {
-        write(layer.data);
     }
 
Index: trunk/src/org/openstreetmap/josm/plugins/PluginHandler.java
===================================================================
--- trunk/src/org/openstreetmap/josm/plugins/PluginHandler.java	(revision 13171)
+++ trunk/src/org/openstreetmap/josm/plugins/PluginHandler.java	(revision 13173)
@@ -717,17 +717,4 @@
 
     /**
-     * Method to get the (now obsolete) class loader for loading plugin code.
-     *
-     * @return the class loader
-     * @deprecated There is no longer a unified plugin class loader. Use {@link PluginProxy#classLoader}
-     * to get the class loader for each plugin. Or <code>PluginClass.class.getClassLoader()</code>
-     * to access the class loader from within the plugin.
-     */
-    @Deprecated
-    public static synchronized DynamicURLClassLoader getPluginClassLoader() {
-        return getJoinedPluginResourceCL();
-    }
-
-    /**
      * Get class loader to locate resources from plugins.
      *
Index: trunk/src/org/openstreetmap/josm/tools/CheckParameterUtil.java
===================================================================
--- trunk/src/org/openstreetmap/josm/tools/CheckParameterUtil.java	(revision 13171)
+++ trunk/src/org/openstreetmap/josm/tools/CheckParameterUtil.java	(revision 13173)
@@ -5,9 +5,4 @@
 import java.util.function.Predicate;
 import java.util.function.Supplier;
-
-import org.openstreetmap.josm.data.coor.EastNorth;
-import org.openstreetmap.josm.data.coor.LatLon;
-import org.openstreetmap.josm.data.osm.OsmPrimitiveType;
-import org.openstreetmap.josm.data.osm.PrimitiveId;
 
 /**
@@ -65,65 +60,4 @@
 
     /**
-     * Ensures an OSM primitive ID is valid
-     * @param id The id to check
-     * @param parameterName The parameter name
-     * @throws IllegalArgumentException if the primitive ID is not valid (negative or zero)
-     * @deprecated use {@link #ensure(Object, String, String, Predicate)}
-     */
-    @Deprecated
-    public static void ensureValidPrimitiveId(PrimitiveId id, String parameterName) {
-        ensureParameterNotNull(id, parameterName);
-        if (id.getUniqueId() <= 0)
-            throw new IllegalArgumentException(
-                    MessageFormat.format("Expected unique id > 0 for primitive ''{1}'', got {0}", id.getUniqueId(), parameterName));
-    }
-
-    /**
-     * Ensures lat/lon coordinates are valid
-     * @param latlon The lat/lon to check
-     * @param parameterName The parameter name
-     * @throws IllegalArgumentException if the lat/lon are {@code null} or not valid
-     * @since 5980
-     * @deprecated use {@link #ensure(Object, String, Predicate)}
-     */
-    @Deprecated
-    public static void ensureValidCoordinates(LatLon latlon, String parameterName) {
-        ensureParameterNotNull(latlon, parameterName);
-        if (!latlon.isValid())
-            throw new IllegalArgumentException(
-                    MessageFormat.format("Expected valid lat/lon for parameter ''{0}'', got {1}", parameterName, latlon));
-    }
-
-    /**
-     * Ensures east/north coordinates are valid
-     * @param eastnorth The east/north to check
-     * @param parameterName The parameter name
-     * @throws IllegalArgumentException if the east/north are {@code null} or not valid
-     * @since 5980
-     * @deprecated use {@link #ensure(Object, String, Predicate)}
-     */
-    @Deprecated
-    public static void ensureValidCoordinates(EastNorth eastnorth, String parameterName) {
-        ensureParameterNotNull(eastnorth, parameterName);
-        if (!eastnorth.isValid())
-            throw new IllegalArgumentException(
-                    MessageFormat.format("Expected valid east/north for parameter ''{0}'', got {1}", parameterName, eastnorth));
-    }
-
-    /**
-     * Ensures a version number is valid
-     * @param version The version to check
-     * @param parameterName The parameter name
-     * @throws IllegalArgumentException if the version is not valid (negative)
-     * @deprecated use {@link #ensure(Object, String, String, Predicate)}
-     */
-    @Deprecated
-    public static void ensureValidVersion(long version, String parameterName) {
-        if (version < 0)
-            throw new IllegalArgumentException(
-                    MessageFormat.format("Expected value of type long > 0 for parameter ''{0}'', got {1}", parameterName, version));
-    }
-
-    /**
      * Ensures a parameter is not {@code null}
      * @param value The parameter to check
@@ -174,20 +108,3 @@
             throw new IllegalArgumentException(messageSupplier.get());
     }
-
-    /**
-     * Ensures that <code>id</code> is non-null primitive id of type {@link OsmPrimitiveType#NODE}
-     *
-     * @param id the primitive  id
-     * @param parameterName the name of the parameter to be checked
-     * @throws IllegalArgumentException if id is null
-     * @throws IllegalArgumentException if id.getType() != NODE
-     * @deprecated use {@link #ensure(Object, String, String, Predicate)}
-     */
-    @Deprecated
-    public static void ensureValidNodeId(PrimitiveId id, String parameterName) {
-        ensureParameterNotNull(id, parameterName);
-        if (!id.getType().equals(OsmPrimitiveType.NODE))
-            throw new IllegalArgumentException(
-                    MessageFormat.format("Parameter ''{0}'' of type node expected, got ''{1}''", parameterName, id.getType().getAPIName()));
-    }
 }
Index: trunk/src/org/openstreetmap/josm/tools/Utils.java
===================================================================
--- trunk/src/org/openstreetmap/josm/tools/Utils.java	(revision 13171)
+++ trunk/src/org/openstreetmap/josm/tools/Utils.java	(revision 13173)
@@ -59,7 +59,5 @@
 import java.util.regex.Pattern;
 import java.util.stream.Stream;
-import java.util.zip.GZIPInputStream;
 import java.util.zip.ZipFile;
-import java.util.zip.ZipInputStream;
 
 import javax.xml.XMLConstants;
@@ -70,6 +68,4 @@
 import javax.xml.parsers.SAXParserFactory;
 
-import org.apache.commons.compress.compressors.bzip2.BZip2CompressorInputStream;
-import org.openstreetmap.josm.io.Compression;
 import org.openstreetmap.josm.spi.preferences.Config;
 import org.w3c.dom.Document;
@@ -721,43 +717,4 @@
             }
         };
-    }
-
-    /**
-     * Returns a Bzip2 input stream wrapping given input stream.
-     * @param in The raw input stream
-     * @return a Bzip2 input stream wrapping given input stream, or {@code null} if {@code in} is {@code null}
-     * @throws IOException if the given input stream does not contain valid BZ2 header
-     * @since 7867
-     * @deprecated use {@link Compression#getBZip2InputStream(java.io.InputStream)}
-     */
-    @Deprecated
-    public static BZip2CompressorInputStream getBZip2InputStream(InputStream in) throws IOException {
-        return Compression.getBZip2InputStream(in);
-    }
-
-    /**
-     * Returns a Gzip input stream wrapping given input stream.
-     * @param in The raw input stream
-     * @return a Gzip input stream wrapping given input stream, or {@code null} if {@code in} is {@code null}
-     * @throws IOException if an I/O error has occurred
-     * @since 7119
-     * @deprecated use {@link Compression#getGZipInputStream(java.io.InputStream)}
-     */
-    @Deprecated
-    public static GZIPInputStream getGZipInputStream(InputStream in) throws IOException {
-        return Compression.getGZipInputStream(in);
-    }
-
-    /**
-     * Returns a Zip input stream wrapping given input stream.
-     * @param in The raw input stream
-     * @return a Zip input stream wrapping given input stream, or {@code null} if {@code in} is {@code null}
-     * @throws IOException if an I/O error has occurred
-     * @since 7119
-     * @deprecated use {@link Compression#getZipInputStream(java.io.InputStream)}
-     */
-    @Deprecated
-    public static ZipInputStream getZipInputStream(InputStream in) throws IOException {
-        return Compression.getZipInputStream(in);
     }
 
Index: trunk/src/org/openstreetmap/josm/tools/template_engine/Condition.java
===================================================================
--- trunk/src/org/openstreetmap/josm/tools/template_engine/Condition.java	(revision 13171)
+++ trunk/src/org/openstreetmap/josm/tools/template_engine/Condition.java	(revision 13173)
@@ -28,14 +28,4 @@
     public Condition() {
         this.entries = new ArrayList<>();
-    }
-
-    /**
-     * Returns template entries.
-     * @return template entries
-     * @deprecated (since 13003) use constructor {@link #Condition(java.util.Collection)} to set the entries
-     */
-    @Deprecated
-    public List<TemplateEntry> getEntries() {
-        return entries;
     }
 
