many UI improvements, abstracted out filter functionality into a class so it's easily reusable