-#define EP_BIT_BELT (1 << 0)
-#define EP_BIT_BELT_ACTIVE (1 << 1)
-#define EP_BIT_BELT_SWITCH (1 << 2)
-#define EP_BIT_TUBE (1 << 3)
-#define EP_BIT_EM_SLIPPERY_WALL (1 << 4)
-
-#define IS_AMOEBALIVE(e) (Properties1[e] & EP_BIT_AMOEBALIVE)
-#define IS_AMOEBOID(e) (Properties1[e] & EP_BIT_AMOEBOID)
-#define IS_SCHLUESSEL(e) (Properties1[e] & EP_BIT_SCHLUESSEL)
-#define IS_PFORTE(e) (Properties1[e] & EP_BIT_PFORTE)
-#define IS_SOLID(e) (Properties1[e] & EP_BIT_SOLID)
-#define IS_MASSIVE(e) (Properties1[e] & EP_BIT_MASSIVE)
-#define IS_SLIPPERY(e) (Properties1[e] & EP_BIT_SLIPPERY)
-#define IS_ENEMY(e) (Properties1[e] & EP_BIT_ENEMY)
-#define IS_MAUER(e) (Properties1[e] & EP_BIT_MAUER)
-#define CAN_FALL(e) (Properties1[e] & EP_BIT_CAN_FALL)
-#define CAN_SMASH(e) (Properties1[e] & EP_BIT_CAN_SMASH)
-#define CAN_CHANGE(e) (Properties1[e] & EP_BIT_CAN_CHANGE)
-#define CAN_MOVE(e) (Properties1[e] & EP_BIT_CAN_MOVE)
-#define COULD_MOVE(e) (Properties1[e] & EP_BIT_COULD_MOVE)
-#define DONT_TOUCH(e) (Properties1[e] & EP_BIT_DONT_TOUCH)
-#define DONT_GO_TO(e) (Properties1[e] & EP_BIT_DONT_GO_TO)
-#define IS_MAMPF2(e) (Properties1[e] & EP_BIT_MAMPF2)
-#define IS_CHAR(e) (Properties1[e] & EP_BIT_CHAR)
-#define IS_BD_ELEMENT(e) (Properties1[e] & EP_BIT_BD_ELEMENT)
-#define IS_SB_ELEMENT(e) (Properties1[e] & EP_BIT_SB_ELEMENT)
-#define IS_GEM(e) (Properties1[e] & EP_BIT_GEM)
-#define IS_INACTIVE(e) (Properties1[e] & EP_BIT_INACTIVE)
-#define IS_EXPLOSIVE(e) (Properties1[e] & EP_BIT_EXPLOSIVE)
-#define IS_MAMPF3(e) (Properties1[e] & EP_BIT_MAMPF3)
-#define IS_PUSHABLE(e) (Properties1[e] & EP_BIT_PUSHABLE)
-#define ELEM_IS_PLAYER(e) (Properties1[e] & EP_BIT_PLAYER)
-#define HAS_CONTENT(e) (Properties1[e] & EP_BIT_HAS_CONTENT)
-#define IS_EATABLE(e) (Properties1[e] & EP_BIT_EATABLE)
-#define IS_SP_ELEMENT(e) (Properties1[e] & EP_BIT_SP_ELEMENT)
-#define IS_QUICK_GATE(e) (Properties1[e] & EP_BIT_QUICK_GATE)
-#define IS_OVER_PLAYER(e) (Properties1[e] & EP_BIT_OVER_PLAYER)
-#define IS_ACTIVE_BOMB(e) (Properties1[e] & EP_BIT_ACTIVE_BOMB)
-
-#define IS_BELT(e) (Properties2[e] & EP_BIT_BELT)
-#define IS_BELT_ACTIVE(e) (Properties2[e] & EP_BIT_BELT_ACTIVE)
-#define IS_BELT_SWITCH(e) (Properties2[e] & EP_BIT_BELT_SWITCH)
-#define IS_TUBE(e) (Properties2[e] & EP_BIT_TUBE)
-#define IS_EM_SLIPPERY_WALL(e) (Properties2[e] & EP_BIT_EM_SLIPPERY_WALL)
+#define EP_BIT_BELT PROPERTY_BIT(EP_BELT)
+#define EP_BIT_BELT_ACTIVE PROPERTY_BIT(EP_BELT_ACTIVE)
+#define EP_BIT_BELT_SWITCH PROPERTY_BIT(EP_BELT_SWITCH)
+#define EP_BIT_TUBE PROPERTY_BIT(EP_TUBE)
+#define EP_BIT_EM_SLIPPERY_WALL PROPERTY_BIT(EP_EM_SLIPPERY_WALL)
+#define EP_BIT_CAN_BE_CRUMBLED PROPERTY_BIT(EP_CAN_BE_CRUMBLED)
+
+
+#define EP_BITMASK_DEFAULT 0
+
+/* property macros */
+#define IS_AMOEBALIVE(e) PROPERTY_VALUE(e, EP_AMOEBALIVE)
+#define IS_AMOEBOID(e) PROPERTY_VALUE(e, EP_AMOEBOID)
+#define IS_SCHLUESSEL(e) PROPERTY_VALUE(e, EP_SCHLUESSEL)
+#define IS_PFORTE(e) PROPERTY_VALUE(e, EP_PFORTE)
+#define IS_SOLID(e) PROPERTY_VALUE(e, EP_SOLID)
+#define IS_INDESTRUCTIBLE(e) PROPERTY_VALUE(e, EP_INDESTRUCTIBLE)
+#define IS_SLIPPERY(e) PROPERTY_VALUE(e, EP_SLIPPERY)
+#define IS_ENEMY(e) PROPERTY_VALUE(e, EP_ENEMY)
+#define IS_MAUER(e) PROPERTY_VALUE(e, EP_MAUER)
+#define CAN_FALL(e) PROPERTY_VALUE(e, EP_CAN_FALL)
+#define CAN_SMASH(e) PROPERTY_VALUE(e, EP_CAN_SMASH)
+#define CAN_CHANGE(e) PROPERTY_VALUE(e, EP_CAN_CHANGE)
+#define CAN_MOVE(e) PROPERTY_VALUE(e, EP_CAN_MOVE)
+#define COULD_MOVE(e) PROPERTY_VALUE(e, EP_COULD_MOVE)
+#define DONT_TOUCH(e) PROPERTY_VALUE(e, EP_DONT_TOUCH)
+#define DONT_GO_TO(e) PROPERTY_VALUE(e, EP_DONT_GO_TO)
+#define IS_MAMPF2(e) PROPERTY_VALUE(e, EP_MAMPF2)
+#define IS_CHAR(e) PROPERTY_VALUE(e, EP_CHAR)
+#define IS_BD_ELEMENT(e) PROPERTY_VALUE(e, EP_BD_ELEMENT)
+#define IS_SB_ELEMENT(e) PROPERTY_VALUE(e, EP_SB_ELEMENT)
+#define IS_GEM(e) PROPERTY_VALUE(e, EP_GEM)
+#define IS_INACTIVE(e) PROPERTY_VALUE(e, EP_INACTIVE)
+#define IS_EXPLOSIVE(e) PROPERTY_VALUE(e, EP_EXPLOSIVE)
+#define IS_MAMPF3(e) PROPERTY_VALUE(e, EP_MAMPF3)
+#define IS_PUSHABLE(e) PROPERTY_VALUE(e, EP_PUSHABLE)
+#define ELEM_IS_PLAYER(e) PROPERTY_VALUE(e, EP_PLAYER)
+#define HAS_CONTENT(e) PROPERTY_VALUE(e, EP_HAS_CONTENT)
+#define IS_EATABLE(e) PROPERTY_VALUE(e, EP_EATABLE)
+#define IS_SP_ELEMENT(e) PROPERTY_VALUE(e, EP_SP_ELEMENT)
+#define IS_QUICK_GATE(e) PROPERTY_VALUE(e, EP_QUICK_GATE)
+#define IS_OVER_PLAYER(e) PROPERTY_VALUE(e, EP_OVER_PLAYER)
+#define IS_ACTIVE_BOMB(e) PROPERTY_VALUE(e, EP_ACTIVE_BOMB)
+
+#define IS_BELT(e) PROPERTY_VALUE(e, EP_BELT)
+#define IS_BELT_ACTIVE(e) PROPERTY_VALUE(e, EP_BELT_ACTIVE)
+#define IS_BELT_SWITCH(e) PROPERTY_VALUE(e, EP_BELT_SWITCH)
+#define IS_TUBE(e) PROPERTY_VALUE(e, EP_TUBE)
+#define IS_EM_SLIPPERY_WALL(e) PROPERTY_VALUE(e, EP_EM_SLIPPERY_WALL)
+#define CAN_BE_CRUMBLED(e) PROPERTY_VALUE(e, EP_CAN_BE_CRUMBLED)
+
+#define IS_CUSTOM_ELEMENT(e) ((e) >= EL_CUSTOM_START && \
+ (e) <= EL_CUSTOM_END)