This logic is broken - it won't read private properties of subclasses. On a plus, it's very very fast