</global_preferences>
 {endcode}
 
+{section: How to create static backfill slots that defer to a partitionable slot}
+Currently workfetch does not work with partitionable slots, but you can still run backfill jobs on machines that are configured to use partitionable slots.  The way to do this is by creating a set of static slots that are configured to share the same resources as the partitionable slot, but to run jobs (or workfetch) only when the partitionable slot is not using the resouces.  The configuration looks like this
+
+{code}
+# each backfill slot will have the following resources
+BackfillCpusPerSlot = 1
+BackfillMemoryPerSlot = 1000
+
+# First tell the startd we have double the amount of cpus and memory than we actually have
+# and advertise some additional information into the slots (such as the amount
+# of Cpus, Memory leftover in the pslot.
+#
+num_cpus = 2 * $(DETECTED_CPUS)
+memory = 2 * $(DETECTED_MEMORY)
+startd_attrs = $(startd_attrs) BackfillSlot preempt want_vacate
+startd_slot_attrs = $(startd_slot_attrs) Cpus Memory
+# Decrease startd polling internal so backfill jobs are killed quickly when
+# production jobs arrive.
+polling_interval = 2
+
+# Set up a pslot for the production jobs, adding a START requirement to
+# prohibit accepting backfill jobs.  If you already have a p-slot configuration
+# you only need to add the slot_type_1_start expression below. It prevents BOINC
+# workfetch jobs from starting on the p-slot.
+#
+slot_type_1_partitionable = true
+slot_type_1 = cpus=$(DETECTED_CPUS) memory=$(DETECTED_MEMORY) gpus=100% disk=50% swap=50%
+num_slots_type_1 = 1
+slot_type_1_BackfillSlot = False
+slot_type_1_start = $(START) && (Owner != "$(BOINC_owner)")
+
+#
+# Set up a set of static slots for backfill jobs.  The number of static slots
+# is determined by how many CPUs/Memory required per slot.  Set the START expression
+# to only accept backfill jobs, and only if the pslot has enough free resources.
+# Preempt backfill slots one at a time as unused resources in the pslot disappear.
+# Give this slots a custom name of "backfillX@foo", and a custom attribute of
+# BackfillSlot=True.  Disable vacate on these slots, so that jobs are immediately killed
+# upon preemption (we want the resources freed up asap for the production jobs).
+#
+NumBackfillSlots = min( { $(DETECTED_CPUS) / $(BackfillCpusPerSlot), $(DETECTED_MEMORY) / $(BackfillMemoryPerSlot) } )
+Backfill_Cpus_Exhausted = (slot1_Cpus / $(BackfillCpusPerSlot) < (SlotID - 1))
+Backfill_Memory_Exhausted = (slot1_Memory / $(BackfillMemoryPerSlot) < (SlotID- 1))
+Backfill_Resources_Exhausted = ( $(Backfill_Cpus_Exhausted) || $(Backfill_Memory_Exhausted) )
+slot_type_2_partitionable = false
+slot_type_2_name_prefix = backfill
+slot_type_2 = cpus=$(BackfillCpusPerSlot) memory=$(BackfillMemoryPerSlot), gpus=0
+num_slots_type_2 = $INT(NumBackfillSlots)
+slot_type_2_BackfillSlot = True
+slot_type_2_start = (Owner == "$(BOINC_backfill)") && ($(Backfill_Resources_Exhausted) == False)
+slot_type_2_preempt = $(Backfill_Resources_Exhausted)
+slot_type_2_want_vacate = False
+{endcode}
+
 {section: How to submit backfill jobs as a user}
 
 The previous example showed how to configure an execute node to generate its own low-priority tasks to backfill the time that is unused by jobs from users.  Another way to backfill the system is to simply submit jobs the usual way, but give them lower priority than all other jobs.  One convenient way to do this is to use the nice_user submit-file command.  This automatically reduces the priority of the job, but if you want the nice-user jobs to be preempted, be sure that your job management policy allows this.