debouncing reset for performance, will split adds and removes into a separate update function later