diff --git a/code/game/objects/structures/medkit.dm b/code/game/objects/structures/medkit.dm
new file mode 100644
index 00000000..a05f0983
--- /dev/null
+++ b/code/game/objects/structures/medkit.dm
@@ -0,0 +1,154 @@
+/obj/structure/medkit_cabinet
+ name = "Medkit Cabinet"
+ desc = "A small wall mounted cabinet designed to hold a medical kit."
+ icon = 'icons/obj/wallmounts.dmi'
+ icon_state = "medkit_closed"
+ anchored = TRUE
+ density = FALSE
+ max_integrity = 200
+ integrity_failure = 50
+ var/obj/item/storage/firstaid/regular/stored_medkit
+ var/opened = FALSE
+
+/obj/structure/medkit_cabinet/Initialize(mapload, ndir, building)
+ . = ..()
+ if(building)
+ setDir(ndir)
+ pixel_x = (dir & 3)? 0 : (dir == 4 ? -27 : 27)
+ pixel_y = (dir & 3)? (dir ==1 ? -30 : 30) : 0
+ opened = TRUE
+ icon_state = "medkit_empty"
+ else
+ stored_medkit = new /obj/item/storage/firstaid/regular(src)
+
+/obj/structure/medkit_cabinet/examine(mob/user)
+ ..()
+ to_chat(user, "Alt-click to [opened ? "close":"open"] it.")
+
+/obj/structure/medkit_cabinet/Destroy()
+ if(stored_medkit)
+ qdel(stored_medkit)
+ stored_medkit = null
+ return ..()
+
+//obj/structure/medkit_cabinet/contents_explosion(severity, target)
+ //if(stored_medkit)
+ //stored_medkit.ex_act(severity, target)
+
+/obj/structure/medkit_cabinet/handle_atom_del(atom/A)
+ if(A == stored_medkit)
+ stored_medkit = null
+ update_icon()
+
+/obj/structure/medkit_cabinet/attackby(obj/item/I, mob/user, params)
+ if(istype(I, /obj/item/wrench) && !stored_medkit)
+ to_chat(user, "You start unsecuring [name]...")
+ I.play_tool_sound(src)
+ if(I.use_tool(src, user, 60))
+ playsound(loc, 'sound/items/deconstruct.ogg', 50, 1)
+ to_chat(user, "You unsecure [name].")
+ deconstruct(TRUE)
+ return
+
+ if(iscyborg(user) || isalien(user))
+ return
+ if(istype(I, /obj/item/storage/firstaid))
+ if(!stored_medkit && opened)
+ if(!user.transferItemToLoc(I, src))
+ return
+ stored_medkit = I
+ to_chat(user, "You place [I] in [src].")
+ update_icon()
+ return TRUE
+ else
+ toggle_cabinet(user)
+ else if(user.a_intent != INTENT_HARM)
+ toggle_cabinet(user)
+ else
+ return ..()
+
+
+/obj/structure/medkit_cabinet/attack_hand(mob/user)
+ . = ..()
+ if(.)
+ return
+ if(iscyborg(user) || isalien(user))
+ return
+ if(stored_medkit)
+ user.put_in_hands(stored_medkit)
+ to_chat(user, "You take [stored_medkit] from [src].")
+ stored_medkit = null
+ if(!opened)
+ opened = 1
+ playsound(loc, 'sound/machines/click.ogg', 15, 1, -3)
+ update_icon()
+ else
+ toggle_cabinet(user)
+
+
+/obj/structure/medkit_cabinet/attack_tk(mob/user)
+ if(stored_medkit)
+ stored_medkit.forceMove(loc)
+ to_chat(user, "You telekinetically remove [stored_medkit] from [src].")
+ stored_medkit = null
+ opened = 1
+ playsound(loc, 'sound/machines/click.ogg', 15, 1, -3)
+ update_icon()
+ else
+ toggle_cabinet(user)
+
+
+/obj/structure/medkit_cabinet/attack_paw(mob/user)
+ return attack_hand(user)
+
+/obj/structure/medkit_cabinet/AltClick(mob/living/user)
+ if(!istype(user) || !user.canUseTopic(src, BE_CLOSE, ismonkey(user)))
+ return
+ toggle_cabinet(user)
+
+/obj/structure/medkit_cabinet/proc/toggle_cabinet(mob/user)
+ if(opened && broken)
+ to_chat(user, "[src] is broken open.")
+ else
+ playsound(loc, 'sound/machines/click.ogg', 15, 1, -3)
+ opened = !opened
+ update_icon()
+
+/obj/structure/medkit_cabinet/update_icon()
+ if(!opened)
+ icon_state = "medkit_closed"
+ return
+ if(stored_medkit)
+ if(istype(stored_medkit, /obj/item/storage/hypospraykit))
+ icon_state = "medkit_white"
+ else
+ icon_state = "medkit_white"
+ else
+ icon_state = "medkit_empty"
+
+/obj/structure/medkit_cabinet/obj_break(damage_flag)
+ if(!broken && !(flags_1 & NODECONSTRUCT_1))
+ broken = 1
+ opened = 1
+ if(stored_medkit)
+ stored_medkit.forceMove(loc)
+ stored_medkit = null
+ update_icon()
+
+
+/obj/structure/medkit_cabinet/deconstruct(disassembled = TRUE)
+ if(!(flags_1 & NODECONSTRUCT_1))
+ if(disassembled)
+ new /obj/item/wallframe/medkit_cabinet(loc)
+ else
+ new /obj/item/stack/sheet/metal (loc, 2)
+ if(stored_medkit)
+ stored_medkit.forceMove(loc)
+ stored_medkit = null
+ qdel(src)
+
+/obj/item/wallframe/medkit_cabinet
+ name = "Medkit wall frame."
+ desc = "Used for building wall-mounted medkit cabinets."
+ icon_state = "medkit"
+ result_path = /obj/structure/medkit_cabinet
diff --git a/icons/obj/wallframe.dmi b/icons/obj/wallframe.dmi
index 70149901..99b904fc 100644
Binary files a/icons/obj/wallframe.dmi and b/icons/obj/wallframe.dmi differ
diff --git a/icons/obj/wallmounts.dmi b/icons/obj/wallmounts.dmi
index 67d05103..5cbaf8de 100644
Binary files a/icons/obj/wallmounts.dmi and b/icons/obj/wallmounts.dmi differ