A 14-year-old boy shot his teacher in a Belgrade classroom on Wednesday morning before opening fire on other students and security guards, killing eight pupils and a security guard, Serbia's interior ministry said.
Milan Milosevic, the father of one of the pupils at the Vladislav Ribnikar elementary school, said his daughter was in the class where the gun was fired.
"She managed to escape. (The boy) ...first shot the teacher and then he started shooting randomly," Milosevic told broadcaster N1.
Milan Nedeljkovic, mayor of the central Vracar district where the school is located, said doctors were fighting to save the teacher's life.
The interior ministry statement said eight children and a security guard had been killed and six children had been hospitalised along with the teacher.
Police said a seventh-grade student had been arrested.
"I saw the security guard lying under the table. I saw two girls with blood on their shirts. They say he (the shooter) was quiet and a good pupil. He recently joined their class," added Milosevic, who had rushed to the school after the shooting.
Officers in helmets and bulletproof vests cordoned off the area around the school.
"I saw kids running out from the school, screaming. Parents came, they were in panic. Later I heard three shots," a girl who attends a high school adjacent to Vladislav Ribnikar told state TV RTS.
Casualties are being treated and an investigation into the motives behind shooting is under way, police said in a statement.
Mass shootings are comparatively rare in Serbia, which has very strict gun laws. But the western Balkans are awash with hundreds of thousands of illegal weapons following wars and unrest in the 1990s.
Serbian authorities have issued several amnesties for owners to hand in or register illegal guns.


Indonesia reopens Jakarta airport, four others after Anak Krakatau ash clears
Russian ballistic missiles hit Kyiv as US envoys leave
Kenya offers temporary amnesty to undocumented East Africans amid crackdown fears
7 Indonesian airports remain shut due to volcanic ash from Anak Krakatau
Bolivia confirms 9 deaths after military base explosion
Israeli strikes on southern Lebanese town kill 11, state news agency saysÂ
Nepal marks national mourning day after deadly flood
Far-right AfD wins historic victory in German state election
