diff --git a/lib/Catalyst/Engine.pm b/lib/Catalyst/Engine.pm
index c414896..65ef3fe 100644
--- a/lib/Catalyst/Engine.pm
+++ b/lib/Catalyst/Engine.pm
@@ -394,14 +394,17 @@ sub prepare_body_parameters {
 
 =head2 $self->prepare_parameters($c)
 
-sets up parameters from query and post parameters.
+Sets up parameters from query and post parameters.
+If parameters have already been set up will clear
+existing parameters and set up again.
 
 =cut
 
 sub prepare_parameters {
     my ( $self, $c ) = @_;
 
-    $c->request->parameters;
+    $c->request->_clear_parameters;
+    return $c->request->parameters;
 }
 
 =head2 $self->prepare_path($c)
diff --git a/lib/Catalyst/Request.pm b/lib/Catalyst/Request.pm
index d2c1c7f..b8d05b4 100644
--- a/lib/Catalyst/Request.pm
+++ b/lib/Catalyst/Request.pm
@@ -141,7 +141,8 @@ has uploads => (
 has parameters => (
     is => 'rw',
     lazy => 1,
-    builder => 'prepare_parameters',
+    builder => '_build_parameters',
+    clearer => '_clear_parameters',
 );
 
 # TODO:
@@ -154,6 +155,14 @@ has parameters => (
 
 sub prepare_parameters {
     my ( $self ) = @_;
+    $self->_clear_parameters;
+    return $self->parameters;
+}
+
+
+
+sub _build_parameters {
+    my ( $self ) = @_;
     my $parameters = {};
     my $body_parameters = $self->body_parameters;
     my $query_parameters = $self->query_parameters;
@@ -870,7 +879,8 @@ request method, hostname requested etc.
 Ensures that the body has been parsed, then builds the parameters, which are
 combined from those in the request and those in the body.
 
-This method is the builder for the 'parameters' attribute.
+If parameters have already been set will clear the parameters and build them again.
+
 
 =head2 meta
 
diff --git a/t/lib/TestApp/Controller/Dump.pm b/t/lib/TestApp/Controller/Dump.pm
index 84ebe8d..0864822 100644
--- a/t/lib/TestApp/Controller/Dump.pm
+++ b/t/lib/TestApp/Controller/Dump.pm
@@ -27,6 +27,20 @@ sub request : Action Relative {
     $c->forward('TestApp::View::Dump::Request');
 }
 
+sub prepare_parameters : Action Relative {
+    my ( $self, $c ) = @_;
+
+    die 'Must pass in parameters' unless keys %{$c->req->parameters};
+
+    $c->req->parameters( {} );
+    die 'parameters are not empty' if keys %{$c->req->parameters};
+
+    # Now reset and reload
+    $c->prepare_parameters;
+    die 'Parameters were not reset' unless keys %{$c->req->parameters};
+
+    $c->forward('TestApp::View::Dump::Request');
+}
 sub response : Action Relative {
     my ( $self, $c ) = @_;
     $c->forward('TestApp::View::Dump::Response');
