refactor to use astral