Split up ButtonReceiver, added abstractions