refactoring, plus introduced Listable interface
comments (todo)