diff --git a/code/game/objects/structures/segway.dm b/code/game/objects/structures/segway.dm
new file mode 100644
index 00000000000..928e4235bd9
--- /dev/null
+++ b/code/game/objects/structures/segway.dm
@@ -0,0 +1,129 @@
+/obj/structure/stool/bed/chair/segway
+ name = "security segway"
+ desc = "Gives the illusion of authority."
+ icon = 'icons/obj/vehicles.dmi'
+ icon_state = "sec_seg_idle"
+ anchored = 1
+ density = 1
+
+ var/health = 100
+ var/delay = 4 //Move delay to simulate a speed
+ var/allowMove = 1
+ var/datum/global_iterator/space_move //Handling space movement (i.e. drift forever)
+
+/obj/structure/stool/bed/chair/segway/New()
+ handle_rotation()
+ space_move = new /datum/global_iterator/space_movement(null,0)
+ return
+
+/obj/structure/stool/bed/chair/segway/relaymove(mob/user, direction)
+ if(user.stat || user.stunned || user.weakened || user.paralysis)
+ unbuckle()
+ icon_state = "sec_seg_idle"
+ if(istype(user.l_hand, /obj/item/sec_seg_key) || istype(user.r_hand, /obj/item/sec_seg_key))
+ if(!allowMove)
+ return
+ if(src.space_move.active())
+ return
+ allowMove = 0
+ step(src, direction)
+ update_mob()
+ handle_rotation()
+ if(istype(src.loc, /turf/space))
+ src.space_move.start(list(src,direction))
+ if(istype(src.loc, /turf/simulated))
+ var/turf/simulated/T = src.loc
+ if(T.wet == 2) //Lube! Fall off!
+ playsound(src, 'sound/misc/slip.ogg', 50, 1, -3)
+ buckled_mob.Stun(8)
+ buckled_mob.Weaken(5)
+ unbuckle()
+ step(src, dir)
+ sleep(delay)
+ allowMove = 1
+ else
+ user << "Requires key in hand to drive."
+
+/obj/structure/stool/bed/chair/segway/Move()
+ . = ..()
+ if(buckled_mob)
+ if(buckled_mob.buckled == src)
+ buckled_mob.loc = loc
+ return .
+
+/obj/structure/stool/bed/chair/segway/Bump(var/atom/obstacle)
+ if(istype(obstacle, /mob))
+ step(obstacle, src.dir)
+ else
+ obstacle.Bumped(src)
+ return
+
+/obj/structure/stool/bed/chair/segway/buckle_mob(mob/M, mob/user)
+ if(M != user || !ismob(M) || get_dist(src, user) > 1 || user.restrained() || user.lying || user.stat || M.buckled || istype(user, /mob/living/silicon))
+ return
+
+ unbuckle()
+
+ M.visible_message(\
+ "[M] climbs onto the segway!",\
+ "You climb onto the segway!")
+ M.buckled = src
+ M.loc = loc
+ M.dir = dir
+ M.update_canmove()
+ buckled_mob = M
+ update_mob()
+ add_fingerprint(user)
+ icon_state = "sec_seg_move"
+ buckled_mob.pixel_x = 0
+ buckled_mob.pixel_y = 5
+
+/obj/structure/stool/bed/chair/segway/unbuckle()
+ if(buckled_mob)
+ buckled_mob.pixel_x = 0
+ buckled_mob.pixel_y = 0
+ ..()
+
+/obj/structure/stool/bed/chair/segway/handle_rotation()
+ if(dir == NORTH)
+ layer = OBJ_LAYER
+ else
+ layer = FLY_LAYER
+
+ if(buckled_mob)
+ if(buckled_mob.loc != loc)
+ buckled_mob.buckled = null
+ buckled_mob.buckled = src
+
+ update_mob()
+
+/obj/structure/stool/bed/chair/segway/proc/update_mob()
+ if(buckled_mob)
+ buckled_mob.dir = dir
+
+/obj/structure/stool/bed/chair/segway/bullet_act(var/obj/item/projectile/Proj)
+ if(buckled_mob)
+ return buckled_mob.bullet_act(Proj)
+ else if(istype(Proj, /obj/item/projectile/beam))
+ damage(Proj.damage)
+
+/obj/structure/stool/bed/chair/segway/proc/damage(amount)
+ health -= amount
+ if(health <= 0)
+ if(buckled_mob)
+ buckled_mob << "The segway was destroyed!"
+ Del()
+
+/obj/item/sec_seg_key
+ name = "security segway key"
+ desc = "A key for a security segway. You feel the choice of keyring could be more professional."
+ icon = 'icons/obj/vehicles.dmi'
+ icon_state = "keys" //Needs a proper sprite
+ w_class = 1
+
+/datum/global_iterator/space_movement //moon_theme.mp3
+ delay = 5
+
+ process(var/obj/structure/stool/bed/chair/segway/seg as obj,direction)
+ if(!step(seg, direction))
+ src.stop()