use a typemap instead