updated with partitioning
foo