OAKLAND (CBS SF) — Councilwoman Libby Schaaf’s supporters were excited, but by no means was she declaring victory Tuesday night. Barely 3 hours after the polls closed, only 25% of the vote had been counted and she led the race with 25% of the vote.

Oakland’s hotly contested mayoral race may not be decided before Thursday. It will come down to 3 candidates and an instant runoff. Oakland has a ranked-choice system. Instead of choosing between 2 candidates, one Democratic and one Republican, voters cast a first, second and third choice vote.

READ MORE: Santa Clara Shoe Store Ransacked in Late Night Smash-and-Grab Robbery

The latest polls have favored Schaaf and four other candidates — Rebecca Kaplan, incumbent Mayor Jean Quan, law professor Joe Tuman, and Port Commissioner Bryan Parker.

Fifteen candidates were on the ballot. The one thing they all had in common is a desire to unseat incumbent Mayor Jean Quan.

All 5 campaigned down to the wire, even on election day.

At a debate held at the Head Royce School Monday night, Schaaf vowed to continue to fuel Oakland’s economic renaissance. Kaplan touted more local jobs to stem unemployment. Parker implored voters to reject the status quo. Tuman blasted Quan for the city’s poor schools and for outsourcing security. Amid the chorus of criticism, Quan told voters to consider her record.

READ MORE: New Twitter CEO Parag Agrawal Steps From Behind The Scenes To High Profile

View Results From Bay Area, Statewide.
National Election Results From CBS News
Video: KPIX 5 Election Coverage
County-By-County Election Results
CBS SF Politics Section

Ranked-choice voting in Oakland began in 2006 when voters approved Measure O. It is also called “Instant Run-Off Voting.” The practice is complex and sometimes confusing for some voters.

“It is the system we got and I hope the voters will make the right decision today,” Schaff told KPIX 5.

MORE NEWS: Mayor Schaaf Pushes to Reverse Oakland's Police Cuts During Spike In Violence

[display-posts category=”trending” wrapper=”ul” posts_per_page=”6″]