Initial Commit
contains many design patterns