Using abstract builder to extract common code (thanks @Turini)