diff --git a/code/modules/crafting/recipes.dm b/code/modules/crafting/recipes.dm
index 6cf7baf6232..4167d3c0f5a 100644
--- a/code/modules/crafting/recipes.dm
+++ b/code/modules/crafting/recipes.dm
@@ -382,6 +382,14 @@
/obj/item/stack/rods = 12)
category = CAT_MISC
+/datum/crafting_recipe/wheelchair
+ name = "Wheelchair"
+ result = /obj/vehicle/ridden/wheelchair
+ reqs = list(/obj/item/stack/sheet/metal = 4,
+ /obj/item/stack/rods = 6)
+ time = 100
+ category = CAT_MISC
+
/datum/crafting_recipe/mousetrap
name = "Mouse Trap"
result = /obj/item/assembly/mousetrap
diff --git a/code/modules/vehicles/_vehicle.dm b/code/modules/vehicles/_vehicle.dm
index 33a361eae1f..46bb9c203b8 100644
--- a/code/modules/vehicles/_vehicle.dm
+++ b/code/modules/vehicles/_vehicle.dm
@@ -31,6 +31,19 @@
occupant_actions = list()
generate_actions()
+/obj/vehicle/examine(mob/user)
+ ..()
+ if(resistance_flags & ON_FIRE)
+ to_chat(user, "It's on fire!")
+ var/healthpercent = obj_integrity/max_integrity * 100
+ switch(healthpercent)
+ if(50 to 99)
+ to_chat(user, "It looks slightly damaged.")
+ if(25 to 50)
+ to_chat(user, "It appears heavily damaged.")
+ if(0 to 25)
+ to_chat(user, "It's falling apart!")
+
/obj/vehicle/proc/is_key(obj/item/I)
return I? (key_type_exact? (I.type == key_type) : istype(I, key_type)) : FALSE
diff --git a/code/modules/vehicles/wheelchair.dm b/code/modules/vehicles/wheelchair.dm
new file mode 100644
index 00000000000..c9ca220d50f
--- /dev/null
+++ b/code/modules/vehicles/wheelchair.dm
@@ -0,0 +1,102 @@
+/obj/vehicle/ridden/wheelchair //ported from Hippiestation (by Jujumatic)
+ name = "wheelchair"
+ desc = "A chair with big wheels. It looks like you can move in this on your own."
+ icon = 'icons/obj/vehicles.dmi'
+ icon_state = "wheelchair"
+ layer = OBJ_LAYER
+ max_integrity = 100
+ armor = list("melee" = 10, "bullet" = 10, "laser" = 10, "energy" = 0, "bomb" = 10, "bio" = 0, "rad" = 0, "fire" = 20, "acid" = 30) //Wheelchairs aren't super tough yo
+ legs_required = 0 //You'll probably be using this if you don't have legs
+ canmove = TRUE
+ density = FALSE //Thought I couldn't fix this one easily, phew
+
+/obj/vehicle/ridden/wheelchair/Initialize()
+ . = ..()
+ var/datum/component/riding/D = LoadComponent(/datum/component/riding)
+ D.vehicle_move_delay = 0
+ D.set_vehicle_dir_layer(SOUTH, OBJ_LAYER)
+ D.set_vehicle_dir_layer(NORTH, ABOVE_MOB_LAYER)
+ D.set_vehicle_dir_layer(EAST, OBJ_LAYER)
+ D.set_vehicle_dir_layer(WEST, OBJ_LAYER)
+
+/obj/vehicle/ridden/wheelchair/ComponentInitialize() //Since it's technically a chair I want it to have chair properties
+ . = ..()
+ AddComponent(/datum/component/simple_rotation,ROTATION_ALTCLICK | ROTATION_CLOCKWISE, CALLBACK(src, .proc/can_user_rotate),CALLBACK(src, .proc/can_be_rotated),null)
+
+/obj/vehicle/ridden/wheelchair/obj_destruction(damage_flag)
+ new /obj/item/stack/rods(drop_location(), 1)
+ new /obj/item/stack/sheet/metal(drop_location(), 1)
+ ..()
+
+/obj/vehicle/ridden/wheelchair/Destroy()
+ if(has_buckled_mobs())
+ var/mob/living/carbon/H = buckled_mobs[1]
+ unbuckle_mob(H)
+ return ..()
+
+/obj/vehicle/ridden/wheelchair/driver_move(mob/living/user, direction)
+ var/mob/living/carbon/human/H = user
+ if(istype(H))
+ if(!H.get_num_arms() && canmove)
+ to_chat(H, "You can't move the wheels without arms!")
+ canmove = FALSE
+ addtimer(VARSET_CALLBACK(src, canmove , TRUE), 20)
+ return FALSE
+ var/datum/component/riding/D = GetComponent(/datum/component/riding)
+ D.vehicle_move_delay = 10/H.get_num_arms()
+ ..()
+
+/obj/vehicle/ridden/wheelchair/Moved()
+ . = ..()
+ cut_overlays()
+ playsound(src, 'sound/effects/roll.ogg', 75, 1)
+ if(has_buckled_mobs())
+ handle_rotation_overlayed()
+
+
+/obj/vehicle/ridden/wheelchair/post_buckle_mob(mob/living/user)
+ . = ..()
+ handle_rotation_overlayed()
+
+/obj/vehicle/ridden/wheelchair/post_unbuckle_mob()
+ . = ..()
+ cut_overlays()
+
+/obj/vehicle/ridden/wheelchair/setDir(newdir)
+ ..()
+ handle_rotation(newdir)
+
+/obj/vehicle/ridden/wheelchair/wrench_act(mob/living/user, obj/item/I) //Attackby should stop it attacking the wheelchair after moving away during decon
+ to_chat(user, "You begin to detach the wheels...")
+ if(I.use_tool(src, user, 40, volume=50))
+ to_chat(user, "You detach the wheels and deconstruct the chair.")
+ new /obj/item/stack/rods(drop_location(), 6)
+ new /obj/item/stack/sheet/metal(drop_location(), 4)
+ qdel(src)
+ return TRUE
+
+/obj/vehicle/ridden/wheelchair/proc/handle_rotation(direction)
+ if(has_buckled_mobs())
+ handle_rotation_overlayed()
+ for(var/m in buckled_mobs)
+ var/mob/living/buckled_mob = m
+ buckled_mob.setDir(direction)
+
+/obj/vehicle/ridden/wheelchair/proc/handle_rotation_overlayed()
+ cut_overlays()
+ var/image/V = image(icon = icon, icon_state = "wheelchair_overlay", layer = FLY_LAYER, dir = src.dir)
+ add_overlay(V)
+
+
+
+/obj/vehicle/ridden/wheelchair/proc/can_be_rotated(mob/living/user)
+ return TRUE
+
+/obj/vehicle/ridden/wheelchair/proc/can_user_rotate(mob/living/user)
+ var/mob/living/L = user
+ if(istype(L))
+ if(!user.canUseTopic(src, BE_CLOSE, ismonkey(user)))
+ return FALSE
+ if(isobserver(user) && CONFIG_GET(flag/ghost_interaction))
+ return TRUE
+ return FALSE
diff --git a/icons/obj/vehicles.dmi b/icons/obj/vehicles.dmi
index 495aa229012..9bcacc3ad39 100644
Binary files a/icons/obj/vehicles.dmi and b/icons/obj/vehicles.dmi differ
diff --git a/tgstation.dme b/tgstation.dme
index cd769112ca9..606fd1dcbd3 100755
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -2709,6 +2709,7 @@
#include "code\modules\vehicles\speedbike.dm"
#include "code\modules\vehicles\vehicle_actions.dm"
#include "code\modules\vehicles\vehicle_key.dm"
+#include "code\modules\vehicles\wheelchair.dm"
#include "code\modules\vehicles\cars\car.dm"
#include "code\modules\vehicles\cars\clowncar.dm"
#include "code\modules\vending\_vending.dm"