add container abstraction
change list function
fix tests