diff --git a/modular_citadel/code/datums/mood_events/generic_negative_events.dm b/modular_citadel/code/datums/mood_events/generic_negative_events.dm
new file mode 100644
index 0000000000..cc7e714819
--- /dev/null
+++ b/modular_citadel/code/datums/mood_events/generic_negative_events.dm
@@ -0,0 +1,11 @@
+// Citadel-specific negative moodlets
+
+/datum/mood_event/plushjack
+ description = "I have butchered a plush recently.\n"
+ mood_change = -1
+ timeout = 1200
+
+/datum/mood_event/plush_nostuffing
+ description = "A plush I tried to pet had no stuffing...\n"
+ mood_change = -1
+ timeout = 1200
diff --git a/modular_citadel/code/datums/mood_events/generic_positive_events.dm b/modular_citadel/code/datums/mood_events/generic_positive_events.dm
new file mode 100644
index 0000000000..40df233fbf
--- /dev/null
+++ b/modular_citadel/code/datums/mood_events/generic_positive_events.dm
@@ -0,0 +1,21 @@
+// Citadel-specific positive moodlets
+
+/datum/mood_event/headpat
+ description = "Headpats are nice.\n"
+ mood_change = 2
+ timeout = 1200
+
+/datum/mood_event/hugbox
+ description = "I hugged a box of hugs recently.\n"
+ mood_change = 1
+ timeout = 1200
+
+/datum/mood_event/plushpet
+ description = "I pet a plush recently.\n"
+ mood_change = 1
+ timeout = 3000
+
+/datum/mood_event/plushplay
+ description = "I've played with plushes recently.\n"
+ mood_change = 3
+ timeout = 3000
diff --git a/modular_citadel/code/datums/mood_events/moodular.dm b/modular_citadel/code/datums/mood_events/moodular.dm
new file mode 100644
index 0000000000..b764c0027e
--- /dev/null
+++ b/modular_citadel/code/datums/mood_events/moodular.dm
@@ -0,0 +1,42 @@
+// Modular stuff to use with Citadel-specific moods.
+
+// box of hugs
+/obj/item/storage/box/hug/attack_self(mob/user)
+ . = ..()
+ GET_COMPONENT_FROM(mood, /datum/component/mood, user)
+ if(mood)
+ mood.add_event("hugbox", /datum/mood_event/hugbox)
+
+// headpats (IMPORTANT)
+/mob/living/carbon/help_shake_act(mob/living/carbon/M)
+ . = ..()
+ GET_COMPONENT_FROM(mood, /datum/component/mood, src)
+ if(mood)
+ mood.add_event("headpat", /datum/mood_event/headpat)
+
+// plush petting
+/obj/item/toy/plush/attack_self(mob/user)
+ . = ..()
+ if(stuffed || grenade)
+ GET_COMPONENT_FROM(mood, /datum/component/mood, user)
+ if(mood)
+ mood.add_event("plushpet", /datum/mood_event/plushpet)
+ else
+ GET_COMPONENT_FROM(mood, /datum/component/mood, user)
+ if(mood)
+ mood.add_event("plush_nostuffing", /datum/mood_event/plush_nostuffing)
+
+// Jack the Ripper starring plush
+/obj/item/toy/plush/attackby(obj/item/I, mob/living/user, params)
+ . = ..()
+ if(I.is_sharp())
+ if(!grenade)
+ GET_COMPONENT_FROM(mood, /datum/component/mood, user)
+ if(mood)
+ mood.add_event("plushjack", /datum/mood_event/plushjack)
+
+// plush playing (plush-on-plush action)
+ if(istype(I, /obj/item/toy/plush))
+ GET_COMPONENT_FROM(mood, /datum/component/mood, user)
+ if(mood)
+ mood.add_event("plushplay", /datum/mood_event/plushplay)
diff --git a/tgstation.dme b/tgstation.dme
index 37d2ae9cac..344b7926d6 100755
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -2603,6 +2603,9 @@
#include "modular_citadel\code\controllers\subsystem\shuttle.dm"
#include "modular_citadel\code\datums\uplink_items_cit.dm"
#include "modular_citadel\code\datums\components\material_container.dm"
+#include "modular_citadel\code\datums\mood_events\generic_negative_events.dm"
+#include "modular_citadel\code\datums\mood_events\generic_positive_events.dm"
+#include "modular_citadel\code\datums\mood_events\moodular.dm"
#include "modular_citadel\code\datums\mutations\hulk.dm"
#include "modular_citadel\code\datums\status_effects\debuffs.dm"
#include "modular_citadel\code\datums\traits\neutral.dm"