implementing different use cases