major refactoring..
introduced object oriented approaches