Basic Refactor

Nothing special
Partial Implementation of Case1

Still need the final test and any others that we can think of.
Merge remote-tracking branch 'origin/master' into BlakeDev