fix certain edge cases around setting values within an observer that cause the observer to indirectly call itself (see #229)
rebuilt