add Type Casting; Extensions; Protocols