Iraqi officials say their forces have driven out Islamic State (IS) fighters from the oil refinery town of Baiji, 200km (130 miles) north of Baghdad.
Gen Abdul-Wahab al-Saadi told Iraqi state TV that the town "had been completely liberated".
There are still reports of heavy fighting around the oil refinery, which is Iraq's largest.
IS seized Baiji in June during a lightning advance through northern Iraq and laid siege to the refinery.
The group, which also controls large parts of northern Syria, has been the target of a US-led military campaign since August.
Iraqi troops took control of large parts of Baiji on Sunday, but stopped short of advancing on the refinery, the road to which is believed to be heavily booby-trapped.
Iraqi war planes targeted fleeing IS fighters near the refinery on Friday, an Iraqi army captain told Reuters news agency.
Other reports suggested Iraqi troops had now broken through to the besieged oil facility, which lies around 10km (6 miles) from the town centre.
Officials told AP that the Iraqi army used loudspeakers to warn residents to stay indoors during the operation.
Around 200,000 people live in the town, and the refinery accounts for around a quarter of Iraq's oil production.
Analysis: Hugh Sykes, BBC News, Baghdad
Baiji is on the main road between Baghdad and Iraq's second-largest city, Mosul, which has been under IS control since early summer.
If the Iraqi army does regain control of the area, it could be a turning point. Controlling Baiji and, importantly, the road that runs between the refinery and the town, would cut the militant group's supply lines to Tikrit, which they still occupy, further to the south.
If entirely liberated, the Baiji area could be used as a base for trying to drive IS out of Tikrit as well.
That would cut IS communication with two other key towns that they still occupy south of Tikrit, Samarra and Dujayl, which are about 60km (40 miles) from Baghdad.