diff --git a/code/_globalvars/lists/objects.dm b/code/_globalvars/lists/objects.dm
index b5ba352bab1..14c752613bf 100644
--- a/code/_globalvars/lists/objects.dm
+++ b/code/_globalvars/lists/objects.dm
@@ -13,7 +13,6 @@ GLOBAL_LIST_EMPTY(deliverybeacontags) //list of all tags associated with d
GLOBAL_LIST_EMPTY(nuke_list)
GLOBAL_LIST_EMPTY(alarmdisplay) //list of all machines or programs that can display station alerts
GLOBAL_LIST_EMPTY(singularities) //list of all singularities on the station (actually technically all engines)
-GLOBAL_LIST_EMPTY(vending_cache)
GLOBAL_LIST(chemical_reactions_list) //list of all /datum/chemical_reaction datums. Used during chemical reactions
GLOBAL_LIST(chemical_reagents_list) //list of all /datum/reagent datums indexed by reagent id. Used by chemistry stuff
diff --git a/code/datums/browser.dm b/code/datums/browser.dm
index 54dd63b885e..e5d466845e6 100644
--- a/code/datums/browser.dm
+++ b/code/datums/browser.dm
@@ -39,8 +39,12 @@
//title_image = ntitle_image
/datum/browser/proc/add_stylesheet(name, file)
- stylesheets["[ckey(name)].css"] = file
- register_asset("[ckey(name)].css", file)
+ if (istype(name, /datum/asset/spritesheet))
+ var/datum/asset/spritesheet/sheet = name
+ stylesheets["spritesheet_[sheet.name].css"] = "data/spritesheets/[sheet.name]"
+ else
+ stylesheets["[ckey(name)].css"] = file
+ register_asset("[ckey(name)].css", file)
/datum/browser/proc/add_script(name, file)
scripts["[ckey(name)].js"] = file
diff --git a/code/modules/client/asset_cache.dm b/code/modules/client/asset_cache.dm
index 4aacf8a480b..82a9d54184b 100644
--- a/code/modules/client/asset_cache.dm
+++ b/code/modules/client/asset_cache.dm
@@ -663,6 +663,37 @@ GLOBAL_LIST_EMPTY(asset_datums)
Insert(initial(D.id), I)
return ..()
+/datum/asset/spritesheet/vending
+ name = "vending"
+
+/datum/asset/spritesheet/vending/register()
+ for (var/k in GLOB.vending_products)
+ var/atom/item = k
+
+
+ var/icon_file
+ var/icon_state
+ var/icon/I
+
+
+ if (!ispath(item, /atom))
+ continue
+
+ icon_file = initial(item.icon)
+ icon_state = initial(item.icon_state)
+
+ if(icon_state in icon_states(icon_file))
+ I = icon(icon_file, icon_state, SOUTH)
+ else
+ item = new item()
+ I = icon(item.icon, item.icon_state, SOUTH)
+ qdel(item)
+
+ var/imgid = replacetext(replacetext("[item]", "/obj/item/", ""), "/", "-")
+
+ Insert(imgid, I)
+ return ..()
+
/datum/asset/simple/genetics
assets = list(
"dna_discovered.png" = 'html/dna_discovered.png',
diff --git a/code/modules/vending/_vending.dm b/code/modules/vending/_vending.dm
index a7eef5ca80c..6b2aeaadc82 100644
--- a/code/modules/vending/_vending.dm
+++ b/code/modules/vending/_vending.dm
@@ -167,14 +167,7 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C
if (dump_amount >= 16)
return
-/obj/machinery/vending/proc/GetIconForProduct(datum/data/vending_product/P)
- if(GLOB.vending_cache[P.product_path])
- return GLOB.vending_cache[P.product_path]
-
- var/product = new P.product_path()
- GLOB.vending_cache[P.product_path] = icon2base64(getFlatIcon(product, no_anim = TRUE))
- qdel(product)
- return GLOB.vending_cache[P.product_path]
+GLOBAL_LIST_EMPTY(vending_products)
/obj/machinery/vending/proc/build_inventory(list/productlist, list/recordlist, start_empty = FALSE)
for(var/typepath in productlist)
@@ -184,6 +177,7 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C
var/atom/temp = typepath
var/datum/data/vending_product/R = new /datum/data/vending_product()
+ GLOB.vending_products[typepath] = 1
R.name = initial(temp.name)
R.product_path = typepath
if(!start_empty)
@@ -322,7 +316,7 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C
return ..()
/obj/machinery/vending/ui_interact(mob/user)
- var/dat = ""
+ var/list/dat = list()
var/datum/bank_account/account
var/mob/living/carbon/human/H
var/obj/item/card/id/C
@@ -336,8 +330,8 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C
dat += "No account on registered ID card!
"
if(onstation && C && C.registered_account)
account = C.registered_account
- dat += "