diff --git a/code/modules/modular_computers/computers/item/phone/phone_presets.dm b/code/modules/modular_computers/computers/item/phone/phone_presets.dm
index a0559efe3ec1..779b5cc3a2af 100644
--- a/code/modules/modular_computers/computers/item/phone/phone_presets.dm
+++ b/code/modules/modular_computers/computers/item/phone/phone_presets.dm
@@ -39,7 +39,8 @@
/obj/item/computer_hardware/hard_drive/small/pda,
/obj/item/computer_hardware/network_card,
/obj/item/computer_hardware/card_slot,
- /obj/item/computer_hardware/card_slot/secondary)
+ /obj/item/computer_hardware/card_slot/secondary,
+ /obj/item/computer_hardware/printer/mini)
/obj/item/modular_computer/tablet/phone/preset/advanced/command/cap
finish_color = "yellow"
diff --git a/code/modules/modular_computers/file_system/programs/paperworkprinter.dm b/code/modules/modular_computers/file_system/programs/paperworkprinter.dm
new file mode 100644
index 000000000000..3a4b4ea155dc
--- /dev/null
+++ b/code/modules/modular_computers/file_system/programs/paperworkprinter.dm
@@ -0,0 +1,54 @@
+//TODO: add more sane printing handling
+/datum/computer_file/program/paperwork_printer
+ filename = "ppwrkprnt"
+ filedesc = "Paperwork Printing"
+ category = PROGRAM_CATEGORY_MISC
+ program_icon_state = "id"
+ extended_desc = "Program for dispensing paperwork"
+ requires_ntnet = FALSE
+ size = 4
+ tgui_id = "NtosPaperworkPrinter"
+ program_icon = "clipboard-list"
+
+/datum/computer_file/program/paperwork_printer/ui_static_data(mob/user)
+ var/list/data = get_header_data()
+ var/list/papers = list()
+ //filter out paperwork we're not allowed to have
+ for(var/R in subtypesof(/obj/item/paper/paperwork))
+ var/obj/item/paper/paperwork/P = R
+ if(initial(P.printable))
+ papers += list(list("name" = initial(P.name), "id" = initial(P.id)))
+ var/obj/item/computer_hardware/printer/printer
+ if(computer)
+ printer = computer.all_components[MC_PRINT]
+ data["have_printer"] = !!printer
+ else
+ data["have_printer"] = FALSE
+ data["printable_papers"] = papers
+ return data
+
+/datum/computer_file/program/paperwork_printer/ui_act(action, params, datum/tgui/ui)
+ if(..())
+ return
+ //this variable stores the object of which we're actually going to print
+ if(action == "PRG_print")
+ var/paperworkToPick = params["paperworkID"]
+ for(var/R in subtypesof(/obj/item/paper/paperwork))
+ var/obj/item/paper/paperwork/P = R
+ if(initial(P.id)==paperworkToPick)
+ src.print(P)
+ break
+
+
+/datum/computer_file/program/paperwork_printer/proc/print(var/obj/item/paper/paperwork/T)
+ var/obj/item/computer_hardware/printer/printer
+ if(computer)
+ printer = computer.all_components[MC_PRINT]
+ if(computer && printer) //This option should never be called if there is no printer
+ if(!printer.print_type(T))
+ to_chat(usr, span_notice("Hardware error: Printer was unable to print the file. It may be out of paper."))
+ return
+ else
+ //it printed, how many pages are left?
+ var/pages_left = printer.stored_paper
+ computer.visible_message(span_notice("\The [computer] prints out a paper. There are [pages_left] pages left."))
diff --git a/tgui/packages/tgui/interfaces/NtosPaperworkPrinter.js b/tgui/packages/tgui/interfaces/NtosPaperworkPrinter.js
new file mode 100644
index 000000000000..e2fd4dc4db91
--- /dev/null
+++ b/tgui/packages/tgui/interfaces/NtosPaperworkPrinter.js
@@ -0,0 +1,49 @@
+import { useBackend } from '../backend';
+import { Button, NoticeBox, Section } from '../components';
+import { NtosWindow } from '../layouts';
+
+export const NtosPaperworkPrinter = (props, context) => {
+ const { act, data } = useBackend(context);
+ const {
+ have_printer,
+ printable_papers,
+ } = data;
+ if (have_printer) {
+ return (
+
+
+
+ {printable_papers.map(paper => (
+
+
+
+ );
+ } else {
+ return (
+
+
+
+
+ There is no printer installed. Program halted.
+
+
+
+ );
+ }
+
+};
diff --git a/yogstation.dme b/yogstation.dme
index 3312be1bc466..c8a89796ada4 100644
--- a/yogstation.dme
+++ b/yogstation.dme
@@ -2682,6 +2682,7 @@
#include "code\modules\modular_computers\file_system\programs\ntmonitor.dm"
#include "code\modules\modular_computers\file_system\programs\ntnrc_client.dm"
#include "code\modules\modular_computers\file_system\programs\ntpda_msg.dm"
+#include "code\modules\modular_computers\file_system\programs\paperworkprinter.dm"
#include "code\modules\modular_computers\file_system\programs\portrait_printer.dm"
#include "code\modules\modular_computers\file_system\programs\radar.dm"
#include "code\modules\modular_computers\file_system\programs\robotact.dm"
diff --git a/yogstation/code/game/objects/items/premadepapers.dm b/yogstation/code/game/objects/items/premadepapers.dm
index b7dcbdbdb779..0cb879756c22 100644
--- a/yogstation/code/game/objects/items/premadepapers.dm
+++ b/yogstation/code/game/objects/items/premadepapers.dm
@@ -7,9 +7,12 @@
* It's a subtype of paper, with written text already on it.
*
*/
+/obj/item/paper/paperwork/
+ var/id = 0
+ var/printable = TRUE
/obj/item/paper/paperwork/general_request_form
name = "General Requests Form (Form NT-010)"
-
+ id = 1
/obj/item/paper/paperwork/general_request_form/Initialize()
. = ..()
@@ -34,6 +37,7 @@
*/
/obj/item/paper/paperwork/complaint_form
name = "Complaint Form (Form NT-021)"
+ id = 2
/obj/item/paper/paperwork/complaint_form/Initialize()
. = ..()
@@ -65,6 +69,7 @@
*/
/obj/item/paper/paperwork/incident_report
name = "Incident Report (Form NT-400)"
+ id = 3
/obj/item/paper/paperwork/incident_report/Initialize()
. = ..()
@@ -113,6 +118,7 @@
*/
/obj/item/paper/paperwork/sec_incident_report
name = "Security Incident Report (Form SEC-030)"
+ id = 4
/obj/item/paper/paperwork/sec_incident_report/Initialize()
. = ..()
@@ -180,6 +186,7 @@
*/
/obj/item/paper/paperwork/item_form
name = "Item Request Form (Form NT-089)"
+ id = 5
/obj/item/paper/paperwork/item_form/Initialize()
. = ..()
@@ -214,6 +221,7 @@
*/
/obj/item/paper/paperwork/cyborg_request_form
name = "Cyborgization Consent Form (Form NT-203)"
+ id = 6
/obj/item/paper/paperwork/cyborg_request_form/Initialize()
. = ..()
@@ -248,6 +256,7 @@
*/
/obj/item/paper/paperwork/hopaccessrequestform
name = "HoP Access Request Form (Form NT-022)"
+ id = 7
/obj/item/paper/paperwork/hopaccessrequestform/Initialize()
. = ..()
@@ -278,6 +287,7 @@
*/
/obj/item/paper/paperwork/hop_job_change_form
name = "Job Reassignment Form (Form NT-059)"
+ id = 8
/obj/item/paper/paperwork/hop_job_change_form/Initialize()
. = ..()
@@ -408,6 +418,7 @@
*/
/obj/item/paper/paperwork/rd_form
name = "R&D Request Form (Form SCI-3)"
+ id = 9
/obj/item/paper/paperwork/rd_form/Initialize()
. = ..()
@@ -437,6 +448,7 @@
*/
/obj/item/paper/paperwork/mech_form
name = "R&D Mech Request Form (Form SCI-9)"
+ id = 10
/obj/item/paper/paperwork/mech_form/Initialize()
. = ..()
@@ -466,6 +478,7 @@
*/
/obj/item/paper/paperwork/jobchangecert
name = "Job Change Certificate"
+ id = 11
/obj/item/paper/paperwork/jobchangecert/Initialize()
. = ..()