rewrite: use best practices from angular-listview