list implementation improved