add an experimental base class with useful helpers - for #9