First version with compile issue to be fixed and class names to be refactored later