almost have hacky function pointer vtable in