try to understand how it works