modify it to more readable; add comment