Refactor compositor

r? @metajack