Made more abstract, Interface added