preserve interface type when calling primitive