diff --git a/code/__DEFINES/MC.dm b/code/__DEFINES/MC.dm
index cbcf2c1dd9..97ce6ef6fd 100644
--- a/code/__DEFINES/MC.dm
+++ b/code/__DEFINES/MC.dm
@@ -19,8 +19,8 @@
#define NEW_SS_GLOBAL(varname) if(varname != src){if(istype(varname)){Recover();qdel(varname);}varname = src;}
-#define START_PROCESSING(Processor, Datum) if (!Datum.isprocessing) {Datum.isprocessing = TRUE;Processor.processing += Datum}
-#define STOP_PROCESSING(Processor, Datum) Datum.isprocessing = FALSE;Processor.processing -= Datum
+#define START_PROCESSING(Processor, Datum) if (!(Datum.datum_flags & DF_ISPROCESSING)) {Datum.datum_flags |= DF_ISPROCESSING;Processor.processing += Datum}
+#define STOP_PROCESSING(Processor, Datum) Datum.datum_flags &= ~DF_ISPROCESSING;Processor.processing -= Datum
//SubSystem flags (Please design any new flags so that the default is off, to make adding flags to subsystems easier)
diff --git a/code/__DEFINES/flags.dm b/code/__DEFINES/flags.dm
index 61249cb60a..f566492ec3 100644
--- a/code/__DEFINES/flags.dm
+++ b/code/__DEFINES/flags.dm
@@ -9,6 +9,7 @@ GLOBAL_LIST_INIT(bitflags, list(1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 204
// for /datum/var/datum_flags
#define DF_USE_TAG (1<<0)
#define DF_VAR_EDITED (1<<1)
+#define DF_ISPROCESSING (1<<2)
//FLAGS BITMASK
diff --git a/code/_globalvars/bitfields.dm b/code/_globalvars/bitfields.dm
index 6113e11eef..5ef8dc6d1b 100644
--- a/code/_globalvars/bitfields.dm
+++ b/code/_globalvars/bitfields.dm
@@ -35,7 +35,8 @@ GLOBAL_LIST_INIT(bitfields, list(
),
"datum_flags" = list(
"DF_USE_TAG" = DF_USE_TAG,
- "DF_VAR_EDITED" = DF_VAR_EDITED
+ "DF_VAR_EDITED" = DF_VAR_EDITED,
+ "DF_ISPROCESSING" = DF_ISPROCESSING,
),
"item_flags" = list(
"BEING_REMOVED" = BEING_REMOVED,
diff --git a/code/controllers/subsystem/machines.dm b/code/controllers/subsystem/machines.dm
index eab61d4ef9..6d5d64fe6c 100644
--- a/code/controllers/subsystem/machines.dm
+++ b/code/controllers/subsystem/machines.dm
@@ -45,7 +45,7 @@ SUBSYSTEM_DEF(machines)
else
processing -= thing
if (!QDELETED(thing))
- thing.isprocessing = FALSE
+ thing.datum_flags &= ~DF_ISPROCESSING
if (MC_TICK_CHECK)
return
diff --git a/code/controllers/subsystem/processing/processing.dm b/code/controllers/subsystem/processing/processing.dm
index f6d45ebff2..ef2a0f72e6 100644
--- a/code/controllers/subsystem/processing/processing.dm
+++ b/code/controllers/subsystem/processing/processing.dm
@@ -27,7 +27,6 @@ SUBSYSTEM_DEF(processing)
if (MC_TICK_CHECK)
return
-/datum/var/isprocessing = FALSE
/datum/proc/process()
set waitfor = 0
STOP_PROCESSING(SSobj, src)
diff --git a/code/game/objects/structures/beds_chairs/chair.dm b/code/game/objects/structures/beds_chairs/chair.dm
index 93b8635dc5..498416f73f 100644
--- a/code/game/objects/structures/beds_chairs/chair.dm
+++ b/code/game/objects/structures/beds_chairs/chair.dm
@@ -385,7 +385,7 @@
turns = 0
if(!istype(user) || !user.canUseTopic(src, BE_CLOSE, ismonkey(user)))
return
- if(!isprocessing)
+ if(!(datum_flags & DF_ISPROCESSING))
user.visible_message("[user] spins [src] around, and Ratvarian technology keeps it spinning FOREVER.", \
"Automated spinny chairs. The pinnacle of Ratvarian technology.")
START_PROCESSING(SSfastprocess, src)
diff --git a/code/modules/antagonists/clockcult/clock_structures/trap_triggers/repeater.dm b/code/modules/antagonists/clockcult/clock_structures/trap_triggers/repeater.dm
index 41292f818d..f5ed91ac15 100644
--- a/code/modules/antagonists/clockcult/clock_structures/trap_triggers/repeater.dm
+++ b/code/modules/antagonists/clockcult/clock_structures/trap_triggers/repeater.dm
@@ -12,7 +12,7 @@
return
if(!is_servant_of_ratvar(user))
return
- if(!isprocessing)
+ if(!(datum_flags & DF_ISPROCESSING))
START_PROCESSING(SSprocessing, src)
to_chat(user, "You activate [src].")
icon_state = "[icon_state]_on"
diff --git a/code/modules/projectiles/projectile.dm b/code/modules/projectiles/projectile.dm
index b0dc498bfa..4ee1363853 100644
--- a/code/modules/projectiles/projectile.dm
+++ b/code/modules/projectiles/projectile.dm
@@ -356,7 +356,7 @@
fired = TRUE
if(hitscan)
process_hitscan()
- if(!isprocessing)
+ if(!(datum_flags & DF_ISPROCESSING))
START_PROCESSING(SSprojectiles, src)
pixel_move(1) //move it now!