optimize flatten function