Version 3 - Working version with all use cases implemented