move reusable code out
BC specification