diff --git a/src/de/schildbach/pte/RmvProvider.java b/src/de/schildbach/pte/RmvProvider.java
index 993a66d5..087cf640 100644
--- a/src/de/schildbach/pte/RmvProvider.java
+++ b/src/de/schildbach/pte/RmvProvider.java
@@ -313,11 +313,13 @@ public class RmvProvider extends AbstractHafasProvider
private static final Pattern P_CONNECTION_DETAILS_FINE = Pattern.compile("
\n" //
+ "(?:(.*?) nach (.*?)\n" // line, destination
+ "
\n" //
- + "ab (\\d{1,2}:\\d{2})\n" // departureTime
- + "(?:(.*?)\\s*\n)?" // departurePosition
+ + "ab (\\d{1,2}:\\d{2})\n" // plannedDepartureTime
+ + "(?:\nca\\.(\\d{1,2}:\\d{2})\n\n)?" // predictedDepartureTime
+ + "(?:Gl\\. (.+?)\\s*\n)?" // departurePosition
+ "
\n" //
- + "an (\\d{1,2}:\\d{2})\n" // arrivalTime
- + "(?:(.*?)\\s*\n)?" // arrivalPosition
+ + "an (\\d{1,2}:\\d{2})\n" // plannedArrivalTime
+ + "(?:ca\\.(\\d{1,2}:\\d{2})\n)?" // predictedArrivalTime
+ + "(?:Gl\\. (.+?)\\s*\n)?" // arrivalPosition
+ "
\n|" //
+ "]*>\n" //
+ "Fussweg\\s*\n" //
@@ -353,10 +355,10 @@ public class RmvProvider extends AbstractHafasProvider
{
final Location departure = lastArrival != null ? lastArrival : firstDeparture;
- final Location arrival = new Location(LocationType.ANY, 0, null, ParserUtils.resolveEntities(mDetFine.group(8)));
+ final Location arrival = new Location(LocationType.ANY, 0, null, ParserUtils.resolveEntities(mDetFine.group(10)));
lastArrival = arrival;
- final String min = mDetFine.group(7);
+ final String min = mDetFine.group(9);
if (min == null)
{
final String lineStr = normalizeLine(ParserUtils.resolveEntities(mDetFine.group(1)));
@@ -364,13 +366,21 @@ public class RmvProvider extends AbstractHafasProvider
final Location destination = new Location(LocationType.ANY, 0, null, ParserUtils.resolveEntities(mDetFine.group(2)));
- final Date departureTime = upTime(lastTime, ParserUtils.joinDateTime(currentDate, ParserUtils.parseTime(mDetFine.group(3))));
+ final Date plannedDepartureTime = upTime(lastTime,
+ ParserUtils.joinDateTime(currentDate, ParserUtils.parseTime(mDetFine.group(3))));
+ final Date predictedDepartureTime = mDetFine.group(4) != null ? upTime(lastTime,
+ ParserUtils.joinDateTime(currentDate, ParserUtils.parseTime(mDetFine.group(4)))) : null;
+ final Date departureTime = predictedDepartureTime != null ? predictedDepartureTime : plannedDepartureTime;
- final String departurePosition = ParserUtils.resolveEntities(mDetFine.group(4));
+ final String departurePosition = ParserUtils.resolveEntities(mDetFine.group(5));
- final Date arrivalTime = upTime(lastTime, ParserUtils.joinDateTime(currentDate, ParserUtils.parseTime(mDetFine.group(5))));
+ final Date plannedArrivalTime = upTime(lastTime,
+ ParserUtils.joinDateTime(currentDate, ParserUtils.parseTime(mDetFine.group(6))));
+ final Date predictedArrivalTime = mDetFine.group(7) != null ? upTime(lastTime,
+ ParserUtils.joinDateTime(currentDate, ParserUtils.parseTime(mDetFine.group(7)))) : null;
+ final Date arrivalTime = predictedArrivalTime != null ? predictedArrivalTime : plannedArrivalTime;
- final String arrivalPosition = ParserUtils.resolveEntities(mDetFine.group(6));
+ final String arrivalPosition = ParserUtils.resolveEntities(mDetFine.group(8));
lastTrip = new Connection.Trip(line, destination, departureTime, departurePosition, departure, arrivalTime, arrivalPosition,
arrival, null, null);