diff --git a/Changelog b/Changelog
index c4b095580106a23af72f206cf5c3efa994d6a858..4e4ce89b71b241251e5dbe939241767d8a5f4870 100644
--- a/Changelog
+++ b/Changelog
@@ -1,3 +1,15 @@
+Travel::Routing::DE::VRR 2.19 - Sat May 02 2020
+
+    * Switch from WTFPL to Perl license (GPL 1+ or Artistic)
+    * Update VVO (Verkehrsverbund Oberelbe), VMV (Verkehrsgesellschaft
+      Mecklenburg-Vorpommern) and VGN (Verkehrsverbund Grossraum Nürnberg)
+      EFA urls
+    * Add VAG (Freiburger Verkehrs AG), MVV (Münchner Verkehrs- und
+      Tarifverbund), NVBW (Nahverkehrsgesellschaft Baden-Württemberg) services
+    * Re-add Verbundlinie (Verkehrsverbund Steiermark) service
+    * Remove IVB (Innsbrucker Verkehrsbetriebe) and VRNdelfi services as they
+      are no longer available
+
 Travel::Routing::DE::VRR 2.18 - Wed Feb 26 2020
 
     * Update KVV EFA URL
diff --git a/bin/efa b/bin/efa
index e038b48e5fdf5e60393c36e1c686e998b9c7413b..d0b21d6ce4dece0d39c33e4c0e8a2af6b06fa074 100755
--- a/bin/efa
+++ b/bin/efa
@@ -14,7 +14,7 @@ use Exception::Class;
 use Getopt::Long qw/:config no_ignore_case/;
 use List::Util qw(first);
 
-our $VERSION = '2.18';
+our $VERSION = '2.19';
 my $ignore_info;
 my $efa;
 my $efa_url = 'http://efa.vrr.de/vrr/XSLT_TRIP_REQUEST2';
@@ -457,7 +457,7 @@ efa - Command line client for EFA-based public transit routing services
 
 =head1 VERSION
 
-version 2.18
+version 2.19
 
 =head1 DESCRIPTION
 
diff --git a/lib/Travel/Routing/DE/EFA.pm b/lib/Travel/Routing/DE/EFA.pm
index 989b8fb2495825eecad227ae1ad28dfdb3a64da6..a1e07ffd6c8275a6c9bc68e62fe4765933fdb20e 100644
--- a/lib/Travel/Routing/DE/EFA.pm
+++ b/lib/Travel/Routing/DE/EFA.pm
@@ -3,6 +3,7 @@ package Travel::Routing::DE::EFA;
 use strict;
 use warnings;
 use 5.010;
+use utf8;
 
 no if $] >= 5.018, warnings => "experimental::smartmatch";
 
@@ -41,7 +42,7 @@ use Exception::Class (
 	},
 );
 
-our $VERSION = '2.18';
+our $VERSION = '2.19';
 
 sub set_time {
 	my ( $self, %conf ) = @_;
@@ -1013,7 +1014,7 @@ Travel::Routing::DE::EFA - unofficial interface to EFA-based itinerary services
 
 =head1 VERSION
 
-version 2.18
+version 2.19
 
 =head1 DESCRIPTION
 
diff --git a/lib/Travel/Routing/DE/EFA/Route.pm b/lib/Travel/Routing/DE/EFA/Route.pm
index 10d71d0e86f5bae94d832f6c1b1e62a28cadfe7f..61a7c31ff9b72403b07a3dede4510ce626c7ad7b 100644
--- a/lib/Travel/Routing/DE/EFA/Route.pm
+++ b/lib/Travel/Routing/DE/EFA/Route.pm
@@ -8,7 +8,7 @@ use parent 'Class::Accessor';
 
 use Travel::Routing::DE::EFA::Route::Part;
 
-our $VERSION = '2.18';
+our $VERSION = '2.19';
 
 Travel::Routing::DE::EFA::Route->mk_ro_accessors(
 	qw(duration ticket_text ticket_type fare_adult fare_child vehicle_time));
@@ -52,7 +52,7 @@ Travel::Routing::DE::EFA::Route - Single route (connection) between two points
 
 =head1 VERSION
 
-version 2.18
+version 2.19
 
 =head1 DESCRIPTION
 
diff --git a/lib/Travel/Routing/DE/EFA/Route/Message.pm b/lib/Travel/Routing/DE/EFA/Route/Message.pm
index d0afe5862005aa1b59254b425b1180b73e75b4a2..ffa707cfd53bdd87db0e4c2c4135c1a447c18cf3 100644
--- a/lib/Travel/Routing/DE/EFA/Route/Message.pm
+++ b/lib/Travel/Routing/DE/EFA/Route/Message.pm
@@ -6,7 +6,7 @@ use 5.010;
 
 use parent 'Class::Accessor';
 
-our $VERSION = '2.18';
+our $VERSION = '2.19';
 
 Travel::Routing::DE::EFA::Route::Message->mk_ro_accessors(
 	qw(is_detailed summary subject subtitle raw_content));
@@ -58,7 +58,7 @@ route or route part.
 
 =head1 VERSION
 
-version 2.18
+version 2.19
 
 =head1 DESCRIPTION
 
diff --git a/lib/Travel/Routing/DE/EFA/Route/Part.pm b/lib/Travel/Routing/DE/EFA/Route/Part.pm
index 7bee34abff85f38ac6062a5b12e79d08814e9025..3a15fc3771854ffc9deee9838b8541c090d1b342 100644
--- a/lib/Travel/Routing/DE/EFA/Route/Part.pm
+++ b/lib/Travel/Routing/DE/EFA/Route/Part.pm
@@ -6,7 +6,7 @@ use 5.010;
 
 use parent 'Class::Accessor';
 
-our $VERSION = '2.18';
+our $VERSION = '2.19';
 
 Travel::Routing::DE::EFA::Route::Part->mk_ro_accessors(
 	qw(arrival_platform arrival_stop
@@ -154,7 +154,7 @@ points, without interchanges
 
 =head1 VERSION
 
-version 2.18
+version 2.19
 
 =head1 DESCRIPTION
 
diff --git a/lib/Travel/Routing/DE/VRR.pm b/lib/Travel/Routing/DE/VRR.pm
index 428133d68597c2051c005d71d65635fcf4bf2a41..126748ce9d02d992f583573aa86bc98e2e6f8e7e 100644
--- a/lib/Travel/Routing/DE/VRR.pm
+++ b/lib/Travel/Routing/DE/VRR.pm
@@ -6,7 +6,7 @@ use 5.010;
 
 no if $] >= 5.018, warnings => "experimental::smartmatch";
 
-our $VERSION = '2.18';
+our $VERSION = '2.19';
 
 use parent 'Travel::Routing::DE::EFA';
 
@@ -49,7 +49,7 @@ Travel::Routing::DE::VRR - unofficial interface to the efa.vrr.de German itinera
 
 =head1 VERSION
 
-version 2.18
+version 2.19
 
 =head1 DESCRIPTION