diff --git a/code/game/objects/items/robot/robot_upgrades.dm b/code/game/objects/items/robot/robot_upgrades.dm
index 82fbab128c1a..63bfe6eeb396 100644
--- a/code/game/objects/items/robot/robot_upgrades.dm
+++ b/code/game/objects/items/robot/robot_upgrades.dm
@@ -420,3 +420,47 @@
R.hasExpanded = TRUE
R.update_transform()
return TRUE
+
+/obj/item/borg/upgrade/rped
+ name = "engineering cyborg RPED"
+ desc = "A rapid part exchange device for the engineering cyborg."
+ icon = 'icons/obj/storage.dmi'
+ icon_state = "borgrped"
+ require_module = TRUE
+ module_type = /obj/item/robot_module/engineering
+
+/obj/item/borg/upgrade/rped/action(mob/living/silicon/robot/R)
+ if(..())
+ return
+
+ var/obj/item/storage/part_replacer/cyborg/RPED = locate() in R
+ if(RPED)
+ to_chat(usr, "This unit is already equipped with a RPED module.")
+ return FALSE
+
+ RPED = new(R.module)
+ R.module.basic_modules += RPED
+ R.module.add_module(RPED, FALSE, TRUE)
+ return TRUE
+
+/obj/item/borg/upgrade/pinpointer
+ name = "medical cyborg crew pinpointer"
+ desc = "A crew pinpointer module for the medical cyborg."
+ icon = 'icons/obj/device.dmi'
+ icon_state = "pinpointer_crew"
+ require_module = TRUE
+ module_type = /obj/item/robot_module/medical
+
+/obj/item/borg/upgrade/pinpointer/action(mob/living/silicon/robot/R)
+ if(..())
+ return
+
+ var/obj/item/pinpointer/crew/PP = locate() in R
+ if(PP)
+ to_chat(usr, "This unit is already equipped with a pinpointer module.")
+ return FALSE
+
+ PP = new(R.module)
+ R.module.basic_modules += PP
+ R.module.add_module(PP, FALSE, TRUE)
+ return TRUE
diff --git a/code/modules/research/designs/mechfabricator_designs.dm b/code/modules/research/designs/mechfabricator_designs.dm
index c18d618a0af4..dfb60da246dd 100644
--- a/code/modules/research/designs/mechfabricator_designs.dm
+++ b/code/modules/research/designs/mechfabricator_designs.dm
@@ -714,6 +714,24 @@
construction_time = 50
category = list("Misc")
+/datum/design/borg_upgrade_rped
+ name = "Cyborg Upgrade (RPED)"
+ id = "borg_upgrade_rped"
+ build_type = MECHFAB
+ build_path = /obj/item/borg/upgrade/rped
+ materials = list(MAT_METAL = 10000, MAT_GLASS = 5000)
+ construction_time = 120
+ category = list("Cyborg Upgrade Modules")
+
+/datum/design/borg_upgrade_pinpointer
+ name = "Cyborg Upgrade (Crew pinpointer)"
+ id = "borg_upgrade_pinpointer"
+ build_type = MECHFAB
+ build_path = /obj/item/borg/upgrade/pinpointer
+ materials = list(MAT_METAL = 1000, MAT_GLASS = 500)
+ construction_time = 120
+ category = list("Cyborg Upgrade Modules")
+
//Misc
/datum/design/mecha_tracking
name = "Exosuit Tracking Beacon"
diff --git a/code/modules/research/stock_parts.dm b/code/modules/research/stock_parts.dm
index 0e2e788b8f36..7c247d0b67c5 100644
--- a/code/modules/research/stock_parts.dm
+++ b/code/modules/research/stock_parts.dm
@@ -63,6 +63,14 @@ If you create T5+ please take a pass at gene_modder.dm [L40]. Max_values MUST fi
else
playsound(src, pshoom_or_beepboopblorpzingshadashwoosh, 40, 1)
+/obj/item/storage/part_replacer/cyborg
+ name = "rapid part exchange device"
+ desc = "Special mechanical module made to store, sort, and apply standard machine parts."
+ icon_state = "borgrped"
+ item_state = "RPED"
+ lefthand_file = 'icons/mob/inhands/misc/devices_lefthand.dmi'
+ righthand_file = 'icons/mob/inhands/misc/devices_righthand.dmi'
+
//Sorts stock parts inside an RPED by their rating.
//Only use /obj/item/stock_parts/ with this sort proc!
/proc/cmp_rped_sort(obj/item/stock_parts/A, obj/item/stock_parts/B)
diff --git a/code/modules/research/techweb/all_nodes.dm b/code/modules/research/techweb/all_nodes.dm
index cba6bf86767c..4b5a23143974 100644
--- a/code/modules/research/techweb/all_nodes.dm
+++ b/code/modules/research/techweb/all_nodes.dm
@@ -214,7 +214,7 @@
display_name = "Cyborg Upgrades: Utility"
description = "Utility upgrades for cybogs."
prereq_ids = list("engineering", "cyborg")
- design_ids = list("borg_upgrade_holding", "borg_upgrade_lavaproof", "borg_upgrade_thrusters", "borg_upgrade_selfrepair", "borg_upgrade_expand")
+ design_ids = list("borg_upgrade_holding", "borg_upgrade_lavaproof", "borg_upgrade_thrusters", "borg_upgrade_selfrepair", "borg_upgrade_expand", "borg_upgrade_rped")
research_cost = 2500
export_price = 5000
@@ -223,7 +223,7 @@
display_name = "Cyborg Upgrades: Medical"
description = "Medical upgrades for cyborgs."
prereq_ids = list("adv_biotech", "cyborg")
- design_ids = list("borg_upgrade_defibrillator", "borg_upgrade_piercinghypospray", "borg_upgrade_highstrengthsynthesiser", "borg_upgrade_expandedsynthesiser")
+ design_ids = list("borg_upgrade_defibrillator", "borg_upgrade_piercinghypospray", "borg_upgrade_highstrengthsynthesiser", "borg_upgrade_expandedsynthesiser", "borg_upgrade_pinpointer")
research_cost = 2500
export_price = 5000
diff --git a/icons/obj/storage.dmi b/icons/obj/storage.dmi
index dadf8430413d..18b6c45586f5 100644
Binary files a/icons/obj/storage.dmi and b/icons/obj/storage.dmi differ