Index: /applications/editors/josm/plugins/pt_assistant/src/org/openstreetmap/josm/plugins/pt_assistant/actions/SplitRoundaboutAction.java
===================================================================
--- /applications/editors/josm/plugins/pt_assistant/src/org/openstreetmap/josm/plugins/pt_assistant/actions/SplitRoundaboutAction.java	(revision 33415)
+++ /applications/editors/josm/plugins/pt_assistant/src/org/openstreetmap/josm/plugins/pt_assistant/actions/SplitRoundaboutAction.java	(revision 33416)
@@ -24,4 +24,5 @@
 import org.openstreetmap.josm.actions.SplitWayAction.SplitWayResult;
 import org.openstreetmap.josm.actions.downloadtasks.DownloadOsmTask;
+import org.openstreetmap.josm.actions.relation.DownloadSelectedIncompleteMembersAction;
 import org.openstreetmap.josm.command.ChangeCommand;
 import org.openstreetmap.josm.command.Command;
@@ -35,4 +36,5 @@
 import org.openstreetmap.josm.data.osm.RelationMember;
 import org.openstreetmap.josm.data.osm.Way;
+import org.openstreetmap.josm.gui.dialogs.relation.DownloadRelationMemberTask;
 import org.openstreetmap.josm.plugins.pt_assistant.utils.RouteUtils;
 import org.openstreetmap.josm.tools.Pair;
@@ -77,8 +79,9 @@
                 rbbox.getBottomRightLon() + lonOffset);
         Future<?> future = task.download(false, area, null);
+
         Main.worker.submit(() -> {
             try {
                 future.get();
-                continueAfterDownload(roundabout);
+                downloadIncompleteRelations(roundabout);
             } catch (InterruptedException | ExecutionException e1) {
                  Main.error(e1);
@@ -117,4 +120,27 @@
     }
 
+    private void downloadIncompleteRelations(Way roundabout) {
+
+        List<Relation> parents = getPTRouteParents(roundabout);
+        parents.removeIf(r -> !r.hasIncompleteMembers());
+        if(parents.isEmpty())
+            continueAfterDownload(roundabout);
+
+        Future <?>future = Main.worker.submit(new DownloadRelationMemberTask(
+            parents,
+            DownloadSelectedIncompleteMembersAction.buildSetOfIncompleteMembers(parents),
+            Main.getLayerManager().getEditLayer()));
+
+        Main.worker.submit(() -> {
+            try {
+                future.get();
+                continueAfterDownload(roundabout);
+            } catch (InterruptedException | ExecutionException e1) {
+                 Main.error(e1);
+                return;
+            }
+        });
+    }
+
     public Command getUpdateRelationsCommand(Map<Relation,
             List<Integer>> savedPositions,
@@ -151,4 +177,7 @@
                 Way entryWay = entryExitWays.a;
                 Way exitWay = entryExitWays.b;
+
+                if(entryWay == null || exitWay == null)
+                    return;
 
                 //get the entry and exit nodes, exit if not found
@@ -195,6 +224,13 @@
         //the ways returned are the one exactly before and after the roundabout
         Pair<Way, Way> ret = new Pair<>(null, null);
-        ret.a = r.getMember(position-1).getWay();
-        ret.b = r.getMember(position).getWay();
+
+        RelationMember before = r.getMember(position-1);
+        if(before.isWay())
+            ret.a = before.getWay();
+
+        RelationMember after = r.getMember(position);
+        if(after.isWay())
+            ret.b = after.getWay();
+
         return ret;
     }
@@ -212,7 +248,5 @@
             parents.remove(roundabout);
             for(Way parent: parents) {
-                for(Relation r : OsmPrimitive.getFilteredList(
-                        parent.getReferrers(), Relation.class)) {
-                    if(RouteUtils.isPTRoute(r))
+                if(!getPTRouteParents(parent).isEmpty()) {
                         return false;
                 }
@@ -225,10 +259,6 @@
 
     public Command getRemoveRoundaboutFromRelationsCommand(Way roundabout) {
-        List <Relation> referrers = OsmPrimitive.getFilteredList(
-                roundabout.getReferrers(), Relation.class);
-        referrers.removeIf(r -> !RouteUtils.isPTRoute(r));
-
         List<Command> commands = new ArrayList<>();
-        referrers.forEach(r -> {
+        getPTRouteParents(roundabout).forEach(r -> {
             Relation c = new Relation(r);
             c.removeMembersFor(roundabout);
@@ -244,9 +274,6 @@
 
         Map<Relation, List<Integer>> savedPositions = new HashMap<>();
-        List <Relation> referrers = OsmPrimitive.getFilteredList(
-                roundabout.getReferrers(), Relation.class);
-        referrers.removeIf(r -> !RouteUtils.isPTRoute(r));
-
-        for(Relation curr : referrers) {
+
+        for(Relation curr : getPTRouteParents(roundabout)) {
             for(int j = 0; j < curr.getMembersCount(); j++) {
                 if(curr.getMember(j).getUniqueId() == roundabout.getUniqueId()) {
@@ -260,4 +287,11 @@
 
         return savedPositions;
+    }
+
+    private List<Relation> getPTRouteParents(Way roundabout) {
+        List <Relation> referrers = OsmPrimitive.getFilteredList(
+                roundabout.getReferrers(), Relation.class);
+        referrers.removeIf(r -> !RouteUtils.isPTRoute(r));
+        return referrers;
     }
 
