TODO: Implement all functionality :))