Index: trunk/lib/Perlbal/Plugin/AtomStream.pm
===================================================================
--- trunk/lib/Perlbal/Plugin/AtomStream.pm (revision 431)
+++ trunk/lib/Perlbal/Plugin/AtomStream.pm (revision 580)
@@ -1,3 +1,5 @@
 package Perlbal::Plugin::AtomStream;
+
+use URI;
 
 use Perlbal;
@@ -6,5 +8,5 @@
 
 our @subs;    # subscribers
-our @recent;  # recent items in format [$epoch, $atom_ref]
+our @recent;  # recent items in format [$epoch, $atom_ref, $path_segments_arrayref]
 
 our $last_timestamp = 0;
@@ -14,9 +16,10 @@
 sub InjectFeed {
     my $class = shift;
-    my $atomref = shift;
+    my ($atomref, $path) = @_;
 
     # maintain queue of last 60 seconds worth of posts
     my $now = time();
-    push @recent, [ $now, $atomref ];
+    my @put_segments = URI->new($path)->path_segments;
+    push @recent, [ $now, $atomref, \@put_segments ];
     shift @recent while @recent && $recent[0][0] <= $now - 60;
 
@@ -30,4 +33,6 @@
         }
 
+        next unless filter(\@put_segments, $s->{scratch}{get_segments});
+        
         my $lag = $s->{write_buf_size};
 
@@ -58,4 +63,13 @@
 }
 
+sub filter {
+    my ($put, $get) = @_;
+    return 0 if scalar @$put < scalar @$get;
+    for( my $i = 0 ; $i < scalar @$get ; $i++) {
+        return 0 if $put->[$i] ne $get->[$i];
+    }
+    return 1;
+}
+
 # called when we're being added to a service
 sub register {
@@ -72,7 +86,10 @@
         my Perlbal::HTTPHeaders $hds = $self->{req_headers};
         return 0 unless $hds;
-        my $uri = $hds->request_uri;
-        return 0 unless $uri =~ m!^/atom-stream\.xml(?:\?since=(\d+))?$!;
-        my $since = $1 || 0;
+        my $uri = URI->new($hds->request_uri);
+        my @get_segments = $uri->path_segments;
+        $self->{scratch}{get_segments} = \@get_segments;
+        return 0 unless pop @get_segments eq 'atom-stream.xml';
+        my %params = $uri->query_form;
+        my $since = $params{since} =~ /\d+/ ? $params{since} : 0;
 
         my $res = $self->{res_headers} = Perlbal::HTTPHeaders->new_response(200);
@@ -90,4 +107,5 @@
             foreach my $item (@recent) {
                 next if $item->[0] < $since;
+                next unless filter($item->[2], \@get_segments);
                 $last_rv = $self->write($item->[1]);
             }
Index: trunk/lib/Perlbal/Plugin/AtomInject.pm
===================================================================
--- trunk/lib/Perlbal/Plugin/AtomInject.pm (revision 431)
+++ trunk/lib/Perlbal/Plugin/AtomInject.pm (revision 580)
@@ -22,6 +22,7 @@
 
         my $uri = $hds->request_uri;
-        return $self->send_response(400, "Invalid uri") unless $uri eq "/";
-
+        return $self->send_response(400, "Invalid uri") unless $uri =~ /^\//;
+        $self->{scratch}{path} = $uri;
+        
         # now abort the normal handle_put processing...
         return 1;
@@ -38,5 +39,5 @@
         $self->{read_ahead} = 0;
 
-        my $rv = eval { Perlbal::Plugin::AtomStream->InjectFeed(\$data); };
+        my $rv = eval { Perlbal::Plugin::AtomStream->InjectFeed(\$data, $self->{scratch}{path}); };
         return $self->send_response(200);
     });
