Index: /applications/editors/josm/plugins/pt_assistant/src/org/openstreetmap/josm/plugins/pt_assistant/actions/IncompleteMembersDownloadThread.java
===================================================================
--- /applications/editors/josm/plugins/pt_assistant/src/org/openstreetmap/josm/plugins/pt_assistant/actions/IncompleteMembersDownloadThread.java	(revision 32366)
+++ /applications/editors/josm/plugins/pt_assistant/src/org/openstreetmap/josm/plugins/pt_assistant/actions/IncompleteMembersDownloadThread.java	(revision 32367)
@@ -42,20 +42,17 @@
 					if (RouteUtils.isTwoDirectionRoute(currentRelation)) {
 						list.add(currentRelation);
-						for (RelationMember rm : currentRelation.getMembers()) {
-							if (rm.hasRole("stop") || rm.hasRole("stop_entry_only") || rm.hasRole("stop_exit_only")
-									|| rm.hasRole("platform") || rm.hasRole("platform_entry_only")
-									|| rm.hasRole("platform_exit_only")) {
-								List<OsmPrimitive> referrers = rm.getMember().getReferrers();
-								for (OsmPrimitive referrer : referrers) {
-									if (referrer.getType().equals(OsmPrimitiveType.RELATION)
-											&& referrer.hasTag("public_transport", "stop_area")) {
-										list.add(referrer);
-										// TODO: this may never be executed
-										// because the platform is an incomplete
-										// member yet.
-									}
-								}
-							}
-						}
+//						for (RelationMember rm : currentRelation.getMembers()) {
+//							if (rm.hasRole("stop") || rm.hasRole("stop_entry_only") || rm.hasRole("stop_exit_only")
+//									|| rm.hasRole("platform") || rm.hasRole("platform_entry_only")
+//									|| rm.hasRole("platform_exit_only")) {
+//								List<OsmPrimitive> referrers = rm.getMember().getReferrers();
+//								for (OsmPrimitive referrer : referrers) {
+//									if (referrer.getType().equals(OsmPrimitiveType.RELATION)
+//											&& referrer.hasTag("public_transport", "stop_area")) {
+//										list.add(referrer);
+//									}
+//								}
+//							}
+//						}
 					}
 				}
Index: /applications/editors/josm/plugins/pt_assistant/src/org/openstreetmap/josm/plugins/pt_assistant/data/PTRouteDataManager.java
===================================================================
--- /applications/editors/josm/plugins/pt_assistant/src/org/openstreetmap/josm/plugins/pt_assistant/data/PTRouteDataManager.java	(revision 32366)
+++ /applications/editors/josm/plugins/pt_assistant/src/org/openstreetmap/josm/plugins/pt_assistant/data/PTRouteDataManager.java	(revision 32367)
@@ -6,4 +6,5 @@
 import javax.swing.JOptionPane;
 
+import org.openstreetmap.josm.data.coor.LatLon;
 import org.openstreetmap.josm.data.osm.Relation;
 import org.openstreetmap.josm.data.osm.RelationMember;
@@ -29,12 +30,18 @@
 	private List<PTWay> ptways = new ArrayList<>();
 
