code review changes, abstracted classes and hints