Index: /applications/editors/josm/plugins/pt_assistant/src/org/openstreetmap/josm/plugins/pt_assistant/gui/ProceedDialog.java
===================================================================
--- /applications/editors/josm/plugins/pt_assistant/src/org/openstreetmap/josm/plugins/pt_assistant/gui/ProceedDialog.java	(revision 32782)
+++ /applications/editors/josm/plugins/pt_assistant/src/org/openstreetmap/josm/plugins/pt_assistant/gui/ProceedDialog.java	(revision 32783)
@@ -60,5 +60,5 @@
 
 		radioButtonFixAutomatically = new JRadioButton("Fix all errors automatically and proceed");
-		radioButtonFixManually = new JRadioButton("I will fix the erros manually and click the button to proceed");
+		radioButtonFixManually = new JRadioButton("I will fix the errors manually and click the button to proceed");
 		radioButtonDontFix = new JRadioButton("Do not fix anything and proceed with further tests", true);
 		ButtonGroup fixOptionButtonGroup = new ButtonGroup();
Index: /applications/editors/josm/plugins/pt_assistant/src/org/openstreetmap/josm/plugins/pt_assistant/utils/StopUtils.java
===================================================================
--- /applications/editors/josm/plugins/pt_assistant/src/org/openstreetmap/josm/plugins/pt_assistant/utils/StopUtils.java	(revision 32783)
+++ /applications/editors/josm/plugins/pt_assistant/src/org/openstreetmap/josm/plugins/pt_assistant/utils/StopUtils.java	(revision 32783)
@@ -0,0 +1,108 @@
+package org.openstreetmap.josm.plugins.pt_assistant.utils;
+
+import static org.openstreetmap.josm.tools.I18n.tr;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+
+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.OsmUtils;
+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.TestError;
+import org.openstreetmap.josm.plugins.pt_assistant.data.PTRouteDataManager;
+import org.openstreetmap.josm.plugins.pt_assistant.validation.PTAssistantValidatorTest;
+
+/**
+ * Utils class for stop areas
+ * 
+ * @author 
+ *
+ */
+public class StopUtils {
+
+	private StopUtils() {
+		// private constructor for util classes
+	}
+
+	
+	/**
+	 * Checks if a given relation is a stop_area.
+	 * 
+	 * @param r
+	 *            Relation to be checked
+	 * @return true if the relation is a stop_area, false otherwise.
+	 */
+	public static boolean isStopArea(Relation r) {
+
+		if (r == null) {
+			return false;
+		}
+
+		if (r.hasTag("public_transport", "stop_area")) {
+			return true;
+		}
+		return false;
+	}
+	
+	/**
+	 * Checks if a given object is a stop_position.
+	 * 
+	 * @param r
+	 *            Relation to be checked
+	 * @return true if the object is a stop_position, false otherwise.
+	 */
+	public static boolean verifyStopAreaStopPosition(OsmPrimitive rm) {
+
+		if (rm == null) {
+			return false;
+		}
+
+		if (rm.hasTag("public_transport", "stop_position")) {
+			return true;
+		}
+		return false;
+	}
+	
+	/**
+	 * Checks if a given object is a platform.
+	 * 
+	 * @param r
+	 *            Relation to be checked
+	 * @return true if the object is a platform, false otherwise.
+	 */
+	public static boolean verifyStopAreaPlatform(OsmPrimitive rm) {
+
+		if (rm == null) {
+			return false;
+		}
+
+		if (rm.hasTag("public_transport", "platform")) {
+			return true;
+		}
+		return false;
+	}
+
+	
+	/**
+	 * Checks if a given object is part of an stop area relation
+	 * 
+	 * @param r
+	 *            Object to be checked
+	 * @return true if the object part of stop area relation, false otherwise.
+	 */
+	public static boolean verifyIfMemberOfStopArea(OsmPrimitive member) {
+
+		for (Relation parentRelation : OsmPrimitive.getFilteredList(member.getReferrers(), Relation.class)) {
+			if (StopUtils.isStopArea(parentRelation)) {
+				return true;
+			}
+		}
+	return false;
+	}
+	
+}
Index: /applications/editors/josm/plugins/pt_assistant/src/org/openstreetmap/josm/plugins/pt_assistant/validation/NodeChecker.java
===================================================================
--- /applications/editors/josm/plugins/pt_assistant/src/org/openstreetmap/josm/plugins/pt_assistant/validation/NodeChecker.java	(revision 32782)
+++ /applications/editors/josm/plugins/pt_assistant/src/org/openstreetmap/josm/plugins/pt_assistant/validation/NodeChecker.java	(revision 32783)
@@ -6,4 +6,9 @@
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Set;
+import java.util.LinkedList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Collections;
 
 import javax.swing.JOptionPane;
@@ -18,8 +23,11 @@
 import org.openstreetmap.josm.data.osm.OsmPrimitiveType;
 import org.openstreetmap.josm.data.osm.Way;
+import org.openstreetmap.josm.data.osm.Relation;
+import org.openstreetmap.josm.data.osm.RelationMember;
 import org.openstreetmap.josm.data.validation.Severity;
 import org.openstreetmap.josm.data.validation.Test;
 import org.openstreetmap.josm.data.validation.TestError;
 import org.openstreetmap.josm.plugins.pt_assistant.utils.RouteUtils;
+import org.openstreetmap.josm.plugins.pt_assistant.utils.StopUtils;
 
 public class NodeChecker extends Checker {
@@ -81,4 +89,66 @@
 		}
 	}
