refactor & added few interface