node properties: separate into static and dynamic
node properties: store as an alist