build out primary functionality