diff --git a/code/modules/paperwork/paperplane.dm b/code/modules/paperwork/paperplane.dm
new file mode 100644
index 00000000000..c51cd39e56e
--- /dev/null
+++ b/code/modules/paperwork/paperplane.dm
@@ -0,0 +1,129 @@
+// Ported from TG
+/obj/item/weapon/paperplane
+ name = "paper plane"
+ desc = "Paper, folded in the shape of a plane."
+ icon = 'icons/obj/bureaucracy.dmi'
+ icon_state = "paperplane"
+ throw_range = 7
+ throw_speed = 1
+ throwforce = 0
+ w_class = WEIGHT_CLASS_TINY
+ burn_state = FLAMMABLE
+ burntime = 5
+ no_spin = TRUE
+
+ var/obj/item/weapon/paper/internal_paper
+
+/obj/item/weapon/paperplane/New(loc, obj/item/weapon/paper/new_paper)
+ ..()
+ pixel_y = rand(-8, 8)
+ pixel_x = rand(-9, 9)
+ if(new_paper)
+ internal_paper = new_paper
+ flags = new_paper.flags
+ color = new_paper.color
+ new_paper.forceMove(src)
+ else
+ internal_paper = new /obj/item/weapon/paper(src)
+ update_icon()
+
+/obj/item/weapon/paperplane/Destroy()
+ QDEL_NULL(internal_paper)
+ return ..()
+
+/obj/item/weapon/paperplane/suicide_act(mob/living/user)
+ user.Stun(10)
+ user.visible_message("[user] jams [name] in \his nose. It looks like \he's trying to commit suicide!")
+ user.EyeBlurry(6)
+ var/obj/item/organ/internal/eyes/E = user.get_int_organ(/obj/item/organ/internal/eyes)
+ if(E)
+ E.take_damage(8, 1)
+ sleep(10)
+ return BRUTELOSS
+
+/obj/item/weapon/paperplane/update_icon()
+ overlays.Cut()
+ var/list/stamped = internal_paper.stamped
+ if(!stamped)
+ stamped = new
+ else if(stamped)
+ for(var/S in stamped)
+ var/obj/item/weapon/stamp = S
+ var/image/stampoverlay = image('icons/obj/bureaucracy.dmi', "paperplane_[initial(stamp.icon_state)]")
+ overlays += stampoverlay
+
+/obj/item/weapon/paperplane/attack_self(mob/user) // Unfold the paper plane
+ to_chat(user, "You unfold [src].")
+ if(internal_paper)
+ internal_paper.forceMove(get_turf(src))
+ user.put_in_hands(internal_paper)
+ internal_paper = null
+ qdel(src)
+
+/obj/item/weapon/paperplane/attackby(obj/item/P, mob/living/carbon/human/user, params)
+ ..()
+
+ if(istype(P, /obj/item/weapon/pen) || istype(P, /obj/item/toy/crayon))
+ to_chat(user, "You should unfold [src] before changing it.")
+ return
+
+ else if(istype(P, /obj/item/weapon/stamp)) //we don't randomize stamps on a paperplane
+ internal_paper.attackby(P, user) //spoofed attack to update internal paper.
+ update_icon()
+
+ else if(is_hot(P))
+ if(user.disabilities & CLUMSY && prob(10))
+ user.visible_message("[user] accidentally ignites themselves!", \
+ "You miss [src] and accidentally light yourself on fire!")
+ user.unEquip(P)
+ user.adjust_fire_stacks(1)
+ user.IgniteMob()
+ return
+
+ if(!in_range(user, src)) //to prevent issues as a result of telepathically lighting a paper
+ return
+ user.unEquip(src)
+ user.visible_message("[user] lights [src] on fire with [P]!", "You lights [src] on fire!")
+ fire_act()
+
+ add_fingerprint(user)
+
+/obj/item/weapon/paperplane/throw_impact(atom/hit_atom)
+ if(..())
+ return
+ if(!ishuman(hit_atom))
+ return
+ var/mob/living/carbon/human/H = hit_atom
+ if(prob(2))
+ if(H.head && H.head.flags_cover & HEADCOVERSEYES)
+ return
+ if(H.wear_mask && H.wear_mask.flags_cover & MASKCOVERSEYES)
+ return
+ if(H.glasses && H.glasses.flags_cover & GLASSESCOVERSEYES)
+ return
+ visible_message("[src] hits [H] in the eye!")
+ H.EyeBlurry(6)
+ H.Weaken(2)
+ var/obj/item/organ/internal/eyes/E = H.get_int_organ(/obj/item/organ/internal/eyes)
+ if(E)
+ E.take_damage(8, 1)
+ H.emote("scream")
+
+/obj/item/weapon/paper/AltClick(mob/user, obj/item/I)
+ var/mob/living/carbon/human/H = user
+ I = H.is_in_hands(/obj/item/weapon/paper)
+ if(I)
+ ProcFoldPlane(H, I)
+ else
+ ..()
+
+/obj/item/weapon/paper/proc/ProcFoldPlane(mob/living/carbon/user, obj/item/I)
+ if(istype(user))
+ if((!in_range(src, user)) || user.stat || user.restrained())
+ return
+ to_chat(user, "You fold [src] into the shape of a plane!")
+ user.unEquip(src)
+ I = new /obj/item/weapon/paperplane(user, src)
+ user.put_in_hands(I)
+ else
+ to_chat(user, "You lack the dexterity to fold [src].")
diff --git a/icons/obj/bureaucracy.dmi b/icons/obj/bureaucracy.dmi
index 9e0eb73a992..720fafd8847 100644
Binary files a/icons/obj/bureaucracy.dmi and b/icons/obj/bureaucracy.dmi differ
diff --git a/paradise.dme b/paradise.dme
index 787f6e500b6..fe4daedb1ee 100644
--- a/paradise.dme
+++ b/paradise.dme
@@ -1886,6 +1886,7 @@
#include "code\modules\paperwork\paper.dm"
#include "code\modules\paperwork\paper_bundle.dm"
#include "code\modules\paperwork\paperbin.dm"
+#include "code\modules\paperwork\paperplane.dm"
#include "code\modules\paperwork\pen.dm"
#include "code\modules\paperwork\photocopier.dm"
#include "code\modules\paperwork\photography.dm"