diff --git a/code/datums/traits/good.dm b/code/datums/traits/good.dm
index 7c42f8de..11ff6abd 100644
--- a/code/datums/traits/good.dm
+++ b/code/datums/traits/good.dm
@@ -232,4 +232,64 @@
/datum/quirk/slimespeaker/remove()
var/mob/living/M = quirk_holder
- M.remove_language(/datum/language/slime)
\ No newline at end of file
+ M.remove_language(/datum/language/slime)
+
+/datum/quirk/narsianspeaker
+ name = "Nar-Sian speaker"
+ desc = "Obsessed with the inner workings of the blood cult, you've learned how to speak their ancient language."
+ value = 1
+ gain_text = "Your mind feels sensitive to the slurred, ancient language of Nar'Sian cultists."
+ lose_text = "You forget how to speak Nar'Sian!"
+
+/datum/quirk/narsianspeaker/add()
+ var/mob/living/M = quirk_holder
+ M.grant_language(/datum/language/narsie)
+
+/datum/quirk/narsianspeaker/remove()
+ var/mob/living/M = quirk_holder
+ M.remove_language(/datum/language/narsie)
+
+/datum/quirk/ratvarianspeaker
+ name = "Ratvarian speaker"
+ desc = "Obsessed with forbidden knowledge regarding the clock cult, you've learned how to speak their language."
+ value = 1
+ gain_text = "Your mind feels sensitive to the ancient language of Ratvarian cultists."
+ lose_text = "You forget how to speak Ratvarian!"
+
+/datum/quirk/ratvarianspeaker/add()
+ var/mob/living/M = quirk_holder
+ M.grant_language(/datum/language/ratvar)
+
+/datum/quirk/ratvarianspeaker/remove()
+ var/mob/living/M = quirk_holder
+ M.remove_language(/datum/language/ratvar)
+
+/datum/quirk/encodedspeaker
+ name = "Encoded Audio speaker"
+ desc = "You've been augmented with language encoders, allowing you to understand encoded audio."
+ value = 1
+ gain_text = "Your mouth feels a little weird for a moment as your language encoder kicks in."
+ lose_text = "You feel your encoded audio chip malfunction. You can no longer speak or understand the language of fax machines."
+
+/datum/quirk/encodedspeaker/add()
+ var/mob/living/M = quirk_holder
+ M.grant_language(/datum/language/machine)
+
+/datum/quirk/encodedspeaker/remove()
+ var/mob/living/M = quirk_holder
+ M.remove_language(/datum/language/machine)
+
+/datum/quirk/xenospeaker
+ name = "Xenocommon speaker"
+ desc = "Through time observing and interacting with xenos and xeno hybrids, you've learned the intricate hissing patterns of their language."
+ value = 1
+ gain_text = "You feel that you are now able to hiss in the same way xenomorphs do."
+ lose_text = "You seem to no longer know how to speak xenocommon."
+
+/datum/quirk/xenospeaker/add()
+ var/mob/living/M = quirk_holder
+ M.grant_language(/datum/language/xenocommon)
+
+/datum/quirk/xenospeaker/remove()
+ var/mob/living/M = quirk_holder
+ M.remove_language(/datum/language/xenocommon)
diff --git a/code/modules/mob/living/carbon/human/species_types/synths.dm b/code/modules/mob/living/carbon/human/species_types/synths.dm
index 915e85f1..fea6ab43 100644
--- a/code/modules/mob/living/carbon/human/species_types/synths.dm
+++ b/code/modules/mob/living/carbon/human/species_types/synths.dm
@@ -29,10 +29,12 @@
..()
assume_disguise(old_species, H)
RegisterSignal(H, COMSIG_MOB_SAY, .proc/handle_speech)
+ H.grant_language(/datum/language/machine)
/datum/species/synth/on_species_loss(mob/living/carbon/human/H)
. = ..()
UnregisterSignal(H, COMSIG_MOB_SAY)
+ H.remove_language(/datum/language/machine)
/datum/species/synth/handle_chemicals(datum/reagent/chem, mob/living/carbon/human/H)
if(chem.id == "synthflesh")
@@ -123,4 +125,4 @@
if (/datum/species/golem/bananium)
speech_args[SPEECH_SPANS] |= SPAN_CLOWN
if (/datum/species/golem/clockwork)
- speech_args[SPEECH_SPANS] |= SPAN_ROBOT
\ No newline at end of file
+ speech_args[SPEECH_SPANS] |= SPAN_ROBOT
diff --git a/code/modules/surgery/organs/tongue.dm b/code/modules/surgery/organs/tongue.dm
index f09d61e5..8a6bdd92 100644
--- a/code/modules/surgery/organs/tongue.dm
+++ b/code/modules/surgery/organs/tongue.dm
@@ -22,6 +22,7 @@
/datum/language/ratvar,
/datum/language/aphasia,
/datum/language/slime,
+ /datum/language/xenocommon,
))
healing_factor = STANDARD_ORGAN_HEALING*5 //Fast!!
decay_factor = STANDARD_ORGAN_DECAY/2
@@ -252,6 +253,12 @@
/obj/item/organ/tongue/robot/can_speak_in_language(datum/language/dt)
return ..() || electronics_magic
+/obj/item/organ/tongue/robot/Initialize(mapload)
+ . = ..()
+ var/static/list/languages_possible_robot = languages_possible_base + typecacheof(list(
+ /datum/language/machine))
+ languages_possible = languages_possible_robot
+
/obj/item/organ/tongue/robot/handle_speech(datum/source, list/speech_args)
speech_args[SPEECH_SPANS] |= SPAN_ROBOT
diff --git a/modular_citadel/code/modules/mob/living/carbon/human/species_types/furrypeople.dm b/modular_citadel/code/modules/mob/living/carbon/human/species_types/furrypeople.dm
index fede1f07..4da77a5d 100644
--- a/modular_citadel/code/modules/mob/living/carbon/human/species_types/furrypeople.dm
+++ b/modular_citadel/code/modules/mob/living/carbon/human/species_types/furrypeople.dm
@@ -227,6 +227,7 @@
liked_food = MEAT
/datum/species/xeno/on_species_gain(mob/living/carbon/human/C, datum/species/old_species)
+ C.grant_language(/datum/language/xenocommon)
if(("legs" in C.dna.species.mutant_bodyparts) && C.dna.features["legs"] == "Digitigrade Legs")
species_traits += DIGITIGRADE
if(DIGITIGRADE in species_traits)
@@ -234,6 +235,7 @@
. = ..()
/datum/species/xeno/on_species_loss(mob/living/carbon/human/C, datum/species/new_species)
+ C.remove_language(/datum/language/xenocommon)
if(("legs" in C.dna.species.mutant_bodyparts) && C.dna.features["legs"] == "Normal Legs")
species_traits -= DIGITIGRADE
if(DIGITIGRADE in species_traits)
diff --git a/modular_citadel/code/modules/mob/living/carbon/human/species_types/ipc.dm b/modular_citadel/code/modules/mob/living/carbon/human/species_types/ipc.dm
index 8e866e46..2e0df07e 100644
--- a/modular_citadel/code/modules/mob/living/carbon/human/species_types/ipc.dm
+++ b/modular_citadel/code/modules/mob/living/carbon/human/species_types/ipc.dm
@@ -24,12 +24,14 @@
var/datum/action/innate/monitor_change/screen
/datum/species/ipc/on_species_gain(mob/living/carbon/human/C)
+ C.grant_language(/datum/language/machine)
if(isipcperson(C) && !screen)
screen = new
screen.Grant(C)
..()
/datum/species/ipc/on_species_loss(mob/living/carbon/human/C)
+ C.remove_language(/datum/language/machine)
if(screen)
screen.Remove(C)
..()