diff --git a/pai_shell.dm b/pai_shell.dm
new file mode 100644
index 0000000000..164a3e7389
--- /dev/null
+++ b/pai_shell.dm
@@ -0,0 +1,124 @@
+
+/mob/living/silicon/pai/proc/fold_out(force = FALSE)
+ if(emitterhealth < 0)
+ to_chat(src, "Your holochassis emitters are still too unstable! Please wait for automatic repair.")
+ return FALSE
+
+ if(!canholo && !force)
+ to_chat(src, "Your master or another force has disabled your holochassis emitters!")
+ return FALSE
+
+ if(holoform)
+ . = fold_in(force)
+ return
+
+ if(emittersemicd)
+ to_chat(src, "Error: Holochassis emitters recycling. Please try again later.")
+ return FALSE
+
+ emittersemicd = TRUE
+ addtimer(CALLBACK(src, .proc/emittercool), emittercd)
+ canmove = TRUE
+ density = TRUE
+ if(istype(card.loc, /obj/item/pda))
+ var/obj/item/pda/P = card.loc
+ P.pai = null
+ P.visible_message("[src] ejects itself from [P]!")
+ if(isliving(card.loc))
+ var/mob/living/L = card.loc
+ if(!L.temporarilyRemoveItemFromInventory(card))
+ to_chat(src, "Error: Unable to expand to mobile form. Chassis is restrained by some device or person.")
+ return FALSE
+ if(istype(card.loc, /obj/item/integrated_circuit/input/pAI_connector))
+ var/obj/item/integrated_circuit/input/pAI_connector/C = card.loc
+ C.RemovepAI()
+ C.visible_message("[src] ejects itself from [C]!")
+ playsound(src, 'sound/items/Crowbar.ogg', 50, 1)
+ C.installed_pai = null
+ C.push_data()
+ forceMove(get_turf(card))
+ card.forceMove(src)
+ if(client)
+ client.perspective = EYE_PERSPECTIVE
+ client.eye = src
+ set_light(0)
+ icon_state = "[chassis]"
+ visible_message("[src] folds out its holochassis emitter and forms a holoshell around itself!")
+ holoform = TRUE
+
+/mob/living/silicon/pai/proc/emittercool()
+ emittersemicd = FALSE
+
+/mob/living/silicon/pai/proc/fold_in(force = FALSE)
+ emittersemicd = TRUE
+ if(!force)
+ addtimer(CALLBACK(src, .proc/emittercool), emittercd)
+ else
+ addtimer(CALLBACK(src, .proc/emittercool), emitteroverloadcd)
+ icon_state = "[chassis]"
+ if(!holoform)
+ . = fold_out(force)
+ return
+ visible_message("[src] deactivates its holochassis emitter and folds back into a compact card!")
+ stop_pulling()
+ if(client)
+ client.perspective = EYE_PERSPECTIVE
+ client.eye = card
+ var/turf/T = drop_location()
+ card.forceMove(T)
+ forceMove(card)
+ canmove = FALSE
+ density = FALSE
+ set_light(0)
+ holoform = FALSE
+ if(resting)
+ lay_down()
+
+/mob/living/silicon/pai/proc/choose_chassis()
+ if(!isturf(loc) && loc != card)
+ to_chat(src, "You can not change your holochassis composite while not on the ground or in your card!")
+ return FALSE
+ var/choice = input(src, "What would you like to use for your holochassis composite?") as null|anything in possible_chassis
+ if(!choice)
+ return FALSE
+ chassis = choice
+ icon_state = "[chassis]"
+ if(resting)
+ icon_state = "[chassis]_rest"
+ to_chat(src, "You switch your holochassis projection composite to [chassis]")
+
+/mob/living/silicon/pai/lay_down()
+ ..()
+ update_resting_icon(resting)
+
+/mob/living/silicon/pai/proc/update_resting_icon(rest)
+ if(rest)
+ icon_state = "[chassis]_rest"
+ else
+ icon_state = "[chassis]"
+ if(loc != card)
+ visible_message("[src] [rest? "lays down for a moment..." : "perks up from the ground"]")
+
+/mob/living/silicon/pai/start_pulling(atom/movable/AM)
+ return FALSE
+
+/mob/living/silicon/pai/proc/toggle_integrated_light()
+ if(!light_range)
+ set_light(brightness_power)
+ to_chat(src, "You enable your integrated light.")
+ else
+ set_light(0)
+ to_chat(src, "You disable your integrated light.")
+
+/mob/living/silicon/pai/mob_pickup(mob/living/L)
+ var/obj/item/clothing/head/mob_holder/holder = new(get_turf(src), src, chassis, item_head_icon, item_lh_icon, item_rh_icon)
+ if(!L.put_in_hands(holder))
+ qdel(holder)
+ else
+ L.visible_message("[L] scoops up [src]!")
+
+/mob/living/silicon/pai/mob_try_pickup(mob/living/user)
+ if(!possible_chassis[chassis])
+ to_chat(user, "[src]'s current form isn't able to be carried!")
+ return FALSE
+ return ..()