[#16] extracted classes into separate files