working on basis, full implementation