Massive refactor

Pull everything out into decorators