you might be able to do something to get rid of the lateinit but you would just end up with an extra allocation and the property would still need to be a var. Injection would also have to happen through the set methods rather than field injection so you would have two extra method calls per injected property.(although I doubt you would notice a perf difference in practice) not sure how using a delegated property would affect the annotation processor at all.