Index: /applications/editors/josm/plugins/public_transport/src/public_transport/RoutePatternAction.java
===================================================================
--- /applications/editors/josm/plugins/public_transport/src/public_transport/RoutePatternAction.java	(revision 28325)
+++ /applications/editors/josm/plugins/public_transport/src/public_transport/RoutePatternAction.java	(revision 28326)
@@ -1164,5 +1164,5 @@
 
       // Temp
-      if (firstNode != null)
+/*      if (firstNode != null)
       {
         Vector< AStarAlgorithm.Edge > path = new PublicTransportAStar(firstNode, lastNode).shortestPath();
@@ -1178,5 +1178,5 @@
           System.out.print("\n");
         }
-      }
+      }*/
     }
     else if ("routePattern.overviewDelete".equals(event.getActionCommand()))
@@ -1570,8 +1570,6 @@
           StopReference sr = detectMinDistance
               (curMember.getNode(), segmentMetrics, cbRight.isSelected(), cbLeft.isSelected());
-          double offset = segmentMetrics.elementAt((sr.index+1) / 2).distance;
-          if (sr.index % 2 == 0)
-            offset += sr.pos;
-          stoplistData.insertRow(insPos, curMember.getNode(), curMember.getRole(), offset);
+          stoplistData.insertRow(insPos, curMember.getNode(), curMember.getRole(),
+              calcOffset(sr, segmentMetrics));
           if (insPos >= 0)
             ++insPos;
@@ -1591,8 +1589,5 @@
           StopReference sr = detectMinDistance
               (curMember, segmentMetrics, cbRight.isSelected(), cbLeft.isSelected());
-          double offset = segmentMetrics.elementAt((sr.index+1) / 2).distance;
-          if (sr.index % 2 == 0)
-            offset += sr.pos;
-          stoplistData.insertRow(insPos, curMember, "", offset);
+          stoplistData.insertRow(insPos, curMember, "", calcOffset(sr, segmentMetrics));
           if (insPos >= 0)
             ++insPos;
@@ -1640,20 +1635,20 @@
           {
             StopReference sr = detectMinDistance
-            (stoplistData.nodes.elementAt(i), segmentMetrics,
-            cbRight.isSelected(), cbLeft.isSelected());
+                (stoplistData.nodes.elementAt(i), segmentMetrics,
+                cbRight.isSelected(), cbLeft.isSelected());
             if (sr != null)
             {
               if (sr.distance <
-                Double.parseDouble(tfSuggestStopsLimit.getText()) * 9.0 / 1000000.0 )
+                  Double.parseDouble(tfSuggestStopsLimit.getText()) * 9.0 / 1000000.0 )
               {
-            sr.role = (String)stoplistData.getValueAt(i, STOPLIST_ROLE_COLUMN);
-            srm.addElement(sr);
+                sr.role = (String)stoplistData.getValueAt(i, STOPLIST_ROLE_COLUMN);
+                srm.addElement(sr);
               }
               else
               {
-            sr.role = (String)stoplistData.getValueAt(i, STOPLIST_ROLE_COLUMN);
-            sr.index = segmentMetrics.size()*2;
-            sr.pos = 0;
-            srm.addElement(sr);
+                sr.role = (String)stoplistData.getValueAt(i, STOPLIST_ROLE_COLUMN);
+                sr.index = segmentMetrics.size()*2;
+                sr.pos = 0;
+                srm.addElement(sr);
               }
 
@@ -1701,8 +1696,6 @@
         StopReference sr = detectMinDistance
             (srm.elementAt(i).node, segmentMetrics, cbRight.isSelected(), cbLeft.isSelected());
-        double offset = segmentMetrics.elementAt((sr.index+1) / 2).distance;
-        if (sr.index % 2 == 0)
-          offset += sr.pos;
-        stoplistData.insertRow(insPos, srm.elementAt(i).node, srm.elementAt(i).role, offset);
+        stoplistData.insertRow(insPos, srm.elementAt(i).node, srm.elementAt(i).role,
+            calcOffset(sr, segmentMetrics));
         if (insPos >= 0)
           ++insPos;
@@ -1755,8 +1748,6 @@
           StopReference sr = detectMinDistance
               (curMember.getNode(), segmentMetrics, cbRight.isSelected(), cbLeft.isSelected());
-          double offset = segmentMetrics.elementAt((sr.index+1) / 2).distance;
-          if (sr.index % 2 == 0)
-            offset += sr.pos;
-          stoplistData.insertRow(insPos, curMember.getNode(), curMember.getRole(), offset);
+          stoplistData.insertRow(insPos, curMember.getNode(), curMember.getRole(),
+              calcOffset(sr, segmentMetrics));
           if (insPos >= 0)
             ++insPos;
@@ -1821,6 +1812,5 @@
           {
             StopReference sr = detectMinDistance
-            (currentNode, segmentMetrics,
-            cbRight.isSelected(), cbLeft.isSelected());
+                (currentNode, segmentMetrics, cbRight.isSelected(), cbLeft.isSelected());
             if ((sr != null) && (sr.distance <
                 Double.parseDouble(tfSuggestStopsLimit.getText()) * 9.0 / 1000000.0 ))
@@ -1843,8 +1833,6 @@
         StopReference sr = detectMinDistance
             (srm.elementAt(i).node, segmentMetrics, cbRight.isSelected(), cbLeft.isSelected());
-        double offset = segmentMetrics.elementAt((sr.index+1) / 2).distance;
-        if (sr.index % 2 == 0)
-          offset += sr.pos;
-        stoplistData.addRow(srm.elementAt(i).node, srm.elementAt(i).role, offset);
+        stoplistData.addRow(srm.elementAt(i).node, srm.elementAt(i).role,
+            calcOffset(sr, segmentMetrics));
       }
 
@@ -2134,4 +2122,20 @@
   }
 
+  private double calcOffset(StopReference sr, Vector< SegmentMetric > segmentMetrics)
+  {
+    double offset = 0;
+    if ((sr.index+1) / 2 < segmentMetrics.size())
+    {
+      offset = segmentMetrics.elementAt((sr.index+1) / 2).distance;
+      if (sr.index % 2 == 0)
+        offset += sr.pos;
+    }
+    else
+      offset = segmentMetrics.elementAt(segmentMetrics.size() - 1).distance
+          + segmentMetrics.elementAt(segmentMetrics.size() - 1).length;
+
+    return offset;
+  }
+
   private void fillStoplistTable
       (Iterator<RelationMember> relIter, int insPos) {
@@ -2148,8 +2152,6 @@
         else
         {
-          double offset = segmentMetrics.elementAt((sr.index+1) / 2).distance;
-          if (sr.index % 2 == 0)
-            offset += sr.pos;
-          stoplistData.insertRow(insPos, curMember.getNode(), curMember.getRole(), offset);
+          stoplistData.insertRow(insPos, curMember.getNode(), curMember.getRole(),
+              calcOffset(sr, segmentMetrics));
           if (insPos >= 0)
             ++insPos;
