use id instead of NSObject pointers