observer pattern
Merge branch 'origin/draft'