Revise Observer.
Revise Prototype.
merge with upstream