tree-based denormalization
added spec