added soft/hard constraints and allowed preemptive erasing functionality