diff --git a/mod_celadon/fixes/_fixes.dm b/mod_celadon/fixes/_fixes.dm
index 05930c517a96..0afbfa70fc89 100644
--- a/mod_celadon/fixes/_fixes.dm
+++ b/mod_celadon/fixes/_fixes.dm
@@ -1,5 +1,5 @@
/datum/modpack/example
name = "Fixes"
- desc = "Содержит различные фиксы багов. Фикс удушья при пустом баллоне. Сломанные иконки. Исправление работы плазма двигателей, фикс зарядки револьверов, фикс newscaster" // TODO сделать ПР для офовичные фиксы багов. Фикс удушья при пустом баллоне. Сломанные иконки. Исправление работы плазма двигателей,фикс зарядки револьверов" // TODO сделать ПР для офов
- author = "RalseiDreemuurr, Mirag1993, Корольный крыс, MrCat15352, MysticalFaceLesS"
+ desc = "Содержит различные фиксы багов. Фикс удушья при пустом баллоне. Сломанные иконки. Исправление работы плазма двигателей, фикс зарядки револьверов, фикс newscaster, фикс дюпа боргов, фикс сломанных шаттерсов" // TODO сделать ПР для офовичные фиксы багов. Фикс удушья при пустом баллоне. Сломанные иконки. Исправление работы плазма двигателей,фикс зарядки револьверов, фикс дюпа боргов, фикс сломанных шаттерсов" // TODO сделать ПР для офов
+ author = "RalseiDreemuurr, Mirag1993, Корольный крыс, MrCat15352, MysticalFaceLesS, GrozaAndGrom"
diff --git a/mod_celadon/fixes/_fixes.dme b/mod_celadon/fixes/_fixes.dme
index 6d716526597a..f8f517c4b1f4 100644
--- a/mod_celadon/fixes/_fixes.dme
+++ b/mod_celadon/fixes/_fixes.dme
@@ -7,5 +7,7 @@
#include "code/newscaster.dm"
#include "code/icons.dm"
#include "code/vending.dm"
+#include "code/robot_suit.dm"
+#include "code/shutters.dm"
#endif
diff --git a/mod_celadon/fixes/code/robot_suit.dm b/mod_celadon/fixes/code/robot_suit.dm
new file mode 100644
index 000000000000..8abb02037d01
--- /dev/null
+++ b/mod_celadon/fixes/code/robot_suit.dm
@@ -0,0 +1,214 @@
+/obj/item/robot_suit/attackby(obj/item/W, mob/user, params)
+
+ if(istype(W, /obj/item/stack/sheet/metal))
+ var/obj/item/stack/sheet/metal/M = W
+ if(!l_arm && !r_arm && !l_leg && !r_leg && !chest && !head)
+ if (M.use(1))
+ var/obj/item/bot_assembly/ed209/B = new
+ B.forceMove(drop_location())
+ to_chat(user, "You arm the robot frame.")
+ var/holding_this = user.get_inactive_held_item()==src
+ qdel(src)
+ if (holding_this)
+ user.put_in_inactive_hand(B)
+ else
+ to_chat(user, "You need one sheet of metal to start building ED-209!")
+ return
+ else if(istype(W, /obj/item/bodypart/leg/left/robot))
+ if(l_leg)
+ return
+ if(!user.transferItemToLoc(W, src))
+ return
+ W.icon_state = initial(W.icon_state)
+ W.cut_overlays()
+ l_leg = W
+ update_appearance()
+
+ else if(istype(W, /obj/item/bodypart/leg/right/robot))
+ if(src.r_leg)
+ return
+ if(!user.transferItemToLoc(W, src))
+ return
+ W.icon_state = initial(W.icon_state)
+ W.cut_overlays()
+ r_leg = W
+ update_appearance()
+
+ else if(istype(W, /obj/item/bodypart/l_arm/robot))
+ if(l_arm)
+ return
+ if(!user.transferItemToLoc(W, src))
+ return
+ W.icon_state = initial(W.icon_state)
+ W.cut_overlays()
+ l_arm = W
+ update_appearance()
+
+ else if(istype(W, /obj/item/bodypart/r_arm/robot))
+ if(r_arm)
+ return
+ if(!user.transferItemToLoc(W, src))
+ return
+ W.icon_state = initial(W.icon_state)//in case it is a dismembered robotic limb
+ W.cut_overlays()
+ r_arm = W
+ update_appearance()
+
+ else if(istype(W, /obj/item/bodypart/chest/robot))
+ var/obj/item/bodypart/chest/robot/CH = W
+ if(chest)
+ return
+ if(CH.wired && CH.cell)
+ if(!user.transferItemToLoc(CH, src))
+ return
+ CH.icon_state = initial(CH.icon_state) //in case it is a dismembered robotic limb
+ CH.cut_overlays()
+ chest = CH
+ update_appearance()
+ else if(!CH.wired)
+ to_chat(user, "You need to attach wires to it first!")
+ else
+ to_chat(user, "You need to attach a cell to it first!")
+
+ else if(istype(W, /obj/item/bodypart/head/robot))
+ var/obj/item/bodypart/head/robot/HD = W
+ for(var/X in HD.contents)
+ if(istype(X, /obj/item/organ))
+ to_chat(user, "There are organs inside [HD]!")
+ return
+ if(head)
+ return
+ if(HD.flash2 && HD.flash1)
+ if(!user.transferItemToLoc(HD, src))
+ return
+ HD.icon_state = initial(HD.icon_state)//in case it is a dismembered robotic limb
+ HD.cut_overlays()
+ head = HD
+ update_appearance()
+ else
+ to_chat(user, "You need to attach a flash to it first!")
+
+ else if (W.tool_behaviour == TOOL_MULTITOOL)
+ if(check_completion())
+ ui_interact(user)
+ else
+ to_chat(user, "The endoskeleton must be assembled before debugging can begin!")
+
+ else if(istype(W, /obj/item/mmi))
+ var/obj/item/mmi/M = W
+ if(check_completion())
+ if(!chest.cell)
+ to_chat(user, "The endoskeleton still needs a power cell!")
+ return
+ if(!isturf(loc))
+ to_chat(user, "You can't put [M] in, the frame has to be standing on the ground to be perfectly precise!")
+ return
+ if(!M.brain_check(user))
+ return
+
+ var/mob/living/brain/B = M.brainmob
+ if(is_banned_from(B.ckey, "Cyborg") || QDELETED(src) || QDELETED(B) || QDELETED(user) || QDELETED(M) || !Adjacent(user))
+ if(!QDELETED(M))
+ to_chat(user, "This [M.name] does not seem to fit!")
+ return
+ if(!user.temporarilyRemoveItemFromInventory(W))
+ return
+
+ var/mob/living/silicon/robot/O = new /mob/living/silicon/robot/nocell(get_turf(loc))
+ if(!O)
+ return
+ if(M.laws && M.laws.id != DEFAULT_AI_LAWID)
+ aisync = 0
+ lawsync = 0
+ O.laws = M.laws
+ M.laws.associate(O)
+
+ O.invisibility = 0
+ //Transfer debug settings to new mob
+ O.custom_name = created_name
+ O.locked = panel_locked
+ if(!aisync)
+ lawsync = FALSE
+ O.connected_ai = null
+ else
+ O.notify_ai(NEW_BORG)
+ if(forced_ai)
+ O.set_connected_ai(forced_ai)
+ if(!lawsync)
+ O.lawupdate = 0
+ if(M.laws.id == DEFAULT_AI_LAWID)
+ O.make_laws()
+
+ SSticker.mode.remove_antag_for_borging(B.mind)
+ O.job = "Cyborg"
+
+ O.cell = chest.cell
+ chest.cell.forceMove(O)
+ chest.cell = null
+ W.forceMove(O)//Should fix cybros run time erroring when blown up. It got deleted before, along with the frame.
+ if(O.mmi) //we delete the mmi created by robot/New()
+ qdel(O.mmi)
+ O.mmi = W //and give the real mmi to the borg.
+
+ O.updatename(B.client)
+
+ B.mind.transfer_to(O)
+
+ if(O.mind && O.mind.special_role)
+ O.mind.store_memory("As a cyborg, you must obey your silicon laws and master AI above all else. Your objectives will consider you to be dead.")
+ to_chat(O, "You have been robotized!")
+ to_chat(O, "You must obey your silicon laws and master AI above all else. Your objectives will consider you to be dead.")
+
+ SSblackbox.record_feedback("amount", "cyborg_birth", 1)
+ forceMove(O)
+ O.robot_suit = src
+
+ log_game("[key_name(user)] has put the MMI/posibrain of [key_name(M.brainmob)] into a cyborg shell at [AREACOORD(src)]")
+
+ if(!locomotion)
+ O.set_lockcharge(TRUE)
+ to_chat(O, "Error: Servo motors unresponsive.")
+
+ else
+ to_chat(user, "The MMI must go in after everything else!")
+
+ else if(istype(W, /obj/item/borg/upgrade/ai))
+ var/obj/item/borg/upgrade/ai/M = W
+ if(!chest.cell)
+ to_chat(user, "The endoskeleton still needs a power cell!")
+ return
+ if(check_completion())
+ if(!isturf(loc))
+ to_chat(user, "You cannot install[M], the frame has to be standing on the ground to be perfectly precise!")
+ return
+ if(!user.temporarilyRemoveItemFromInventory(M))
+ to_chat(user, "[M] is stuck to your hand!")
+ return
+ qdel(M)
+ var/mob/living/silicon/robot/O = new /mob/living/silicon/robot/shell(get_turf(src))
+
+ if(!aisync)
+ lawsync = FALSE
+ O.set_connected_ai(null)
+ else
+ if(forced_ai)
+ O.set_connected_ai(forced_ai)
+ O.notify_ai(AI_SHELL)
+ if(!lawsync)
+ O.lawupdate = FALSE
+ O.make_laws()
+
+ O.cell = chest.cell
+ chest.cell.forceMove(O)
+ chest.cell = null
+ O.locked = panel_locked
+ O.job = "Cyborg"
+ forceMove(O)
+ O.robot_suit = src
+ if(!locomotion)
+ O.set_lockcharge(TRUE)
+
+ else if(istype(W, /obj/item/pen))
+ to_chat(user, "You need to use a multitool to name [src]!")
+ else
+ return ..()
diff --git a/mod_celadon/fixes/code/shutters.dm b/mod_celadon/fixes/code/shutters.dm
new file mode 100644
index 000000000000..2fec1a3ab12f
--- /dev/null
+++ b/mod_celadon/fixes/code/shutters.dm
@@ -0,0 +1,10 @@
+/obj/machinery/door/poddoor/shutters
+ gender = PLURAL
+ name = "shutters"
+ desc = "Heavy duty metal shutters that open mechanically."
+ icon = 'icons/obj/doors/shutters.dmi'
+ damage_deflection = 20
+ smoothing_groups = list(SMOOTH_GROUP_AIRLOCK)
+ assemblytype = /obj/structure/poddoor_assembly/shutters
+ open_sound = 'sound/machines/airlocks/shutters/shutters_open.ogg'
+ close_sound = 'sound/machines/airlocks/shutters/shutters_close.ogg'