diff --git a/code/_globalvars/lists/objects.dm b/code/_globalvars/lists/objects.dm
index aa1082cdf82..25454eefcff 100644
--- a/code/_globalvars/lists/objects.dm
+++ b/code/_globalvars/lists/objects.dm
@@ -14,4 +14,5 @@ var/global/list/chemical_reagents_list //list of all /datum/reagent datums in
var/global/list/surgeries_list = list() //list of all surgeries by name, associated with their path.
var/global/list/table_recipes = list() //list of all table craft recipes
var/global/list/rcd_list = list() //list of Rapid Construction Devices.
-var/global/list/apcs_list = list() //list of all Area Power Controller machines, seperate from machines for powernet speeeeeeed.
\ No newline at end of file
+var/global/list/apcs_list = list() //list of all Area Power Controller machines, seperate from machines for powernet speeeeeeed.
+var/global/list/tracking_implants = list() //list of all tracking implants to work out what treks everyone are on. Sadly not on lavaworld not implemented...
\ No newline at end of file
diff --git a/code/game/machinery/computer/prisoner.dm b/code/game/machinery/computer/prisoner.dm
index ed568709958..679d9282e31 100644
--- a/code/game/machinery/computer/prisoner.dm
+++ b/code/game/machinery/computer/prisoner.dm
@@ -33,7 +33,7 @@
dat += "
Prisoner Implant Management
"
dat += "
Chemical Implants
"
var/turf/Tr = null
- for(var/obj/item/weapon/implant/chem/C in world)
+ for(var/obj/item/weapon/implant/chem/C in tracking_implants)
Tr = get_turf(C)
if((Tr) && (Tr.z != src.z)) continue//Out of range
if(!C.implanted) continue
@@ -43,7 +43,7 @@
dat += "((10))
"
dat += "********************************
"
dat += "
Tracking Implants
"
- for(var/obj/item/weapon/implant/tracking/T in world)
+ for(var/obj/item/weapon/implant/tracking/T in tracking_implants)
if(!iscarbon(T.imp_in))
continue
if(!T.implanted)
diff --git a/code/game/machinery/teleporter.dm b/code/game/machinery/teleporter.dm
index 1cbf53376ea..c53ee120311 100644
--- a/code/game/machinery/teleporter.dm
+++ b/code/game/machinery/teleporter.dm
@@ -180,7 +180,7 @@
areaindex[tmpname] = 1
L[tmpname] = R
- for (var/obj/item/weapon/implant/tracking/I in world)
+ for (var/obj/item/weapon/implant/tracking/I in tracking_implants)
if (!I.implanted || !ismob(I.loc))
continue
else
diff --git a/code/game/objects/items/weapons/implants/implant.dm b/code/game/objects/items/weapons/implants/implant.dm
index 1522d73b8f5..a01bfb82ca1 100644
--- a/code/game/objects/items/weapons/implants/implant.dm
+++ b/code/game/objects/items/weapons/implants/implant.dm
@@ -87,6 +87,15 @@
origin_tech = "materials=2;magnets=2;programming=2;biotech=2"
var/id = 1
+
+/obj/item/weapon/implant/tracking/New()
+ ..()
+ tracking_implants += src
+
+/obj/item/weapon/implant/tracking/Destroy()
+ ..()
+ tracking_implants -= src
+
/obj/item/weapon/implant/tracking/get_data()
var/dat = {"Implant Specifications:
Name: Tracking Beacon
diff --git a/code/game/objects/items/weapons/implants/implant_chem.dm b/code/game/objects/items/weapons/implants/implant_chem.dm
index 6f85742039b..312363d6713 100644
--- a/code/game/objects/items/weapons/implants/implant_chem.dm
+++ b/code/game/objects/items/weapons/implants/implant_chem.dm
@@ -24,6 +24,14 @@
/obj/item/weapon/implant/chem/New()
..()
create_reagents(50)
+ tracking_implants += src
+
+/obj/item/weapon/implant/chem/Destroy()
+ ..()
+ tracking_implants -= src
+
+
+
/obj/item/weapon/implant/chem/trigger(emote, mob/source)
if(emote == "deathgasp")
diff --git a/code/game/objects/items/weapons/teleportation.dm b/code/game/objects/items/weapons/teleportation.dm
index 0bf17d4be30..da8ffa7cef0 100644
--- a/code/game/objects/items/weapons/teleportation.dm
+++ b/code/game/objects/items/weapons/teleportation.dm
@@ -78,7 +78,7 @@ Frequency:
src.temp += "[W.code]-[dir2text(get_dir(sr, tr))]-[direct]
"
src.temp += "Extranneous Signals:
"
- for (var/obj/item/weapon/implant/tracking/W in world)
+ for (var/obj/item/weapon/implant/tracking/W in tracking_implants)
if (!W.implanted || !ismob(W.loc))
continue
else