wrapped everything into classes