TELUK INTAN Polls close at 5pm with a relatively low turnout of 67.4 percent votes and 40,236 votes.
This is below the DAP target of 70 percent, which it had hoped can push its newbie candidate Dyana Sofya Mohd Daud ahead of against BN veteran Mah Siew Keong.
In 2013, turnout at Teluk Intan was a record 80.4 percent. DAP had then won with a majority of 7,313 or 15 percent of total votes.
LIVE REPORTS
10pm: Mah leaves the tally centre in garlands as his supporters vociferously chant his name.
Leaders from all major BN component parties are present to flank Mah, who looks exhausted but manages a subtle smile throughout.
9.45pm: The Election Commission revises the voters turnout - from 66.7 to 67.4 percent.
9.35pm: Official result as annouced by the Election Commission -
BN - 20,157
DAP - 19,919
Majority - 238
Percentage of majority - 0.6 percent
9.24pm: Activist Marina Mahathir congratulates Mah for the victory but also gives newcomer Dyana a pat on the back.
"I'd like to congratulate Mr Mah for winning and (Dyana) for almost getting there. Good show for a newbie," she said on Twitter.
Marina, who is former prime minister Dr Mahathir Mohamad's daughter, earlier gave a thumbs up to Dyana as she thought the 27-year-old is a bright young woman.
However, Marina also clarified that it was not an endorsement for the DAP.
9.15pm: SMK Abdul Rahman Talib -
EC officials have withheld the announcement of the final ballot boxes for the past hour.
8.58pm: DAP operation centre - DAP supporters are seen shedding tears and consoling each other. [Watch video]
8.24pm: QUICK ANALYSIS
There appears to be a slight swing of Chinese voters back to BN.
Significantly, Batu 12, a previous DAP stronghold was won by BN. DAP won by 68.5 percent of votes last year.
This time, BN won by 51.53 percent. BN won all three voting streams at the Chinese new village.
Batu 12 is located on the outskirts of Teluk Intan, but stream data shows BN also gaining in town areas.
BN raises its takings in Chinese-majority polling stations at Pasir Bedemar, a town area won by the DAP in 2013.
8.20pm: Gerakan operation centre - Victorious candidate Mah Siew Keong speaks to his supporters after a short meeting with his campaign team.
He urges for everyone to stay calm should there is any dispute of the results.
"Have you eaten? Where is the Kentucky (Fried Chicken)?
"The unofficial results are out but our opponent is now challenging the result.
"If the Election Commission does a recount in the next few hours we can be patient, unlike that other party which is so impatient that they wrote everything on the internet that they had won.
"We respect the law and we are patient. Have you eaten? Let's eat together," he says to applause from supporters.
8.09pm: DAP Canning state assemblyperson Wong Kah Woh asks supporters to be calm and says the party will work harder at the next general election.
Since the unofficial result is very close, the party will look at the possibility of a recount, he says.
"There is over 500 of majority votes, and since the majority is marginal, we are looking at the possibility to recount," he said through a megaphone.
"The team is now considering if we are going to recount."
This despite the fact that election regulations do not allow recounts after ballot boxes are sealed.
A recount can only be done at the counting centres, before ballot boxes are sealed and polling agents sign off on the tally at voting stream levels.
A recount can only be done if the difference between the votes by each candidate received, at the stream level, is less than four percent.
7.55pm: BN candidate Mah Siew Keong arrives at the party's operation centre all smiles and shakes hands with supporters.
His supporters carry him while chanting: "Mah Siew Keong!"
7.50pm : Gerakan claims victory.
"Official result, we won 100-plus (votes)," Selangor Gerakan Wanita chief Chia Ting Ting says on Facebook.
However, DAP's unofficial count shows that BN won with a majority of 238 votes.
DAP - 19,919 (49 percent)
BN - 20,157 (49.6)
Spoilt votes - 550
Majority - 238
Total votes (including early and postal voting) - 40,626
7.47pm: Only votes from Sungai Bugis, a BN stonghold, are still not counted.
7.43pm: Unofficial results
DAP - 19,830
BN - 19,805
Spoilt votes - 542
Majority - 25
About 99.85 percent of the votes counted.
7.41pm: Unofficial results.
DAP - 19,616
BN - 19,548
Spoilt votes - 525
Majority - 68
98.6 percent of votes counted.
Gerakan supporters cheer as Mah cuts in further on Dyana's lead.
7.39pm: Unofficial results
DAP - 19,529
BN - 19,288
Spoilt votes - 509
Majority - 241
About 97.7 percent of the votes counted.
7.37pm: Unofficial results.
DAP - 19,508
BN - 19,219
Spoilt votes - 504
Majority - 289
97.5 percent of votes counted.
7.28pm: Unofficial results
DAP - 19,279
BN - 18,581
Spoilt votes - 485
Majority - 1,148
About 95.3 percent of the votes counted.
7.29pm: Unofficial results
DAP - 19,202
BN - 18,379
Spoilt votes - 480
Majority - 823
95.5 percent of votes counted.
7.28pm: Unofficial results
DAP - 18,769
BN - 18,069
Spoilt votes - 474
Majority - 700
About 93.6 percent of the votes counted. Still too close to call. This will go down to the wire.
7.26pm: Unofficial results
DAP - 18,172
BN - 17,541
Spoilt votes - 464
Majority - 631
90.8 percent of votes counted.
7.24pm: Unofficial results
DAP - 18,172
BN - 17,501
Spoilt votes - 464
Majority - 671
About 90.7 percent of the votes counted.
7.23pm: Unofficial results
DAP - 17,536
BN - 17,138
Spoilt votes - 458
Majority - 398
88.2 percent of votes counted.
7.21pm: Unofficial results
DAP - 17,314
BN - 17,044
Spoilt votes - 443
Majority - 270
87.3 percent of votes counted.
7.19pm: Unofficial results
DAP - 16,117
BN - 15,538
Spoilt votes - 432
Majority - 153
7.18pm: Unofficial results
DAP - 16,303
BN - 15,800
Spoilt votes - 418
Majority - 503
81.6 percent of votes counted
7.16pm: Unofficial results
DAP - DAP 16,117
BN - 15,538
Spoilt votes - 412
Majority - 579
About 80.5 percent of the votes counted.
7.13pm: Unofficial results
DAP - 15,796
BN - 14,805
Spoilt votes - 400
Majority - 991
7.09pm: Unofficial results
DAP - 14,635
BN - 13,348
Spoilt votes - 344
Majority - 1,287
71.9 percent of votes counted.
7.07pm: Unofficial results
DAP - 14,426 (51.7 percent)
BN - 13,135 (47.1 percent)
Spoilt votes - 342
Majority - 1,291
About 70 percent of the votes counted.
7.03pm: Unofficial results
DAP - 13,054
BN - 11,843
Spoilt votes - 306
Majority - 1,211
Mah has closed the gap from trailing 2,000 votes to around 1,200.
The votes being tallied now are from polling centres in Changkat Jong. Changkat Jong is a state constituency under Teluk Intan won by BN in 2013.
7.01pm: Unofficial results
DAP - 12,957
BN - 11,484
Spoilt votes - 294
Majority - 1,473
62 percent of votes counted
7.00pm: SMK Abdul Rahman Talib - The main road in front tally centre sees a 2 kilometre-long bumper-to-bumper crawl as the traffic policemen are seen blocking some junctions along the road, to make way for the EC officers who are carrying in ballot boxes.
The traffic snarl even extended to the school compound, with more than 20 cars ferrying ballot boxes are waiting to place the boxes to the hall.
Deployment of traffic police along the road is significant, with many of them directing both EC cars as well as other motorists.
6:58pm: Unofficial results
DAP - 12,736
BN - 11,015
Spoilt votes - 274
Majority - 1,723
60.3 percent of the votes counted.
6:56pm: Unofficial results
DAP - 12,407
BN - 10,518
Spoilt votes - 258
Majority - 1,889
6:55pm: Unofficial results
DAP - 12,368
BN - 10,279
Spoilt votes - 249
Majority - 2,089
6.54pm: Unofficial results
DAP - 12, 081
BN - 9,936
Spoilt votes - 240
Majority - 2,145
6:50pm: Unofficial results
DAP - 11,362 (54.3%)
BN - 9,451 (44.7%)
Spoilt votes - 232
Majority - 1,911
6:48pm: Unofficial results
DAP - 10,368
BN - 8,571
Spoil votes - 213
Majority - 1,797
Around 50 percent of the votes counted.
6:45pm: Unofficial results
DAP - 10,000
BN - 8,287
Spoilt votes - 204
Majority - 1,713
6:44pm: Unofficial results
DAP 9,264
BN - 7987
Spoilt votes - 197
Majority - 1,277
Over 45 percent of the votes counted.
6.42pm: DAP supremo Lim Kit Siang said he was disappointed with the 66.5 percent turnout rate.
"We wish to have 75 percent to 80 percent voters," he said at the DAP operation centre.
Approximately 500 supporters are here to watch the live telecast of the tally.
Everytime the results are favourable to the DAP, the crowd cheers like football fans at a match.
6.41pm : SMK Abdul Rahman Talib - The environment at the tally centre is calm as allot boxes continue streaming in.
Surrounding the place there has been very little activity from any political parties.
DAP - 8,525
BN - 7,421
Majority - 1,10
DAP - 8,060
BN - 6,932
Spoilt votes - 176
Majority - 1,128
Total counted: 15,168 (38.06 percent)
6.31pm: Unofficial results
DAP - 7,216
BN - 6,495
Spoilt votes - 168
Majority - 721
Total counted: 13,879 (37.66 percent)
6.28pm: Unofficial results
DAP- 6,435
BN - 5,716
Spoilt votes - 142
Majority - 719
More than 30 percent of votes counted.
6.25pm: Unofficial results
DAP - 5,578
BN - 4,971
Spoilt votes - 113
Majority - 608
6.22pm: Unofficial results
DAP - 5,424
BN - 4,884
Spoilt votes - 112
Majority - 540
6.19pm: Unofficial results
DAP - 5,078
BN - 4,495
Spoilt votes - 107
Majority - 583
About one quarter of the votes counted.
6.17pm: Unofficial results
DAP - 4,604
BN - 4,005
Spoilt votes - 102
Majority: 599
6.13pm: Unofficial results
DAP - 3,680
BN - 3,665
Spoilt votes - 100
Majority - 15
6:12pm: Unofficial results
BN - 3,211
DAP - 3,053
Spoilt votes - 95
Majority -158
6.11pm: Unofficial results
BN - 2,636 (51.5 percent)
DAP- 2,483 (48.5 percent)
Mah leads with 153 votes.
6.05pm: Unofficial results
BN - 572
DAP - 463
6pm: Unofficial results
BN - 473
DAP - 413
DAP supremo Lim Kit Siang says in a tweet message that the voters turnout is low.
“66.5% - quite a poor disappointing voter turnout in the Teluk Intan by-election as compared to 80.4% last May in the 13GE. Can be a toss-up!”
5.50pm: The relatively low turnout of 66.5 percent is giving BN early confidence that it could wrest Teluk Intan from the DAP.
"Personally, I feel BN has won!" former Perak senior executive councillor Hamidah Osman tweets.