--- XPath/Function.pm	2003-01-26 19:30:43.000000000 +0000
+++ /Users/richardc/hck/perl586/lib/site_perl/5.8.6/XML/XPath/Function.pm	2005-06-15 21:15:28.000000000 +0100
@@ -195,6 +195,8 @@
     return XML::XPath::Boolean->False;
 }
 
+
+my ($before, $after);
 sub contains {
     my $self = shift;
     my ($node, @params) = @_;
@@ -202,6 +204,7 @@
     my $value = $params[1]->string_value;
     if ($params[0]->string_value =~ /(.*?)\Q$value\E(.*)/) {
         # $1 and $2 stored for substring funcs below
+	($before, $after) = ($1, $2);
         # TODO: Fix this nasty implementation!
         return XML::XPath::Boolean->True;
     }
@@ -213,7 +216,7 @@
     my ($node, @params) = @_;
     die "starts-with: incorrect number of params\n" unless @params == 2;
     if ($self->contains($node, @params)->value) {
-        return XML::XPath::Literal->new($1); # hope that works!
+        return XML::XPath::Literal->new($before);
     }
     else {
         return XML::XPath::Literal->new('');
@@ -225,7 +228,7 @@
     my ($node, @params) = @_;
     die "starts-with: incorrect number of params\n" unless @params == 2;
     if ($self->contains($node, @params)->value) {
-        return XML::XPath::Literal->new($2);
+        return XML::XPath::Literal->new($after);
     }
     else {
         return XML::XPath::Literal->new('');
