Introduce ElementListener
working on tree component separation