Abstract out Has and Version as metadata