[libtravel-routing-de-vrr-perl] 01/05: Imported Upstream version 2.06

gregor herrmann gregoa at debian.org
Sun Aug 3 13:23:48 UTC 2014


This is an automated email from the git hooks/post-receive script.

gregoa pushed a commit to branch master
in repository libtravel-routing-de-vrr-perl.

commit 409c4a50222ed277f7431d5c7b78ef1b8b62969f
Author: gregor herrmann <gregoa at debian.org>
Date:   Sun Aug 3 15:13:52 2014 +0200

    Imported Upstream version 2.06
---
 Changelog                                        |   18 +
 MANIFEST                                         |   13 +-
 META.json                                        |   24 +-
 META.yml                                         |   19 +-
 SIGNATURE                                        |   53 +-
 bin/efa                                          |  103 +-
 lib/Travel/Routing/DE/{VRR.pm => EFA.pm}         |  252 +++-
 lib/Travel/Routing/DE/{VRR => EFA}/Exception.pod |   24 +-
 lib/Travel/Routing/DE/{VRR => EFA}/Route.pm      |   24 +-
 lib/Travel/Routing/DE/{VRR => EFA}/Route/Part.pm |   70 +-
 lib/Travel/Routing/DE/VRR.pm                     |  783 +---------
 t/20-vrr.t                                       |   19 +-
 t/21-vrr.t                                       |   22 +-
 t/in/e_hbf_d_hbf.json                            | 1648 ++++++++++++++++++++++
 t/in/e_hbf_e_alfredusbad.json                    | 1130 +++++++++++++++
 15 files changed, 3238 insertions(+), 964 deletions(-)

diff --git a/Changelog b/Changelog
index 2c64fcd..56e0000 100644
--- a/Changelog
+++ b/Changelog
@@ -1,3 +1,21 @@
+Travel::Routing::DE::VRR 2.06 - Sat Aug 02 2014
+
+    * Route::Part: Add {arrival,departure}_{route,station}maps accessors
+    * efa: Add -m / --maps option
+    * Fix exclude / --exclude (didn't work at all previously, possibly
+      because of a server-side API change)
+
+Travel::Routing::DE::VRR 2.05 - Mon Mar 03 2014
+
+    * Move all logic to Travel::Routing::DE::EFA and require an EFA url to
+      be set. This way, any EFA service is supported.
+      Travel::Routing::DE::VRR now calls ::EFA with the VRR url, so there are
+      no backwards-incompatible changes
+    * Improve error messages for missing route data and backend errors
+    * Add option to specify maximum number of connections (efa -n)
+    * efa: add -f / --full-route option
+    * efa: add -u / --efa-url option
+
 Travel::Routing::DE::VRR 2.04 - Tue Jan 07 2014
 
     * efa: Handle UTF8 in place/stop input
diff --git a/MANIFEST b/MANIFEST
index ca2063a..b230ca0 100644
--- a/MANIFEST
+++ b/MANIFEST
@@ -1,11 +1,14 @@
 bin/efa
 Build.PL
 Changelog
+lib/Travel/Routing/DE/EFA.pm
+lib/Travel/Routing/DE/EFA/Exception.pod
+lib/Travel/Routing/DE/EFA/Route.pm
+lib/Travel/Routing/DE/EFA/Route/Part.pm
 lib/Travel/Routing/DE/VRR.pm
-lib/Travel/Routing/DE/VRR/Exception.pod
-lib/Travel/Routing/DE/VRR/Route.pm
-lib/Travel/Routing/DE/VRR/Route/Part.pm
 MANIFEST			This list of files
+META.json
+META.yml
 provides/zsh/completions/_efa
 README
 t/00-compile-pm.t
@@ -17,7 +20,9 @@ t/in/ambiguous
 t/in/e_alf_d_hbf.xml
 t/in/e_hbf_b_hbf.ice
 t/in/e_hbf_b_hbf.xml
+t/in/e_hbf_d_hbf.json
 t/in/e_hbf_du_hbf.ice
+t/in/e_hbf_e_alfredusbad.json
 t/in/e_hbf_k_hbf.xml
 t/in/e_hbf_mh_hbf
 t/in/e_hbf_mh_hbf.xml
@@ -32,6 +37,4 @@ t/out/e_hbf_mh_hbf
 t/out/e_hbf_mh_hbf.ignore_none
 t/out/e_martinstr_e_florastr
 t/out/e_werden_e_hbf
-META.yml
-META.json
 SIGNATURE    Added here by Module::Build
