refactor: shared metatable