working on protocol
restructorize protocol