uses strings everywhere for node ids