Добавлено вразброс немного структуры. Много всячины для разбираться.