Index: t/02subreq.t
===================================================================
--- t/02subreq.t        (revision 4389)
+++ t/02subreq.t        (working copy)
@@ -1,6 +1,6 @@
 package main;

-use Test::More tests => 9;
+use Test::More tests => 12;
 use lib 't/lib';
 use Catalyst::Test 'TestApp';
 use File::stat;
@@ -22,6 +22,12 @@
 }

 {
+    ok( my $response = request('/subtest_wrong'),    'List Sub Request 400'     );
+    is( $response->code, 200,                 'OK status code'  );
+    is( $response->content, '1334003',    'List request content', );
+}
+
+{
     ok( my $response = request('/subtest_params?value=abc'), 'Params Sub Request' );
     is( $response->code, 200, 'OK status code' );
     is( $response->content, '1abc3', 'Normal request content' );
Index: t/lib/TestApp.pm
===================================================================
--- t/lib/TestApp.pm    (revision 4389)
+++ t/lib/TestApp.pm    (working copy)
@@ -19,9 +19,16 @@
                     $c->subreq('/normal/4');
         $c->res->body($subreq);
     }
+
+    sub subtest_wrong : Global {
+        my ( $self, $c ) = @_;
+        my ($subreq, $response) = $c->subreq('/normal/3');
+        $c->res->body($subreq . $response->status);
+    }

     sub normal : Global {
         my ( $self, $c, $arg ) = @_;
+        $c->res->status(400) if ($arg == 3);
         $c->res->body($c->res->body().$arg);
     }

Index: SubRequest.pm
===================================================================
--- SubRequest.pm       (revision 4389)
+++ SubRequest.pm       (working copy)
@@ -12,8 +12,11 @@

     use Catalyst 'SubRequest';

-    $c->subreq('/test/foo/bar', { template => 'magic.tt' });
+    my $response_body = $c->subreq('/test/foo/bar', { template => 'magic.tt' });

+    # call in list context to get the Response object of the subreq'd action
+    my ($response_body, $response_object) = $c->subreq('/test/foo/bar', { template => 'magic.tt' });
+
 =head1 DESCRIPTION

 Make subrequests to actions in Catalyst. Uses the  catalyst
@@ -47,6 +50,16 @@
     local $c->req->{path};
     local $c->req->{parameters};

+    # new response object for subreq'd action
+    my $new_res = $c->response_class->new
+      ({ body    => '',
+         cookies => {},
+         headers => HTTP::Headers->new(),
+         status  => 200
+         });
+    my $orig_res = $c->res;
+    $c->res($new_res);
+
     $c->req->path($path);
     $c->req->params($params || {});
     $c->prepare_action;
@@ -55,7 +68,11 @@
     # FIXME: Hack until proper patch in NEXT.
     local $NEXT::NEXT{$c,'dispatch'};
     $c->dispatch;
-    return $c->res->body;
+
+    # replace response object with original
+    # return subreq'd action's response if in list context
+    $c->res($orig_res);
+    return (wantarray ? ($new_res->body, $new_res) : $new_res->body);
 }

 =head1 SEE ALSO
