added some function pointer typedef