diff --git a/code/datums/uplink/implants.dm b/code/datums/uplink/implants.dm
index 3b86f1456bb..48a67a3c8d3 100644
--- a/code/datums/uplink/implants.dm
+++ b/code/datums/uplink/implants.dm
@@ -11,6 +11,7 @@
/datum/uplink_item/item/implants/imp_compress
name = "Compressed Matter Implant"
+ desc = "A box containing a single implanter and matter cartridge. To remove an unintended target, use the implanter in-hand then open the cartridge with a screwdriver."
item_cost = 8
path = /obj/item/storage/box/syndie_kit/imp_compress
diff --git a/code/game/objects/items/weapons/implants/implant.dm b/code/game/objects/items/weapons/implants/implant.dm
index c09bd2fe83c..14e9f2c6033 100644
--- a/code/game/objects/items/weapons/implants/implant.dm
+++ b/code/game/objects/items/weapons/implants/implant.dm
@@ -594,6 +594,26 @@ the implant may become unstable and either pre-maturely inject the subject or si
var/activation_emote = "sigh"
var/obj/item/scanned = null
+/obj/item/implant/compressed/attackby(var/obj/item/T, mob/user)
+ if(T.isscrewdriver())
+ if(!scanned)
+ to_chat(user, SPAN_NOTICE("There is nothing to remove from the implant."))
+ else
+ to_chat(user, SPAN_NOTICE("You remove \the [scanned] from the implant."))
+ user.put_in_hands(scanned)
+ scanned = null
+ if(istype(T, /obj/item/implanter))
+ var/obj/item/implanter/implanter = T
+ if(implanter.imp)
+ to_chat(user, SPAN_NOTICE("\The [implanter] already has an implant loaded."))
+ return
+ user.drop_from_inventory(src)
+ forceMove(implanter)
+ implanter.imp = src
+ implanter.update()
+ else
+ ..()
+
/obj/item/implant/compressed/get_data()
. = {"
Implant Specifications:
diff --git a/code/game/objects/items/weapons/implants/implanter.dm b/code/game/objects/items/weapons/implants/implanter.dm
index 84ee87591b9..5ad9dd3e5a2 100644
--- a/code/game/objects/items/weapons/implants/implanter.dm
+++ b/code/game/objects/items/weapons/implants/implanter.dm
@@ -127,8 +127,11 @@
return
if(istype(A,/obj/item) && imp)
var/obj/item/implant/compressed/c = imp
+ if(istype(A,/obj/item/implant/compressed))
+ to_chat(user, SPAN_NOTICE("The implant is loaded into the implanter."))
+ return
if (c.scanned)
- to_chat(user, "Something is already scanned inside the implant!")
+ to_chat(user, SPAN_WARNING("Something is already scanned inside the implant!"))
return
c.scanned = A
if(istype(A.loc,/mob/living/carbon/human))
diff --git a/html/changelogs/hockaa-matterimplant.yml b/html/changelogs/hockaa-matterimplant.yml
new file mode 100644
index 00000000000..3baf0e0f953
--- /dev/null
+++ b/html/changelogs/hockaa-matterimplant.yml
@@ -0,0 +1,8 @@
+author: Hocka
+
+delete-after: True
+
+changes:
+ - bugfix: "Fixed the compressed matter implanter trying to scan it's own implant when trying to put it back in."
+ - tweak: "Items that were canned by a compressed matter implanter can now be returned by activating the implanter in hand and using a screwdriver on the implant."
+ - tweak: "The compressed matter implant listing on the uplink now has a more accurate description for retrieving scanned items."
\ No newline at end of file