add node abstraction and grouping