-	public PTRouteDataManager(Relation relation) {
+	/*
+	 * Stores relation members that could not be created because they are not
+	 * expected in the model for public_transport version 2
+	 */
+	private List<RelationMember> failedMembers = new ArrayList<>();
+
+	public PTRouteDataManager(Relation relation) throws IllegalArgumentException {
 
 		// It is assumed that the relation is a route. Build in a check here
 		// (e.g. from class RouteUtils) if you want to invoke this constructor
 		// from outside the pt_assitant SegmentChecker)
-		
+
 		this.relation = relation;
-		
+
 		PTStop prev = null; // stores the last created PTStop
 
@@ -42,12 +49,40 @@
 
 			if (RouteUtils.isPTStop(member)) {
-				
-				// check if there are consecutive elements that belong to the
-				// same stop:
-				if (prev != null && prev.getName().equalsIgnoreCase(member.getMember().get("name"))) {
-					// this PTStop already exists, so just add a new element:
+
+				// First, check if the stop already exists (i.e. there are
+				// consecutive elements that belong to the same stop:
+				boolean stopExists = false;
+
+				if (prev != null) {
+					if (prev.getName() == null || prev.getName().equals("") || member.getMember().get("name") == null
+							|| member.getMember().get("name").equals("")) {
+
+						// if there is no name, check by proximity:
+						// Squared distance of 0.000004 corresponds to
+						// around 100 m
+						if (this.calculateDistanceSq(member, prev) < 0.000004) {
+
+							stopExists = true;
+						}
+					} else {
+
+						// if there is a name, check by name comparison:
+						if (prev.getName().equalsIgnoreCase(member.getMember().get("name"))) {
+
+							stopExists = true;
+						}
+					}
+				}
+
+				// check if there are consecutive elements that belong to
+				// the same stop:
+				if (stopExists) {
+					// this PTStop already exists, so just add a new
+					// element:
 					prev.addStopElement(member);
-					// TODO: something may need to be done if adding the element
-					// did not succeed. The failure is a result of the same stop
+					// TODO: something may need to be done if adding the
+					// element
+					// did not succeed. The failure is a result of the same
+					// stop
 					// having >1 stop_position, platform or stop_area.
 				} else {
@@ -58,26 +93,50 @@
 				}
 
-			} else {
+			} else if (RouteUtils.isPTWay(member)) {
+
 				PTWay ptway = new PTWay(member);
 				ptways.add(ptway);
+
+			} else {
+				this.failedMembers.add(member);
 			}
+
 		}
 	}
-	
+
+	/**
+	 * Calculates the squared distance between the centers of bounding boxes of
+	 * two relation members (which are supposed to be platforms or
+	 * stop_positions)
+	 * 
+	 * @param member1
+	 * @param member2
+	 * @return Squared distance between the centers of the bounding boxes of the
+	 *         given relation members
+	 */
+	private double calculateDistanceSq(RelationMember member1, RelationMember member2) {
+		LatLon coord1 = member1.getMember().getBBox().getCenter();
+		LatLon coord2 = member2.getMember().getBBox().getCenter();
+		return coord1.distanceSq(coord2);
+	}
+
 	/**
 	 * Assigns the given way to a PTWay of this route relation.
-	 * @param inputWay Way to be assigned to a PTWAy of this route relation
-	 * @return PTWay that contains the geometry of the inputWay, null if not found
+	 * 
+	 * @param inputWay
+	 *            Way to be assigned to a PTWAy of this route relation
+	 * @return PTWay that contains the geometry of the inputWay, null if not
+	 *         found
 	 */
 	public PTWay getPTWay(Way inputWay) {
-		
-		for (PTWay curr: ptways) {
-			
+
+		for (PTWay curr : ptways) {
+
 			if (curr.isWay() && curr.getWays().get(0) == inputWay) {
 				return curr;
 			}
-			
+
 			if (curr.isRelation()) {
-				for (RelationMember rm: curr.getRelation().getMembers()) {
+				for (RelationMember rm : curr.getRelation().getMembers()) {
 					Way wayInNestedRelation = rm.getWay();
 					if (wayInNestedRelation == inputWay) {
@@ -87,24 +146,24 @@
 			}
 		}
-		
+
 		return null; // if not found
 	}
-	
+
 	public List<PTStop> getPTStops() {
 		return this.ptstops;
 	}
-	
+
 	public List<PTWay> getPTWays() {
 		return this.ptways;
 	}
-	
+
 	public int getPTStopCount() {
 		return ptstops.size();
 	}
-	
+
 	public int getPTWayCount() {
 		return this.ptways.size();
 	}
-	
+
 	public PTStop getFirstStop() {
 		if (this.ptstops.isEmpty()) {
@@ -113,10 +172,14 @@
 		return this.ptstops.get(0);
 	}
-	
+
 	public PTStop getLastStop() {
 		if (this.ptstops.isEmpty()) {
 			return null;
 		}
-		return this.ptstops.get(ptstops.size()-1);
+		return this.ptstops.get(ptstops.size() - 1);
+	}
+
+	public List<RelationMember> getFailedMembers() {
+		return this.failedMembers;
 	}
 
Index: /applications/editors/josm/plugins/pt_assistant/src/org/openstreetmap/josm/plugins/pt_assistant/data/PTStop.java
===================================================================
--- /applications/editors/josm/plugins/pt_assistant/src/org/openstreetmap/josm/plugins/pt_assistant/data/PTStop.java	(revision 32366)
+++ /applications/editors/josm/plugins/pt_assistant/src/org/openstreetmap/josm/plugins/pt_assistant/data/PTStop.java	(revision 32367)
@@ -2,11 +2,13 @@
 
 import java.util.ArrayList;
+import java.util.Collection;
 import java.util.List;
-import java.util.Set;
 
+import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.data.coor.LatLon;
+import org.openstreetmap.josm.data.osm.BBox;
 import org.openstreetmap.josm.data.osm.Node;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.data.osm.OsmPrimitiveType;
-import org.openstreetmap.josm.data.osm.Relation;
 import org.openstreetmap.josm.data.osm.RelationMember;
 
@@ -15,5 +17,5 @@
 	private Node stopPosition = null;
 	private OsmPrimitive platform = null;
-	
+
 	private String name = "";
 
@@ -22,5 +24,6 @@
 		super(other);
 
-		if ((other.hasRole("stop") || other.hasRole("stop_entry_only") || other.hasRole("stop_exit_only"))&& other.getType().equals(OsmPrimitiveType.NODE)) {
+		if ((other.hasRole("stop") || other.hasRole("stop_entry_only") || other.hasRole("stop_exit_only"))
+				&& other.getType().equals(OsmPrimitiveType.NODE)) {
 
 			this.stopPosition = other.getNode();
@@ -34,5 +37,5 @@
 
 		} else {
-			throw new IllegalArgumentException("The RelationMember type does not match its role");
+			throw new IllegalArgumentException("The RelationMember type does not match its role " + other.getMember().getName());
 		}
 
@@ -82,22 +85,4 @@
 	public Node getStopPosition() {
 
-		// List<OsmPrimitive> referrers = platform.getReferrers();
-		// List<Relation> stopAreaRelations = new ArrayList<>();
-		// for (OsmPrimitive referrer: referrers) {
-		// if (referrer.getType().equals(OsmPrimitiveType.RELATION) &&
-		// referrer.hasTag("public_tranport", "stop_area")) {
-		// stopAreaRelations.add((Relation)referrer);
-		// }
-		// }
-		//
-		// for (Relation stopArea: stopAreaRelations) {
-		// for (RelationMember rm: stopArea.getMembers()) {
-		// if (rm.hasRole("stop") && rm.getType().equals(OsmPrimitiveType.NODE))
-		// {
-		// this.stopPosition = rm.getNode();
-		// }
-		// }
-		// }
-
 		return this.stopPosition;
 	}
@@ -111,5 +96,5 @@
 		return this.platform;
 	}
-	
+
 	public String getName() {
 		return this.name;
@@ -138,25 +123,46 @@
 		}
 
-		// 1) Look for any stop_area relations that this platform
-		// belongs to:
-		ArrayList<OsmPrimitive> platformList = new ArrayList<OsmPrimitive>(1);
-		platformList.add(platform);
-		Set<Relation> platformParentRelations = OsmPrimitive.getParentRelations(platformList);
-		ArrayList<Relation> stopAreaList = new ArrayList<Relation>();
-		for (Relation platformParentRelation : platformParentRelations) {
-			if (platformParentRelation.hasTag("public_transport", "stop_area")) {
-				stopAreaList.add(platformParentRelation);
+		// Look for a stop position within 100 m (around 0.002 degrees) of this platform:
+
+		LatLon platformCenter = platform.getBBox().getCenter();
+		Double ax = platformCenter.getX() - 0.002;
+		Double bx = platformCenter.getX() + 0.002;
+		Double ay = platformCenter.getY() - 0.002;
+		Double by = platformCenter.getY() + 0.002;
+		BBox platformBBox = new BBox(ax, ay, bx, by);
+
+		Collection<Node> allNodes = Main.getLayerManager().getEditDataSet().getNodes();
+		for (Node currentNode : allNodes) {
+			if (platformBBox.bounds(currentNode.getBBox()) && currentNode.hasTag("public_transport", "stop_position")) {
+				potentialStopPositions.add(currentNode);
 			}
 		}
 
-		// 2) Get all potential stop_positions from those stop_area relations:
-		for (Relation stopArea : stopAreaList) {
-			for (RelationMember rm : stopArea.getMembers()) {
-				if ((rm.hasRole("stop") || rm.hasRole("stop_entry_only") || rm.hasRole("stop_exit_only"))&& rm.getType().equals(OsmPrimitiveType.NODE)
-						&& rm.getNode().hasTag("public_transport", "stop_position")) {
-					potentialStopPositions.add(rm.getNode());
-				}
-			}
-		}
+		// // 1) Look for any stop_area relations that this platform
+		// // belongs to:
+		// ArrayList<OsmPrimitive> platformList = new
+		// ArrayList<OsmPrimitive>(1);
+		// platformList.add(platform);
+		// Set<Relation> platformParentRelations =
+		// OsmPrimitive.getParentRelations(platformList);
+		// ArrayList<Relation> stopAreaList = new ArrayList<Relation>();
+		// for (Relation platformParentRelation : platformParentRelations) {
+		// if (platformParentRelation.hasTag("public_transport", "stop_area")) {
+		// stopAreaList.add(platformParentRelation);
+		// }
+		// }
+		//
+		// // 2) Get all potential stop_positions from those stop_area
+		// relations:
+		// for (Relation stopArea : stopAreaList) {
+		// for (RelationMember rm : stopArea.getMembers()) {
+		// if ((rm.hasRole("stop") || rm.hasRole("stop_entry_only") ||
+		// rm.hasRole("stop_exit_only"))&&
+		// rm.getType().equals(OsmPrimitiveType.NODE)
+		// && rm.getNode().hasTag("public_transport", "stop_position")) {
+		// potentialStopPositions.add(rm.getNode());
+		// }
+		// }
+		// }
 
 		return potentialStopPositions;
Index: /applications/editors/josm/plugins/pt_assistant/src/org/openstreetmap/josm/plugins/pt_assistant/data/PTWay.java
===================================================================
--- /applications/editors/josm/plugins/pt_assistant/src/org/openstreetmap/josm/plugins/pt_assistant/data/PTWay.java	(revision 32366)
+++ /applications/editors/josm/plugins/pt_assistant/src/org/openstreetmap/josm/plugins/pt_assistant/data/PTWay.java	(revision 32367)
@@ -3,4 +3,6 @@
 import java.util.ArrayList;
 import java.util.List;
+
+import javax.swing.JOptionPane;
 
 import org.openstreetmap.josm.data.osm.OsmPrimitiveType;
Index: /applications/editors/josm/plugins/pt_assistant/src/org/openstreetmap/josm/plugins/pt_assistant/utils/RouteUtils.java
===================================================================
--- /applications/editors/josm/plugins/pt_assistant/src/org/openstreetmap/josm/plugins/pt_assistant/utils/RouteUtils.java	(revision 32366)
+++ /applications/editors/josm/plugins/pt_assistant/src/org/openstreetmap/josm/plugins/pt_assistant/utils/RouteUtils.java	(revision 32367)
@@ -62,17 +62,22 @@
 		if (rm.getType().equals(OsmPrimitiveType.NODE)) {
 
-			if (rm.getNode().hasTag("public_transport", "stop_position")
-					|| rm.getNode().hasTag("public_transport", "platform")
-					|| rm.getNode().hasTag("public_transport", "platform_entry_only")
-					|| rm.getNode().hasTag("public_transport", "platform_exit_only")
-					|| rm.getNode().hasTag("highway", "platform")
-					|| rm.getNode().hasTag("highway", "platform_entry_only")
-					|| rm.getNode().hasTag("highway", "platform_exit_only")
-					|| rm.getNode().hasTag("railway", "platform")
-					|| rm.getNode().hasTag("railway", "platform_entry_only")
-					|| rm.getNode().hasTag("railway", "platform_exit_only")) {
-				return true;
+			if (rm.hasRole("stop") || rm.hasRole("stop_entry_only") || rm.hasRole("stop_exit_only")
+					|| rm.hasRole("platform") || rm.hasRole("platform_entry_only")
+					|| rm.hasRole("platform_exit_only")) {
+
+				if (rm.getNode().hasTag("public_transport", "stop_position")
+						|| rm.getNode().hasTag("highway", "bus_stop")
+						|| rm.getNode().hasTag("public_transport", "platform")
+						|| rm.getNode().hasTag("public_transport", "platform_entry_only")
+						|| rm.getNode().hasTag("public_transport", "platform_exit_only")
+						|| rm.getNode().hasTag("highway", "platform")
+						|| rm.getNode().hasTag("highway", "platform_entry_only")
+						|| rm.getNode().hasTag("highway", "platform_exit_only")
+						|| rm.getNode().hasTag("railway", "platform")
+						|| rm.getNode().hasTag("railway", "platform_entry_only")
+						|| rm.getNode().hasTag("railway", "platform_exit_only")) {
+					return true;
+				}
 			}
-
 		}
 
@@ -105,6 +110,21 @@
 	public static boolean isPTWay(RelationMember rm) {
 
-		return !isPTStop(rm);
+		if (rm.getType().equals(OsmPrimitiveType.NODE)) {
+			return false;
+		}
 
+		if (rm.getType().equals(OsmPrimitiveType.WAY)) {
+			return true;
+		}
+
+		Relation nestedRelation = rm.getRelation();
+
+		for (RelationMember nestedRelationMember : nestedRelation.getMembers()) {
+			if (!nestedRelationMember.getType().equals(OsmPrimitiveType.WAY)) {
+				return false;
+			}
+		}
+
+		return true;
 	}
 
Index: /applications/editors/josm/plugins/pt_assistant/src/org/openstreetmap/josm/plugins/pt_assistant/validation/PTAssitantValidatorTest.java
===================================================================
--- /applications/editors/josm/plugins/pt_assistant/src/org/openstreetmap/josm/plugins/pt_assistant/validation/PTAssitantValidatorTest.java	(revision 32366)
+++ /applications/editors/josm/plugins/pt_assistant/src/org/openstreetmap/josm/plugins/pt_assistant/validation/PTAssitantValidatorTest.java	(revision 32367)
@@ -34,5 +34,6 @@
 	public static final int ERROR_CODE_END_STOP = 3141;
 	public static final int ERROR_CODE_SPLIT_WAY = 3142;
-	
+	public static final int ERROR_CODE_RELAITON_MEMBER_ROLES = 3143;
+
 	public PTAssitantValidatorTest() {
 		super(tr("Public Transport Assistant tests"),
@@ -43,10 +44,8 @@
 	@Override
 	public void visit(Relation r) {
-		
 
 		if (!RouteUtils.isTwoDirectionRoute(r)) {
 			return;
 		}
-		
 
 		// Download incomplete members. If the download does not work, finish.
@@ -57,5 +56,5 @@
 			}
 		}
-		
+
 		if (r.hasIncompleteMembers()) {
 			return;
@@ -66,5 +65,4 @@
 		WayChecker wayChecker = new WayChecker(r, this);
 		this.errors.addAll(wayChecker.getErrors());
-		
 
 		if (this.errors.isEmpty()) {
@@ -124,5 +122,4 @@
 		}
 
-
 		ProceedDialog proceedDialog = new ProceedDialog(r.getId(), numberOfDirectionErrors, numberOfRoadTypeErrors);
 		int userInput = proceedDialog.getUserSelection();
@@ -149,16 +146,16 @@
 
 	}
-	
 
 	/**
 	 * Carries out the second stage of the testing: sorting
+	 * 
 	 * @param r
 	 */
 	private void proceedWithSorting(Relation r) {
-		
+
 		// Check if the relation is correct, or only has a wrong sorting order:
 		RouteChecker routeChecker = new RouteChecker(r, this);
 		List<TestError> routeCheckerErrors = routeChecker.getErrors();
-		
+
 		/*- At this point, there are 3 variants: 
 		 * 
@@ -170,6 +167,5 @@
 		 * 
 		 * */
-		
-		
+
 		if (!routeCheckerErrors.isEmpty()) {
 			// Variant 2
@@ -178,24 +174,30 @@
 			return;
 		}
-		
+
 		if (!routeChecker.getHasGap()) {
 			// Variant 1
-			// TODO: add the segments of this route to the list correct route segments		
-		}
-		
+			// TODO: add the segments of this route to the list correct route
+			// segments
+		}
+
 		// Variant 3:
 		proceedAfterSorting(r);
-		
-		
-	}
-	
-	
+
+	}
+
 	private void proceedAfterSorting(Relation r) {
-		
-		
-		
+
 		SegmentChecker segmentChecker = new SegmentChecker(r, this);
+
+		// Check if the creation of the route data model in the segment checker
+		// worked. If it did not, it means the roles in the route relation do
+		// not match the tags of the route members. 
+		if (!segmentChecker.getErrors().isEmpty()) {
+			this.errors.addAll(segmentChecker.getErrors());
+		}
+
 		segmentChecker.performFirstStopTest();
 		segmentChecker.performLastStopTest();
+
 		// TODO: perform segment test
 		this.errors.addAll(segmentChecker.getErrors());
@@ -249,20 +251,17 @@
 	private void fixErrorFromPlugin(List<TestError> testErrors) {
 
-			
-			// run fix task asynchronously
-			FixTask fixTask = new FixTask(testErrors);
-//			Main.worker.submit(fixTask);
-			
-			Thread t = new Thread(fixTask);
-			t.start();
-			try {
-				t.join();
-				errors.removeAll(testErrors);
-
-			} catch (InterruptedException e) {
-				JOptionPane.showMessageDialog(null, "Error occurred during fixing");
-			}
-
-
+		// run fix task asynchronously
+		FixTask fixTask = new FixTask(testErrors);
+		// Main.worker.submit(fixTask);
+
+		Thread t = new Thread(fixTask);
+		t.start();
+		try {
+			t.join();
+			errors.removeAll(testErrors);
+
+		} catch (InterruptedException e) {
+			JOptionPane.showMessageDialog(null, "Error occurred during fixing");
+		}
 
 	}
Index: /applications/editors/josm/plugins/pt_assistant/src/org/openstreetmap/josm/plugins/pt_assistant/validation/SegmentChecker.java
===================================================================
--- /applications/editors/josm/plugins/pt_assistant/src/org/openstreetmap/josm/plugins/pt_assistant/validation/SegmentChecker.java	(revision 32366)
+++ /applications/editors/josm/plugins/pt_assistant/src/org/openstreetmap/josm/plugins/pt_assistant/validation/SegmentChecker.java	(revision 32367)
@@ -9,4 +9,5 @@
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.data.osm.Relation;
+import org.openstreetmap.josm.data.osm.RelationMember;
 import org.openstreetmap.josm.data.osm.Way;
 import org.openstreetmap.josm.data.validation.Severity;
@@ -34,5 +35,5 @@
 	private PTRouteDataManager manager;
 
-	/* Assigns PTStops to nearest PTWays and stores that correspondense */
+	/* Assigns PTStops to nearest PTWays and stores that correspondence */
 	private StopToWayAssigner assigner;
 
@@ -40,8 +41,21 @@
 
 		super(relation, test);
+
+		this.manager = new PTRouteDataManager(relation);
 		
-		this.manager = new PTRouteDataManager(relation);
+		for (RelationMember rm: manager.getFailedMembers()) {
+			List<Relation> primitives = new ArrayList<>(1);
+			primitives.add(relation);
+			List<OsmPrimitive> highlighted = new ArrayList<>(1);
+			highlighted.add(rm.getMember());
+			TestError e = new TestError(this.test, Severity.WARNING, tr("PT: Relation member roles do not match tags"),
+					PTAssitantValidatorTest.ERROR_CODE_RELAITON_MEMBER_ROLES, primitives, highlighted);
+			this.errors.add(e);
+		}
+
+
+		
 		this.assigner = new StopToWayAssigner(manager.getPTWays());
-		
+
 	}
 
@@ -59,4 +73,8 @@
 
 	private void performEndStopTest(PTStop endStop) {
+
+		if (endStop == null) {
+			return;
+		}
 
 		/*
@@ -96,5 +114,5 @@
 				return;
 			}
-			
+
 			if (stopPositionsOfThisRoute.size() == 1) {
 				endStop.setStopPosition(stopPositionsOfThisRoute.get(0));
@@ -115,10 +133,10 @@
 
 		} else {
-			
+
 			// if the stop_position is known:
 			int belongsToWay = this.belongsToAWayOfThisRoute(endStop.getStopPosition());
-			
+
 			if (belongsToWay == 1) {
-				
+
 				List<Relation> primitives = new ArrayList<>(1);
 				primitives.add(relation);
