make sure the shape does not change with this PR. It will break people's code.