bit of hacking around the spike code, replaced inheritance with delegation, extracted an interface