Restructure events
Simplify element lifecycle