new implementation of list