Make Term non-abstract and add field type checks