+	
+	/**
+	 * Checks if the given stop_position node belongs to any stop_area relation
+	 * 
+	 * @param n
+	 */
+	protected void performNodePartOfStopAreaTest() {
+				
+		if (!StopUtils.verifyIfMemberOfStopArea(node)) {
+		
+			List<OsmPrimitive> primitives = new ArrayList<>(1);
+			primitives.add(node);
+			TestError e = new TestError(this.test, Severity.WARNING, tr("PT: Stop position or platform is not part of a stop area relation"),
+					PTAssistantValidatorTest.ERROR_CODE_NODE_PART_OF_STOP_AREA, primitives);
+			errors.add(e);
+		}
+	}
+	
+	/**
+	 * Checks if the given stop_position belongs to the same route relations as it's related platform(s).	 * 
+	 * @param n
+	 */
+	protected void performStopPositionComparePlatformRelations() {
+
+		HashMap<Long, Long> stopPositionRelationIds = new HashMap<>();
+		HashMap<Long, Long> platformRelationIds = new HashMap<>();
+
+		// Loop through all referrer relations
+		for (Relation referrer : OsmPrimitive.getFilteredList(node.getReferrers(), Relation.class)) {
+
+			// Create list of relations the stop position belongs to
+			if (referrer.get("type") == "route") {
+				stopPositionRelationIds.put(referrer.getId(), referrer.getId());
+			}
+			
+			// Create list of relations the related platform(s) belongs to
+			else if (referrer.get("public_transport") == "stop_area") {
+				for (RelationMember stopAreaMember : referrer.getMembers()) {
+					Node stopAreaMemberFoo = stopAreaMember.getNode();
+					if (stopAreaMemberFoo.get("public_transport") == "platform") {
+						for (Relation stopAreaMemberReferrer : OsmPrimitive.getFilteredList(stopAreaMemberFoo.getReferrers(), Relation.class)) {
+							if (stopAreaMemberReferrer.get("type") == "route") {
+								platformRelationIds.put(stopAreaMemberReferrer.getId(), stopAreaMemberReferrer.getId());
+							}
+						}
+					}
+				}
+			}
+		}
+
+		// Check if route relation lists are identical
+		if (stopPositionRelationIds.equals(platformRelationIds)) {
+			return;
+		}
+		
+		List<OsmPrimitive> primitives = new ArrayList<>(1);
+		primitives.add(node);
+		TestError e = new TestError(this.test, Severity.WARNING, tr("PT: Stop position and it's related platform(s) have different route relations"),
+				PTAssistantValidatorTest.ERROR_CODE_STOP_POSITION_COMPARE_RELATIONS, primitives);
+		errors.add(e);
+	}
+	
 
 	/**
Index: /applications/editors/josm/plugins/pt_assistant/src/org/openstreetmap/josm/plugins/pt_assistant/validation/PTAssistantValidatorTest.java
===================================================================
--- /applications/editors/josm/plugins/pt_assistant/src/org/openstreetmap/josm/plugins/pt_assistant/validation/PTAssistantValidatorTest.java	(revision 32782)
+++ /applications/editors/josm/plugins/pt_assistant/src/org/openstreetmap/josm/plugins/pt_assistant/validation/PTAssistantValidatorTest.java	(revision 32783)
@@ -5,5 +5,8 @@
 import java.lang.reflect.InvocationTargetException;
 import java.util.ArrayList;
+import java.util.Collection;
+import java.util.LinkedList;
 import java.util.List;
+import java.util.Set;
 
 import javax.swing.JOptionPane;
@@ -14,4 +17,5 @@
 import org.openstreetmap.josm.data.osm.DataSet;
 import org.openstreetmap.josm.data.osm.Node;
+import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.data.osm.Relation;
 import org.openstreetmap.josm.data.osm.Way;
@@ -29,4 +33,5 @@
 import org.openstreetmap.josm.plugins.pt_assistant.gui.ProceedDialog;
 import org.openstreetmap.josm.plugins.pt_assistant.utils.RouteUtils;
+import org.openstreetmap.josm.plugins.pt_assistant.utils.StopUtils;
 import org.openstreetmap.josm.plugins.pt_assistant.utils.StopToWayAssigner;
 
@@ -44,4 +49,15 @@
 	public static final int ERROR_CODE_STOP_NOT_SERVED = 3753;
 	public static final int ERROR_CODE_STOP_BY_STOP = 3754;
+	public static final int ERROR_CODE_STOP_POSITION_COMPARE_RELATIONS = 3755;
+	public static final int ERROR_CODE_NODE_PART_OF_STOP_AREA = 3761;
+	public static final int ERROR_CODE_STOP_AREA_MEMBERS_EXCESS = 3762;
+	public static final int ERROR_CODE_STOP_AREA_STOP_POSITION = 3763;
+	public static final int ERROR_CODE_STOP_AREA_PLATFORM = 3764;
+	public static final int ERROR_CODE_STOP_AREA_NO_STOPS = 3765;
+	public static final int ERROR_CODE_STOP_AREA_MANY_STOPS = 3765;
+	public static final int ERROR_CODE_STOP_AREA_NO_PLATFORM = 3766;
+	public static final int ERROR_CODE_STOP_AREA_MANY_PLATFORMS = 3767;
+	public static final int ERROR_CODE_STOP_AREA_MEMBERS_RELATIONS = 3768;
+
 
 	private PTAssistantLayer layer;
@@ -65,14 +81,27 @@
 		NodeChecker nodeChecker = new NodeChecker(n, this);
 
-		// check for solitary stop positions:
+		// select only stop_positions
 		if (n.hasTag("public_transport", "stop_position")) {
+			
+			// check if stop positions are on a way:
 			nodeChecker.performSolitaryStopPositionTest();
-		}
-
-		// check that platforms are not part of any way:
+			
+			// check if stop positions are in any stop_area relation:
+			nodeChecker.performNodePartOfStopAreaTest();
+			
+			// Check if stop positions belong the same route relation as related platform(s)
+			nodeChecker.performStopPositionComparePlatformRelations();
+		}
+
+		// select only platforms
 		if (n.hasTag("public_transport", "platform")) {
+			
+			// check that platforms are not part of any way:
 			nodeChecker.performPlatformPartOfWayTest();
-		}
-
+			
+			// check if platforms are in any stop_area relation:
+			nodeChecker.performNodePartOfStopAreaTest();
+		}
+		
 		this.errors.addAll(nodeChecker.getErrors());
 
@@ -81,4 +110,25 @@
 	@Override
 	public void visit(Relation r) {
+		
+		// Do some testing on stop area relations
+		if (StopUtils.isStopArea(r)) {
+
+			StopChecker stopChecker = new StopChecker(r, this);
+			
+			// Check if stop area relation has one stop position. 
+			stopChecker.performStopAreaStopPositionTest();
+			
+			// Check if stop area relation has more than one stop position. 
+			stopChecker.performStopAreaMultiStopPositionTest();
+
+			// Check if stop area relation has one platform. 
+			stopChecker.performStopAreaPlatformTest();
+
+			// Check if stop area relation has more than one platform. 
+			stopChecker.performStopAreaMultiPlatformTest();
+
+			// Attach thrown errors
+			this.errors.addAll(stopChecker.getErrors());
+		}
 
 		if (!RouteUtils.isTwoDirectionRoute(r)) {
Index: /applications/editors/josm/plugins/pt_assistant/src/org/openstreetmap/josm/plugins/pt_assistant/validation/StopChecker.java
===================================================================
--- /applications/editors/josm/plugins/pt_assistant/src/org/openstreetmap/josm/plugins/pt_assistant/validation/StopChecker.java	(revision 32783)
+++ /applications/editors/josm/plugins/pt_assistant/src/org/openstreetmap/josm/plugins/pt_assistant/validation/StopChecker.java	(revision 32783)
@@ -0,0 +1,138 @@
+package org.openstreetmap.josm.plugins.pt_assistant.validation;
+
+import static org.openstreetmap.josm.tools.I18n.tr;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+import java.util.Set;
+import java.util.HashMap;
+
+
+import org.openstreetmap.josm.command.ChangeCommand;
+import org.openstreetmap.josm.command.Command;
+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;
+import org.openstreetmap.josm.data.osm.Way;
+import org.openstreetmap.josm.data.validation.Severity;
+import org.openstreetmap.josm.data.validation.Test;
+import org.openstreetmap.josm.data.validation.TestError;
+import org.openstreetmap.josm.plugins.pt_assistant.utils.StopUtils;
+
+/**
+ * Performs tests of the stop area relations
+ * 
+ * @author 
+ *
+ */
+public class StopChecker extends Checker {
+
+	Set<OsmPrimitive> members;
+
+	protected StopChecker(Relation relation, Test test) {
+		super(relation, test);
+		
+		this.members = relation.getMemberPrimitives();
+	}
+	
+	/**
+	 * Checks if the given stop area relation has a stop position.
+	 */
+	protected void performStopAreaStopPositionTest() {
+		
+		// No errors if there is a member tagged as stop position.
+		for (OsmPrimitive member : members) {
+			if (StopUtils.verifyStopAreaStopPosition(member)) {
+				return;
+			}
+		}
+		
+		// Throw error message
+		List<OsmPrimitive> primitives = new ArrayList<>(1);
+		primitives.add(relation);
+		TestError e = new TestError(this.test, Severity.WARNING, tr("PT: Stop area relation has no stop position"),
+				PTAssistantValidatorTest.ERROR_CODE_STOP_AREA_NO_STOPS, primitives);
+		errors.add(e);
+	}
+
+	/**
+	 * Checks if the given stop area relation has more than one stop position.
+	 */
+	protected void performStopAreaMultiStopPositionTest() {
+		
+		// Count members tagged as stop position.
+		int countStopPosition = 0;
+		for (OsmPrimitive member : members) {
+			if (StopUtils.verifyStopAreaStopPosition(member)) {
+				countStopPosition++;
+
+			}
+		}
+
+		// No errors if there are more than one stop position.
+		if (countStopPosition <= 1) {
+			return;
+		}
+		
+		// Throw error message
+		List<OsmPrimitive> primitives = new ArrayList<>(1);
+		primitives.add(relation);
+		TestError e = new TestError(this.test, Severity.WARNING, tr("PT: Stop area relation has several stop positions"),
+				PTAssistantValidatorTest.ERROR_CODE_STOP_AREA_MANY_STOPS, primitives);
+		errors.add(e);
+		
+	}
+	
+	/**
+	 * Checks if the given stop area relation has a platform.
+	 */
+	protected void performStopAreaPlatformTest() {
+		
+		// No errors if there is a member tagged as platform.
+		for (OsmPrimitive member : members) {
+			if (StopUtils.verifyStopAreaPlatform(member)) {
+				return;
+			}
+		}
+		
+		// Throw error message
+		List<OsmPrimitive> primitives = new ArrayList<>(1);
+		primitives.add(relation);
+		TestError e = new TestError(this.test, Severity.WARNING, tr("PT: Stop area relation has no platform"),
+				PTAssistantValidatorTest.ERROR_CODE_STOP_AREA_NO_PLATFORM, primitives);
+		errors.add(e);
+		
+	}
+	
+
+	/**
+	 * Checks if the given stop area relation has more than one platform. 
+	 */
+	protected void performStopAreaMultiPlatformTest() {
+		
+		// Count members tagged as platformn.
+		int countPlatform = 0;
+		for (OsmPrimitive member : members) {
+			if (StopUtils.verifyStopAreaPlatform(member)) {
+				countPlatform++;
+
+			}
+		}
+		
+		// No errors if there are more than one platformnn.
+		if (countPlatform <= 1) {
+			return;
+		}
+				
+		// Throw error message
+		List<OsmPrimitive> primitives = new ArrayList<>(1);
+		primitives.add(relation);
+		TestError e = new TestError(this.test, Severity.WARNING, tr("PT: Stop area relation has several platforms"),
+				PTAssistantValidatorTest.ERROR_CODE_STOP_AREA_MANY_PLATFORMS, primitives);
+		errors.add(e);
+		
+	}
+	
+}
Index: /applications/editors/josm/plugins/pt_assistant/src/org/openstreetmap/josm/plugins/pt_assistant/validation/WayChecker.java
===================================================================
--- /applications/editors/josm/plugins/pt_assistant/src/org/openstreetmap/josm/plugins/pt_assistant/validation/WayChecker.java	(revision 32782)
+++ /applications/editors/josm/plugins/pt_assistant/src/org/openstreetmap/josm/plugins/pt_assistant/validation/WayChecker.java	(revision 32783)
@@ -230,5 +230,5 @@
 
 	/**
-	 * Checks if the current way touches its neighboring was correctly
+	 * Checks if the current way touches its neighbouring was correctly
 	 * 
 	 * @param prev
Index: /applications/editors/josm/plugins/pt_assistant/test/data/stop-area-many-platforms.osm
===================================================================
--- /applications/editors/josm/plugins/pt_assistant/test/data/stop-area-many-platforms.osm	(revision 32783)
+++ /applications/editors/josm/plugins/pt_assistant/test/data/stop-area-many-platforms.osm	(revision 32783)
@@ -0,0 +1,57 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<osm version='0.6' upload='true' generator='JOSM'>
+  <node id='-14897' action='modify' visible='true' lat='12.12569675765' lon='-86.28455907163'>
+    <tag k='bus' v='yes' />
+    <tag k='public_transport' v='stop_position' />
+  </node>
+  <node id='-14899' action='modify' visible='true' lat='12.12574315765' lon='-86.28459437163'>
+    <tag k='bus' v='yes' />
+    <tag k='public_transport' v='platform' />
+  </node>
+  <node id='-14900' action='modify' visible='true' lat='12.12566785765' lon='-86.28424177163' />
+  <node id='-14901' action='modify' visible='true' lat='12.12569085765' lon='-86.28449517163' />
+  <node id='-14902' action='modify' visible='true' lat='12.12586275765' lon='-86.28635997163' />
+  <node id='-14903' action='modify' visible='true' lat='12.12586605765' lon='-86.28641487163' />
+  <node id='-14904' action='modify' visible='true' lat='12.12592805765' lon='-86.28729767163' />
+  <node id='-14906' action='modify' visible='true' lat='12.12598865765' lon='-86.28844557163' />
+  <node id='-14907' action='modify' visible='true' lat='12.12599975765' lon='-86.28875027163'>
+    <tag k='highway' v='traffic_signals' />
+  </node>
+  <node id='-14908' action='modify' visible='true' lat='12.12602745765' lon='-86.29081977163' />
+  <node id='-14909' action='modify' visible='true' lat='12.12603135765' lon='-86.29160537163' />
+  <node id='-14910' action='modify' visible='true' lat='12.12603245765' lon='-86.29184287163'>
+    <tag k='highway' v='traffic_signals' />
+  </node>
+  <node id='-53674' action='modify' visible='true' lat='12.12573870718' lon='-86.28451924009'>
+    <tag k='bus' v='yes' />
+    <tag k='public_transport' v='platform' />
+  </node>
+  <way id='-14898' action='modify' visible='true'>
+    <nd ref='-14900' />
+    <nd ref='-14901' />
+    <nd ref='-14897' />
+    <nd ref='-14902' />
+    <nd ref='-14903' />
+    <nd ref='-14904' />
+    <nd ref='-14906' />
+    <nd ref='-14907' />
+    <nd ref='-14908' />
+    <nd ref='-14909' />
+    <nd ref='-14910' />
+    <tag k='highway' v='primary' />
+    <tag k='lanes' v='2' />
+    <tag k='maxspeed' v='30' />
+    <tag k='name' v='Pista de la Resistencia' />
+    <tag k='oneway' v='yes' />
+    <tag k='surface' v='asphalt' />
+  </way>
+  <relation id='-14942' action='modify' visible='true'>
+    <member type='node' ref='-14897' role='stop' />
+    <member type='node' ref='-53674' role='platform' />
+    <member type='node' ref='-14899' role='platform' />
+    <tag k='name' v='Rotonda El Periodista' />
+    <tag k='public_transport' v='stop_area' />
+    <tag k='public_transport:version' v='2' />
+    <tag k='type' v='public_transport' />
+  </relation>
+</osm>
Index: /applications/editors/josm/plugins/pt_assistant/test/data/stop-area-many-stops.osm
===================================================================
--- /applications/editors/josm/plugins/pt_assistant/test/data/stop-area-many-stops.osm	(revision 32783)
+++ /applications/editors/josm/plugins/pt_assistant/test/data/stop-area-many-stops.osm	(revision 32783)
@@ -0,0 +1,56 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<osm version='0.6' upload='true' generator='JOSM'>
+  <node id='-14897' action='modify' visible='true' lat='12.12569675765' lon='-86.28455907163'>
+    <tag k='bus' v='yes' />
+    <tag k='public_transport' v='stop_position' />
+  </node>
+  <node id='-14899' action='modify' visible='true' lat='12.12574315765' lon='-86.28459437163'>
+    <tag k='bus' v='yes' />
+    <tag k='public_transport' v='platform' />
+  </node>
+  <node id='-14900' action='modify' visible='true' lat='12.12566785765' lon='-86.28424177163' />
+  <node id='-14901' action='modify' visible='true' lat='12.12569085765' lon='-86.28449517163'>
+    <tag k='bus' v='yes' />
+    <tag k='public_transport' v='stop_position' />
+  </node>
+  <node id='-14902' action='modify' visible='true' lat='12.12586275765' lon='-86.28635997163' />
+  <node id='-14903' action='modify' visible='true' lat='12.12586605765' lon='-86.28641487163' />
+  <node id='-14904' action='modify' visible='true' lat='12.12592805765' lon='-86.28729767163' />
+  <node id='-14906' action='modify' visible='true' lat='12.12598865765' lon='-86.28844557163' />
+  <node id='-14907' action='modify' visible='true' lat='12.12599975765' lon='-86.28875027163'>
+    <tag k='highway' v='traffic_signals' />
+  </node>
+  <node id='-14908' action='modify' visible='true' lat='12.12602745765' lon='-86.29081977163' />
+  <node id='-14909' action='modify' visible='true' lat='12.12603135765' lon='-86.29160537163' />
+  <node id='-14910' action='modify' visible='true' lat='12.12603245765' lon='-86.29184287163'>
+    <tag k='highway' v='traffic_signals' />
+  </node>
+  <way id='-14898' action='modify' visible='true'>
+    <nd ref='-14900' />
+    <nd ref='-14901' />
+    <nd ref='-14897' />
+    <nd ref='-14902' />
+    <nd ref='-14903' />
+    <nd ref='-14904' />
+    <nd ref='-14906' />
+    <nd ref='-14907' />
+    <nd ref='-14908' />
+    <nd ref='-14909' />
+    <nd ref='-14910' />
+    <tag k='highway' v='primary' />
+    <tag k='lanes' v='2' />
+    <tag k='maxspeed' v='30' />
+    <tag k='name' v='Pista de la Resistencia' />
+    <tag k='oneway' v='yes' />
+    <tag k='surface' v='asphalt' />
+  </way>
+  <relation id='-14942' action='modify' visible='true'>
+    <member type='node' ref='-14897' role='stop' />
+    <member type='node' ref='-14901' role='stop' />
+    <member type='node' ref='-14899' role='platform' />
+    <tag k='name' v='Rotonda El Periodista' />
+    <tag k='public_transport' v='stop_area' />
+    <tag k='public_transport:version' v='2' />
+    <tag k='type' v='public_transport' />
+  </relation>
+</osm>
Index: /applications/editors/josm/plugins/pt_assistant/test/data/stop-area-members.osm
===================================================================
--- /applications/editors/josm/plugins/pt_assistant/test/data/stop-area-members.osm	(revision 32783)
+++ /applications/editors/josm/plugins/pt_assistant/test/data/stop-area-members.osm	(revision 32783)
@@ -0,0 +1,44 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<osm version='0.6' upload='true' generator='JOSM'>
+  <node id='-14897' action='modify' visible='true' lat='12.12569675765' lon='-86.28455907163'>
+    <tag k='bus' v='yes' />
+    <tag k='public_transport' v='stop_position' />
+  </node>
+  <node id='-14899' action='modify' visible='true' lat='12.12574315765' lon='-86.28459437163'>
+    <tag k='bus' v='yes' />
+    <tag k='public_transport' v='platform' />
+  </node>
+  <node id='-14900' action='modify' visible='true' lat='12.12566785765' lon='-86.28424177163' />
+  <node id='-14901' action='modify' visible='true' lat='12.12569085765' lon='-86.28449517163' />
+  <node id='-14902' action='modify' visible='true' lat='12.12586275765' lon='-86.28635997163' />
+  <node id='-14903' action='modify' visible='true' lat='12.12586605765' lon='-86.28641487163' />
+  <node id='-14904' action='modify' visible='true' lat='12.12592805765' lon='-86.28729767163' />
+  <node id='-14906' action='modify' visible='true' lat='12.12598865765' lon='-86.28844557163' />
+  <node id='-14907' action='modify' visible='true' lat='12.12599975765' lon='-86.28875027163'>
+    <tag k='highway' v='traffic_signals' />
+  </node>
+  <node id='-14908' action='modify' visible='true' lat='12.12602745765' lon='-86.29081977163' />
+  <node id='-14909' action='modify' visible='true' lat='12.12603135765' lon='-86.29160537163' />
+  <node id='-14910' action='modify' visible='true' lat='12.12603245765' lon='-86.29184287163'>
+    <tag k='highway' v='traffic_signals' />
+  </node>
+  <way id='-14898' action='modify' visible='true'>
+    <nd ref='-14900' />
+    <nd ref='-14901' />
+    <nd ref='-14897' />
+    <nd ref='-14902' />
+    <nd ref='-14903' />
+    <nd ref='-14904' />
+    <nd ref='-14906' />
+    <nd ref='-14907' />
+    <nd ref='-14908' />
+    <nd ref='-14909' />
+    <nd ref='-14910' />
+    <tag k='highway' v='primary' />
+    <tag k='lanes' v='2' />
+    <tag k='maxspeed' v='30' />
+    <tag k='name' v='Pista de la Resistencia' />
+    <tag k='oneway' v='yes' />
+    <tag k='surface' v='asphalt' />
+  </way>
+</osm>
Index: /applications/editors/josm/plugins/pt_assistant/test/data/stop-area-no-platform.osm
===================================================================
--- /applications/editors/josm/plugins/pt_assistant/test/data/stop-area-no-platform.osm	(revision 32783)
+++ /applications/editors/josm/plugins/pt_assistant/test/data/stop-area-no-platform.osm	(revision 32783)
@@ -0,0 +1,51 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<osm version='0.6' upload='true' generator='JOSM'>
+  <node id='-14897' action='modify' visible='true' lat='12.12569675765' lon='-86.28455907163'>
+    <tag k='bus' v='yes' />
+    <tag k='public_transport' v='stop_position' />
+  </node>
+  <node id='-14899' action='modify' visible='true' lat='12.12574315765' lon='-86.28459437163'>
+    <tag k='bus' v='yes' />
+    <tag k='public_transport' v='platform' />
+  </node>
+  <node id='-14900' action='modify' visible='true' lat='12.12566785765' lon='-86.28424177163' />
+  <node id='-14901' action='modify' visible='true' lat='12.12569085765' lon='-86.28449517163' />
+  <node id='-14902' action='modify' visible='true' lat='12.12586275765' lon='-86.28635997163' />
+  <node id='-14903' action='modify' visible='true' lat='12.12586605765' lon='-86.28641487163' />
+  <node id='-14904' action='modify' visible='true' lat='12.12592805765' lon='-86.28729767163' />
+  <node id='-14906' action='modify' visible='true' lat='12.12598865765' lon='-86.28844557163' />
+  <node id='-14907' action='modify' visible='true' lat='12.12599975765' lon='-86.28875027163'>
+    <tag k='highway' v='traffic_signals' />
+  </node>
+  <node id='-14908' action='modify' visible='true' lat='12.12602745765' lon='-86.29081977163' />
+  <node id='-14909' action='modify' visible='true' lat='12.12603135765' lon='-86.29160537163' />
+  <node id='-14910' action='modify' visible='true' lat='12.12603245765' lon='-86.29184287163'>
+    <tag k='highway' v='traffic_signals' />
+  </node>
+  <way id='-14898' action='modify' visible='true'>
+    <nd ref='-14900' />
+    <nd ref='-14901' />
+    <nd ref='-14897' />
+    <nd ref='-14902' />
+    <nd ref='-14903' />
+    <nd ref='-14904' />
+    <nd ref='-14906' />
+    <nd ref='-14907' />
+    <nd ref='-14908' />
+    <nd ref='-14909' />
+    <nd ref='-14910' />
+    <tag k='highway' v='primary' />
+    <tag k='lanes' v='2' />
+    <tag k='maxspeed' v='30' />
+    <tag k='name' v='Pista de la Resistencia' />
+    <tag k='oneway' v='yes' />
+    <tag k='surface' v='asphalt' />
+  </way>
+  <relation id='-14942' action='modify' visible='true'>
+    <member type='node' ref='-14897' role='stop' />
+    <tag k='name' v='Rotonda El Periodista' />
+    <tag k='public_transport' v='stop_area' />
+    <tag k='public_transport:version' v='2' />
+    <tag k='type' v='public_transport' />
+  </relation>
+</osm>
Index: /applications/editors/josm/plugins/pt_assistant/test/data/stop-area-no-stops.osm
===================================================================
--- /applications/editors/josm/plugins/pt_assistant/test/data/stop-area-no-stops.osm	(revision 32783)
+++ /applications/editors/josm/plugins/pt_assistant/test/data/stop-area-no-stops.osm	(revision 32783)
@@ -0,0 +1,51 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<osm version='0.6' upload='true' generator='JOSM'>
+  <node id='-14897' action='modify' visible='true' lat='12.12569675765' lon='-86.28455907163'>
+    <tag k='bus' v='yes' />
+    <tag k='public_transport' v='stop_position' />
+  </node>
+  <node id='-14899' action='modify' visible='true' lat='12.12574315765' lon='-86.28459437163'>
+    <tag k='bus' v='yes' />
+    <tag k='public_transport' v='platform' />
+  </node>
+  <node id='-14900' action='modify' visible='true' lat='12.12566785765' lon='-86.28424177163' />
+  <node id='-14901' action='modify' visible='true' lat='12.12569085765' lon='-86.28449517163' />
+  <node id='-14902' action='modify' visible='true' lat='12.12586275765' lon='-86.28635997163' />
+  <node id='-14903' action='modify' visible='true' lat='12.12586605765' lon='-86.28641487163' />
+  <node id='-14904' action='modify' visible='true' lat='12.12592805765' lon='-86.28729767163' />
+  <node id='-14906' action='modify' visible='true' lat='12.12598865765' lon='-86.28844557163' />
+  <node id='-14907' action='modify' visible='true' lat='12.12599975765' lon='-86.28875027163'>
+    <tag k='highway' v='traffic_signals' />
+  </node>
+  <node id='-14908' action='modify' visible='true' lat='12.12602745765' lon='-86.29081977163' />
+  <node id='-14909' action='modify' visible='true' lat='12.12603135765' lon='-86.29160537163' />
+  <node id='-14910' action='modify' visible='true' lat='12.12603245765' lon='-86.29184287163'>
+    <tag k='highway' v='traffic_signals' />
+  </node>
+  <way id='-14898' action='modify' visible='true'>
+    <nd ref='-14900' />
+    <nd ref='-14901' />
+    <nd ref='-14897' />
+    <nd ref='-14902' />
+    <nd ref='-14903' />
+    <nd ref='-14904' />
+    <nd ref='-14906' />
+    <nd ref='-14907' />
+    <nd ref='-14908' />
+    <nd ref='-14909' />
+    <nd ref='-14910' />
+    <tag k='highway' v='primary' />
+    <tag k='lanes' v='2' />
+    <tag k='maxspeed' v='30' />
+    <tag k='name' v='Pista de la Resistencia' />
+    <tag k='oneway' v='yes' />
+    <tag k='surface' v='asphalt' />
+  </way>
+  <relation id='-14942' action='modify' visible='true'>
+    <member type='node' ref='-14899' role='platform' />
+    <tag k='name' v='Rotonda El Periodista' />
+    <tag k='public_transport' v='stop_area' />
+    <tag k='public_transport:version' v='2' />
+    <tag k='type' v='public_transport' />
+  </relation>
+</osm>
Index: /applications/editors/josm/plugins/pt_assistant/test/data/stop-area-relations.osm
===================================================================
--- /applications/editors/josm/plugins/pt_assistant/test/data/stop-area-relations.osm	(revision 32783)
+++ /applications/editors/josm/plugins/pt_assistant/test/data/stop-area-relations.osm	(revision 32783)
@@ -0,0 +1,88 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<osm version='0.6' upload='true' generator='JOSM'>
+  <node id='-60958' action='modify' visible='true' lat='12.12569675765' lon='-86.28455907163'>
+    <tag k='bus' v='yes' />
+    <tag k='public_transport' v='stop_position' />
+  </node>
+  <node id='-60960' action='modify' visible='true' lat='12.12574315765' lon='-86.28459437163'>
+    <tag k='bus' v='yes' />
+    <tag k='public_transport' v='platform' />
+  </node>
+  <node id='-60966' action='modify' visible='true' lat='12.12586275765' lon='-86.28635997163' />
+  <node id='-60968' action='modify' visible='true' lat='12.12586605765' lon='-86.28641487163' />
+  <node id='-60970' action='modify' visible='true' lat='12.12592805765' lon='-86.28729767163' />
+  <node id='-60972' action='modify' visible='true' lat='12.12598865765' lon='-86.28844557163' />
+  <node id='-60974' action='modify' visible='true' lat='12.12599975765' lon='-86.28875027163'>
+    <tag k='highway' v='traffic_signals' />
+  </node>
+  <node id='-60976' action='modify' visible='true' lat='12.12602745765' lon='-86.29081977163' />
+  <node id='-60978' action='modify' visible='true' lat='12.12603135765' lon='-86.29160537163' />
+  <node id='-60980' action='modify' visible='true' lat='12.12603245765' lon='-86.29184287163'>
+    <tag k='highway' v='traffic_signals' />
+  </node>
+  <node id='-60997' action='modify' visible='true' lat='12.12605336295' lon='-86.29221374917'>
+    <tag k='bus' v='yes' />
+    <tag k='public_transport' v='stop_position' />
+  </node>
+  <node id='-61002' visible='true' lat='12.1261061435' lon='-86.2922353432'>
+    <tag k='bus' v='yes' />
+    <tag k='public_transport' v='platform' />
+  </node>
+  <way id='-60982' action='modify' visible='true'>
+    <nd ref='-60958' />
+    <nd ref='-60966' />
+    <nd ref='-60968' />
+    <nd ref='-60970' />
+    <nd ref='-60972' />
+    <nd ref='-60974' />
+    <tag k='highway' v='primary' />
+    <tag k='lanes' v='2' />
+    <tag k='maxspeed' v='30' />
+    <tag k='name' v='Pista de la Resistencia' />
+    <tag k='oneway' v='yes' />
+    <tag k='surface' v='asphalt' />
+  </way>
+  <way id='-63380' action='modify' visible='true'>
+    <nd ref='-60974' />
+    <nd ref='-60976' />
+    <nd ref='-60978' />
+    <nd ref='-60980' />
+    <nd ref='-60997' />
+    <tag k='highway' v='primary' />
+    <tag k='lanes' v='2' />
+    <tag k='maxspeed' v='30' />
+    <tag k='name' v='Pista de la Resistencia' />
+    <tag k='oneway' v='yes' />
+    <tag k='surface' v='asphalt' />
+  </way>
+  <relation id='-60984' action='modify' visible='true'>
+    <member type='node' ref='-60958' role='stop' />
+    <member type='node' ref='-60960' role='platform' />
+    <tag k='name' v='Rotonda El Periodista' />
+    <tag k='public_transport' v='stop_area' />
+    <tag k='public_transport:version' v='2' />
+    <tag k='type' v='public_transport' />
+  </relation>
+  <relation id='-60986' action='modify' visible='true'>
+    <member type='node' ref='-60958' role='stop' />
+    <member type='node' ref='-61002' role='platform' />
+    <member type='way' ref='-60982' role='' />
+    <member type='way' ref='-63380' role='' />
+    <tag k='bus' v='yes' />
+    <tag k='from' v='Cuesta el Plomo' />
+    <tag k='name' v='Ruta 103: Cuesta el Plomo =&gt; Laureles Sur' />
+    <tag k='public_transport:version' v='2' />
+    <tag k='ref' v='103' />
+    <tag k='route' v='bus' />
+    <tag k='to' v='Laureles Sur' />
+    <tag k='type' v='route' />
+  </relation>
+  <relation id='-61332' action='modify' visible='true'>
+    <member type='node' ref='-60997' role='stop' />
+    <member type='node' ref='-61002' role='platform' />
+    <tag k='name' v='Mercado Oriental' />
+    <tag k='public_transport' v='stop_area' />
+    <tag k='public_transport:version' v='2' />
+    <tag k='type' v='public_transport' />
+  </relation>
+</osm>
Index: /applications/editors/josm/plugins/pt_assistant/test/unit/org/openstreetmap/josm/plugins/pt_assistant/AbstractTest.java
===================================================================
--- /applications/editors/josm/plugins/pt_assistant/test/unit/org/openstreetmap/josm/plugins/pt_assistant/AbstractTest.java	(revision 32782)
+++ /applications/editors/josm/plugins/pt_assistant/test/unit/org/openstreetmap/josm/plugins/pt_assistant/AbstractTest.java	(revision 32783)
@@ -46,4 +46,12 @@
  
  public static final String PATH_TO_SOLITARY_STOP_POSITION = "test/data/solitary-stop-position.osm";
+
+ public static final String PATH_TO_STOP_AREA_MEMBERS = "test/data/stop-area-members.osm";
+ public static final String PATH_TO_STOP_AREA_RELATIONS = "test/data/stop-area-relations.osm";
+ public static final String PATH_TO_STOP_AREA_NO_STOPS = "test/data/stop-area-no-stops.osm";
+ public static final String PATH_TO_STOP_AREA_MANY_STOPS = "test/data/stop-area-many-stops.osm";
+ public static final String PATH_TO_STOP_AREA_NO_PLATFORMS = "test/data/stop-area-no-platform.osm";
+ public static final String PATH_TO_STOP_AREA_MANY_PLATFORMS = "test/data/stop-area-many-platforms.osm";
+
  
  public static final String PATH_TO_SEGMENT_TEST = "test/data/segment-test.osm";
Index: /applications/editors/josm/plugins/pt_assistant/test/unit/org/openstreetmap/josm/plugins/pt_assistant/validation/StopCheckerTest.java
===================================================================
--- /applications/editors/josm/plugins/pt_assistant/test/unit/org/openstreetmap/josm/plugins/pt_assistant/validation/StopCheckerTest.java	(revision 32783)
+++ /applications/editors/josm/plugins/pt_assistant/test/unit/org/openstreetmap/josm/plugins/pt_assistant/validation/StopCheckerTest.java	(revision 32783)
@@ -0,0 +1,162 @@
+package org.openstreetmap.josm.plugins.pt_assistant.validation;
+
+import java.io.File;
+
+import org.junit.Test;
+import org.junit.Assert;
+import org.openstreetmap.josm.data.osm.DataSet;
+import org.openstreetmap.josm.data.osm.Node;
+import org.openstreetmap.josm.data.osm.Relation;
+import org.openstreetmap.josm.plugins.pt_assistant.AbstractTest;
+import org.openstreetmap.josm.plugins.pt_assistant.ImportUtils;
+
+public class StopCheckerTest extends AbstractTest {
+
+	@Test
+	public void nodePartOfStopAreaTest() {
+
+		// check if stop positions or platforms are in any stop_area relation:
+		
+		File file = new File(AbstractTest.PATH_TO_STOP_AREA_MEMBERS);
+		DataSet ds = ImportUtils.importOsmFile(file, "testLayer");
+		PTAssistantValidatorTest test = new PTAssistantValidatorTest();
+		Node node = null;
+		
+		for (Node n : ds.getNodes()) {
+			if (n.hasTag("public_transport", "stop_position") | n.hasTag("public_transport", "platform")) {
+				node = n;
+			}
+		}
+
+		NodeChecker nodeChecker = new NodeChecker(node, test);
+		nodeChecker.performNodePartOfStopAreaTest();
+		Assert.assertEquals(nodeChecker.getErrors().size(), 1);
+		Assert.assertEquals(nodeChecker.getErrors().get(0).getCode(),
+				PTAssistantValidatorTest.ERROR_CODE_NODE_PART_OF_STOP_AREA);
+	}
+	
+
+
+	@Test
+	public void stopPositionComparePlatformRelations() {
+		
+		// Check if stop positions belong the same routes as related platform(s)
+		
+		File file = new File(AbstractTest.PATH_TO_STOP_AREA_RELATIONS);
+		DataSet ds = ImportUtils.importOsmFile(file, "testLayer");
+		PTAssistantValidatorTest test = new PTAssistantValidatorTest();
+		Node node = null;
+		
+		for (Node n : ds.getNodes()) {
+			if (n.hasTag("public_transport", "stop_position")) {
+				node = n;
+			}
+		}
+		
+		NodeChecker nodeChecker = new NodeChecker(node, test);
+		nodeChecker.performStopPositionComparePlatformRelations();
+		Assert.assertEquals(nodeChecker.getErrors().size(), 1);
+		Assert.assertEquals(nodeChecker.getErrors().get(0).getCode(),
+				PTAssistantValidatorTest.ERROR_CODE_STOP_POSITION_COMPARE_RELATIONS);
+			
+	}
+	
+
+	@Test
+	public void stopAreaStopPositionTest() {
+		
+		// Check if stop area relation has one stop position. 
+		
+		File file = new File(AbstractTest.PATH_TO_STOP_AREA_NO_STOPS);
+		DataSet ds = ImportUtils.importOsmFile(file, "testLayer");
+		PTAssistantValidatorTest test = new PTAssistantValidatorTest();
+		Relation stopArea = null;
+
+		for (Relation r : ds.getRelations()) {
+			if (r.hasTag("public_transport", "stop_area")) {
+				stopArea = r;
+			}
+		}
+		
+		StopChecker stopChecker = new StopChecker(stopArea, test);
+		stopChecker.performStopAreaStopPositionTest();
+		Assert.assertEquals(stopChecker.getErrors().size(), 1);
+		Assert.assertEquals(stopChecker.getErrors().get(0).getCode(),
+				PTAssistantValidatorTest.ERROR_CODE_STOP_AREA_NO_STOPS);
+
+	}
+	
+	@Test
+	public void stopAreaMultiStopPositionTest() {
+		
+		// Check if stop area relation has more than one stop position. 
+		
+		File file = new File(AbstractTest.PATH_TO_STOP_AREA_MANY_STOPS);
+		DataSet ds = ImportUtils.importOsmFile(file, "testLayer");
+		PTAssistantValidatorTest test = new PTAssistantValidatorTest();
+		Relation stopArea = null;
+
+		for (Relation r : ds.getRelations()) {
+			if (r.hasTag("public_transport", "stop_area")) {
+				stopArea = r;
+			}
+		}
+
+		StopChecker stopChecker = new StopChecker(stopArea, test);
+		stopChecker.performStopAreaMultiStopPositionTest();
+		Assert.assertEquals(stopChecker.getErrors().size(), 1);
+		Assert.assertEquals(stopChecker.getErrors().get(0).getCode(),
+				PTAssistantValidatorTest.ERROR_CODE_STOP_AREA_MANY_STOPS);
+
+	}
+	
+
+	@Test
+	public void stopAreaPlatformTest() {
+		
+		// Check if stop area relation has one platform. 
+		
+		File file = new File(AbstractTest.PATH_TO_STOP_AREA_NO_PLATFORMS);
+		DataSet ds = ImportUtils.importOsmFile(file, "testLayer");
+		PTAssistantValidatorTest test = new PTAssistantValidatorTest();
+		Relation stopArea = null;
+
+		for (Relation r : ds.getRelations()) {
+			if (r.hasTag("public_transport", "stop_area")) {
+				stopArea = r;
+			}
+		}
+		
+		StopChecker stopChecker = new StopChecker(stopArea, test);
+		stopChecker.performStopAreaPlatformTest();
+		Assert.assertEquals(stopChecker.getErrors().size(), 1);
+		Assert.assertEquals(stopChecker.getErrors().get(0).getCode(),
+				PTAssistantValidatorTest.ERROR_CODE_STOP_AREA_NO_PLATFORM);
+
+	}
+	
+	@Test
+	public void stopAreaMultiPlatformTest() {
+		
+		// Check if stop area relation has more than one stop position. 
+		
+		File file = new File(AbstractTest.PATH_TO_STOP_AREA_MANY_PLATFORMS);
+		DataSet ds = ImportUtils.importOsmFile(file, "testLayer");
+		PTAssistantValidatorTest test = new PTAssistantValidatorTest();
+		Relation stopArea = null;
+
+		for (Relation r : ds.getRelations()) {
+			if (r.hasTag("public_transport", "stop_area")) {
+				stopArea = r;
+			}
+		}
+
+		StopChecker stopChecker = new StopChecker(stopArea, test);
+		stopChecker.performStopAreaMultiPlatformTest();
+		Assert.assertEquals(stopChecker.getErrors().size(), 1);
+		Assert.assertEquals(stopChecker.getErrors().get(0).getCode(),
+				PTAssistantValidatorTest.ERROR_CODE_STOP_AREA_MANY_PLATFORMS);
+
+	}
+
+}
