Revise Observer.
Revise Prototype.
merge with upstream
Merge branch 'master' into data-locality