extracted inner classes