diff --git a/store/models.py b/store/models.py
index d84ac9d95150c9e744dda6b44d4136443525f74f..5927166f2fd7082bb0945b96428b3dd6282e2ccb 100644
--- a/store/models.py
+++ b/store/models.py
@@ -74,7 +74,7 @@ class ItemSet(db.Model):
         return len(self.items)
 
     def __repr__(self):
-        return f"id: {self.id}, description: {self.description}, items: {self.items}, quantity: {self.price}, price: { self.price() }"  # TODO: Rename price to quantity
+        return f"id: {self.id}, description: {self.description}, items: {self.items}, quantity: {self.price}, price: { self.price }"  # TODO: Rename price to quantity
 
 
 class User(db.Model, UserMixin):
diff --git a/store/routes.py b/store/routes.py
index fd157b035b9d4faeab29c967189690397f61e830..9d64c8741dcbaf5fa7a556795b71b408bb97705c 100644
--- a/store/routes.py
+++ b/store/routes.py
@@ -597,15 +597,15 @@ def checkout():
         total_price = total_price + item["price"]
     if request.method == "POST" and form.validate():
         session["address"] = str(form.address.data + ", " + form.postcode.data)
-        try:
-            for item_id, item, is_item_set in session["basket"]:
-                if is_item_set == True:
-                    sell_item(get_item_set_by_id(item_id))
-                else:
-                    sell_item(get_item_by_id(item_id))
-                return redirect(url_for("order_summary"))
-        except:
-            flash("One or more items in basket have already been sold!")
+        for item_id in session["basket"]:
+            item = session["basket"][item_id]
+            if item["is_item_set"] == True:
+                print("Sell item set: ", item_id)
+                sell_item_set(get_item_set_by_id(item_id))
+            else:
+                print("Sell item: ", item_id)
+                sell_item(get_item_by_id(item_id))
+        return redirect(url_for("order_summary"))
     csrf_token = generate_csrf()
     return render_template(
         "checkout.html",
diff --git a/store/utility.py b/store/utility.py
index 8100bee533c651ca87165a5157e2f21c1e990efa..2b20c98af45a59f108e043de05f828408f4523b6 100644
--- a/store/utility.py
+++ b/store/utility.py
@@ -82,10 +82,13 @@ def get_by_keyword(substring):
     This is most useful for a user keyword search.
     """
     substring = substring.lower()
-    return (
-        ItemSet.query.filter(func.lower(ItemSet.description.contains(substring))).all()
-        + Item.query.filter(func.lower(Item.description.contains(substring))).all()
-    )
+    items = Item.query.filter(func.lower(Item.description.contains(substring))).all()
+    items = [item for item in items if item.date_sold == None]
+    item_sets = ItemSet.query.filter(
+        func.lower(ItemSet.description.contains(substring))
+    ).all()
+
+    return item_sets + items
 
 
 def get_itemsets_by_item_id(item_id):
@@ -125,6 +128,17 @@ def remove_item_set(item):
     db.session.commit()
 
 
+def sell_item_set(item_set, date=datetime.datetime.today()):
+    for item in item_set.items:
+        print(item)
+        item.date_sold = date
+        print(item)
+
+    db.session.commit()
+    remove_item_set(item_set)
+    db.session.commit()
+
+
 def sell_item(item, date=datetime.datetime.today()):
     update_set(item)
     item.date_sold = date