diff --git a/code/game/objects/items/devices/advnifrepair.dm b/code/game/objects/items/devices/advnifrepair.dm
new file mode 100644
index 0000000000..987bee8b37
--- /dev/null
+++ b/code/game/objects/items/devices/advnifrepair.dm
@@ -0,0 +1,64 @@
+//Programs nanopaste into NIF repair nanites
+/obj/item/device/nifrepairer
+ name = "advanced NIF repair tool"
+ desc = "A tool that accepts nanopaste and converts the nanites into NIF repair nanites for injection/ingestion. Insert paste, deposit into container."
+ icon = 'icons/obj/device_alt.dmi'
+ icon_state = "hydro"
+ item_state = "gun"
+ flags = CONDUCT
+ slot_flags = SLOT_BELT
+ throwforce = 3
+ w_class = ITEMSIZE_SMALL
+ throw_speed = 5
+ throw_range = 10
+ matter = list(DEFAULT_WALL_MATERIAL = 4000, "glass" = 6000)
+ origin_tech = list(TECH_MAGNET = 5, TECH_BLUESPACE = 5, TECH_MATERIAL = 5, TECH_ENGINEERING = 5, TECH_DATA = 5)
+ var/datum/reagents/supply
+ var/efficiency = 15 //How many units reagent per 1 unit nanopaste
+
+
+/obj/item/device/nifrepairer/New()
+ ..()
+
+ supply = new(max = 60, A = src)
+
+/obj/item/device/nifrepairer/attackby(obj/W, mob/user)
+ if(istype(W,/obj/item/stack/nanopaste))
+ var/obj/item/stack/nanopaste/np = W
+ if(np.use(1) && supply.get_free_space() >= efficiency)
+ to_chat(user,"You convert some nanopaste into programmed nanites inside \the [src].")
+ supply.add_reagent(id = "nifrepairnanites", amount = efficiency)
+ update_icon()
+ else if(supply.get_free_space() < efficiency)
+ to_chat(user,"\The [src] is too full. Empty it into a container first.")
+ return
+
+/obj/item/device/nifrepairer/update_icon()
+ if(supply.total_volume)
+ icon_state = "[initial(icon_state)]2"
+ else
+ icon_state = initial(icon_state)
+
+/obj/item/device/nifrepairer/afterattack(var/atom/target, var/mob/user, var/proximity)
+ if(!target.is_open_container() || !target.reagents)
+ return 0
+
+ if(!supply || !supply.total_volume)
+ to_chat(user,"[src] is empty. Feed it nanopaste.")
+ return 1
+
+ if(!target.reagents.get_free_space())
+ user << "[target] is already full."
+ return 1
+
+ var/trans = supply.trans_to(target, 15)
+ to_chat(user,"You transfer [trans] units of the programmed nanites to [target].")
+ update_icon()
+ return 1
+
+/obj/item/device/nifrepairer/examine(mob/user)
+ if(..(user, 1))
+ if(supply.total_volume)
+ to_chat(user,"\The [src] contains [supply.total_volume] units of programmed nanites, ready for dispensing.")
+ else
+ to_chat(user,"\The [src] is empty and ready to accept nanopaste.")
diff --git a/code/modules/reagents/Chemistry-Reagents_vr.dm b/code/modules/reagents/Chemistry-Reagents_vr.dm
index 6b10c00913..b841375b84 100644
--- a/code/modules/reagents/Chemistry-Reagents_vr.dm
+++ b/code/modules/reagents/Chemistry-Reagents_vr.dm
@@ -26,3 +26,21 @@
required_reagents = list("blood" = 5)
result_amount = 30
required = /obj/item/slime_extract/sapphire
+
+/datum/reagent/nif_repair_nanites
+ name = "Programmed Nanomachines"
+ id = "nifrepairnanites"
+ description = "A thick grey slurry of NIF repair nanomachines."
+ taste_description = "metallic"
+ reagent_state = LIQUID
+ color = "#333333"
+ scannable = 1
+
+/datum/reagent/nif_repair_nanites/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
+ if(ishuman(M))
+ var/mob/living/carbon/human/H = M
+ if(H.nif)
+ var/obj/item/device/nif/nif = H.nif //L o c a l
+ if(nif.stat == NIF_TEMPFAIL)
+ nif.stat = NIF_INSTALLING
+ nif.durability = min(nif.durability + removed, initial(nif.durability))
diff --git a/code/modules/research/designs_vr.dm b/code/modules/research/designs_vr.dm
index 75e96834f6..4faf8e9983 100644
--- a/code/modules/research/designs_vr.dm
+++ b/code/modules/research/designs_vr.dm
@@ -108,6 +108,14 @@
build_path = /obj/item/device/nif
sort_string = "HABBC"
+/datum/design/item/nifrepairtool
+ name = "adv. NIF repair tool"
+ id = "anrt"
+ req_tech = list(TECH_MAGNET = 5, TECH_BLUESPACE = 5, TECH_MATERIAL = 5, TECH_ENGINEERING = 5, TECH_DATA = 5)
+ materials = list(DEFAULT_WALL_MATERIAL = 5000, "glass" = 8000)
+ build_path = /obj/item/device/nifrepairer
+ sort_string = "HABBD"
+
// Resleeving Circuitboards
/datum/design/circuit/transhuman_clonepod
diff --git a/icons/obj/device_alt.dmi b/icons/obj/device_alt.dmi
index 9c4d2f6b7b..7f872af146 100644
Binary files a/icons/obj/device_alt.dmi and b/icons/obj/device_alt.dmi differ
diff --git a/vorestation.dme b/vorestation.dme
index 3125a33ac7..684945b0ae 100644
--- a/vorestation.dme
+++ b/vorestation.dme
@@ -883,6 +883,7 @@
#include "code\game\objects\items\toys.dm"
#include "code\game\objects\items\trash.dm"
#include "code\game\objects\items\trash_vr.dm"
+#include "code\game\objects\items\devices\advnifrepair.dm"
#include "code\game\objects\items\devices\ai_detector.dm"
#include "code\game\objects\items\devices\aicard.dm"
#include "code\game\objects\items\devices\binoculars.dm"