improve structure to allow aggregation