Refactor models

@ParthSetya - Please review. 

I'm done with refactoring, but still thinking if we are missing any fields. I guess best way to check would be graphviz?