diff --git a/META.json b/META.json
index 9217c5c..54b7dd2 100644
--- a/META.json
+++ b/META.json
@@ -40,19 +40,23 @@
       }
    },
    "provides" : {
-      "Travel::Routing::DE::VRR" : {
-         "file" : "lib/Travel/Routing/DE/VRR.pm",
-         "version" : "2.04"
+      "Travel::Routing::DE::EFA" : {
+         "file" : "lib/Travel/Routing/DE/EFA.pm",
+         "version" : "2.06"
+      },
+      "Travel::Routing::DE::EFA::Route" : {
+         "file" : "lib/Travel/Routing/DE/EFA/Route.pm",
+         "version" : "2.06"
       },
-      "Travel::Routing::DE::VRR::Route" : {
-         "file" : "lib/Travel/Routing/DE/VRR/Route.pm",
-         "version" : "2.04"
+      "Travel::Routing::DE::EFA::Route::Part" : {
+         "file" : "lib/Travel/Routing/DE/EFA/Route/Part.pm",
+         "version" : "2.06"
       },
-      "Travel::Routing::DE::VRR::Route::Part" : {
-         "file" : "lib/Travel/Routing/DE/VRR/Route/Part.pm",
-         "version" : "2.04"
+      "Travel::Routing::DE::VRR" : {
+         "file" : "lib/Travel/Routing/DE/VRR.pm",
+         "version" : "2.06"
       }
    },
    "release_status" : "stable",
-   "version" : "2.04"
+   "version" : "2.06"
 }
diff --git a/META.yml b/META.yml
index 1ea7216..2b24c2b 100644
--- a/META.yml
+++ b/META.yml
@@ -18,15 +18,18 @@ meta-spec:
   version: 1.4
 name: Travel-Routing-DE-VRR
 provides:
+  Travel::Routing::DE::EFA:
+    file: lib/Travel/Routing/DE/EFA.pm
+    version: 2.06
+  Travel::Routing::DE::EFA::Route:
+    file: lib/Travel/Routing/DE/EFA/Route.pm
+    version: 2.06
+  Travel::Routing::DE::EFA::Route::Part:
+    file: lib/Travel/Routing/DE/EFA/Route/Part.pm
+    version: 2.06
   Travel::Routing::DE::VRR:
     file: lib/Travel/Routing/DE/VRR.pm
-    version: 2.04
-  Travel::Routing::DE::VRR::Route:
-    file: lib/Travel/Routing/DE/VRR/Route.pm
-    version: 2.04
-  Travel::Routing::DE::VRR::Route::Part:
-    file: lib/Travel/Routing/DE/VRR/Route/Part.pm
-    version: 2.04
+    version: 2.06
 requires:
   Class::Accessor: 0
   Exception::Class: 0
@@ -34,4 +37,4 @@ requires:
   LWP::UserAgent: 0
   XML::LibXML: 0
   perl: v5.10.1
-version: 2.04
+version: 2.06
diff --git a/SIGNATURE b/SIGNATURE
index b7b6ee8..2e66031 100644
--- a/SIGNATURE
+++ b/SIGNATURE
@@ -15,27 +15,30 @@ not run its Makefile.PL or Build.PL.
 Hash: SHA512
 
 SHA1 c87b41eba79d4b6b1e0025df2acb533f450bf73d Build.PL
-SHA1 5337b284f4859378a3224fa33c4feddec46e9600 Changelog
-SHA1 0f690bfa86755a9a77d16fd8504d4e15c18cc088 MANIFEST
-SHA1 28a47164e43a3450a80faa3e0b11f52cd2c3e52e META.json
-SHA1 26e74e0d4b90fe37ecdb03da56356214e7435b0f META.yml
+SHA1 e8aae3eaa35a13de96fe1bfec4a45291b89775de Changelog
+SHA1 02c79f478feb298791fb09c33cc8b00d3a3d209f MANIFEST
+SHA1 d62db3d56c926b1b8a9128ff1ed1290fe4570a48 META.json
+SHA1 86173722e03c511871e9213a864cad4b9f0f9cb6 META.yml
 SHA1 9aaebade9f604ff5ae10ccd84313812a9257b3a0 README
-SHA1 7503ee61d321ae3722518d7afce4ee980865bc70 bin/efa
-SHA1 fa9e1e2e1b6cbed6631149202dac5c0f99ade4ab lib/Travel/Routing/DE/VRR.pm
-SHA1 9b1c542399628731f8ef50f586b55beb776d2ac9 lib/Travel/Routing/DE/VRR/Exception.pod
-SHA1 30a5daecf304df2090839fdb33c374a281fb4347 lib/Travel/Routing/DE/VRR/Route.pm
-SHA1 d57ffc0b0b5527f4fbe3e9b0255e4619ff1eaa69 lib/Travel/Routing/DE/VRR/Route/Part.pm
+SHA1 2c5a08f8229404bd2f784543a4586420693e3f9e bin/efa
+SHA1 277b91f2e751c377920d85b216adfa9c74f6caf6 lib/Travel/Routing/DE/EFA.pm
+SHA1 a5cc8442d8064fe3ae803f46f7238982dfc317aa lib/Travel/Routing/DE/EFA/Exception.pod
+SHA1 5dd17873a6010302a465f79bb7f9744187b24e5e lib/Travel/Routing/DE/EFA/Route.pm
+SHA1 3f2e426dc0186fe0cfd33ba399a6e024b50e3cad lib/Travel/Routing/DE/EFA/Route/Part.pm
+SHA1 991c30f24b62fbc4d8ad4b7c89c4b4b492703e23 lib/Travel/Routing/DE/VRR.pm
 SHA1 261db543570571077efcef95de8bb1ed54e2ca9e provides/zsh/completions/_efa
 SHA1 6cfaebdb4d57688b8ac50f3e840a99a48c15457b t/00-compile-pm.t
 SHA1 3adfc7da6082f15051da7fbda884723388738b61 t/01-compile-pl.t
 SHA1 fd251ffc56ca6e52020c906b61158f78b035679d t/10-pod.t
-SHA1 5cde4ac432254478c2b0e23731dfa3e7623cdc37 t/20-vrr.t
-SHA1 435f29a4e2f70f2d444ed476f9dd4f15a89610a1 t/21-vrr.t
+SHA1 8dc8c00805587f384169c37a1b1ba58c35441b50 t/20-vrr.t
+SHA1 bff170282d6990434cda28454e1d1ad6a746f02f t/21-vrr.t
 SHA1 03c61137db01ab6c66d6d57c6de800033e8f2966 t/in/ambiguous
 SHA1 7f75ab59522856d704efb6e94d3d76bf830b26b0 t/in/e_alf_d_hbf.xml
 SHA1 b090ebff2ae34df32f307c0a3cd5b90b7140044a t/in/e_hbf_b_hbf.ice
 SHA1 c9bbc91ea2a9412a0710ac51b3b3aa1170d4e737 t/in/e_hbf_b_hbf.xml
+SHA1 f2eca047f6ac07a38cd7438a4d9f6429201bc45b t/in/e_hbf_d_hbf.json
 SHA1 2653e00afa657bcaa7983046856314b3dfd2f485 t/in/e_hbf_du_hbf.ice
+SHA1 71a6764869c3a451d8bbdf88a62d6d36aab26f86 t/in/e_hbf_e_alfredusbad.json
 SHA1 acf8aadf2536de7c4ee297b9e3be110efb9e6a05 t/in/e_hbf_k_hbf.xml
 SHA1 90fb6ff0cfe39ec7a4ed7eec2c48c62ca21a637c t/in/e_hbf_mh_hbf
 SHA1 52c4bdb38ab8fc19dc4c8d30ecbcca3e4267cce1 t/in/e_hbf_mh_hbf.xml
@@ -51,19 +54,19 @@ SHA1 cb58b25096325a6080109f0323c42a80726b38a2 t/out/e_hbf_mh_hbf.ignore_none
 SHA1 7469ef9df305ac872ca14f85c6e99c53db9a3dd1 t/out/e_martinstr_e_florastr
 SHA1 a5f60da1ae99a74c798a8aa25dc92d8e469176fd t/out/e_werden_e_hbf
 -----BEGIN PGP SIGNATURE-----
-Version: GnuPG v1.4.15 (GNU/Linux)
+Version: GnuPG v1
 
-iQIcBAEBCgAGBQJSzEKOAAoJEBANW/tRZuAFZc8QAMzsdDJr9nFTYT5LgF0s/Eb4
-guHxzEvpxfyQ/ufc++fS1YuhR2YFqi/ml0rCrNqYxhYrdv8lqAMUvSjLoUz70hsp
-sPmDHwKnYahNwBTRqbv2b6Yet8sCEyERlTAbsW4p5aKZFkCaAe7O8f2xm8Hy8Coq
-l7E+D0fMni1K5msbEhZoSBJBnh6iq2yHqfRyeUADgk8zv4T/LFHVxs0xLA7S0GMp
-XhncNfLRiY9lbRXu5O24SWkrtXzylWV93DiBXJG17cTWThBDvQMrPgJr/8p0ZmxA
-Nq1SeePjOuPw/UwmFWnO1XVjZquK75GGBNQWQv2hdJpNUlrcibyMMzbt8m3ByMRa
-HlyM1PwRt90BcHTCQClneS5Oas71I87oy8KU4gKHA/eTfqeMqXeeRdrTsKUjhAyZ
-45Sj5vgZL9CEsT3B3P307vRk5peHBn2EtPsjq+gfG99BhWyToUFOBlvvB94V4wgl
-CtxeOrzD3DlybIsHklXbxZ4a4IFjGIuawBkJXEsyTmdLfV5HbRV92ddwP976C+sG
-rP7kTyGHachEk91HEoRhVwrW0CFotrtvsmxz/4KzTouOvxtjboQUcVV7ZS4PJEpQ
-f/VRUxV7fiFGdpsSHL4btPthWkgLUZa3sdtcX/UmuABJi/UOCPmo7zD4Zh7LVZrl
-dft1Q8t+Lzcxc+RA23Ja
-=1t5L
+iQIcBAEBCgAGBQJT3SY0AAoJEBANW/tRZuAF7VoQAKqQHcSCbaKmwa/MpVpI+SUp
+lFV0bG3cvruduix5eNREYamt+LH8/O57UX4/W+75ekciQnTrZ65m/13s1e0xCiVb
+JmiJ5BpgCoNSm03GscDavDfiTIQv8Z/CzdxdjTk+5N59SMxp27vpWg9tqfTDLmC0
+/c8riLKM+aneMdwFk7Q/EFUn6J7qO1n03o/NPSwr/ultWkiSKMr6BtOPzlkLAN/i
+S6HG8XcACmgZvmvuTo4PrfISm3GWfVtB8diOtkHhny51gVQOQwlGX1XR7gKfi37H
+dXmb+OVxzxq0EwaL+sNv/KRu7sJBivJK4zh7oyAAKw4TJGy14agFpz2IO9JNoGRP
+acVx2lGS9hD/coV3cLa711I3rLuINK/sm/cIelnjl1OM8klbPeBlJYyxPkZKpreZ
+x8yrs/QwKXaqqJBwY3IpxamzcUXuXXyAhg/J/7r0CMqH2si/YgZ/iOIjZ97xUyGj
++2MYrNdc313HtYGL/soOmxNl1frNIB8LnSnRbdA3xb/Gbd5ouqakNV3tCnXFDoJn
+tCH20e31Cu/bAPluKa28bW5fqzJwK36KZ0yMgbYBliOcCGbFPz5F4ddA4kWgyRO3
+qPhGRSJQstYRbz6d8d8UVkuY0e0vF9CYyX65k7XjmrZFqwKU3Qr1kraA4B1Vo7zw
+SSQeJod5ozDK9psouSew
+=BLuB
 -----END PGP SIGNATURE-----
diff --git a/bin/efa b/bin/efa
index 2eb8624..fa3a309 100755
--- a/bin/efa
+++ b/bin/efa
@@ -11,21 +11,23 @@ no if $] >= 5.018, warnings => "experimental::smartmatch";
 use utf8;
 
 use Encode qw(decode);
-use Travel::Routing::DE::VRR;
+use Travel::Routing::DE::EFA;
 use Exception::Class;
 use Getopt::Long qw/:config no_ignore_case/;
 
-our $VERSION = '2.04';
+our $VERSION = '2.06';
 my $ignore_info = 'Fahrradmitnahme';
 my $efa;
+my $efa_url = 'http://efa.vrr.de/vrr/XSLT_TRIP_REQUEST2';
 my ( @from, @to, @via, $from_type, $to_type, $via_type );
 my $opt = {
+	'efa-url'     => \$efa_url,
 	'help'        => sub { show_help(0) },
 	'ignore-info' => \$ignore_info,
 	'from'        => \@from,
 	'to'          => \@to,
-	'version' => sub { say "efa version $VERSION"; exit 0 },
-	'via' => \@via,
+	'version'     => sub { say "efa version $VERSION"; exit 0 },
+	'via'         => \@via,
 };
 
 binmode( STDOUT, ':encoding(utf-8)' );
@@ -43,7 +45,7 @@ sub show_help {
 sub handle_efa_exception {
 	my ($e) = @_;
 
-	if ( $e->isa('Travel::Routing::DE::VRR::Exception::Setup') ) {
+	if ( $e->isa('Travel::Routing::DE::EFA::Exception::Setup') ) {
 		if ( $e->message ) {
 			printf STDERR (
 				"Error: %s (option '%s'): %s\n",
@@ -59,24 +61,24 @@ sub handle_efa_exception {
 
 		exit 1;
 	}
-	if ( $e->isa('Travel::Routing::DE::VRR::Exception::Net') ) {
+	if ( $e->isa('Travel::Routing::DE::EFA::Exception::Net') ) {
 		printf STDERR ( "Error: %s: %s\n", $e->description,
 			$e->http_response->as_string );
 		exit 2;
 	}
-	if ( $e->isa('Travel::Routing::DE::VRR::Exception::NoData') ) {
-		printf STDERR ( 'Error: %s', $e->description );
+	if ( $e->isa('Travel::Routing::DE::EFA::Exception::NoData') ) {
+		printf STDERR ( "Error: %s\n", $e->description );
 		exit 3;
 	}
-	if ( $e->isa('Travel::Routing::DE::VRR::Exception::Ambiguous') ) {
+	if ( $e->isa('Travel::Routing::DE::EFA::Exception::Ambiguous') ) {
 		printf STDERR (
 			"Error: %s for key %s. Specify one of %s\n",
 			$e->description, $e->post_key, $e->possibilities
 		);
 		exit 4;
 	}
-	if ( $e->isa('Travel::Routing::DE::VRR::Exception::NoConnections') ) {
-		printf STDERR ( "Error: %s: %s\n", $e->description, $e->error );
+	if ( $e->isa('Travel::Routing::DE::EFA::Exception::Other') ) {
+		printf STDERR ( "Error: %s: %s\n", $e->description, $e->message );
 		exit 5;
 	}
 
@@ -90,17 +92,17 @@ sub check_for_error {
 	if ( not defined $efa ) {
 		if (    $eval_error
 			and ref($eval_error)
-			and $eval_error->isa('Travel::Routing::DE::VRR::Exception') )
+			and $eval_error->isa('Travel::Routing::DE::EFA::Exception') )
 		{
 			handle_efa_exception($eval_error);
 		}
 		elsif ($eval_error) {
 			printf STDERR
-			  "Unknown Travel::Routing::DE::VRR error:\n${eval_error}";
+			  "Unknown Travel::Routing::DE::EFA error:\n${eval_error}";
 			exit 10;
 		}
 		else {
-			say STDERR 'Travel::Routing::DE::VRR failed to return an object';
+			say STDERR 'Travel::Routing::DE::EFA failed to return an object';
 			exit 10;
 		}
 	}
@@ -123,15 +125,27 @@ sub display_connection {
 		}
 	}
 
+	if ( $opt->{maps} ) {
+		for my $m ( $c->departure_routemaps, $c->departure_stationmaps ) {
+			say "# $m";
+		}
+	}
+
 	printf(
 		"%-5s ab  %-30s %-20s %s\n",
 		$c->departure_time, $c->departure_stop_and_platform,
 		$c->train_line,     $c->train_destination,
 	);
 
-	printf( "%-5s an  %s\n\n",
-		$c->arrival_time, $c->arrival_stop_and_platform,
-	);
+	if ( $opt->{'full-route'} ) {
+		for my $via_stop ( $c->via ) {
+			printf( "%-5s     %-30s %s\n",
+				$via_stop->[1], $via_stop->[2], $via_stop->[3] );
+		}
+	}
+
+	printf( "%-5s an  %s\n", $c->arrival_time, $c->arrival_stop_and_platform, );
+	print "\n";
 
 	return;
 }
@@ -146,12 +160,16 @@ GetOptions(
 		bike|b
 		date|d=s
 		depart=s
+		efa-url|u=s
 		exclude|e=s@
 		extended-info|E
 		from=s@{2}
+		full-route|f
 		help|h
 		ignore-info|I:s
+		maps|M
 		max-change|m=i
+		num-connections|n=i
 		prefer|P=s
 		proximity|p
 		include|i=s
@@ -198,8 +216,14 @@ if ( defined $opt->{'ignore-info'} and length( $opt->{'ignore-info'} ) == 0 ) {
 	$opt->{'ignore-info'} = undef;
 }
 
+if ( $opt->{exclude} ) {
+	$opt->{exclude} = [ split( /,/, join( ',', @{ $opt->{exclude} } ) ) ];
+}
+
 $efa = eval {
-	Travel::Routing::DE::VRR->new(
+	Travel::Routing::DE::EFA->new(
+		efa_url => $efa_url,
+
 		origin      => [ @from, $from_type ],
 		destination => [ @to,   $to_type ],
 		via => ( @via ? [ @via, $via_type ] : undef ),
@@ -215,6 +239,7 @@ $efa = eval {
 		use_near_stops        => $opt->{proximity},
 		walk_speed            => $opt->{'walk-speed'},
 		max_interchanges      => $opt->{'max-change'},
+		num_results           => $opt->{'num-connections'},
 
 		lwp_options => { timeout => $opt->{timeout} },
 	);
@@ -242,6 +267,15 @@ for my $i ( 0 .. $#routes ) {
 	for my $c ( $route->parts ) {
 		display_connection($c);
 	}
+
+	# last one needs to be shown separately
+	if ( $opt->{maps} ) {
+		my $c = ( $route->parts )[-1];
+		for my $m ( $c->arrival_routemaps, $c->arrival_stationmaps ) {
+			say "# $m";
+		}
+	}
+
 	if ( $i != $#routes ) {
 		print "---------\n\n";
 	}
@@ -265,7 +299,7 @@ efa - unofficial efa.vrr.de command line client
 
 =head1 VERSION
 
-version 2.04
+version 2.06
 
 =head1 DESCRIPTION
 
@@ -321,10 +355,25 @@ schnellbus, seilbahn, schiff, ast, sonstige
 
 Display duration, ticket class and price for each route (if available)
 
+=item B<-f>|B<--full-route>
+
+Display intermediate stops (with time and platform) of each train.  Note that
+these are not always available.
+
 =item B<-m>|B<--max-change> I<number>
 
 Print connections with at most I<number> interchanges
 
+=item B<-M>|B<--maps>
+
+Output links to maps of transfer paths and transfer stations where
+available.
+
+=item B<-n>|B<--num-connections> I<number>
+
+Return up to I<number> connections.  If unset, the default of the respective
+EFA server is used (usually 4 or 5).
+
 =item B<-P>|B<--prefer> I<type>
 
 Prefer connections of I<type>:
@@ -381,6 +430,13 @@ Ignore additional information matching I<regex> (default: /Fahrradmitnahme/)
 
 If I<regex> is not supplied, removes the default regex (-E<gt> nothing will be ignored)
 
+=item B<-u>|B<--efa-url> I<url>
+
+URL to the EFA entry point, defaults to
+L<http://efa.vrr.de/vrr/XSLT_TRIP_REQUEST2>.  Depending on your location, some
+I<url>s may contain more specific data than others. See
+Travel::Routing::DE::EFA(3pm) for alternatives.
+
 =item B<--timeout> I<seconds>
 
 Set timeout for HTTP requests. Default: 60 seconds.
@@ -407,7 +463,7 @@ Print version information
     3    efa.vrr.de did not return any parsable data
     4    efa.vrr.de error: ambiguous input
     5    efa.vrr.de error: no connections found
-    10   Unknown Travel::Routing::DE::VRR error
+    10   Unknown Travel::Routing::DE::EFA error
     255  Other internal error
 
 =head1 CONFIGURATION
@@ -432,6 +488,13 @@ This script requires perl 5.10 (or higher) with the following modules:
 
 =head1 BUGS AND LIMITATIONS
 
+The EFA backend is not able to calculate "two-way" routes, i.e. from -> via ->
+to routes with from == to. If from and to are the same stop, it doesn't even
+try to calculate a route ("we recommend walking instead"), if they are close to
+each other it may or may not work.  Workaround: Request from -> via using the
+normal four-argument efa invocation, read the time, use efa -t time via via to
+to to request via -> to.
+
 None known.
 
 =head1 AUTHOR
diff --git a/lib/Travel/Routing/DE/VRR.pm b/lib/Travel/Routing/DE/EFA.pm
similarity index 75%
copy from lib/Travel/Routing/DE/VRR.pm
copy to lib/Travel/Routing/DE/EFA.pm
index 665d5bc..cf21b1e 100644
--- a/lib/Travel/Routing/DE/VRR.pm
+++ b/lib/Travel/Routing/DE/EFA.pm
@@ -1,4 +1,4 @@
-package Travel::Routing::DE::VRR;
+package Travel::Routing::DE::EFA;
 
 use strict;
 use warnings;
@@ -8,38 +8,39 @@ no if $] >= 5.018, warnings => "experimental::smartmatch";
 
 use Carp qw(cluck);
 use Encode qw(decode encode);
-use Travel::Routing::DE::VRR::Route;
+use Travel::Routing::DE::EFA::Route;
 use LWP::UserAgent;
 use XML::LibXML;
 
 use Exception::Class (
-	'Travel::Routing::DE::VRR::Exception',
-	'Travel::Routing::DE::VRR::Exception::Setup' => {
-		isa         => 'Travel::Routing::DE::VRR::Exception',
+	'Travel::Routing::DE::EFA::Exception',
+	'Travel::Routing::DE::EFA::Exception::Setup' => {
+		isa         => 'Travel::Routing::DE::EFA::Exception',
 		description => 'invalid argument on setup',
 		fields      => [ 'option', 'have', 'want' ],
 	},
-	'Travel::Routing::DE::VRR::Exception::Net' => {
-		isa         => 'Travel::Routing::DE::VRR::Exception',
+	'Travel::Routing::DE::EFA::Exception::Net' => {
+		isa         => 'Travel::Routing::DE::EFA::Exception',
 		description => 'could not submit POST request',
 		fields      => 'http_response',
 	},
-	'Travel::Routing::DE::VRR::Exception::NoData' => {
-		isa         => 'Travel::Routing::DE::VRR::Exception',
-		description => 'got no data to parse',
+	'Travel::Routing::DE::EFA::Exception::NoData' => {
+		isa         => 'Travel::Routing::DE::EFA::Exception',
+		description => 'backend returned no parsable route',
 	},
-	'Travel::Routing::DE::VRR::Exception::Ambiguous' => {
-		isa         => 'Travel::Routing::DE::VRR::Exception',
+	'Travel::Routing::DE::EFA::Exception::Ambiguous' => {
+		isa         => 'Travel::Routing::DE::EFA::Exception',
 		description => 'ambiguous input',
 		fields      => [ 'post_key', 'possibilities' ],
 	},
-	'Travel::Routing::DE::VRR::Exception::NoConnections' => {
-		isa         => 'Travel::Routing::DE::VRR::Exception',
-		description => 'got no connections',
+	'Travel::Routing::DE::EFA::Exception::Other' => {
+		isa         => 'Travel::Routing::DE::EFA::Exception',
+		description => 'EFA backend returned an error',
+		fields      => ['message'],
 	},
 );
 
-our $VERSION = '2.04';
+our $VERSION = '2.06';
 
 sub set_time {
 	my ( $self, %conf ) = @_;
@@ -55,14 +56,14 @@ sub set_time {
 		$time = $conf{arrival_time};
 	}
 	else {
-		Travel::Routing::DE::VRR::Exception::Setup->throw(
+		Travel::Routing::DE::EFA::Exception::Setup->throw(
 			option => 'time',
 			error  => 'Specify either departure_time or arrival_time'
 		);
 	}
 
 	if ( $time !~ / ^ [0-2]? \d : [0-5]? \d $ /x ) {
-		Travel::Routing::DE::VRR::Exception::Setup->throw(
+		Travel::Routing::DE::EFA::Exception::Setup->throw(
 			option => 'time',
 			have   => $time,
 			want   => 'HH:MM',
@@ -102,7 +103,7 @@ sub date {
 			and $month <= 12 )
 	  )
 	{
-		Travel::Routing::DE::VRR::Exception::Setup->throw(
+		Travel::Routing::DE::EFA::Exception::Setup->throw(
 			option => 'date',
 			have   => $date,
 			want   => 'DD.MM[.[YYYY]]'
@@ -131,12 +132,12 @@ sub exclude {
 		my $ok = 0;
 		for my $map_id ( 0 .. $#mapping ) {
 			if ( $exclude_type eq $mapping[$map_id] ) {
-				$self->{post}->{"inclMOT_${map_id}"} = undef;
+				delete $self->{post}->{"inclMOT_${map_id}"};
 				$ok = 1;
 			}
 		}
 		if ( not $ok ) {
-			Travel::Routing::DE::VRR::Exception::Setup->throw(
+			Travel::Routing::DE::EFA::Exception::Setup->throw(
 				option => 'exclude',
 				have   => $exclude_type,
 				want   => join( ' / ', @mapping ),
@@ -155,6 +156,14 @@ sub max_interchanges {
 	return;
 }
 
+sub number_of_trips {
+	my ( $self, $num ) = @_;
+
+	$self->{post}->{calcNumberOfTrips} = $num;
+
+	return;
+}
+
 sub select_interchange_by {
 	my ( $self, $prefer ) = @_;
 
@@ -163,7 +172,7 @@ sub select_interchange_by {
 		when ('waittime') { $self->{post}->{routeType} = 'LEASTINTERCHANGE' }
 		when ('distance') { $self->{post}->{routeType} = 'LEASTWALKING' }
 		default {
-			Travel::Routing::DE::VRR::Exception::Setup->throw(
+			Travel::Routing::DE::EFA::Exception::Setup->throw(
 				option => 'select_interchange_by',
 				have   => $prefer,
 				want   => 'speed / waittime / distance',
@@ -182,7 +191,7 @@ sub train_type {
 		when ('ic')    { $self->{post}->{lineRestriction} = 401 }
 		when ('ice')   { $self->{post}->{lineRestriction} = 400 }
 		default {
-			Travel::Routing::DE::VRR::Exception::Setup->throw(
+			Travel::Routing::DE::EFA::Exception::Setup->throw(
 				option => 'train_type',
 				have   => $include,
 				want   => 'local / ic / ice',
@@ -208,7 +217,7 @@ sub walk_speed {
 		$self->{post}->{changeSpeed} = $walk_speed;
 	}
 	else {
-		Travel::Routing::DE::VRR::Exception::Setup->throw(
+		Travel::Routing::DE::EFA::Exception::Setup->throw(
 			option => 'walk_speed',
 			have   => $walk_speed,
 			want   => 'normal / fast / slow',
@@ -230,7 +239,7 @@ sub place {
 	my ( $self, $which, $place, $stop, $type ) = @_;
 
 	if ( not( $place and $stop ) ) {
-		Travel::Routing::DE::VRR::Exception::Setup->throw(
+		Travel::Routing::DE::EFA::Exception::Setup->throw(
 			option => 'place',
 			error  => 'Need >= three elements'
 		);
@@ -311,6 +320,7 @@ sub create_post {
 		name_destination                                   => q{},
 		name_origin                                        => q{},
 		name_via                                           => q{},
+		nextDepsPerLeg                                     => 1,
 		outputFormat                                       => 'XML',
 		placeInfo_destination                              => 'invalid',
 		placeInfo_origin                                   => 'invalid',
@@ -363,6 +373,9 @@ sub create_post {
 	if ( $conf->{max_interchanges} ) {
 		$self->max_interchanges( $conf->{max_interchanges} );
 	}
+	if ( $conf->{num_results} ) {
+		$self->number_of_trips( $conf->{num_results} );
+	}
 	if ( $conf->{select_interchange_by} ) {
 		$self->select_interchange_by( $conf->{select_interchange_by} );
 	}
@@ -391,7 +404,21 @@ sub new {
 
 	bless( $ref, $obj );
 
-	$ref->create_post();
+	if ( not $ref->{config}->{efa_url} ) {
+		Travel::Routing::DE::EFA::Exception::Setup->throw(
+			option => 'efa_url',
+			error  => 'must be set'
+		);
+	}
+
+	$ref->{config}->{efa_url} =~ m{
+		(?<netroot> (?<root> [^:]+ : // [^/]+ ) / [^/]+ / )
+	}ox;
+
+	$ref->{config}->{rm_base} = $+{netroot};
+	$ref->{config}->{sm_base} = $+{root} . '/download/envmaps/';
+
+	$ref->create_post;
 
 	if ( not( defined $conf{submit} and $conf{submit} == 0 ) ) {
 		$ref->submit( %{ $conf{lwp_options} } );
@@ -405,9 +432,20 @@ sub new_from_xml {
 
 	my $self = { xml_reply => $opt{xml} };
 
+	$self->{config} = {
+		efa_url => $opt{efa_url},
+	};
+
+	$self->{config}->{efa_url} =~ m{
+		(?<netroot> (?<root> [^:]+ : // [^/]+ ) / [^/]+ / )
+	}ox;
+
+	$self->{config}->{rm_base} = $+{netroot};
+	$self->{config}->{sm_base} = $+{root} . '/download/envmaps/';
+
 	bless( $self, $class );
 
-	$self->parse();
+	$self->parse_xml;
 
 	return $self;
 }
@@ -418,17 +456,18 @@ sub submit {
 	$self->{ua} = LWP::UserAgent->new(%conf);
 	$self->{ua}->env_proxy;
 
-	my $response = $self->{ua}
-	  ->post( 'http://efa.vrr.de/vrr/XSLT_TRIP_REQUEST2', $self->{post} );
+	my $response
+	  = $self->{ua}->post( $self->{config}->{efa_url}, $self->{post} );
 
 	if ( $response->is_error ) {
-		Travel::Routing::DE::VRR::Exception::Net->throw(
-			http_response => $response, );
+		Travel::Routing::DE::EFA::Exception::Net->throw(
+			http_response => $response,
+		);
 	}
 
 	$self->{xml_reply} = $response->decoded_content;
 
-	$self->parse();
+	$self->parse_xml;
 
 	return;
 }
@@ -450,7 +489,7 @@ sub itdtime_str {
 		$node->getAttribute('minute') );
 }
 
-sub parse_part {
+sub parse_xml_part {
 	my ( $self, $route ) = @_;
 
 	my $xp_route = XML::LibXML::XPathExpression->new(
@@ -472,6 +511,11 @@ sub parse_part {
 	my $xp_info
 	  = XML::LibXML::XPathExpression->new('./itdInfoTextList/infoTextListElem');
 
+	my $xp_mapitem_rm = XML::LibXML::XPathExpression->new(
+		'./itdMapItemList/itdMapItem[@type="RM"]/itdImage');
+	my $xp_mapitem_sm = XML::LibXML::XPathExpression->new(
+		'./itdMapItemList/itdMapItem[@type="SM"]/itdImage');
+
 	my $xp_fare
 	  = XML::LibXML::XPathExpression->new('./itdFare/itdSingleTicket');
 
@@ -493,22 +537,39 @@ sub parse_part {
 
 	for my $e ( $route->findnodes($xp_route) ) {
 
-		my $e_dep    = ( $e->findnodes($xp_dep) )[0];
-		my $e_arr    = ( $e->findnodes($xp_arr) )[0];
-		my $e_ddate  = ( $e_dep->findnodes($xp_date) )[0];
-		my $e_dtime  = ( $e_dep->findnodes($xp_time) )[0];
-		my $e_dsdate = ( $e_dep->findnodes($xp_sdate) )[0];
-		my $e_dstime = ( $e_dep->findnodes($xp_stime) )[0];
-		my $e_adate  = ( $e_arr->findnodes($xp_date) )[0];
-		my $e_atime  = ( $e_arr->findnodes($xp_time) )[0];
-		my $e_asdate = ( $e_arr->findnodes($xp_sdate) )[0];
-		my $e_astime = ( $e_arr->findnodes($xp_stime) )[0];
-		my $e_mot    = ( $e->findnodes($xp_mot) )[0];
-		my $e_delay  = ( $e->findnodes($xp_delay) )[0];
-		my @e_info   = $e->findnodes($xp_info);
+		my $e_dep     = ( $e->findnodes($xp_dep) )[0];
+		my $e_arr     = ( $e->findnodes($xp_arr) )[0];
+		my $e_ddate   = ( $e_dep->findnodes($xp_date) )[0];
+		my $e_dtime   = ( $e_dep->findnodes($xp_time) )[0];
+		my $e_dsdate  = ( $e_dep->findnodes($xp_sdate) )[0];
+		my $e_dstime  = ( $e_dep->findnodes($xp_stime) )[0];
+		my $e_adate   = ( $e_arr->findnodes($xp_date) )[0];
+		my $e_atime   = ( $e_arr->findnodes($xp_time) )[0];
+		my $e_asdate  = ( $e_arr->findnodes($xp_sdate) )[0];
+		my $e_astime  = ( $e_arr->findnodes($xp_stime) )[0];
+		my $e_mot     = ( $e->findnodes($xp_mot) )[0];
+		my $e_delay   = ( $e->findnodes($xp_delay) )[0];
+		my @e_info    = $e->findnodes($xp_info);
+		my @e_dmap_rm = $e_dep->findnodes($xp_mapitem_rm);
+		my @e_dmap_sm = $e_dep->findnodes($xp_mapitem_sm);
+		my @e_amap_rm = $e_arr->findnodes($xp_mapitem_rm);
+		my @e_amap_sm = $e_arr->findnodes($xp_mapitem_sm);
 
 		my $delay = $e_delay ? $e_delay->getAttribute('delayMinutes') : 0;
 
+		my ( @dep_rms, @dep_sms, @arr_rms, @arr_sms );
+
+		if ( $self->{config}->{rm_base} ) {
+			my $base = $self->{config}->{rm_base};
+			@dep_rms = map { $base . $_->getAttribute('src') } @e_dmap_rm;
+			@arr_rms = map { $base . $_->getAttribute('src') } @e_amap_rm;
+		}
+		if ( $self->{config}->{sm_base} ) {
+			my $base = $self->{config}->{sm_base};
+			@dep_sms = map { $base . $_->getAttribute('src') } @e_dmap_sm;
+			@arr_sms = map { $base . $_->getAttribute('src') } @e_amap_sm;
+		}
+
 		my $hash = {
 			delay              => $delay,
 			departure_date     => $self->itddate_str($e_ddate),
@@ -531,6 +592,11 @@ sub parse_part {
 			$hash->{$key} = decode( 'UTF-8', $hash->{$key} );
 		}
 
+		$hash->{departure_routemaps}   = \@dep_rms;
+		$hash->{departure_stationmaps} = \@dep_sms;
+		$hash->{arrival_routemaps}     = \@arr_rms;
+		$hash->{arrival_stationmaps}   = \@arr_sms;
+
 		for my $ve ( $e->findnodes($xp_via) ) {
 			my $e_vdate = ( $ve->findnodes($xp_date) )[-1];
 			my $e_vtime = ( $ve->findnodes($xp_time) )[-1];
@@ -566,38 +632,49 @@ sub parse_part {
 
 	push(
 		@{ $self->{routes} },
-		Travel::Routing::DE::VRR::Route->new( $info, @route_parts )
+		Travel::Routing::DE::EFA::Route->new( $info, @route_parts )
 	);
 
 	return;
 }
 
-sub parse {
+sub parse_xml {
 	my ($self) = @_;
 
-	my $tree = $self->{tree}
-	  = XML::LibXML->load_xml( string => $self->{xml_reply}, );
+	my $tree = $self->{tree} = XML::LibXML->load_xml(
+		string => $self->{xml_reply},
+	);
+
+	#say $tree->toString(2);
 
 	my $xp_element = XML::LibXML::XPathExpression->new(
 		'//itdItinerary/itdRouteList/itdRoute');
+	my $xp_err = XML::LibXML::XPathExpression->new(
+		'//itdTripRequest/itdMessage[@type="error"]');
 	my $xp_odv = XML::LibXML::XPathExpression->new('//itdOdv');
 
 	for my $odv ( $tree->findnodes($xp_odv) ) {
-		$self->check_ambiguous($odv);
+		$self->check_ambiguous_xml($odv);
+	}
+
+	my $err = ( $tree->findnodes($xp_err) )[0];
+	if ($err) {
+		Travel::Routing::DE::EFA::Exception::Other->throw(
+			message => $err->textContent );
 	}
 
 	for my $part ( $tree->findnodes($xp_element) ) {
-		$self->parse_part($part);
+		$self->parse_xml_part($part);
 	}
 
-	if ( @{ $self->{routes} } == 0 ) {
-		Travel::Routing::DE::VRR::Exception::NoData->throw();
+	if ( not defined $self->{routes} or @{ $self->{routes} } == 0 ) {
+		Travel::Routing::DE::EFA::Exception::NoData->throw;
 	}
 
 	return 1;
 }
 
-sub check_ambiguous {
+sub check_ambiguous_xml {
 	my ( $self, $tree ) = @_;
 
 	my $xp_place = XML::LibXML::XPathExpression->new('./itdOdvPlace');
@@ -618,7 +695,7 @@ sub check_ambiguous {
 	my $s_name  = $e_name->getAttribute('state');
 
 	if ( $s_place eq 'list' ) {
-		Travel::Routing::DE::VRR::Exception::Ambiguous->throw(
+		Travel::Routing::DE::EFA::Exception::Ambiguous->throw(
 			post_key      => 'place',
 			possibilities => join( q{ | },
 				map { decode( 'UTF-8', $_->textContent ) }
@@ -626,7 +703,7 @@ sub check_ambiguous {
 		);
 	}
 	if ( $s_name eq 'list' ) {
-		Travel::Routing::DE::VRR::Exception::Ambiguous->throw(
+		Travel::Routing::DE::EFA::Exception::Ambiguous->throw(
 			post_key      => 'name',
 			possibilities => join( q{ | },
 				map { decode( 'UTF-8', $_->textContent ) }
@@ -635,13 +712,13 @@ sub check_ambiguous {
 	}
 
 	if ( $s_place eq 'notidentified' ) {
-		Travel::Routing::DE::VRR::Exception::Setup->throw(
+		Travel::Routing::DE::EFA::Exception::Setup->throw(
 			option => 'place',
 			error  => 'unknown place (typo?)'
 		);
 	}
 	if ( $s_name eq 'notidentified' ) {
-		Travel::Routing::DE::VRR::Exception::Setup->throw(
+		Travel::Routing::DE::EFA::Exception::Setup->throw(
 			option => 'name',
 			error  => 'unknown name (typo?)'
 		);
@@ -664,13 +741,14 @@ __END__
 
 =head1 NAME
 
-Travel::Routing::DE::VRR - unofficial interface to the efa.vrr.de German itinerary service
+Travel::Routing::DE::EFA - unofficial interface to EFA-based itinerary services
 
 =head1 SYNOPSIS
 
-	use Travel::Routing::DE::VRR;
+	use Travel::Routing::DE::EFA;
 
-	my $efa = Travel::Routing::DE::VRR->new(
+	my $efa = Travel::Routing::DE::EFA->new(
+		efa_url     => 'http://efa.vrr.de/vrr/XSLT_TRIP_REQUEST2',
 		origin      => [ 'Essen',    'HBf' ],
 		destination => [ 'Duisburg', 'HBf' ],
 	);
@@ -689,11 +767,11 @@ Travel::Routing::DE::VRR - unofficial interface to the efa.vrr.de German itinera
 
 =head1 VERSION
 
-version 2.04
+version 2.06
 
 =head1 DESCRIPTION
 
-B<Travel::Routing::DE::VRR> is a client for the efa.vrr.de web interface.
+B<Travel::Routing::DE::EFA> is a client for EFA-based itinerary services.
 You pass it the start/stop of your journey, maybe a time and a date and more
 details, and it returns the up-to-date scheduled connections between those two
 stops.
@@ -704,15 +782,33 @@ It uses B<LWP::UserAgent> and B<XML::LibXML> for this.
 
 =over
 
-=item $efa = Travel::Routing::DE::VRR->new(I<%opts>)
+=item $efa = Travel::Routing::DE::EFA->new(I<%opts>)
 
-Returns a new Travel::Routing::DE::VRR object and sets up its POST data via
+Returns a new Travel::Routing::DE::EFA object and sets up its POST data via
 %opts.
 
 Valid hash keys and their values are:
 
 =over
 
+=item B<efa_url> => I<efa_url>
+
+Mandatory.  Sets the entry point to the EFA itinerary service.
+Known URLs are:
+
+=over
+
+=item * L<http://212.114.197.7/vgnExt_oeffi/XML_TRIP_REQUEST2> (Verkehrsverbund GroE<szlig>raum NE<uuml>rnberg)
+
+=item * L<http://efa.vrr.de/vrr/XSLT_TRIP_REQUEST2> (Verkehrsverbund Rhein-Ruhr)
+
+=item * L<http://www2.vvs.de/vvs/XSLT_TRIP_REQUEST2> (Verkehrsverbund Stuttgart)
+
+=back
+
+If you found a URL not listed here, please send it to
+E<lt>derf at finalrewind.orgE<gt>.
+
 =item B<origin> => B<[> I<city>B<,> I<stop> [ B<,> I<type> ] B<]>
 
 Mandatory.  Sets the start of the journey.
@@ -750,6 +846,11 @@ seilbahn, schiff, ast, sonstige
 
 Set maximum number of interchanges
 
+=item B<num_results> => I<num>
+
+Return up to I<num> connections.  If unset, the default of the respective
+EFA server is used (usually 4 or 5).
+
 =item B<select_interchange_by> => B<speed>|B<waittime>|B<distance>
 
 Prefer either fast connections (default), connections with low wait time or
@@ -779,20 +880,19 @@ Options to pass to C<< LWP::UserAgent->new >>.
 
 =item B<submit> => B<0>|B<1>
 
-By default, B<new> will create a POST request and submit it to
-L<http://efa.vrr.de>. If you do not want it to be submitted yet, set this to
-B<0>.
+By default, B<new> will create a POST request and submit it.  If you do not
+want it to be submitted yet, set this to B<0>.
 
 =back
 
 =item $efa->submit(I<%opts>)
 
-Submit the query to L<http://efa.vrr.de>.
+Submit the query to I<efa_url>.
 I<%opts> is passed on to C<< LWP::UserAgent->new >>.
 
-=item $efa->routes()
+=item $efa->routes
 
-Returns a list of Travel::Routing::DE::VRR::Route(3pm) elements. Each one contains
+Returns a list of Travel::Routing::DE::EFA::Route(3pm) elements. Each one contains
 one method of getting from start to stop.
 
 =back
@@ -827,8 +927,8 @@ The following methods act like the arguments to B<new>. See there.
 
 =head1 DIAGNOSTICS
 
-When encountering an error, Travel::Routing::DE::VRR throws a
-Travel::Routing::DE::VRR::Exception(3pm) object.
+When encountering an error, Travel::Routing::DE::EFA throws a
+Travel::Routing::DE::EFA::Exception(3pm) object.
 
 =head1 DEPENDENCIES
 
@@ -848,9 +948,9 @@ None known.
 
 =over
 
-=item * Travel::Routing::DE::VRR::Exception(3pm)
+=item * Travel::Routing::DE::EFA::Exception(3pm)
 
-=item * Travel::Routing::DE::VRR::Route(3pm)
+=item * Travel::Routing::DE::EFA::Route(3pm)
 
 =item * L<WWW::EFA> is another implementation, using L<Moose>.
 
diff --git a/lib/Travel/Routing/DE/VRR/Exception.pod b/lib/Travel/Routing/DE/EFA/Exception.pod
similarity index 53%
rename from lib/Travel/Routing/DE/VRR/Exception.pod
rename to lib/Travel/Routing/DE/EFA/Exception.pod
index aba1197..5ec2991 100644
--- a/lib/Travel/Routing/DE/VRR/Exception.pod
+++ b/lib/Travel/Routing/DE/EFA/Exception.pod
@@ -1,17 +1,17 @@
 =head1 NAME
 
-Travel::Routing::DE::VRR::Exception - Travel::Routing::DE::VRR Exceptions
+Travel::Routing::DE::EFA::Exception - Travel::Routing::DE::EFA Exceptions
 
 =head1 DESCRIPTION
 
-All Exceptions throws by Travel::Routing::DE::VRR are
-Travel::Routing::DE::VRR::Exception objects created by Exception::Class(3pm).
+All Exceptions thrown by Travel::Routing::DE::EFA are
+Travel::Routing::DE::EFA::Exception objects created by Exception::Class(3pm).
 
 See Exception::Class::Base(3pm) for their common methods.
 
 =head1 LIST OF EXCEPTIONS
 
-=head2 Travel::Routing::DE::VRR::Exception::Setup
+=head2 Travel::Routing::DE::EFA::Exception::Setup
 
 An argument to B<new> had an invalid format.
 
@@ -33,25 +33,25 @@ What kind of argument we want.
 
 =back
 
-=head2 Travel::Routing::DE::VRR::Exception::Net
+=head2 Travel::Routing::DE::EFA::Exception::Net
 
 The HTTP request to the efa interface failed. Contains an HTTP::Response(3pm)
 object describing the error in B<http_response>.
 
-=head2 Travel::Routing::DE::VRR::Exception::NoData
+=head2 Travel::Routing::DE::EFA::Exception::NoData
 
-We got no parsable data from efa.vrr.de
+We got no parsable data from the EFA service
 
-=head2 Travel::Routing::DE::VRR::Exception::Ambiguous
+=head2 Travel::Routing::DE::EFA::Exception::Ambiguous
 
 Our request contained ambiguous data. B<post_key> contains the relevant POST
 key, B<possibilities> is a comma-separated string of possible key values (as
-reported by efa.vrr.de).
+reported by the EFA service).
 
-=head2 Travel::Routing::DE::VRR::Exception::NoConnections
+=head2 Travel::Routing::DE::EFA::Exception::NoConnections
 
-efa.vrr.de found no connections for our request.
+The EFA service found no connections for our request.
 
 =head1 SEE ALSO
 
-Travel::Routing::DE::VRR(3pm)
+Travel::Routing::DE::EFA(3pm)
diff --git a/lib/Travel/Routing/DE/VRR/Route.pm b/lib/Travel/Routing/DE/EFA/Route.pm
similarity index 71%
rename from lib/Travel/Routing/DE/VRR/Route.pm
rename to lib/Travel/Routing/DE/EFA/Route.pm
index 4f70f60..a534cfa 100644
--- a/lib/Travel/Routing/DE/VRR/Route.pm
+++ b/lib/Travel/Routing/DE/EFA/Route.pm
@@ -1,4 +1,4 @@
-package Travel::Routing::DE::VRR::Route;
+package Travel::Routing::DE::EFA::Route;
 
 use strict;
 use warnings;
@@ -6,11 +6,11 @@ use 5.010;
 
 use parent 'Class::Accessor';
 
-use Travel::Routing::DE::VRR::Route::Part;
+use Travel::Routing::DE::EFA::Route::Part;
 
-our $VERSION = '2.04';
+our $VERSION = '2.06';
 
-Travel::Routing::DE::VRR::Route->mk_ro_accessors(
+Travel::Routing::DE::EFA::Route->mk_ro_accessors(
 	qw(duration ticket_text ticket_type fare_adult fare_child vehicle_time));
 
 sub new {
@@ -21,7 +21,7 @@ sub new {
 	for my $part (@parts) {
 		push(
 			@{ $ref->{parts} },
-			Travel::Routing::DE::VRR::Route::Part->new( %{$part} )
+			Travel::Routing::DE::EFA::Route::Part->new( %{$part} )
 		);
 	}
 
@@ -40,24 +40,24 @@ __END__
 
 =head1 NAME
 
-Travel::Routing::DE::VRR::Route - Single route (connection) between two points
+Travel::Routing::DE::EFA::Route - Single route (connection) between two points
 
 =head1 SYNOPSIS
 
 	for my $route ( $efa->routes ) {
 		for my $part ( $route->parts ) {
-			# $part is a Travel::Routing::DE::VRR::Route::Part object
+			# $part is a Travel::Routing::DE::EFA::Route::Part object
 		}
 	}
 
 =head1 VERSION
 
-version 2.04
+version 2.06
 
 =head1 DESCRIPTION
 
-Travel::Routing::DE::VRR::Route describes a single method of getting from one
-point to another.  It holds a bunch of Travel::Routing::DE::VRR::Route::Part(3pm)
+Travel::Routing::DE::EFA::Route describes a single method of getting from one
+point to another.  It holds a bunch of Travel::Routing::DE::EFA::Route::Part(3pm)
 objects describing the parts of the route in detail.  Each part depends on the
 previous one.
 
@@ -75,7 +75,7 @@ route duration as string in HH:MM format
 
 =item $route->parts
 
-Returns a list of Travel::Routing::DE::VRR::Route::Part(3pm) elements describing
+Returns a list of Travel::Routing::DE::EFA::Route::Part(3pm) elements describing
 the actual route
 
 =item $route->ticket_type
@@ -110,7 +110,7 @@ None known.
 
 =head1 SEE ALSO
 
-Travel::Routing::DE::VRR(3pm), Travel::Routing::DE::VRR::Route::Part(3pm).
+Travel::Routing::DE::EFA(3pm), Travel::Routing::DE::EFA::Route::Part(3pm).
 
 =head1 AUTHOR
 
diff --git a/lib/Travel/Routing/DE/VRR/Route/Part.pm b/lib/Travel/Routing/DE/EFA/Route/Part.pm
similarity index 68%
rename from lib/Travel/Routing/DE/VRR/Route/Part.pm
rename to lib/Travel/Routing/DE/EFA/Route/Part.pm
index 9a11edc..9040e4c 100644
--- a/lib/Travel/Routing/DE/VRR/Route/Part.pm
+++ b/lib/Travel/Routing/DE/EFA/Route/Part.pm
@@ -1,4 +1,4 @@
-package Travel::Routing::DE::VRR::Route::Part;
+package Travel::Routing::DE::EFA::Route::Part;
 
 use strict;
 use warnings;
@@ -6,14 +6,14 @@ use 5.010;
 
 use parent 'Class::Accessor';
 
-our $VERSION = '2.04';
+our $VERSION = '2.06';
 
-Travel::Routing::DE::VRR::Route::Part->mk_ro_accessors(
+Travel::Routing::DE::EFA::Route::Part->mk_ro_accessors(
 	qw(arrival_platform arrival_stop
-	  arrival_date arrival_time arrival_sdate arrival_stime
-	  delay departure_platform departure_stop
-	  departure_date departure_time departure_sdate departure_stime
-	  train_line train_destination
+	  arrival_date arrival_time arrival_sdate arrival_stime delay
+	  departure_platform
+	  departure_stop departure_date departure_time departure_sdate
+	  departure_stime train_line train_destination
 	  )
 );
 
@@ -25,6 +25,18 @@ sub new {
 	return bless( $ref, $obj );
 }
 
+sub arrival_routemaps {
+	my ($self) = @_;
+
+	return @{ $self->{arrival_routemaps} };
+}
+
+sub arrival_stationmaps {
+	my ($self) = @_;
+
+	return @{ $self->{arrival_stationmaps} };
+}
+
 sub arrival_stop_and_platform {
 	my ($self) = @_;
 
@@ -35,6 +47,18 @@ sub arrival_stop_and_platform {
 	return $self->arrival_stop;
 }
 
+sub departure_routemaps {
+	my ($self) = @_;
+
+	return @{ $self->{departure_routemaps} };
+}
+
+sub departure_stationmaps {
+	my ($self) = @_;
+
+	return @{ $self->{departure_stationmaps} };
+}
+
 sub departure_stop_and_platform {
 	my ($self) = @_;
 
@@ -65,7 +89,7 @@ __END__
 
 =head1 NAME
 
-Travel::Routing::DE::VRR::Route::Part - Describes one connection between two
+Travel::Routing::DE::EFA::Route::Part - Describes one connection between two
 points, without interchanges
 
 =head1 SYNOPSIS
@@ -86,15 +110,15 @@ points, without interchanges
 
 =head1 VERSION
 
-version 2.04
+version 2.06
 
 =head1 DESCRIPTION
 
-B<Travel::Routing::DE::VRR::Route::Part> holds one specific connection (without
+B<Travel::Routing::DE::EFA::Route::Part> holds one specific connection (without
 interchanges) between two points.  It specifies the start/stop point and time,
 the train line and its destination, and optional additional data.
 
-It is usually obtained by a call to Travel::Routing::DE::VRR::Route(3pm)'s
+It is usually obtained by a call to Travel::Routing::DE::EFA::Route(3pm)'s
 B<parts> method.
 
 =head1 METHODS
@@ -134,6 +158,17 @@ Scheduled arrival date in DD.MM.YYYY format
 
 Scheduled arrival time in HH:MM format
 
+=item $part->arrival_routemaps
+
+List of URLs, may be empty. Each URL poinst to a transfer map for the arrival
+station, usually outlining fow to transfer from this train to the next one
+(if applicable).
+
+=item $part->arrival_stationmaps
+
+List of URLs, may be empty. Each URL points to an HTML map of the arrival
+station.
+
 =item $part->delay
 
 delay in minutes, 0 if unknown
@@ -166,6 +201,17 @@ Scheduled departure date in DD.MM.YYYY format
 
 Scheduled departure time in HH:MM format
 
+=item $part->departure_routemaps
+
+List of URLs, may be empty. Each URL points to a PDF a transfer map for the
+departure station, usually outlining fow to transfer from thep previous train
+(if applicable) to this one.
+
+=item $part->departure_stationmaps
+
+List of URLs, may be empty. Each URL poinst to an HTML map of the departure
+station.
+
 =item $part->extra
 
 Additional information about the connection.  Returns a list of
@@ -206,7 +252,7 @@ $part->via does not work reliably.
 
 =head1 SEE ALSO
 
-Travel::Routing::DE::VRR(3pm), Class::Accessor(3pm).
+Travel::Routing::DE::EFA(3pm), Class::Accessor(3pm).
 
 =head1 AUTHOR
 
diff --git a/lib/Travel/Routing/DE/VRR.pm b/lib/Travel/Routing/DE/VRR.pm
index 665d5bc..38f01db 100644
--- a/lib/Travel/Routing/DE/VRR.pm
+++ b/lib/Travel/Routing/DE/VRR.pm
@@ -6,660 +6,21 @@ use 5.010;
 
 no if $] >= 5.018, warnings => "experimental::smartmatch";
 
-use Carp qw(cluck);
-use Encode qw(decode encode);
-use Travel::Routing::DE::VRR::Route;
-use LWP::UserAgent;
-use XML::LibXML;
-
-use Exception::Class (
-	'Travel::Routing::DE::VRR::Exception',
-	'Travel::Routing::DE::VRR::Exception::Setup' => {
-		isa         => 'Travel::Routing::DE::VRR::Exception',
-		description => 'invalid argument on setup',
-		fields      => [ 'option', 'have', 'want' ],
-	},
-	'Travel::Routing::DE::VRR::Exception::Net' => {
-		isa         => 'Travel::Routing::DE::VRR::Exception',
-		description => 'could not submit POST request',
-		fields      => 'http_response',
-	},
-	'Travel::Routing::DE::VRR::Exception::NoData' => {
-		isa         => 'Travel::Routing::DE::VRR::Exception',
-		description => 'got no data to parse',
-	},
-	'Travel::Routing::DE::VRR::Exception::Ambiguous' => {
-		isa         => 'Travel::Routing::DE::VRR::Exception',
-		description => 'ambiguous input',
-		fields      => [ 'post_key', 'possibilities' ],
-	},
-	'Travel::Routing::DE::VRR::Exception::NoConnections' => {
-		isa         => 'Travel::Routing::DE::VRR::Exception',
-		description => 'got no connections',
-	},
-);
-
-our $VERSION = '2.04';
-
-sub set_time {
-	my ( $self, %conf ) = @_;
-
-	my $time;
-
-	if ( $conf{departure_time} ) {
-		$self->{post}->{itdTripDateTimeDepArr} = 'dep';
-		$time = $conf{departure_time};
-	}
-	elsif ( $conf{arrival_time} ) {
-		$self->{post}->{itdTripDateTimeDepArr} = 'arr';
-		$time = $conf{arrival_time};
-	}
-	else {
-		Travel::Routing::DE::VRR::Exception::Setup->throw(
-			option => 'time',
-			error  => 'Specify either departure_time or arrival_time'
-		);
-	}
-
-	if ( $time !~ / ^ [0-2]? \d : [0-5]? \d $ /x ) {
-		Travel::Routing::DE::VRR::Exception::Setup->throw(
-			option => 'time',
-			have   => $time,
-			want   => 'HH:MM',
-		);
-	}
-
-	@{ $self->{post} }{ 'itdTimeHour', 'itdTimeMinute' } = split( /:/, $time );
-
-	return;
-}
-
-sub departure_time {
-	my ( $self, $time ) = @_;
-
-	return $self->set_time( departure_time => $time );
-}
-
-sub arrival_time {
-	my ( $self, $time ) = @_;
-
-	return $self->set_time( arrival_time => $time );
-}
-
-sub date {
-	my ( $self, $date ) = @_;
-
-	my ( $day, $month, $year ) = split( /[.]/, $date );
-
-	if (
-		not(    defined $day
-			and length($day)
-			and $day >= 1
-			and $day <= 31
-			and defined $month
-			and length($month)
-			and $month >= 1
-			and $month <= 12 )
-	  )
-	{
-		Travel::Routing::DE::VRR::Exception::Setup->throw(
-			option => 'date',
-			have   => $date,
-			want   => 'DD.MM[.[YYYY]]'
-		);
-	}
-
-	if ( not defined $year or not length($year) ) {
-		$year = ( localtime(time) )[5] + 1900;
-	}
-
-	@{ $self->{post} }{ 'itdDateDay', 'itdDateMonth', 'itdDateYear' }
-	  = ( $day, $month, $year );
-
-	return;
-}
-
-sub exclude {
-	my ( $self, @exclude ) = @_;
-
-	my @mapping = qw{
-	  zug s-bahn u-bahn stadtbahn tram stadtbus regionalbus
-	  schnellbus seilbahn schiff ast sonstige
-	};
-
-	foreach my $exclude_type (@exclude) {
-		my $ok = 0;
-		for my $map_id ( 0 .. $#mapping ) {
-			if ( $exclude_type eq $mapping[$map_id] ) {
-				$self->{post}->{"inclMOT_${map_id}"} = undef;
-				$ok = 1;
-			}
-		}
-		if ( not $ok ) {
-			Travel::Routing::DE::VRR::Exception::Setup->throw(
-				option => 'exclude',
-				have   => $exclude_type,
-				want   => join( ' / ', @mapping ),
-			);
-		}
-	}
-
-	return;
-}
-
-sub max_interchanges {
-	my ( $self, $max ) = @_;
-
-	$self->{post}->{maxChanges} = $max;
-
-	return;
-}
-
-sub select_interchange_by {
-	my ( $self, $prefer ) = @_;
-
-	given ($prefer) {
-		when ('speed')    { $self->{post}->{routeType} = 'LEASTTIME' }
-		when ('waittime') { $self->{post}->{routeType} = 'LEASTINTERCHANGE' }
-		when ('distance') { $self->{post}->{routeType} = 'LEASTWALKING' }
-		default {
-			Travel::Routing::DE::VRR::Exception::Setup->throw(
-				option => 'select_interchange_by',
-				have   => $prefer,
-				want   => 'speed / waittime / distance',
-			);
-		}
-	}
-
-	return;
-}
-
-sub train_type {
-	my ( $self, $include ) = @_;
-
-	given ($include) {
-		when ('local') { $self->{post}->{lineRestriction} = 403 }
-		when ('ic')    { $self->{post}->{lineRestriction} = 401 }
-		when ('ice')   { $self->{post}->{lineRestriction} = 400 }
-		default {
-			Travel::Routing::DE::VRR::Exception::Setup->throw(
-				option => 'train_type',
-				have   => $include,
-				want   => 'local / ic / ice',
-			);
-		}
-	}
-
-	return;
-}
-
-sub use_near_stops {
-	my ( $self, $toggle ) = @_;
-
-	$self->{post}->{useProxFootSearch} = $toggle;
-
-	return;
-}
-
-sub walk_speed {
-	my ( $self, $walk_speed ) = @_;
-
-	if ( $walk_speed ~~ [ 'normal', 'fast', 'slow' ] ) {
-		$self->{post}->{changeSpeed} = $walk_speed;
-	}
-	else {
-		Travel::Routing::DE::VRR::Exception::Setup->throw(
-			option => 'walk_speed',
-			have   => $walk_speed,
-			want   => 'normal / fast / slow',
-		);
-	}
-
-	return;
-}
-
-sub with_bike {
-	my ( $self, $bike ) = @_;
-
-	$self->{post}->{bikeTakeAlong} = $bike;
-
-	return;
-}
-
-sub place {
-	my ( $self, $which, $place, $stop, $type ) = @_;
-
-	if ( not( $place and $stop ) ) {
-		Travel::Routing::DE::VRR::Exception::Setup->throw(
-			option => 'place',
-			error  => 'Need >= three elements'
-		);
-	}
-
-	$place = encode( 'ISO-8859-15', $place );
-	$stop  = encode( 'ISO-8859-15', $stop );
-
-	$type //= 'stop';
-
-	@{ $self->{post} }{ "place_${which}", "name_${which}" } = ( $place, $stop );
+our $VERSION = '2.06';
 
-	if ( $type ~~ [qw[address poi stop]] ) {
-		$self->{post}->{"type_${which}"} = $type;
-	}
-
-	return;
-}
-
-sub create_post {
-	my ($self) = @_;
-
-	my $conf = $self->{config};
-	my @now  = localtime( time() );
-
-	$self->{post} = {
-		changeSpeed                                        => 'normal',
-		command                                            => q{},
-		execInst                                           => q{},
-		imparedOptionsActive                               => 1,
-		inclMOT_0                                          => 'on',
-		inclMOT_1                                          => 'on',
-		inclMOT_10                                         => 'on',
-		inclMOT_11                                         => 'on',
-		inclMOT_2                                          => 'on',
-		inclMOT_3                                          => 'on',
-		inclMOT_4                                          => 'on',
-		inclMOT_5                                          => 'on',
-		inclMOT_6                                          => 'on',
-		inclMOT_7                                          => 'on',
-		inclMOT_8                                          => 'on',
-		inclMOT_9                                          => 'on',
-		includedMeans                                      => 'checkbox',
-		itOptionsActive                                    => 1,
-		itdDateDay                                         => $now[3],
-		itdDateMonth                                       => $now[4] + 1,
-		itdDateYear                                        => $now[5] + 1900,
-		itdLPxx_ShowFare                                   => q{ },
-		itdLPxx_command                                    => q{},
-		itdLPxx_enableMobilityRestrictionOptionsWithButton => q{},
-		itdLPxx_id_destination                             => ':destination',
-		itdLPxx_id_origin                                  => ':origin',
-		itdLPxx_id_via                                     => ':via',
-		itdLPxx_mapState_destination                       => q{},
-		itdLPxx_mapState_origin                            => q{},
-		itdLPxx_mapState_via                               => q{},
-		itdLPxx_mdvMap2_destination                        => q{},
-		itdLPxx_mdvMap2_origin                             => q{},
-		itdLPxx_mdvMap2_via                                => q{},
-		itdLPxx_mdvMap_destination                         => q{::},
-		itdLPxx_mdvMap_origin                              => q{::},
-		itdLPxx_mdvMap_via                                 => q{::},
-		itdLPxx_priceCalculator                            => q{},
-		itdLPxx_transpCompany                              => 'vrr',
-		itdLPxx_view                                       => q{},
-		itdTimeHour                                        => $now[2],
-		itdTimeMinute                                      => $now[1],
-		itdTripDateTimeDepArr                              => 'dep',
-		language                                           => 'de',
-		lineRestriction                                    => 403,
-		maxChanges                                         => 9,
-		nameInfo_destination                               => 'invalid',
-		nameInfo_origin                                    => 'invalid',
-		nameInfo_via                                       => 'invalid',
-		nameState_destination                              => 'empty',
-		nameState_origin                                   => 'empty',
-		nameState_via                                      => 'empty',
-		name_destination                                   => q{},
-		name_origin                                        => q{},
-		name_via                                           => q{},
-		outputFormat                                       => 'XML',
-		placeInfo_destination                              => 'invalid',
-		placeInfo_origin                                   => 'invalid',
-		placeInfo_via                                      => 'invalid',
-		placeState_destination                             => 'empty',
-		placeState_origin                                  => 'empty',
-		placeState_via                                     => 'empty',
-		place_destination                                  => q{},
-		place_origin                                       => q{},
-		place_via                                          => q{},
-		ptOptionsActive                                    => 1,
-		requestID                                          => 0,
-		routeType                                          => 'LEASTTIME',
-		sessionID                                          => 0,
-		text                                               => 1993,
-		trITArrMOT                                         => 100,
-		trITArrMOTvalue100                                 => 8,
-		trITArrMOTvalue101                                 => 10,
-		trITArrMOTvalue104                                 => 10,
-		trITArrMOTvalue105                                 => 10,
-		trITDepMOT                                         => 100,
-		trITDepMOTvalue100                                 => 8,
-		trITDepMOTvalue101                                 => 10,
-		trITDepMOTvalue104                                 => 10,
-		trITDepMOTvalue105                                 => 10,
-		typeInfo_destination                               => 'invalid',
-		typeInfo_origin                                    => 'invalid',
-		typeInfo_via                                       => 'invalid',
-		type_destination                                   => 'stop',
-		type_origin                                        => 'stop',
-		type_via                                           => 'stop',
-		useRealtime                                        => 1
-	};
-
-	$self->place( 'origin',      @{ $conf->{origin} } );
-	$self->place( 'destination', @{ $conf->{destination} } );
-
-	if ( $conf->{via} ) {
-		$self->place( 'via', @{ $conf->{via} } );
-	}
-	if ( $conf->{arrival_time} || $conf->{departure_time} ) {
-		$self->set_time( %{$conf} );
-	}
-	if ( $conf->{date} ) {
-		$self->date( $conf->{date} );
-	}
-	if ( $conf->{exclude} ) {
-		$self->exclude( @{ $conf->{exclude} } );
-	}
-	if ( $conf->{max_interchanges} ) {
-		$self->max_interchanges( $conf->{max_interchanges} );
-	}
-	if ( $conf->{select_interchange_by} ) {
-		$self->select_interchange_by( $conf->{select_interchange_by} );
-	}
-	if ( $conf->{use_near_stops} ) {
-		$self->use_near_stops(1);
-	}
-	if ( $conf->{train_type} ) {
-		$self->train_type( $conf->{train_type} );
-	}
-	if ( $conf->{walk_speed} ) {
-		$self->walk_speed( $conf->{walk_speed} );
-	}
-	if ( $conf->{with_bike} ) {
-		$self->with_bike(1);
-	}
-
-	return;
-}
+use parent 'Travel::Routing::DE::EFA';
 
 sub new {
-	my ( $obj, %conf ) = @_;
-
-	my $ref = {};
-
-	$ref->{config} = \%conf;
-
-	bless( $ref, $obj );
-
-	$ref->create_post();
-
-	if ( not( defined $conf{submit} and $conf{submit} == 0 ) ) {
-		$ref->submit( %{ $conf{lwp_options} } );
-	}
-
-	return $ref;
-}
-
-sub new_from_xml {
 	my ( $class, %opt ) = @_;
 
-	my $self = { xml_reply => $opt{xml} };
-
-	bless( $self, $class );
-
-	$self->parse();
-
-	return $self;
-}
-
-sub submit {
-	my ( $self, %conf ) = @_;
-
-	$self->{ua} = LWP::UserAgent->new(%conf);
-	$self->{ua}->env_proxy;
-
-	my $response = $self->{ua}
-	  ->post( 'http://efa.vrr.de/vrr/XSLT_TRIP_REQUEST2', $self->{post} );
-
-	if ( $response->is_error ) {
-		Travel::Routing::DE::VRR::Exception::Net->throw(
-			http_response => $response, );
-	}
-
-	$self->{xml_reply} = $response->decoded_content;
-
-	$self->parse();
-
-	return;
-}
-
-sub itddate_str {
-	my ( $self, $node ) = @_;
-
-	return sprintf( '%02d.%02d.%04d',
-		$node->getAttribute('day'),
-		$node->getAttribute('month'),
-		$node->getAttribute('year') );
-}
-
-sub itdtime_str {
-	my ( $self, $node ) = @_;
+	$opt{efa_url} = 'http://efa.vrr.de/vrr/XSLT_TRIP_REQUEST2';
 
-	return sprintf( '%02d:%02d',
-		$node->getAttribute('hour'),
-		$node->getAttribute('minute') );
-}
-
-sub parse_part {
-	my ( $self, $route ) = @_;
-
-	my $xp_route = XML::LibXML::XPathExpression->new(
-		'./itdPartialRouteList/itdPartialRoute');
-	my $xp_dep
-	  = XML::LibXML::XPathExpression->new('./itdPoint[@usage="departure"]');
-	my $xp_arr
-	  = XML::LibXML::XPathExpression->new('./itdPoint[@usage="arrival"]');
-	my $xp_date = XML::LibXML::XPathExpression->new('./itdDateTime/itdDate');
-	my $xp_time = XML::LibXML::XPathExpression->new('./itdDateTime/itdTime');
-	my $xp_via  = XML::LibXML::XPathExpression->new('./itdStopSeq/itdPoint');
-
-	my $xp_sdate
-	  = XML::LibXML::XPathExpression->new('./itdDateTimeTarget/itdDate');
-	my $xp_stime
-	  = XML::LibXML::XPathExpression->new('./itdDateTimeTarget/itdTime');
-	my $xp_mot   = XML::LibXML::XPathExpression->new('./itdMeansOfTransport');
-	my $xp_delay = XML::LibXML::XPathExpression->new('./itdRBLControlled');
-	my $xp_info
-	  = XML::LibXML::XPathExpression->new('./itdInfoTextList/infoTextListElem');
-
-	my $xp_fare
-	  = XML::LibXML::XPathExpression->new('./itdFare/itdSingleTicket');
-
-	my @route_parts;
-
-	my $info = {
-		duration     => $route->getAttribute('publicDuration'),
-		vehicle_time => $route->getAttribute('vehicleTime'),
-	};
-
-	my $e_fare = ( $route->findnodes($xp_fare) )[0];
-
-	if ($e_fare) {
-		$info->{ticket_type} = $e_fare->getAttribute('unitsAdult');
-		$info->{fare_adult}  = $e_fare->getAttribute('fareAdult');
-		$info->{fare_child}  = $e_fare->getAttribute('fareChild');
-		$info->{ticket_text} = $e_fare->textContent;
-	}
-
-	for my $e ( $route->findnodes($xp_route) ) {
-
-		my $e_dep    = ( $e->findnodes($xp_dep) )[0];
-		my $e_arr    = ( $e->findnodes($xp_arr) )[0];
-		my $e_ddate  = ( $e_dep->findnodes($xp_date) )[0];
-		my $e_dtime  = ( $e_dep->findnodes($xp_time) )[0];
-		my $e_dsdate = ( $e_dep->findnodes($xp_sdate) )[0];
-		my $e_dstime = ( $e_dep->findnodes($xp_stime) )[0];
-		my $e_adate  = ( $e_arr->findnodes($xp_date) )[0];
-		my $e_atime  = ( $e_arr->findnodes($xp_time) )[0];
-		my $e_asdate = ( $e_arr->findnodes($xp_sdate) )[0];
-		my $e_astime = ( $e_arr->findnodes($xp_stime) )[0];
-		my $e_mot    = ( $e->findnodes($xp_mot) )[0];
-		my $e_delay  = ( $e->findnodes($xp_delay) )[0];
-		my @e_info   = $e->findnodes($xp_info);
-
-		my $delay = $e_delay ? $e_delay->getAttribute('delayMinutes') : 0;
-
-		my $hash = {
-			delay              => $delay,
-			departure_date     => $self->itddate_str($e_ddate),
-			departure_time     => $self->itdtime_str($e_dtime),
-			departure_sdate    => $self->itddate_str($e_dsdate),
-			departure_stime    => $self->itdtime_str($e_dstime),
-			departure_stop     => $e_dep->getAttribute('name'),
-			departure_platform => $e_dep->getAttribute('platformName'),
-			train_line         => $e_mot->getAttribute('name'),
-			train_destination  => $e_mot->getAttribute('destination'),
-			arrival_date       => $self->itddate_str($e_adate),
-			arrival_time       => $self->itdtime_str($e_atime),
-			arrival_sdate      => $self->itddate_str($e_asdate),
-			arrival_stime      => $self->itdtime_str($e_astime),
-			arrival_stop       => $e_arr->getAttribute('name'),
-			arrival_platform   => $e_arr->getAttribute('platformName'),
-		};
-
-		for my $key ( keys %{$hash} ) {
-			$hash->{$key} = decode( 'UTF-8', $hash->{$key} );
-		}
-
-		for my $ve ( $e->findnodes($xp_via) ) {
-			my $e_vdate = ( $ve->findnodes($xp_date) )[-1];
-			my $e_vtime = ( $ve->findnodes($xp_time) )[-1];
-
-			if ( not( $e_vdate and $e_vtime )
-				or ( $e_vdate->getAttribute('weekday') == -1 ) )
-			{
-				next;
-			}
-
-			my $name = decode( 'UTF-8', $ve->getAttribute('name') );
-			my $platform = $ve->getAttribute('platformName');
-
-			if ( $name ~~ [ $hash->{departure_stop}, $hash->{arrival_stop} ] ) {
-				next;
-			}
-
-			push(
-				@{ $hash->{via} },
-				[
-					$self->itddate_str($e_vdate),
-					$self->itdtime_str($e_vtime),
-					$name,
-					$platform
-				]
-			);
-		}
-
-		$hash->{extra} = [ map { decode( 'UTF-8', $_->textContent ) } @e_info ];
-
-		push( @route_parts, $hash );
-	}
-
-	push(
-		@{ $self->{routes} },
-		Travel::Routing::DE::VRR::Route->new( $info, @route_parts )
-	);
-
-	return;
-}
-
-sub parse {
-	my ($self) = @_;
-
-	my $tree = $self->{tree}
-	  = XML::LibXML->load_xml( string => $self->{xml_reply}, );
-
-	my $xp_element = XML::LibXML::XPathExpression->new(
-		'//itdItinerary/itdRouteList/itdRoute');
-	my $xp_odv = XML::LibXML::XPathExpression->new('//itdOdv');
-
-	for my $odv ( $tree->findnodes($xp_odv) ) {
-		$self->check_ambiguous($odv);
-	}
-
-	for my $part ( $tree->findnodes($xp_element) ) {
-		$self->parse_part($part);
-	}
-
-	if ( @{ $self->{routes} } == 0 ) {
-		Travel::Routing::DE::VRR::Exception::NoData->throw();
-	}
-
-	return 1;
-}
-
-sub check_ambiguous {
-	my ( $self, $tree ) = @_;
-
-	my $xp_place = XML::LibXML::XPathExpression->new('./itdOdvPlace');
-	my $xp_name  = XML::LibXML::XPathExpression->new('./itdOdvName');
-
-	my $xp_place_elem = XML::LibXML::XPathExpression->new('./odvPlaceElem');
-	my $xp_name_elem  = XML::LibXML::XPathExpression->new('./odvNameElem');
-
-	my $e_place = ( $tree->findnodes($xp_place) )[0];
-	my $e_name  = ( $tree->findnodes($xp_name) )[0];
-
-	if ( not( $e_place and $e_name ) ) {
-		cluck('skipping ambiguity check - itdOdvPlace/itdOdvName missing');
-		return;
-	}
-
-	my $s_place = $e_place->getAttribute('state');
-	my $s_name  = $e_name->getAttribute('state');
-
-	if ( $s_place eq 'list' ) {
-		Travel::Routing::DE::VRR::Exception::Ambiguous->throw(
-			post_key      => 'place',
-			possibilities => join( q{ | },
-				map { decode( 'UTF-8', $_->textContent ) }
-				  @{ $e_place->findnodes($xp_place_elem) } )
-		);
-	}
-	if ( $s_name eq 'list' ) {
-		Travel::Routing::DE::VRR::Exception::Ambiguous->throw(
-			post_key      => 'name',
-			possibilities => join( q{ | },
-				map { decode( 'UTF-8', $_->textContent ) }
-				  @{ $e_name->findnodes($xp_name_elem) } )
-		);
-	}
-
-	if ( $s_place eq 'notidentified' ) {
-		Travel::Routing::DE::VRR::Exception::Setup->throw(
-			option => 'place',
-			error  => 'unknown place (typo?)'
-		);
-	}
-	if ( $s_name eq 'notidentified' ) {
-		Travel::Routing::DE::VRR::Exception::Setup->throw(
-			option => 'name',
-			error  => 'unknown name (typo?)'
-		);
-	}
-
-	# 'identified' and 'empty' are ok
-
-	return;
-}
-
-sub routes {
-	my ($self) = @_;
-
-	return @{ $self->{routes} };
+	return $class->SUPER::new(%opt);
 }
 
 1;
 
+
 __END__
 
 =head1 NAME
@@ -689,7 +50,7 @@ Travel::Routing::DE::VRR - unofficial interface to the efa.vrr.de German itinera
 
 =head1 VERSION
 
-version 2.04
+version 2.06
 
 =head1 DESCRIPTION
 
@@ -698,8 +59,6 @@ You pass it the start/stop of your journey, maybe a time and a date and more
 details, and it returns the up-to-date scheduled connections between those two
 stops.
 
-It uses B<LWP::UserAgent> and B<XML::LibXML> for this.
-
 =head1 METHODS
 
 =over
@@ -707,133 +66,23 @@ It uses B<LWP::UserAgent> and B<XML::LibXML> for this.
 =item $efa = Travel::Routing::DE::VRR->new(I<%opts>)
 
 Returns a new Travel::Routing::DE::VRR object and sets up its POST data via
-%opts.
-
-Valid hash keys and their values are:
-
-=over
-
-=item B<origin> => B<[> I<city>B<,> I<stop> [ B<,> I<type> ] B<]>
-
-Mandatory.  Sets the start of the journey.
-I<type> is optional and may be one of B<stop> (default), B<address> (street
-and house number) or B<poi> ("point of interest").
-
-=item B<destination> => B<[> I<city>B<,> I<stop> [ B<,> I<type> ] B<]>
-
-Mandatory.  Sets the end of the journey, see B<origin>.
+I<%opts>.
 
-=item B<via> => B<[> I<city>B<,> I<stop> [ B<,> I<type> ] B<]>
-
-Optional.  Specifies an intermediate stop which the resulting itinerary must
-contain.  See B<origin> for arguments.
-
-=item B<arrival_time> => I<HH:MM>
-
-Journey end time
-
-=item B<departure_time> => I<HH:MM>
-
-Journey start time.  Default: now
-
-=item B<date> => I<DD.MM.>[I<YYYY>]
-
-Journey date.  Default: tdoay
-
-=item B<exclude> => \@exclude
-
-Do not use certain transport types for itinerary.  Accepted arguments:
-zug, s-bahn, u-bahn, stadtbahn, tram, stadtbus, regionalbus, schnellbus,
-seilbahn, schiff, ast, sonstige
-
-=item B<max_interchanges> => I<num>
-
-Set maximum number of interchanges
-
-=item B<select_interchange_by> => B<speed>|B<waittime>|B<distance>
-
-Prefer either fast connections (default), connections with low wait time or
-connections with little distance to walk
-
-=item B<use_near_stops> => B<0>|B<1>
-
-If true: Try using near stops instead of the specified origin/destination ones
-
-=item B<train_type> => B<local>|B<ic>|B<ice>
-
-Include only local trains into itinarery (default), all but ICEs, or all.
-
-The latter two are usually way more expensive for short routes.
-
-=item B<walk_speed> => B<slow>|B<fast>|B<normal>
-
-Set walk speed.  Default: B<normal>
-
-=item B<with_bike> => B<0>|B<1>
-
-If true: Prefer connections allowing passengers with bikes
-
-=item B<lwp_options> => I<\%hashref>
-
-Options to pass to C<< LWP::UserAgent->new >>.
-
-=item B<submit> => B<0>|B<1>
-
-By default, B<new> will create a POST request and submit it to
-L<http://efa.vrr.de>. If you do not want it to be submitted yet, set this to
-B<0>.
+Calls Travel::Routing::DE::EFA->new with the appropriate B<efa_url>, all
+I<%opts> are passed on. See Travel::Routing::DE::EFA(3pm) for valid
+parameters and methods
 
 =back
 
-=item $efa->submit(I<%opts>)
-
-Submit the query to L<http://efa.vrr.de>.
-I<%opts> is passed on to C<< LWP::UserAgent->new >>.
-
-=item $efa->routes()
-
-Returns a list of Travel::Routing::DE::VRR::Route(3pm) elements. Each one contains
-one method of getting from start to stop.
-
-=back
-
-=head2 ACCESSORS
-
-The following methods act like the arguments to B<new>. See there.
-
-=over
-
-=item $efa->departure_time(I<$time>)
-
-=item $efa->arrival_time(I<$time>)
-
-=item $efa->date(I<$date>)
-
-=item $efa->exclude(I<@exclude>)
-
-=item $efa->max_interchanges(I<$num>)
-
-=item $efa->select_interchange_by(I<$selection>)
-
-=item $efa->train_type(I<$type>)
-
-=item $efa->use_near_stops(I<$bool>)
-
-=item $efa->walk_speed(I<$speed>)
-
-=item $efa->with_bike(I<$bool>)
-
-=back
-
-=head1 DIAGNOSTICS
-
 When encountering an error, Travel::Routing::DE::VRR throws a
-Travel::Routing::DE::VRR::Exception(3pm) object.
+Travel::Routing::DE::EFA::Exception(3pm) object.
 
 =head1 DEPENDENCIES
 
 =over
 
+=item * Travel::Routing::DE::EFA(3pm)
+
 =item * LWP::UserAgent(3pm)
 
 =item * XML::LibXML(3pm)
@@ -848,11 +97,7 @@ None known.
 
 =over
 
-=item * Travel::Routing::DE::VRR::Exception(3pm)
-
-=item * Travel::Routing::DE::VRR::Route(3pm)
-
-=item * L<WWW::EFA> is another implementation, using L<Moose>.
+=item * Travel::Routing::DE::EFA(3pm)
 
 =back
 
diff --git a/t/20-vrr.t b/t/20-vrr.t
index edd7f0b..e425820 100644
--- a/t/20-vrr.t
+++ b/t/20-vrr.t
@@ -13,8 +13,11 @@ require_ok('Travel::Routing::DE::VRR');
 
 sub efa_conf {
 	my $ret = {
+		efa_url     => 'http://efa.vrr.de/vrr/XSLT_TRIP_REQUEST2',
 		origin      => ['Essen', 'HBf'],
 		destination => ['Koeln', 'HBf'],
+		rm_base     => 'http://efa.vrr.de/vrr/',
+		sm_base     => 'http://efa.vrr.de/download/envmaps/',
 		lwp_options => {},
 		submit      => 0,
 	};
@@ -178,40 +181,40 @@ is_efa_post(
 
 is_efa_err(
 	'departure_time', '37:00',
-	'Travel::Routing::DE::VRR::Exception::Setup',
+	'Travel::Routing::DE::EFA::Exception::Setup',
 );
 
 is_efa_err(
 	'departure_time', '07',
-	'Travel::Routing::DE::VRR::Exception::Setup',
+	'Travel::Routing::DE::EFA::Exception::Setup',
 );
 
 is_efa_err(
 	'train_type', 'invalid',
-	'Travel::Routing::DE::VRR::Exception::Setup',
+	'Travel::Routing::DE::EFA::Exception::Setup',
 );
 
 is_efa_err(
 	'walk_speed', 'invalid',
-	'Travel::Routing::DE::VRR::Exception::Setup',
+	'Travel::Routing::DE::EFA::Exception::Setup',
 );
 
 is_efa_err(
 	'select_interchange_by', 'invalid',
-	'Travel::Routing::DE::VRR::Exception::Setup',
+	'Travel::Routing::DE::EFA::Exception::Setup',
 );
 
 is_efa_err(
 	'exclude', [qw[sonstige invalid]],
-	'Travel::Routing::DE::VRR::Exception::Setup',
+	'Travel::Routing::DE::EFA::Exception::Setup',
 );
 
 is_efa_err(
 	'date', '42.5.2003',
-	'Travel::Routing::DE::VRR::Exception::Setup',
+	'Travel::Routing::DE::EFA::Exception::Setup',
 );
 
 is_efa_err(
 	'date', '7.',
-	'Travel::Routing::DE::VRR::Exception::Setup',
+	'Travel::Routing::DE::EFA::Exception::Setup',
 );
diff --git a/t/21-vrr.t b/t/21-vrr.t
index 139790e..80dd221 100644
--- a/t/21-vrr.t
+++ b/t/21-vrr.t
@@ -7,27 +7,27 @@ use utf8;
 
 use Encode qw(decode);
 use File::Slurp qw(slurp);
-use Test::More tests => 74;
+use Test::More tests => 82;
 
 BEGIN {
-	use_ok('Travel::Routing::DE::VRR');
+	use_ok('Travel::Routing::DE::EFA');
 }
-require_ok('Travel::Routing::DE::VRR');
+require_ok('Travel::Routing::DE::EFA');
 
 my $xml = slurp('t/in/e_alf_d_hbf.xml');
 
-my $routing = Travel::Routing::DE::VRR->new_from_xml( xml => $xml );
+my $routing = Travel::Routing::DE::EFA->new_from_xml( efa_url => 'http://efa.vrr.de/vrr/XSLT_TRIP_REQUEST2', xml => $xml );
 
-isa_ok( $routing, 'Travel::Routing::DE::VRR' );
+isa_ok( $routing, 'Travel::Routing::DE::EFA' );
 can_ok( $routing, 'routes' );
 
 for my $r ( $routing->routes ) {
-	isa_ok( $r, 'Travel::Routing::DE::VRR::Route' );
+	isa_ok( $r, 'Travel::Routing::DE::EFA::Route' );
 	can_ok( $r,
 		qw(duration parts ticket_type fare_adult fare_child vehicle_time) );
 
 	for my $c ( $r->parts ) {
-		isa_ok( $c, 'Travel::Routing::DE::VRR::Route::Part' );
+		isa_ok( $c, 'Travel::Routing::DE::EFA::Route::Part' );
 		can_ok(
 			$c, qw(
 			  arrival_stop arrival_platform arrival_stop_and_platform
@@ -52,6 +52,10 @@ my ( $c0, $c1 ) = $r0->parts;
 
 is( $c0->delay, 0, 'r0,0: delay' );
 is_deeply( [ $c0->extra ], [], 'r0,0: extra' );
+is_deeply( [ $c0->departure_routemaps ], ['http://efa.vrr.de/vrr/FILELOAD?Filename=dwa_4ED23486C.pdf'], 'r0,0: departure_routemaps');
+is_deeply( [ $c0->departure_stationmaps ], [], 'r0,0: departure_stationmaps');
+is_deeply( [ $c0->arrival_routemaps ], ['http://efa.vrr.de/vrr/FILELOAD?Filename=dwa_4ED23486D.pdf'], 'r0,0: arrival_routemaps');
+is_deeply( [ $c0->arrival_stationmaps ], ['http://efa.vrr.de/download/envmaps/vrr/09289_e_hbf_1.htm'], 'r0,0: arrival_stationmaps');
 is( $c0->train_line, decode( 'UTF-8', 'Straßenbahn 107' ), 'r0,0: line' );
 is( $c0->train_destination,  'Essen Hanielstr. Schleife', 'r0,0: dest' );
 is( $c0->departure_stop,     'Essen Alfredusbad',         'r0,0: dstop' );
@@ -84,6 +88,10 @@ is_deeply(
 	[ decode( 'UTF-8', 'Fahrradmitnahme begrenzt möglich' ) ],
 	'r0,1: extra'
 );
+is_deeply( [ $c1->departure_routemaps ], ['http://efa.vrr.de/vrr/FILELOAD?Filename=dwa_4ED23486D.pdf'], 'r0,0: departure_routemaps');
+is_deeply( [ $c1->departure_stationmaps ], ['http://efa.vrr.de/download/envmaps/vrr/09289_e_hbf_1.htm'], 'r0,0: departure_stationmaps');
+is_deeply( [ $c1->arrival_routemaps ], ['http://efa.vrr.de/vrr/FILELOAD?Filename=dwa_4ED23486E.pdf'], 'r0,0: arrival_routemaps');
+is_deeply( [ $c1->arrival_stationmaps ], ['http://efa.vrr.de/download/envmaps/vrr/18235_d_hbf_1.htm'], 'r0,0: arrival_stationmaps');
 is( $c1->train_line,         'R-Bahn RE1',         'r0,1: line' );
 is( $c1->train_destination,  'Aachen, Hbf',        'r0,1: dest' );
 is( $c1->departure_stop,     'Essen Hauptbahnhof', 'r0,1: dstop' );
diff --git a/t/in/e_hbf_d_hbf.json b/t/in/e_hbf_d_hbf.json
new file mode 100644
index 0000000..6e49d9e
--- /dev/null
+++ b/t/in/e_hbf_d_hbf.json
@@ -0,0 +1,1648 @@
+{
+   "parameters":[
+      {
+         "name":"mdvMap_destination",
+         "value":"::"
+      },
+      {
+         "name":"id_destination",
+         "value":":destination"
+      },
+      {
+         "name":"ShowFare",
+         "value":" "
+      },
+      {
+         "name":"mdvMap2_destination",
+         "value":""
+      },
+      {
+         "name":"view",
+         "value":""
+      },
+      {
+         "name":"mapState_origin",
+         "value":""
+      },
+      {
+         "name":"mapState_destination",
+         "value":""
+      },
+      {
+         "name":"mdvMap2_origin",
+         "value":""
+      },
+      {
+         "name":"enableMobilityRestrictionOptionsWithButton",
+         "value":""
+      },
+      {
+         "name":"id_via",
+         "value":":via"
+      },
+      {
+         "name":"mdvMap_origin",
+         "value":"::"
+      },
+      {
+         "name":"id_origin",
+         "value":":origin"
+      },
+      {
+         "name":"command",
+         "value":""
+      },
+      {
+         "name":"mdvMap2_via",
+         "value":""
+      },
+      {
+         "name":"mdvMap_via",
+         "value":"::"
+      },
+      {
+         "name":"mapState_via",
+         "value":""
+      },
+      {
+         "name":"transpCompany",
+         "value":"vrr"
+      },
+      {
+         "name":"priceCalculator",
+         "value":""
+      },
+      {
+         "name":"requestID",
+         "value":"1"
+      },
+      {
+         "name":"sessionID",
+         "value":"efa1.vrr.de_46961885"
+      }
+   ],
+   "trips":[
+      {
+         "trip":{
+            "duration":"00:49",
+            "interchange":"0",
+            "desc":"4",
+            "legs":[
+               {
+                  "points":[
+                     {
+                        "name":"Essen Hauptbahnhof",
+                        "place":"Essen",
+                        "nameWithPlace":"Essen Hauptbahnhof",
+                        "usage":"departure",
+                        "omc":"5113000",
+                        "placeID":"18",
+                        "desc":"",
+                        "dateTime":{
+                           "date":"27.02.2014",
+                           "time":"15:55"
+                        },
+                        "stamp":{
+                           "date":"20140227",
+                           "time":"1555"
+                        },
+                        "links":[
+                           {
+                              "name":"RM",
+                              "type":"RM",
+                              "href":"FILELOAD?Filename=dwa_530F53EF0.pdf"
+                           },
+                           {
+                              "name":"SM",
+                              "type":"SM",
+                              "href":"vrr/09289_e_hbf_1.htm"
+                           }
+                        ],
+                        "ref":{
+                           "id":"20009289",
+                           "area":"98",
+                           "platform":"",
+                           "NaPTANID":"",
+                           "attrs":[
+
+                           ],
+                           "coords":"3362053,456277"
+                        }
+                     },
+                     {
+                        "name":"Düsseldorf Hbf",
+                        "place":"Düsseldorf",
+                        "nameWithPlace":"Düsseldorf Hbf",
+                        "usage":"arrival",
+                        "omc":"5111000",
+                        "placeID":"6",
+                        "desc":"",
+                        "dateTime":{
+                           "date":"27.02.2014",
+                           "time":"16:44"
+                        },
+                        "stamp":{
+                           "date":"20140227",
+                           "time":"1644"
+                        },
+                        "links":[
+                           {
+                              "name":"RM",
+                              "type":"RM",
+                              "href":"FILELOAD?Filename=dwa_530F53EF1.pdf"
+                           },
+                           {
+                              "name":"SM",
+                              "type":"SM",
+                              "href":"vrr/18235_d_hbf_1.htm"
+                           }
+                        ],
+                        "ref":{
+                           "id":"20018235",
+                           "area":"98",
+                           "platform":"",
+                           "NaPTANID":"",
+                           "attrs":[
+
+                           ],
+                           "coords":"3346062,481506"
+                        }
+                     }
+                  ],
+                  "mode":{
+                     "name":"S-Bahn S1",
+                     "number":"S1",
+                     "type":"2",
+                     "code":"1",
+                     "destination":"Solingen Hbf",
+                     "destID":"20013800",
+                     "desc":"",
+                     "diva":{
+                        "branch":"92",
+                        "line":"E01",
+                        "supplement":" ",
+                        "dir":"R",
+                        "project":"j14",
+                        "network":"ddb",
+                        "stateless":"ddb:92E01: :R:j14",
+                        "operator":"DB AG",
+                        "opCode":"00"
+                     }
+                  },
+                  "stopSeq":[
+                     {
+                        "name":"Essen Hauptbahnhof",
+                        "nameWO":"Hauptbahnhof",
+                        "place":"",
+                        "nameWithPlace":"",
+                        "omc":"5113000",
+                        "placeID":"18",
+                        "platformName":"Gleis 7",
+                        "ref":{
+                           "id":"20009289",
+                           "area":"98",
+                           "platform":"",
+                           "NaPTANID":"",
+                           "attrs":[
+
+                           ],
+                           "coords":"3362053,456277",
+                           "depDateTime":"20140227 15:55",
+                           "arrDelay":"-1",
+                           "depDelay":"0"
+                        }
+                     },
+                     {
+                        "name":"Essen West S",
+                        "nameWO":"West S",
+                        "place":"",
+                        "nameWithPlace":"",
+                        "omc":"5113000",
+                        "placeID":"18",
+                        "platformName":"Gleis 4",
+                        "ref":{
+                           "id":"20009643",
+                           "area":"98",
+                           "platform":"",
+                           "NaPTANID":"",
+                           "attrs":[
+
+                           ],
+                           "coords":"3359766,455976",
+                           "arrDateTime":"20140227 15:57",
+                           "depDateTime":"20140227 15:58",
+                           "arrDelay":"0",
+                           "depDelay":"0"
+                        }
+                     },
+                     {
+                        "name":"Essen Frohnhausen S",
+                        "nameWO":"Frohnhausen S",
+                        "place":"",
+                        "nameWithPlace":"",
+                        "omc":"5113000",
+                        "placeID":"18",
+                        "platformName":"Gleis 1",
+                        "ref":{
+                           "id":"20009244",
+                           "area":"98",
+                           "platform":"",
+                           "NaPTANID":"",
+                           "attrs":[
+
+                           ],
+                           "coords":"3358546,455781",
+                           "arrDateTime":"20140227 16:00",
+                           "depDateTime":"20140227 16:00",
+                           "arrDelay":"0",
+                           "depDelay":"0"
+                        }
+                     },
+                     {
+                        "name":"Mülheim Hauptbahnhof",
+                        "nameWO":"Hauptbahnhof",
+                        "place":"",
+                        "nameWithPlace":"",
+                        "omc":"5117000",
+                        "placeID":"17",
+                        "platformName":"Gleis 5",
+                        "ref":{
+                           "id":"20015225",
+                           "area":"98",
+                           "platform":"",
+                           "NaPTANID":"",
+                           "attrs":[
+
+                           ],
+                           "coords":"3353190,458255",
+                           "arrDateTime":"20140227 16:05",
+                           "depDateTime":"20140227 16:05",
+                           "arrDelay":"0",
+                           "depDelay":"0"
+                        }
+                     },
+                     {
+                        "name":"Mülheim West Bahnhof",
+                        "nameWO":"West Bahnhof",
+                        "place":"",
+                        "nameWithPlace":"",
+                        "omc":"5117000",
+                        "placeID":"17",
+                        "platformName":"",
+                        "ref":{
+                           "id":"20015227",
+                           "area":"98",
+                           "platform":"",
+                           "NaPTANID":"",
+                           "attrs":[
+
+                           ],
+                           "coords":"3352083,457301",
+                           "arrDelay":"-1",
+                           "depDelay":"-1"
+                        }
+                     },
+                     {
+                        "name":"Mülheim Styrum S",
+                        "nameWO":"Styrum S",
+                        "place":"",
+                        "nameWithPlace":"",
+                        "omc":"5117000",
+                        "placeID":"17",
+                        "platformName":"Gleis 5",
+                        "ref":{
+                           "id":"20015012",
+                           "area":"98",
+                           "platform":"",
+                           "NaPTANID":"",
+                           "attrs":[
+
+                           ],
+                           "coords":"3350829,456171",
+                           "arrDateTime":"20140227 16:08",
+                           "depDateTime":"20140227 16:08",
+                           "arrDelay":"0",
+                           "depDelay":"0"
+                        }
+                     },
+                     {
+                        "name":"Duisburg Hbf",
+                        "nameWO":"Duisburg Hbf",
+                        "place":"",
+                        "nameWithPlace":"",
+                        "omc":"5112000",
+                        "placeID":"20",
+                        "platformName":"Gleis 5",
+                        "ref":{
+                           "id":"20016032",
+                           "area":"98",
+                           "platform":"",
+                           "NaPTANID":"",
+                           "attrs":[
+
+                           ],
+                           "coords":"3345397,458061",
+                           "arrDateTime":"20140227 16:13",
+                           "depDateTime":"20140227 16:15",
+                           "arrDelay":"0",
+                           "depDelay":"0"
+                        }
+                     },
+                     {
+                        "name":"Duisburg Schlenk Bf",
+                        "nameWO":"Schlenk Bf",
+                        "place":"",
+                        "nameWithPlace":"",
+                        "omc":"5112000",
+                        "placeID":"20",
+                        "platformName":"Gleis 1",
+                        "ref":{
+                           "id":"20016341",
+                           "area":"98",
+                           "platform":"",
+                           "NaPTANID":"",
+                           "attrs":[
+
+                           ],
+                           "coords":"3345103,461162",
+                           "arrDateTime":"20140227 16:17",
+                           "depDateTime":"20140227 16:18",
+                           "arrDelay":"0",
+                           "depDelay":"0"
+                        }
+                     },
+                     {
+                        "name":"Duisburg Buchholz Bf",
+                        "nameWO":"Buchholz Bf",
+                        "place":"",
+                        "nameWithPlace":"",
+                        "omc":"5112000",
+                        "placeID":"20",
+                        "platformName":"Gleis 1",
+                        "ref":{
+                           "id":"20016332",
+                           "area":"98",
+                           "platform":"",
+                           "NaPTANID":"",
+                           "attrs":[
+
+                           ],
+                           "coords":"3345193,463355",
+                           "arrDateTime":"20140227 16:20",
+                           "depDateTime":"20140227 16:20",
+                           "arrDelay":"0",
+                           "depDelay":"0"
+                        }
+                     },
+                     {
+                        "name":"Duisburg Großenbaum S",
+                        "nameWO":"Großenbaum S",
+                        "place":"",
+                        "nameWithPlace":"",
+                        "omc":"5112000",
+                        "placeID":"20",
+                        "platformName":"Gleis 5",
+                        "ref":{
+                           "id":"20016129",
+                           "area":"98",
+                           "platform":"",
+                           "NaPTANID":"",
+                           "attrs":[
+
+                           ],
+                           "coords":"3345312,465425",
+                           "arrDateTime":"20140227 16:22",
+                           "depDateTime":"20140227 16:23",
+                           "arrDelay":"0",
+                           "depDelay":"0"
+                        }
+                     },
+                     {
+                        "name":"Duisburg Rahm BF",
+                        "nameWO":"Rahm BF",
+                        "place":"",
+                        "nameWithPlace":"",
+                        "omc":"5112000",
+                        "placeID":"20",
+                        "platformName":"Gleis 1",
+                        "ref":{
+                           "id":"20016416",
+                           "area":"98",
+                           "platform":"",
+                           "NaPTANID":"",
+                           "attrs":[
+
+                           ],
+                           "coords":"3345401,467427",
+                           "arrDateTime":"20140227 16:25",
+                           "depDateTime":"20140227 16:25",
+                           "arrDelay":"0",
+                           "depDelay":"0"
+                        }
+                     },
+                     {
+                        "name":"D-Angermund S",
+                        "nameWO":"Angermund S",
+                        "place":"",
+                        "nameWithPlace":"",
+                        "omc":"5111000",
+                        "placeID":"6",
+                        "platformName":"Gleis 1",
+                        "ref":{
+                           "id":"20018372",
+                           "area":"98",
+                           "platform":"",
+                           "NaPTANID":"",
+                           "attrs":[
+
+                           ],
+                           "coords":"3345496,469339",
+                           "arrDateTime":"20140227 16:27",
+                           "depDateTime":"20140227 16:28",
+                           "arrDelay":"0",
+                           "depDelay":"0"
+                        }
+                     },
+                     {
+                        "name":"Düsseldorf Flughafen Bahnhof",
+                        "nameWO":"Flughafen Bahnhof",
+                        "place":"",
+                        "nameWithPlace":"",
+                        "omc":"5111000",
+                        "placeID":"6",
+                        "platformName":"Gleis 6",
+                        "ref":{
+                           "id":"20018488",
+                           "area":"98",
+                           "platform":"",
+                           "NaPTANID":"",
+                           "attrs":[
+
+                           ],
+                           "coords":"3345657,473578",
+                           "arrDateTime":"20140227 16:31",
+                           "depDateTime":"20140227 16:32",
+                           "arrDelay":"0",
+                           "depDelay":"0"
+                        }
+                     },
+                     {
+                        "name":"D-Unterrath S",
+                        "nameWO":"Unterrath S",
+                        "place":"",
+                        "nameWithPlace":"",
+                        "omc":"5111000",
+                        "placeID":"6",
+                        "platformName":"Gleis 1",
+                        "ref":{
+                           "id":"20018206",
+                           "area":"98",
+                           "platform":"",
+                           "NaPTANID":"",
+                           "attrs":[
+
+                           ],
+                           "coords":"3345800,475246",
+                           "arrDateTime":"20140227 16:34",
+                           "depDateTime":"20140227 16:34",
+                           "arrDelay":"0",
+                           "depDelay":"0"
+                        }
+                     },
+                     {
+                        "name":"D-Derendorf S",
+                        "nameWO":"Derendorf S",
+                        "place":"",
+                        "nameWithPlace":"",
+                        "omc":"5111000",
+                        "placeID":"6",
+                        "platformName":"Gleis 1",
+                        "ref":{
+                           "id":"20018285",
+                           "area":"98",
+                           "platform":"",
+                           "NaPTANID":"",
+                           "attrs":[
+
+                           ],
+                           "coords":"3346085,478491",
+                           "arrDateTime":"20140227 16:37",
+                           "depDateTime":"20140227 16:37",
+                           "arrDelay":"0",
+                           "depDelay":"0"
+                        }
+                     },
+                     {
+                        "name":"D-Zoo S",
+                        "nameWO":"Zoo S",
+                        "place":"",
+                        "nameWithPlace":"",
+                        "omc":"5111000",
+                        "placeID":"6",
+                        "platformName":"Gleis 1",
+                        "ref":{
+                           "id":"20018012",
+                           "area":"98",
+                           "platform":"",
+                           "NaPTANID":"",
+                           "attrs":[
+
+                           ],
+                           "coords":"3346214,479740",
+                           "arrDateTime":"20140227 16:39",
+                           "depDateTime":"20140227 16:39",
+                           "arrDelay":"0",
+                           "depDelay":"0"
+                        }
+                     },
+                     {
+                        "name":"D-Wehrhahn S",
+                        "nameWO":"Wehrhahn S",
+                        "place":"",
+                        "nameWithPlace":"",
+                        "omc":"5111000",
+                        "placeID":"6",
+                        "platformName":"Gleis 1",
+                        "ref":{
+                           "id":"20018019",
+                           "area":"98",
+                           "platform":"",
+                           "NaPTANID":"",
+                           "attrs":[
+
+                           ],
+                           "coords":"3346220,480530",
+                           "arrDateTime":"20140227 16:41",
+                           "depDateTime":"20140227 16:41",
+                           "arrDelay":"0",
+                           "depDelay":"0"
+                        }
+                     },
+                     {
+                        "name":"Düsseldorf Hbf",
+                        "nameWO":"Hbf",
+                        "place":"",
+                        "nameWithPlace":"",
+                        "omc":"5111000",
+                        "placeID":"6",
+                        "platformName":"Gleis 11",
+                        "ref":{
+                           "id":"20018235",
+                           "area":"98",
+                           "platform":"",
+                           "NaPTANID":"",
+                           "attrs":[
+
+                           ],
+                           "coords":"3346062,481506",
+                           "arrDateTime":"20140227 16:44",
+                           "arrDelay":"0",
+                           "depDelay":"-1"
+                        }
+                     }
+                  ],
+                  "frequency":{
+                     "hasFrequency":"0",
+                     "tripIndex":"0",
+                     "minTimeGap":"0",
+                     "maxTimeGap":"0",
+                     "avTimeGap":"0",
+                     "minDuration":"0",
+                     "maxDuration":"0",
+                     "avDuration":"0",
+                     "modes":[
+
+                     ]
+                  },
+                  "path":"3362050,456250 3361304,456344 3361296,456345 3361247,456350 3361198,456354 3361148,456359 3360976,456380 3360888,456369 3360652,456292 3360486,456189 3360243,456056 3360150,456013 3359790,455900 3359790,455900 3359324,455754 3359121,455711 3358874,455708 3358681,455744 3358546,455781 3358546,455781 3358523,455787 3358386,455822 3358221,455864 3357920,455959 3357678,456071 3357623,456114 3357092,456573 3357066,456595 3356738,456833 3356638,456890 3356466,456967 3 [...]
+               }
+            ],
+            "attrs":[
+
+            ]
+         }
+      },
+      {
+         "trip":{
+            "duration":"00:42",
+            "interchange":"0",
+            "desc":"1",
+            "legs":[
+               {
+                  "points":[
+                     {
+                        "name":"Essen Hauptbahnhof",
+                        "place":"Essen",
+                        "nameWithPlace":"Essen Hauptbahnhof",
+                        "usage":"departure",
+                        "omc":"5113000",
+                        "placeID":"18",
+                        "desc":"",
+                        "dateTime":{
+                           "date":"27.02.2014",
+                           "time":"16:08"
+                        },
+                        "stamp":{
+                           "date":"20140227",
+                           "time":"1608"
+                        },
+                        "links":[
+                           {
+                              "name":"RM",
+                              "type":"RM",
+                              "href":"FILELOAD?Filename=dwa_530F53F00.pdf"
+                           },
+                           {
+                              "name":"SM",
+                              "type":"SM",
+                              "href":"vrr/09289_e_hbf_1.htm"
+                           }
+                        ],
+                        "ref":{
+                           "id":"20009289",
+                           "area":"98",
+                           "platform":"",
+                           "NaPTANID":"",
+                           "attrs":[
+
+                           ],
+                           "coords":"3362053,456277"
+                        }
+                     },
+                     {
+                        "name":"Düsseldorf Hbf",
+                        "place":"Düsseldorf",
+                        "nameWithPlace":"Düsseldorf Hbf",
+                        "usage":"arrival",
+                        "omc":"5111000",
+                        "placeID":"6",
+                        "desc":"",
+                        "dateTime":{
+                           "date":"27.02.2014",
+                           "time":"16:50"
+                        },
+                        "stamp":{
+                           "date":"20140227",
+                           "time":"1650"
+                        },
+                        "links":[
+                           {
+                              "name":"RM",
+                              "type":"RM",
+                              "href":"FILELOAD?Filename=dwa_530F53F01.pdf"
+                           },
+                           {
+                              "name":"SM",
+                              "type":"SM",
+                              "href":"vrr/18235_d_hbf_1.htm"
+                           }
+                        ],
+                        "ref":{
+                           "id":"20018235",
+                           "area":"98",
+                           "platform":"",
+                           "NaPTANID":"",
+                           "attrs":[
+
+                           ],
+                           "coords":"3346062,481506"
+                        }
+                     }
+                  ],
+                  "mode":{
+                     "name":"S-Bahn S6",
+                     "number":"S6",
+                     "type":"2",
+                     "code":"1",
+                     "destination":"Nippes, Nippes S-Bahn",
+                     "destID":"22000750",
+                     "desc":"",
+                     "diva":{
+                        "branch":"92",
+                        "line":"E06",
+                        "supplement":" ",
+                        "dir":"H",
+                        "project":"j14",
+                        "network":"ddb",
+                        "stateless":"ddb:92E06: :H:j14",
+                        "operator":"DB AG",
+                        "opCode":"00"
+                     }
+                  },
+                  "stopSeq":[
+                     {
+                        "name":"Essen Hauptbahnhof",
+                        "nameWO":"Hauptbahnhof",
+                        "place":"",
+                        "nameWithPlace":"",
+                        "omc":"5113000",
+                        "placeID":"18",
+                        "platformName":"Gleis 12",
+                        "ref":{
+                           "id":"20009289",
+                           "area":"98",
+                           "platform":"",
+                           "NaPTANID":"",
+                           "attrs":[
+
+                           ],
+                           "coords":"3362053,456277",
+                           "depDateTime":"20140227 16:08",
+                           "arrDelay":"-1",
+                           "depDelay":"0"
+                        }
+                     },
+                     {
+                        "name":"Essen Süd S",
+                        "nameWO":"Süd S",
+                        "place":"",
+                        "nameWithPlace":"",
+                        "omc":"5113000",
+                        "placeID":"18",
+                        "platformName":"Gleis 1",
+                        "ref":{
+                           "id":"20009590",
+                           "area":"98",
+                           "platform":"",
+                           "NaPTANID":"",
+                           "attrs":[
+
+                           ],
+                           "coords":"3362624,457580",
+                           "arrDateTime":"20140227 16:10",
+                           "depDateTime":"20140227 16:11",
+                           "arrDelay":"0",
+                           "depDelay":"0"
+                        }
+                     },
+                     {
+                        "name":"Essen Stadtwald S",
+                        "nameWO":"Stadtwald S",
+                        "place":"",
+                        "nameWithPlace":"",
+                        "omc":"5113000",
+                        "placeID":"18",
+                        "platformName":"Gleis 2",
+                        "ref":{
+                           "id":"20009578",
+                           "area":"98",
+                           "platform":"",
+                           "NaPTANID":"",
+                           "attrs":[
+
+                           ],
+                           "coords":"3362585,459515",
+                           "arrDateTime":"20140227 16:13",
+                           "depDateTime":"20140227 16:13",
+                           "arrDelay":"0",
+                           "depDelay":"0"
+                        }
+                     },
+                     {
+                        "name":"Essen Hügel S",
+                        "nameWO":"Hügel S",
+                        "place":"",
+                        "nameWithPlace":"",
+                        "omc":"5113000",
+                        "placeID":"18",
+                        "platformName":"Gleis 2",
+                        "ref":{
+                           "id":"20009074",
+                           "area":"98",
+                           "platform":"",
+                           "NaPTANID":"",
+                           "attrs":[
+
+                           ],
+                           "coords":"3361530,461457",
+                           "arrDateTime":"20140227 16:16",
+                           "depDateTime":"20140227 16:16",
+                           "arrDelay":"0",
+                           "depDelay":"0"
+                        }
+                     },
+                     {
+                        "name":"Essen Werden S",
+                        "nameWO":"Werden S",
+                        "place":"",
+                        "nameWithPlace":"",
+                        "omc":"5113000",
+                        "placeID":"18",
+                        "platformName":"Gleis 2",
+                        "ref":{
+                           "id":"20009640",
+                           "area":"98",
+                           "platform":"",
+                           "NaPTANID":"",
+                           "attrs":[
+
+                           ],
+                           "coords":"3360684,463409",
+                           "arrDateTime":"20140227 16:19",
+                           "depDateTime":"20140227 16:19",
+                           "arrDelay":"0",
+                           "depDelay":"0"
+                        }
+                     },
+                     {
+                        "name":"Essen Kettwig S",
+                        "nameWO":"Kettwig S",
+                        "place":"",
+                        "nameWithPlace":"",
+                        "omc":"5113000",
+                        "placeID":"18",
+                        "platformName":"Gleis 1",
+                        "ref":{
+                           "id":"20009383",
+                           "area":"98",
+                           "platform":"",
+                           "NaPTANID":"",
+                           "attrs":[
+
+                           ],
+                           "coords":"3357590,465910",
+                           "arrDateTime":"20140227 16:23",
+                           "depDateTime":"20140227 16:23",
+                           "arrDelay":"0",
+                           "depDelay":"0"
+                        }
+                     },
+                     {
+                        "name":"Essen Kettwig Stausee S",
+                        "nameWO":"Kettwig Stausee S",
+                        "place":"",
+                        "nameWithPlace":"",
+                        "omc":"5113000",
+                        "placeID":"18",
+                        "platformName":"",
+                        "ref":{
+                           "id":"20009385",
+                           "area":"98",
+                           "platform":"",
+                           "NaPTANID":"",
+                           "attrs":[
+
+                           ],
+                           "coords":"3356594,466628",
+                           "arrDateTime":"20140227 16:25",
+                           "depDateTime":"20140227 16:26",
+                           "arrDelay":"0",
+                           "depDelay":"0"
+                        }
+                     },
+                     {
+                        "name":"Ratingen Hösel S",
+                        "nameWO":"Hösel S",
+                        "place":"",
+                        "nameWithPlace":"",
+                        "omc":"5158028",
+                        "placeID":"15",
+                        "platformName":"Gleis 2",
+                        "ref":{
+                           "id":"20019528",
+                           "area":"98",
+                           "platform":"",
+                           "NaPTANID":"",
+                           "attrs":[
+
+                           ],
+                           "coords":"3353335,468247",
+                           "arrDateTime":"20140227 16:29",
+                           "depDateTime":"20140227 16:30",
+                           "arrDelay":"0",
+                           "depDelay":"0"
+                        }
+                     },
+                     {
+                        "name":"Ratingen Ost S",
+                        "nameWO":"Ost S",
+                        "place":"",
+                        "nameWithPlace":"",
+                        "omc":"5158028",
+                        "placeID":"15",
+                        "platformName":"Gleis 1",
+                        "ref":{
+                           "id":"20018634",
+                           "area":"98",
+                           "platform":"",
+                           "NaPTANID":"",
+                           "attrs":[
+
+                           ],
+                           "coords":"3351063,473346",
+                           "arrDateTime":"20140227 16:34",
+                           "depDateTime":"20140227 16:34",
+                           "arrDelay":"0",
+                           "depDelay":"0"
+                        }
+                     },
+                     {
+                        "name":"D-Rath S",
+                        "nameWO":"Rath S",
+                        "place":"",
+                        "nameWithPlace":"",
+                        "omc":"5111000",
+                        "placeID":"6",
+                        "platformName":"Gleis 1",
+                        "ref":{
+                           "id":"20018209",
+                           "area":"98",
+                           "platform":"",
+                           "NaPTANID":"",
+                           "attrs":[
+
+                           ],
+                           "coords":"3347993,476752",
+                           "arrDateTime":"20140227 16:38",
+                           "depDateTime":"20140227 16:39",
+                           "arrDelay":"0",
+                           "depDelay":"0"
+                        }
+                     },
+                     {
+                        "name":"D-Rath Mitte S",
+                        "nameWO":"Rath Mitte S",
+                        "place":"",
+                        "nameWithPlace":"",
+                        "omc":"5111000",
+                        "placeID":"6",
+                        "platformName":"Gleis 1",
+                        "ref":{
+                           "id":"20018210",
+                           "area":"98",
+                           "platform":"",
+                           "NaPTANID":"",
+                           "attrs":[
+
+                           ],
+                           "coords":"3347208,477055",
+                           "arrDateTime":"20140227 16:41",
+                           "depDateTime":"20140227 16:41",
+                           "arrDelay":"0",
+                           "depDelay":"0"
+                        }
+                     },
+                     {
+                        "name":"D-Derendorf S",
+                        "nameWO":"Derendorf S",
+                        "place":"",
+                        "nameWithPlace":"",
+                        "omc":"5111000",
+                        "placeID":"6",
+                        "platformName":"Gleis 1",
+                        "ref":{
+                           "id":"20018285",
+                           "area":"98",
+                           "platform":"",
+                           "NaPTANID":"",
+                           "attrs":[
+
+                           ],
+                           "coords":"3346085,478491",
+                           "arrDateTime":"20140227 16:44",
+                           "depDateTime":"20140227 16:44",
+                           "arrDelay":"0",
+                           "depDelay":"0"
+                        }
+                     },
+                     {
+                        "name":"D-Zoo S",
+                        "nameWO":"Zoo S",
+                        "place":"",
+                        "nameWithPlace":"",
+                        "omc":"5111000",
+                        "placeID":"6",
+                        "platformName":"Gleis 1",
+                        "ref":{
+                           "id":"20018012",
+                           "area":"98",
+                           "platform":"",
+                           "NaPTANID":"",
+                           "attrs":[
+
+                           ],
+                           "coords":"3346214,479740",
+                           "arrDateTime":"20140227 16:46",
+                           "depDateTime":"20140227 16:46",
+                           "arrDelay":"0",
+                           "depDelay":"0"
+                        }
+                     },
+                     {
+                        "name":"D-Wehrhahn S",
+                        "nameWO":"Wehrhahn S",
+                        "place":"",
+                        "nameWithPlace":"",
+                        "omc":"5111000",
+                        "placeID":"6",
+                        "platformName":"Gleis 1",
+                        "ref":{
+                           "id":"20018019",
+                           "area":"98",
+                           "platform":"",
+                           "NaPTANID":"",
+                           "attrs":[
+
+                           ],
+                           "coords":"3346220,480530",
+                           "arrDateTime":"20140227 16:48",
+                           "depDateTime":"20140227 16:49",
+                           "arrDelay":"0",
+                           "depDelay":"0"
+                        }
+                     },
+                     {
+                        "name":"Düsseldorf Hbf",
+                        "nameWO":"Hbf",
+                        "place":"",
+                        "nameWithPlace":"",
+                        "omc":"5111000",
+                        "placeID":"6",
+                        "platformName":"Gleis 11",
+                        "ref":{
+                           "id":"20018235",
+                           "area":"98",
+                           "platform":"",
+                           "NaPTANID":"",
+                           "attrs":[
+
+                           ],
+                           "coords":"3346062,481506",
+                           "arrDateTime":"20140227 16:50",
+                           "arrDelay":"0",
+                           "depDelay":"-1"
+                        }
+                     }
+                  ],
+                  "frequency":{
+                     "hasFrequency":"0",
+                     "tripIndex":"0",
+                     "minTimeGap":"0",
+                     "maxTimeGap":"0",
+                     "avTimeGap":"0",
+                     "minDuration":"0",
+                     "maxDuration":"0",
+                     "avDuration":"0",
+                     "modes":[
+
+                     ]
+                  },
+                  "path":"3362053,456277 3362624,457580 3362624,457580 3362619,457577 3362619,457577 3362619,457880 3362605,458187 3362606,458357 3362604,458549 3362582,459495 3362582,459515 3362582,459515 3362584,459598 3362581,459720 3362560,459823 3362555,459845 3362534,459948 3362480,460071 3362421,460188 3362377,460248 3362225,460451 3362159,460571 3361963,461069 3361888,461192 3361785,461303 3361746,461337 3361626,461420 3361530,461458 3361530,461458 3361460,461485 3361163,461558 3 [...]
+               }
+            ],
+            "attrs":[
+
+            ]
+         }
+      },
+      {
+         "trip":{
+            "duration":"00:32",
+            "interchange":"0",
+            "desc":"2",
+            "legs":[
+               {
+                  "points":[
+                     {
+                        "name":"Essen Hauptbahnhof",
+                        "place":"Essen",
+                        "nameWithPlace":"Essen Hauptbahnhof",
+                        "usage":"departure",
+                        "omc":"5113000",
+                        "placeID":"18",
+                        "desc":"",
+                        "dateTime":{
+                           "date":"27.02.2014",
+                           "time":"16:21"
+                        },
+                        "stamp":{
+                           "date":"20140227",
+                           "time":"1621"
+                        },
+                        "links":[
+                           {
+                              "name":"RM",
+                              "type":"RM",
+                              "href":"FILELOAD?Filename=dwa_530F53F02.pdf"
+                           },
+                           {
+                              "name":"SM",
+                              "type":"SM",
+                              "href":"vrr/09289_e_hbf_1.htm"
+                           }
+                        ],
+                        "ref":{
+                           "id":"20009289",
+                           "area":"90",
+                           "platform":"",
+                           "NaPTANID":"",
+                           "attrs":[
+
+                           ],
+                           "coords":"3362045,456187"
+                        }
+                     },
+                     {
+                        "name":"Düsseldorf Hbf",
+                        "place":"Düsseldorf",
+                        "nameWithPlace":"Düsseldorf Hbf",
+                        "usage":"arrival",
+                        "omc":"5111000",
+                        "placeID":"6",
+                        "desc":"",
+                        "dateTime":{
+                           "date":"27.02.2014",
+                           "time":"16:53"
+                        },
+                        "stamp":{
+                           "date":"20140227",
+                           "time":"1653"
+                        },
+                        "links":[
+                           {
+                              "name":"RM",
+                              "type":"RM",
+                              "href":"FILELOAD?Filename=dwa_530F53F03.pdf"
+                           },
+                           {
+                              "name":"SM",
+                              "type":"SM",
+                              "href":"vrr/18235_d_hbf_1.htm"
+                           }
+                        ],
+                        "ref":{
+                           "id":"20018235",
+                           "area":"90",
+                           "platform":"",
+                           "NaPTANID":"",
+                           "attrs":[
+
+                           ],
+                           "coords":"3345974,481458"
+                        }
+                     }
+                  ],
+                  "mode":{
+                     "name":"R-Bahn RE2",
+                     "number":"RE2",
+                     "type":"6",
+                     "code":"0",
+                     "destination":"Düsseldorf Hbf",
+                     "destID":"20018235",
+                     "desc":"",
+                     "diva":{
+                        "branch":"90",
+                        "line":"425",
+                        "supplement":"B",
+                        "dir":"R",
+                        "project":"j14",
+                        "network":"ddb",
+                        "stateless":"ddb:90425:B:R:j14",
+                        "operator":"DB AG",
+                        "opCode":"00"
+                     }
+                  },
+                  "stopSeq":[
+                     {
+                        "name":"Essen Hauptbahnhof",
+                        "nameWO":"Hauptbahnhof",
+                        "place":"",
+                        "nameWithPlace":"",
+                        "omc":"5113000",
+                        "placeID":"18",
+                        "platformName":"Gleis 2",
+                        "ref":{
+                           "id":"20009289",
+                           "area":"90",
+                           "platform":"",
+                           "NaPTANID":"",
+                           "attrs":[
+
+                           ],
+                           "coords":"3362045,456187",
+                           "depDateTime":"20140227 16:21",
+                           "arrDelay":"-1",
+                           "depDelay":"0"
+                        }
+                     },
+                     {
+                        "name":"Mülheim Hauptbahnhof",
+                        "nameWO":"Hauptbahnhof",
+                        "place":"",
+                        "nameWithPlace":"",
+                        "omc":"5117000",
+                        "placeID":"17",
+                        "platformName":"Gleis 6",
+                        "ref":{
+                           "id":"20015225",
+                           "area":"90",
+                           "platform":"",
+                           "NaPTANID":"",
+                           "attrs":[
+
+                           ],
+                           "coords":"3353209,458257",
+                           "arrDateTime":"20140227 16:26",
+                           "depDateTime":"20140227 16:27",
+                           "arrDelay":"0",
+                           "depDelay":"0"
+                        }
+                     },
+                     {
+                        "name":"Duisburg Hbf",
+                        "nameWO":"Duisburg Hbf",
+                        "place":"",
+                        "nameWithPlace":"",
+                        "omc":"5112000",
+                        "placeID":"20",
+                        "platformName":"Gleis 3",
+                        "ref":{
+                           "id":"20016032",
+                           "area":"90",
+                           "platform":"",
+                           "NaPTANID":"",
+                           "attrs":[
+
+                           ],
+                           "coords":"3345390,458088",
+                           "arrDateTime":"20140227 16:33",
+                           "depDateTime":"20140227 16:36",
+                           "arrDelay":"0",
+                           "depDelay":"0"
+                        }
+                     },
+                     {
+                        "name":"Düsseldorf Flughafen Bahnhof",
+                        "nameWO":"Flughafen Bahnhof",
+                        "place":"",
+                        "nameWithPlace":"",
+                        "omc":"5111000",
+                        "placeID":"6",
+                        "platformName":"Gleis 6",
+                        "ref":{
+                           "id":"20018488",
+                           "area":"90",
+                           "platform":"",
+                           "NaPTANID":"",
+                           "attrs":[
+
+                           ],
+                           "coords":"3345726,473565",
+                           "arrDateTime":"20140227 16:45",
+                           "depDateTime":"20140227 16:46",
+                           "arrDelay":"0",
+                           "depDelay":"0"
+                        }
+                     },
+                     {
+                        "name":"D-Flughafen Terminal S",
+                        "nameWO":"Flughafen Terminal S",
+                        "place":"",
+                        "nameWithPlace":"",
+                        "omc":"5111000",
+                        "placeID":"6",
+                        "platformName":"",
+                        "ref":{
+                           "id":"20018517",
+                           "area":"98",
+                           "platform":"",
+                           "NaPTANID":"",
+                           "attrs":[
+
+                           ],
+                           "coords":"3344292,475050",
+                           "arrDelay":"-1",
+                           "depDelay":"-1"
+                        }
+                     },
+                     {
+                        "name":"Düsseldorf Hbf",
+                        "nameWO":"Hbf",
+                        "place":"",
+                        "nameWithPlace":"",
+                        "omc":"5111000",
+                        "placeID":"6",
+                        "platformName":"Gleis 9",
+                        "ref":{
+                           "id":"20018235",
+                           "area":"90",
+                           "platform":"",
+                           "NaPTANID":"",
+                           "attrs":[
+
+                           ],
+                           "coords":"3345974,481458",
+                           "arrDateTime":"20140227 16:53",
+                           "arrDelay":"0",
+                           "depDelay":"-1"
+                        }
+                     }
+                  ],
+                  "frequency":{
+                     "hasFrequency":"0",
+                     "tripIndex":"0",
+                     "minTimeGap":"0",
+                     "maxTimeGap":"0",
+                     "avTimeGap":"0",
+                     "minDuration":"0",
+                     "maxDuration":"0",
+                     "avDuration":"0",
+                     "modes":[
+
+                     ]
+                  },
+                  "path":"3362056,456276 3361586,456332 3361381,456356 3361148,456359 3360976,456380 3360888,456369 3360652,456292 3360486,456189 3360243,456056 3360150,456013 3359324,455754 3359121,455711 3358874,455708 3358681,455744 3358523,455787 3358386,455822 3358221,455864 3357920,455959 3357678,456071 3357623,456114 3357092,456573 3357066,456595 3356738,456833 3356638,456890 3356466,456967 3356348,457010 3355716,457183 3355651,457195 3355304,457211 3354869,457169 3354739,457179 3 [...]
+               }
+            ],
+            "attrs":[
+
+            ]
+         }
+      },
+      {
+         "trip":{
+            "duration":"00:28",
+            "interchange":"0",
+            "desc":"3",
+            "legs":[
+               {
+                  "points":[
+                     {
+                        "name":"Essen Hauptbahnhof",
+                        "place":"Essen",
+                        "nameWithPlace":"Essen Hauptbahnhof",
+                        "usage":"departure",
+                        "omc":"5113000",
+                        "placeID":"18",
+                        "desc":"",
+                        "dateTime":{
+                           "date":"27.02.2014",
+                           "time":"16:26"
+                        },
+                        "stamp":{
+                           "date":"20140227",
+                           "time":"1626"
+                        },
+                        "links":[
+                           {
+                              "name":"RM",
+                              "type":"RM",
+                              "href":"FILELOAD?Filename=dwa_530F53F04.pdf"
+                           },
+                           {
+                              "name":"SM",
+                              "type":"SM",
+                              "href":"vrr/09289_e_hbf_1.htm"
+                           }
+                        ],
+                        "ref":{
+                           "id":"20009289",
+                           "area":"90",
+                           "platform":"",
+                           "NaPTANID":"",
+                           "attrs":[
+
+                           ],
+                           "coords":"3362045,456187"
+                        }
+                     },
+                     {
+                        "name":"Düsseldorf Hbf",
+                        "place":"Düsseldorf",
+                        "nameWithPlace":"Düsseldorf Hbf",
+                        "usage":"arrival",
+                        "omc":"5111000",
+                        "placeID":"6",
+                        "desc":"",
+                        "dateTime":{
+                           "date":"27.02.2014",
+                           "time":"16:54"
+                        },
+                        "stamp":{
+                           "date":"20140227",
+                           "time":"1654"
+                        },
+                        "links":[
+                           {
+                              "name":"RM",
+                              "type":"RM",
+                              "href":"FILELOAD?Filename=dwa_530F53F05.pdf"
+                           },
+                           {
+                              "name":"SM",
+                              "type":"SM",
+                              "href":"vrr/18235_d_hbf_1.htm"
+                           }
+                        ],
+                        "ref":{
+                           "id":"20018235",
+                           "area":"90",
+                           "platform":"",
+                           "NaPTANID":"",
+                           "attrs":[
+
+                           ],
+                           "coords":"3345974,481458"
+                        }
+                     }
+                  ],
+                  "mode":{
+                     "name":"R-Bahn RE1",
+                     "number":"RE1",
+                     "type":"6",
+                     "code":"0",
+                     "destination":"Aachen Hbf",
+                     "destID":"21001008",
+                     "desc":"",
+                     "diva":{
+                        "branch":"90",
+                        "line":"415",
+                        "supplement":" ",
+                        "dir":"H",
+                        "project":"j14",
+                        "network":"ddb",
+                        "stateless":"ddb:90415: :H:j14",
+                        "operator":"DB AG",
+                        "opCode":"00"
+                     }
+                  },
+                  "stopSeq":[
+                     {
+                        "name":"Essen Hauptbahnhof",
+                        "nameWO":"Hauptbahnhof",
+                        "place":"",
+                        "nameWithPlace":"",
+                        "omc":"5113000",
+                        "placeID":"18",
+                        "platformName":"Gleis 2",
+                        "ref":{
+                           "id":"20009289",
+                           "area":"90",
+                           "platform":"",
+                           "NaPTANID":"",
+                           "attrs":[
+
+                           ],
+                           "coords":"3362045,456187",
+                           "depDateTime":"20140227 16:09",
+                           "arrDelay":"-1",
+                           "depDelay":"17"
+                        }
+                     },
+                     {
+                        "name":"Mülheim Hauptbahnhof",
+                        "nameWO":"Hauptbahnhof",
+                        "place":"",
+                        "nameWithPlace":"",
+                        "omc":"5117000",
+                        "placeID":"17",
+                        "platformName":"Gleis 6",
+                        "ref":{
+                           "id":"20015225",
+                           "area":"90",
+                           "platform":"",
+                           "NaPTANID":"",
+                           "attrs":[
+
+                           ],
+                           "coords":"3353209,458257",
+                           "arrDateTime":"20140227 16:14",
+                           "depDateTime":"20140227 16:15",
+                           "arrDelay":"17",
+                           "depDelay":"17"
+                        }
+                     },
+                     {
+                        "name":"Duisburg Hbf",
+                        "nameWO":"Duisburg Hbf",
+                        "place":"",
+                        "nameWithPlace":"",
+                        "omc":"5112000",
+                        "placeID":"20",
+                        "platformName":"Gleis 4",
+                        "ref":{
+                           "id":"20016032",
+                           "area":"90",
+                           "platform":"",
+                           "NaPTANID":"",
+                           "attrs":[
+
+                           ],
+                           "coords":"3345390,458088",
+                           "arrDateTime":"20140227 16:20",
+                           "depDateTime":"20140227 16:22",
+                           "arrDelay":"17",
+                           "depDelay":"17"
+                        }
+                     },
+                     {
+                        "name":"Duisburg Großenbaum S",
+                        "nameWO":"Großenbaum S",
+                        "place":"",
+                        "nameWithPlace":"",
+                        "omc":"5112000",
+                        "placeID":"20",
+                        "platformName":"",
+                        "ref":{
+                           "id":"20016129",
+                           "area":"90",
+                           "platform":"",
+                           "NaPTANID":"",
+                           "attrs":[
+
+                           ],
+                           "coords":"3345313,465446",
+                           "arrDelay":"-1",
+                           "depDelay":"-1"
+                        }
+                     },
+                     {
+                        "name":"Düsseldorf Flughafen Bahnhof",
+                        "nameWO":"Flughafen Bahnhof",
+                        "place":"",
+                        "nameWithPlace":"",
+                        "omc":"5111000",
+                        "placeID":"6",
+                        "platformName":"Gleis 4",
+                        "ref":{
+                           "id":"20018488",
+                           "area":"90",
+                           "platform":"",
+                           "NaPTANID":"",
+                           "attrs":[
+
+                           ],
+                           "coords":"3345726,473565",
+                           "arrDateTime":"20140227 16:31",
+                           "depDateTime":"20140227 16:32",
+                           "arrDelay":"17",
+                           "depDelay":"17"
+                        }
+                     },
+                     {
+                        "name":"D-Flughafen Terminal S",
+                        "nameWO":"Flughafen Terminal S",
+                        "place":"",
+                        "nameWithPlace":"",
+                        "omc":"5111000",
+                        "placeID":"6",
+                        "platformName":"",
+                        "ref":{
+                           "id":"20018517",
+                           "area":"98",
+                           "platform":"",
+                           "NaPTANID":"",
+                           "attrs":[
+
+                           ],
+                           "coords":"3344292,475050",
+                           "arrDelay":"-1",
+                           "depDelay":"-1"
+                        }
+                     },
+                     {
+                        "name":"Düsseldorf Hbf",
+                        "nameWO":"Hbf",
+                        "place":"",
+                        "nameWithPlace":"",
+                        "omc":"5111000",
+                        "placeID":"6",
+                        "platformName":"Gleis 16",
+                        "ref":{
+                           "id":"20018235",
+                           "area":"90",
+                           "platform":"",
+                           "NaPTANID":"",
+                           "attrs":[
+
+                           ],
+                           "coords":"3345974,481458",
+                           "arrDateTime":"20140227 16:37",
+                           "arrDelay":"17",
+                           "depDelay":"-1"
+                        }
+                     }
+                  ],
+                  "frequency":{
+                     "hasFrequency":"0",
+                     "tripIndex":"0",
+                     "minTimeGap":"0",
+                     "maxTimeGap":"0",
+                     "avTimeGap":"0",
+                     "minDuration":"0",
+                     "maxDuration":"0",
+                     "avDuration":"0",
+                     "modes":[
+
+                     ]
+                  },
+                  "path":"3362056,456276 3361586,456332 3361381,456356 3361148,456359 3360976,456380 3360888,456369 3360652,456292 3360486,456189 3360243,456056 3360150,456013 3359324,455754 3359121,455711 3358874,455708 3358681,455744 3358523,455787 3358386,455822 3358221,455864 3357920,455959 3357678,456071 3357623,456114 3357092,456573 3357066,456595 3356738,456833 3356638,456890 3356466,456967 3356348,457010 3355716,457183 3355651,457195 3355304,457211 3354869,457169 3354739,457179 3 [...]
+               }
+            ],
+            "attrs":[
+
+            ]
+         }
+      }
+   ]
+}
\ No newline at end of file
diff --git a/t/in/e_hbf_e_alfredusbad.json b/t/in/e_hbf_e_alfredusbad.json
new file mode 100644
index 0000000..effd3ed
--- /dev/null
+++ b/t/in/e_hbf_e_alfredusbad.json
@@ -0,0 +1,1130 @@
+{
+   "parameters":[
+      {
+         "name":"mdvMap_destination",
+         "value":"::"
+      },
+      {
+         "name":"id_destination",
+         "value":":destination"
+      },
+      {
+         "name":"ShowFare",
+         "value":" "
+      },
+      {
+         "name":"mdvMap2_destination",
+         "value":""
+      },
+      {
+         "name":"view",
+         "value":""
+      },
+      {
+         "name":"mapState_origin",
+         "value":""
+      },
+      {
+         "name":"mapState_destination",
+         "value":""
+      },
+      {
+         "name":"mdvMap2_origin",
+         "value":""
+      },
+      {
+         "name":"enableMobilityRestrictionOptionsWithButton",
+         "value":""
+      },
+      {
+         "name":"id_via",
+         "value":":via"
+      },
+      {
+         "name":"mdvMap_origin",
+         "value":"::"
+      },
+      {
+         "name":"id_origin",
+         "value":":origin"
+      },
+      {
+         "name":"command",
+         "value":""
+      },
+      {
+         "name":"mdvMap2_via",
+         "value":""
+      },
+      {
+         "name":"mdvMap_via",
+         "value":"::"
+      },
+      {
+         "name":"mapState_via",
+         "value":""
+      },
+      {
+         "name":"transpCompany",
+         "value":"vrr"
+      },
+      {
+         "name":"priceCalculator",
+         "value":""
+      },
+      {
+         "name":"requestID",
+         "value":"1"
+      },
+      {
+         "name":"sessionID",
+         "value":"efa1.vrr.de_52274265"
+      }
+   ],
+   "trips":[
+      {
+         "trip":{
+            "duration":"00:07",
+            "interchange":"0",
+            "desc":"4",
+            "legs":[
+               {
+                  "points":[
+                     {
+                        "name":"Essen Hauptbahnhof",
+                        "place":"Essen",
+                        "nameWithPlace":"Essen Hauptbahnhof",
+                        "usage":"departure",
+                        "omc":"5113000",
+                        "placeID":"18",
+                        "desc":"",
+                        "dateTime":{
+                           "date":"27.02.2014",
+                           "time":"17:31"
+                        },
+                        "stamp":{
+                           "date":"20140227",
+                           "time":"1731"
+                        },
+                        "links":[
+                           {
+                              "name":"RM",
+                              "type":"RM",
+                              "href":"FILELOAD?Filename=dwa_530F68E50.pdf"
+                           },
+                           {
+                              "name":"SM",
+                              "type":"SM",
+                              "href":"vrr/09289_e_hbf_1.htm"
+                           }
+                        ],
+                        "ref":{
+                           "id":"20009289",
+                           "area":"14",
+                           "platform":"4",
+                           "NaPTANID":"",
+                           "attrs":[
+
+                           ],
+                           "coords":"3361962,456258"
+                        }
+                     },
+                     {
+                        "name":"Essen Alfredusbad",
+                        "place":"Essen",
+                        "nameWithPlace":"Essen Alfredusbad",
+                        "usage":"arrival",
+                        "omc":"5113000",
+                        "placeID":"18",
+                        "desc":"",
+                        "dateTime":{
+                           "date":"27.02.2014",
+                           "time":"17:38"
+                        },
+                        "stamp":{
+                           "date":"20140227",
+                           "time":"1738"
+                        },
+                        "links":[
+                           {
+                              "name":"RM",
+                              "type":"RM",
+                              "href":"FILELOAD?Filename=dwa_530F68E51.pdf"
+                           }
+                        ],
+                        "ref":{
+                           "id":"20009115",
+                           "area":"1",
+                           "platform":"2",
+                           "NaPTANID":"",
+                           "attrs":[
+
+                           ],
+                           "coords":"3361027,459596"
+                        }
+                     }
+                  ],
+                  "mode":{
+                     "name":"Straßenbahn 107",
+                     "number":"107",
+                     "type":"4",
+                     "code":"4",
+                     "destination":"Essen Bredeney",
+                     "destID":"20009172",
+                     "desc":"",
+                     "diva":{
+                        "branch":"11",
+                        "line":"107",
+                        "supplement":" ",
+                        "dir":"H",
+                        "project":"j14",
+                        "network":"vrr",
+                        "stateless":"vrr:11107: :H:j14",
+                        "operator":"EVAG Strab",
+                        "opCode":"11"
+                     }
+                  },
+                  "stopSeq":[
+                     {
+                        "name":"Essen Hauptbahnhof",
+                        "nameWO":"Hauptbahnhof",
+                        "place":"",
+                        "nameWithPlace":"",
+                        "omc":"5113000",
+                        "placeID":"18",
+                        "platformName":"Bstg. 4",
+                        "ref":{
+                           "id":"20009289",
+                           "area":"14",
+                           "platform":"4",
+                           "NaPTANID":"",
+                           "attrs":[
+
+                           ],
+                           "coords":"3361962,456258",
+                           "depDateTime":"20140227 17:31",
+                           "arrDelay":"-1",
+                           "depDelay":"0"
+                        }
+                     },
+                     {
+                        "name":"Essen Philharmonie",
+                        "nameWO":"Philharmonie",
+                        "place":"",
+                        "nameWithPlace":"",
+                        "omc":"5113000",
+                        "placeID":"18",
+                        "platformName":"Bstg. 2",
+                        "ref":{
+                           "id":"20009531",
+                           "area":"1",
+                           "platform":"2",
+                           "NaPTANID":"",
+                           "attrs":[
+
+                           ],
+                           "coords":"3361660,456901",
+                           "arrDateTime":"20140227 17:32",
+                           "depDateTime":"20140227 17:32",
+                           "arrDelay":"0",
+                           "depDelay":"0"
+                        }
+                     },
+                     {
+                        "name":"Essen Rüttenscheider Stern",
+                        "nameWO":"Rüttenscheider Stern",
+                        "place":"",
+                        "nameWithPlace":"",
+                        "omc":"5113000",
+                        "placeID":"18",
+                        "platformName":"Bstg. 2",
+                        "ref":{
+                           "id":"20009530",
+                           "area":"1",
+                           "platform":"2",
+                           "NaPTANID":"",
+                           "attrs":[
+
+                           ],
+                           "coords":"3361395,457774",
+                           "arrDateTime":"20140227 17:34",
+                           "depDateTime":"20140227 17:34",
+                           "arrDelay":"0",
+                           "depDelay":"0"
+                        }
+                     },
+                     {
+                        "name":"Essen Martinstr.",
+                        "nameWO":"Martinstr.",
+                        "place":"",
+                        "nameWithPlace":"",
+                        "omc":"5113000",
+                        "placeID":"18",
+                        "platformName":"Bstg. 2",
+                        "ref":{
+                           "id":"20009450",
+                           "area":"1",
+                           "platform":"2",
+                           "NaPTANID":"",
+                           "attrs":[
+
+                           ],
+                           "coords":"3361313,458171",
+                           "arrDateTime":"20140227 17:35",
+                           "depDateTime":"20140227 17:35",
+                           "arrDelay":"0",
+                           "depDelay":"0"
+                        }
+                     },
+                     {
+                        "name":"Essen Florastr.",
+                        "nameWO":"Florastr.",
+                        "place":"",
+                        "nameWithPlace":"",
+                        "omc":"5113000",
+                        "placeID":"18",
+                        "platformName":"Bstg. 2",
+                        "ref":{
+                           "id":"20009234",
+                           "area":"1",
+                           "platform":"2",
+                           "NaPTANID":"",
+                           "attrs":[
+
+                           ],
+                           "coords":"3361149,458993",
+                           "arrDateTime":"20140227 17:36",
+                           "depDateTime":"20140227 17:36",
+                           "arrDelay":"0",
+                           "depDelay":"0"
+                        }
+                     },
+                     {
+                        "name":"Essen Alfredusbad",
+                        "nameWO":"Alfredusbad",
+                        "place":"",
+                        "nameWithPlace":"",
+                        "omc":"5113000",
+                        "placeID":"18",
+                        "platformName":"Bstg. 2",
+                        "ref":{
+                           "id":"20009115",
+                           "area":"1",
+                           "platform":"2",
+                           "NaPTANID":"",
+                           "attrs":[
+
+                           ],
+                           "coords":"3361027,459596",
+                           "arrDateTime":"20140227 17:38",
+                           "arrDelay":"0",
+                           "depDelay":"-1"
+                        }
+                     }
+                  ],
+                  "frequency":{
+                     "hasFrequency":"0",
+                     "tripIndex":"0",
+                     "minTimeGap":"0",
+                     "maxTimeGap":"0",
+                     "avTimeGap":"0",
+                     "minDuration":"0",
+                     "maxDuration":"0",
+                     "avDuration":"0",
+                     "modes":[
+
+                     ]
+                  },
+                  "path":"3361962,456258 3361660,456901 3361660,456901 3361641,456938 3361635,456950 3361592,457029 3361579,457052 3361552,457095 3361545,457105 3361523,457149 3361507,457196 3361505,457246 3361396,457774 3361395,457774 3361313,458171 3361313,458171 3361149,458993 3361149,458993 3361123,459100 3361117,459140 3361105,459166 3361096,459218 3361093,459234 3361078,459306 3361063,459369 3361042,459456 3361046,459468 3361040,459498 3361034,459507 3361027,459543 3361030,459552 3 [...]
+               }
+            ],
+            "attrs":[
+
+            ]
+         }
+      },
+      {
+         "trip":{
+            "duration":"00:07",
+            "interchange":"0",
+            "desc":"1",
+            "legs":[
+               {
+                  "points":[
+                     {
+                        "name":"Essen Hauptbahnhof",
+                        "place":"Essen",
+                        "nameWithPlace":"Essen Hauptbahnhof",
+                        "usage":"departure",
+                        "omc":"5113000",
+                        "placeID":"18",
+                        "desc":"",
+                        "dateTime":{
+                           "date":"27.02.2014",
+                           "time":"17:34"
+                        },
+                        "stamp":{
+                           "date":"20140227",
+                           "time":"1734"
+                        },
+                        "links":[
+                           {
+                              "name":"RM",
+                              "type":"RM",
+                              "href":"FILELOAD?Filename=dwa_530F68E52.pdf"
+                           },
+                           {
+                              "name":"SM",
+                              "type":"SM",
+                              "href":"vrr/09289_e_hbf_1.htm"
+                           }
+                        ],
+                        "ref":{
+                           "id":"20009289",
+                           "area":"14",
+                           "platform":"4",
+                           "NaPTANID":"",
+                           "attrs":[
+
+                           ],
+                           "coords":"3361962,456258"
+                        }
+                     },
+                     {
+                        "name":"Essen Alfredusbad",
+                        "place":"Essen",
+                        "nameWithPlace":"Essen Alfredusbad",
+                        "usage":"arrival",
+                        "omc":"5113000",
+                        "placeID":"18",
+                        "desc":"",
+                        "dateTime":{
+                           "date":"27.02.2014",
+                           "time":"17:41"
+                        },
+                        "stamp":{
+                           "date":"20140227",
+                           "time":"1741"
+                        },
+                        "links":[
+                           {
+                              "name":"RM",
+                              "type":"RM",
+                              "href":"FILELOAD?Filename=dwa_530F68E53.pdf"
+                           }
+                        ],
+                        "ref":{
+                           "id":"20009115",
+                           "area":"1",
+                           "platform":"2",
+                           "NaPTANID":"",
+                           "attrs":[
+
+                           ],
+                           "coords":"3361027,459596"
+                        }
+                     }
+                  ],
+                  "mode":{
+                     "name":"Straßenbahn 101",
+                     "number":"101",
+                     "type":"4",
+                     "code":"4",
+                     "destination":"Essen Bredeney",
+                     "destID":"20009172",
+                     "desc":"",
+                     "diva":{
+                        "branch":"11",
+                        "line":"101",
+                        "supplement":" ",
+                        "dir":"H",
+                        "project":"j14",
+                        "network":"vrr",
+                        "stateless":"vrr:11101: :H:j14",
+                        "operator":"EVAG Strab",
+                        "opCode":"11"
+                     }
+                  },
+                  "stopSeq":[
+                     {
+                        "name":"Essen Hauptbahnhof",
+                        "nameWO":"Hauptbahnhof",
+                        "place":"",
+                        "nameWithPlace":"",
+                        "omc":"5113000",
+                        "placeID":"18",
+                        "platformName":"Bstg. 4",
+                        "ref":{
+                           "id":"20009289",
+                           "area":"14",
+                           "platform":"4",
+                           "NaPTANID":"",
+                           "attrs":[
+
+                           ],
+                           "coords":"3361962,456258",
+                           "depDateTime":"20140227 17:34",
+                           "arrDelay":"-1",
+                           "depDelay":"-1"
+                        }
+                     },
+                     {
+                        "name":"Essen Philharmonie",
+                        "nameWO":"Philharmonie",
+                        "place":"",
+                        "nameWithPlace":"",
+                        "omc":"5113000",
+                        "placeID":"18",
+                        "platformName":"Bstg. 2",
+                        "ref":{
+                           "id":"20009531",
+                           "area":"1",
+                           "platform":"2",
+                           "NaPTANID":"",
+                           "attrs":[
+
+                           ],
+                           "coords":"3361660,456901",
+                           "arrDateTime":"20140227 17:35",
+                           "depDateTime":"20140227 17:35",
+                           "arrDelay":"-1",
+                           "depDelay":"-1"
+                        }
+                     },
+                     {
+                        "name":"Essen Rüttenscheider Stern",
+                        "nameWO":"Rüttenscheider Stern",
+                        "place":"",
+                        "nameWithPlace":"",
+                        "omc":"5113000",
+                        "placeID":"18",
+                        "platformName":"Bstg. 2",
+                        "ref":{
+                           "id":"20009530",
+                           "area":"1",
+                           "platform":"2",
+                           "NaPTANID":"",
+                           "attrs":[
+
+                           ],
+                           "coords":"3361395,457774",
+                           "arrDateTime":"20140227 17:37",
+                           "depDateTime":"20140227 17:37",
+                           "arrDelay":"-1",
+                           "depDelay":"-1"
+                        }
+                     },
+                     {
+                        "name":"Essen Martinstr.",
+                        "nameWO":"Martinstr.",
+                        "place":"",
+                        "nameWithPlace":"",
+                        "omc":"5113000",
+                        "placeID":"18",
+                        "platformName":"Bstg. 2",
+                        "ref":{
+                           "id":"20009450",
+                           "area":"1",
+                           "platform":"2",
+                           "NaPTANID":"",
+                           "attrs":[
+
+                           ],
+                           "coords":"3361313,458171",
+                           "arrDateTime":"20140227 17:38",
+                           "depDateTime":"20140227 17:38",
+                           "arrDelay":"-1",
+                           "depDelay":"-1"
+                        }
+                     },
+                     {
+                        "name":"Essen Florastr.",
+                        "nameWO":"Florastr.",
+                        "place":"",
+                        "nameWithPlace":"",
+                        "omc":"5113000",
+                        "placeID":"18",
+                        "platformName":"Bstg. 2",
+                        "ref":{
+                           "id":"20009234",
+                           "area":"1",
+                           "platform":"2",
+                           "NaPTANID":"",
+                           "attrs":[
+
+                           ],
+                           "coords":"3361149,458993",
+                           "arrDateTime":"20140227 17:39",
+                           "depDateTime":"20140227 17:39",
+                           "arrDelay":"-1",
+                           "depDelay":"-1"
+                        }
+                     },
+                     {
+                        "name":"Essen Alfredusbad",
+                        "nameWO":"Alfredusbad",
+                        "place":"",
+                        "nameWithPlace":"",
+                        "omc":"5113000",
+                        "placeID":"18",
+                        "platformName":"Bstg. 2",
+                        "ref":{
+                           "id":"20009115",
+                           "area":"1",
+                           "platform":"2",
+                           "NaPTANID":"",
+                           "attrs":[
+
+                           ],
+                           "coords":"3361027,459596",
+                           "arrDateTime":"20140227 17:41",
+                           "arrDelay":"-1",
+                           "depDelay":"-1"
+                        }
+                     }
+                  ],
+                  "frequency":{
+                     "hasFrequency":"0",
+                     "tripIndex":"0",
+                     "minTimeGap":"0",
+                     "maxTimeGap":"0",
+                     "avTimeGap":"0",
+                     "minDuration":"0",
+                     "maxDuration":"0",
+                     "avDuration":"0",
+                     "modes":[
+
+                     ]
+                  },
+                  "path":"3361962,456258 3361660,456901 3361660,456901 3361641,456938 3361635,456950 3361592,457029 3361579,457052 3361552,457095 3361545,457105 3361523,457149 3361507,457196 3361505,457246 3361396,457774 3361395,457774 3361313,458171 3361313,458171 3361149,458993 3361149,458993 3361123,459100 3361117,459140 3361105,459166 3361096,459218 3361093,459234 3361078,459306 3361063,459369 3361042,459456 3361046,459468 3361040,459498 3361034,459507 3361027,459543 3361030,459552 3 [...]
+               }
+            ],
+            "attrs":[
+
+            ]
+         }
+      },
+      {
+         "trip":{
+            "duration":"00:07",
+            "interchange":"0",
+            "desc":"2",
+            "legs":[
+               {
+                  "points":[
+                     {
+                        "name":"Essen Hauptbahnhof",
+                        "place":"Essen",
+                        "nameWithPlace":"Essen Hauptbahnhof",
+                        "usage":"departure",
+                        "omc":"5113000",
+                        "placeID":"18",
+                        "desc":"",
+                        "dateTime":{
+                           "date":"27.02.2014",
+                           "time":"17:41"
+                        },
+                        "stamp":{
+                           "date":"20140227",
+                           "time":"1741"
+                        },
+                        "links":[
+                           {
+                              "name":"RM",
+                              "type":"RM",
+                              "href":"FILELOAD?Filename=dwa_530F68E54.pdf"
+                           },
+                           {
+                              "name":"SM",
+                              "type":"SM",
+                              "href":"vrr/09289_e_hbf_1.htm"
+                           }
+                        ],
+                        "ref":{
+                           "id":"20009289",
+                           "area":"14",
+                           "platform":"4",
+                           "NaPTANID":"",
+                           "attrs":[
+
+                           ],
+                           "coords":"3361962,456258"
+                        }
+                     },
+                     {
+                        "name":"Essen Alfredusbad",
+                        "place":"Essen",
+                        "nameWithPlace":"Essen Alfredusbad",
+                        "usage":"arrival",
+                        "omc":"5113000",
+                        "placeID":"18",
+                        "desc":"",
+                        "dateTime":{
+                           "date":"27.02.2014",
+                           "time":"17:48"
+                        },
+                        "stamp":{
+                           "date":"20140227",
+                           "time":"1748"
+                        },
+                        "links":[
+                           {
+                              "name":"RM",
+                              "type":"RM",
+                              "href":"FILELOAD?Filename=dwa_530F68E55.pdf"
+                           }
+                        ],
+                        "ref":{
+                           "id":"20009115",
+                           "area":"1",
+                           "platform":"2",
+                           "NaPTANID":"",
+                           "attrs":[
+
+                           ],
+                           "coords":"3361027,459596"
+                        }
+                     }
+                  ],
+                  "mode":{
+                     "name":"Straßenbahn 107",
+                     "number":"107",
+                     "type":"4",
+                     "code":"4",
+                     "destination":"Essen Bredeney",
+                     "destID":"20009172",
+                     "desc":"",
+                     "diva":{
+                        "branch":"11",
+                        "line":"107",
+                        "supplement":" ",
+                        "dir":"H",
+                        "project":"j14",
+                        "network":"vrr",
+                        "stateless":"vrr:11107: :H:j14",
+                        "operator":"EVAG Strab",
+                        "opCode":"11"
+                     }
+                  },
+                  "stopSeq":[
+                     {
+                        "name":"Essen Hauptbahnhof",
+                        "nameWO":"Hauptbahnhof",
+                        "place":"",
+                        "nameWithPlace":"",
+                        "omc":"5113000",
+                        "placeID":"18",
+                        "platformName":"Bstg. 4",
+                        "ref":{
+                           "id":"20009289",
+                           "area":"14",
+                           "platform":"4",
+                           "NaPTANID":"",
+                           "attrs":[
+
+                           ],
+                           "coords":"3361962,456258",
+                           "depDateTime":"20140227 17:41",
+                           "arrDelay":"-1",
+                           "depDelay":"-1"
+                        }
+                     },
+                     {
+                        "name":"Essen Philharmonie",
+                        "nameWO":"Philharmonie",
+                        "place":"",
+                        "nameWithPlace":"",
+                        "omc":"5113000",
+                        "placeID":"18",
+                        "platformName":"Bstg. 2",
+                        "ref":{
+                           "id":"20009531",
+                           "area":"1",
+                           "platform":"2",
+                           "NaPTANID":"",
+                           "attrs":[
+
+                           ],
+                           "coords":"3361660,456901",
+                           "arrDateTime":"20140227 17:42",
+                           "depDateTime":"20140227 17:42",
+                           "arrDelay":"-1",
+                           "depDelay":"-1"
+                        }
+                     },
+                     {
+                        "name":"Essen Rüttenscheider Stern",
+                        "nameWO":"Rüttenscheider Stern",
+                        "place":"",
+                        "nameWithPlace":"",
+                        "omc":"5113000",
+                        "placeID":"18",
+                        "platformName":"Bstg. 2",
+                        "ref":{
+                           "id":"20009530",
+                           "area":"1",
+                           "platform":"2",
+                           "NaPTANID":"",
+                           "attrs":[
+
+                           ],
+                           "coords":"3361395,457774",
+                           "arrDateTime":"20140227 17:44",
+                           "depDateTime":"20140227 17:44",
+                           "arrDelay":"-1",
+                           "depDelay":"-1"
+                        }
+                     },
+                     {
+                        "name":"Essen Martinstr.",
+                        "nameWO":"Martinstr.",
+                        "place":"",
+                        "nameWithPlace":"",
+                        "omc":"5113000",
+                        "placeID":"18",
+                        "platformName":"Bstg. 2",
+                        "ref":{
+                           "id":"20009450",
+                           "area":"1",
+                           "platform":"2",
+                           "NaPTANID":"",
+                           "attrs":[
+
+                           ],
+                           "coords":"3361313,458171",
+                           "arrDateTime":"20140227 17:45",
+                           "depDateTime":"20140227 17:45",
+                           "arrDelay":"-1",
+                           "depDelay":"-1"
+                        }
+                     },
+                     {
+                        "name":"Essen Florastr.",
+                        "nameWO":"Florastr.",
+                        "place":"",
+                        "nameWithPlace":"",
+                        "omc":"5113000",
+                        "placeID":"18",
+                        "platformName":"Bstg. 2",
+                        "ref":{
+                           "id":"20009234",
+                           "area":"1",
+                           "platform":"2",
+                           "NaPTANID":"",
+                           "attrs":[
+
+                           ],
+                           "coords":"3361149,458993",
+                           "arrDateTime":"20140227 17:46",
+                           "depDateTime":"20140227 17:46",
+                           "arrDelay":"-1",
+                           "depDelay":"-1"
+                        }
+                     },
+                     {
+                        "name":"Essen Alfredusbad",
+                        "nameWO":"Alfredusbad",
+                        "place":"",
+                        "nameWithPlace":"",
+                        "omc":"5113000",
+                        "placeID":"18",
+                        "platformName":"Bstg. 2",
+                        "ref":{
+                           "id":"20009115",
+                           "area":"1",
+                           "platform":"2",
+                           "NaPTANID":"",
+                           "attrs":[
+
+                           ],
+                           "coords":"3361027,459596",
+                           "arrDateTime":"20140227 17:48",
+                           "arrDelay":"-1",
+                           "depDelay":"-1"
+                        }
+                     }
+                  ],
+                  "frequency":{
+                     "hasFrequency":"0",
+                     "tripIndex":"0",
+                     "minTimeGap":"0",
+                     "maxTimeGap":"0",
+                     "avTimeGap":"0",
+                     "minDuration":"0",
+                     "maxDuration":"0",
+                     "avDuration":"0",
+                     "modes":[
+
+                     ]
+                  },
+                  "path":"3361962,456258 3361660,456901 3361660,456901 3361641,456938 3361635,456950 3361592,457029 3361579,457052 3361552,457095 3361545,457105 3361523,457149 3361507,457196 3361505,457246 3361396,457774 3361395,457774 3361313,458171 3361313,458171 3361149,458993 3361149,458993 3361123,459100 3361117,459140 3361105,459166 3361096,459218 3361093,459234 3361078,459306 3361063,459369 3361042,459456 3361046,459468 3361040,459498 3361034,459507 3361027,459543 3361030,459552 3 [...]
+               }
+            ],
+            "attrs":[
+
+            ]
+         }
+      },
+      {
+         "trip":{
+            "duration":"00:07",
+            "interchange":"0",
+            "desc":"3",
+            "legs":[
+               {
+                  "points":[
+                     {
+                        "name":"Essen Hauptbahnhof",
+                        "place":"Essen",
+                        "nameWithPlace":"Essen Hauptbahnhof",
+                        "usage":"departure",
+                        "omc":"5113000",
+                        "placeID":"18",
+                        "desc":"",
+                        "dateTime":{
+                           "date":"27.02.2014",
+                           "time":"17:45"
+                        },
+                        "stamp":{
+                           "date":"20140227",
+                           "time":"1745"
+                        },
+                        "links":[
+                           {
+                              "name":"RM",
+                              "type":"RM",
+                              "href":"FILELOAD?Filename=dwa_530F68E56.pdf"
+                           },
+                           {
+                              "name":"SM",
+                              "type":"SM",
+                              "href":"vrr/09289_e_hbf_1.htm"
+                           }
+                        ],
+                        "ref":{
+                           "id":"20009289",
+                           "area":"14",
+                           "platform":"4",
+                           "NaPTANID":"",
+                           "attrs":[
+
+                           ],
+                           "coords":"3361962,456258"
+                        }
+                     },
+                     {
+                        "name":"Essen Alfredusbad",
+                        "place":"Essen",
+                        "nameWithPlace":"Essen Alfredusbad",
+                        "usage":"arrival",
+                        "omc":"5113000",
+                        "placeID":"18",
+                        "desc":"",
+                        "dateTime":{
+                           "date":"27.02.2014",
+                           "time":"17:52"
+                        },
+                        "stamp":{
+                           "date":"20140227",
+                           "time":"1752"
+                        },
+                        "links":[
+                           {
+                              "name":"RM",
+                              "type":"RM",
+                              "href":"FILELOAD?Filename=dwa_530F68E57.pdf"
+                           }
+                        ],
+                        "ref":{
+                           "id":"20009115",
+                           "area":"1",
+                           "platform":"2",
+                           "NaPTANID":"",
+                           "attrs":[
+
+                           ],
+                           "coords":"3361027,459596"
+                        }
+                     }
+                  ],
+                  "mode":{
+                     "name":"Straßenbahn 101",
+                     "number":"101",
+                     "type":"4",
+                     "code":"4",
+                     "destination":"Essen Bredeney",
+                     "destID":"20009172",
+                     "desc":"",
+                     "diva":{
+                        "branch":"11",
+                        "line":"101",
+                        "supplement":" ",
+                        "dir":"H",
+                        "project":"j14",
+                        "network":"vrr",
+                        "stateless":"vrr:11101: :H:j14",
+                        "operator":"EVAG Strab",
+                        "opCode":"11"
+                     }
+                  },
+                  "stopSeq":[
+                     {
+                        "name":"Essen Hauptbahnhof",
+                        "nameWO":"Hauptbahnhof",
+                        "place":"",
+                        "nameWithPlace":"",
+                        "omc":"5113000",
+                        "placeID":"18",
+                        "platformName":"Bstg. 4",
+                        "ref":{
+                           "id":"20009289",
+                           "area":"14",
+                           "platform":"4",
+                           "NaPTANID":"",
+                           "attrs":[
+
+                           ],
+                           "coords":"3361962,456258",
+                           "depDateTime":"20140227 17:44",
+                           "arrDelay":"-1",
+                           "depDelay":"1"
+                        }
+                     },
+                     {
+                        "name":"Essen Philharmonie",
+                        "nameWO":"Philharmonie",
+                        "place":"",
+                        "nameWithPlace":"",
+                        "omc":"5113000",
+                        "placeID":"18",
+                        "platformName":"Bstg. 2",
+                        "ref":{
+                           "id":"20009531",
+                           "area":"1",
+                           "platform":"2",
+                           "NaPTANID":"",
+                           "attrs":[
+
+                           ],
+                           "coords":"3361660,456901",
+                           "arrDateTime":"20140227 17:45",
+                           "depDateTime":"20140227 17:45",
+                           "arrDelay":"1",
+                           "depDelay":"1"
+                        }
+                     },
+                     {
+                        "name":"Essen Rüttenscheider Stern",
+                        "nameWO":"Rüttenscheider Stern",
+                        "place":"",
+                        "nameWithPlace":"",
+                        "omc":"5113000",
+                        "placeID":"18",
+                        "platformName":"Bstg. 2",
+                        "ref":{
+                           "id":"20009530",
+                           "area":"1",
+                           "platform":"2",
+                           "NaPTANID":"",
+                           "attrs":[
+
+                           ],
+                           "coords":"3361395,457774",
+                           "arrDateTime":"20140227 17:47",
+                           "depDateTime":"20140227 17:47",
+                           "arrDelay":"1",
+                           "depDelay":"1"
+                        }
+                     },
+                     {
+                        "name":"Essen Martinstr.",
+                        "nameWO":"Martinstr.",
+                        "place":"",
+                        "nameWithPlace":"",
+                        "omc":"5113000",
+                        "placeID":"18",
+                        "platformName":"Bstg. 2",
+                        "ref":{
+                           "id":"20009450",
+                           "area":"1",
+                           "platform":"2",
+                           "NaPTANID":"",
+                           "attrs":[
+
+                           ],
+                           "coords":"3361313,458171",
+                           "arrDateTime":"20140227 17:48",
+                           "depDateTime":"20140227 17:48",
+                           "arrDelay":"1",
+                           "depDelay":"1"
+                        }
+                     },
+                     {
+                        "name":"Essen Florastr.",
+                        "nameWO":"Florastr.",
+                        "place":"",
+                        "nameWithPlace":"",
+                        "omc":"5113000",
+                        "placeID":"18",
+                        "platformName":"Bstg. 2",
+                        "ref":{
+                           "id":"20009234",
+                           "area":"1",
+                           "platform":"2",
+                           "NaPTANID":"",
+                           "attrs":[
+
+                           ],
+                           "coords":"3361149,458993",
+                           "arrDateTime":"20140227 17:49",
+                           "depDateTime":"20140227 17:49",
+                           "arrDelay":"1",
+                           "depDelay":"1"
+                        }
+                     },
+                     {
+                        "name":"Essen Alfredusbad",
+                        "nameWO":"Alfredusbad",
+                        "place":"",
+                        "nameWithPlace":"",
+                        "omc":"5113000",
+                        "placeID":"18",
+                        "platformName":"Bstg. 2",
+                        "ref":{
+                           "id":"20009115",
+                           "area":"1",
+                           "platform":"2",
+                           "NaPTANID":"",
+                           "attrs":[
+
+                           ],
+                           "coords":"3361027,459596",
+                           "arrDateTime":"20140227 17:51",
+                           "arrDelay":"1",
+                           "depDelay":"-1"
+                        }
+                     }
+                  ],
+                  "frequency":{
+                     "hasFrequency":"0",
+                     "tripIndex":"0",
+                     "minTimeGap":"0",
+                     "maxTimeGap":"0",
+                     "avTimeGap":"0",
+                     "minDuration":"0",
+                     "maxDuration":"0",
+                     "avDuration":"0",
+                     "modes":[
+
+                     ]
+                  },
+                  "path":"3361962,456258 3361660,456901 3361660,456901 3361641,456938 3361635,456950 3361592,457029 3361579,457052 3361552,457095 3361545,457105 3361523,457149 3361507,457196 3361505,457246 3361396,457774 3361395,457774 3361313,458171 3361313,458171 3361149,458993 3361149,458993 3361123,459100 3361117,459140 3361105,459166 3361096,459218 3361093,459234 3361078,459306 3361063,459369 3361042,459456 3361046,459468 3361040,459498 3361034,459507 3361027,459543 3361030,459552 3 [...]
+               }
+            ],
+            "attrs":[
+
+            ]
+         }
+      }
+   ]
+}
\ No newline at end of file

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-perl/packages/libtravel-routing-de-vrr-perl.git



More information about the Pkg-perl-cvs-commits mailing list