diff --git a/Bugzilla/Classification.pm b/Bugzilla/Classification.pm
index 74719179a378382c2144d59d5d9df1bb43e95391..2b35a8839146ce5f2c6a4b702005e5740bfa6da3 100644
--- a/Bugzilla/Classification.pm
+++ b/Bugzilla/Classification.pm
@@ -15,7 +15,8 @@ use Bugzilla::Util;
 use Bugzilla::Error;
 use Bugzilla::Product;
 
-use base qw(Bugzilla::Field::ChoiceInterface Bugzilla::Object);
+use base qw(Bugzilla::Field::ChoiceInterface Bugzilla::Object Exporter);
+@Bugzilla::Classification::EXPORT = qw(sort_products_by_classification);
 
 ###############################
 ####    Initialization     ####
@@ -152,6 +153,38 @@ sub products {
 sub description { return $_[0]->{'description'}; }
 sub sortkey     { return $_[0]->{'sortkey'};     }
 
+
+###############################
+####       Helpers         ####
+###############################
+
+# This function is a helper to sort products to be listed
+# in global/choose-product.html.tmpl.
+
+sub sort_products_by_classification {
+    my $products = shift;
+    my $list;
+
+    if (Bugzilla->params->{'useclassification'}) {
+        my $class = {};
+        # Get all classifications with at least one product.
+        foreach my $product (@$products) {
+            $class->{$product->classification_id}->{'object'} ||=
+                new Bugzilla::Classification($product->classification_id);
+            # Nice way to group products per classification, without querying
+            # the DB again.
+            push(@{$class->{$product->classification_id}->{'products'}}, $product);
+        }
+        $list = [sort {$a->{'object'}->sortkey <=> $b->{'object'}->sortkey
+                       || lc($a->{'object'}->name) cmp lc($b->{'object'}->name)}
+                      (values %$class)];
+    }
+    else {
+        $list = [{object => undef, products => $products}];
+    }
+    return $list;
+}
+
 1;
 
 __END__
@@ -208,4 +241,21 @@ A Classification is a higher-level grouping of Products.
 
 =back
 
+=head1 SUBROUTINES
+
+=over
+
+=item C<sort_products_by_classification>
+
+ Description: This is a helper which returns a list of products sorted
+              by classification in a form suitable to be passed to the
+              global/choose-product.html.tmpl template.
+
+ Params:      An arrayref of product objects.
+
+ Returns:     An arrayref of hashes suitable to be passed to
+              global/choose-product.html.tmpl.
+
+=back
+
 =cut
diff --git a/describecomponents.cgi b/describecomponents.cgi
index 33976a3851686625cbefa77653c1b96be42b8733..3a70f29bb0908e8ab6566164a80cf894d9730cd9 100755
--- a/describecomponents.cgi
+++ b/describecomponents.cgi
@@ -13,6 +13,7 @@ use Bugzilla;
 use Bugzilla::Constants;
 use Bugzilla::Util;
 use Bugzilla::Error;
+use Bugzilla::Classification;
 use Bugzilla::Product;
 
 my $user = Bugzilla->login();
@@ -40,7 +41,7 @@ unless ($product && $user->can_access_product($product->name)) {
     # product only, to not confuse the user with components of a
     # product he didn't request.
     elsif (scalar(@products) > 1 || $product_name) {
-        $vars->{'classifications'} = [{object => undef, products => \@products}];
+        $vars->{'classifications'} = sort_products_by_classification(\@products);
         $vars->{'target'} = "describecomponents.cgi";
         # If an invalid product name is given, or the user is not
         # allowed to access that product, a message is displayed
diff --git a/enter_bug.cgi b/enter_bug.cgi
index b571f8f4425a407492d29fd4620b94d76f07d07f..7a8cebf43c5c94f3ce76427f13aabf7711bc9b2c 100755
--- a/enter_bug.cgi
+++ b/enter_bug.cgi
@@ -25,11 +25,8 @@ use Bugzilla::Constants;
 use Bugzilla::Util;
 use Bugzilla::Error;
 use Bugzilla::Bug;
-use Bugzilla::User;
 use Bugzilla::Hook;
-use Bugzilla::Product;
 use Bugzilla::Classification;
-use Bugzilla::Keyword;
 use Bugzilla::Token;
 use Bugzilla::Field;
 use Bugzilla::Status;
@@ -67,23 +64,7 @@ if ($product_name eq '') {
     my @classifications;
 
     unless ($classification && $classification ne '__all') {
-        if (Bugzilla->params->{'useclassification'}) {
-            my $class;
-            # Get all classifications with at least one enterable product.
-            foreach my $product (@enterable_products) {
-                $class->{$product->classification_id}->{'object'} ||=
-                    new Bugzilla::Classification($product->classification_id);
-                # Nice way to group products per classification, without querying
-                # the DB again.
-                push(@{$class->{$product->classification_id}->{'products'}}, $product);
-            }
-            @classifications = sort {$a->{'object'}->sortkey <=> $b->{'object'}->sortkey
-                                     || lc($a->{'object'}->name) cmp lc($b->{'object'}->name)}
-                                    (values %$class);
-        }
-        else {
-            @classifications = ({object => undef, products => \@enterable_products});
-        }
+        @classifications = @{sort_products_by_classification(\@enterable_products)};
     }
 
     unless ($classification) {