massive refactoring to have a pluggable design
massive refactoring to have a pluggable design