diff --git a/code/game/objects/structures/guncase.dm b/code/game/objects/structures/guncase.dm
index c7073660865..7f8b1a45203 100644
--- a/code/game/objects/structures/guncase.dm
+++ b/code/game/objects/structures/guncase.dm
@@ -60,36 +60,57 @@
if(iscyborg(user) || isalien(user))
return
if(contents.len && open)
- ShowWindow(user)
+ show_menu(user)
else
open = !open
update_icon()
-/obj/structure/guncase/proc/ShowWindow(mob/user)
- var/dat = {"
-
Stored Guns
-
"}
- if(LAZYLEN(contents))
- for(var/i in 1 to contents.len)
- var/obj/item/I = contents[i]
- dat += "[I.name]
"
- dat += "
"
+/**
+ * show_menu: Shows a radial menu to a user consisting of an available weaponry for taking
+ *
+ * Arguments:
+ * * user The mob to which we are showing the radial menu
+ */
+/obj/structure/guncase/proc/show_menu(mob/user)
+ if(!LAZYLEN(contents))
+ return
- var/datum/browser/popup = new(user, "gunlocker", "[name]
", 350, 300)
- popup.set_content(dat)
- popup.open(FALSE)
+ var/list/display_names = list()
+ var/list/items = list()
+ for(var/i in 1 to length(contents))
+ var/obj/item/thing = contents[i]
+ display_names["[thing.name] ([i])"] = REF(thing)
+ var/image/item_image = image(icon = thing.icon, icon_state = thing.icon_state)
+ if(length(thing.overlays))
+ item_image.copy_overlays(thing)
+ items += list("[thing.name] ([i])" = item_image)
-/obj/structure/guncase/Topic(href, href_list)
- if(href_list["retrieve"])
- var/obj/item/O = locate(href_list["retrieve"]) in contents
- if(!O || !istype(O))
- return
- if(!usr.canUseTopic(src, BE_CLOSE) || !open)
- return
- if(ishuman(usr))
- if(!usr.put_in_hands(O))
- O.forceMove(get_turf(src))
- update_icon()
+ var/pick = show_radial_menu(user, src, items, custom_check = CALLBACK(src, .proc/check_menu, user), radius = 36, require_near = TRUE)
+ if(!pick)
+ return
+
+ var/weapon_reference = display_names[pick]
+ var/obj/item/weapon = locate(weapon_reference) in contents
+ if(!istype(weapon))
+ return
+ if(!user.put_in_hands(weapon))
+ weapon.forceMove(get_turf(src))
+ update_icon()
+
+/**
+ * check_menu: Checks if we are allowed to interact with a radial menu
+ *
+ * Arguments:
+ * * user The mob interacting with a menu
+ */
+/obj/structure/guncase/proc/check_menu(mob/living/carbon/human/user)
+ if(!open)
+ return FALSE
+ if(!istype(user))
+ return FALSE
+ if(user.incapacitated())
+ return FALSE
+ return TRUE
/obj/structure/guncase/handle_atom_del(atom/A)
update_icon()