upraveny kod na prehladnejsiu verziu, rozdelenie do tried