diff --git a/code/datums/uplink_item.dm b/code/datums/uplink_item.dm
index 030f4890756..5963b07faf1 100644
--- a/code/datums/uplink_item.dm
+++ b/code/datums/uplink_item.dm
@@ -374,6 +374,12 @@ var/list/uplink_items = list()
cost = 4
surplus = 8
+/datum/uplink_item/stealthy_weapons/dehy_carp
+ name = "Dehydrated Space Carp"
+ desc = "Just add water to make your very own hostile to everything space carp. It looks just like a plushie."
+ item = /obj/item/toy/carpplushie/dehy_carp
+ cost = 3
+
// STEALTHY TOOLS
/datum/uplink_item/stealthy_tools
diff --git a/code/game/objects/items/dehy_carp.dm b/code/game/objects/items/dehy_carp.dm
new file mode 100644
index 00000000000..f69e9025637
--- /dev/null
+++ b/code/game/objects/items/dehy_carp.dm
@@ -0,0 +1,43 @@
+/*
+ * Dehydrated Carp
+ * Instant carp, just add water
+ */
+
+// Child of carpplushie because this should do everything the toy does and more
+/obj/item/toy/carpplushie/dehy_carp
+ var/mob/owner = null // Carp doesn't attack owner, set when using in hand
+ var/owned = 1 // Boolean, no owner to begin with
+
+// Attack self
+/obj/item/toy/carpplushie/dehy_carp/attack_self(mob/user as mob)
+ src.add_fingerprint(user) // Anyone can add their fingerprints to it with this
+ if(owned)
+ user << "[src] stares up at you with friendly eyes."
+ owner = user
+ owned = 0
+ return ..()
+
+
+/obj/item/toy/carpplushie/dehy_carp/afterattack(obj/O, mob/user,proximity)
+ if(!proximity) return
+ if(istype(O,/obj/structure/sink))
+ user << "You place [src] under a stream of water..."
+ user.drop_item()
+ loc = get_turf(O)
+ return Swell()
+ ..()
+
+/obj/item/toy/carpplushie/dehy_carp/proc/Swell()
+ desc = "It's growing!"
+ visible_message("[src] swells up!")
+
+ // Animation
+ icon = 'icons/mob/animal.dmi'
+ flick("carp_swell", src)
+ // Wait for animation to end
+ sleep(6)
+ // Make space carp
+ var/mob/living/simple_animal/hostile/carp/C = new /mob/living/simple_animal/hostile/carp(get_turf(src))
+ // Make carp non-hostile to user, yes this means
+ C.faction |= "\ref[owner]"
+ qdel(src)
\ No newline at end of file
diff --git a/code/game/objects/items/toys.dm b/code/game/objects/items/toys.dm
index dda26b4fef4..53321b2b4f8 100644
--- a/code/game/objects/items/toys.dm
+++ b/code/game/objects/items/toys.dm
@@ -1038,6 +1038,18 @@ obj/item/toy/cards/deck/syndicate
icon = 'icons/obj/toy.dmi'
icon_state = "carpplushie"
w_class = 2.0
+ attack_verb = list("bitten", "eaten", "fin slapped")
+ var/bitesound = 'sound/weapons/bite.ogg'
+
+// Attack mob
+/obj/item/toy/carpplushie/attack(mob/M as mob, mob/user as mob)
+ playsound(loc, bitesound, 20, 1) // Play bite sound in local area
+ return ..()
+
+// Attack self
+/obj/item/toy/carpplushie/attack_self(mob/user as mob)
+ playsound(src.loc, bitesound, 20, 1)
+ return ..()
/*
* Toy big red button
diff --git a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents.dm b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents.dm
index 33464948243..cd20ab43708 100644
--- a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents.dm
+++ b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents.dm
@@ -253,6 +253,10 @@ datum/reagent/water
color = "#AAAAAA77" // rgb: 170, 170, 170, 77 (alpha)
var/cooling_temperature = 2
+/*
+ * Water reaction to turf
+ */
+
datum/reagent/water/reaction_turf(var/turf/simulated/T, var/volume)
if (!istype(T)) return
var/CT = cooling_temperature
@@ -272,14 +276,29 @@ datum/reagent/water/reaction_turf(var/turf/simulated/T, var/volume)
qdel(hotspot)
return
+/*
+ * Water reaction to an object
+ */
+
datum/reagent/water/reaction_obj(var/obj/O, var/volume)
src = null
+ // Monkey cube
if(istype(O,/obj/item/weapon/reagent_containers/food/snacks/monkeycube))
var/obj/item/weapon/reagent_containers/food/snacks/monkeycube/cube = O
if(!cube.wrapped)
cube.Expand()
+
+ // Dehydrated carp
+ if(istype(O,/obj/item/toy/carpplushie/dehy_carp))
+ var/obj/item/toy/carpplushie/dehy_carp/dehy = O
+ dehy.Swell() // Makes a carp
+
return
+/*
+ * Water reaction to a mob
+ */
+
datum/reagent/water/reaction_mob(var/mob/living/M, var/method=TOUCH, var/volume)//Splashing people with water can help put them out!
if(!istype(M, /mob/living))
return
diff --git a/html/changelogs/CosmicScientist-SpaceCarpTatorItem.yml b/html/changelogs/CosmicScientist-SpaceCarpTatorItem.yml
new file mode 100644
index 00000000000..e89ced52f82
--- /dev/null
+++ b/html/changelogs/CosmicScientist-SpaceCarpTatorItem.yml
@@ -0,0 +1,38 @@
+################################
+# Example Changelog File
+#
+# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb.
+#
+# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.)
+# When it is, any changes listed below will disappear.
+#
+# Valid Prefixes:
+# bugfix
+# wip (For works in progress)
+# tweak
+# soundadd
+# sounddel
+# rscadd (general adding of nice things)
+# rscdel (general deleting of nice things)
+# imageadd
+# imagedel
+# spellcheck (typo fixes)
+# experiment
+# tgs (TG-ported fixes?)
+#################################
+
+# Your name.
+author: CosmicScientist
+
+# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again.
+delete-after: True
+
+# Any changes you've made. See valid prefix list above.
+# INDENT WITH TWO SPACES. NOT TABS. SPACES.
+# SCREW THIS UP AND IT WON'T WORK.
+# Also, this gets changed to [] after reading. Just remove the brackets when you add new shit.
+# Please surround your changes in double quotes ("). It works without them, but if you use certain characters it screws up compiling. The quotes will not show up in the changelog.
+changes:
+ - rscadd: "Added a dehydrated space carp to traitor items, bought with telecrystals. Use dehydrated space carp in hand to school them on loyalty. Add water to create a vicious murder machine just for the halibut."
+ - tweak: "The toy carp plushie now has attack verbs for fun, hit your friend with one today. I put my sole into this mod."
+ - wip: "If you can think of a better fish pun let minnow but I shouldn't leave it to salmon else."
\ No newline at end of file
diff --git a/icons/mob/animal.dmi b/icons/mob/animal.dmi
index 672d83db4da..0997a3676f5 100644
Binary files a/icons/mob/animal.dmi and b/icons/mob/animal.dmi differ
diff --git a/tgstation.dme b/tgstation.dme
index 7864667d004..59f1cc28062 100644
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -549,6 +549,7 @@
#include "code\game\objects\items\bodybag.dm"
#include "code\game\objects\items\candle.dm"
#include "code\game\objects\items\crayons.dm"
+#include "code\game\objects\items\dehy_carp.dm"
#include "code\game\objects\items\documents.dm"
#include "code\game\objects\items\holotape.dm"
#include "code\game\objects\items\latexballoon.dm"