avoid eval
pep8
small optimization
introduced provider classes and improved test coverage
pep8 and pyflakes
factored out search filter for better testability
fixed main-method