Gang, I am new to freeswitch and have been studying it for the last week. A few questions regarding the architecture. Any input will be greatly appreciated. 1. Thread architecture. For a basic call, why do we need two threads for the sessions (one for each endpoint)? While the thread in charge of originator is in the switch_core_standard_on_execute(), the other thread is in the switch_core_session_run() while loop. What's advantage of doing this compared to Asterisk's one thread approach? Why do we need the thread for the originatee? 2. What does CS_LOOPBACK really mean? When A calls B, B is in the LOOPBACK state after the call is established. Yet, the switch_core_on_loopback() is not really called. 3. When A calls B and before B answers, the caller session thread does busy waiting by constantly calling check_channel_status(). Is there a better approach than this? And with this architecture how are we going to incorporate with the voice mail and other timer-based applications? 4. When the orginatee hangs up, the exosip_kill_channel() was called 3 times just for the orginatee channel. The same function is called twice for the originator channel. Is this by design? Thanks, Alex