diff --git a/code/game/gamemodes/changeling/generic_equip_procs.dm b/code/game/gamemodes/changeling/generic_equip_procs.dm
index 638bd59930..9a51a3fc01 100644
--- a/code/game/gamemodes/changeling/generic_equip_procs.dm
+++ b/code/game/gamemodes/changeling/generic_equip_procs.dm
@@ -39,7 +39,7 @@
return 1
//This is a generic proc that should be called by other ling weapon procs to equip them.
-/mob/proc/changeling_generic_weapon(var/weapon_type, var/make_sound = 1)
+/mob/proc/changeling_generic_weapon(var/weapon_type, var/make_sound = 1, var/cost = 20)
var/datum/changeling/changeling = changeling_power(20,1,100,CONSCIOUS)
if(!changeling)
return
@@ -56,7 +56,7 @@
var/obj/item/weapon/W = new weapon_type(src)
src.put_in_hands(W)
- src.mind.changeling.chem_charges -= 20
+ src.mind.changeling.chem_charges -= cost
if(make_sound)
playsound(src, 'sound/effects/blobattack.ogg', 30, 1)
return 1
\ No newline at end of file
diff --git a/code/game/gamemodes/changeling/powers/electric_lockpick.dm b/code/game/gamemodes/changeling/powers/electric_lockpick.dm
new file mode 100644
index 0000000000..c8c87e6a9d
--- /dev/null
+++ b/code/game/gamemodes/changeling/powers/electric_lockpick.dm
@@ -0,0 +1,93 @@
+/datum/power/changeling/electric_lockpick
+ name = "Electric Lockpick"
+ desc = "We discreetly evolve a finger to be able to send a small electric charge. \
+ We can open most electrical locks, but it will be obvious when we do so."
+ helptext = "Use the ability, then touch something that utilizes an electrical locking system, to open it. Each use costs 10 chemicals."
+ genomecost = 3
+ verbpath = /mob/proc/changeling_electric_lockpick
+
+//Emag-lite
+/mob/proc/changeling_electric_lockpick()
+ set category = "Changeling"
+ set name = "Electric Lockpick (5 + 10/use)"
+ set desc = "Bruteforces open most electrical locking systems, at 10 chemicals per use."
+
+ var/datum/changeling/changeling = changeling_power(5,0,100,CONSCIOUS)
+
+ var/obj/held_item = get_active_hand()
+
+ if(!changeling)
+ return 0
+
+ if(held_item == null)
+ if(changeling_generic_weapon(/obj/item/weapon/finger_lockpick,0,5)) //Chemical cost is handled in the equip proc.
+ return 1
+ return 0
+
+/obj/item/weapon/finger_lockpick
+ name = "finger lockpick"
+ desc = "This finger appears to be an organic datajack."
+ icon = 'icons/obj/weapons.dmi'
+ icon_state = "electric_hand"
+
+/obj/item/weapon/finger_lockpick/New()
+ if(ismob(loc))
+ loc << "We shape our finger to fit inside electronics, and are ready to force them open."
+
+/obj/item/weapon/finger_lockpick/dropped(mob/user)
+ user << "We discreetly shape our finger back to a less suspicious form."
+ spawn(1)
+ if(src)
+ qdel(src)
+
+/obj/item/weapon/finger_lockpick/afterattack(var/atom/target, var/mob/living/user, proximity)
+ if(!target)
+ return
+ if(!proximity)
+ return
+ if(!user.mind.changeling)
+ return
+
+ var/datum/changeling/ling_datum = user.mind.changeling
+
+ if(ling_datum.chem_charges < 10)
+ user << "We require more chemicals to do that."
+ return
+
+ //Airlocks require an ugly block of code, but we don't want to just call emag_act(), since we don't want to break airlocks forever.
+ if(istype(target,/obj/machinery/door))
+ var/obj/machinery/door/door = target
+ user << "We send an electrical pulse up our finger, and into \the [target], attempting to open it."
+
+ if(door.density && door.operable())
+ door.do_animate("spark")
+ sleep(6)
+ //More typechecks, because windoors can't be locked. Fun.
+ if(istype(target,/obj/machinery/door/airlock))
+ var/obj/machinery/door/airlock/airlock = target
+
+ if(airlock.locked) //Check if we're bolted.
+ airlock.unlock()
+ user << "We've unlocked \the [airlock]. Another pulse is requried to open it."
+ else //We're not bolted, so open the door already.
+ airlock.open()
+ user << "We've opened \the [airlock]."
+ else
+ door.open() //If we're a windoor, open the windoor.
+ user << "We've opened \the [door]."
+ else //Probably broken or no power.
+ user << "The door does not respond to the pulse."
+ door.add_fingerprint(user)
+ ling_datum.chem_charges -= 10
+ return 1
+
+ else if(istype(target,/obj/)) //This should catch everything else we might miss, without a million typechecks.
+ var/obj/O = target
+ user << "We send an electrical pulse up our finger, and into \the [O]."
+ O.add_fingerprint(user)
+ O.emag_act(1,user,src)
+ log_and_message_admins("emagged \an [O].")
+ ling_datum.chem_charges -= 10
+
+ return 1
+ return 0
\ No newline at end of file
diff --git a/polaris.dme b/polaris.dme
index 1b7026b03a..4653cf1d9d 100644
--- a/polaris.dme
+++ b/polaris.dme
@@ -298,6 +298,7 @@
#include "code\game\gamemodes\changeling\powers\cryo_sting.dm"
#include "code\game\gamemodes\changeling\powers\deaf_sting.dm"
#include "code\game\gamemodes\changeling\powers\digital_camo.dm"
+#include "code\game\gamemodes\changeling\powers\electric_lockpick.dm"
#include "code\game\gamemodes\changeling\powers\engorged_glands.dm"
#include "code\game\gamemodes\changeling\powers\epinephrine_overdose.dm"
#include "code\game\gamemodes\changeling\powers\extract_dna_sting.dm"