Implemented ALL desired functionality