Code changed and restructured with IoC and MVP.