diff --git a/code/game/machinery/cell_charger.dm b/code/game/machinery/cell_charger.dm
index 9a59d4aea5e..fb384d55ae0 100644
--- a/code/game/machinery/cell_charger.dm
+++ b/code/game/machinery/cell_charger.dm
@@ -8,6 +8,7 @@
active_power_usage = 60
power_channel = EQUIP
circuit = /obj/item/circuitboard/machine/cell_charger
+ pass_flags = PASSTABLE
var/obj/item/stock_parts/cell/charging = null
var/chargelevel = -1
var/charge_rate = 500
diff --git a/code/game/machinery/computer/camera.dm b/code/game/machinery/computer/camera.dm
index 696c9442b93..7dcd85d3100 100644
--- a/code/game/machinery/computer/camera.dm
+++ b/code/game/machinery/computer/camera.dm
@@ -161,6 +161,7 @@
icon_keyboard = null
icon_screen = "detective_tv"
clockwork = TRUE //it'd look weird
+ pass_flags = PASSTABLE
/obj/machinery/computer/security/mining
name = "outpost camera console"
diff --git a/code/game/machinery/computer/medical.dm b/code/game/machinery/computer/medical.dm
index 0ee394d8897..660ad4763f7 100644
--- a/code/game/machinery/computer/medical.dm
+++ b/code/game/machinery/computer/medical.dm
@@ -596,3 +596,4 @@
icon_screen = "medlaptop"
icon_keyboard = "laptop_key"
clockwork = TRUE //it'd look weird
+ pass_flags = PASSTABLE
diff --git a/code/game/machinery/computer/security.dm b/code/game/machinery/computer/security.dm
index 8a2a06bf1ff..f3f4c5e523a 100644
--- a/code/game/machinery/computer/security.dm
+++ b/code/game/machinery/computer/security.dm
@@ -38,6 +38,7 @@
icon_screen = "seclaptop"
icon_keyboard = "laptop_key"
clockwork = TRUE //it'd look weird
+ pass_flags = PASSTABLE
/obj/machinery/computer/secure_data/attackby(obj/item/O, mob/user, params)
if(istype(O, /obj/item/card/id))
diff --git a/code/game/machinery/dish_drive.dm b/code/game/machinery/dish_drive.dm
index 7e960d4ebcf..66aa1347cb0 100644
--- a/code/game/machinery/dish_drive.dm
+++ b/code/game/machinery/dish_drive.dm
@@ -9,6 +9,7 @@
active_power_usage = 13 //10 with default parts
density = FALSE
circuit = /obj/item/circuitboard/machine/dish_drive
+ pass_flags = PASSTABLE
var/static/list/item_types = list(/obj/item/trash/waffles,
/obj/item/trash/plate,
/obj/item/trash/tray,
diff --git a/code/game/machinery/recharger.dm b/code/game/machinery/recharger.dm
index 22bba56fd2d..94b6eee8aa1 100755
--- a/code/game/machinery/recharger.dm
+++ b/code/game/machinery/recharger.dm
@@ -7,6 +7,7 @@
idle_power_usage = 4
active_power_usage = 250
circuit = /obj/item/circuitboard/machine/recharger
+ pass_flags = PASSTABLE
var/obj/item/charging = null
var/recharge_coeff = 1
diff --git a/code/game/objects/structures/tables_racks.dm b/code/game/objects/structures/tables_racks.dm
index aa87410d2c3..da5eeb8dcd9 100644
--- a/code/game/objects/structures/tables_racks.dm
+++ b/code/game/objects/structures/tables_racks.dm
@@ -60,24 +60,31 @@
return attack_hand(user)
/obj/structure/table/attack_hand(mob/living/user)
- if(Adjacent(user) && user.pulling && isliving(user.pulling))
- var/mob/living/pushed_mob = user.pulling
- if(pushed_mob.buckled)
- to_chat(user, "[pushed_mob] is buckled to [pushed_mob.buckled]!")
- return
- if(user.a_intent == INTENT_GRAB)
- if(user.grab_state < GRAB_AGGRESSIVE)
- to_chat(user, "You need a better grip to do that!")
+ if(Adjacent(user) && user.pulling)
+ if(isliving(user.pulling))
+ var/mob/living/pushed_mob = user.pulling
+ if(pushed_mob.buckled)
+ to_chat(user, "[pushed_mob] is buckled to [pushed_mob.buckled]!")
return
- tablepush(user, pushed_mob)
- if(user.a_intent == INTENT_HELP)
- pushed_mob.visible_message("[user] begins to place [pushed_mob] onto [src]...", \
- "[user] begins to place [pushed_mob] onto [src]...")
- if(do_after(user, 35, target = pushed_mob))
- tableplace(user, pushed_mob)
- else
- return
- user.stop_pulling()
+ if(user.a_intent == INTENT_GRAB)
+ if(user.grab_state < GRAB_AGGRESSIVE)
+ to_chat(user, "You need a better grip to do that!")
+ return
+ tablepush(user, pushed_mob)
+ if(user.a_intent == INTENT_HELP)
+ pushed_mob.visible_message("[user] begins to place [pushed_mob] onto [src]...", \
+ "[user] begins to place [pushed_mob] onto [src]...")
+ if(do_after(user, 35, target = pushed_mob))
+ tableplace(user, pushed_mob)
+ else
+ return
+ user.stop_pulling()
+ else if(user.pulling.pass_flags & PASSTABLE)
+ user.Move_Pulled(src)
+ if (user.pulling.loc == loc)
+ user.visible_message("[user] places [user.pulling] onto [src].",
+ "You place [user.pulling] onto [src].")
+ user.stop_pulling()
return ..()
/obj/structure/table/attack_tk()
diff --git a/code/modules/food_and_drinks/kitchen_machinery/microwave.dm b/code/modules/food_and_drinks/kitchen_machinery/microwave.dm
index 8c4e0eaae04..f8969cf1a5d 100644
--- a/code/modules/food_and_drinks/kitchen_machinery/microwave.dm
+++ b/code/modules/food_and_drinks/kitchen_machinery/microwave.dm
@@ -9,6 +9,7 @@
idle_power_usage = 5
active_power_usage = 100
circuit = /obj/item/circuitboard/machine/microwave
+ pass_flags = PASSTABLE
var/operating = FALSE // Is it on?
var/dirty = 0 // = {0..100} Does it need cleaning?
var/broken = 0 // ={0,1,2} How broken is it???
diff --git a/code/modules/food_and_drinks/kitchen_machinery/smartfridge.dm b/code/modules/food_and_drinks/kitchen_machinery/smartfridge.dm
index 61cc940b3d2..b6e3b196409 100644
--- a/code/modules/food_and_drinks/kitchen_machinery/smartfridge.dm
+++ b/code/modules/food_and_drinks/kitchen_machinery/smartfridge.dm
@@ -415,6 +415,7 @@
name = "disk compartmentalizer"
desc = "A machine capable of storing a variety of disks. Denoted by most as the DSU (disk storage unit)."
icon_state = "disktoaster"
+ pass_flags = PASSTABLE
/obj/machinery/smartfridge/disks/accept_check(obj/item/O)
if(istype(O, /obj/item/disk/))
diff --git a/code/modules/hydroponics/gene_modder.dm b/code/modules/hydroponics/gene_modder.dm
index 7e541f2471a..d6eacfe0e19 100644
--- a/code/modules/hydroponics/gene_modder.dm
+++ b/code/modules/hydroponics/gene_modder.dm
@@ -5,6 +5,7 @@
icon_state = "dnamod"
density = TRUE
circuit = /obj/item/circuitboard/machine/plantgenes
+ pass_flags = PASSTABLE
var/obj/item/seeds/seed
var/obj/item/disk/plantgene/disk
diff --git a/code/modules/library/lib_machines.dm b/code/modules/library/lib_machines.dm
index 81e296e4c84..dfc917984a6 100644
--- a/code/modules/library/lib_machines.dm
+++ b/code/modules/library/lib_machines.dm
@@ -166,11 +166,12 @@ GLOBAL_LIST(cachedbooks) // List of our cached book datums
/obj/machinery/computer/libraryconsole/bookmanagement
name = "book inventory management console"
desc = "Librarian's command station."
- var/arcanecheckout = 0
screenstate = 0 // 0 - Main Menu, 1 - Inventory, 2 - Checked Out, 3 - Check Out a Book
verb_say = "beeps"
verb_ask = "beeps"
verb_exclaim = "beeps"
+ pass_flags = PASSTABLE
+ var/arcanecheckout = 0
var/buffer_book
var/buffer_mob
var/upload_category = "Fiction"
diff --git a/code/modules/reagents/chemistry/machinery/chem_dispenser.dm b/code/modules/reagents/chemistry/machinery/chem_dispenser.dm
index da94c16adfb..6c4d0fa7524 100644
--- a/code/modules/reagents/chemistry/machinery/chem_dispenser.dm
+++ b/code/modules/reagents/chemistry/machinery/chem_dispenser.dm
@@ -384,6 +384,16 @@
final_list += list(avoid_assoc_duplicate_keys(fuck[1],key_list) = text2num(fuck[2]))
return final_list
+/obj/machinery/chem_dispenser/drinks/Initialize()
+ . = ..()
+ AddComponent(/datum/component/simple_rotation, ROTATION_ALTCLICK | ROTATION_CLOCKWISE)
+
+/obj/machinery/chem_dispenser/drinks/setDir()
+ var/old = dir
+ . = ..()
+ if(dir != old)
+ update_icon() // the beaker needs to be re-positioned if we rotate
+
/obj/machinery/chem_dispenser/drinks/display_beaker()
var/mutable_appearance/b_o = beaker_overlay || mutable_appearance(icon, "disp_beaker")
switch(dir)
@@ -413,6 +423,7 @@
circuit = /obj/item/circuitboard/machine/chem_dispenser/drinks
working_state = null
nopower_state = null
+ pass_flags = PASSTABLE
dispensable_reagents = list(
"water",
"ice",