В конце концов атаковал Ярослав. Ему помогло то, что печенежские союзники были отделены от основных сил Святополка озером, которое покрылось тонким льдом. Нападение было неожиданным, ночным. Чтобы отличить своих, новгородцы повязали головы белыми платками. Киевская дружина не выдержала удара, побежала и была частью перебита, частью провалилась под лед.
Ярослав занял отцовскую столицу и объявил себя великим князем. Но война на этом не закончилась.