more node-like implementation