@eteq @adrn - Can you think of any reason that `SkyCoord.transform_to` should not accept a `SkyCoord` and then just use the `coordobj` like above?  That would allow tidying of code like this, so there is less distinction between a SkyCoord object and a frame instance with data at this level.
```
if isinstance(other, (SkyCoord, BaseCoordinateFrame)) and other.has_data:
    self_in_other_system = self.transform_to(other)
```