diff --git a/modular_skyrat/modules/borgs/code/robot_upgrade.dm b/modular_skyrat/modules/borgs/code/robot_upgrade.dm
index 77af4f0db1d..7b2da6f87b4 100644
--- a/modular_skyrat/modules/borgs/code/robot_upgrade.dm
+++ b/modular_skyrat/modules/borgs/code/robot_upgrade.dm
@@ -331,4 +331,5 @@
/obj/item/spanking_pad,
/obj/item/tickle_feather,
/obj/item/clothing/erp_leash,
+ /obj/item/clicker
)
diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/erp_belt.dm b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/erp_belt.dm
index a4eec86abf6..e58e0d36d75 100644
--- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/erp_belt.dm
+++ b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/erp_belt.dm
@@ -38,6 +38,7 @@
/obj/item/restraints/handcuffs/lewd,
/obj/item/reagent_containers/cup/lewd_filter,
/obj/item/assembly/signaler, //because it's used for several toys
+ /obj/item/clicker,
//clothing
/obj/item/clothing/mask/ballgag,
diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/_erp_disabled_item_enforcement.dm b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/_erp_disabled_item_enforcement.dm
index 176e615653f..ed83de9dcb5 100644
--- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/_erp_disabled_item_enforcement.dm
+++ b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/_erp_disabled_item_enforcement.dm
@@ -232,3 +232,8 @@
. = ..()
if(CONFIG_GET(flag/disable_lewd_items))
return INITIALIZE_HINT_QDEL
+
+/obj/item/clicker/Initialize(mapload)
+ . = ..()
+ if(CONFIG_GET(flag/disable_lewd_items))
+ return INITIALIZE_HINT_QDEL
diff --git a/modular_zubbers/code/_globalvars/lists/erp_items.dm b/modular_zubbers/code/_globalvars/lists/erp_items.dm
index 82a915157f2..05da84cdb6a 100644
--- a/modular_zubbers/code/_globalvars/lists/erp_items.dm
+++ b/modular_zubbers/code/_globalvars/lists/erp_items.dm
@@ -1,5 +1,6 @@
GLOBAL_LIST_INIT(erp_items, list(
/obj/item/bdsm_candle,
+ /obj/item/clicker,
/obj/item/clothing/ears/kinky_headphones,
/obj/item/clothing/erp_leash,
/obj/item/clothing/glasses/blindfold/kinky,
diff --git a/modular_zubbers/code/modules/lewd_machinery/clicker.dm b/modular_zubbers/code/modules/lewd_machinery/clicker.dm
new file mode 100644
index 00000000000..7a6c477ddf0
--- /dev/null
+++ b/modular_zubbers/code/modules/lewd_machinery/clicker.dm
@@ -0,0 +1,75 @@
+/obj/item/clicker
+ name = "clicker"
+ desc = "A small clicking toy that fits in the palm of your hand, typically used to condition pets into obedience. It makes a satisfying 'click' sound when pressed."
+ icon = 'modular_zubbers/icons/obj/lewd.dmi'
+ icon_state = "clicker_pink"
+ throwforce = 0
+ w_class = WEIGHT_CLASS_TINY
+
+/obj/item/clicker/Initialize(mapload)
+ . = ..()
+ AddComponent(/datum/component/reskinable_item, /datum/atom_skin/clicker)
+
+/datum/atom_skin/clicker
+ abstract_type = /datum/atom_skin/clicker
+
+/datum/atom_skin/clicker/pink
+ preview_name = "Pink"
+ new_icon_state = "clicker_pink"
+
+/datum/atom_skin/clicker/teal
+ preview_name = "Teal"
+ new_icon_state = "clicker_teal"
+
+/obj/item/clicker/proc/click(atom/source, mob/user)
+ SIGNAL_HANDLER
+ source.balloon_alert(user, "click!")
+ playsound(source, "modular_zubbers/sound/lewd/clicker.ogg", 40, FALSE)
+
+/obj/item/clicker/attack_self(mob/user)
+ . = ..()
+ click(src, user)
+
+// If the user has the dominant aura quirk, nearby bottoms will react to the click.
+ if(istype(user, /mob/living))
+ var/mob/living/living_user = user
+ if(living_user.has_quirk(/datum/quirk/dominant_aura) && TIMER_COOLDOWN_FINISHED(living_user, DOMINANT_COOLDOWN_SNAP))
+ for(var/mob/living/carbon/human/sub in hearers(world.view / 2, living_user))
+ if(!sub.has_quirk(/datum/quirk/well_trained) || sub == living_user || sub.stat == DEAD)
+ continue
+
+ if(get_dist(sub, living_user) > world.view / 2)
+ continue
+ sub.dir = get_dir(sub, living_user)
+ sub.emote("me", 1, "suddenly perks up in attention!", TRUE)
+ to_chat(sub, span_purple("You perk up in attention hearing [living_user]'s click!"))
+// Short mood boost for flavour
+ sub.add_mood_event("good_pet", /datum/mood_event/good_pet)
+// Shivering animation
+ animate(sub, pixel_w = 1, time = 0.1 SECONDS, flags = ANIMATION_RELATIVE|ANIMATION_PARALLEL)
+ for(var/i in 1 to 1 SECONDS / (0.2 SECONDS))
+ animate(pixel_w = -2, time = 0.1 SECONDS, flags = ANIMATION_RELATIVE|ANIMATION_CONTINUE)
+ animate(pixel_w = 2, time = 0.1 SECONDS, flags = ANIMATION_RELATIVE|ANIMATION_CONTINUE)
+ animate(pixel_w = -1, time = 0.1 SECONDS, flags = ANIMATION_RELATIVE)
+
+//For the borgs
+ for(var/mob/living/silicon/robot/borg_sub in hearers(world.view / 2, living_user))
+ if(!borg_sub.has_quirk(/datum/quirk/well_trained) || borg_sub == living_user || borg_sub.stat == DEAD)
+ continue
+ borg_sub.dir = get_dir(borg_sub, living_user)
+ borg_sub.emote("me", 1, "suddenly perks up in attention!", TRUE)
+ to_chat(borg_sub, span_purple("You perk up in attention hearing [living_user]'s click!"))
+// Shivering animation
+ animate(borg_sub, pixel_w = 1, time = 0.1 SECONDS, flags = ANIMATION_RELATIVE|ANIMATION_PARALLEL)
+ for(var/i in 1 to 1 SECONDS / (0.2 SECONDS))
+ animate(pixel_w = -2, time = 0.1 SECONDS, flags = ANIMATION_RELATIVE|ANIMATION_CONTINUE)
+ animate(pixel_w = 2, time = 0.1 SECONDS, flags = ANIMATION_RELATIVE|ANIMATION_CONTINUE)
+ animate(borg_sub, pixel_w = -1, time = 0.1 SECONDS, flags = ANIMATION_RELATIVE)
+
+// Shares cooldown with the dominant aura snap
+ TIMER_COOLDOWN_START(living_user, DOMINANT_COOLDOWN_SNAP, 10 SECONDS)
+
+/datum/mood_event/good_pet
+ description = span_nicegreen("Being obedient feels rewarding!")
+ mood_change = 2
+ timeout = 2 MINUTES
diff --git a/modular_zubbers/code/modules/vending/lustwish.dm b/modular_zubbers/code/modules/vending/lustwish.dm
index 9120bb7ebe6..8ef32a2852f 100644
--- a/modular_zubbers/code/modules/vending/lustwish.dm
+++ b/modular_zubbers/code/modules/vending/lustwish.dm
@@ -22,9 +22,19 @@
/obj/item/clothing/under/costume/loincloth/cloth/sensor = 6,
/obj/item/clothing/shoes/jackboots/toeless = 6,
)
+ ),
+
+ list(
+ "name" = "Toys",
+ "icon" = FA_ICON_MAGIC_WAND_SPARKLES,
+ "products" = list(
+ /obj/item/clicker = 6,
+
+ )
)
)
+
zubbers_premium = list(
/obj/item/clothing/neck/kink_collar/locked/gps = 3,
/obj/item/holosign_creator/sex = 6,
diff --git a/modular_zubbers/icons/obj/lewd.dmi b/modular_zubbers/icons/obj/lewd.dmi
new file mode 100644
index 00000000000..96574fa622d
Binary files /dev/null and b/modular_zubbers/icons/obj/lewd.dmi differ
diff --git a/modular_zubbers/sound/lewd/clicker.ogg b/modular_zubbers/sound/lewd/clicker.ogg
new file mode 100644
index 00000000000..17ad80db9da
Binary files /dev/null and b/modular_zubbers/sound/lewd/clicker.ogg differ
diff --git a/tgstation.dme b/tgstation.dme
index 15af33e4aeb..254a5cd21dd 100644
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -9463,6 +9463,7 @@
#include "modular_zubbers\code\modules\languages\siikmaas.dm"
#include "modular_zubbers\code\modules\languages\uncommon.dm"
#include "modular_zubbers\code\modules\languages\vampiric.dm"
+#include "modular_zubbers\code\modules\lewd_machinery\clicker.dm"
#include "modular_zubbers\code\modules\lewd_machinery\lustwish.dm"
#include "modular_zubbers\code\modules\lewd_machinery\sex_barrier.dm"
#include "modular_zubbers\code\modules\limbgrowncorpses\limbgrowerblanks.dm"