extracted classes into projects

extracted some classes into their own projects for easier understanding,
and separation.

still need to fix information provider circular dependency before moving
on.