diff git a/src/org/openstreetmap/josm/actions/SimplifyWayAction.java b/src/org/openstreetmap/josm/actions/SimplifyWayAction.java
a

b

public class SimplifyWayAction extends JosmAction { 
135  135  * in order to simplify the way. 
136  136  */ 
137  137  protected boolean isRequiredNode(Way way, Node node) { 
138   boolean isRequired = Collections.frequency(way.getNodes(), node) > 1; 
 138  int frequency = Collections.frequency(way.getNodes(), node); 
 139  if ((way.getNode(0) == node) && (way.getNode(way.getNodesCount()1) == node)) { 
 140  frequency = frequency  1; // closed way closing node counted only once 
 141  } 
 142  boolean isRequired = frequency > 1; 
139  143  if (!isRequired) { 
140  144  List<OsmPrimitive> parents = new LinkedList<>(); 
141  145  parents.addAll(node.getReferrers()); 
… 
… 
public class SimplifyWayAction extends JosmAction { 
190  194  i++; 
191  195  } 
192  196  
 197  if ((newNodes.size() > 3) && (newNodes.get(0) == newNodes.get(newNodes.size()1))) { 
 198  // Closed way, check if the first node could also be simplified ... 
 199  if ( ! isRequiredNode(w, newNodes.get(0))) { 
 200  List<Node> l1 = new ArrayList<>(3); 
 201  l1.add(newNodes.get(newNodes.size()2)); 
 202  l1.add(newNodes.get(0)); 
 203  l1.add(newNodes.get(1)); 
 204  List<Node> l2 = new ArrayList<>(3); 
 205  buildSimplifiedNodeList(l1, 0, 2, threshold, l2); 
 206  if ( ! l2.contains(l1.get(1))) { 
 207  newNodes.remove(0); // remove the first node 
 208  newNodes.set(newNodes.size()1, newNodes.get(0)); // close the way 
 209  } 
 210  } 
 211  } 
 212  
193  213  Set<Node> delNodes = new HashSet<>(); 
194  214  delNodes.addAll(w.getNodes()); 
195  215  delNodes.removeAll(newNodes); 