added Either trait