some optimizations, and non-virtual table complete