prototype style, and optimize