update to use observable