diff --git a/code/modules/paperwork/clipboard.dm b/code/modules/paperwork/clipboard.dm
index 78a0bf8c1e7..15f6fa417f2 100644
--- a/code/modules/paperwork/clipboard.dm
+++ b/code/modules/paperwork/clipboard.dm
@@ -168,15 +168,8 @@
else if(href_list["read"])
var/obj/item/paper/P = locate(href_list["read"])
-
- if(P && (P.loc == src) && istype(P, /obj/item/paper) )
-
- if(!(istype(usr, /mob/living/carbon/human) || istype(usr, /mob/abstract/observer) || istype(usr, /mob/living/silicon)))
- usr << browse("
[P.name][stars(P.info)][P.stamps]", "window=[P.name]")
- onclose(usr, "[P.name]")
- else
- usr << browse("[P.name][P.info][P.stamps]", "window=[P.name]")
- onclose(usr, "[P.name]")
+ if(istype(P) && (P.loc == src))
+ P.show_content(usr)
else if(href_list["look"])
var/obj/item/photo/P = locate(href_list["look"])
diff --git a/code/modules/paperwork/folders.dm b/code/modules/paperwork/folders.dm
index 186fbfec40f..efda7f2fdd6 100644
--- a/code/modules/paperwork/folders.dm
+++ b/code/modules/paperwork/folders.dm
@@ -80,12 +80,7 @@
else if(href_list["read"])
var/obj/item/paper/P = locate(href_list["read"])
if(P && (P.loc == src) && istype(P))
- if(!(istype(usr, /mob/living/carbon/human) || istype(usr, /mob/abstract/observer) || istype(usr, /mob/living/silicon)))
- usr << browse("[P.name][stars(P.info)][P.stamps]", "window=[P.name]")
- onclose(usr, "[P.name]")
- else
- usr << browse("[P.name][P.info][P.stamps]", "window=[P.name]")
- onclose(usr, "[P.name]")
+ P.show_content(usr)
else if(href_list["look"])
var/obj/item/photo/P = locate(href_list["look"])
if(P && (P.loc == src) && istype(P))
diff --git a/code/modules/paperwork/paper.dm b/code/modules/paperwork/paper.dm
index cc1e484938f..3ebbafe8b60 100644
--- a/code/modules/paperwork/paper.dm
+++ b/code/modules/paperwork/paper.dm
@@ -102,15 +102,20 @@
/obj/item/paper/proc/show_content(mob/user, forceshow)
+ var/datum/browser/paper_win = new(user, name, null, 450, 500, null, TRUE)
+ paper_win.set_content(get_content(user, can_read(user, forceshow)))
+ paper_win.add_stylesheet("paper_languages", 'html/browser/paper_languages.css')
+ paper_win.open()
+
+/obj/item/paper/proc/can_read(var/mob/user, var/forceshow = FALSE)
var/can_read = (istype(user, /mob/living/carbon/human) || isobserver(user) || istype(user, /mob/living/silicon)) || forceshow
if(!forceshow && istype(user,/mob/living/silicon/ai))
var/mob/living/silicon/ai/AI
can_read = get_dist(src, AI.camera) < 2
+ return can_read
- var/datum/browser/paper_win = new(user, name, null, 450, 500, null, TRUE)
- paper_win.set_content("[capitalize_first_letters(name)][can_read ? parse_languages(user, info) : stars(info)][stamps]")
- paper_win.add_stylesheet("paper_languages", 'html/browser/paper_languages.css')
- paper_win.open()
+/obj/item/paper/proc/get_content(var/mob/user, var/can_read = TRUE)
+ return "[capitalize_first_letters(name)][can_read ? parse_languages(user, info) : stars(info)][stamps]"
/obj/item/paper/verb/rename()
set name = "Rename paper"
diff --git a/code/modules/paperwork/paper_bundle.dm b/code/modules/paperwork/paper_bundle.dm
index fa05753fa2c..0801b8f2a64 100644
--- a/code/modules/paperwork/paper_bundle.dm
+++ b/code/modules/paperwork/paper_bundle.dm
@@ -120,11 +120,13 @@
if(istype(pages[page], /obj/item/paper))
var/obj/item/paper/P = W
- if(!(istype(usr, /mob/living/carbon/human) || istype(usr, /mob/abstract/observer) || istype(usr, /mob/living/silicon)))
- dat+= "[P.name][stars(P.info)][P.stamps]"
- else
- dat+= "[P.name][P.info][P.stamps]"
- user << browse(dat, "window=[name]")
+ dat += P.get_content(user, P.can_read(user))
+
+ var/datum/browser/paper_win = new(user, name, null, 450, 500, null, TRUE)
+ paper_win.set_content(dat)
+ paper_win.add_stylesheet("paper_languages", 'html/browser/paper_languages.css')
+ paper_win.open()
+
else if(istype(pages[page], /obj/item/photo))
var/obj/item/photo/P = W
send_rsc(user, P.img, "tmp_photo.png")
diff --git a/html/changelogs/geeves-written_language_fix.yml b/html/changelogs/geeves-written_language_fix.yml
new file mode 100644
index 00000000000..bebb411e5a3
--- /dev/null
+++ b/html/changelogs/geeves-written_language_fix.yml
@@ -0,0 +1,6 @@
+author: Geeves
+
+delete-after: True
+
+changes:
+ - bugfix: "Written languages now work in paper bundles, folders, and clipboards."
\ No newline at end of file