starting to encapsulate all of the generic features