-add non key options support
-clean up project structure