diff --git a/registrasion/controllers/flag.py b/registrasion/controllers/flag.py
index 77d6476d..c094da59 100644
--- a/registrasion/controllers/flag.py
+++ b/registrasion/controllers/flag.py
@@ -15,25 +15,6 @@ from registrasion.models import inventory
 
 class FlagController(object):
 
-    SINGLE = True
-    PLURAL = False
-    NONE = True
-    SOME = False
-    MESSAGE = {
-        NONE: {
-            SINGLE:
-                "%(items)s is no longer available to you",
-            PLURAL:
-                "%(items)s are no longer available to you",
-        },
-        SOME: {
-            SINGLE:
-                "Only %(remainder)d of the following item remains: %(items)s",
-            PLURAL:
-                "Only %(remainder)d of the following items remain: %(items)s"
-        },
-    }
-
     @classmethod
     def test_flags(
             cls, user, products=None, product_quantities=None):
@@ -103,9 +84,7 @@ class FlagController(object):
             met = consumed <= remainder
 
             if not met:
-                items = ", ".join(str(product) for product in all_products)
-                base = cls.MESSAGE[remainder == 0][len(all_products) == 1]
-                message = base % {"items": items, "remainder": remainder}
+                message = cls._error_message(all_products, remainder)
 
             for product in all_products:
                 if condition.is_disable_if_false:
@@ -135,13 +114,11 @@ class FlagController(object):
             if f.dif > 0 and f.dif != dif_count[product]:
                 do_not_disable[product] = False
                 if product not in messages:
-                    messages[product] = "Some disable-if-false " \
-                                        "conditions were not met"
+                    messages[product] = cls._error_message([product], 0)
             if f.eit > 0 and product not in do_enable:
                 do_enable[product] = False
                 if product not in messages:
-                    messages[product] = "Some enable-if-true " \
-                                        "conditions were not met"
+                    messages[product] = cls._error_message([product], 0)
 
         for product in itertools.chain(do_not_disable, do_enable):
             f = total_flags.get(product)
@@ -160,6 +137,33 @@ class FlagController(object):
 
         return error_fields
 
+    SINGLE = True
+    PLURAL = False
+    NONE = True
+    SOME = False
+    MESSAGE = {
+        NONE: {
+            SINGLE:
+                "%(items)s is no longer available to you",
+            PLURAL:
+                "%(items)s are no longer available to you",
+        },
+        SOME: {
+            SINGLE:
+                "Only %(remainder)d of the following item remains: %(items)s",
+            PLURAL:
+                "Only %(remainder)d of the following items remain: %(items)s"
+        },
+    }
+
+    @classmethod
+    def _error_message(cls, affected, remainder):
+        product_strings = (str(product) for product in affected)
+        items = ", ".join(product_strings)
+        base = cls.MESSAGE[remainder == 0][len(affected) == 1]
+        message = base % {"items": items, "remainder": remainder}
+        return message
+
     @classmethod
     @BatchController.memoise
     def _filtered_flags(cls, user):
diff --git a/registrasion/views.py b/registrasion/views.py
index 3d2a3c04..7c3634d3 100644
--- a/registrasion/views.py
+++ b/registrasion/views.py
@@ -451,7 +451,8 @@ def _set_quantities_from_products_form(products_form, current_cart):
     pks = [i[0] for i in quantities]
     products = inventory.Product.objects.filter(
         id__in=pks,
-    ).select_related("category")
+    ).select_related("category").order_by("id")
+    quantities.sort(key = lambda i: i[0])
 
     product_quantities = [
         (product, id_to_quantity[product.id]) for product in products