diff --git a/code/datums/hud.dm b/code/datums/hud.dm
index 39d63400ddb..14e79c51f35 100644
--- a/code/datums/hud.dm
+++ b/code/datums/hud.dm
@@ -20,6 +20,8 @@ var/datum/atom_hud/huds = list( \
var/list/hud_icons = list() //these will be the indexes for the atom's hud_list
/datum/atom_hud/proc/remove_hud_from(var/mob/M)
+ if(locate(src,M.permanent_huds))
+ return
for(var/atom/A in hudatoms)
remove_from_single_hud(M, A)
hudusers -= M
diff --git a/code/modules/mob/mob_defines.dm b/code/modules/mob/mob_defines.dm
index 6a4aa3f319f..ab645c61223 100644
--- a/code/modules/mob/mob_defines.dm
+++ b/code/modules/mob/mob_defines.dm
@@ -161,4 +161,5 @@
var/atom/movable/remote_control //Calls relaymove() to whatever it is
var/turf/listed_turf = null //the current turf being examined in the stat panel
- var/last_movement = 0 // Last world.time the mob actually moved of its own accord.
\ No newline at end of file
+ var/last_movement = 0 // Last world.time the mob actually moved of its own accord.
+ var/permanent_huds = new /list()
\ No newline at end of file
diff --git a/code/modules/surgery/eye_cybernetic_implant.dm b/code/modules/surgery/eye_cybernetic_implant.dm
new file mode 100644
index 00000000000..31f5e74c552
--- /dev/null
+++ b/code/modules/surgery/eye_cybernetic_implant.dm
@@ -0,0 +1,31 @@
+/datum/surgery/eye_cybernetic_implant
+ name = "eye cybernetic implant"
+ steps = list(/datum/surgery_step/incise, /datum/surgery_step/clamp_bleeders, /datum/surgery_step/retract_skin, /datum/surgery_step/cybernetic_implant, /datum/surgery_step/fix_eyes, /datum/surgery_step/close)
+ location = "eyes"
+
+/datum/surgery_step/cybernetic_implant
+ accept_any_item = 1
+ time = 32
+
+/datum/surgery_step/cybernetic_implant/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
+ if(istype(tool,/obj/item/organ/cybernetic_implant))
+ user.visible_message("[user] begins to implant [target] with [tool].")
+
+/datum/surgery_step/cybernetic_implant/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
+ if(tool)
+ if(!istype(tool, /obj/item/organ/cybernetic_implant/eyes))
+ user.visible_message("[user] can't seem to fit [tool] in [target]'s [target_zone].")
+ return 0
+ else if(locate(/obj/item/organ/cybernetic_implant/eyes,target.internal_organs))
+ user.visible_message("[user] can't seem to add any more implants into [target].")
+ return 0
+ else
+ user.visible_message("[user] inserts [tool] into [target]'s [target_zone]!")
+ user.drop_item()
+ target.internal_organs += tool
+ tool.loc = target
+
+ var/obj/item/organ/cybernetic_implant/implant = tool
+ implant.owner = target
+ implant.function()
+ return 1
\ No newline at end of file
diff --git a/code/modules/surgery/organs/cybernetic_implants.dm b/code/modules/surgery/organs/cybernetic_implants.dm
new file mode 100644
index 00000000000..eee16eaac1e
--- /dev/null
+++ b/code/modules/surgery/organs/cybernetic_implants.dm
@@ -0,0 +1,51 @@
+/obj/item/organ/cybernetic_implant
+ name = "cybernetic implant"
+ desc = "a state-of-the-art implant that improves a baseline's functionality"
+ var/mob/owner = null
+
+/obj/item/organ/cybernetic_implant/proc/function()
+ return
+
+/obj/item/organ/cybernetic_implant/eyes
+ name = "cybernetic eyes"
+ desc = "artificial photoreceptors with specialized functionality"
+ icon_state = "hudeye"
+ var/eye_color = "fff"
+
+/obj/item/organ/cybernetic_implant/eyes/proc/update_eye_color()
+ if(istype(owner,/mob/living/carbon/human))
+ var/mob/living/carbon/human/HMN = owner
+ HMN.eye_color = eye_color
+ HMN.regenerate_icons()
+
+/obj/item/organ/cybernetic_implant/eyes/medical_hud
+ name = "medical hud implant"
+ desc = "These cybernetic eyes will display a permanent medical HUD over everything you see. Wiggle eyes to control."
+ icon_state = "hudeye"
+ eye_color = "0ff"
+
+/obj/item/organ/cybernetic_implant/eyes/medical_hud/function()
+ if(!owner)
+ return
+
+ var/datum/atom_hud/H = huds[DATA_HUD_MEDICAL_ADVANCED]
+ H.add_hud_to(owner)
+ owner.permanent_huds |= H
+
+ update_eye_color()
+
+/obj/item/organ/cybernetic_implant/eyes/security_hud
+ name = "security hud implant"
+ desc = "These cybernetic eyes will display a permanent security HUD over everything you see. Wiggle eyes to control."
+ icon_state = "hudeye"
+ eye_color = "b00"
+
+/obj/item/organ/cybernetic_implant/eyes/security_hud/function()
+ if(!owner)
+ return
+
+ var/datum/atom_hud/H = huds[DATA_HUD_SECURITY_ADVANCED]
+ H.add_hud_to(owner)
+ owner.permanent_huds |= H
+
+ update_eye_color()
\ No newline at end of file
diff --git a/icons/obj/surgery.dmi b/icons/obj/surgery.dmi
index 28390abff25..ac54bf1759a 100644
Binary files a/icons/obj/surgery.dmi and b/icons/obj/surgery.dmi differ
diff --git a/tgstation.dme b/tgstation.dme
index 89df2df7e99..d6acffeeab7 100644
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -1382,6 +1382,7 @@
#include "code\modules\surgery\brain_removal.dm"
#include "code\modules\surgery\cavity_implant.dm"
#include "code\modules\surgery\core_removal.dm"
+#include "code\modules\surgery\eye_cybernetic_implant.dm"
#include "code\modules\surgery\eye_surgery.dm"
#include "code\modules\surgery\gender_reassignment.dm"
#include "code\modules\surgery\generic_steps.dm"
@@ -1396,6 +1397,7 @@
#include "code\modules\surgery\tools.dm"
#include "code\modules\surgery\xenomorph_removal.dm"
#include "code\modules\surgery\organs\augments.dm"
+#include "code\modules\surgery\organs\cybernetic_implants.dm"
#include "code\modules\surgery\organs\helpers.dm"
#include "code\modules\surgery\organs\organ.dm"
#include "code\modules\telesci\bscrystal.dm"