fixed upcast