uses NumField() instead of panic catch