Massive rework into more Object Orientated format.