diff --git a/code/game/machinery/PDApainter.dm b/code/game/machinery/PDApainter.dm
index 6bac63dff0..ac616e21ab 100644
--- a/code/game/machinery/PDApainter.dm
+++ b/code/game/machinery/PDApainter.dm
@@ -101,7 +101,7 @@
else
return ..()
-/obj/machinery/pdapainter/deconstruct(disassembled = TRUE)
+/obj/machinery/aug_manipulator/obj_break(damage_flag)
if(!(flags_1 & NODECONSTRUCT_1))
if(!(stat & BROKEN))
stat |= BROKEN
diff --git a/code/game/machinery/aug_manipulator.dm b/code/game/machinery/aug_manipulator.dm
index 28733a6b6c..169425353e 100644
--- a/code/game/machinery/aug_manipulator.dm
+++ b/code/game/machinery/aug_manipulator.dm
@@ -16,6 +16,7 @@
. += "Alt-click to eject the limb."
/obj/machinery/aug_manipulator/Initialize()
+ . = ..()
initial_icon_state = initial(icon_state)
return ..()
diff --git a/sandcode/code/game/machinery/PDApainter.dm b/sandcode/code/game/machinery/PDApainter.dm
new file mode 100644
index 0000000000..7eb1de31fa
--- /dev/null
+++ b/sandcode/code/game/machinery/PDApainter.dm
@@ -0,0 +1,28 @@
+/obj/machinery/pdapainter
+ circuit = /obj/item/circuitboard/machine/pdapainter
+
+/obj/machinery/pdapainter/Initialize() //aug_manipulator code is so stupid that i sincerely can't make out why it doesn't just work normally
+ . = ..() //in any case if you figure out how to make it just work normally, have a go at it.
+ if(!component_parts)
+ circuit = null
+ circuit = new /obj/item/circuitboard/machine/pdapainter
+ component_parts = list()
+ component_parts += circuit
+
+/obj/machinery/pdapainter/examine(mob/user)
+ . += ..()
+ if(panel_open)
+ . += "Its maintenance panel is currently open."
+
+/obj/machinery/pdapainter/screwdriver_act(mob/living/user, obj/item/W)
+ . = TRUE
+ if(..())
+ return
+ if(default_deconstruction_screwdriver(user, icon_state, icon_state, W))
+ return TRUE
+ return FALSE
+
+/obj/machinery/pdapainter/crowbar_act(mob/living/user, obj/item/W)
+ . = ..()
+ if(default_deconstruction_crowbar(W, FALSE))
+ return TRUE
diff --git a/sandcode/code/game/machinery/aug_manipulator.dm b/sandcode/code/game/machinery/aug_manipulator.dm
new file mode 100644
index 0000000000..6f9f6dc8e4
--- /dev/null
+++ b/sandcode/code/game/machinery/aug_manipulator.dm
@@ -0,0 +1,28 @@
+/obj/machinery/aug_manipulator
+ circuit = /obj/item/circuitboard/machine/aug_manipulator
+
+/obj/machinery/aug_manipulator/Initialize() //aug_manipulator code is so stupid that i sincerely can't make out why it doesn't just work normally
+ . = ..() //in any case if you figure out how to make it just work normally, have a go at it.
+ if(!component_parts)
+ circuit = null
+ circuit = new /obj/item/circuitboard/machine/aug_manipulator
+ component_parts = list()
+ component_parts += circuit
+
+/obj/machinery/aug_manipulator/examine(mob/user)
+ . += ..()
+ if(panel_open)
+ . += "Its maintenance panel is currently open."
+
+/obj/machinery/aug_manipulator/screwdriver_act(mob/living/user, obj/item/W)
+ . = TRUE
+ if(..())
+ return
+ if(default_deconstruction_screwdriver(user, icon_state, icon_state, W))
+ return TRUE
+ return FALSE
+
+/obj/machinery/aug_manipulator/crowbar_act(mob/living/user, obj/item/W)
+ . = ..()
+ if(default_deconstruction_crowbar(W, FALSE))
+ return TRUE
diff --git a/sandcode/code/game/machinery/camera/camera.dm b/sandcode/code/game/machinery/camera/camera.dm
new file mode 100644
index 0000000000..4a92b667cd
--- /dev/null
+++ b/sandcode/code/game/machinery/camera/camera.dm
@@ -0,0 +1,23 @@
+/obj/machinery/camera/examine(mob/user)
+ . += ..()
+ if(isEmpProof())
+ . += "It has electromagnetic interference shielding installed."
+ else
+ . += "It can be shielded against electromagnetic interference with some plasma."
+ if(isXRay())
+ . += "It has an X-ray photodiode installed."
+ else
+ . += "It can be upgraded with an X-ray photodiode with an analyzer."
+ if(isMotion())
+ . += "It has a proximity sensor installed."
+ else
+ . += "It can be upgraded with a proximity sensor."
+
+ if(!status)
+ . += "It's currently deactivated."
+ if(!panel_open && powered())
+ . += "You'll need to open its maintenance panel with a screwdriver to turn it back on."
+ if(panel_open)
+ . += "Its maintenance panel is currently open."
+ if(!status && powered())
+ . += "It can reactivated with wirecutters."
diff --git a/sandcode/code/game/objects/items/circuitboards/machine_circuitboards.dm b/sandcode/code/game/objects/items/circuitboards/machine_circuitboards.dm
index ab97d07d54..8b9c6c56c5 100644
--- a/sandcode/code/game/objects/items/circuitboards/machine_circuitboards.dm
+++ b/sandcode/code/game/objects/items/circuitboards/machine_circuitboards.dm
@@ -41,7 +41,6 @@
/obj/item/stock_parts/manipulator = 5,
/obj/item/stock_parts/scanning_module = 5,
/obj/item/stack/ore/bluespace_crystal = 5)
- needs_anchored = FALSE
/obj/item/circuitboard/machine/telecomms/message_server
name = "Message Server (Machine Board)"
@@ -50,3 +49,11 @@
/obj/item/stock_parts/manipulator = 2,
/obj/item/stack/cable_coil = 1,
/obj/item/stock_parts/subspace/filter = 1)
+
+/obj/item/circuitboard/machine/aug_manipulator
+ name = "Augment Manipulator (Machine Board)"
+ build_path = /obj/machinery/aug_manipulator
+
+/obj/item/circuitboard/machine/pdapainter
+ name = "PDA painter (Machine Board)"
+ build_path = /obj/machinery/pdapainter
diff --git a/sandcode/code/modules/research/designs/machine_designs.dm b/sandcode/code/modules/research/designs/machine_designs.dm
index fa8cac12f7..15d25a96f3 100644
--- a/sandcode/code/modules/research/designs/machine_designs.dm
+++ b/sandcode/code/modules/research/designs/machine_designs.dm
@@ -74,3 +74,11 @@
build_path = /obj/item/circuitboard/machine/spaceship_navigation_beacon
category = list("Misc. Machinery")
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_ENGINEERING
+
+/datum/design/board/pdapainter
+ name = "Machine Design (PDA painter)"
+ desc = "The circuit board for a pda painter"
+ id = "pdapaint"
+ build_path = /obj/item/circuitboard/machine/pdapainter
+ category = list("Misc. Machinery")
+ departmental_flags = DEPARTMENTAL_FLAG_SERVICE
diff --git a/sandcode/code/modules/research/designs/medical_designs.dm b/sandcode/code/modules/research/designs/medical_designs.dm
new file mode 100644
index 0000000000..ce7d0bce09
--- /dev/null
+++ b/sandcode/code/modules/research/designs/medical_designs.dm
@@ -0,0 +1,7 @@
+/datum/design/board/aug_manipulator
+ name = "Machine Design (Augment Manipulator)"
+ desc = "The circuit board for a augment manipulator"
+ id = "augmanip"
+ build_path = /obj/item/circuitboard/machine/aug_manipulator
+ category = list("Misc. Machinery")
+ departmental_flags = DEPARTMENTAL_FLAG_MEDICAL | DEPARTMENTAL_FLAG_SCIENCE
diff --git a/sandcode/code/modules/research/techweb/nodes/computer_hud_nodes.dm b/sandcode/code/modules/research/techweb/nodes/computer_hud_nodes.dm
index ba76a5398c..e5ff7779f5 100644
--- a/sandcode/code/modules/research/techweb/nodes/computer_hud_nodes.dm
+++ b/sandcode/code/modules/research/techweb/nodes/computer_hud_nodes.dm
@@ -1,3 +1,7 @@
/datum/techweb_node/telecomms/New()
. = ..()
design_ids += "message-server"
+
+/datum/techweb_node/comptech/New()
+ . = ..()
+ design_ids += "pdapaint"
diff --git a/sandcode/code/modules/research/techweb/nodes/medical_nodes.dm b/sandcode/code/modules/research/techweb/nodes/medical_nodes.dm
new file mode 100644
index 0000000000..be76cde414
--- /dev/null
+++ b/sandcode/code/modules/research/techweb/nodes/medical_nodes.dm
@@ -0,0 +1,3 @@
+/datum/techweb_node/surplus_limbs/New()
+ . = ..()
+ design_ids += "augmanip"
diff --git a/tgstation.dme b/tgstation.dme
index 7d30d694b0..28ed13cf6f 100644
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -3639,10 +3639,13 @@
#include "sandcode\code\datums\wires\firealarm.dm"
#include "sandcode\code\game\area\ship_area.dm"
#include "sandcode\code\game\area\areas\ruins\lavaland.dm"
+#include "sandcode\code\game\machinery\aug_manipulator.dm"
#include "sandcode\code\game\machinery\autodoc.dm"
#include "sandcode\code\game\machinery\cryopod.dm"
#include "sandcode\code\game\machinery\cryptominers.dm"
+#include "sandcode\code\game\machinery\PDApainter.dm"
#include "sandcode\code\game\machinery\posialert.dm"
+#include "sandcode\code\game\machinery\camera\camera.dm"
#include "sandcode\code\game\machinery\computer\arcade\tetris.dm"
#include "sandcode\code\game\machinery\pipe\construction.dm"
#include "sandcode\code\game\mecha\mecha_construction_paths.dm"
@@ -3757,6 +3760,7 @@
#include "sandcode\code\modules\research\designs\biogenerator_designs.dm"
#include "sandcode\code\modules\research\designs\machine_designs.dm"
#include "sandcode\code\modules\research\designs\mechfabricator_designs.dm"
+#include "sandcode\code\modules\research\designs\medical_designs.dm"
#include "sandcode\code\modules\research\designs\misc_designs.dm"
#include "sandcode\code\modules\research\designs\telecomms_designs.dm"
#include "sandcode\code\modules\research\designs\tool_designs.dm"
@@ -3766,6 +3770,7 @@
#include "sandcode\code\modules\research\techweb\all_nodes.dm"
#include "sandcode\code\modules\research\techweb\bluespace_nodes.dm"
#include "sandcode\code\modules\research\techweb\nodes\computer_hud_nodes.dm"
+#include "sandcode\code\modules\research\techweb\nodes\medical_nodes.dm"
#include "sandcode\code\modules\research\techweb\nodes\robotics_nodes.dm"
#include "sandcode\code\modules\ruins\lavalandruin_code\doom.dm"
#include "sandcode\code\modules\ruins\lavalandruin_code\kinggoat.dm"