-extern bool region_rescue_clientwins(WRegion *reg, WPHolder *ph);
-extern bool region_rescue_child_clientwins(WRegion *reg, WPHolder *ph);
-extern bool region_rescue_some_clientwins(WRegion *reg, WPHolder *ph,
+#define REGION_RESCUE_PHFLAGS_OK 0x01
+#define REGION_RESCUE_NODEEP 0x02
+
+INTRSTRUCT(WRescueInfo);
+
+extern WPHolder *rescueinfo_pholder(WRescueInfo *info);
+
+/* if ph is given, it is used, otherwise one is looked for when needed */
+extern bool region_rescue(WRegion *reg, WPHolder *ph, int flags);
+extern bool region_rescue_needed(WRegion *reg);
+extern bool region_rescue_clientwins(WRegion *reg, WRescueInfo *info);
+extern bool region_rescue_child_clientwins(WRegion *reg, WRescueInfo *info);
+extern bool region_rescue_some_clientwins(WRegion *reg, WRescueInfo *info,