I wonder why basic_fields() name - wouldn't concrete_fields() match better virtual/concrete naming used elsewhere?