make stage update on demand instead of every tick