Index: applications/editors/josm/plugins/alignways/build.xml
===================================================================
--- applications/editors/josm/plugins/alignways/build.xml	(revision 35752)
+++ applications/editors/josm/plugins/alignways/build.xml	(revision 35753)
@@ -2,7 +2,7 @@
 <project name="alignways" default="dist" basedir=".">
     <!-- enter the SVN commit message -->
-    <property name="commit.message" value="AlignWays: recompile for compatibility with JOSM r17867"/>
+    <property name="commit.message" value="AlignWays: recompile for compatibility with JOSM r17896"/>
     <!-- enter the *lowest* JOSM version this plugin is currently compatible with -->
-    <property name="plugin.main.version" value="17867"/>
+    <property name="plugin.main.version" value="17896"/>
 
     <!-- Configure these properties (replace "..." accordingly).
Index: applications/editors/josm/plugins/alignways/src/org/openstreetmap/josm/plugins/alignways/AlignWaysAlgnSegment.java
===================================================================
--- applications/editors/josm/plugins/alignways/src/org/openstreetmap/josm/plugins/alignways/AlignWaysAlgnSegment.java	(revision 35752)
+++ applications/editors/josm/plugins/alignways/src/org/openstreetmap/josm/plugins/alignways/AlignWaysAlgnSegment.java	(revision 35753)
@@ -1,4 +1,15 @@
 // License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.plugins.alignways;
+
+import org.openstreetmap.josm.data.Bounds;
+import org.openstreetmap.josm.data.coor.EastNorth;
+import org.openstreetmap.josm.data.osm.IWaySegment;
+import org.openstreetmap.josm.data.osm.Node;
+import org.openstreetmap.josm.data.osm.OsmPrimitive;
+import org.openstreetmap.josm.data.osm.Way;
+import org.openstreetmap.josm.gui.MainApplication;
+import org.openstreetmap.josm.gui.MapView;
+import org.openstreetmap.josm.gui.NavigatableComponent;
+import org.openstreetmap.josm.tools.Logging;
 
 import java.awt.BasicStroke;
@@ -17,14 +28,4 @@
 import java.util.Map;
 
-import org.openstreetmap.josm.data.Bounds;
-import org.openstreetmap.josm.data.coor.EastNorth;
-import org.openstreetmap.josm.data.osm.Node;
-import org.openstreetmap.josm.data.osm.OsmPrimitive;
-import org.openstreetmap.josm.data.osm.WaySegment;
-import org.openstreetmap.josm.gui.MainApplication;
-import org.openstreetmap.josm.gui.MapView;
-import org.openstreetmap.josm.gui.NavigatableComponent;
-import org.openstreetmap.josm.tools.Logging;
-
 /**
  * @author tilusnet &lt;tilusnet@gmail.com&gt;
@@ -48,5 +49,5 @@
     private final Color pivotColor = Color.YELLOW;
     private final Color crossColor = pivotColor;
-    private final Map<Node, ArrayList<WaySegment>> adjWaySegs = new HashMap<>();
+    private final Map<Node, ArrayList<IWaySegment<Node, Way>>> adjWaySegs = new HashMap<>();
 
     public AlignWaysAlgnSegment(MapView mapview, Point p)
@@ -62,5 +63,5 @@
      */
     @Override
