implemented much of attributes and methods