rewrite for better understnading