refactoring to handle the weird combination cases (with test)
version bump + changelog update
Merge branch 'release/0.0.3'
Merge tag '0.0.3' into dev

v0.0.3 release
 * major refactoring