diff --git a/Bugzilla/Product.pm b/Bugzilla/Product.pm
index ddf60177d913b7fe067b6bfb458e024f081c08a0..7feaa48623350ab16ddbb02bec99ab9d321f1e24 100644
--- a/Bugzilla/Product.pm
+++ b/Bugzilla/Product.pm
@@ -112,6 +112,7 @@ sub create {
     my $create_series = delete $params->{create_series};
 
     my $product = $class->insert_create_data($params);
+    Bugzilla->user->clear_product_cache();
 
     # Add the new version and milestone into the DB as valid values.
     Bugzilla::Version->create({name => $version, product => $product});
@@ -364,6 +365,7 @@ sub update {
     $dbh->bz_commit_transaction();
     # Changes have been committed.
     delete $self->{check_group_controls};
+    Bugzilla->user->clear_product_cache();
 
     # Now that changes have been committed, we can send emails to voters.
     foreach my $msg (@msgs) {
diff --git a/Bugzilla/User.pm b/Bugzilla/User.pm
index 50147f90a764fccf7b7d29aba4ca4f50ce68ed69..7057ec90aa8ede14ab261537059fbeaba7ee32f6 100644
--- a/Bugzilla/User.pm
+++ b/Bugzilla/User.pm
@@ -659,6 +659,13 @@ sub visible_bugs {
     return [grep { $visible_cache->{blessed $_ ? $_->id : $_} } @$bugs];
 }
 
+sub clear_product_cache {
+    my $self = shift;
+    delete $self->{enterable_products};
+    delete $self->{selectable_products};
+    delete $self->{selectable_classifications};
+}
+
 sub can_see_product {
     my ($self, $product_name) = @_;
 
@@ -1962,6 +1969,12 @@ care of by the constructor. However, when updating the email address, the
 user may be placed into different groups, based on a new email regexp. This
 method should be called in such a case to force reresolution of these groups.
 
+=item C<clear_product_cache>
+
+Clears the stored values for L</get_selectable_products>, 
+L</get_enterable_products>, etc. so that their data will be read from
+the database again. Used mostly by L<Bugzilla::Product>.
+
 =item C<get_selectable_products>
 
  Description: Returns all products the user is allowed to access. This list