added license headers and fixed callbacks to be interfaces rather than abstract classes