diff --git a/Changelog b/Changelog
index 913de83937fa8a0f3e9f8d068f73c734e1c775f5..12e97e6af7ba010e4b20e4ab6943d92622ae6375 100644
--- a/Changelog
+++ b/Changelog
@@ -1,3 +1,8 @@
+git HEAD
+
+    * efa: Handle UTF8 in place/stop input
+    * Travel::Routing::DE::VRR: Handle decoded input with non-ASCII characters
+
 Travel::Routing::DE::VRR 2.03 - Thu Jul 4 2013
 
     * Disable smartmatch warnings on perl >= 5.018
diff --git a/bin/efa b/bin/efa
index 583a48c26811c5ab8d14697ce487187af578728e..a6787f9ab70ed2981f6a9e93c15425542570773b 100755
--- a/bin/efa
+++ b/bin/efa
@@ -10,6 +10,7 @@ no if $] >= 5.018, warnings => "experimental::smartmatch";
 
 use utf8;
 
+use Encode qw(decode);
 use Travel::Routing::DE::VRR;
 use Exception::Class;
 use Getopt::Long qw/:config no_ignore_case/;
@@ -176,6 +177,12 @@ if ( not( @from and @to ) ) {
 for my $pair ( [ \@from, \$from_type ], [ \@via, \$via_type ],
 	[ \@to, \$to_type ], )
 {
+
+	if ( @{ $pair->[0] } ) {
+		$pair->[0]->[0] = decode( 'UTF-8', $pair->[0]->[0] );
+		$pair->[0]->[1] = decode( 'UTF-8', $pair->[0]->[1] );
+	}
+
 	next if ( not defined $pair->[0]->[1] );
 
 	if (
diff --git a/lib/Travel/Routing/DE/VRR.pm b/lib/Travel/Routing/DE/VRR.pm
index 29a30b3d9e5a7e5d7b42a202b854daa280e8cdde..28dcf5807741bfbe884fa000593911b5f074f3d1 100644
--- a/lib/Travel/Routing/DE/VRR.pm
+++ b/lib/Travel/Routing/DE/VRR.pm
@@ -7,7 +7,7 @@ use 5.010;
 no if $] >= 5.018, warnings => "experimental::smartmatch";
 
 use Carp qw(cluck);
-use Encode qw(decode);
+use Encode qw(decode encode);
 use Travel::Routing::DE::VRR::Route;
 use LWP::UserAgent;
 use XML::LibXML;
@@ -236,6 +236,9 @@ sub place {
 		);
 	}
 
+	$place = encode( 'ISO-8859-15', $place );
+	$stop  = encode( 'ISO-8859-15', $stop );
+
 	$type //= 'stop';
 
 	@{ $self->{post} }{ "place_${which}", "name_${which}" } = ( $place, $stop );