Changes. #3
Finnished Implementation. Closed #5
Finnished Interfaces. Closed #8