I agree with static being confusing. I don’t think companion objects are the right solution, though. Another related think I don’t really like in Kotlin relatively to Java is that in Java I can write small private helper methods right next to the normal (often public) methods. These are often static because they don’t need to access object data. In Kotlin I can either not make them static, which feels wrong, or I can put them outside of the class, which leads to much scrolling or file switching when the static helper method belongs to 1 or 2 normal methods and should be grouped with them. Or I can put it into the companion object which feels wrong and also leads to scrolling. (Or I think you can nest methods in Kotlin, but that creates it’s own problems and is rather unusual.)