diff --git a/code/game/jobs/job_controller.dm b/code/game/jobs/job_controller.dm
index 297040931f..5cb74fe4a3 100644
--- a/code/game/jobs/job_controller.dm
+++ b/code/game/jobs/job_controller.dm
@@ -458,13 +458,18 @@ var/global/datum/controller/occupations/job_master
if(istype(H)) //give humans wheelchairs, if they need them.
var/obj/item/organ/external/l_foot = H.get_organ("l_foot")
var/obj/item/organ/external/r_foot = H.get_organ("r_foot")
- if(!l_foot || !r_foot)
+ var/obj/item/weapon/storage/S = locate() in H.contents
+ var/obj/item/wheelchair/R = locate() in S.contents
+ if(!l_foot || !r_foot || R)
var/obj/structure/bed/chair/wheelchair/W = new /obj/structure/bed/chair/wheelchair(H.loc)
H.buckled = W
H.update_canmove()
W.set_dir(H.dir)
W.buckled_mob = H
W.add_fingerprint(H)
+ if(R)
+ W.color = R.color
+ qdel(R)
H << "You are [job.total_positions == 1 ? "the" : "a"] [alt_title ? alt_title : rank]."
diff --git a/code/game/machinery/cryopod.dm b/code/game/machinery/cryopod.dm
index 08a1282e52..846f62c729 100644
--- a/code/game/machinery/cryopod.dm
+++ b/code/game/machinery/cryopod.dm
@@ -430,6 +430,10 @@
else
W.forceMove(src.loc)
+ for(var/obj/structure/B in items)
+ if(istype(B,/obj/structure/bed))
+ qdel(B)
+
//Update any existing objectives involving this mob.
for(var/datum/objective/O in all_objectives)
// We don't want revs to get objectives that aren't for heads of staff. Letting
@@ -521,6 +525,9 @@
for(var/obj/item/W in items)
W.forceMove(get_turf(src))
+ for(var/obj/structure/bed/S in src.contents)
+ S.forceMove(get_turf(src))
+
go_out()
add_fingerprint(usr)
@@ -563,6 +570,8 @@
if(ishuman(usr) && applies_stasis)
var/mob/living/carbon/human/H = occupant
H.Stasis(1000)
+ if(usr.buckled && istype(usr.buckled, /obj/structure/bed/chair/wheelchair))
+ usr.buckled.loc = usr.loc
icon_state = occupied_icon_state
@@ -660,6 +669,8 @@
if(ishuman(M) && applies_stasis)
var/mob/living/carbon/human/H = M
H.Stasis(1000)
+ if(M.buckled && istype(M.buckled, /obj/structure/bed/chair/wheelchair))
+ M.buckled.loc = M.loc
// Book keeping!
var/turf/location = get_turf(src)
@@ -667,4 +678,4 @@
message_admins("[key_name_admin(M)] has entered a stasis pod.")
//Despawning occurs when process() is called with an occupant without a client.
- add_fingerprint(M)
\ No newline at end of file
+ add_fingerprint(M)
diff --git a/code/game/objects/structures/stool_bed_chair_nest/wheelchair.dm b/code/game/objects/structures/stool_bed_chair_nest/wheelchair.dm
index 9ae19769eb..bdd4b87b0e 100644
--- a/code/game/objects/structures/stool_bed_chair_nest/wheelchair.dm
+++ b/code/game/objects/structures/stool_bed_chair_nest/wheelchair.dm
@@ -193,3 +193,31 @@
pulling = null
usr.pulledby = null
..()
+
+/obj/item/wheelchair
+ name = "wheelchair"
+ desc = "A folded wheelchair that can be carried around."
+ icon = 'icons/obj/furniture.dmi'
+ icon_state = "wheelchair_folded"
+ item_state = "wheelchair"
+ w_class = ITEMSIZE_HUGE // Can't be put in backpacks. Oh well.
+
+/obj/item/wheelchair/attack_self(mob/user)
+ var/obj/structure/bed/chair/wheelchair/R = new /obj/structure/bed/chair/wheelchair(user.loc)
+ R.add_fingerprint(user)
+ R.name = src.name
+ R.color = src.color
+ qdel(src)
+
+/obj/structure/bed/chair/wheelchair/MouseDrop(over_object, src_location, over_location)
+ ..()
+ if((over_object == usr && (in_range(src, usr) || usr.contents.Find(src))))
+ if(!ishuman(usr)) return
+ if(buckled_mob) return 0
+ visible_message("[usr] collapses \the [src.name].")
+ var/obj/item/wheelchair/R = new/obj/item/wheelchair(get_turf(src))
+ R.name = src.name
+ R.color = src.color
+ spawn(0)
+ qdel(src)
+ return
diff --git a/code/modules/client/preference_setup/loadout/loadout_utility.dm b/code/modules/client/preference_setup/loadout/loadout_utility.dm
index c30291c3a5..5e7fa24d9f 100644
--- a/code/modules/client/preference_setup/loadout/loadout_utility.dm
+++ b/code/modules/client/preference_setup/loadout/loadout_utility.dm
@@ -90,4 +90,13 @@
/datum/gear/utility/pen
display_name = "Fountain Pen"
- path = /obj/item/weapon/pen/fountain
\ No newline at end of file
+ path = /obj/item/weapon/pen/fountain
+
+/datum/gear/utility/wheelchair/color
+ display_name = "wheelchair"
+ path = /obj/item/wheelchair
+ cost = 4
+
+/datum/gear/utility/wheelchair/color/New()
+ ..()
+ gear_tweaks = list(gear_tweak_free_color_choice)
diff --git a/code/modules/mob/living/carbon/human/human_movement.dm b/code/modules/mob/living/carbon/human/human_movement.dm
index 98f8f81d9c..7720016611 100644
--- a/code/modules/mob/living/carbon/human/human_movement.dm
+++ b/code/modules/mob/living/carbon/human/human_movement.dm
@@ -35,7 +35,7 @@
var/obj/item/organ/external/E = get_organ(organ_name)
if(!E || E.is_stump())
tally += 4
- if(E.splinted)
+ else if(E.splinted)
tally += 0.5
else if(E.status & ORGAN_BROKEN)
tally += 1.5
diff --git a/html/changelogs/PrismaticGynoid-wheelchairs.yml b/html/changelogs/PrismaticGynoid-wheelchairs.yml
new file mode 100644
index 0000000000..cebda68e5a
--- /dev/null
+++ b/html/changelogs/PrismaticGynoid-wheelchairs.yml
@@ -0,0 +1,6 @@
+author: PrismaticGynoid
+delete-after: True
+changes:
+ - rscadd: "Wheelchairs can now be collapsed like rollerbeds for ease of storage and movement. Too big to put in backpacks though."
+ - rscadd: "Wheelchairs are now available in a color-customizable form via the loadout, under utility. Now you can ride in style, and keep your feet too."
+ - bugfix: "Wheelchair users can now enter the gateway and residential elevator without being forced to leave behind their mobility aid."
diff --git a/icons/mob/items/lefthand.dmi b/icons/mob/items/lefthand.dmi
index 751f70c5cf..b5a6d0dd87 100644
Binary files a/icons/mob/items/lefthand.dmi and b/icons/mob/items/lefthand.dmi differ
diff --git a/icons/mob/items/righthand.dmi b/icons/mob/items/righthand.dmi
index a24f71fea6..f854d73ea8 100644
Binary files a/icons/mob/items/righthand.dmi and b/icons/mob/items/righthand.dmi differ
diff --git a/icons/obj/furniture.dmi b/icons/obj/furniture.dmi
index 39dbbdcc67..0e6659ae4f 100644
Binary files a/icons/obj/furniture.dmi and b/icons/obj/furniture.dmi differ