Updated to use promises
Cleaned up unsubscribe by returning key from subscribe