super awesome object oriented solution