Base implementation takes care of a lot of boilerplate code. Change-Id: Iaf5a16f5718727cee0f7efb4af53a021536f50d8