diff --git a/Changelog b/Changelog
index 24c36ca2ec077f542013aec70073c954ae144cff..22a6e2b3c939ba25a60c23bd5602e0f6b7614fbc 100644
--- a/Changelog
+++ b/Changelog
@@ -1,3 +1,7 @@
+git HEAD
+
+    * Detect ambiguous input errors (available via errstr)
+
 Travel::Status::DE::DeutscheBahn 1.00 - Sun Sep 04 2011
 
     [db-ris]
diff --git a/lib/Travel/Status/DE/DeutscheBahn.pm b/lib/Travel/Status/DE/DeutscheBahn.pm
index bf7ba560a7914c5b82f3cdbe304c31d4c753abff..4e9004d7de7c3eec9a127bffe6a5c9b024655e77 100644
--- a/lib/Travel/Status/DE/DeutscheBahn.pm
+++ b/lib/Travel/Status/DE/DeutscheBahn.pm
@@ -73,6 +73,8 @@ sub new {
 		suppress_warnings => 1,
 	);
 
+	$ref->check_input_error();
+
 	return $ref;
 }
 
@@ -96,6 +98,31 @@ sub new_from_html {
 	return bless( $ref, $obj );
 }
 
+sub check_input_error {
+	my ($self) = @_;
+
+	my $xp_errdiv = XML::LibXML::XPathExpression->new(
+		'//div[@class = "errormsg leftMargin"]');
+	my $xp_opts
+	  = XML::LibXML::XPathExpression->new('//select[@class = "error"]');
+	my $xp_values = XML::LibXML::XPathExpression->new('./option');
+
+	my $e_errdiv = ( $self->{tree}->findnodes($xp_errdiv) )[0];
+	my $e_opts   = ( $self->{tree}->findnodes($xp_opts) )[0];
+
+	if ($e_errdiv) {
+		$self->{errstr} = $e_errdiv->textContent;
+
+		if ($e_opts) {
+			my @nodes = ( $e_opts->findnodes($xp_values) );
+			$self->{errstr}
+			  .= join( q{}, map { "\n" . $_->textContent } @nodes );
+		}
+	}
+
+	return;
+}
+
 sub errstr {
 	my ($self) = @_;