Index: /trunk/src/org/openstreetmap/josm/actions/CombineWayAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/CombineWayAction.java	(revision 8850)
+++ /trunk/src/org/openstreetmap/josm/actions/CombineWayAction.java	(revision 8851)
@@ -8,7 +8,9 @@
 import java.awt.event.ActionEvent;
 import java.awt.event.KeyEvent;
+import java.util.ArrayDeque;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
+import java.util.Deque;
 import java.util.LinkedHashMap;
 import java.util.LinkedHashSet;
@@ -17,5 +19,4 @@
 import java.util.Map;
 import java.util.Set;
-import java.util.Stack;
 
 import javax.swing.JOptionPane;
@@ -557,13 +558,4 @@
         }
 
-        protected Set<Node> getNodes(Stack<NodePair> pairs) {
-            Set<Node> nodes = new LinkedHashSet<>(2*pairs.size());
-            for (NodePair pair: pairs) {
-                nodes.add(pair.getA());
-                nodes.add(pair.getB());
-            }
-            return nodes;
-        }
-
         protected List<NodePair> getOutboundPairs(NodePair pair) {
             return getOutboundPairs(pair.getB());
@@ -586,9 +578,9 @@
         }
 
-        protected boolean isSpanningWay(Stack<NodePair> way) {
+        protected boolean isSpanningWay(Deque<NodePair> way) {
             return numUndirectedEges == way.size();
         }
 
-        protected List<Node> buildPathFromNodePairs(Stack<NodePair> path) {
+        protected List<Node> buildPathFromNodePairs(Deque<NodePair> path) {
             List<Node> ret = new LinkedList<>();
             for (NodePair pair: path) {
@@ -610,6 +602,6 @@
             if (startNode == null)
                 return null;
-            Stack<NodePair> path = new Stack<>();
-            Stack<NodePair> nextPairs  = new Stack<>();
+            Deque<NodePair> path = new ArrayDeque<>();
+            Deque<NodePair> nextPairs  = new ArrayDeque<>();
             nextPairs.addAll(getOutboundPairs(startNode));
             while (!nextPairs.isEmpty()) {
Index: /trunk/src/org/openstreetmap/josm/actions/UploadSelectionAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/UploadSelectionAction.java	(revision 8850)
+++ /trunk/src/org/openstreetmap/josm/actions/UploadSelectionAction.java	(revision 8851)
@@ -8,8 +8,9 @@
 import java.awt.event.KeyEvent;
 import java.io.IOException;
+import java.util.ArrayDeque;
 import java.util.Collection;
+import java.util.Deque;
 import java.util.HashSet;
 import java.util.Set;
-import java.util.Stack;
 
 import javax.swing.JOptionPane;
@@ -321,5 +322,5 @@
         protected void realRun() throws SAXException, IOException, OsmTransferException {
             try {
-                Stack<OsmPrimitive> toCheck = new Stack<>();
+                Deque<OsmPrimitive> toCheck = new ArrayDeque<>();
                 toCheck.addAll(getPrimitivesToCheckForParents());
                 Set<OsmPrimitive> checked = new HashSet<>();
Index: /trunk/src/org/openstreetmap/josm/actions/upload/CyclicUploadDependencyException.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/upload/CyclicUploadDependencyException.java	(revision 8850)
+++ /trunk/src/org/openstreetmap/josm/actions/upload/CyclicUploadDependencyException.java	(revision 8851)
@@ -4,14 +4,13 @@
 import static org.openstreetmap.josm.tools.I18n.tr;
 
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Stack;
+import java.util.ArrayDeque;
+import java.util.Deque;
 
 import org.openstreetmap.josm.data.osm.Relation;
 
 public class CyclicUploadDependencyException extends Exception {
-    private final Stack<Relation> cycle;
+    private final Deque<Relation> cycle;
 
-    public CyclicUploadDependencyException(Stack<Relation> cycle) {
+    public CyclicUploadDependencyException(Deque<Relation> cycle) {
         this.cycle = cycle;
     }
@@ -34,9 +33,9 @@
         sb.append(tr("Cyclic dependency between relations:"))
           .append('[');
-        for (int i = 0; i < cycle.size(); i++) {
-            if (i > 0) {
+        for (Relation r : cycle) {
+            if (sb.length() > 0) {
                 sb.append(',');
             }
-            sb.append(formatRelation(cycle.get(i)));
+            sb.append(formatRelation(r));
         }
         sb.append(']');
@@ -44,6 +43,6 @@
     }
 
-    public List<Relation> getCyclicUploadDependency() {
-        return new ArrayList<>(cycle);
+    public Deque<Relation> getCyclicUploadDependency() {
+        return new ArrayDeque<>(cycle);
     }
 }
Index: /trunk/src/org/openstreetmap/josm/actions/upload/RelationUploadOrderHook.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/upload/RelationUploadOrderHook.java	(revision 8850)
+++ /trunk/src/org/openstreetmap/josm/actions/upload/RelationUploadOrderHook.java	(revision 8851)
@@ -6,4 +6,6 @@
 import java.awt.BorderLayout;
 import java.awt.Dimension;
+import java.util.ArrayList;
+import java.util.Deque;
 import java.util.Iterator;
 import java.util.List;
@@ -67,6 +69,6 @@
      */
     protected void warnCyclicUploadDependency(CyclicUploadDependencyException e) {
-        List<Relation> dep = e.getCyclicUploadDependency();
-        Relation last = dep.get(dep.size() -1);
+        Deque<Relation> dep = e.getCyclicUploadDependency();
+        Relation last = dep.getLast();
         Iterator<Relation> it = dep.iterator();
         while (it.hasNext()) {
@@ -77,5 +79,5 @@
             }
         }
-        JPanel pnl = buildWarningPanel(dep);
+        JPanel pnl = buildWarningPanel(new ArrayList<>(dep));
         ExtendedDialog dialog = new ExtendedDialog(
                 Main.parent,
Index: /trunk/src/org/openstreetmap/josm/data/APIDataSet.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/data/APIDataSet.java	(revision 8850)
+++ /trunk/src/org/openstreetmap/josm/data/APIDataSet.java	(revision 8851)
@@ -2,8 +2,10 @@
 package org.openstreetmap.josm.data;
 
+import java.util.ArrayDeque;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.Comparator;
+import java.util.Deque;
 import java.util.HashMap;
 import java.util.HashSet;
@@ -12,5 +14,4 @@
 import java.util.Map;
 import java.util.Set;
-import java.util.Stack;
 
 import org.openstreetmap.josm.actions.upload.CyclicUploadDependencyException;
@@ -309,5 +310,5 @@
         }
 
-        protected void visit(Stack<Relation> path, Relation current) throws CyclicUploadDependencyException {
+        protected void visit(Deque<Relation> path, Relation current) throws CyclicUploadDependencyException {
             if (path.contains(current)) {
                 path.push(current);
@@ -328,5 +329,5 @@
             visited = new HashSet<>();
             uploadOrder = new LinkedList<>();
-            Stack<Relation> path = new Stack<>();
+            Deque<Relation> path = new ArrayDeque<>();
             for (Relation relation: relations) {
                 visit(path, relation);
Index: /trunk/src/org/openstreetmap/josm/gui/NavigatableComponent.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/NavigatableComponent.java	(revision 8850)
+++ /trunk/src/org/openstreetmap/josm/gui/NavigatableComponent.java	(revision 8851)
@@ -11,8 +11,10 @@
 import java.nio.charset.StandardCharsets;
 import java.text.NumberFormat;
+import java.util.ArrayDeque;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.Date;
+import java.util.Deque;
 import java.util.HashSet;
 import java.util.LinkedList;
@@ -21,5 +23,4 @@
 import java.util.Map.Entry;
 import java.util.Set;
-import java.util.Stack;
 import java.util.TreeMap;
 import java.util.concurrent.CopyOnWriteArrayList;
@@ -649,6 +650,6 @@
     }
 
-    private Stack<ZoomData> zoomUndoBuffer = new Stack<>();
-    private Stack<ZoomData> zoomRedoBuffer = new Stack<>();
+    private Deque<ZoomData> zoomUndoBuffer = new ArrayDeque<>();
+    private Deque<ZoomData> zoomRedoBuffer = new ArrayDeque<>();
     private Date zoomTimestamp = new Date();
 
Index: /trunk/src/org/openstreetmap/josm/gui/dialogs/FilterDialog.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/dialogs/FilterDialog.java	(revision 8850)
+++ /trunk/src/org/openstreetmap/josm/gui/dialogs/FilterDialog.java	(revision 8851)
@@ -9,11 +9,12 @@
 import java.awt.event.KeyEvent;
 import java.awt.event.MouseEvent;
+import java.util.ArrayDeque;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
+import java.util.Deque;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
-import java.util.Stack;
 
 import javax.swing.AbstractAction;
@@ -291,5 +292,5 @@
         // Filters can use nested parent/child expression so complete tree is necessary
         Set<OsmPrimitive> result = new HashSet<>();
-        Stack<OsmPrimitive> stack = new Stack<>();
+        Deque<OsmPrimitive> stack = new ArrayDeque<>();
         stack.addAll(primitives);
 
Index: /trunk/src/org/openstreetmap/josm/gui/dialogs/relation/ChildRelationBrowser.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/dialogs/relation/ChildRelationBrowser.java	(revision 8850)
+++ /trunk/src/org/openstreetmap/josm/gui/dialogs/relation/ChildRelationBrowser.java	(revision 8851)
@@ -12,9 +12,10 @@
 import java.io.IOException;
 import java.net.HttpURLConnection;
+import java.util.ArrayDeque;
+import java.util.Deque;
 import java.util.HashSet;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Set;
-import java.util.Stack;
 
 import javax.swing.AbstractAction;
@@ -329,5 +330,5 @@
     class DownloadAllChildrenTask extends DownloadTask {
         private final Relation relation;
-        private final Stack<Relation> relationsToDownload;
+        private final Deque<Relation> relationsToDownload;
         private final Set<Long> downloadedRelationIds;
 
@@ -335,5 +336,5 @@
             super(tr("Download relation members"), parent);
             this.relation = r;
-            relationsToDownload = new Stack<>();
+            relationsToDownload = new ArrayDeque<>();
             downloadedRelationIds = new HashSet<>();
             relationsToDownload.push(this.relation);
Index: /trunk/src/org/openstreetmap/josm/gui/download/PlaceSelection.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/download/PlaceSelection.java	(revision 8850)
+++ /trunk/src/org/openstreetmap/josm/gui/download/PlaceSelection.java	(revision 8851)
@@ -199,5 +199,5 @@
     private static class NameFinderResultParser extends DefaultHandler {
         private SearchResult currentResult;
-        private StringBuffer description;
+        private StringBuilder description;
         private int depth;
         private List<SearchResult> data = new LinkedList<>();
@@ -226,5 +226,5 @@
                     data.add(currentResult);
                 } else if ("description".equals(qName) && (depth == 3)) {
-                    description = new StringBuffer();
+                    description = new StringBuilder();
                 } else if ("named".equals(qName) && (depth == 4)) {
                     // this is a "named" place in the nearest places list.
Index: /trunk/src/org/openstreetmap/josm/gui/layer/ImageryLayer.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/layer/ImageryLayer.java	(revision 8850)
+++ /trunk/src/org/openstreetmap/josm/gui/layer/ImageryLayer.java	(revision 8851)
@@ -26,5 +26,5 @@
 import java.text.AttributedString;
 import java.util.ArrayList;
-import java.util.Hashtable;
+import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -405,5 +405,5 @@
             } else {
                 // Draw message on several lines
-                Map<TextAttribute, Object> map = new Hashtable<TextAttribute, Object>();
+                Map<TextAttribute, Object> map = new HashMap<TextAttribute, Object>();
                 map.put(TextAttribute.FAMILY, "Serif");
                 map.put(TextAttribute.SIZE, new Float(18.0));
Index: /trunk/src/org/openstreetmap/josm/gui/layer/WMSLayer.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/layer/WMSLayer.java	(revision 8850)
+++ /trunk/src/org/openstreetmap/josm/gui/layer/WMSLayer.java	(revision 8851)
@@ -118,5 +118,5 @@
     @Override
     public String nameSupportedProjections() {
-        StringBuffer ret = new StringBuffer();
+        StringBuilder ret = new StringBuilder();
         for (String e: supportedProjections) {
             ret.append(e).append(", ");
Index: /trunk/src/org/openstreetmap/josm/io/GpxReader.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/io/GpxReader.java	(revision 8850)
+++ /trunk/src/org/openstreetmap/josm/io/GpxReader.java	(revision 8851)
@@ -7,11 +7,12 @@
 import java.io.InputStream;
 import java.io.Reader;
+import java.util.ArrayDeque;
 import java.util.ArrayList;
 import java.util.Collection;
+import java.util.Deque;
 import java.util.HashMap;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
-import java.util.Stack;
 
 import javax.xml.parsers.ParserConfigurationException;
@@ -64,8 +65,8 @@
         private GpxLink currentLink;
         private Extensions currentExtensions;
-        private Stack<State> states;
-        private final Stack<String> elements = new Stack<>();
-
-        private StringBuffer accumulator = new StringBuffer();
+        private Deque<State> states;
+        private final Deque<String> elements = new ArrayDeque<>();
+
+        private StringBuilder accumulator = new StringBuilder();
 
         private boolean nokiaSportsTrackerBug;
@@ -73,6 +74,6 @@
         @Override
         public void startDocument() {
-            accumulator = new StringBuffer();
-            states = new Stack<>();
+            accumulator = new StringBuilder();
+            states = new ArrayDeque<>();
             data = new GpxData();
         }
@@ -476,5 +477,5 @@
         @Override
         public void endDocument() throws SAXException  {
-            if (!states.empty())
+            if (!states.isEmpty())
                 throw new SAXException(tr("Parse error: invalid document structure for GPX document."));
             Extensions metaExt = (Extensions) data.get(META_EXTENSIONS);
Index: /trunk/src/org/openstreetmap/josm/io/NoteReader.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/io/NoteReader.java	(revision 8850)
+++ /trunk/src/org/openstreetmap/josm/io/NoteReader.java	(revision 8851)
@@ -49,5 +49,5 @@
 
         private NoteParseMode parseMode;
-        private StringBuffer buffer = new StringBuffer();
+        private StringBuilder buffer = new StringBuilder();
         private Note thisNote;
         private long commentUid;
Index: /trunk/src/org/openstreetmap/josm/io/imagery/ImageryReader.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/io/imagery/ImageryReader.java	(revision 8850)
+++ /trunk/src/org/openstreetmap/josm/io/imagery/ImageryReader.java	(revision 8851)
@@ -4,11 +4,12 @@
 import java.io.IOException;
 import java.io.InputStream;
+import java.util.ArrayDeque;
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Deque;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Objects;
-import java.util.Stack;
 
 import javax.xml.parsers.ParserConfigurationException;
@@ -70,7 +71,7 @@
 
     private static class Parser extends DefaultHandler {
-        private StringBuffer accumulator = new StringBuffer();
-
-        private Stack<State> states;
+        private StringBuilder accumulator = new StringBuilder();
+
+        private Deque<State> states;
 
         private List<ImageryInfo> entries;
@@ -93,7 +94,7 @@
         @Override
         public void startDocument() {
-            accumulator = new StringBuffer();
+            accumulator = new StringBuilder();
             skipEntry = false;
-            states = new Stack<>();
+            states = new ArrayDeque<>();
             states.push(State.INIT);
             entries = new ArrayList<>();
Index: /trunk/src/org/openstreetmap/josm/tools/XmlObjectParser.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/tools/XmlObjectParser.java	(revision 8850)
+++ /trunk/src/org/openstreetmap/josm/tools/XmlObjectParser.java	(revision 8851)
@@ -10,4 +10,6 @@
 import java.lang.reflect.Method;
 import java.lang.reflect.Modifier;
+import java.util.ArrayDeque;
+import java.util.Deque;
 import java.util.HashMap;
 import java.util.Iterator;
@@ -16,5 +18,4 @@
 import java.util.Locale;
 import java.util.Map;
-import java.util.Stack;
 
 import javax.xml.XMLConstants;
@@ -64,5 +65,5 @@
 
     private class Parser extends DefaultHandler {
-        private Stack<Object> current = new Stack<>();
+        private Deque<Object> current = new ArrayDeque<>();
         private StringBuilder characters = new StringBuilder(64);
 
