added node abstraction