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 33466)
+++ applications/editors/josm/plugins/pt_assistant/src/org/openstreetmap/josm/plugins/pt_assistant/validation/PTAssistantValidatorTest.java	(revision 33467)
@@ -45,4 +45,5 @@
 
     public static final int ERROR_CODE_FROM_TO_ROUTE_TAG = 3701;
+    public static final int ERROR_CODE_FIRST_LAST_STOP_WAY_TAG = 3702;
     public static final int ERROR_CODE_SORTING = 3711;
     public static final int ERROR_CODE_PARTIAL_SORTING = 3712;
@@ -355,5 +356,7 @@
         routeChecker.setManager(manager);
         routeChecker.setAssigner(assigner);
-        routeChecker.performFromToTagsTest();
+        if (!routeChecker.performFromToTagsTest()) {
+            routeChecker.performFirstLastWayStopTest();
+        }
         routeChecker.performSortingTest();
         List<TestError> routeCheckerErrors = routeChecker.getErrors();
Index: applications/editors/josm/plugins/pt_assistant/src/org/openstreetmap/josm/plugins/pt_assistant/validation/RouteChecker.java
===================================================================
--- applications/editors/josm/plugins/pt_assistant/src/org/openstreetmap/josm/plugins/pt_assistant/validation/RouteChecker.java	(revision 33466)
+++ applications/editors/josm/plugins/pt_assistant/src/org/openstreetmap/josm/plugins/pt_assistant/validation/RouteChecker.java	(revision 33467)
@@ -5,4 +5,5 @@
 
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Collection;
 import java.util.List;
@@ -14,4 +15,5 @@
 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;
@@ -52,4 +54,7 @@
     }
 
+    //checks if sorting the members of the current relation could make it
+    //continuous or it could reduce the number of gaps. if one of the previous
+    //is true raises a warning
     protected void performSortingTest() {
 
@@ -93,12 +98,15 @@
     }
 
-    protected void performFromToTagsTest() {
+    //checks if the from and to tags of the route match the names of the first
+    //and last stops
+    protected boolean performFromToTagsTest() {
 
         String from = relation.get("from");
         String to = relation.get("to");
         if (from == null || to == null || manager.getPTStopCount() == 0) {
-            return;
-        }
-
+            return false;
+        }
+
+        boolean foundError = false;
         PTStop stop = manager.getFirstStop();
         OsmPrimitive primitive = checkPTStopName(stop, from);
@@ -108,7 +116,8 @@
                     PTAssistantValidatorTest.ERROR_CODE_FROM_TO_ROUTE_TAG);
             builder.message(tr("PT: The name of the first stop does not match the \"from\" tag of the route relation"));
-            builder.primitives(primitive);
+            builder.primitives(primitive, relation);
             TestError e = builder.build();
             this.errors.add(e);
+            foundError = true;
         }
 
@@ -120,5 +129,48 @@
                     PTAssistantValidatorTest.ERROR_CODE_FROM_TO_ROUTE_TAG);
             builder.message(tr("PT: The name of the last stop does not match the \"to\" tag of the route relation"));
-            builder.primitives(primitive);
+            builder.primitives(primitive, relation);
+            TestError e = builder.build();
+            this.errors.add(e);
+            foundError = true;
+        }
+
+        return foundError;
+    }
+
+    //checks if the first and last stop are assigned to the first and last way
+    protected void performFirstLastWayStopTest() {
+
+        if (manager.getPTStopCount() == 0 || manager.getPTWayCount() == 0) {
+            return;
+        }
+
+        PTStop stop = manager.getFirstStop();
+        Way way = manager.getFirstWay();
+        if (!way.equals(assigner.get(stop))) {
+            Builder builder = TestError.builder(this.test, Severity.WARNING,
+                    PTAssistantValidatorTest.ERROR_CODE_FIRST_LAST_STOP_WAY_TAG);
+            builder.message(tr("PT: The first stop of the route does not match the first way"));
+            List<OsmPrimitive> prims = new ArrayList<>(Arrays.asList(way, relation));
+            if (stop.getPlatform() != null)
+                prims.add(stop.getPlatform());
+            if (stop.getStopPosition() != null)
+                prims.add(stop.getStopPosition());
+            builder.primitives(prims);
+            TestError e = builder.build();
+            this.errors.add(e);
+        }
+
+        stop = manager.getLastStop();
+        way = manager.getLastWay();
+        if (!way.equals(assigner.get(stop))) {
+            Builder builder = TestError.builder(this.test, Severity.WARNING,
+                    PTAssistantValidatorTest.ERROR_CODE_FIRST_LAST_STOP_WAY_TAG);
+            builder.message(tr("PT: The last stop of the route does not match the last way"));
+            List<OsmPrimitive> prims = new ArrayList<>(Arrays.asList(way, relation));
+            if (stop.getPlatform() != null)
+                prims.add(stop.getPlatform());
+            if (stop.getStopPosition() != null)
+                prims.add(stop.getStopPosition());
+            builder.primitives(prims);
             TestError e = builder.build();
             this.errors.add(e);
@@ -147,4 +199,11 @@
     }
 
+    /**
+     * Checks whether there is at least one gap in the given list of ways.
+     *
+     * @param waysToCheck ways to check
+     * @return true if has gap (in the sense of continuity of ways in the
+     *         Relation Editor), false otherwise
+     */
     public boolean hasGaps(List<RelationMember> waysToCheck) {
         return countGaps(waysToCheck) > 0;
@@ -157,6 +216,5 @@
      *
      * @param waysToCheck ways to check
-     * @return true if has gap (in the sense of continuity of ways in the
-     *         Relation Editor), false otherwise
+     * @return number of gaps
      */
     private int countGaps(List<RelationMember> waysToCheck) {