-    public void setSegment(WaySegment segment) {
+    public void setSegment(IWaySegment<Node, Way> segment) {
         super.setSegment(segment);
         setPivots();
@@ -68,5 +69,5 @@
 
     @Override
-    void setSegmentEndpoints(WaySegment segment) {
+    void setSegmentEndpoints(IWaySegment<Node, Way> segment) {
         super.setSegmentEndpoints(segment);
 
@@ -192,6 +193,6 @@
      * @return The collection of the adjacent waysegments.
      */
-    private Collection<WaySegment> determineAdjacentWaysegments(Node node) {
-        Collection<WaySegment> wsSet = new HashSet<>();
+    private Collection<IWaySegment<Node, Way>> determineAdjacentWaysegments(Node node) {
+        Collection<IWaySegment<Node, Way>> wsSet = new HashSet<>();
         final double radius = 10.0;
         final int stepsOnCircle = 24;
@@ -205,5 +206,5 @@
             Point pnew = new Point();
             pnew.setLocation(x, y);
-            WaySegment ws = MainApplication.getMap().mapView.getNearestWaySegment(pnew, OsmPrimitive::isUsable);
+            IWaySegment<Node, Way> ws = MainApplication.getMap().mapView.getNearestWaySegment(pnew, OsmPrimitive::isUsable);
             if (ws != null && !ws.equals(this.segment) &&
                     (ws.getFirstNode().equals(node) || ws.getSecondNode().equals(node))) {
@@ -226,5 +227,5 @@
      * @return Collection of the adjacent way segments.
      */
-    public ArrayList<WaySegment> getAdjacentWaySegments(Node node) {
+    public ArrayList<IWaySegment<Node, Way>> getAdjacentWaySegments(Node node) {
         return adjWaySegs.get(node);
     }
@@ -236,5 +237,5 @@
         // Note: segment should never be null here, and its nodes should never be missing.
         // If they are, it's a bug, possibly related to tracking of DataSet deletions.
-        if (segment.way.getNodesCount() <= segment.lowerIndex + 1) {
+        if (segment.getWay().getNodesCount() <= segment.getUpperIndex()) {
             Logging.warn("Not drawing AlignWays pivot points: underlying nodes disappeared");
             return;
Index: applications/editors/josm/plugins/alignways/src/org/openstreetmap/josm/plugins/alignways/AlignWaysCmdKeepAngles.java
===================================================================
--- applications/editors/josm/plugins/alignways/src/org/openstreetmap/josm/plugins/alignways/AlignWaysCmdKeepAngles.java	(revision 35752)
+++ applications/editors/josm/plugins/alignways/src/org/openstreetmap/josm/plugins/alignways/AlignWaysCmdKeepAngles.java	(revision 35753)
@@ -2,19 +2,20 @@
 package org.openstreetmap.josm.plugins.alignways;
 
-import static org.openstreetmap.josm.tools.I18n.tr;
-
-import java.util.ArrayList;
-import java.util.Map;
-
-import javax.swing.JOptionPane;
-
 import org.openstreetmap.josm.data.coor.EastNorth;
 import org.openstreetmap.josm.data.osm.DataSet;
+import org.openstreetmap.josm.data.osm.INode;
+import org.openstreetmap.josm.data.osm.IWaySegment;
 import org.openstreetmap.josm.data.osm.Node;
-import org.openstreetmap.josm.data.osm.WaySegment;
+import org.openstreetmap.josm.data.osm.Way;
 import org.openstreetmap.josm.gui.MainApplication;
 import org.openstreetmap.josm.plugins.alignways.geometry.AlignWaysGeomLine;
 import org.openstreetmap.josm.plugins.alignways.geometry.AlignWaysGeomLine.IntersectionStatus;
 import org.openstreetmap.josm.plugins.alignways.geometry.AlignWaysGeomPoint;
+
+import javax.swing.JOptionPane;
+import java.util.ArrayList;
+import java.util.Map;
+
+import static org.openstreetmap.josm.tools.I18n.tr;
 
 /**
@@ -53,5 +54,5 @@
         }
 
-        ArrayList<WaySegment> alws = algnSeg.getAdjacentWaySegments(endpoint);
+        ArrayList<IWaySegment<Node, Way>> alws = algnSeg.getAdjacentWaySegments(endpoint);
         int alwsSize = alws.size();
         if (0 < alwsSize && alwsSize <= 2) {
@@ -164,5 +165,5 @@
     }
 
-    private Node getNonEqualNode(WaySegment waySegment, Node endpoint) {
+    private <N extends INode> N getNonEqualNode(IWaySegment<N, ?> waySegment, N endpoint) {
         if (waySegment.getFirstNode().equals(endpoint)) {
             return waySegment.getSecondNode();
Index: applications/editors/josm/plugins/alignways/src/org/openstreetmap/josm/plugins/alignways/AlignWaysCmdKeepLength.java
===================================================================
--- applications/editors/josm/plugins/alignways/src/org/openstreetmap/josm/plugins/alignways/AlignWaysCmdKeepLength.java	(revision 35752)
+++ applications/editors/josm/plugins/alignways/src/org/openstreetmap/josm/plugins/alignways/AlignWaysCmdKeepLength.java	(revision 35753)
@@ -16,7 +16,8 @@
 import org.openstreetmap.josm.data.coor.EastNorth;
 import org.openstreetmap.josm.data.osm.DataSet;
+import org.openstreetmap.josm.data.osm.IWaySegment;
 import org.openstreetmap.josm.data.osm.Node;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
-import org.openstreetmap.josm.data.osm.WaySegment;
+import org.openstreetmap.josm.data.osm.Way;
 import org.openstreetmap.josm.data.projection.ProjectionRegistry;
 import org.openstreetmap.josm.gui.MainApplication;
@@ -86,6 +87,6 @@
         MapView mapView = MainApplication.getMap().mapView;
         algnSeg = AlignWaysSegmentMgr.getInstance(mapView).getAlgnSeg();
-        WaySegment algnWS = algnSeg.getSegment();
-        WaySegment refWS = AlignWaysSegmentMgr.getInstance(mapView).getRefSeg().getSegment();
+        IWaySegment<Node, Way> algnWS = algnSeg.getSegment();
+        IWaySegment<Node, Way> refWS = AlignWaysSegmentMgr.getInstance(mapView).getRefSeg().getSegment();
 
         this.pivot = algnSeg.getCurrPivotCoord();
@@ -204,5 +205,5 @@
     public Collection<? extends OsmPrimitive> getParticipatingPrimitives() {
         Collection<OsmPrimitive> prims = new HashSet<>(displaceableNodes);
-        prims.add(algnSeg.getSegment().way);
+        prims.add(algnSeg.getSegment().getWay());
         return Collections.unmodifiableCollection(prims);
     }
Index: applications/editors/josm/plugins/alignways/src/org/openstreetmap/josm/plugins/alignways/AlignWaysSegment.java
===================================================================
--- applications/editors/josm/plugins/alignways/src/org/openstreetmap/josm/plugins/alignways/AlignWaysSegment.java	(revision 35752)
+++ applications/editors/josm/plugins/alignways/src/org/openstreetmap/josm/plugins/alignways/AlignWaysSegment.java	(revision 35753)
@@ -15,8 +15,8 @@
 
 import org.openstreetmap.josm.data.Bounds;
+import org.openstreetmap.josm.data.osm.IWaySegment;
 import org.openstreetmap.josm.data.osm.Node;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.data.osm.Way;
-import org.openstreetmap.josm.data.osm.WaySegment;
 import org.openstreetmap.josm.gui.MapView;
 import org.openstreetmap.josm.gui.layer.MapViewPaintable;
@@ -29,5 +29,5 @@
 public class AlignWaysSegment implements MapViewPaintable {
 
-    protected WaySegment segment;
+    protected IWaySegment<Node, Way> segment;
     protected MapView mapview;
     protected Color segmentColor = Color.WHITE;
@@ -45,5 +45,5 @@
     }
 
-    void setSegment(WaySegment segment) {
+    void setSegment(IWaySegment<Node, Way> segment) {
         this.segment = segment;
         if (segment != null) {
@@ -53,5 +53,5 @@
     }
 
-    void setSegmentEndpoints(WaySegment segment) {
+    void setSegmentEndpoints(IWaySegment<Node, Way> segment) {
         if (segment != null) {
             try {
@@ -65,5 +65,5 @@
     }
 
-    protected WaySegment getNearestWaySegment(Point p) {
+    protected IWaySegment<Node, Way> getNearestWaySegment(Point p) {
         return mapview.getNearestWaySegment(p, OsmPrimitive::isUsable);
     }
@@ -75,5 +75,5 @@
     }
 
-    public WaySegment getSegment() {
+    public IWaySegment<Node, Way> getSegment() {
         return segment;
     }
@@ -87,5 +87,5 @@
         // Note: segment should never be null here, and its nodes should never be missing.
         // If they are, it's a bug, possibly related to tracking of DataSet deletions.
-        if (segment.way.getNodesCount() <= segment.lowerIndex + 1) {
+        if (segment.getWay().getNodesCount() <= segment.getUpperIndex()) {
             Logging.warn("Not drawing AlignWays highlighting segment: underlying nodes disappeared");
             return;
@@ -117,5 +117,5 @@
             return false;
 
-        return (primitive instanceof Way && segment.way.equals(primitive)) ||
+        return (primitive instanceof Way && segment.getWay().equals(primitive)) ||
                 (primitive instanceof Node && segmentEndPoints.contains(primitive));
 
