Немного подчистил код и добавил комментариев