improve to_array