Moved get_extra_join_sql() method into a lightweight object to prevent storing direction state in the field object -- that looked very fragile. Thanks akaariai for help