add type checking system