SIP (Session Initiation Protocol) is an application-layer signaling protocol commonly adopted by VoIP systems nowadays. It provides personal mobility by allowing a user identified by a unique logical address to register to a proxy server multiple contact addresses, one corresponding to each SIP-enabled terminal the user may use. To setup an inviting session, the SIP proxy server forwards signaling messages to all registered contact addresses, a process referred to as call forking. Call forking process may degrade the performance of the proxy server. To alleviate the problem, this article proposes two-stage forking approaches, which partition all contact addresses into two groups based on their relative priorities, and perform call forwarding for one group at a time. The second-stage call forking process can be skipped when the callee successfully responds in the first stage, which significantly lowers signaling cost and processing latency. We discuss the management of these groups, with experiments conducted to demonstrate the effectiveness and efficiency of the proposed approaches.