Add factory support
Add basic tests
Add better error handling
Add code coverage
Add example application