most of the business layer classes implemented